diff --git a/.github/workflows/data-update-wqx.yml b/.github/workflows/data-update-wqx.yml index be6d6769..eb8e64ef 100644 --- a/.github/workflows/data-update-wqx.yml +++ b/.github/workflows/data-update-wqx.yml @@ -11,24 +11,18 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Set up Node.js - uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 + uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: node-version: 22.x registry-url: "https://npm.pkg.github.com" + cache: 'npm' - name: Create .npmrc run: | echo "//npm.pkg.github.com/:_authToken=${{ github.token }}" >> ~/.npmrc - echo "@gordonfn:registry=https://npm.pkg.github.com" >> ~/.npmrc + echo "@datastreamapp:registry=https://npm.pkg.github.com" >> ~/.npmrc echo ".npmrc" >> .gitignore - - name: Cache npm - uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 - with: - path: ~/.npm - key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} - restore-keys: | - ${{ runner.os }}-node- # - # name: Install dependencies # run: | diff --git a/.github/workflows/ossf-scorecard.yml b/.github/workflows/ossf-scorecard.yml index 12868a06..f0c3b29b 100644 --- a/.github/workflows/ossf-scorecard.yml +++ b/.github/workflows/ossf-scorecard.yml @@ -32,12 +32,12 @@ jobs: steps: - name: "Checkout code" - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false - name: "Run analysis" - uses: ossf/scorecard-action@62b2cac7ed8198b15735ed49ab1e5cf35480ba46 # v2.4.0 + uses: ossf/scorecard-action@99c09fe975337306107572b4fdf4db224cf8e2f2 # v2.4.3 with: results_file: results.sarif results_format: sarif @@ -59,7 +59,7 @@ jobs: # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF # format to the repository Actions tab. - name: "Upload artifact" - uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: SARIF file path: results.sarif @@ -68,6 +68,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard (optional). # Commenting out will disable upload of results to your repo's Code Scanning dashboard - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@babb554ede22fd5605947329c4d04d8e7a0b8155 # v3.27.7 + uses: github/codeql-action/upload-sarif@7fc6561ed893d15cec696e062df840b21db27eb0 # v4.35.2 with: sarif_file: results.sarif diff --git a/.github/workflows/sec-sast-codeql.yml b/.github/workflows/sec-sast-codeql.yml index 07d38890..c9c39757 100644 --- a/.github/workflows/sec-sast-codeql.yml +++ b/.github/workflows/sec-sast-codeql.yml @@ -27,19 +27,19 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@babb554ede22fd5605947329c4d04d8e7a0b8155 # v2.27.7 + uses: github/codeql-action/init@7fc6561ed893d15cec696e062df840b21db27eb0 # v4.35.2 with: languages: ${{ matrix.language }} queries: +security-and-quality - name: Autobuild - uses: github/codeql-action/autobuild@babb554ede22fd5605947329c4d04d8e7a0b8155 # v2.27.7 + uses: github/codeql-action/autobuild@7fc6561ed893d15cec696e062df840b21db27eb0 # v4.35.2 - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@babb554ede22fd5605947329c4d04d8e7a0b8155 # v2.27.7 + uses: github/codeql-action/analyze@7fc6561ed893d15cec696e062df840b21db27eb0 # v4.35.2 with: category: "/language:${{ matrix.language }}" diff --git a/.github/workflows/sec-sast-sonarcloud.yml b/.github/workflows/sec-sast-sonarcloud.yml index a954621a..383ef499 100644 --- a/.github/workflows/sec-sast-sonarcloud.yml +++ b/.github/workflows/sec-sast-sonarcloud.yml @@ -14,12 +14,12 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: fetch-depth: 5 - - name: SonarCloud Scan - uses: sonarsource/sonarcloud-github-action@02ef91109b2d589e757aefcfb2854c2783fd7b19 # 4.0.0 + - name: SonarQube Scan + uses: SonarSource/sonarqube-scan-action@59db25f34e16620e48ab4bb9e4a5dce155cb5432 # v8.0.0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} diff --git a/.github/workflows/sec-secrets.yml b/.github/workflows/sec-secrets.yml index 06efcaeb..b0b9dc0c 100644 --- a/.github/workflows/sec-secrets.yml +++ b/.github/workflows/sec-secrets.yml @@ -12,7 +12,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repository - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + fetch-depth: 0 - name: TruffleHog Scan - uses: edplato/trufflehog-actions-scan@6cf4d6ab0edcfee4251c8c4d214e3655b84c6cb6 # 0.9m-beta + uses: trufflesecurity/trufflehog@17456f8c7d042d8c82c9a8ca9e937231f9f42e26 # v3.95.2 diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 3cb2401b..5dc822d3 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -11,27 +11,21 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Set up Node.js - uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 + uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: node-version: 22.x registry-url: "https://npm.pkg.github.com" + cache: 'npm' - name: Create .npmrc run: | - echo "@gordonfn:registry=https://npm.pkg.github.com" >> ~/.npmrc + echo "@datastreamapp:registry=https://npm.pkg.github.com" >> ~/.npmrc echo ".npmrc" >> .gitignore - - name: Cache npm - uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 - with: - path: ~/.npm - key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} - restore-keys: | - ${{ runner.os }}-node- - name: Install dependencies run: | npm install - name: Build and test run: | - npm test + npm test \ No newline at end of file diff --git a/.gitignore b/.gitignore index 588ccb8b..5d49c10a 100644 --- a/.gitignore +++ b/.gitignore @@ -69,5 +69,4 @@ typings/ .DS_Store # AI - CLAUDE.md \ No newline at end of file diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 00000000..b774a4bc --- /dev/null +++ b/.prettierignore @@ -0,0 +1,4 @@ +# Build-generated source — owned by the build (build-values / build-locales). +# Keep their JSON.stringify output so Prettier and the build don't fight. +schemas/data/src/values +schemas/data/src/locales \ No newline at end of file diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 00000000..17b1d52e --- /dev/null +++ b/.prettierrc @@ -0,0 +1,5 @@ +{ + "semi": false, + "singleQuote": true, + "trailingComma": "es5" +} \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..38d74b54 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,90 @@ +# Changelog + +All notable changes to `@datastreamapp/data-schema` are documented in this file. + +The format is loosely based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased] + +Targets `3.0.0`. Introduces **Groundwater support** to the DataStream schema. + +### Added + +- **Groundwater media** — `Groundwater` added to `ActivityMediaName`, plus new Groundwater-related fields covering well identification, aquifer attributes, well construction depths, sample-collection method, and depth-altitude reference: + - `MonitoringLocationVerticalAccuracyMeasure`, `MonitoringLocationVerticalAccuracyUnit`, `MonitoringLocationVerticalCollectionMethod`, `MonitoringLocationVerticalCoordinateReferenceSystem` + - `WellID`, `WellIDContext`, `WellUseType` + - `AquiferCode`, `AquiferUnitName`, `AquiferType`, `AquiferUnitPorosityType`, `LithologyType` + - `BoreholeDepthMeasure` / `Unit`, `WellDepthMeasure` / `Unit`, `WellOpenIntervalTopMeasure` / `Unit`, `WellOpenIntervalBottomMeasure` / `Unit` + - `ActivityDepthAltitudeReferencePoint`, `ActivityDepthAltitudeReferencePointMeasure`, `ActivityDepthAltitudeReferencePointUnit` + - `SampleCondition`, `SampleCollectionMethodID`, `SampleCollectionMethodContext`, `SampleCollectionMethodName` +- **Groundwater conditional logic rules** (errors block submission): + - `GroundwaterFields-ActivityMediaName-Groundwater` — Groundwater-only fields require `ActivityMediaName` of `Groundwater` or `Porewater`. + - `ActivityMediaName-Groundwater-DepthMeasure` — at least one depth measure required. + - `ActivityDepthHeightMeasure-ActivityDepthAltitudeReferencePoint` — reference point required when depth is reported. + - `CharacteristicName-WaterLevel-ActivityDepthAltitudeReferencePoint` — reference point required for water-level observations. + - `MonitoringLocationType-Well-WellUseType` — well/piezometer locations require `WellUseType`. + - `MonitoringLocationType-Well-SampleCondition` — well/piezometer locations require `SampleCondition` (except continuous time series). +- **Groundwater-related enum additions** (forward-compatible): + - `MonitoringLocationType`: `Borehole`, `Dug Well`, `Multilevel Well`, `Nested Well`, `Other-Ground Water`, `Piezometer`, `Seep`, `Sump`, `Well` + - `MonitoringLocationHorizontalCoordinateReferenceSystem`: `OTHER` + - `MonitoringLocationVerticalUnit`: `ft`, `m` + - `SampleCollectionEquipmentName`: `Air line`, `Bailer`, `Hydrasleeve`, `Snap sampler`, `Tubing`, `Water level meter`, `Wetted tape` + - `CharacteristicName`: `Water level elevation`, `Water level in well, depth from a reference point` +- **`EventID` field** — optional free-text identifier (max 255 characters) for grouping observations by field sampling event; available for all data types. +- **Input-safety checks on new free-text ID/name fields** — `EventID`, `WellID`, `AquiferCode`, `SampleCollectionMethodID`, and `SampleCollectionMethodName` now get the same CSV-injection and leading/trailing-whitespace checks as existing text columns like `LaboratorySampleID`. +- **`ResultStatusID` deprecation warning** — new quality-control warning `ResultStatusID-Deprecated`: `Final` and `Accepted` are flagged as no longer recommended (use `Preliminary`, `Provisional`, or `Validated`). The values remain valid in the enum; the warning does not block submission. +- **Q2 2026 WQX update** (`wqx` `3.0.260` → `3.0.276`): new values across `CharacteristicName`, `ActivityType`, `ResultAnalyticalMethodContext`, and `SampleCollectionEquipmentName`. + +### Changed + +- **`AnalysisStartTime` / `AnalysisStartTimeZone` co-dependency relaxed** — `AnalysisStartTime` without `AnalysisStartTimeZone` is no longer an error; it is now a quality-control warning (`AnalysisStartTime-AnalysisStartTimeZone`). The reverse — `AnalysisStartTimeZone` without `AnalysisStartTime` — remains an error. +- **`ActivityType`, `ResultSampleFraction`, and `ResultValueType` restricted to a curated subset** in the strict flavors (`primary`/`frontend`/`extract`); these now use an allowed-value list (`subset/`) rather than a removal list (`subtraction/`). Values outside the subset stay accepted by the loose `backend` import flavor. + +### Breaking + +- **New error — `ActivityDepthHeightMeasure` not allowed for depth characteristics** — new conditional logic rule `CharacteristicName-Depth-ActivityDepthHeightMeasure` (blocks submission): when `CharacteristicName` measures depth/height (e.g. `Depth of water column`, `Water level`, `Depth, Secchi disk depth`), `ActivityDepthHeightMeasure` and `ActivityDepthHeightUnit` must not be populated. Records that previously validated with a depth characteristic paired with an activity depth/height will now be rejected. +- **Top-level `$id`s now end in `.json`**, mirroring filesystem paths so JSON Schema URL resolution works without filesystem fallbacks. Consumers must update `$ref`s when upgrading: + - `https://datastream.org/schema/data/backend` → `…/backend.json` + - `…/frontend` → `…/frontend.json` + - `…/primary` → `…/primary.json` + - `…/extract` → `…/extract.json` + - `…/quality-control` → `…/quality-control.json` + - `…/definitions` → `…/definitions.json` +- **All value-file `$id`s renamed** from `.loose.json` / `.strict.json` to `.legacy.json` / `.primary.json` (≈50 files each). Any `$ref` to a `values/*.loose.json` or `values/*.strict.json` URL must be updated. +- **Misplaced `$id`s corrected** (drifted from their filesystem paths): + - `logic/ResultUnit-Salinity.json` (was `quality-control/ResultUnit-Salinity.json`) + - `quality-control/ResultDetectionQuantitationLimitMeasure-Minimum.json` (was `…MinimumMeasure-Minimum.json`) +- **`ActivityGroupType` values replaced** — `ActivityGroupType` is now a DataStream-defined enum (`Continuous Data`, `Field Measure`, `Lab Sample`, `Other`, `Quality Control - Field Measure`, `Quality Control - Lab Sample`, `Unspecified`) instead of the inherited WQX set (`Field Set`, `QC Sample`, `Replicate`, `Subsample`, `Trip` dropped; `Other`/`Unspecified` kept). The published `database/ActivityGroupType.json` value list and the `ActivityType` → `ActivityGroupType` mapping (`lookup/ActivityType-ActivityGroupType.json`) change accordingly. Downstream consumers that store ActivityGroupType values or UUIDs must migrate. +- **`ResultStatusID` value `Rejected` removed** from the allowed (strict) value set — records with `ResultStatusID` of `Rejected` are now rejected by `primary`/`frontend`/`extract` (the value remains in the loose `backend` enum for historical import). +- **New error — `ActivityDepthHeightMeasure` must be negative for certain media** — new conditional logic rule `ActivityMediaName-ActivityDepthHeightMeasure-Maximum` (blocks submission): when `ActivityMediaName` is `Ocean Water`, `Rainwater`, `Stormwater`, `Subsurface Soil/Sediment`, `Surface Water`, or `Surface Water Sediment`, `ActivityDepthHeightMeasure` must be reported as a negative value. For `Groundwater`/`Porewater`, a positive depth instead raises the existing quality-control warning. + +## [2.29.0] - 2026-03-12 + +### Added + +- Q1 2026 WQX update: new values across `CharacteristicName`, `CharacteristicGroup`, `ActivityType`, `MeasurementUnit`, `ResultDetectionQuantitationLimitUnit`, `ResultUnit`, `SampleCollectionEquipmentName`. + +## [2.0.0] - 2020-07-26 + +- Rewrite build process to: + - Pull the latest version of WQX values and simplify future updates + - Improve maintainability and audit control +- `MonitoringLocationID` is now required +- `MonitoringLocationWaterbody` is now deprecated +- `MethodSpeciation` has new conditional requirements +- `ActivityMediaName` has new allowed values: `Ambient Air`, `Surface Water Sediment`, `Pore Water`, `Ocean Water` +- Additional checks to prevent the common issues people run into surrounding Dissolved Oxygen, Hardness, and others. See `src/logic/ResultValue-*.json`. + +## [1.0.0] - 2019-10-12 + +Starting from US EPA WQX: + +- `ProjectName` → `DatasetName` to be more generic. +- `ActivityDepthHeightMeasure` — added maximum restriction due to only recording water samples. +- `ResultAnalyticalMethodName` — added for readability. +- `ResultAnalyticalMethodID` — removed allowed values. +- `LaboratorySampleID` — added to improve metadata. +- `AnalysisStartTimeZone` — changed format to follow ISO 8601 (e.g. `-0600`). +- `ActivityStartTimeZone` / `ActivityEndTimeZone` — removed because they can be inferred from the location. +- `State` and `County` → `MonitoringLocationRegion` to allow for a broader meaning that can be applied internationally. \ No newline at end of file diff --git a/commitlint.config.cjs b/commitlint.config.cjs index a4f43697..98ee7dfc 100644 --- a/commitlint.config.cjs +++ b/commitlint.config.cjs @@ -1,3 +1,3 @@ module.exports = { - extends: ['@commitlint/config-conventional'] + extends: ['@commitlint/config-conventional'], } diff --git a/lint-staged.config.js b/lint-staged.config.js index aee44033..dddc0ec4 100644 --- a/lint-staged.config.js +++ b/lint-staged.config.js @@ -1,6 +1,6 @@ export default { - '**/*.js': ['prettier --write', 'standard --fix'], - '**/*.json': ['prettier --write'] + '**/*.js': ['prettier --write'], + '**/*.json': ['prettier --write'], // https://medium.com/slalom-build/pre-commit-hooks-for-terraform-9356ee6db882 // '**/*.tf': [ // 'terraform fmt -recursive -write', diff --git a/package-lock.json b/package-lock.json index 03f3a3a9..ae149944 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,54 +1,49 @@ { "name": "@datastream/schema-monorepo", - "version": "2.29.0", + "version": "3.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@datastream/schema-monorepo", - "version": "2.29.0", + "version": "3.0.0", "hasInstallScript": true, "license": "MIT", "devDependencies": { "@commitlint/cli": "^20.0.0", "@commitlint/config-conventional": "^20.0.0", - "ajv-cmd": "^0.7.0", - "ava": "^5.0.0", - "c8": "^11.0.0", + "ajv-cmd": "^0.13.0", "husky": "^9.0.0", "lerna": "^6.0.0", "lint-staged": "^16.0.0", "prettier": "^3.0.0", - "sinon": "^15.0.0", "standard": "^17.0.0" } }, "node_modules/@apidevtools/json-schema-ref-parser": { - "version": "11.9.1", - "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-11.9.1.tgz", - "integrity": "sha512-OvyhwtYaWSTfo8NfibmFlgl+pIMaBOmN0OwZ3CPaGscEK3B8FCVDuQ7zgxY8seU/1kfSvNWnyB0DtKJyNLxX7g==", + "version": "15.3.5", + "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-15.3.5.tgz", + "integrity": "sha512-orNOYXw3hYXxxisXMldjzjBzqqTLBPbwOtHg7ovBPvfBHDue1qM9YJENZ3W2BQuS+7z4ThogMbEzEsov57Itkg==", "dev": true, "license": "MIT", "dependencies": { - "@jsdevtools/ono": "^7.1.3", - "@types/json-schema": "^7.0.15", - "js-yaml": "^4.1.0" + "js-yaml": "^4.1.1" }, "engines": { - "node": ">= 16" + "node": ">=20" }, - "funding": { - "url": "https://github.com/sponsors/philsturgeon" + "peerDependencies": { + "@types/json-schema": "^7.0.15" } }, "node_modules/@babel/code-frame": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -57,37 +52,27 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" } }, - "node_modules/@bcoe/v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-1.0.2.tgz", - "integrity": "sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, "node_modules/@commitlint/cli": { - "version": "20.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-20.4.4.tgz", - "integrity": "sha512-GLMNQHYGcn0ohL2HMlAnXcD1PS2vqBBGbYKlhrRPOYsWiRoLWtrewsR3uKRb9v/IdS+qOS0vqJQ64n1g8VPKFw==", + "version": "20.5.2", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-20.5.2.tgz", + "integrity": "sha512-IXr5xd3IX8SEG936P8gcpozRplkDeDSwJlt8UvoY1winwIy2udTbQ/cOCgbaaxcjdDqVoS29VUcz/wkwnSozbA==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/format": "^20.4.4", - "@commitlint/lint": "^20.4.4", - "@commitlint/load": "^20.4.4", - "@commitlint/read": "^20.4.4", - "@commitlint/types": "^20.4.4", + "@commitlint/format": "^20.5.0", + "@commitlint/lint": "^20.5.0", + "@commitlint/load": "^20.5.2", + "@commitlint/read": "^20.5.0", + "@commitlint/types": "^20.5.0", "tinyexec": "^1.0.0", "yargs": "^17.0.0" }, @@ -99,13 +84,13 @@ } }, "node_modules/@commitlint/config-conventional": { - "version": "20.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-20.4.4.tgz", - "integrity": "sha512-Usg+XXbPNG2GtFWTgRURNWCge1iH1y6jQIvvklOdAbyn2t8ajfVwZCnf5t5X4gUsy17BOiY+myszGsSMIvhOVA==", + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-20.5.0.tgz", + "integrity": "sha512-t3Ni88rFw1XMa4nZHgOKJ8fIAT9M2j5TnKyTqJzsxea7FUetlNdYFus9dz+MhIRZmc16P0PPyEfh6X2d/qw8SA==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/types": "^20.4.4", + "@commitlint/types": "^20.5.0", "conventional-changelog-conventionalcommits": "^9.2.0" }, "engines": { @@ -113,13 +98,13 @@ } }, "node_modules/@commitlint/config-validator": { - "version": "20.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-20.4.4.tgz", - "integrity": "sha512-K8hMS9PTLl7EYe5vWtSFQ/sgsV2PHUOtEnosg8k3ZQxCyfKD34I4C7FxWEfRTR54rFKeUYmM3pmRQqBNQeLdlw==", + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-20.5.0.tgz", + "integrity": "sha512-T/Uh6iJUzyx7j35GmHWdIiGRQB+ouZDk0pwAaYq4SXgB54KZhFdJ0vYmxiW6AMYICTIWuyMxDBl1jK74oFp/Gw==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/types": "^20.4.4", + "@commitlint/types": "^20.5.0", "ajv": "^8.11.0" }, "engines": { @@ -127,13 +112,13 @@ } }, "node_modules/@commitlint/ensure": { - "version": "20.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-20.4.4.tgz", - "integrity": "sha512-QivV0M1MGL867XCaF+jJkbVXEPKBALhUUXdjae66hes95aY1p3vBJdrcl3x8jDv2pdKWvIYIz+7DFRV/v0dRkA==", + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-20.5.0.tgz", + "integrity": "sha512-IpHqAUesBeW1EDDdjzJeaOxU9tnogLAyXLRBn03SHlj1SGENn2JGZqSWGkFvBJkJzfXAuCNtsoYzax+ZPS+puw==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/types": "^20.4.4", + "@commitlint/types": "^20.5.0", "lodash.camelcase": "^4.3.0", "lodash.kebabcase": "^4.1.1", "lodash.snakecase": "^4.1.1", @@ -155,13 +140,13 @@ } }, "node_modules/@commitlint/format": { - "version": "20.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-20.4.4.tgz", - "integrity": "sha512-jLi/JBA4GEQxc5135VYCnkShcm1/rarbXMn2Tlt3Si7DHiiNKHm4TaiJCLnGbZ1r8UfwDRk+qrzZ80kwh08Aow==", + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-20.5.0.tgz", + "integrity": "sha512-TI9EwFU/qZWSK7a5qyXMpKPPv3qta7FO4tKW+Wt2al7sgMbLWTsAcDpX1cU8k16TRdsiiet9aOw0zpvRXNJu7Q==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/types": "^20.4.4", + "@commitlint/types": "^20.5.0", "picocolors": "^1.1.1" }, "engines": { @@ -169,13 +154,13 @@ } }, "node_modules/@commitlint/is-ignored": { - "version": "20.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-20.4.4.tgz", - "integrity": "sha512-y76rT8yq02x+pMDBI2vY4y/ByAwmJTkta/pASbgo8tldBiKLduX8/2NCRTSCjb3SumE5FBeopERKx3oMIm8RTQ==", + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-20.5.0.tgz", + "integrity": "sha512-JWLarAsurHJhPozbuAH6GbP4p/hdOCoqS9zJMfqwswne+/GPs5V0+rrsfOkP68Y8PSLphwtFXV0EzJ+GTXTTGg==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/types": "^20.4.4", + "@commitlint/types": "^20.5.0", "semver": "^7.6.0" }, "engines": { @@ -183,32 +168,32 @@ } }, "node_modules/@commitlint/lint": { - "version": "20.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-20.4.4.tgz", - "integrity": "sha512-svOEW+RptcNpXKE7UllcAsV0HDIdOck9reC2TP1QA6K5Fo0xxQV+QPjV8Zqx9g6X/hQBkF2S9ZQZ78Xrv1Eiog==", + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-20.5.0.tgz", + "integrity": "sha512-jiM3hNUdu04jFBf1VgPdjtIPvbuVfDTBAc6L98AWcoLjF5sYqkulBHBzlVWll4rMF1T5zeQFB6r//a+s+BBKlA==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/is-ignored": "^20.4.4", - "@commitlint/parse": "^20.4.4", - "@commitlint/rules": "^20.4.4", - "@commitlint/types": "^20.4.4" + "@commitlint/is-ignored": "^20.5.0", + "@commitlint/parse": "^20.5.0", + "@commitlint/rules": "^20.5.0", + "@commitlint/types": "^20.5.0" }, "engines": { "node": ">=v18" } }, "node_modules/@commitlint/load": { - "version": "20.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-20.4.4.tgz", - "integrity": "sha512-kvFrzvoIACa/fMjXEP0LNEJB1joaH3q3oeMJsLajXE5IXjYrNGVcW1ZFojXUruVJ7odTZbC3LdE/6+ONW4f2Dg==", + "version": "20.5.2", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-20.5.2.tgz", + "integrity": "sha512-zmr0RGDz7vThxW1I8ohb9yBjnGuH9mqwJpn21hInjGla+IlLOkS9ey0+dD5HlkzFlY0lX2NYdA2lDW6/0rO7Gw==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/config-validator": "^20.4.4", + "@commitlint/config-validator": "^20.5.0", "@commitlint/execute-rule": "^20.0.0", - "@commitlint/resolve-extends": "^20.4.4", - "@commitlint/types": "^20.4.4", + "@commitlint/resolve-extends": "^20.5.2", + "@commitlint/types": "^20.5.0", "cosmiconfig": "^9.0.1", "cosmiconfig-typescript-loader": "^6.1.0", "is-plain-obj": "^4.1.0", @@ -219,19 +204,6 @@ "node": ">=v18" } }, - "node_modules/@commitlint/load/node_modules/is-plain-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@commitlint/message": { "version": "20.4.3", "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-20.4.3.tgz", @@ -243,13 +215,13 @@ } }, "node_modules/@commitlint/parse": { - "version": "20.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-20.4.4.tgz", - "integrity": "sha512-AjfgOgrjEozeQNzhFu1KL5N0nDx4JZmswVJKNfOTLTUGp6xODhZHCHqb//QUHKOzx36If5DQ7tci2o7szYxu1A==", + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-20.5.0.tgz", + "integrity": "sha512-SeKWHBMk7YOTnnEWUhx+d1a9vHsjjuo6Uo1xRfPNfeY4bdYFasCH1dDpAv13Lyn+dDPOels+jP6D2GRZqzc5fA==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/types": "^20.4.4", + "@commitlint/types": "^20.5.0", "conventional-changelog-angular": "^8.2.0", "conventional-commits-parser": "^6.3.0" }, @@ -258,14 +230,14 @@ } }, "node_modules/@commitlint/read": { - "version": "20.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-20.4.4.tgz", - "integrity": "sha512-jvgdAQDdEY6L8kCxOo21IWoiAyNFzvrZb121wU2eBxI1DzWAUZgAq+a8LlJRbT0Qsj9INhIPVWgdaBbEzlF0dQ==", + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-20.5.0.tgz", + "integrity": "sha512-JDEIJ2+GnWpK8QqwfmW7O42h0aycJEWNqcdkJnyzLD11nf9dW2dWLTVEa8Wtlo4IZFGLPATjR5neA5QlOvIH1w==", "dev": true, "license": "MIT", "dependencies": { "@commitlint/top-level": "^20.4.3", - "@commitlint/types": "^20.4.4", + "@commitlint/types": "^20.5.0", "git-raw-commits": "^5.0.0", "minimist": "^1.2.8", "tinyexec": "^1.0.0" @@ -275,15 +247,15 @@ } }, "node_modules/@commitlint/resolve-extends": { - "version": "20.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-20.4.4.tgz", - "integrity": "sha512-pyOf+yX3c3m/IWAn2Jop+7s0YGKPQ8YvQaxt9IQxnLIM3yZAlBdkKiQCT14TnrmZTkVGTXiLtckcnFTXYwlY0A==", + "version": "20.5.2", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-20.5.2.tgz", + "integrity": "sha512-8EhSCU9eNos/5cI1yg64GW79UH1c64O69AfStCsj4zqy6An/qIphVEXj4/+2M6056T8coz00f+UXFn4WUUP1HQ==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/config-validator": "^20.4.4", - "@commitlint/types": "^20.4.4", - "global-directory": "^4.0.1", + "@commitlint/config-validator": "^20.5.0", + "@commitlint/types": "^20.5.0", + "global-directory": "^5.0.0", "import-meta-resolve": "^4.0.0", "lodash.mergewith": "^4.6.2", "resolve-from": "^5.0.0" @@ -293,16 +265,16 @@ } }, "node_modules/@commitlint/rules": { - "version": "20.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-20.4.4.tgz", - "integrity": "sha512-PmUp8QPLICn9w05dAx5r1rdOYoTk7SkfusJJh5tP3TqHwo2mlQ9jsOm8F0HSXU9kuLfgTEGNrunAx/dlK/RyPQ==", + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-20.5.0.tgz", + "integrity": "sha512-5NdQXQEdnDPT5pK8O39ZA7HohzPRHEsDGU23cyVCNPQy4WegAbAwrQk3nIu7p2sl3dutPk8RZd91yKTrMTnRkQ==", "dev": true, "license": "MIT", "dependencies": { - "@commitlint/ensure": "^20.4.4", + "@commitlint/ensure": "^20.5.0", "@commitlint/message": "^20.4.3", "@commitlint/to-lines": "^20.0.0", - "@commitlint/types": "^20.4.4" + "@commitlint/types": "^20.5.0" }, "engines": { "node": ">=v18" @@ -332,9 +304,9 @@ } }, "node_modules/@commitlint/types": { - "version": "20.4.4", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-20.4.4.tgz", - "integrity": "sha512-dwTGzyAblFXHJNBOgrTuO5Ee48ioXpS5XPRLLatxhQu149DFAHUcB3f0Q5eea3RM4USSsP1+WVT2dBtLVod4fg==", + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-20.5.0.tgz", + "integrity": "sha512-ZJoS8oSq2CAZEpc/YI9SulLrdiIyXeHb/OGqGrkUP6Q7YV+0ouNAa7GjqRdXeQPncHQIDz/jbCTlHScvYvO/gA==", "dev": true, "license": "MIT", "dependencies": { @@ -345,10 +317,37 @@ "node": ">=v18" } }, + "node_modules/@conventional-changelog/git-client": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@conventional-changelog/git-client/-/git-client-2.7.0.tgz", + "integrity": "sha512-j7A8/LBEQ+3rugMzPXoKYzyUPpw/0CBQCyvtTR7Lmu4olG4yRC/Tfkq79Mr3yuPs0SUitlO2HwGP3gitMJnRFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@simple-libs/child-process-utils": "^1.0.0", + "@simple-libs/stream-utils": "^1.2.0", + "semver": "^7.5.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "conventional-commits-filter": "^5.0.0", + "conventional-commits-parser": "^6.4.0" + }, + "peerDependenciesMeta": { + "conventional-commits-filter": { + "optional": true + }, + "conventional-commits-parser": { + "optional": true + } + } + }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.11.tgz", - "integrity": "sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.0.tgz", + "integrity": "sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==", "cpu": [ "ppc64" ], @@ -363,9 +362,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.11.tgz", - "integrity": "sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.0.tgz", + "integrity": "sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==", "cpu": [ "arm" ], @@ -380,9 +379,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.11.tgz", - "integrity": "sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.0.tgz", + "integrity": "sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==", "cpu": [ "arm64" ], @@ -397,9 +396,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.11.tgz", - "integrity": "sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.0.tgz", + "integrity": "sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==", "cpu": [ "x64" ], @@ -414,9 +413,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.11.tgz", - "integrity": "sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.0.tgz", + "integrity": "sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==", "cpu": [ "arm64" ], @@ -431,9 +430,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.11.tgz", - "integrity": "sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.0.tgz", + "integrity": "sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==", "cpu": [ "x64" ], @@ -448,9 +447,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.11.tgz", - "integrity": "sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.0.tgz", + "integrity": "sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==", "cpu": [ "arm64" ], @@ -465,9 +464,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.11.tgz", - "integrity": "sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.0.tgz", + "integrity": "sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==", "cpu": [ "x64" ], @@ -482,9 +481,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.11.tgz", - "integrity": "sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.0.tgz", + "integrity": "sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==", "cpu": [ "arm" ], @@ -499,9 +498,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.11.tgz", - "integrity": "sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.0.tgz", + "integrity": "sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==", "cpu": [ "arm64" ], @@ -516,9 +515,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.11.tgz", - "integrity": "sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.0.tgz", + "integrity": "sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==", "cpu": [ "ia32" ], @@ -533,9 +532,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.11.tgz", - "integrity": "sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.0.tgz", + "integrity": "sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==", "cpu": [ "loong64" ], @@ -550,9 +549,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.11.tgz", - "integrity": "sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.0.tgz", + "integrity": "sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==", "cpu": [ "mips64el" ], @@ -567,9 +566,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.11.tgz", - "integrity": "sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.0.tgz", + "integrity": "sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==", "cpu": [ "ppc64" ], @@ -584,9 +583,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.11.tgz", - "integrity": "sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.0.tgz", + "integrity": "sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==", "cpu": [ "riscv64" ], @@ -601,9 +600,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.11.tgz", - "integrity": "sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.0.tgz", + "integrity": "sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==", "cpu": [ "s390x" ], @@ -618,9 +617,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.11.tgz", - "integrity": "sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.0.tgz", + "integrity": "sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==", "cpu": [ "x64" ], @@ -635,9 +634,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.11.tgz", - "integrity": "sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.0.tgz", + "integrity": "sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==", "cpu": [ "arm64" ], @@ -652,9 +651,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.11.tgz", - "integrity": "sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.0.tgz", + "integrity": "sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==", "cpu": [ "x64" ], @@ -669,9 +668,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.11.tgz", - "integrity": "sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.0.tgz", + "integrity": "sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==", "cpu": [ "arm64" ], @@ -686,9 +685,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.11.tgz", - "integrity": "sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.0.tgz", + "integrity": "sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==", "cpu": [ "x64" ], @@ -703,9 +702,9 @@ } }, "node_modules/@esbuild/openharmony-arm64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.11.tgz", - "integrity": "sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.0.tgz", + "integrity": "sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==", "cpu": [ "arm64" ], @@ -720,9 +719,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.11.tgz", - "integrity": "sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.0.tgz", + "integrity": "sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==", "cpu": [ "x64" ], @@ -737,9 +736,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.11.tgz", - "integrity": "sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.0.tgz", + "integrity": "sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==", "cpu": [ "arm64" ], @@ -754,9 +753,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.11.tgz", - "integrity": "sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.0.tgz", + "integrity": "sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==", "cpu": [ "ia32" ], @@ -771,9 +770,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.11.tgz", - "integrity": "sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.0.tgz", + "integrity": "sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==", "cpu": [ "x64" ], @@ -788,9 +787,9 @@ } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", - "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", "dev": true, "license": "MIT", "dependencies": { @@ -807,9 +806,9 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", "dev": true, "license": "MIT", "engines": { @@ -841,9 +840,9 @@ } }, "node_modules/@eslint/eslintrc/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", "dev": true, "license": "MIT", "dependencies": { @@ -865,9 +864,9 @@ "license": "MIT" }, "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, "license": "ISC", "dependencies": { @@ -888,13 +887,13 @@ } }, "node_modules/@fluent/syntax": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/@fluent/syntax/-/syntax-0.18.1.tgz", - "integrity": "sha512-h0dnIoIg1RwUZRKynTizlVCe0v5qAO9d92ugmRi8sVMM15mwwftf7dpEKdDRc/pybbrpDhmvZRykEel0Cs/RYg==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@fluent/syntax/-/syntax-0.19.0.tgz", + "integrity": "sha512-5D2qVpZrgpjtqU4eNOcWGp1gnUCgjfM+vKGE2y03kKN6z5EBhtx0qdRFbg8QuNNj8wXNoX93KJoYb+NqoxswmQ==", "dev": true, "license": "Apache-2.0", "engines": { - "node": ">=12.0.0", + "node": ">=14.0.0", "npm": ">=7.0.0" } }, @@ -954,13 +953,13 @@ } }, "node_modules/@inquirer/external-editor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.2.tgz", - "integrity": "sha512-yy9cOoBnx58TlsPrIxauKIFQTiyH+0MK4e97y4sV9ERbI+zDxw7i2hxHLCIEGIE/8PPvDxGhgzIOTSOWcs6/MQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.3.tgz", + "integrity": "sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==", "dev": true, "license": "MIT", "dependencies": { - "chardet": "^2.1.0", + "chardet": "^2.1.1", "iconv-lite": "^0.7.0" }, "engines": { @@ -1018,16 +1017,6 @@ "dev": true, "license": "ISC" }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/@jest/schemas": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", @@ -1041,41 +1030,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@jsdevtools/ono": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", - "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==", - "dev": true, - "license": "MIT" - }, "node_modules/@lerna/child-process": { "version": "6.6.2", "resolved": "https://registry.npmjs.org/@lerna/child-process/-/child-process-6.6.2.tgz", @@ -1128,6 +1082,7 @@ "version": "6.6.2", "resolved": "https://registry.npmjs.org/@lerna/create/-/create-6.6.2.tgz", "integrity": "sha512-xQ+1Y7D+9etvUlE+unhG/TwmM6XBzGIdFBaNoW8D8kyOa9M2Jf3vdEtAxVa7mhRz66CENfhL/+I/QkVaa7pwbQ==", + "deprecated": "This package is an implementation detail of Lerna and is no longer published separately.", "dev": true, "license": "MIT", "dependencies": { @@ -1377,23 +1332,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@lerna/legacy-package-management/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@lerna/legacy-package-management/node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -1479,22 +1417,6 @@ "node": ">=8" } }, - "node_modules/@lerna/legacy-package-management/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@lerna/legacy-package-management/node_modules/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -1572,11 +1494,11 @@ } }, "node_modules/@lerna/legacy-package-management/node_modules/make-fetch-happen/node_modules/ssri/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "engines": { "node": ">=16 || 14 >=14.17" } @@ -1610,11 +1532,11 @@ } }, "node_modules/@lerna/legacy-package-management/node_modules/minipass-fetch/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "engines": { "node": ">=16 || 14 >=14.17" } @@ -1654,38 +1576,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@lerna/legacy-package-management/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@lerna/legacy-package-management/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@lerna/legacy-package-management/node_modules/p-map": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", @@ -1702,16 +1592,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@lerna/legacy-package-management/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/@lerna/legacy-package-management/node_modules/semver": { "version": "7.3.8", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", @@ -1741,6 +1621,13 @@ "node": ">=10" } }, + "node_modules/@lerna/legacy-package-management/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, "node_modules/@lerna/legacy-package-management/node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -1832,9 +1719,9 @@ } }, "node_modules/@lerna/legacy-package-management/node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.3.tgz", + "integrity": "sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==", "dev": true, "license": "ISC", "engines": { @@ -1870,19 +1757,6 @@ "node": ">=10" } }, - "node_modules/@lerna/legacy-package-management/node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -2008,9 +1882,9 @@ } }, "node_modules/@npmcli/arborist/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", "dev": true, "license": "MIT", "dependencies": { @@ -2056,9 +1930,9 @@ } }, "node_modules/@npmcli/arborist/node_modules/minimatch": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-6.2.0.tgz", - "integrity": "sha512-sauLxniAmvnhhRjFwPNnJKaPFYyddAgbYdeUpHULtCT/GhzdCx/MDNy+Y40lBxTQUrMzDE8e0S43Z5uqfO0REg==", + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-6.2.3.tgz", + "integrity": "sha512-5rvZbDy5y2k40rre/0OBbYnl03en25XPU3gOVO7532beGMjAipq88VdS9OeLOZNrD+Tb0lDhBJHZ7Gcd8qKlPg==", "dev": true, "license": "ISC", "dependencies": { @@ -2104,19 +1978,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@npmcli/arborist/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@npmcli/arborist/node_modules/ssri": { "version": "10.0.6", "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", @@ -2267,9 +2128,9 @@ } }, "node_modules/@npmcli/map-workspaces/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", "dev": true, "license": "MIT", "dependencies": { @@ -2277,13 +2138,13 @@ } }, "node_modules/@npmcli/map-workspaces/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", "dev": true, "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^2.0.2" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -2323,6 +2184,58 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/@npmcli/move-file/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/move-file/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@npmcli/move-file/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@npmcli/name-from-folder": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz", @@ -3024,11 +2937,11 @@ } }, "node_modules/@sigstore/sign/node_modules/minipass-fetch/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "engines": { "node": ">=16 || 14 >=14.17" } @@ -3047,11 +2960,11 @@ } }, "node_modules/@sigstore/sign/node_modules/ssri/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "engines": { "node": ">=16 || 14 >=14.17" } @@ -3070,17 +2983,39 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@simple-libs/child-process-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@simple-libs/child-process-utils/-/child-process-utils-1.0.2.tgz", - "integrity": "sha512-/4R8QKnd/8agJynkNdJmNw2MBxuFTRcNFnE5Sg/G+jkSsV8/UBgULMzhizWWW42p8L5H7flImV2ATi79Ove2Tw==", + "node_modules/@silverbucket/ajv-formats-draft2019": { + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/@silverbucket/ajv-formats-draft2019/-/ajv-formats-draft2019-1.6.5.tgz", + "integrity": "sha512-TUN/aSGMt3mZF45oy+kfCKtnKjBbSRVYFJxZKnGCPbKynPI2tsGyLgD9GEwFS0NLPbX0hUYHYeyFVoJ33HlMCw==", "dev": true, "license": "MIT", "dependencies": { - "@simple-libs/stream-utils": "^1.2.0" + "@silverbucket/iana-schemes": "^1.4.4", + "smtp-address-parser": "^1.1.0", + "uri-js-replace": "^1.0.1" }, - "engines": { - "node": ">=18" + "peerDependencies": { + "ajv": "*" + } + }, + "node_modules/@silverbucket/iana-schemes": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/@silverbucket/iana-schemes/-/iana-schemes-1.4.4.tgz", + "integrity": "sha512-2iUk6DlqdpQQKs3qrCZDf4LQLH1GPtUXmYZFeq0NWw1WkGY2iJBP4aeYZ5v+3ITxtQA3M0t/Sua8AKu+o4O0KA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@simple-libs/child-process-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@simple-libs/child-process-utils/-/child-process-utils-1.0.2.tgz", + "integrity": "sha512-/4R8QKnd/8agJynkNdJmNw2MBxuFTRcNFnE5Sg/G+jkSsV8/UBgULMzhizWWW42p8L5H7flImV2ATi79Ove2Tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@simple-libs/stream-utils": "^1.2.0" + }, + "engines": { + "node": ">=18" }, "funding": { "url": "https://ko-fi.com/dangreen" @@ -3100,60 +3035,12 @@ } }, "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "version": "0.27.10", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.10.tgz", + "integrity": "sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==", "dev": true, "license": "MIT" }, - "node_modules/@sinonjs/commons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.0" - } - }, - "node_modules/@sinonjs/samsam": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.3.tgz", - "integrity": "sha512-hw6HbX+GyVZzmaYNh82Ecj1vdGZrqVIn/keDTg63IgAwiQPO+xCz99uG6Woqgb4tM0mUiFENKZ4cqd7IX94AXQ==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.1", - "type-detect": "^4.1.0" - } - }, - "node_modules/@sinonjs/samsam/node_modules/type-detect": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", - "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/@sinonjs/text-encoding": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.3.tgz", - "integrity": "sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA==", - "dev": true, - "license": "(Unlicense OR Apache-2.0)" - }, "node_modules/@tootallnate/once": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", @@ -3189,9 +3076,9 @@ } }, "node_modules/@tufjs/models/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", "dev": true, "license": "MIT", "dependencies": { @@ -3199,13 +3086,13 @@ } }, "node_modules/@tufjs/models/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", "dev": true, "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^2.0.2" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -3214,19 +3101,13 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@types/json5": { "version": "0.0.29", @@ -3250,14 +3131,14 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "24.7.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.7.2.tgz", - "integrity": "sha512-/NbVmcGTP+lj5oa4yiYxxeBjRivKQ5Ns1eSZeB99ExsEQ6rX5XYU1Zy/gGxY/ilqtD4Etx9mKyrPxZRetiahhA==", + "version": "25.6.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.6.0.tgz", + "integrity": "sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "undici-types": "~7.14.0" + "undici-types": "~7.19.0" } }, "node_modules/@types/normalize-package-data": { @@ -3313,9 +3194,9 @@ } }, "node_modules/@yarnpkg/parsers/node_modules/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==", + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", "dev": true, "license": "MIT", "dependencies": { @@ -3350,9 +3231,9 @@ } }, "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "dev": true, "license": "MIT", "bin": { @@ -3372,19 +3253,6 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/acorn-walk": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/add-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", @@ -3418,27 +3286,10 @@ "node": ">= 8.0.0" } }, - "node_modules/aggregate-error": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", - "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", - "dev": true, - "license": "MIT", - "dependencies": { - "clean-stack": "^4.0.0", - "indent-string": "^5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", "dev": true, "license": "MIT", "dependencies": { @@ -3453,27 +3304,33 @@ } }, "node_modules/ajv-cmd": { - "version": "0.7.12", - "resolved": "https://registry.npmjs.org/ajv-cmd/-/ajv-cmd-0.7.12.tgz", - "integrity": "sha512-pzkkF0J4CIwGdXT+f7yy2SVJed9B9eOQOM7CjlOeFkWajR5rdzQ/7Wc6lPvWoS6PqH68DyJZTutIuO5rgFtXHw==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/ajv-cmd/-/ajv-cmd-0.13.0.tgz", + "integrity": "sha512-6x+LjpJOaY+wtWAoegctypfhUnbMIiiKES2q6NdXqb1nwPTW49RLhNuh/hcR6pdN+2DVbGv8TxXtOxf9CljyoA==", "dev": true, "license": "MIT", + "workspaces": [ + ".github" + ], "dependencies": { - "@apidevtools/json-schema-ref-parser": "11.9.1", - "ajv": "8.17.1", + "@apidevtools/json-schema-ref-parser": "15.3.5", + "@silverbucket/ajv-formats-draft2019": "1.6.5", + "ajv": "8.20.0", "ajv-errors": "3.0.0", "ajv-formats": "3.0.1", - "ajv-formats-draft2019": "1.6.1", - "ajv-ftl-i18n": "0.1.1", + "ajv-ftl-i18n": "0.2.1", "ajv-i18n": "4.2.0", "ajv-keywords": "5.1.0", - "commander": "13.1.0", - "esbuild": "^0.25.0", - "sast-json-schema": "^0.0.0-alpha.3" + "commander": "14.0.3", + "esbuild": "^0.28.0", + "sast-json-schema": "0.2.3" }, "bin": { "ajv": "cli.js" }, + "engines": { + "node": ">=24" + }, "funding": { "type": "github", "url": "https://github.com/sponsors/willfarrell" @@ -3507,50 +3364,30 @@ } } }, - "node_modules/ajv-formats-draft2019": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/ajv-formats-draft2019/-/ajv-formats-draft2019-1.6.1.tgz", - "integrity": "sha512-JQPvavpkWDvIsBp2Z33UkYCtXCSpW4HD3tAZ+oL4iEFOk9obQZffx0yANwECt6vzr6ET+7HN5czRyqXbnq/u0Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "punycode": "^2.1.1", - "schemes": "^1.4.0", - "smtp-address-parser": "^1.0.3", - "uri-js": "^4.4.1" - }, - "peerDependencies": { - "ajv": "*" - } - }, "node_modules/ajv-ftl-i18n": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ajv-ftl-i18n/-/ajv-ftl-i18n-0.1.1.tgz", - "integrity": "sha512-bJwD8xsGqeI3CvLv1lWdJAGaXoEG8PlDqzx1W5U87pWvEhQR+DqnTZsRQpAo736t9haWR06ECtyJA3GTO/Zphw==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ajv-ftl-i18n/-/ajv-ftl-i18n-0.2.1.tgz", + "integrity": "sha512-ThWHxPmLaJYKrl1mMWAYizGqZG1MrHcMgQ4MId2YFAjRn73GrZqSMX+sifQAHXAva0RZVeGHxVqkrWGizDFo6Q==", "dev": true, "license": "MIT", + "workspaces": [ + ".github" + ], "dependencies": { - "commander": "10.0.0", - "fluent-transpiler": "0.2.1" + "commander": "14.0.3", + "fluent-transpiler": "0.4.1" }, "bin": { "ajv-ftl": "cli.js" }, + "engines": { + "node": ">=24" + }, "funding": { "type": "github", "url": "https://github.com/sponsors/willfarrell" } }, - "node_modules/ajv-ftl-i18n/node_modules/commander": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.0.tgz", - "integrity": "sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - } - }, "node_modules/ajv-i18n": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/ajv-i18n/-/ajv-i18n-4.2.0.tgz", @@ -3626,20 +3463,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/aproba": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.1.0.tgz", @@ -3696,16 +3519,6 @@ "node": ">=8" } }, - "node_modules/array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/array-ify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", @@ -3866,29 +3679,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/arrgv": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/arrgv/-/arrgv-1.0.2.tgz", - "integrity": "sha512-a4eg4yhp7mmruZDQFqVMlxNRFGi/i1r87pt8SDHy0/I8PqSXoUTlWZRdAZo0VXgvEARcujbtTk8kiZRi1uDGRw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/arrify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-3.0.0.tgz", - "integrity": "sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/async": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", @@ -3923,72 +3713,6 @@ "node": ">= 4.0.0" } }, - "node_modules/ava": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ava/-/ava-5.3.1.tgz", - "integrity": "sha512-Scv9a4gMOXB6+ni4toLuhAm9KYWEjsgBglJl+kMGI5+IVDt120CCDZyB5HNU9DjmLI2t4I0GbnxGLmmRfGTJGg==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^8.8.2", - "acorn-walk": "^8.2.0", - "ansi-styles": "^6.2.1", - "arrgv": "^1.0.2", - "arrify": "^3.0.0", - "callsites": "^4.0.0", - "cbor": "^8.1.0", - "chalk": "^5.2.0", - "chokidar": "^3.5.3", - "chunkd": "^2.0.1", - "ci-info": "^3.8.0", - "ci-parallel-vars": "^1.0.1", - "clean-yaml-object": "^0.1.0", - "cli-truncate": "^3.1.0", - "code-excerpt": "^4.0.0", - "common-path-prefix": "^3.0.0", - "concordance": "^5.0.4", - "currently-unhandled": "^0.4.1", - "debug": "^4.3.4", - "emittery": "^1.0.1", - "figures": "^5.0.0", - "globby": "^13.1.4", - "ignore-by-default": "^2.1.0", - "indent-string": "^5.0.0", - "is-error": "^2.2.2", - "is-plain-object": "^5.0.0", - "is-promise": "^4.0.0", - "matcher": "^5.0.0", - "mem": "^9.0.2", - "ms": "^2.1.3", - "p-event": "^5.0.1", - "p-map": "^5.5.0", - "picomatch": "^2.3.1", - "pkg-conf": "^4.0.0", - "plur": "^5.1.0", - "pretty-ms": "^8.0.0", - "resolve-cwd": "^3.0.0", - "stack-utils": "^2.0.6", - "strip-ansi": "^7.0.1", - "supertap": "^3.0.1", - "temp-dir": "^3.0.0", - "write-file-atomic": "^5.0.1", - "yargs": "^17.7.2" - }, - "bin": { - "ava": "entrypoints/cli.mjs" - }, - "engines": { - "node": ">=14.19 <15 || >=16.15 <17 || >=18" - }, - "peerDependencies": { - "@ava/typescript": "*" - }, - "peerDependenciesMeta": { - "@ava/typescript": { - "optional": true - } - } - }, "node_modules/available-typed-arrays": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", @@ -4006,15 +3730,15 @@ } }, "node_modules/axios": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz", - "integrity": "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.15.2.tgz", + "integrity": "sha512-wLrXxPtcrPTsNlJmKjkPnNPK2Ihe0hn0wGSaTEiHRPxwjvJwT3hKmXF4dpqxmPO9SoNb2FsYXj/xEo0gHN+D5A==", "dev": true, "license": "MIT", "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.4", - "proxy-from-env": "^1.1.0" + "follow-redirects": "^1.15.11", + "form-data": "^4.0.5", + "proxy-from-env": "^2.1.0" } }, "node_modules/balanced-match": { @@ -4088,19 +3812,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", @@ -4113,17 +3824,10 @@ "readable-stream": "^3.4.0" } }, - "node_modules/blueimp-md5": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.19.0.tgz", - "integrity": "sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==", - "dev": true, - "license": "MIT" - }, "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, "license": "MIT", "dependencies": { @@ -4196,128 +3900,6 @@ "node": ">=10" } }, - "node_modules/c8": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/c8/-/c8-11.0.0.tgz", - "integrity": "sha512-e/uRViGHSVIJv7zsaDKM7VRn2390TgHXqUSvYwPHBQaU6L7E9L0n9JbdkwdYPvshDT0KymBmmlwSpms3yBaMNg==", - "dev": true, - "license": "ISC", - "dependencies": { - "@bcoe/v8-coverage": "^1.0.1", - "@istanbuljs/schema": "^0.1.3", - "find-up": "^5.0.0", - "foreground-child": "^3.1.1", - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-report": "^3.0.1", - "istanbul-reports": "^3.1.6", - "test-exclude": "^8.0.0", - "v8-to-istanbul": "^9.0.0", - "yargs": "^17.7.2", - "yargs-parser": "^21.1.1" - }, - "bin": { - "c8": "bin/c8.js" - }, - "engines": { - "node": "20 || >=22" - }, - "peerDependencies": { - "monocart-coverage-reports": "^2" - }, - "peerDependenciesMeta": { - "monocart-coverage-reports": { - "optional": true - } - } - }, - "node_modules/c8/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/c8/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/c8/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/c8/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/c8/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/c8/node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/cacache": { "version": "17.1.4", "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", @@ -4406,15 +3988,15 @@ } }, "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz", + "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "get-intrinsic": "^1.3.0", "set-function-length": "^1.2.2" }, "engines": { @@ -4455,30 +4037,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/callsites": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-4.2.0.tgz", - "integrity": "sha512-kfzR4zzQtAE9PC7CzZsjl3aBNbXWuXiSeOCdLcPpBfGW8YuCqQHcRPFDbr/BPVmd3EEPVpuFzLyuT/cUhPr4OQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, "node_modules/camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", @@ -4507,96 +4065,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/capital-case": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz", - "integrity": "sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==", - "dev": true, - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3", - "upper-case-first": "^2.0.2" - } - }, - "node_modules/cbor": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", - "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", - "dev": true, - "license": "MIT", - "dependencies": { - "nofilter": "^3.1.0" - }, - "engines": { - "node": ">=12.19" - } - }, - "node_modules/chalk": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", - "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "node_modules/change-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/change-case/-/change-case-4.1.2.tgz", - "integrity": "sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==", - "dev": true, - "license": "MIT", - "dependencies": { - "camel-case": "^4.1.2", - "capital-case": "^1.0.4", - "constant-case": "^3.0.4", - "dot-case": "^3.0.4", - "header-case": "^2.0.4", - "no-case": "^3.0.4", - "param-case": "^3.0.4", - "pascal-case": "^3.1.2", - "path-case": "^3.0.4", - "sentence-case": "^3.0.4", - "snake-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/chardet": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.0.tgz", - "integrity": "sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==", - "dev": true, - "license": "MIT" - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-5.4.4.tgz", + "integrity": "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==", "dev": true, - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.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" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } + "license": "MIT" + }, + "node_modules/chardet": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.1.tgz", + "integrity": "sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==", + "dev": true, + "license": "MIT" }, "node_modules/chownr": { "version": "2.0.0", @@ -4608,13 +4089,6 @@ "node": ">=10" } }, - "node_modules/chunkd": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/chunkd/-/chunkd-2.0.1.tgz", - "integrity": "sha512-7d58XsFmOq0j6el67Ug9mHf9ELUXsQXYJBkyxhH/k+6Ke0qXRnv0kbemx+Twc6fRJ07C49lcbdgm9FL1Ei/6SQ==", - "dev": true, - "license": "MIT" - }, "node_modules/ci-info": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", @@ -4631,39 +4105,6 @@ "node": ">=8" } }, - "node_modules/ci-parallel-vars": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ci-parallel-vars/-/ci-parallel-vars-1.0.1.tgz", - "integrity": "sha512-uvzpYrpmidaoxvIQHM+rKSrigjOe9feHYbw4uOI2gdfe1C3xIlxO+kVXq83WQWNniTf8bAxVpy+cQeFQsMERKg==", - "dev": true, - "license": "MIT" - }, - "node_modules/clean-stack": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", - "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/clean-yaml-object": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/clean-yaml-object/-/clean-yaml-object-0.1.0.tgz", - "integrity": "sha512-3yONmlN9CSAkzNwnRCiJQ7Q2xK5mWuEfL3PuTZcAUzhObbXsfsnMptJzXwz93nc5zn9V9TwCVMmV7w4xsm43dw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", @@ -4690,23 +4131,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cli-truncate": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", - "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "slice-ansi": "^5.0.0", - "string-width": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/cli-width": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", @@ -4869,19 +4293,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/code-excerpt": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/code-excerpt/-/code-excerpt-4.0.0.tgz", - "integrity": "sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==", - "dev": true, - "license": "MIT", - "dependencies": { - "convert-to-spaces": "^2.0.1" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -4970,13 +4381,13 @@ } }, "node_modules/commander": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", - "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", + "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", "dev": true, "license": "MIT", "engines": { - "node": ">=18" + "node": ">=20" } }, "node_modules/common-ancestor-path": { @@ -4986,13 +4397,6 @@ "dev": true, "license": "ISC" }, - "node_modules/common-path-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", - "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", - "dev": true, - "license": "ISC" - }, "node_modules/compare-func": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", @@ -5027,26 +4431,6 @@ "typedarray": "^0.0.6" } }, - "node_modules/concordance": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/concordance/-/concordance-5.0.4.tgz", - "integrity": "sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw==", - "dev": true, - "license": "ISC", - "dependencies": { - "date-time": "^3.1.0", - "esutils": "^2.0.3", - "fast-diff": "^1.2.0", - "js-string-escape": "^1.0.1", - "lodash": "^4.17.15", - "md5-hex": "^3.0.1", - "semver": "^7.3.2", - "well-known-symbols": "^2.0.0" - }, - "engines": { - "node": ">=10.18.0 <11 || >=12.14.0 <13 || >=14" - } - }, "node_modules/config-chain": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", @@ -5071,22 +4455,10 @@ "dev": true, "license": "ISC" }, - "node_modules/constant-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz", - "integrity": "sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3", - "upper-case": "^2.0.2" - } - }, "node_modules/conventional-changelog-angular": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-8.3.0.tgz", - "integrity": "sha512-DOuBwYSqWzfwuRByY9O4oOIvDlkUCTDzfbOgcSbkY+imXXj+4tmrEFao3K+FxemClYfYnZzsvudbwrhje9VHDA==", + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-8.3.1.tgz", + "integrity": "sha512-6gfI3otXK5Ph5DfCOI1dblr+kN3FAm5a97hYoQkqNZxOaYa5WKfXH+AnpsmS+iUH2mgVC2Cg2Qw9m5OKcmNrIg==", "dev": true, "license": "ISC", "dependencies": { @@ -5097,9 +4469,9 @@ } }, "node_modules/conventional-changelog-conventionalcommits": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-9.3.0.tgz", - "integrity": "sha512-kYFx6gAyjSIMwNtASkI3ZE99U1fuVDJr0yTYgVy+I2QG46zNZfl2her+0+eoviG82c5WQvW1jMt1eOQTeJLodA==", + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-9.3.1.tgz", + "integrity": "sha512-dTYtpIacRpcZgrvBYvBfArMmK2xvIpv2TaxM0/ZI5CBtNUzvF2x0t15HsbRABWprS6UPmvj+PzHVjSx4qAVKyw==", "dev": true, "license": "ISC", "dependencies": { @@ -5156,16 +4528,6 @@ "node": ">=10" } }, - "node_modules/conventional-changelog-core/node_modules/dargs": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", - "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/conventional-changelog-core/node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -5184,6 +4546,7 @@ "version": "2.0.11", "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", + "deprecated": "This package is no longer maintained. For the JavaScript API, please use @conventional-changelog/git-client instead.", "dev": true, "license": "MIT", "dependencies": { @@ -5213,19 +4576,6 @@ "node": ">=10" } }, - "node_modules/conventional-changelog-core/node_modules/is-text-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", - "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "text-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/conventional-changelog-core/node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -5407,34 +4757,26 @@ "node": ">=8" } }, - "node_modules/conventional-changelog-core/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "node_modules/conventional-changelog-core/node_modules/resolve": { + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/conventional-changelog-core/node_modules/split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", - "dev": true, - "license": "ISC", "dependencies": { - "readable-stream": "^3.0.0" - } - }, - "node_modules/conventional-changelog-core/node_modules/text-extensions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", - "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", - "dev": true, - "license": "MIT", + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, "engines": { - "node": ">=0.10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/conventional-changelog-core/node_modules/type-fest": { @@ -5494,6 +4836,20 @@ "node": ">=10" } }, + "node_modules/conventional-changelog-writer/node_modules/conventional-commits-filter": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", + "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash.ismatch": "^4.4.0", + "modify-values": "^1.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/conventional-changelog-writer/node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -5590,9 +4946,9 @@ } }, "node_modules/conventional-changelog-writer/node_modules/normalize-package-data/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -5631,16 +4987,6 @@ "node": ">=8" } }, - "node_modules/conventional-changelog-writer/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/conventional-changelog-writer/node_modules/read-pkg": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", @@ -5725,6 +5071,28 @@ "node": ">=8" } }, + "node_modules/conventional-changelog-writer/node_modules/resolve": { + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/conventional-changelog-writer/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -5758,24 +5126,10 @@ "node": ">=10" } }, - "node_modules/conventional-commits-filter": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", - "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash.ismatch": "^4.4.0", - "modify-values": "^1.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/conventional-commits-parser": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-6.3.0.tgz", - "integrity": "sha512-RfOq/Cqy9xV9bOA8N+ZH6DlrDR+5S3Mi0B5kACEjESpE+AviIpAptx9a9cFpWCCvgRtWT+0BbUw+e1BZfts9jg==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-6.4.0.tgz", + "integrity": "sha512-tvRg7FIBNlyPzjdG8wWRlPHQJJHI7DylhtRGeU9Lq+JuoPh5BKpPRX83ZdLrvXuOSu5Eo/e7SzOQhU4Hd2Miuw==", "dev": true, "license": "MIT", "dependencies": { @@ -5812,6 +5166,20 @@ "node": ">=10" } }, + "node_modules/conventional-recommended-bump/node_modules/conventional-commits-filter": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", + "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash.ismatch": "^4.4.0", + "modify-values": "^1.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/conventional-recommended-bump/node_modules/conventional-commits-parser": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", @@ -5833,16 +5201,6 @@ "node": ">=10" } }, - "node_modules/conventional-recommended-bump/node_modules/dargs": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", - "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/conventional-recommended-bump/node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -5861,6 +5219,7 @@ "version": "2.0.11", "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", + "deprecated": "This package is no longer maintained. For the JavaScript API, please use @conventional-changelog/git-client instead.", "dev": true, "license": "MIT", "dependencies": { @@ -5890,19 +5249,6 @@ "node": ">=10" } }, - "node_modules/conventional-recommended-bump/node_modules/is-text-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", - "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "text-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/conventional-recommended-bump/node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -6000,16 +5346,6 @@ "node": ">=8" } }, - "node_modules/conventional-recommended-bump/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/conventional-recommended-bump/node_modules/read-pkg": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", @@ -6094,24 +5430,26 @@ "node": ">=8" } }, - "node_modules/conventional-recommended-bump/node_modules/split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", - "dev": true, - "license": "ISC", - "dependencies": { - "readable-stream": "^3.0.0" - } - }, - "node_modules/conventional-recommended-bump/node_modules/text-extensions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", - "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", + "node_modules/conventional-recommended-bump/node_modules/resolve": { + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", "dev": true, "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, "engines": { - "node": ">=0.10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/conventional-recommended-bump/node_modules/type-fest": { @@ -6137,23 +5475,6 @@ "node": ">=10" } }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT" - }, - "node_modules/convert-to-spaces": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/convert-to-spaces/-/convert-to-spaces-2.0.1.tgz", - "integrity": "sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", @@ -6189,13 +5510,13 @@ } }, "node_modules/cosmiconfig-typescript-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-6.2.0.tgz", - "integrity": "sha512-GEN39v7TgdxgIoNcdkRE3uiAzQt3UXLyHbRHD6YoL048XAeOomyxaP+Hh/+2C6C2wYjxJ2onhJcsQp+L4YEkVQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-6.3.0.tgz", + "integrity": "sha512-Akr82WH1Wfqatyiqpj8HDkO2o2KmJRu1FhKfSNJP3K4IdXwHfEyL7MOb62i1AGQVLtIQM+iCE9CGOtrfhR+mmA==", "dev": true, "license": "MIT", "dependencies": { - "jiti": "^2.6.1" + "jiti": "2.6.1" }, "engines": { "node": ">=v18" @@ -6244,17 +5565,14 @@ "node": ">=4" } }, - "node_modules/currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==", + "node_modules/dargs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", + "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", "dev": true, "license": "MIT", - "dependencies": { - "array-find-index": "^1.0.1" - }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/data-view-buffer": { @@ -6311,19 +5629,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/date-time": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/date-time/-/date-time-3.1.0.tgz", - "integrity": "sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg==", - "dev": true, - "license": "MIT", - "dependencies": { - "time-zone": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/dateformat": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", @@ -6509,6 +5814,28 @@ "node": ">=6" } }, + "node_modules/del/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/del/node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -6540,6 +5867,19 @@ "node": ">=8" } }, + "node_modules/del/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/del/node_modules/p-map": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", @@ -6556,6 +5896,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/del/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/del/node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -6600,16 +5957,6 @@ "node": ">=4" } }, - "node_modules/diff": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -6643,17 +5990,6 @@ "node": ">=6.0.0" } }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dev": true, - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, "node_modules/dot-prop": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", @@ -6722,19 +6058,6 @@ "node": ">=0.10.0" } }, - "node_modules/emittery": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-1.2.0.tgz", - "integrity": "sha512-KxdRyyFcS85pH3dnU8Y5yFUm2YJdaHwcBZWrfG8o89ZY9a13/f9itbN+YG3ELbBo9Pg5zvIozstmuV8bX13q6g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, "node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", @@ -6801,9 +6124,9 @@ } }, "node_modules/envinfo": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.18.0.tgz", - "integrity": "sha512-02QGCLRW+Jb8PC270ic02lat+N57iBaWsvHjcJViqp6UVupRB+Vsg7brYPTqEFXvsdTql3KnSczv5ModZFpl8Q==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.21.0.tgz", + "integrity": "sha512-Lw7I8Zp5YKHFCXL7+Dz95g4CcbMEpgvqZNNq3AmlT5XAV6CgAAk6gyAMqn2zjw08K9BHfcNuKrMiCPLByGafow==", "dev": true, "license": "MIT", "bin": { @@ -6844,9 +6167,9 @@ } }, "node_modules/es-abstract": { - "version": "1.24.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", - "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", + "version": "1.24.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.2.tgz", + "integrity": "sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==", "dev": true, "license": "MIT", "dependencies": { @@ -6933,28 +6256,28 @@ } }, "node_modules/es-iterator-helpers": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", - "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.3.2.tgz", + "integrity": "sha512-HVLACW1TppGYjJ8H6/jqH/pqOtKRw6wMlrB23xfExmFWxFquAIWCmwoLsOyN96K4a5KbmOf5At9ZUO3GZbetAw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.6", + "es-abstract": "^1.24.2", "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.3", + "es-set-tostringtag": "^2.1.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.6", + "get-intrinsic": "^1.3.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", - "iterator.prototype": "^1.1.4", - "safe-array-concat": "^1.1.3" + "iterator.prototype": "^1.1.5", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -7021,9 +6344,9 @@ } }, "node_modules/esbuild": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.11.tgz", - "integrity": "sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.0.tgz", + "integrity": "sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -7034,32 +6357,32 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.11", - "@esbuild/android-arm": "0.25.11", - "@esbuild/android-arm64": "0.25.11", - "@esbuild/android-x64": "0.25.11", - "@esbuild/darwin-arm64": "0.25.11", - "@esbuild/darwin-x64": "0.25.11", - "@esbuild/freebsd-arm64": "0.25.11", - "@esbuild/freebsd-x64": "0.25.11", - "@esbuild/linux-arm": "0.25.11", - "@esbuild/linux-arm64": "0.25.11", - "@esbuild/linux-ia32": "0.25.11", - "@esbuild/linux-loong64": "0.25.11", - "@esbuild/linux-mips64el": "0.25.11", - "@esbuild/linux-ppc64": "0.25.11", - "@esbuild/linux-riscv64": "0.25.11", - "@esbuild/linux-s390x": "0.25.11", - "@esbuild/linux-x64": "0.25.11", - "@esbuild/netbsd-arm64": "0.25.11", - "@esbuild/netbsd-x64": "0.25.11", - "@esbuild/openbsd-arm64": "0.25.11", - "@esbuild/openbsd-x64": "0.25.11", - "@esbuild/openharmony-arm64": "0.25.11", - "@esbuild/sunos-x64": "0.25.11", - "@esbuild/win32-arm64": "0.25.11", - "@esbuild/win32-ia32": "0.25.11", - "@esbuild/win32-x64": "0.25.11" + "@esbuild/aix-ppc64": "0.28.0", + "@esbuild/android-arm": "0.28.0", + "@esbuild/android-arm64": "0.28.0", + "@esbuild/android-x64": "0.28.0", + "@esbuild/darwin-arm64": "0.28.0", + "@esbuild/darwin-x64": "0.28.0", + "@esbuild/freebsd-arm64": "0.28.0", + "@esbuild/freebsd-x64": "0.28.0", + "@esbuild/linux-arm": "0.28.0", + "@esbuild/linux-arm64": "0.28.0", + "@esbuild/linux-ia32": "0.28.0", + "@esbuild/linux-loong64": "0.28.0", + "@esbuild/linux-mips64el": "0.28.0", + "@esbuild/linux-ppc64": "0.28.0", + "@esbuild/linux-riscv64": "0.28.0", + "@esbuild/linux-s390x": "0.28.0", + "@esbuild/linux-x64": "0.28.0", + "@esbuild/netbsd-arm64": "0.28.0", + "@esbuild/netbsd-x64": "0.28.0", + "@esbuild/openbsd-arm64": "0.28.0", + "@esbuild/openbsd-x64": "0.28.0", + "@esbuild/openharmony-arm64": "0.28.0", + "@esbuild/sunos-x64": "0.28.0", + "@esbuild/win32-arm64": "0.28.0", + "@esbuild/win32-ia32": "0.28.0", + "@esbuild/win32-x64": "0.28.0" } }, "node_modules/escalade": { @@ -7072,19 +6395,6 @@ "node": ">=6" } }, - "node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/eslint": { "version": "8.57.1", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", @@ -7198,15 +6508,15 @@ } }, "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.10.tgz", + "integrity": "sha512-tRrKqFyCaKict5hOd244sL6EQFNycnMQnBe+j8uqGNXYzsImGbGUU4ibtoaBmv5FLwJwcFJNeg1GeVjQfbMrDQ==", "dev": true, "license": "MIT", "dependencies": { "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" + "is-core-module": "^2.16.1", + "resolve": "^2.0.0-next.6" } }, "node_modules/eslint-import-resolver-node/node_modules/debug": { @@ -7364,9 +6674,9 @@ } }, "node_modules/eslint-plugin-import/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, "license": "ISC", "dependencies": { @@ -7436,9 +6746,9 @@ } }, "node_modules/eslint-plugin-n/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, "license": "ISC", "dependencies": { @@ -7448,6 +6758,28 @@ "node": "*" } }, + "node_modules/eslint-plugin-n/node_modules/resolve": { + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/eslint-plugin-promise": { "version": "6.6.0", "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.6.0.tgz", @@ -7511,9 +6843,9 @@ } }, "node_modules/eslint-plugin-react/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, "license": "ISC", "dependencies": { @@ -7523,24 +6855,6 @@ "node": "*" } }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/eslint-plugin-react/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -7611,9 +6925,9 @@ } }, "node_modules/eslint/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", "dev": true, "license": "MIT", "dependencies": { @@ -7683,23 +6997,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/eslint/node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -7720,26 +7017,10 @@ "dev": true, "license": "MIT" }, - "node_modules/eslint/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, "license": "ISC", "dependencies": { @@ -7749,48 +7030,6 @@ "node": "*" } }, - "node_modules/eslint/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/eslint/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -7804,19 +7043,6 @@ "node": ">=8" } }, - "node_modules/eslint/node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/espree": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", @@ -7850,9 +7076,9 @@ } }, "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -7926,6 +7152,13 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, + "node_modules/execa/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, "node_modules/exponential-backoff": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.3.tgz", @@ -7933,13 +7166,6 @@ "dev": true, "license": "Apache-2.0" }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true, - "license": "MIT" - }, "node_modules/external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", @@ -7995,13 +7221,6 @@ "dev": true, "license": "MIT" }, - "node_modules/fast-diff": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", - "dev": true, - "license": "Apache-2.0" - }, "node_modules/fast-glob": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", @@ -8051,30 +7270,13 @@ "license": "BSD-3-Clause" }, "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", "dev": true, "license": "ISC", "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/figures": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz", - "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^5.0.0", - "is-unicode-supported": "^1.2.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "reusify": "^1.0.4" } }, "node_modules/file-entry-cache": { @@ -8101,9 +7303,9 @@ } }, "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.6.tgz", + "integrity": "sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -8111,9 +7313,9 @@ } }, "node_modules/filelist/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", "dev": true, "license": "MIT", "dependencies": { @@ -8121,9 +7323,9 @@ } }, "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", "dev": true, "license": "ISC", "dependencies": { @@ -8146,6 +7348,23 @@ "node": ">=8" } }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/flat": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", @@ -8171,42 +7390,94 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/flat-cache/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/flat-cache/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/flat-cache/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/flatted": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", "dev": true, "license": "ISC" }, "node_modules/fluent-transpiler": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fluent-transpiler/-/fluent-transpiler-0.2.1.tgz", - "integrity": "sha512-pdF72/XOg0NHj97E3aXu9k5PI8FmpRRrk4HMDeo9KRm7eoNczBTHnQjQMuqsAJ06ejT9teAA5fL8qUIhtUe6oA==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/fluent-transpiler/-/fluent-transpiler-0.4.1.tgz", + "integrity": "sha512-9CNRxPbnMDTt1hdtD2YPdbyH/p5o3xRgkcsZm0dgER+Kg2k3mdvDb4BJ6lVeFx+cGKp6GWPxcZ2n8R4b45JqJw==", "dev": true, "license": "MIT", + "workspaces": [ + ".github" + ], "dependencies": { - "@fluent/syntax": "0.18.1", - "change-case": "4.1.2", - "commander": "9.4.0" + "@fluent/syntax": "0.19.0", + "change-case": "5.4.4", + "commander": "14.0.3" }, "bin": { "ftl": "cli.js" - } - }, - "node_modules/fluent-transpiler/node_modules/commander": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.0.tgz", - "integrity": "sha512-sRPT+umqkz90UA8M1yqYfnHlZA7fF6nSphDtxeywPZ49ysjxDQybzk13CL+mXekDRG92skbcqCLVovuCusNmFw==", - "dev": true, - "license": "MIT", + }, "engines": { - "node": "^12.20.0 || >=14" + "node": ">=24" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/willfarrell" } }, "node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", "dev": true, "funding": [ { @@ -8257,23 +7528,10 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/form-data": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", - "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", "dev": true, "license": "MIT", "dependencies": { @@ -8330,21 +7588,6 @@ "dev": true, "license": "ISC" }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -8434,6 +7677,13 @@ "node": ">=8" } }, + "node_modules/gauge/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, "node_modules/gauge/node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -8788,45 +8038,6 @@ "node": ">=18" } }, - "node_modules/git-raw-commits/node_modules/@conventional-changelog/git-client": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@conventional-changelog/git-client/-/git-client-2.6.0.tgz", - "integrity": "sha512-T+uPDciKf0/ioNNDpMGc8FDsehJClZP0yR3Q5MN6wE/Y/1QZ7F+80OgznnTCOlMEG4AV0LvH2UJi3C/nBnaBUg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@simple-libs/child-process-utils": "^1.0.0", - "@simple-libs/stream-utils": "^1.2.0", - "semver": "^7.5.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "conventional-commits-filter": "^5.0.0", - "conventional-commits-parser": "^6.3.0" - }, - "peerDependenciesMeta": { - "conventional-commits-filter": { - "optional": true - }, - "conventional-commits-parser": { - "optional": true - } - } - }, - "node_modules/git-raw-commits/node_modules/conventional-commits-filter": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-5.0.0.tgz", - "integrity": "sha512-tQMagCOC59EVgNZcC5zl7XqO30Wki9i9J3acbUvkaosCT6JX3EeFwJD7Qqp4MCikRnzS18WXV3BLIQ66ytu6+Q==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=18" - } - }, "node_modules/git-remote-origin-url": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", @@ -8855,6 +8066,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz", "integrity": "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==", + "deprecated": "This package is no longer maintained. For the JavaScript API, please use @conventional-changelog/git-client instead.", "dev": true, "license": "MIT", "dependencies": { @@ -8964,9 +8176,9 @@ } }, "node_modules/git-semver-tags/node_modules/normalize-package-data/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -9005,16 +8217,6 @@ "node": ">=8" } }, - "node_modules/git-semver-tags/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/git-semver-tags/node_modules/read-pkg": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", @@ -9099,6 +8301,28 @@ "node": ">=8" } }, + "node_modules/git-semver-tags/node_modules/resolve": { + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/git-semver-tags/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -9171,9 +8395,10 @@ "license": "ISC" }, "node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, "license": "ISC", "dependencies": { @@ -9205,9 +8430,9 @@ } }, "node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", "dev": true, "license": "MIT", "dependencies": { @@ -9215,13 +8440,13 @@ } }, "node_modules/glob/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", "dev": true, "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^2.0.2" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -9231,16 +8456,16 @@ } }, "node_modules/global-directory": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", - "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-5.0.0.tgz", + "integrity": "sha512-1pgFdhK3J2LeM+dVf2Pd424yHx2ou338lC0ErNP2hPx4j8eW1Sp0XqSjNxtk6Tc4Kr5wlWtSvz8cn2yb7/SG/w==", "dev": true, "license": "MIT", "dependencies": { - "ini": "4.1.1" + "ini": "6.0.0" }, "engines": { - "node": ">=18" + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -9292,26 +8517,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/globby": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", - "dev": true, - "license": "MIT", - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/gopd": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", @@ -9340,9 +8545,9 @@ "license": "MIT" }, "node_modules/handlebars": { - "version": "4.7.8", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", - "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "version": "4.7.9", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.9.tgz", + "integrity": "sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9460,9 +8665,9 @@ "license": "ISC" }, "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz", + "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==", "dev": true, "license": "MIT", "dependencies": { @@ -9472,17 +8677,6 @@ "node": ">= 0.4" } }, - "node_modules/header-case": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/header-case/-/header-case-2.0.4.tgz", - "integrity": "sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "capital-case": "^1.0.4", - "tslib": "^2.0.3" - } - }, "node_modules/hosted-git-info": { "version": "6.1.3", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.3.tgz", @@ -9496,13 +8690,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true, - "license": "MIT" - }, "node_modules/http-cache-semantics": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", @@ -9576,9 +8763,9 @@ } }, "node_modules/iconv-lite": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", - "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", "dev": true, "license": "MIT", "dependencies": { @@ -9623,16 +8810,6 @@ "node": ">= 4" } }, - "node_modules/ignore-by-default": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-2.1.0.tgz", - "integrity": "sha512-yiWd4GVmJp0Q6ghmM2B/V3oZGRmjrKLXvHR3TE1nfoXsmoggllfZUQe74EN0fJdPFZu2NIvNdrMMLm3OsV7Ohw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10 <11 || >=12 <13 || >=14" - } - }, "node_modules/ignore-walk": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz", @@ -9647,9 +8824,9 @@ } }, "node_modules/ignore-walk/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", "dev": true, "license": "MIT", "dependencies": { @@ -9657,9 +8834,9 @@ } }, "node_modules/ignore-walk/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", "dev": true, "license": "ISC", "dependencies": { @@ -9737,19 +8914,6 @@ "node": ">=0.8.19" } }, - "node_modules/indent-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/infer-owner": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", @@ -9777,13 +8941,13 @@ "license": "ISC" }, "node_modules/ini": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", - "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-6.0.0.tgz", + "integrity": "sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ==", "dev": true, "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/init-package-json": { @@ -10001,25 +9165,15 @@ } }, "node_modules/ip-address": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.0.1.tgz", - "integrity": "sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.1.tgz", + "integrity": "sha512-1FMu8/N15Ck1BL551Jf42NYIoin2unWjLQ2Fze/DXryJRl5twqtwNHlO39qERGbIOcKYWHdgRryhOC+NG4eaLw==", "dev": true, "license": "MIT", "engines": { "node": ">= 12" } }, - "node_modules/irregular-plurals": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-3.5.0.tgz", - "integrity": "sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/is-array-buffer": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", @@ -10081,19 +9235,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/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, - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/is-boolean-object": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", @@ -10211,13 +9352,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-error": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-error/-/is-error-2.2.2.tgz", - "integrity": "sha512-IOQqts/aHWbiisY5DuPJQ0gcbvaLFCa7fBa9xoLfxBZvQ+ZI/Zh9xoI7Gk+G64N0FdK4AbibytHht2tWgpJWLg==", - "dev": true, - "license": "MIT" - }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -10244,19 +9378,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-generator-function": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", @@ -10390,14 +9511,17 @@ "node": ">=8" } }, - "node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-plain-object": { @@ -10410,13 +9534,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-promise": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", - "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", - "dev": true, - "license": "MIT" - }, "node_modules/is-regex": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", @@ -10520,6 +9637,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-text-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", + "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "text-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-typed-array": { "version": "1.1.15", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", @@ -10536,19 +9666,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-unicode-supported": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", - "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-weakmap": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", @@ -10632,45 +9749,6 @@ "node": ">=0.10.0" } }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-reports": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", - "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/iterator.prototype": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", @@ -10733,16 +9811,6 @@ "jiti": "lib/jiti-cli.mjs" } }, - "node_modules/js-string-escape": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", - "integrity": "sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -10751,9 +9819,9 @@ "license": "MIT" }, "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, "license": "MIT", "dependencies": { @@ -10763,6 +9831,19 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", @@ -10839,9 +9920,9 @@ "license": "MIT" }, "node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", "dev": true, "license": "MIT", "dependencies": { @@ -10908,13 +9989,6 @@ "dev": true, "license": "MIT" }, - "node_modules/just-extend": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-6.2.0.tgz", - "integrity": "sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==", - "dev": true, - "license": "MIT" - }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -11066,16 +10140,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/lerna/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "node_modules/lerna/node_modules/chalk": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", @@ -11157,41 +10221,6 @@ "dev": true, "license": "MIT" }, - "node_modules/lerna/node_modules/glob": { - "version": "9.3.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", - "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "minimatch": "^8.0.2", - "minipass": "^4.2.4", - "path-scurry": "^1.6.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/lerna/node_modules/glob/node_modules/minimatch": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", - "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/lerna/node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -11259,16 +10288,6 @@ "semver": "bin/semver.js" } }, - "node_modules/lerna/node_modules/minipass": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", - "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=8" - } - }, "node_modules/lerna/node_modules/p-map": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", @@ -11285,24 +10304,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lerna/node_modules/rimraf": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", - "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", + "node_modules/lerna/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^9.2.0" - }, - "bin": { - "rimraf": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } + "license": "ISC" }, "node_modules/lerna/node_modules/slash": { "version": "3.0.0", @@ -11381,9 +10388,9 @@ } }, "node_modules/lerna/node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.3.tgz", + "integrity": "sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==", "dev": true, "license": "ISC", "engines": { @@ -11590,17 +10597,17 @@ } }, "node_modules/lint-staged": { - "version": "16.3.3", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-16.3.3.tgz", - "integrity": "sha512-RLq2koZ5fGWrx7tcqx2tSTMQj4lRkfNJaebO/li/uunhCJbtZqwTuwPHpgIimAHHi/2nZIiGrkCHDCOeR1onxA==", + "version": "16.4.0", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-16.4.0.tgz", + "integrity": "sha512-lBWt8hujh/Cjysw5GYVmZpFHXDCgZzhrOm8vbcUdobADZNOK/bRshr2kM3DfgrrtR1DQhfupW9gnIXOfiFi+bw==", "dev": true, "license": "MIT", "dependencies": { "commander": "^14.0.3", "listr2": "^9.0.5", - "micromatch": "^4.0.8", + "picomatch": "^4.0.3", "string-argv": "^0.3.2", - "tinyexec": "^1.0.2", + "tinyexec": "^1.0.4", "yaml": "^2.8.2" }, "bin": { @@ -11613,14 +10620,17 @@ "url": "https://opencollective.com/lint-staged" } }, - "node_modules/lint-staged/node_modules/commander": { - "version": "14.0.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", - "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", + "node_modules/lint-staged/node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "dev": true, "license": "MIT", "engines": { - "node": ">=20" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, "node_modules/listr2": { @@ -11699,9 +10709,9 @@ } }, "node_modules/listr2/node_modules/string-width": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.0.tgz", - "integrity": "sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw==", + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.1.tgz", + "integrity": "sha512-IIaP0g3iy9Cyy18w3M9YcaDudujEAVHKt3a3QJg1+sr/oX96TbaGUubG0hJyCjCBThFH+tFpcIyoUHUn1ogaLA==", "dev": true, "license": "MIT", "dependencies": { @@ -11778,25 +10788,25 @@ } }, "node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "license": "MIT", "dependencies": { - "p-locate": "^6.0.0" + "p-locate": "^5.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", "dev": true, "license": "MIT" }, @@ -12027,19 +11037,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-update/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/log-update/node_modules/slice-ansi": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", @@ -12106,16 +11103,6 @@ "loose-envify": "cli.js" } }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.0.3" - } - }, "node_modules/lru-cache": { "version": "7.18.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", @@ -12126,22 +11113,6 @@ "node": ">=12" } }, - "node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/make-fetch-happen": { "version": "10.2.1", "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", @@ -12199,9 +11170,9 @@ } }, "node_modules/make-fetch-happen/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", "dev": true, "license": "MIT", "dependencies": { @@ -12265,7 +11236,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, "license": "ISC", "dependencies": { @@ -12293,9 +11264,9 @@ } }, "node_modules/make-fetch-happen/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", "dev": true, "license": "ISC", "dependencies": { @@ -12323,15 +11294,78 @@ "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, - "license": "MIT", + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-fetch-happen/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/make-fetch-happen/node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/make-fetch-happen/node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/make-fetch-happen/node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", "dependencies": { - "aggregate-error": "^3.0.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "*" } }, "node_modules/make-fetch-happen/node_modules/unique-filename": { @@ -12360,19 +11394,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-defer": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/map-obj": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", @@ -12386,22 +11407,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/matcher": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/matcher/-/matcher-5.0.0.tgz", - "integrity": "sha512-s2EMBOWtXFc8dgqvoAzKJXxNHibcdJMV0gwqKUaw9E2JBJuGUK7DrNKrA6g/i+v72TT16+6sVm5mS3thaMLQUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -12412,36 +11417,6 @@ "node": ">= 0.4" } }, - "node_modules/md5-hex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/md5-hex/-/md5-hex-3.0.1.tgz", - "integrity": "sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw==", - "dev": true, - "license": "MIT", - "dependencies": { - "blueimp-md5": "^2.10.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/mem": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/mem/-/mem-9.0.2.tgz", - "integrity": "sha512-F2t4YIv9XQUBHt6AOJ0y7lSmP1+cY7Fm1DRh9GClTGzKST7UWLMx6ly9WZdLH/G/ppM5RL4MlQfRT71ri9t19A==", - "dev": true, - "license": "MIT", - "dependencies": { - "map-age-cleaner": "^0.1.3", - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sindresorhus/mem?sponsor=1" - } - }, "node_modules/meow": { "version": "13.2.0", "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", @@ -12509,19 +11484,6 @@ "node": ">= 0.6" } }, - "node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/mimic-function": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", @@ -12593,6 +11555,16 @@ "node": ">=0.10.0" } }, + "node_modules/minimist-options/node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/minipass": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", @@ -12661,11 +11633,11 @@ } }, "node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.7.tgz", + "integrity": "sha512-TbqTz9cUwWyHS2Dy89P3ocAGUGxKjjLuR9z8w4WUTGAVgEj17/4nhgo2Du56i0Fm3Pm30g4iA8Lcqctc76jCzA==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { "minipass": "^3.0.0" }, @@ -12828,9 +11800,9 @@ } }, "node_modules/moo": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.2.tgz", - "integrity": "sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==", + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.3.tgz", + "integrity": "sha512-m2fmM2dDm7GZQsY7KK2cme8agi+AAljILjQnof7p1ZMDe6dQ4bdnSMx0cPppudoeNv5hEFQirN6u+O4fDE0IWA==", "dev": true, "license": "BSD-3-Clause" }, @@ -12932,47 +11904,41 @@ "dev": true, "license": "MIT" }, - "node_modules/nise": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.9.tgz", - "integrity": "sha512-qOnoujW4SV6e40dYxJOb3uvuoPHtmLzIk4TFo+j0jPJoC+5Z9xja5qH5JZobEPsa8+YYphMrOSwnrshEhG2qww==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.0", - "@sinonjs/fake-timers": "^11.2.2", - "@sinonjs/text-encoding": "^0.7.2", - "just-extend": "^6.2.0", - "path-to-regexp": "^6.2.1" - } - }, - "node_modules/nise/node_modules/@sinonjs/fake-timers": { - "version": "11.3.1", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-11.3.1.tgz", - "integrity": "sha512-EVJO7nW5M/F5Tur0Rf2z/QoMo+1Ia963RiMtapiQrEWvY0iBUvADo8Beegwjpnle5BHkyHuoxSTW3jF43H1XRA==", + "node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.1" - } + "license": "MIT" }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "node_modules/node-exports-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/node-exports-info/-/node-exports-info-1.6.0.tgz", + "integrity": "sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw==", "dev": true, "license": "MIT", "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" + "array.prototype.flatmap": "^1.3.3", + "es-errors": "^1.3.0", + "object.entries": "^1.1.9", + "semver": "^6.3.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "node_modules/node-exports-info/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "MIT" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } }, "node_modules/node-fetch": { "version": "2.6.7", @@ -13044,7 +12010,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, "license": "ISC", "dependencies": { @@ -13063,9 +12029,9 @@ } }, "node_modules/node-gyp/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, "license": "ISC", "dependencies": { @@ -13091,14 +12057,21 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/nofilter": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", - "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", + "node_modules/node-gyp/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.19" + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/nopt": { @@ -13133,16 +12106,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/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, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/npm-bundled": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.1.tgz", @@ -13257,9 +12220,9 @@ } }, "node_modules/npm-packlist/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", "dev": true, "license": "MIT", "dependencies": { @@ -13270,7 +12233,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, "license": "ISC", "dependencies": { @@ -13288,9 +12251,9 @@ } }, "node_modules/npm-packlist/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", "dev": true, "license": "ISC", "dependencies": { @@ -13434,11 +12397,11 @@ } }, "node_modules/npm-registry-fetch/node_modules/minipass-fetch/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "engines": { "node": ">=16 || 14 >=14.17" } @@ -13473,11 +12436,11 @@ } }, "node_modules/npm-registry-fetch/node_modules/ssri/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "engines": { "node": ">=16 || 14 >=14.17" } @@ -13687,9 +12650,9 @@ } }, "node_modules/nx/node_modules/fs-extra": { - "version": "11.3.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", - "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", + "version": "11.3.4", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", + "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", "dev": true, "license": "MIT", "dependencies": { @@ -13705,7 +12668,7 @@ "version": "7.1.4", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, "license": "ISC", "dependencies": { @@ -13730,6 +12693,19 @@ "node": ">=8" } }, + "node_modules/nx/node_modules/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, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/nx/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -14103,32 +13079,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/p-event": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-5.0.1.tgz", - "integrity": "sha512-dd589iCQ7m1L0bmC5NLlVYfy3TbBEsMUfWx9PyAgPeIcFZ/E2yaTZ4Rz4MiBmmJShviiftHVXOqfnfzJ6kyMrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-timeout": "^5.0.2" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", @@ -14140,48 +13090,32 @@ } }, "node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", "dependencies": { - "yocto-queue": "^1.0.0" + "yocto-queue": "^0.1.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.5.0.tgz", - "integrity": "sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "license": "MIT", "dependencies": { - "aggregate-error": "^4.0.0" + "p-limit": "^3.0.2" }, "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -14257,19 +13191,6 @@ "node": ">=8" } }, - "node_modules/p-timeout": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", - "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -14354,9 +13275,9 @@ } }, "node_modules/pacote/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", "dev": true, "license": "MIT", "dependencies": { @@ -14377,13 +13298,13 @@ } }, "node_modules/pacote/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", "dev": true, "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^2.0.2" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -14462,11 +13383,11 @@ } }, "node_modules/pacote/node_modules/ssri/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "engines": { "node": ">=16 || 14 >=14.17" } @@ -14497,17 +13418,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dev": true, - "license": "MIT", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -14579,19 +13489,6 @@ "dev": true, "license": "MIT" }, - "node_modules/parse-ms": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-3.0.0.tgz", - "integrity": "sha512-Tpb8Z7r7XbbtBTrM9UhpkzzaMrqA2VXMT3YChzYltwV3P3pM6t8wl7TvpMnSTosz1aQAdVib7kdoys7vYOPerw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/parse-path": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-7.1.0.tgz", @@ -14612,36 +13509,14 @@ "parse-path": "^7.0.0" } }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dev": true, - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/path-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/path-case/-/path-case-3.0.4.tgz", - "integrity": "sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, "node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=8" } }, "node_modules/path-is-absolute": { @@ -14695,13 +13570,6 @@ "dev": true, "license": "ISC" }, - "node_modules/path-to-regexp": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", - "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", - "dev": true, - "license": "MIT" - }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -14720,9 +13588,9 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, "license": "MIT", "engines": { @@ -14745,53 +13613,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pkg-conf": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-4.0.0.tgz", - "integrity": "sha512-7dmgi4UY4qk+4mj5Cd8v/GExPo0K+SlY+hulOSdfZ/T6jVH6//y7NtzZo5WrfhDBxuQ0jCa7fLZmNaNh7EWL/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^6.0.0", - "load-json-file": "^7.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-conf/node_modules/find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-conf/node_modules/load-json-file": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-7.0.1.tgz", - "integrity": "sha512-Gnxj3ev3mB5TkVBGad0JM6dmLiQL+o0t23JPBZ9sd+yvSLk05mFoqKBw5N8gbbkU4TNXyqCgIrl/VM17OgUIgQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -14861,32 +13682,6 @@ "node": ">=8" } }, - "node_modules/pkg-dir/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/plur": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/plur/-/plur-5.1.0.tgz", - "integrity": "sha512-VP/72JeXqak2KiOzjgKtQen5y3IZHn+9GOuLDafPv0eXa47xq0At93XahYBs26MsifCQ4enGKwbjBTKgb9QJXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "irregular-plurals": "^3.3.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/possible-typed-array-names": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", @@ -14922,9 +13717,9 @@ } }, "node_modules/prettier": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz", - "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==", + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.3.tgz", + "integrity": "sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==", "dev": true, "license": "MIT", "bin": { @@ -14965,22 +13760,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/pretty-ms": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-8.0.0.tgz", - "integrity": "sha512-ASJqOugUF1bbzI35STMBUpZqdfYKlJugy6JBziGi2EE+AL5JPJGSzvpeVXojxrr0ViUYoToUjb5kjSEGf7Y83Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "parse-ms": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/proc-log": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", @@ -15083,11 +13862,14 @@ "license": "MIT" }, "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=10" + } }, "node_modules/punycode": { "version": "2.3.1", @@ -15225,9 +14007,9 @@ } }, "node_modules/read-package-json/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", "dev": true, "license": "MIT", "dependencies": { @@ -15238,7 +14020,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, "license": "ISC", "dependencies": { @@ -15276,9 +14058,9 @@ "license": "MIT" }, "node_modules/read-package-json/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", "dev": true, "license": "ISC", "dependencies": { @@ -15486,6 +14268,28 @@ "node": ">=4" } }, + "node_modules/read-pkg/node_modules/resolve": { + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/read-pkg/node_modules/semver": { "version": "5.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", @@ -15521,19 +14325,6 @@ "node": ">= 6" } }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, "node_modules/redent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", @@ -15558,6 +14349,22 @@ "node": ">=8" } }, + "node_modules/redos-detector": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/redos-detector/-/redos-detector-6.1.4.tgz", + "integrity": "sha512-lPlka1rEH6kK42gtgokvvxMmpAvyc28DcRjQbGxeP5RJsJWgAduBOdGedVCDPdSyCr4ay/JDxq3nGYsJZyt8tA==", + "dev": true, + "license": "MIT", + "dependencies": { + "regjsparser": "0.13.0" + }, + "bin": { + "redos-detector": "bin.js" + }, + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/reflect.getprototypeof": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", @@ -15615,6 +14422,19 @@ "url": "https://github.com/sponsors/mysticatea" } }, + "node_modules/regjsparser": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.0.tgz", + "integrity": "sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~3.1.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -15636,13 +14456,16 @@ } }, "node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "version": "2.0.0-next.6", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.6.tgz", + "integrity": "sha512-3JmVl5hMGtJ3kMmB3zi3DL25KfkCEyy3Tw7Gmw7z5w8M9WlwoPFnIvwChzu1+cF3iaK3sp18hhPz8ANeimdJfA==", "dev": true, "license": "MIT", "dependencies": { - "is-core-module": "^2.16.0", + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", + "node-exports-info": "^1.6.0", + "object-keys": "^1.1.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -15693,6 +14516,13 @@ "node": ">=8" } }, + "node_modules/restore-cursor/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, "node_modules/ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", @@ -15732,55 +14562,78 @@ "license": "MIT" }, "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", + "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", "dev": true, "license": "ISC", "dependencies": { - "glob": "^7.1.3" + "glob": "^9.2.0" }, "bin": { - "rimraf": "bin.js" + "rimraf": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=14" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "version": "9.3.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", + "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "minimatch": "^8.0.2", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" }, "engines": { - "node": "*" + "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/rimraf/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "8.0.7", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.7.tgz", + "integrity": "sha512-V+1uQNdzybxa14e/p00HZnQNNcTjnRJjDxg2V8wtkjFctq4M7hXFws4oekyTP0Jebeq7QYtpFyOeBAjc88zvYg==", "dev": true, "license": "ISC", "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "*" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minipass": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" } }, "node_modules/run-async": { @@ -15828,15 +14681,15 @@ } }, "node_modules/safe-array-concat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", - "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.4.tgz", + "integrity": "sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "get-intrinsic": "^1.3.0", "has-symbols": "^1.1.0", "isarray": "^2.0.5" }, @@ -15911,30 +14764,50 @@ "license": "MIT" }, "node_modules/sast-json-schema": { - "version": "0.0.0-alpha.4", - "resolved": "https://registry.npmjs.org/sast-json-schema/-/sast-json-schema-0.0.0-alpha.4.tgz", - "integrity": "sha512-t+heIMb51EpOmTpnRfakPNF1SIJdRunU2NPWJeozSOltpL/D+hznoaQYlZW/lVfNf9kmB1GZsZz1frpePJGskA==", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/sast-json-schema/-/sast-json-schema-0.2.3.tgz", + "integrity": "sha512-84DyjPfOHYodSRPGeCXQEOSmUnByNLnqEkOlzWcsJyniVvjinVjDtSUZK3PtWz45e3dee0NZX3aJp2CA2l2XfQ==", "dev": true, "license": "MIT", + "workspaces": [ + ".github" + ], + "dependencies": { + "ajv": "8.18.0", + "redos-detector": "6.1.4" + }, + "bin": { + "sast-json-schema": "cli.js" + }, + "engines": { + "node": ">=24" + }, "funding": { "type": "github", "url": "https://github.com/sponsors/willfarrell" } }, - "node_modules/schemes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/schemes/-/schemes-1.4.0.tgz", - "integrity": "sha512-ImFy9FbCsQlVgnE3TCWmLPCFnVzx0lHL/l+umHplDqAKd0dzFpnS6lFZIpagBlYhKwzVmlV36ec0Y1XTu8JBAQ==", + "node_modules/sast-json-schema/node_modules/ajv": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "dev": true, "license": "MIT", "dependencies": { - "extend": "^3.0.0" + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, "node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -15944,47 +14817,6 @@ "node": ">=10" } }, - "node_modules/sentence-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz", - "integrity": "sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3", - "upper-case-first": "^2.0.2" - } - }, - "node_modules/serialize-error": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", - "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.13.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/serialize-error/node_modules/type-fest": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", - "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -16098,14 +14930,14 @@ } }, "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" + "object-inspect": "^1.13.4" }, "engines": { "node": ">= 0.4" @@ -16154,11 +14986,17 @@ } }, "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, - "license": "ISC" + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, "node_modules/sigstore": { "version": "1.9.0", @@ -16236,11 +15074,11 @@ } }, "node_modules/sigstore/node_modules/minipass-fetch/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "engines": { "node": ">=16 || 14 >=14.17" } @@ -16259,65 +15097,15 @@ } }, "node_modules/sigstore/node_modules/ssri/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "engines": { "node": ">=16 || 14 >=14.17" } }, - "node_modules/sinon": { - "version": "15.2.0", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-15.2.0.tgz", - "integrity": "sha512-nPS85arNqwBXaIsFCkolHjGIkFo+Oxu9vbgmBJizLAhqe6P2o3Qmj3KCUoRkfhHtvgDhZdWD3risLHAUJ8npjw==", - "deprecated": "16.1.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.0", - "@sinonjs/fake-timers": "^10.3.0", - "@sinonjs/samsam": "^8.0.0", - "diff": "^5.1.0", - "nise": "^5.1.4", - "supports-color": "^7.2.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/sinon" - } - }, - "node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/slice-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, "node_modules/smart-buffer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", @@ -16342,25 +15130,14 @@ "node": ">=0.10" } }, - "node_modules/snake-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", - "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", - "dev": true, - "license": "MIT", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, "node_modules/socks": { - "version": "2.8.7", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", - "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.8.tgz", + "integrity": "sha512-NlGELfPrgX2f1TAAcz0WawlLn+0r3FyhhCRpFFK2CemXenPYvzMWWZINv3eDNo9ucdwme7oCHRY0Jnbs4aIkog==", "dev": true, "license": "MIT", "dependencies": { - "ip-address": "^10.0.1", + "ip-address": "^10.1.1", "smart-buffer": "^4.2.0" }, "engines": { @@ -16396,6 +15173,16 @@ "node": ">=4" } }, + "node_modules/sort-keys/node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -16436,9 +15223,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.22", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz", - "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==", + "version": "3.0.23", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.23.tgz", + "integrity": "sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==", "dev": true, "license": "CC0-1.0" }, @@ -16455,6 +15242,16 @@ "node": "*" } }, + "node_modules/split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "dev": true, + "license": "ISC", + "dependencies": { + "readable-stream": "^3.0.0" + } + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -16488,29 +15285,6 @@ "node": ">=8" } }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/standard": { "version": "17.1.2", "resolved": "https://registry.npmjs.org/standard/-/standard-17.1.2.tgz", @@ -16927,13 +15701,13 @@ } }, "node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "ansi-regex": "^6.2.2" }, "engines": { "node": ">=12" @@ -17030,46 +15804,6 @@ "node": ">=4" } }, - "node_modules/supertap": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/supertap/-/supertap-3.0.1.tgz", - "integrity": "sha512-u1ZpIBCawJnO+0QePsEiOknOfCRq0yERxiAchT0i4li0WHNUJbf0evXXSXOcCAR4M8iMDoajXYmstm/qO81Isw==", - "dev": true, - "license": "MIT", - "dependencies": { - "indent-string": "^5.0.0", - "js-yaml": "^3.14.1", - "serialize-error": "^7.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/supertap/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/supertap/node_modules/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, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -17100,6 +15834,7 @@ "version": "6.1.11", "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "deprecated": "Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, "license": "ISC", "dependencies": { @@ -17157,16 +15892,6 @@ "node": ">=8" } }, - "node_modules/temp-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz", - "integrity": "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.16" - } - }, "node_modules/tempy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/tempy/-/tempy-1.0.0.tgz", @@ -17210,103 +15935,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/test-exclude": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-8.0.0.tgz", - "integrity": "sha512-ZOffsNrXYggvU1mDGHk54I96r26P8SyMjO5slMKSc7+IWmtB/MQKnEC2fP51imB3/pT6YK5cT5E8f+Dd9KdyOQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^13.0.6", - "minimatch": "^10.2.2" - }, - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/test-exclude/node_modules/balanced-match": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", - "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/test-exclude/node_modules/brace-expansion": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz", - "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==", + "node_modules/text-extensions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", + "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", "dev": true, "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/test-exclude/node_modules/glob": { - "version": "13.0.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", - "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "minimatch": "^10.2.2", - "minipass": "^7.1.3", - "path-scurry": "^2.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/test-exclude/node_modules/lru-cache": { - "version": "11.2.6", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz", - "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/test-exclude/node_modules/minimatch": { - "version": "10.2.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", - "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/test-exclude/node_modules/path-scurry": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", - "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" - }, "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=0.10" } }, "node_modules/text-table": { @@ -17333,20 +15969,10 @@ "readable-stream": "3" } }, - "node_modules/time-zone": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/time-zone/-/time-zone-1.0.0.tgz", - "integrity": "sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/tinyexec": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.2.tgz", - "integrity": "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.1.1.tgz", + "integrity": "sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg==", "dev": true, "license": "MIT", "engines": { @@ -17506,11 +16132,11 @@ } }, "node_modules/tuf-js/node_modules/minipass-fetch/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "engines": { "node": ">=16 || 14 >=14.17" } @@ -17529,11 +16155,11 @@ } }, "node_modules/tuf-js/node_modules/ssri/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "engines": { "node": ">=16 || 14 >=14.17" } @@ -17551,16 +16177,6 @@ "node": ">= 0.8.0" } }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/type-fest": { "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", @@ -17660,9 +16276,9 @@ "license": "MIT" }, "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", + "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", "dev": true, "license": "Apache-2.0", "peer": true, @@ -17708,9 +16324,9 @@ } }, "node_modules/undici-types": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.14.0.tgz", - "integrity": "sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA==", + "version": "7.19.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.19.2.tgz", + "integrity": "sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==", "dev": true, "license": "MIT", "peer": true @@ -17782,26 +16398,6 @@ "yarn": "*" } }, - "node_modules/upper-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-2.0.2.tgz", - "integrity": "sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/upper-case-first": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz", - "integrity": "sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.0.3" - } - }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -17812,6 +16408,13 @@ "punycode": "^2.1.0" } }, + "node_modules/uri-js-replace": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uri-js-replace/-/uri-js-replace-1.0.1.tgz", + "integrity": "sha512-W+C9NWNLFOoBI2QWDp4UT9pv65r2w5Cx+3sTYFvtMdDBxkKt1syCqsUdSFAChbEe1uK5TfS04wt/nGwmaeIQ0g==", + "dev": true, + "license": "MIT" + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -17836,21 +16439,6 @@ "dev": true, "license": "MIT" }, - "node_modules/v8-to-istanbul": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", - "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", - "dev": true, - "license": "ISC", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^2.0.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -17909,16 +16497,6 @@ "dev": true, "license": "BSD-2-Clause" }, - "node_modules/well-known-symbols": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/well-known-symbols/-/well-known-symbols-2.0.0.tgz", - "integrity": "sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=6" - } - }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", @@ -18014,9 +16592,9 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.19", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", - "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "version": "1.1.20", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz", + "integrity": "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==", "dev": true, "license": "MIT", "dependencies": { @@ -18314,19 +16892,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/write-file-atomic/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/write-json-file": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz", @@ -18379,6 +16944,13 @@ "semver": "bin/semver" } }, + "node_modules/write-json-file/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, "node_modules/write-json-file/node_modules/write-file-atomic": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", @@ -18454,9 +17026,9 @@ "license": "ISC" }, "node_modules/yaml": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz", - "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.3.tgz", + "integrity": "sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==", "dev": true, "license": "ISC", "bin": { @@ -18603,13 +17175,13 @@ } }, "node_modules/yocto-queue": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", - "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, "license": "MIT", "engines": { - "node": ">=12.20" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" diff --git a/package.json b/package.json index f5be272b..be53d1f4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@datastream/schema-monorepo", - "version": "2.29.0", + "version": "3.0.0", "description": "DataStream Water Quality Exchange (WQX): JSON Schema and JSON Table Schema for DataStream", "private": true, "type": "module", @@ -8,12 +8,12 @@ "scripts": { "prepare": "husky", "commit-msg": "commitlint --config commitlint.config.cjs --edit", - "pre-commit": "", + "pre-commit": "lint-staged", "lint": "npm run lint:js && npm run lint:tf", "lint:js": "prettier --write **/*.{js,json} && standard --fix **/*.js", "lint:tf": "terraform fmt -recursive -write", "install": "lerna bootstrap", - "test": "lerna exec --bail --concurrency 5 c8 npm run test", + "test": "lerna exec --bail --concurrency 5 npm run test", "lerna:rm": "npm run lerna:rm:node_modules && npm run lerna:rm:lock", "lerna:rm:lock": "lerna exec -- rm -rf package-lock.json", "lerna:rm:node_modules": "lerna exec -- rm -rf node_modules", @@ -44,14 +44,11 @@ "devDependencies": { "@commitlint/cli": "^20.0.0", "@commitlint/config-conventional": "^20.0.0", - "ajv-cmd": "^0.7.0", - "ava": "^5.0.0", - "c8": "^11.0.0", + "ajv-cmd": "^0.13.0", "lerna": "^6.0.0", "husky": "^9.0.0", "lint-staged": "^16.0.0", "prettier": "^3.0.0", - "sinon": "^15.0.0", "standard": "^17.0.0" } } diff --git a/schemas/data/bin/build b/schemas/data/bin/build index 4a70a0de..e96e6466 100755 --- a/schemas/data/bin/build +++ b/schemas/data/bin/build @@ -1,4 +1,5 @@ -#!/usr/bin/env sh +#!/usr/bin/env bash +set -euo pipefail maxEnumLength=2000 @@ -11,15 +12,19 @@ deref () { src=$1 opts=${*:2} - cd src - ajv deref ${src}.build.json ${opts} \ - -o ${src}.build.json - cd .. + ajv deref src/${src}.build.json ${opts} \ + -r node_modules/wqx/json-schema/definitions.json \ + -r src/definitions.build.json \ + -r src/logic/*.json \ + -r src/quality-control/*.json \ + -r src/values/*.json \ + -o src/${src}.build.json } clean () { src=$1 - cmd='del(.. | .["$vocabulary"]?, .["$id"]?, .["$comment"]?, '$2')' + extra=${2:+, $2} + cmd='del(.. | .["$vocabulary"]?, .["$id"]?, .["$comment"]?'"${extra}"')' id=$(jq -r '.["$id"]' src/${src}.build.json) jq "${cmd}" src/${src}.build.json > src/${src}.build.tmp.json @@ -85,7 +90,8 @@ mkdir -p json-schema/ pre definitions deref definitions sast definitions -clean definitions '.errorMessage?' +clean definitions +jq 'del(.. | .errorMessage?)' src/definitions.build.json > json-schema/definitions.json # primary - strict pre primary @@ -132,7 +138,7 @@ sast quality-control transpile quality-control '' --loop-enum ${maxEnumLength} --use-defaults empty --all-errors post quality-control -mv src/definitions.build.json json-schema/definitions.json +rm src/definitions.build.json # locales locale en-CA diff --git a/schemas/data/bin/build-lib.js b/schemas/data/bin/build-lib.js index d74cb260..ff4cf6cd 100644 --- a/schemas/data/bin/build-lib.js +++ b/schemas/data/bin/build-lib.js @@ -1,98 +1,138 @@ -import { readFile } from "node:fs/promises"; -import { dirname, join } from "node:path"; -import { fileURLToPath } from "node:url"; +import { readFile } from 'node:fs/promises' +import { dirname, join } from 'node:path' +import { fileURLToPath } from 'node:url' -const __dirname = dirname(fileURLToPath(import.meta.url)); +const __dirname = dirname(fileURLToPath(import.meta.url)) + +// Convert PascalCase field names to human-friendly titles +// e.g., "WellIDContext" → "Well ID Context" +export const toFriendlyName = (fieldName) => + fieldName + .replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2') + .replace(/([a-z])([A-Z])/g, '$1 $2') export const subsetOnly = [ - "MonitoringLocationHorizontalAccuracyUnit", - "MonitoringLocationVerticalUnit", - "ActivityDepthHeightUnit", -]; + 'MonitoringLocationHorizontalAccuracyUnit', + 'MonitoringLocationVerticalUnit', + 'MonitoringLocationVerticalAccuracyUnit', + 'ActivityDepthHeightUnit', + 'BoreholeDepthUnit', + 'WellDepthUnit', + 'WellOpenIntervalTopUnit', + 'WellOpenIntervalBottomUnit', + 'ActivityDepthAltitudeReferencePointUnit', +] + +// Custom fields (non-WQX) that need value files generated +export const custom = [ + 'ActivityGroupType', + 'AquiferType', + 'AquiferUnitName', + 'WellIDContext', + 'AquiferUnitPorosityType', + 'ActivityDepthAltitudeReferencePoint', + 'SampleCondition', +] // DS to WQX values name mapping export const wqx = { MonitoringLocationHorizontalCoordinateReferenceSystem: - "HorizontalReferenceDatum", - MonitoringLocationHorizontalAccuracyUnit: "MeasurementUnit", - MonitoringLocationVerticalUnit: "MeasurementUnit", - MonitoringLocationType: "MonitoringLocationType", - ActivityType: "ActivityType", - ActivityGroupType: "ActivityGroupType", - ActivityMediaName: "ActivityMediaSubdivision", - ActivityDepthHeightUnit: "MeasurementUnit", - SampleCollectionEquipmentName: "SampleCollectionEquipment", - CharacteristicName: "Characteristic", - MethodSpeciation: "MethodSpeciation", - ResultSampleFraction: "SampleFraction", - ResultUnit: "MeasurementUnit", - ResultValueType: "ResultValueType", - ResultDetectionCondition: "ResultDetectionCondition", - ResultDetectionQuantitationLimitUnit: "MeasurementUnit", - ResultDetectionQuantitationLimitType: "DetectionQuantitationLimitType", - ResultStatusID: "ResultStatus", - ResultAnalyticalMethodContext: "AnalyticalMethodContext", - CharacteristicGroup: "CharacteristicGroup", - MeasurementUnit: "MeasurementUnit", -}; + 'HorizontalReferenceDatum', + MonitoringLocationHorizontalAccuracyUnit: 'MeasurementUnit', + MonitoringLocationVerticalUnit: 'MeasurementUnit', + MonitoringLocationVerticalAccuracyUnit: 'MeasurementUnit', + MonitoringLocationVerticalCollectionMethod: 'VerticalCollectionMethod', + MonitoringLocationVerticalCoordinateReferenceSystem: 'VerticalReferenceDatum', + MonitoringLocationType: 'MonitoringLocationType', + WellUseType: 'WellType', + LithologyType: 'WellFormationType', + BoreholeDepthUnit: 'MeasurementUnit', + WellDepthUnit: 'MeasurementUnit', + WellOpenIntervalTopUnit: 'MeasurementUnit', + WellOpenIntervalBottomUnit: 'MeasurementUnit', + ActivityType: 'ActivityType', + ActivityMediaName: 'ActivityMediaSubdivision', + ActivityDepthHeightUnit: 'MeasurementUnit', + ActivityDepthAltitudeReferencePointUnit: 'MeasurementUnit', + SampleCollectionEquipmentName: 'SampleCollectionEquipment', + SampleCollectionMethodContext: 'SampleCollectionMethodContext', + CharacteristicName: 'Characteristic', + MethodSpeciation: 'MethodSpeciation', + ResultSampleFraction: 'SampleFraction', + ResultUnit: 'MeasurementUnit', + ResultValueType: 'ResultValueType', + ResultDetectionCondition: 'ResultDetectionCondition', + ResultDetectionQuantitationLimitUnit: 'MeasurementUnit', + ResultDetectionQuantitationLimitType: 'DetectionQuantitationLimitType', + ResultStatusID: 'ResultStatus', + ResultAnalyticalMethodContext: 'AnalyticalMethodContext', + CharacteristicGroup: 'CharacteristicGroup', + MeasurementUnit: 'MeasurementUnit', +} export const getList = async (type, column, list = []) => { try { const list = await readFile( - join(__dirname, `../src/${type}/${column}.json`), + join(__dirname, `../src/${type}/${column}.json`) ) .then((res) => JSON.parse(res)) - .catch(() => []); - return [...new Set(sort(list))]; + .catch(() => []) + return [...new Set(sort(list))] } catch (e) { - if (e.message.includes("Cannot find module")) { - console.log(`|-> Skip ${type}`); + if (e.message.includes('Cannot find module')) { + console.log(`|-> Skip ${type}`) } else { - console.log(`|-> Error ${type}`, e.message); + console.log(`|-> Error ${type}`, e.message) } - return list; + return list } -}; +} export const sort = (list) => { return list.sort((a, b) => { - return a.toLowerCase().localeCompare(b.toLowerCase()); - }); -}; + return a.toLowerCase().localeCompare(b.toLowerCase()) + }) +} export const replaceRetired = (value) => { // replace prefix const startPattern = /^\*{3,10}retired\*{0,3}\s*/i // replace suffix const endPattern = - /(?:\*{3,10}retired\*{3}.*|\s*\*{3}duplicate\*{3}|[\^*]{2,10}|[*]+)$/; + /(?:\*{3,10}retired\*{3}.*|\s*\*{3}duplicate\*{3}|[\^*]{2,10}|[*]+)$/ if (startPattern.test(value) || endPattern.test(value)) { - value = value.replace(startPattern, "").replace(endPattern, "").trim(); + value = value.replace(startPattern, '').replace(endPattern, '').trim() } - return value; -}; + return value +} export const retire = (column, list) => { if ( ![ // ***retired*** - "CharacteristicName", - "ResultAnalyticalMethodContext", + 'CharacteristicName', + 'ResultAnalyticalMethodContext', // **$ - "MonitoringLocationHorizontalAccuracyUnit", - "MonitoringLocationVerticalUnit", - "ActivityDepthHeightUnit", - "ResultSampleFraction", - "ResultUnit", - "ResultDetectionQuantitationLimitUnit", - "MeasurementUnit", + 'MonitoringLocationHorizontalAccuracyUnit', + 'MonitoringLocationVerticalUnit', + 'MonitoringLocationVerticalAccuracyUnit', + 'ActivityDepthHeightUnit', + 'BoreholeDepthUnit', + 'WellDepthUnit', + 'WellOpenIntervalTopUnit', + 'WellOpenIntervalBottomUnit', + 'ActivityDepthAltitudeReferencePointUnit', + 'ResultSampleFraction', + 'ResultUnit', + 'ResultDetectionQuantitationLimitUnit', + 'MeasurementUnit', // *^$ - "MonitoringLocationHorizontalCoordinateReferenceSystem", + 'MonitoringLocationHorizontalCoordinateReferenceSystem', ].includes(column) ) - return [[], list]; - const arr = []; + return [[], list] + const arr = [] // Remove retired items from list // const pattern = // /\s*(\*{3,10}retired\*{3}.*|\s*\*{3}duplicate\*{3}|[\^*]{2,10}|[*]+)$/; @@ -101,33 +141,33 @@ export const retire = (column, list) => { (item) => ![ // retired, but not removed yet - "1-Decanesulfonic acid, 3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,10-heptadecafluoro-", - "1-Octanesulfonamide, 1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,8-heptadecafluoro-", - "1,2-Benzenedicarboxamide, N2-[1,1-dimethyl-2-(methylsulfonyl)ethyl]-3-iodo-N1-[2-methyl-4-[1,2,2,2-tetrafluoro-1-(trifluoromethyl)ethyl]phenyl]-", - "Heptanoic acid, 2,2,3,3,4,4,5,5,6,6,7,7,7-tridecafluoro-", - "Hexadecanoic acid, 2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,16,16,16-hentriacontafluoro-", - "Nonanoic acid, 2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,9-heptadecafluoro-", - "Octadecanoic acid, 2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,16,16,17,17,18,18,18-pentatriacontafluoro-", - "Pentanoic acid, 2,2,3,3,4,4,5,5,5-nonafluoro-", + '1-Decanesulfonic acid, 3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,10-heptadecafluoro-', + '1-Octanesulfonamide, 1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,8-heptadecafluoro-', + '1,2-Benzenedicarboxamide, N2-[1,1-dimethyl-2-(methylsulfonyl)ethyl]-3-iodo-N1-[2-methyl-4-[1,2,2,2-tetrafluoro-1-(trifluoromethyl)ethyl]phenyl]-', + 'Heptanoic acid, 2,2,3,3,4,4,5,5,6,6,7,7,7-tridecafluoro-', + 'Hexadecanoic acid, 2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,16,16,16-hentriacontafluoro-', + 'Nonanoic acid, 2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,9-heptadecafluoro-', + 'Octadecanoic acid, 2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,16,16,17,17,18,18,18-pentatriacontafluoro-', + 'Pentanoic acid, 2,2,3,3,4,4,5,5,5-nonafluoro-', // retired more than once - "Perfluorodecanesulfonic acid ***retired***use 1-Decanesulfonic acid, 1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,10-heneicosafluoro", + 'Perfluorodecanesulfonic acid ***retired***use 1-Decanesulfonic acid, 1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,10-heneicosafluoro', // duplicate, but not removed yet - "Benzenamine, 2,3-dimethyl-4-[(1,1,2,2-tetrafluoroethyl)thio]-", - "Benzenamine, 2,5-dimethyl-4-[(1,1,2,2-tetrafluoroethyl)thio]-", - ].includes(item), + 'Benzenamine, 2,3-dimethyl-4-[(1,1,2,2-tetrafluoroethyl)thio]-', + 'Benzenamine, 2,5-dimethyl-4-[(1,1,2,2-tetrafluoroethyl)thio]-', + ].includes(item) ) .map((item) => { - const newValue = replaceRetired(item); + const newValue = replaceRetired(item) if (item !== newValue) { // console.log(`Replaced retired ${column}: ${item} => ${newValue}`) - arr.push(newValue); + arr.push(newValue) } - return newValue; - }); + return newValue + }) //console.log('retire', '#/sec', arr.indexOf('#/sec'), arr) - return [arr, list]; -}; + return [arr, list] +} /*export const override = (column, list = []) => { let overrides = {} @@ -165,97 +205,95 @@ export const retire = (column, list) => { }*/ export const additions = async (column, list = []) => { - let arr = []; + let arr = [] // Looks for retired values and adds non-retired value - if (column === "CharacteristicName") { - let previous; - const retiredDuplicates = []; + if (column === 'CharacteristicName') { + let previous + const retiredDuplicates = [] for (let item of list) { - const index = item.indexOf("***retired***"); + const index = item.indexOf('***retired***') if (index !== -1) { - item = item.substring(0, index); - if (!previous.localeCompare(item, undefined, { sensitivity: "base" })) { + item = item.substring(0, index) + if (!previous.localeCompare(item, undefined, { sensitivity: 'base' })) { // 0 == same - retiredDuplicates.push(item); - item = null; + retiredDuplicates.push(item) + item = null } // remove edge case - if (["Perfluoroheptanesulfonic Acid", "P-Chlorophenol"].includes(item)) - item = null; + if (['Perfluoroheptanesulfonic Acid', 'P-Chlorophenol'].includes(item)) + item = null } if (item) { - arr.push(item); - previous = item; + arr.push(item) + previous = item } } if (retiredDuplicates.length) { - console.log(`|** Retired Duplicates: ${retiredDuplicates.length}`); + console.log(`|** Retired Duplicates: ${retiredDuplicates.length}`) if (retiredDuplicates.length < 25) { - console.log(`| "${retiredDuplicates.join('", "')}"`); + console.log(`| "${retiredDuplicates.join('", "')}"`) } } } else { - arr = list; + arr = list } //console.log('arr', '#/sec', arr.indexOf('#/sec')) try { const additions = await readFile( - join(__dirname, `../src/addition/${column}.json`), + join(__dirname, `../src/addition/${column}.json`) ) .then((res) => JSON.parse(res)) - .catch(() => []); - arr = arr.concat(additions); + .catch(() => []) + arr = arr.concat(additions) //console.log('additions', '#/sec', additions.indexOf('#/sec')) } catch (e) { - if (e.message.includes("Cannot find module")) { - console.log("|-> Skip additions"); + if (e.message.includes('Cannot find module')) { + console.log('|-> Skip additions') } else { - console.log("|-> Error additions", e.message); + console.log('|-> Error additions', e.message) } } // TODO only have apply to legacy try { const deprecated = await readFile( - join(__dirname, `../src/deprecated/${column}.json`), + join(__dirname, `../src/deprecated/${column}.json`) ) .then((res) => JSON.parse(res)) - .catch(() => []); - arr = arr.concat(deprecated); + .catch(() => []) + arr = arr.concat(deprecated) //console.log('deprecated', '#/sec', deprecated.indexOf('#/sec')) } catch (e) { - if (e.message.includes("Cannot find module")) { - console.log("|-> Skip deprecated"); + if (e.message.includes('Cannot find module')) { + console.log('|-> Skip deprecated') } else { - console.log("|-> Error deprecated", e.message); + console.log('|-> Error deprecated', e.message) } } // trailing Whitespace arr = arr.map((item) => { if (item !== item.trim()) { - console.log(`|** Trailing Whitespace: "${item}"`); - item = item.trim(); + console.log(`|** Trailing Whitespace: "${item}"`) + item = item.trim() } - return item; - }); + return item + }) let uniqueEnum = [ ...new Set( - arr.sort((a, b) => - a.localeCompare(b, undefined, { sensitivity: "base" }), - ), + arr.sort((a, b) => a.localeCompare(b, undefined, { sensitivity: 'base' })) ), - ]; + ] // remove exact duplicates - const exactDuplicates = []; + const exactDuplicates = [] if (uniqueEnum.length < arr.length) { for (let i = 1, l = arr.length; i < l; i++) { if (arr[i - 1] === arr[i]) { - exactDuplicates.push(arr[i]); - console.log(`|** Exact Duplicates: "${arr[i]}"`); + exactDuplicates.push(arr[i]) + console.log(`|** Exact Duplicates: "${arr[i]}"`) } } /*if (exactDuplicates.length) { @@ -267,20 +305,20 @@ export const additions = async (column, list = []) => { } // remove mixcase duplicates - const mixedCaseDuplicates = []; + const mixedCaseDuplicates = [] for (let i = 1, l = uniqueEnum.length; i < l; i++) { if ( uniqueEnum[i - 1].localeCompare(uniqueEnum[i], undefined, { - sensitivity: "base", + sensitivity: 'base', }) !== -1 ) { - mixedCaseDuplicates.push(uniqueEnum[i - 1]); - console.log(`|** Mixed Case Duplicates: - "${uniqueEnum[i - 1]}"`); - console.log(`|** Mixed Case Duplicates: + "${uniqueEnum[i]}"`); - uniqueEnum[i - 1] = null; + mixedCaseDuplicates.push(uniqueEnum[i - 1]) + console.log(`|** Mixed Case Duplicates: - "${uniqueEnum[i - 1]}"`) + console.log(`|** Mixed Case Duplicates: + "${uniqueEnum[i]}"`) + uniqueEnum[i - 1] = null } } - uniqueEnum = uniqueEnum.filter((v) => v !== null); + uniqueEnum = uniqueEnum.filter((v) => v !== null) /*if (mixedCaseDuplicates.length) { console.log(`|** Mixed Case Duplicates: ${mixedCaseDuplicates.length}`) @@ -289,80 +327,80 @@ export const additions = async (column, list = []) => { } }*/ - return uniqueEnum; -}; + return uniqueEnum +} export const subset = async (column, list = [], log = true) => { - const allowed = await getList("subset", column); - if (!allowed.length) return list; + const allowed = await getList('subset', column) + if (!allowed.length) return list //console.log('subset', '#/sec', allowed.indexOf('#/sec')) - const subsetList = []; + const subsetList = [] for (const value of allowed) { for (let i = 0, l = list.length; i < l; i++) { if (list[i] === value) { - list.splice(i, 1); - subsetList.push(value); - break; + list.splice(i, 1) + subsetList.push(value) + break } } if (log && subsetList[subsetList.length - 1] !== value) { console.log( - `|** Subset value missing from allowed values: ${column} "${value}"`, - ); + `|** Subset value missing from allowed values: ${column} "${value}"` + ) } } - return [...new Set(sort(subsetList))]; -}; + return [...new Set(sort(subsetList))] +} export const subtractions = async (column, list = [], retired = []) => { - let arr = retired; + let arr = retired try { arr = arr.concat( await readFile(join(__dirname, `../src/subtraction/${column}.json`)) .then((res) => JSON.parse(res)) - .catch(() => []), - ); + .catch(() => []) + ) } catch (e) { - if (e.message.includes("Cannot find module")) { - console.log("|-> Skip subtractions"); + if (e.message.includes('Cannot find module')) { + console.log('|-> Skip subtractions') } else { - console.log("|-> Error subtractions", e.message); + console.log('|-> Error subtractions', e.message) } } arr - .filter((item) => item.includes(".*")) + .filter((item) => item.includes('.*')) .forEach((pattern) => { - pattern = new RegExp(pattern); - console.log(`|-> Subtracting by ${pattern}`); - arr = arr.concat(list.filter((item) => item.match(pattern) !== null)); - }); + pattern = new RegExp(pattern) + console.log(`|-> Subtracting by ${pattern}`) + arr = arr.concat(list.filter((item) => item.match(pattern) !== null)) + }) try { arr = arr.concat( await readFile(join(__dirname, `wqx/deprecated/${column}.json`)) .then((res) => JSON.parse(res)) - .catch(() => []), - ); + .catch(() => []) + ) } catch (e) { - if (e.message.includes("Cannot find module")) { - console.log("|-> Skip deprecated"); + if (e.message.includes('Cannot find module')) { + console.log('|-> Skip deprecated') } else { - console.log("|-> Error deprecated", e.message); + console.log('|-> Error deprecated', e.message) } } - if (arr.length) console.log(`|-> Subtracting ${arr.length} items`); + if (arr.length) console.log(`|-> Subtracting ${arr.length} items`) arr.forEach((item) => { - const index = list.indexOf(item); + const index = list.indexOf(item) if (index !== -1) { - list.splice(index, 1); + list.splice(index, 1) } - }); + }) - return list; -}; + return list +} diff --git a/schemas/data/bin/build-locales.js b/schemas/data/bin/build-locales.js index f9cabc5c..88b62ee6 100644 --- a/schemas/data/bin/build-locales.js +++ b/schemas/data/bin/build-locales.js @@ -1,19 +1,25 @@ import { readFile, writeFile } from "node:fs/promises"; import { dirname, join } from "node:path"; import { fileURLToPath } from "node:url"; -import { subset, sort } from "./build-lib.js"; const __dirname = dirname(fileURLToPath(import.meta.url)); const columns = [ + "ActivityDepthAltitudeReferencePoint", "ActivityMediaName", // filter "ActivityType", "ActivityGroupType", // filter + "AquiferType", + "AquiferUnitName", + "AquiferUnitPorosityType", "CharacteristicName", // filter "CharacteristicGroup", // filter + "LithologyType", "MethodSpeciation", // app display "MonitoringLocationHorizontalCoordinateReferenceSystem", "MonitoringLocationType", // app filter + "MonitoringLocationVerticalCollectionMethod", + "MonitoringLocationVerticalCoordinateReferenceSystem", "ResultAnalyticalMethodContext", "ResultDetectionCondition", "ResultDetectionQuantitationLimitType", @@ -21,19 +27,45 @@ const columns = [ "ResultStatusID", "ResultValueType", "SampleCollectionEquipmentName", + "SampleCollectionMethodContext", + "SampleCondition", + "WellIDContext", + "WellUseType", //"MeasurementUnit", ]; -const setup = async (column) => { +const load = async (column) => { const locales = await readFile( join(__dirname, `../src/locales/${column}.json`) ) .then((res) => JSON.parse(res)) - .catch((e) => ({})); + .catch(() => ({})); const allowedValues = await readFile( join(__dirname, `../src/values/${column}.primary.json`) ).then((res) => JSON.parse(res)); + return { column, locales, allowedValues }; +}; + +// A valid locale file is flat with only these top-level keys. Any other key +// (e.g. the file nested under a "${column}" wrapper) means the file is malformed; +// building it would silently append a duplicate flat block via the `??=` in +// write(). Returns an error string or null. +// TODO: tighten this into a full schema check with ajv +const validate = ({ column, locales }) => { + const unexpected = Object.keys(locales).filter( + (key) => !["name", "description", "values"].includes(key) + ); + if (unexpected.length) { + return ( + `src/locales/${column}.json has unexpected top-level key(s): ${unexpected.join(", ")}. ` + + `Expected only "name", "description", "values" — the file is likely wrapped under a ` + + `"${column}" key. Un-nest it before rebuilding.` + ); + } + return null; +}; +const write = async ({ column, locales, allowedValues }) => { locales.name ??= { en: column, fr: null }; locales.description ??= { en: null, fr: null }; locales.values ??= {}; @@ -63,4 +95,16 @@ const setup = async (column) => { ); }; -await Promise.all(columns.map((column) => setup(column))); +// Two-phase, fail-fast: load and validate EVERY file before writing ANY of them. +// A single malformed file aborts the whole build with no writes, so a bad file +// can never truncate a good one via a mid-run throw during concurrent writes. +const loaded = await Promise.all(columns.map(load)); +const errors = loaded.map(validate).filter(Boolean); +if (errors.length) { + throw new Error( + `Locale validation failed — no files were written:\n${errors + .map((error) => ` - ${error}`) + .join("\n")}` + ); +} +await Promise.all(loaded.map(write)); diff --git a/schemas/data/bin/build-logic.js b/schemas/data/bin/build-logic.js index b8aad323..1f172bc1 100644 --- a/schemas/data/bin/build-logic.js +++ b/schemas/data/bin/build-logic.js @@ -1,114 +1,117 @@ -import { readFile, writeFile } from "node:fs/promises"; -import { dirname, join } from "node:path"; -import { fileURLToPath } from "node:url"; -import { subset, sort } from "./build-lib.js"; +import { readFile, writeFile } from 'node:fs/promises' +import { dirname, join } from 'node:path' +import { fileURLToPath } from 'node:url' +import { subset, sort } from './build-lib.js' -const __dirname = dirname(fileURLToPath(import.meta.url)); +const __dirname = dirname(fileURLToPath(import.meta.url)) const wqxRequiredIf = async (file) => { - const [columnFrom, columnTo] = file.split("-"); + const [columnFrom, columnTo] = file.split('-') const logicJSON = await readFile( - join(__dirname, `/../src/logic/${file}.json`), + join(__dirname, `/../src/logic/${file}.json`) ) .then((res) => JSON.parse(res)) - .catch(() => ({})); - const { default: required } = await import(`wqx/required/${file}.json.js`); + .catch(() => ({})) + const { default: required } = await import(`wqx/required/${file}.json.js`) const object = { $id: `https://datastream.org/schema/data/logic/${file}.json`, - $comment: "generated by ./bin/build-logic.js", + $comment: 'generated by ./bin/build-logic.js', title: logicJSON.title, description: logicJSON.description, errorMessage: logicJSON.errorMessage, ...required, - }; + } // TODO - remove once included in WQX look up - if (file === "CharacteristicName-MethodSpeciation") { - + if (file === 'CharacteristicName-MethodSpeciation') { // Include additional chars if it's not in WQX logic const include = [ - "Ammonia, un-ionized", - "Inorganic nitrogen (ammonia, nitrate and nitrite)", - "Inorganic nitrogen (nitrate and nitrite)", - ]; + 'Ammonia, un-ionized', + 'Inorganic nitrogen (ammonia, nitrate and nitrite)', + 'Inorganic nitrogen (nitrate and nitrite)', + ] // remove MethodSpeciation for CharacteristicName https://github.com/gordonfn/datastream-dms/issues/2381 const exclude = [ - "Radium", - "Radium-226", - "Radium-228", - "Radon-222", - "Strontium-87/Strontium-86, ratio", - "Uranium-234/Uranium-238 ratio", - "Uranium-238", - ]; + 'Radium', + 'Radium-226', + 'Radium-228', + 'Radon-222', + 'Strontium-87/Strontium-86, ratio', + 'Uranium-234/Uranium-238 ratio', + 'Uranium-238', + ] for (const characteristicName of exclude) { const index = - object.if.properties[columnFrom].enum.indexOf(characteristicName); + object.if.properties[columnFrom].enum.indexOf(characteristicName) if (index !== -1) { - object.if.properties[columnFrom].enum.splice(index, 1); + object.if.properties[columnFrom].enum.splice(index, 1) } } object.if.properties[columnFrom].enum = [ ...new Set([...object.if.properties[columnFrom].enum, ...include]), - ]; + ] const stableIsotopes = await readFile( join( __dirname, - `/../src/logic/CharacteristicName-StableIsotope-MethodSpeciation.json`, - ), + `/../src/logic/CharacteristicName-StableIsotope-MethodSpeciation.json` + ) ) .then((res) => JSON.parse(res)) - .catch(() => ({})); + .catch(() => ({})) for (const characteristicName of stableIsotopes.if.properties .CharacteristicName.enum) { if (!object.if.properties[columnFrom].enum.includes(characteristicName)) { console.log( - "CharacteristicName-MethodSpeciation missing (StableIsotope rule)", - characteristicName, - ); - object.if.properties[columnFrom].enum.push(characteristicName); + 'CharacteristicName-MethodSpeciation missing (StableIsotope rule)', + characteristicName + ) + object.if.properties[columnFrom].enum.push(characteristicName) } } } // END TODO - const list = [...new Set(sort(object.if.properties[columnFrom].enum))]; + const list = [...new Set(sort(object.if.properties[columnFrom].enum))] - object.if.properties[columnFrom].enum = await subset(columnFrom, list, false); - object.if.unevaluatedProperties = true; - object.then.unevaluatedProperties = true; + object.if.properties[columnFrom].enum = await subset(columnFrom, list, false) + object.if.unevaluatedProperties = true + object.then.unevaluatedProperties = true await writeFile( join(__dirname, `/../src/logic/${file}.json`), JSON.stringify(object, null, 2), - { encoding: "utf8" }, - ); + { encoding: 'utf8' } + ) // Special Case - MethodSpeciation/ResultSampleFraction is optional for a CharacteristicName const optional = await readFile( - join(__dirname, `/../src/quality-control/partial/${file}-Optional.json`), + join(__dirname, `/../src/quality-control/partial/${file}-Optional.json`) ) .then((res) => JSON.parse(res)) - .catch(() => ({})); - object.if.properties[columnFrom].enum = [...new Set(sort(object.if.properties[columnFrom].enum.concat(optional.enum)))]; + .catch(() => ({})) + object.if.properties[columnFrom].enum = [ + ...new Set( + sort(object.if.properties[columnFrom].enum.concat(optional.enum)) + ), + ] const qcJSON = await readFile( - join(__dirname, `/../src/quality-control/${file}.json`), + join(__dirname, `/../src/quality-control/${file}.json`) ) .then((res) => JSON.parse(res)) - .catch(() => ({})); + .catch(() => ({})) const qc = { $id: `https://datastream.org/schema/data/quality-control/${file}.json`, - $comment: "generated by ./bin/build-logic.js", + $comment: 'generated by ./bin/build-logic.js', title: qcJSON.title, description: qcJSON.description, errorMessage: qcJSON.errorMessage, if: { - type: "object", + type: 'object', unevaluatedProperties: true, properties: { [columnFrom]: { @@ -121,7 +124,7 @@ const wqxRequiredIf = async (file) => { }, then: { // 'oneOf': [{ - type: "object", + type: 'object', unevaluatedProperties: true, properties: { [columnTo]: false, @@ -133,16 +136,16 @@ const wqxRequiredIf = async (file) => { // } // }] }, - }; + } await writeFile( join(__dirname, `/../src/quality-control/${file}.json`), JSON.stringify(qc, null, 2), - { encoding: "utf8" }, - ); -}; + { encoding: 'utf8' } + ) +} // wqxRequiredIf('ActivityType-AnalyticalMethod','CharacteristicName',['AnalyticalMethodtype']) // wqxRequiredIf('ActivityType-MonitoringLocation','CharacteristicName',['MonitoringLocation']) // wqxRequiredIf('Characteristic-AnalyticalMethod','CharacteristicName',['ResultAnalyticalMethodID','ResultAnalyticalMethodContext']) -wqxRequiredIf("CharacteristicName-MethodSpeciation"); +wqxRequiredIf('CharacteristicName-MethodSpeciation') // wqxRequiredIf('CharacteristicName-ResultSampleFraction') diff --git a/schemas/data/bin/build-lookup.js b/schemas/data/bin/build-lookup.js index 772f1bcf..f3dc5dbe 100644 --- a/schemas/data/bin/build-lookup.js +++ b/schemas/data/bin/build-lookup.js @@ -1,7 +1,7 @@ import { dirname, join } from 'node:path' import { fileURLToPath } from 'node:url' import { readFile, writeFile } from 'node:fs/promises' -import { replaceRetired } from "./build-lib.js"; +import { replaceRetired } from './build-lib.js' const __dirname = dirname(fileURLToPath(import.meta.url)) @@ -23,7 +23,9 @@ for (const [key, value] of Object.entries(CharacteristicWQXGroups)) { const newKey = replaceRetired(key) CharacteristicNameWQXGroups[newKey] = value if (newKey !== key) { - console.log(`Replaced retired CharacteristicName in Group lookup: ${key} => ${newKey}`) + console.log( + `Replaced retired CharacteristicName in Group lookup: ${key} => ${newKey}` + ) } } @@ -42,7 +44,7 @@ await writeFile( join(__dirname, `/../lookup/CharacteristicName-CharacteristicWQXGroup.json`), JSON.stringify(CharacteristicNameWQXGroups), { - encoding: 'utf8' + encoding: 'utf8', } ) @@ -71,18 +73,37 @@ for (const characteristicName of characteristicNames) { } } +// Testing - flag approved (strict/subset) ActivityType values with no +// ActivityGroupType mapping; these silently default to "Other" in the seeder +let activityTypeActivityGroupType = await readFile( + join(__dirname, `../lookup/ActivityType-ActivityGroupType.json`) +).then((res) => JSON.parse(res)) +let activityTypes = await readFile( + join(__dirname, `../src/values/ActivityType.primary.json`) +).then((res) => JSON.parse(res)) +activityTypes = activityTypes.enum + +for (const activityType of activityTypes) { + if (!activityTypeActivityGroupType[activityType]) { + console.log( + `ActivityType-ActivityGroupType: Missing group mapping (defaults to "Other")`, + activityType + ) + } +} + // Export - Deprecate when using nodejs18 for (const path of [ join(__dirname, `/../lookup/CharacteristicName-CharacteristicWQXGroup.json`), join(__dirname, `/../lookup/CharacteristicName-MeasurementUnit.json`), - join(__dirname, `/../lookup/CharacteristicWQXGroup-MeasurementUnit.json`) + join(__dirname, `/../lookup/CharacteristicWQXGroup-MeasurementUnit.json`), ]) { const json = await readFile(path).then((res) => JSON.parse(res)) await writeFile( path + '.js', `export default ${JSON.stringify(json, null, 2)}`, { - encoding: 'utf8' + encoding: 'utf8', } ) } diff --git a/schemas/data/bin/build-template.js b/schemas/data/bin/build-template.js index 5928f95e..d91323a1 100644 --- a/schemas/data/bin/build-template.js +++ b/schemas/data/bin/build-template.js @@ -1,92 +1,103 @@ -import { readFile, writeFile } from "node:fs/promises"; -import { dirname, join } from "node:path"; -import { fileURLToPath } from "node:url"; +import { readFile, writeFile } from 'node:fs/promises' +import { dirname, join } from 'node:path' +import { fileURLToPath } from 'node:url' -const __dirname = dirname(fileURLToPath(import.meta.url)); +const __dirname = dirname(fileURLToPath(import.meta.url)) -const schema = await readFile(join(__dirname,"../primary/index.json")) +const schema = await readFile(join(__dirname, '../primary/index.json')) .then((res) => JSON.parse(res)) - .catch(() => ({})); -const characteristics = await readFile(join(__dirname, "../src/values/CharacteristicName.primary.json")) + .catch(() => ({})) +const characteristics = await readFile( + join(__dirname, '../src/values/CharacteristicName.primary.json') +) .then((res) => JSON.parse(res).enum) - .catch(() => []); -const methodSpeciation = await readFile(join(__dirname, "../src/logic/CharacteristicName-MethodSpeciation.json")) + .catch(() => []) +const methodSpeciation = await readFile( + join(__dirname, '../src/logic/CharacteristicName-MethodSpeciation.json') +) .then((res) => JSON.parse(res).if.properties.CharacteristicName.enum) - .catch(() => []); -const methodSpeciationOptional = await readFile(join(__dirname, "../src/quality-control/partial/CharacteristicName-MethodSpeciation-Optional.json")) + .catch(() => []) +const methodSpeciationOptional = await readFile( + join( + __dirname, + '../src/quality-control/partial/CharacteristicName-MethodSpeciation-Optional.json' + ) +) .then((res) => JSON.parse(res).enum) - .catch(() => []); -const sampleFraction = await readFile(join(__dirname, "../src/logic/CharacteristicName-ResultSampleFraction.json")) + .catch(() => []) +const sampleFraction = await readFile( + join(__dirname, '../src/logic/CharacteristicName-ResultSampleFraction.json') +) .then((res) => JSON.parse(res).if.properties.CharacteristicName.enum) - .catch(() => []); + .catch(() => []) //const sampleFractionOptional = await readFile('../src/quality-control/partial/CharacteristicName-ResultSampleFraction-Optional.json').then(res => JSON.parse(res).enum).catch(() => ([])) -import characteristicGroup from "wqx/groups/CharacteristicName.json.js" -import characteristicCASNumber from "wqx/groups/CASNumber.json.js" -import unitDescriptions from "wqx/descriptions/MeasurementUnit.json.js" +import characteristicGroup from 'wqx/groups/CharacteristicName.json.js' +import characteristicCASNumber from 'wqx/groups/CASNumber.json.js' +import unitDescriptions from 'wqx/descriptions/MeasurementUnit.json.js' -const unitDescriptionsOverrides = await readFile(join(__dirname, "../src/lookup/MeasurementUnit.json")) +const unitDescriptionsOverrides = await readFile( + join(__dirname, '../src/lookup/MeasurementUnit.json') +) .then((res) => JSON.parse(res)) - .catch(() => ({})); + .catch(() => ({})) const buildUnits = async () => { - let csv = "Unit,Description\n"; + let csv = 'Unit,Description\n' for (const value of schema.properties.ResultUnit.enum) { - csv += `"${value}","${unitDescriptions[value] ?? unitDescriptionsOverrides[value] ?? ''}"\n`; + csv += `"${value}","${unitDescriptions[value] ?? unitDescriptionsOverrides[value] ?? ''}"\n` } await writeFile(join(__dirname, `/template/Units.csv`), csv, { - encoding: "utf8", - }); -}; + encoding: 'utf8', + }) +} const buildCharacteristics = async () => { let csv = - "CharacteristicName,MethodSpeciation,SampleFraction,Group,CASNumber\n"; + 'CharacteristicName,MethodSpeciation,SampleFraction,Group,CASNumber\n' for (const value of characteristics) { let methodSpeciationRequired = methodSpeciation.includes(value) ? 'Yes' - : 'No'; + : 'No' if ( methodSpeciationRequired === 'No' && methodSpeciationOptional.includes(value) ) { - methodSpeciationRequired = 'May'; + methodSpeciationRequired = 'May' } - let sampleFractionRequired = sampleFraction.includes(value) - ? 'Yes' - : 'No'; + let sampleFractionRequired = sampleFraction.includes(value) ? 'Yes' : 'No' // if (sampleFractionRequired === '"No"' && sampleFractionOptional.includes(value)) { // sampleFractionRequired = '"May"' // } csv += `"${value}","${methodSpeciationRequired}","${sampleFractionRequired}","${ - characteristicGroup[value] || "Not Assigned" - }","${characteristicCASNumber[value] || ""}"\n`; + characteristicGroup[value] || 'Not Assigned' + }","${characteristicCASNumber[value] || ''}"\n` } await writeFile(join(__dirname, `/template/Characteristics.csv`), csv, { - encoding: "utf8", - }); -}; + encoding: 'utf8', + }) +} const buildAllowed = async () => { - let csv = ""; + let csv = '' for (const key of Object.keys(schema.properties)) { - let { type, enum: allowed, maxLength } = schema.properties[key]; + let { type, enum: allowed, maxLength } = schema.properties[key] if (Array.isArray(allowed)) - allowed = allowed.map((value) => `"${value}"`).join(","); - csv += `${key},${maxLength || ""},${allowed || ""}\n`; + allowed = allowed.map((value) => `"${value}"`).join(',') + csv += `${key},${maxLength || ''},${allowed || ''}\n` } await writeFile(join(__dirname, `/template/AllowedValues.csv`), csv, { - encoding: "utf8", - }); -}; + encoding: 'utf8', + }) +} -buildUnits(); -buildCharacteristics(); -buildAllowed(); +buildUnits() +buildCharacteristics() +buildAllowed() diff --git a/schemas/data/bin/build-values.js b/schemas/data/bin/build-values.js index 99998693..301d8aab 100644 --- a/schemas/data/bin/build-values.js +++ b/schemas/data/bin/build-values.js @@ -1,65 +1,85 @@ -import { readFile, writeFile } from "node:fs/promises"; -import { dirname, join } from "node:path"; -import { fileURLToPath } from "node:url"; - -const __dirname = dirname(fileURLToPath(import.meta.url)); - +import { writeFile } from 'node:fs/promises' +import { dirname, join } from 'node:path' +import { fileURLToPath } from 'node:url' import { - subsetOnly, - wqx, + additions, + custom, getList, - sort, retire, - //override, - additions, - subtractions, + sort, subset, -} from "./build-lib.js"; - -for (const col of Object.keys(wqx)) { - console.log(col); - let object = await import(`wqx/values/${wqx[col]}.json.js`); - object = { ...object.default }; + subsetOnly, + subtractions, + toFriendlyName, + wqx, +} from './build-lib.js' - // Add alias - // if (col === 'CharacteristicName') { - // const alias = JSON.parse(JSON.stringify(require(`wqx/values/CharacteristicAlias.json`))) - // object.enum = object.enum.concat(alias.enum) - // } +const __dirname = dirname(fileURLToPath(import.meta.url)) - let [retired, list] = await retire(col, object.enum); - object.enum = list; +// Extract processing logic into reusable function +async function processValues(col, object) { + let [retired, list] = await retire(col, object.enum) + object.enum = list //object.enum = await override(col, object.enum); - object.enum = await additions(col, object.enum); + object.enum = await additions(col, object.enum) if (subsetOnly.includes(col)) { - object.enum = await getList("subset", col, object.enum); + object.enum = await getList('subset', col, object.enum) } - object.enum = [...new Set(sort(object.enum))]; - object.maxLength = Math.max(...object.enum.map((el) => el.length)); // catch any additions that may be longer + object.enum = [...new Set(sort(object.enum))] + // catch any additions that may be longer + object.maxLength = Math.max(...object.enum.map((el) => el.length), 0) - object.$id = `https://datastream.org/schema/data/values/${col}.loose.json`; + object.$id = `https://datastream.org/schema/data/values/${col}.legacy.json` await writeFile( join(__dirname, `/../src/values/${col}.legacy.json`), JSON.stringify(object, null, 2), - { encoding: "utf8" }, - ); + { encoding: 'utf8' } + ) - object.enum = await subset(col, object.enum); // getList('subset', col, object.enum) + object.enum = await subset(col, object.enum) // remove subset values from retire list - const subsetList = await getList("subset", col); - retired = retired.filter((item) => !subsetList.includes(item)); + const subsetList = await getList('subset', col) + retired = retired.filter((item) => !subsetList.includes(item)) - object.enum = await subtractions(col, object.enum, retired); + object.enum = await subtractions(col, object.enum, retired) //object.enum = await override(col, object.enum); - object.$id = `https://datastream.org/schema/data/values/${col}.strict.json`; + object.$id = `https://datastream.org/schema/data/values/${col}.primary.json` await writeFile( join(__dirname, `/../src/values/${col}.primary.json`), JSON.stringify(object, null, 2), - { encoding: "utf8" }, - ); + { encoding: 'utf8' } + ) +} + +// Process WQX fields +for (const col of Object.keys(wqx)) { + console.log(col) + let object = await import(`wqx/values/${wqx[col]}.json.js`) + object = { ...object.default } + + // Add alias + // if (col === 'CharacteristicName') { + // const alias = JSON.parse(JSON.stringify(require(`wqx/values/CharacteristicAlias.json`))) + // object.enum = object.enum.concat(alias.enum) + // } + + await processValues(col, object) +} + +// Process custom fields (non-WQX) +for (const col of custom) { + console.log(col) + const object = { + $id: '', + title: toFriendlyName(col), + description: '', + type: 'string', + enum: [], + } + await processValues(col, object) } diff --git a/schemas/data/package-lock.json b/schemas/data/package-lock.json index a41118a5..63f478e1 100644 --- a/schemas/data/package-lock.json +++ b/schemas/data/package-lock.json @@ -1,15 +1,15 @@ { "name": "@datastreamapp/data-schema", - "version": "2.29.0", + "version": "3.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@datastreamapp/data-schema", - "version": "2.29.0", + "version": "3.0.0", "license": "MIT", "dependencies": { - "wqx": "3.0.260" + "wqx": "3.0.276" }, "devDependencies": { "change-case": "^5.0.0" @@ -23,9 +23,9 @@ "license": "MIT" }, "node_modules/wqx": { - "version": "3.0.260", - "resolved": "https://registry.npmjs.org/wqx/-/wqx-3.0.260.tgz", - "integrity": "sha512-VoCt8TWRSok+MAzKdF23pkNyrZlkNRd7AnA2vmyF4/uJAyirVq4mSEvphpKcn/r9lHfWCwEIwlaAtwx4LwEbng==", + "version": "3.0.276", + "resolved": "https://registry.npmjs.org/wqx/-/wqx-3.0.276.tgz", + "integrity": "sha512-Q99FftDQs8/akXxszSR53CR4zpskTKqC2CXAhge0Szu/y91mbJLThCxP7RYGwG85iEAzZXRHx8cWVNohRkIePQ==", "license": "MIT" } } diff --git a/schemas/data/package.json b/schemas/data/package.json index 4f2ed89f..de399c27 100644 --- a/schemas/data/package.json +++ b/schemas/data/package.json @@ -1,6 +1,6 @@ { "name": "@datastreamapp/data-schema", - "version": "2.29.0", + "version": "3.0.0", "description": "DataStream Water Quality Data Schema", "publishConfig": { "cache": "~/.npm", @@ -22,7 +22,7 @@ "scripts": { "prebuild": "./bin/build-init.sh && node ./bin/build-values.js && node ./bin/build-logic.js && node ./bin/build-lookup.js && node ./bin/build-locales.js", "build": "./bin/build", - "test": "npm run build && c8 ava", + "test": "npm run build && node --test --experimental-test-coverage --test-coverage-exclude='locales/**' --test-coverage-exclude='test/**' test/*.js", "prepublishOnly": "npm test" }, "author": "willfarrell", @@ -32,7 +32,7 @@ }, "homepage": "https://github.com/datastreamapp/schema#readme", "dependencies": { - "wqx": "3.0.260" + "wqx": "3.0.276" }, "devDependencies": { "change-case": "^5.0.0" diff --git a/schemas/data/src/addition/ActivityDepthAltitudeReferencePoint.json b/schemas/data/src/addition/ActivityDepthAltitudeReferencePoint.json new file mode 100644 index 00000000..d7f96214 --- /dev/null +++ b/schemas/data/src/addition/ActivityDepthAltitudeReferencePoint.json @@ -0,0 +1,7 @@ +[ + "Ground surface", + "Top of instrument shelf", + "Top of outer casing", + "Top of well casing", + "Unspecified" +] diff --git a/schemas/data/src/addition/ActivityGroupType.json b/schemas/data/src/addition/ActivityGroupType.json index aec242d7..3d0ef8ef 100644 --- a/schemas/data/src/addition/ActivityGroupType.json +++ b/schemas/data/src/addition/ActivityGroupType.json @@ -1,3 +1,9 @@ [ + "Continuous Data", + "Field Measure", + "Lab Sample", + "Other", + "Quality Control - Field Measure", + "Quality Control - Lab Sample", "Unspecified" -] \ No newline at end of file +] diff --git a/schemas/data/src/addition/ActivityType.json b/schemas/data/src/addition/ActivityType.json index 28c5eeb4..9a85fa22 100644 --- a/schemas/data/src/addition/ActivityType.json +++ b/schemas/data/src/addition/ActivityType.json @@ -1,4 +1 @@ -[ - "Quality Control", - "Unspecified" -] +["Unspecified"] diff --git a/schemas/data/src/addition/AquiferType.json b/schemas/data/src/addition/AquiferType.json new file mode 100644 index 00000000..f0780c20 --- /dev/null +++ b/schemas/data/src/addition/AquiferType.json @@ -0,0 +1 @@ +["Artesian", "Confined", "Semi-Confined", "Unconfined"] diff --git a/schemas/data/src/addition/AquiferUnitName.json b/schemas/data/src/addition/AquiferUnitName.json new file mode 100644 index 00000000..8b21b1eb --- /dev/null +++ b/schemas/data/src/addition/AquiferUnitName.json @@ -0,0 +1,772 @@ +[ + "111 Mile Creek Valley Aquifer System", + "1WS Member", + "2WS Member", + "Abbotsford Shallow Aquifer", + "Abbotsford Shallow West Aquifer", + "Alberta Group", + "Aldergrove Shallow Aquifer", + "Algonquin Aquifer Complex", + "Algonquin Basin", + "Algonquin Shoreline", + "Alice Siding Aquifer", + "Alliston Aquifer Complex", + "Alluvial and glaciofluvial sand and gravel", + "Alviston-Rutherford Aquifer", + "Amabel-Lockport-Guelph Hydrogeologic Unit", + "Amherstburge Aquifer", + "Ancaster-West Flamborough Aquifer", + "Annapolis-Cornwallis valleys Aquifer", + "Anten Coquina Member", + "Arras-Fellers Heights Bedrock Aquifer", + "Arrowwood Formation", + "Arthur-Mount Forest Aquifer", + "Assiniboine delta Aquifer", + "Atha Aquifer", + "Ausable Aquifer", + "Bad Heart Formation", + "Balfron Formation", + "Banff Formation", + "Barons Sand Formation", + "Basal Aquifer", + "Basal clastic unit (Winnipeg) Aquifer", + "Basal Cretaceous Sandstone", + "Bass Island Hydrogeologic Unit", + "Battle Formation", + "Battleford Formation", + "Beach Ridge sand and gravel", + "Bearpaw Formation", + "Beaver Creek Overburden Aquifer", + "Belle Fourche Formation", + "Belly River Formation", + "Belly River Group", + "Beverly-Onoway channel Complex", + "Billings-Carlsbad-Queenston Hydrogeologic Unit", + "Blackstone Formation", + "Blewett Bedrock Aquifer", + "Blood Reserve Formation", + "Blue Mountain-Georgian Bay Hydrogeologic Unit", + "Blueberry Valley Aquifer System", + "Blueberry-Aitken Bedrock Aquifer", + "Bluesky Formation", + "Bois Blanc Hydrogeologic Unit", + "Boissevain Formation", + "Bonnyville U1 Sand", + "Bonnyville U1 Till", + "Bonnyville U2 Till", + "Boss Point Formation", + "Bothwell Aquifer", + "Bounded Channel Aquifers", + "Bourget Aquifer", + "Bow Island Formation", + "Bradley Creek Valley Aquifer System", + "Brazeau Formation", + "Bredenbury & Wynyard Formations", + "Bridge Lake Aquifer System", + "Brilliant Bedrock Aquifer", + "Bronson Lake", + "Brownsville Local Aquifer", + "Buried valley containing sand and gravel", + "Buried valley/blanket Aquifers", + "Cadomin Formation", + "Cadotte Formation", + "Caledon-Grand River Outwash Aquifer", + "Calgary Lethbridge Corridor HSU C Aquitard", + "Calgary Lethbridge Corridor HSU S1 Aquifer", + "Calgary Lethbridge Corridor HSU S2 Aquifer", + "Canadian Shield", + "Canning Aquitard", + "Canning Till Aquitard", + "Cantuar Formation", + "Canyon Overburden Aquifer", + "Carbon Member", + "Carbonate rock Aquifer", + "Carboniferous basin Aquifer", + "Cardium Formation", + "Carlile Formation", + "Casino Overburden Aquifer", + "Castlegar Overburden Aquifer", + "Cataract Group Hydrogeologic Unit", + "Catfish Creek Aquifer", + "Cedar Grove Aquifer", + "Central Catfish Creek Aquifer", + "Central Halfway-Beatton Bedrock Aquifer", + "Central South Nation Aquifer Complex", + "Champlain Aquifer", + "Channel Aquifer 1", + "Channel Aquifer 2", + "Channel Aquifer 3", + "Channel Aquitard 1", + "Channel Aquitard 2", + "Charlie Halfway Beatton Bedrock Aquifer", + "Chateauguay Aquifer", + "Chauidiere Aquifer", + "Chesley Aquifer", + "Chinchaga Formation", + "Chu Íntthi Aquifer", + "Chungo Member", + "Clarence Creek Aquifer", + "Clayton Heights Aquifer", + "Clayton Uplands Aquifer", + "Clinton Creek Bedrock Aquifer", + "Clinton Creek Lower Unconsolidated Aquifer", + "Clinton Creek Upper Sand and Gravel Aquifer", + "Clinton Group Hydrogeologic Unit", + "Coalspur Formation", + "Cold Lake Formation", + "Coldstream Aquifer", + "Colorado Group", + "Connelly Creek Formation", + "Contact Aquifer", + "Contact Rapids Formation", + "Cooking Lake area sediments", + "Cooking Lake Formation", + "Credit River Aquifer", + "Creston-Kootenay River Overburden Aquifer", + "Cridland Creek Bedrock Aquifer", + "Crowsnest River Alluvial Aquifer", + "Cumberland Group", + "Cypress Hills Formation", + "Dalehurst Member", + "Dawson Creek Overburden Aquifer", + "Del Bonita Formation", + "Detroit River Group Hydrogeologic Unit", + "Devonian Strata", + "Dinosaur Park Formation", + "Doe Creek Member", + "Doig Formation", + "Don Formation", + "Dowling Member", + "Drumheller Channel Complex", + "Drumheller Member", + "Drywood Creek Formation", + "Dundalk Aquifer", + "Dundee Hydrogeologic Unit", + "Dundurn Formation", + "Dunvegan Formation", + "Durham Aquifer", + "Duvernay Formation", + "Dyer-Wingfield-St. Edmund Hydrogeologic Unit", + "East and Middle Sixteen Mile Aquifer", + "East Creston Bedrock Aquifer", + "East Pine Bedrock Aquifer", + "East Pine-Groundbirch Bedrock Aquifer", + "Eastend Formation", + "Eastend-Ravenscrag Aquifer", + "Edson burried-valley Aquifer", + "Egmond Bay Formation", + "Elgin-Southampton Aquifer", + "Ellerslie Member", + "Ellis Group", + "Empress Formation", + "Empress Formation-Uplands glacial", + "Empress Formation-Valley fill glacial", + "Empress Formation-Valley fill glacial Tertiary Undifferentiated", + "Empress Formation-Valley fill Tertiary", + "Erie Interstadial Deposits", + "Ernestina Lake Formation", + "Esker and gravel", + "Estend Formation", + "Ethel Lake Formation", + "Etobicoke Aquifer", + "Exshaw Formation", + "Eyot Formation", + "Farrel Creek Bedrock Aquifer", + "Fernie Formation", + "First White Specks Formation", + "Fish Scales Formation", + "Fish Scales Member", + "Flesherton Aquifer", + "Floral Formation", + "Fontfill Aquifer Complex", + "Foremost Formation", + "Fort Nelson-River Alluvial Aquifer", + "Fort Simpson Formation", + "Fort St. John Overburden Aquifer System", + "Fort Vermilion Formation", + "Fourchu Group", + "Fractured Aquifers-Gulf Islands", + "Fraser Canyon Aquifer, Choate to Yale", + "Fraser Canyon Aquifer, from Yale to Haig", + "Fraser Lowlands Aquifer", + "Fraser Plateau Lava Aquifer", + "Frenchman Formation", + "Frenchman to Eastend Undifferentiated", + "Fulford Aquifer", + "Fundy Group", + "Ganges Harbour Aquifer", + "Georgeville Group", + "Gething Formation", + "Gibsons/SCRD Granthams Landing/Elphinstone Aquifer", + "Glaciolacustrine Aquifer Complex", + "Glade Overburden Aquifer", + "Glauconitic Sandstone Formation", + "Glemmore Basal Aquifer", + "Gleneden Aquifer", + "Grand Centre Formation", + "Grand Forks Aquifer", + "Grand Rapids Formation", + "Grand River Aquifer", + "Grand River Basin Aquifer", + "Grand River Outwash Deposits", + "Grand River Valley Basinal Deposits", + "Grandview Aquifer", + "Grant Hill Aquifer", + "Greater Kelowna Aquifer", + "Greatlakean Stade Deposits", + "Green River Aquifer", + "Greendale Deep Aquifer", + "Greenwood", + "Greenwood Aquifer", + "Grimshaw Gravels Aquifer", + "Grosmont Formation", + "Groundbirch Buried Valley Aquifer", + "Grumbler Group", + "Guichon Creek Aquifer", + "Haans Creek to Blain Creek-Haida Gwaii Aquifer", + "Hagan Aquifer", + "Haida/Lawnhill Aquifer", + "Haig Aquifer", + "Halfway Valley Aquifer System", + "Halton Till", + "Halverson Ridge Formation", + "Hamilton Group Hydrogeologic Unit", + "Hand Hills Formation", + "Hanover Aquifer", + "Hanson Member", + "Harrow Aquifer", + "Hatzic Prairie Aquifer", + "Haultain Formation", + "Haven Member", + "Haynes Aquifer", + "Haynes Member", + "Hazelmere Aquifer", + "Hazelmere Valley Aquifer", + "Heather Bank Aquifer", + "Hillsborough Formation", + "Hillsborough River Formation", + "Hockley Valley Aquifer", + "Holstein Aquifer", + "Holt Aquifer Complex", + "Hopington AB Aquifer", + "Hopington C Aquifer", + "Horseshoe Canyon Formation", + "Horsethief Member", + "Horton Group", + "Houston Bedrock Aquifer", + "Hullcar Confined Aquifer", + "Hullcar Perched", + "Hullcar Unconfined Aquifer", + "Ireton Formation", + "Ishbel Group", + "Joeyaska Deep Aquifer", + "Joeyaska Shallow Aquifer", + "Joli Fou Formation", + "Judith River Aquifer", + "Judith River/Belly River Formation", + "Jumping Pound SST Member", + "Jurassic Formations", + "Kame Outwash Aquifer Complex", + "Karmutsen Aquifer", + "Kaskapau Formation", + "Kawkawa Lake Aquifer", + "Keating Aquifer", + "Keg River Formation", + "Kettle Point Hydrogeologic Unit", + "Kildare Formation", + "Kingsvale Aquifer", + "Kiskatinaw Buried Channel Aquifer", + "Kiskatinaw Glaciodeltaic Overburden Aquifer", + "Kitchener Creek Overburden Aquifer", + "Kleinburg Aquifer", + "Koksilah River Valley Aquifer", + "Kwinshatin Intertill Aquifer", + "La Glace Sandstone Member", + "La Loche Formation AND Basal Red Beds Unit", + "Lacombe Aquitard", + "Lacombe Member", + "Lake Algonquin Sand Aquifer", + "Lake Peel Deltaic Aquifer", + "Lake Schomberg and Algonquin Aquifer", + "Lake Schomberg and Algonquin Aquitard", + "Lancaster-Cornwall Aquifer", + "Langdale/Hopkins Aquifer", + "Langdale/Hopkins Landing Aquifer", + "Langley Upland Aquifer", + "Langley Upland Intertill Aquifer", + "LD Basal Till", + "LD Local Aquifers", + "LD Lower Aquifer", + "LD Middle Till", + "LD Upper Till", + "Lea Park Formation", + "Leamington Aquifer", + "Leduc Formation", + "Lenses of sand and gravel", + "Lincoln Aquifer", + "Little Qualicum River Aquifer", + "Local Aquifer 2", + "Local Aquitard 1", + "Lookout Ridge Aquifer", + "Łots'an Aquifer", + "Lower Bearpaw Formation", + "Lower Belly River Formation", + "Lower Brazeau Member", + "Lower Bridge Creek Valley Aquifer System", + "Lower Bridge Creek Valley Bedrock Aquifer", + "Lower Brougham Aquifer", + "Lower Cassidy Aquifer", + "Lower Catfish Creek Till Aquitard", + "Lower Cherryville Aquifer", + "Lower Chinguacousy Aquifer", + "Lower Coalspur Member", + "Lower Coquihalla Canyon Aquifer", + "Lower Cowichan River A Aquifer", + "Lower Cowichan River C Aquifer", + "Lower Erie Phase Aquifer", + "Lower Erie Phase Aquitard", + "Lower Gates River Aquifer", + "Lower Lac la Hache Valley Bedrock Aquifer", + "Lower Lea Park Formation", + "Lower Loon River Formation", + "Lower Lotsberg Formation", + "Lower Markham Aquifer", + "Lower Maryhill Till", + "Lower Merritt Aquifer", + "Lower Montney Formation", + "Lower Nechako River Aquifer", + "Lower Nicola Aquifer", + "Lower Nicola Outwash Aquifer", + "Lower Ordovician OR Cambrian Strata", + "Lower Scollard Member", + "Lower Shaftesbury Formation", + "Lower Shuswap Deep Confined", + "Lower Shuswap River Confined", + "Lower Thorncliffe Aquifer", + "Lower Thorncliffe Aquitard", + "Lower Unionville Aquifer", + "Lower Victoria Aquifer", + "Lower Wapiti Member", + "Lower Willow Creek Member", + "Lowland Aquifer Complex", + "Lumby-Lower Aquifer", + "Lumby-Upper Aquifer", + "Lundbreck Formation", + "Mabou Group", + "Mackinaw Interstadial Deposits", + "Majeau Lake Formation", + "Major buried sand and gravel", + "Malahat Ridge Aquifer", + "Malcolm Island Aquifer", + "Mannville Group", + "Maple Aquifer", + "Mara Aquifer Aquifer", + "Marble Hill Unconsolidated Aquifer", + "Marie Creek Formation", + "Markdale Aquifer", + "Marshybank Formation", + "Marshybank Member", + "Masset Aquifer", + "McDougall Creek Deltaic Aquifer", + "McMillan Island Aquifer", + "McMurray Formation", + "Meaford Aquifer", + "Medicine Hat Formation", + "Medicine Hat Member", + "Meguma SuperGroup", + "Meltwater Channel Hydrogeologic Unit", + "Mennon Formation", + "Middle Erie Phase Aquifer", + "Middle Maryhill Till", + "Middle Merritt Aquifer", + "Middle Montney Formation", + "Middle Red Beds Formation", + "Middle Thorncliffe Aquifer", + "Middle Thorncliffe Aquitard", + "Middle Waterloo Moraine Aquifer & Equivalents", + "Milk River Aquifer", + "Milk River Formation", + "Mill Bay Aquifer", + "Minesing Basin Transgressive Deposits", + "Mirabel Aquifer", + "Mission Creek Aquifer", + "Monteith Formation", + "Montney Halfway Beatton Bedrock Aquifer", + "Montney Turbidite", + "Montrose Bedrock Aquifer", + "Morien Group", + "Morrin Member", + "Mount Albert Aquifer Complex", + "Mount Ozzard Bedrock West Aquifer", + "Mount Ozzard, Bedrock Southeast", + "Mount Ozzard, Unconsolidated", + "Mount Tom Bedrock", + "Mount Tom Bedrock Aquifer", + "Mount Tom Unconsolidated", + "Muriel Lake", + "Murrayville AC Aquifer", + "Murrayville B Aquifer", + "Muskeg Formation", + "Muskeg Lower Anhydrite Member", + "Muskiki Formation", + "Muskiki Formation OR Kaskapau Formation", + "Muskiki Member", + "Muskwa Formation", + "Muskwa River Alluvial Aquifer", + "Muskwa-Fort Nelson Buried Valley Aquifer", + "Muskwa-Fort Nelson Glaciofluvial Aquifer", + "Nanaimo Group Aquifer, Campbell River to Courtney", + "Nanaimo Lowlands Aquifer", + "NE of White Rock A Aquifer", + "NE of White Rock B Aquifer", + "Nechako Buried Valley Aquifer", + "Nelson Overburden Aquifer", + "Newmarket Till", + "Newton Upland Aquifer", + "Niagra-on-the-Lake Aquifer", + "Nicomekl-Serpentine Aquifer", + "Nicomen Slough Aquifer", + "Nikanassin Formation", + "Niobrara Formation", + "Nissouri Stadial Deposits", + "Nivek Aquifer", + "Nomad Member", + "Norfolk Sand Plain Aquifer", + "Norns Creek Overburden Aquifer", + "North Campbell River Bedrock", + "North Campbell River Unconsolidated", + "North Castlegar Bedrock Aquifer", + "North Central Saanich Aquifer", + "North Hope Aquifer", + "North Houston Bedrock", + "North Mountain Formation", + "North Nechako Terrace Bedrock Aquifer", + "North Salt Spring Island Aquifer", + "North-Central Salt Spring Island Aquifer", + "Northern Halfway Beatton Bedrock Aquifer", + "Northern Lac la Hache Aquifer System", + "Northwest Halfway-Beatton Bedrock Aquifer", + "Northwest of Clearbrook Aquifer", + "Notre Dame Aquifer", + "O Avenue Aquifer", + "O'Keefe Basal", + "O'Keefe Unconfined Aquifer", + "Oak Ridges Moraine Aquifer", + "Obed Mountain Formation", + "Odanah Member", + "Odanah Shale Aquifer", + "Okanagan Landing Deep Confined", + "Okanagan Valley Aquifer", + "Oldcastle Aquifer", + "Oldman Formation", + "Opabin Member", + "Orangeville Aquifer Complex", + "Orby Head Formation", + "Oro Moraine Aquifer Complex", + "Oro-Medonte Aquifer", + "Osoyoos West Aquifer", + "Ostracod Beds Member", + "Ottawa Group Hydrogeologic Unit", + "Owl Creek Aquifer", + "Owl Ridge Aquifer", + "Oyster River Aquifer", + "Pacheedaht Aquifer", + "Paddy Formation", + "Pakowki Formation", + "Paldi-Deep Aquifer", + "Paleozoic Carbonate rock formations, Ordovician to Devonian", + "Paris Aquifer", + "Paris moraine Aquitard", + "Paskapoo Formation", + "Paskapoo Formation Aquifer", + "Paterson Overburden Aquifer", + "Paul's Basin Aquifer", + "Peace River Formation", + "Peace-Valley Aquifer System", + "Pelican Formation", + "Pelican Mountain Formation", + "Pense Formation", + "Pickering Aquifer", + "Pictou Group", + "Pike Lake Formation", + "Pineview Aquifer", + "Plantagenet Aquifer", + "Porcupine Hills Formation", + "Porcupine Hills Formation Aquifers", + "Port Bruce Phase Aquitard", + "Port Bruce Stadial Deposits", + "Port Clements Aquifer", + "Port Colborne Aquifer", + "Port Huron Stadial Deposits", + "Port McNeill East Bedrock Aquifer", + "Port McNeill East Unconsolidated", + "Port McNeill West Bedrock", + "Port McNeill West Unconsolidated", + "Portneuf Aquifer", + "Pottery Road Formation", + "Pouce Coupe Member", + "Pouce Coupe Overburden Aquifer", + "Pouce Creek Bedrock Aquifer", + "Powers Ck Deltaic Aquifer", + "Prairie Evaporite Formation", + "Pre-Canning Aquifers", + "Pre-Canning Aquitard", + "Pre-Catfish Aquifers", + "Precambrian Hydrogeologic Unit", + "Precambrian rocks", + "Precambrian to Model Base", + "Priceville Aquifer", + "Prophet River Alluvial Aquifer", + "Puntledge/ Cumberland Aquifer", + "Puskwaskau Formation", + "Puslinch Aquifer", + "Quadra Central Bedrock Aquifer", + "Quadra South Bedrock Aquifer", + "Queenston Hydrogeologic Unit", + "Quinsam to Stories Beach Aquifer", + "Ravenscrag Formation", + "Ravenscrag to Eastend Undifferentiated", + "Rawlings Lake Aquifer", + "Red Deer River channel complex", + "Regional Aquifer 3", + "Regional Aquitard 3", + "Richelieu-Yamaska Aquifer", + "Richibucto Formation", + "Rideau Front Aquifer", + "Riding Mountain/Pierre Shale Formation", + "Roberts Creek Aquifer", + "Rockcliffe Hydrogeologic Unit", + "Rockland Aquifer", + "Rosebery Aquifer", + "Rundle Group", + "Ryder Upland A Aquifer", + "Ryder Upland B Aquifer", + "Ryder Upland C Aquifer", + "Saint-Maurice Aquifer", + "Salina Hydrogeologic Unit", + "Salmo River Bedrock Aquifer", + "Salmo River Overburden Aquifer", + "Salmon River Aquifer", + "Salmon River-Lower Aquifer", + "Salmon River-Upper Aquifer", + "Sand Dunes Aquifer", + "Sandilands Aquifer", + "Sandspit-Haida Gwaii Aquifer", + "Sardis-Vedder Aquifer", + "Sarsfield Aquifer", + "Sayward-Salmon River Aquifer", + "Scarborough Formation", + "Schomberg Aquifer Complex", + "Schooler Creek Group", + "Scollard Formation", + "Sechelt/Wakefield Creek Aquifer", + "Second White Specks Formation", + "Second White Specks/Favel Formation", + "Sediment Above Bedrock", + "Seton Portage Aquifer", + "Shaftesbury Formation", + "Shannon Lake Aquifer", + "Shawnigan Lake Aquifer", + "Shawnigan Lake/Cobble Hill/Mill Bay Aquifer", + "Sheridan Lake Aquifer", + "Shuswap Highlands Aquifer", + "Silurian", + "Simcoe Group Hydrogeologic Unit", + "Similkameen River Aquifer", + "Sinkut Mountain North Surficial Aquifer", + "Skidgate/Queen Charlotte Aquifer", + "Slave Point Formation", + "Smoky Group", + "Sooke-Metchosin Aquifer", + "South Castlegar Bedrock Aquifer", + "South Central Elgin Aquifer", + "South Fraser Lake Bedrock Aquifer", + "South Fraser River Delta Aquifer", + "South London Aquifer", + "South Nation Aquifer", + "South Nechako Terrace Bedrock Aquifer", + "South of Aldergrove Aquifer", + "South of Hopington Aquifer", + "South of Murrayville AC Aquifer", + "South of Murrayville B Aquifer", + "South Quadra Unconsolidated Aquifer", + "South Salt Spring Island Aquifer", + "South Valemont Aquifer", + "South Vanderhoof Unconsolidated Aquifer", + "South Vernon Confined Aquifer", + "South Vernon Unconfined Aquifer", + "South-Central Salt Spring Island Aquifer", + "Southern Horse Lake Aquifer System Aquifer", + "Spallumcheen Basal Confined Aquifer", + "Spallumcheen Confined", + "Spallumcheen Unconfined Aquifer", + "Spences Bridge Aquifer", + "Sperling Aquifer", + "Spirit River Formation", + "Spius Creek West of Canford Aquifer", + "St. Catharines Aquifer", + "St. George Aquifers", + "St. Martin Aquifer", + "St. Mary River Formation", + "St. Mathieu Aquifer", + "St. Thomas Moraine Local Aquifers", + "Stavely Aquifer", + "Stellako Unconsolidated Aquifer", + "Stirling Group", + "Stoddart Group", + "Strathmore Member", + "Stumbles Creek Aquifer", + "Stumbles Creek Confined", + "Stump Lake", + "Stump Lake Bedrock", + "Sugar Lake Aquifer", + "Sulphur Point Formation", + "Sumas Prairie Aquifer", + "Sumas Prairie North Aquifer", + "Sunchild Aquifer", + "Sunkay Formation", + "Sunningdale/Glenmerry Bedrock Aquifer", + "Sunnybrae Aquifer", + "Sunnybrook Drift", + "Sunset Creek Overburden Aquifer", + "Sunset Prairie Bedrock Aquifer", + "Swan Hills Formation", + "Swan Lake Confined Aquifer", + "Swan Lake Unconfined", + "Swan River Formation", + "Sweetwater Bedrock Aquifer", + "Tachick Lake Unconsolidated Aquifer", + "Talik regions", + "Tappen Aquifer", + "Thick and extensive unconfined sand and gravel", + "Thin unconfined sand", + "Thistle Member", + "Thornbury Aquifer", + "Thorncliffe Formation", + "Thornill Aquifer", + "Thornton Sand Aquifer", + "Tillsonburg Aquifer", + "Tlell Aquifer", + "Tolman Member", + "Topley Bedrock Aquifer", + "Trail Townsite Overburden Aquifer", + "Trail/Warfield Bedrock Aquifer", + "Trinity Valley Aquifer", + "Tsawwassen Aquifer", + "Tsolum River, North of Courtney Aquifer", + "Tuhok Confined Aquifer", + "Tuhok Unconfined Aquifer", + "Turtle Mountain Formation", + "Two Creeks Interstadial Deposits", + "Tyconnell Formation", + "Ucluelet Peninsula Aquifer", + "Ucluelet, Lost Shoe Aquifer", + "Ucluelet, Lost Show Aquifer", + "Unicola Aquifer", + "Unit A Exposed Bedrock and Drift-Poor Areas", + "Unit B Till and Ribbed Moraine Deposits", + "Unit C Ablation Drift Deposits", + "Unit D Glaciomarine and Marine Deposits and Glaciolacustrine Deposits", + "Unit E Glaciofluvial Deposits", + "Upland Aquifer Complex", + "Upper and Lower Gloucester Aquifers", + "Upper and Lower Nepean-Kemptville Aquifers", + "Upper and Lower West Nepean Aquifers", + "Upper Aquifer 1", + "Upper Bearpaw Formation", + "Upper Brazeau Member", + "Upper Bridge Creek Bedrock Aquifer", + "Upper Bridge Creek Valley Aquifer System", + "Upper Brougham Aquifer", + "Upper Bulkley Alluvial Aquifer", + "Upper Catfish Creek Till Aquitard", + "Upper Cherryville Aquifer", + "Upper Chinguacousy Aquifer", + "Upper Coalspur Member", + "Upper Cretaceous sands Aquifer", + "Upper Erie Phase Aquifer", + "Upper Erie Phase Aquitard", + "Upper Gates River Aquifer", + "Upper Halfway Bedrock Aquifer", + "Upper Lac la Hache Valley Bedrock Aquifer", + "Upper Lea Park Formation", + "Upper Loon Formation", + "Upper Lotsberg Formation", + "Upper Markham Aquifer", + "Upper Maryhill Till", + "Upper Merritt Aquifer", + "Upper Montney Formation", + "Upper Ordovician strata", + "Upper Scollard Member", + "Upper Shaftesbury Formation", + "Upper Thames Aquifer", + "Upper Thorncliffe Aquifer", + "Upper Thorncliffe Aquitard", + "Upper Unionville Aquifer", + "Upper Victoria Aquifer", + "Upper Wapiti Member", + "Upper Waterloo Moraine Aquifer", + "Upper Willow Creek Member", + "Valens Outwash Aquifer", + "Valley View-Dawson Creek Bedrock Aquifer", + "Vanderhoof Alluvial Aquifer", + "Vedder Crossing Aquifer", + "Vedder Mountain NW Bedrock Aquifer", + "Vedder Mountain SE Bedrock Aquifer", + "Vellore Aquifer", + "Verger Member", + "Vermillion River Formation", + "Vernon Confined", + "Vernon Unconfined", + "Viking Formation", + "Viking/Newcastle Formation", + "Vimy Member", + "Wabamun Group", + "Wabiskaw Member", + "Wainfleet Aquifer", + "Walker Hook Aquifer", + "Walkerton Aquifer", + "Wallaceburg Aquifer", + "Wallacetown Formation", + "Wapiabi Formation", + "Wapiti Formation", + "Wark-Colquitz Aquifer", + "Warman Formation", + "Waterloo Moraine Aquifer", + "Waterways Formation", + "Watson Creek Valley Aquifer System", + "Watt Mountain Formation", + "Wentworth Aquifer", + "Wentworth Till/Aquitard", + "West Arrow Creek Overburden Aquifer", + "West Carlton Aquifer", + "West Cluculz Lake Bedrock Aquifer", + "West Creston Aquifer", + "West Langley Aquifer", + "West of Aldergrove Aquifer", + "West of Merritt Aquifer", + "West Saanich Road Aquifer", + "West Sechelt Aquifer", + "Westgate Formation", + "Westwold Aquifer", + "White Rock Aquifer", + "Whitecourt Mountain Formation", + "Whitemud Formation", + "Whitemud Member", + "Whittlesey Aquifer", + "Whittlesey Clay/Aquitard", + "Whittlesey Sand", + "Willow Creek Alluvial Aquifer", + "Willow Creek Formation", + "Willow Creek Formation Aquifer", + "Windsor Group", + "Winnipeg Formation", + "Winnipegosis Formation", + "Winterburn Group", + "Wood Mountain and Mount Washington Aquifer", + "Wood Mountain Formation", + "Woodbridge Aquifer", + "Yonge Street Aquifer", + "York Till", + "Zama Member" +] diff --git a/schemas/data/src/addition/AquiferUnitPorosityType.json b/schemas/data/src/addition/AquiferUnitPorosityType.json new file mode 100644 index 00000000..cb8f1a95 --- /dev/null +++ b/schemas/data/src/addition/AquiferUnitPorosityType.json @@ -0,0 +1 @@ +["Fractured", "Granular", "Karstic", "Mixed"] diff --git a/schemas/data/src/addition/CharacteristicName.json b/schemas/data/src/addition/CharacteristicName.json index b31ac846..ac83dc9c 100644 --- a/schemas/data/src/addition/CharacteristicName.json +++ b/schemas/data/src/addition/CharacteristicName.json @@ -17,5 +17,6 @@ "m- & p-Chlorophenol", "Phosphorus, elemental", "p-Chlorophenol", - "Thorium" + "Thorium", + "Water level elevation" ] diff --git a/schemas/data/src/addition/LithologyType.json b/schemas/data/src/addition/LithologyType.json new file mode 100644 index 00000000..4f66f0bf --- /dev/null +++ b/schemas/data/src/addition/LithologyType.json @@ -0,0 +1,65 @@ +[ + "Andesite", + "Anthropogenic material", + "Basalt", + "Bedrock", + "Carbonate sedimentary rock", + "Clay", + "Clayey Sand", + "Clayey Silt", + "Coal", + "Conglomerate", + "Diamicton", + "Diorite", + "Dolomite", + "Evaporite", + "Gabbro", + "Gneiss", + "Granite", + "Gravel", + "Gravelly Mud", + "Gravelly Muddy Sand", + "Gravelly Sand", + "Gravely Sediment", + "Humus", + "Igneous rock", + "Interbedded gravel and clay", + "Interbedded gravel and sand", + "Interbedded gravel and silt", + "Interbedded sand and clay", + "Interbedded sand and silt", + "Interbedded silt and clay", + "Limestone", + "Marble", + "Metamorphic rock", + "Mud", + "Muddy Gravel", + "Muddy Sand", + "Muddy Sandy Gravel", + "Organic material", + "Peat", + "Plutonic rock", + "Quartzite", + "Rhyolite", + "Sand", + "Sand, Silt, Clay", + "Sandstone", + "Sandy Clay", + "Sandy Gravel", + "Sandy Mud", + "Sandy Silt", + "Schist", + "Sedimentary rock", + "Shale", + "Silt", + "Siltite", + "Silty Clay", + "Silty Sand", + "Slate", + "Soil", + "Till", + "Unconsolidated material", + "Undifferentiated sediment", + "Unknown material", + "Volcanic rock" +] diff --git a/schemas/data/src/addition/MonitoringLocationType.json b/schemas/data/src/addition/MonitoringLocationType.json index 2001c752..d92d12e7 100644 --- a/schemas/data/src/addition/MonitoringLocationType.json +++ b/schemas/data/src/addition/MonitoringLocationType.json @@ -1 +1,9 @@ -["Lake/Pond", "Unspecified", "Wetland"] +[ + "Dug Well", + "Lake/Pond", + "Multilevel Well", + "Nested Well", + "Piezometer", + "Unspecified", + "Wetland" +] diff --git a/schemas/data/src/addition/MonitoringLocationVerticalCollectionMethod.json b/schemas/data/src/addition/MonitoringLocationVerticalCollectionMethod.json new file mode 100644 index 00000000..31ffb12d --- /dev/null +++ b/schemas/data/src/addition/MonitoringLocationVerticalCollectionMethod.json @@ -0,0 +1 @@ +["Handheld GPS - Positioning Method Unspecified"] diff --git a/schemas/data/src/addition/MonitoringLocationVerticalCoordinateReferenceSystem.json b/schemas/data/src/addition/MonitoringLocationVerticalCoordinateReferenceSystem.json new file mode 100644 index 00000000..5443de86 --- /dev/null +++ b/schemas/data/src/addition/MonitoringLocationVerticalCoordinateReferenceSystem.json @@ -0,0 +1 @@ +["CGVD2013", "CGVD28"] diff --git a/schemas/data/src/addition/ResultAnalyticalMethodContext.json b/schemas/data/src/addition/ResultAnalyticalMethodContext.json index ebcb31bb..58f53800 100644 --- a/schemas/data/src/addition/ResultAnalyticalMethodContext.json +++ b/schemas/data/src/addition/ResultAnalyticalMethodContext.json @@ -9,5 +9,6 @@ "RBR", "Seal", "Solinst", + "USDA/SSIR", "VMV" ] diff --git a/schemas/data/src/addition/SampleCollectionEquipmentName.json b/schemas/data/src/addition/SampleCollectionEquipmentName.json new file mode 100644 index 00000000..c29d09bb --- /dev/null +++ b/schemas/data/src/addition/SampleCollectionEquipmentName.json @@ -0,0 +1,8 @@ +[ + "Air line", + "Bailer", + "Hydrasleeve", + "Snap sampler", + "Water level meter", + "Wetted tape" +] diff --git a/schemas/data/src/addition/SampleCollectionMethodContext.json b/schemas/data/src/addition/SampleCollectionMethodContext.json new file mode 100644 index 00000000..46acb7fd --- /dev/null +++ b/schemas/data/src/addition/SampleCollectionMethodContext.json @@ -0,0 +1,11 @@ +[ + "AB_AEP", + "AB_AGS", + "BC_MOE", + "ISO", + "NL_ECCC", + "NS_DNR", + "NS_ECC", + "PROPRIETARY", + "QC_MOE" +] diff --git a/schemas/data/src/addition/SampleCondition.json b/schemas/data/src/addition/SampleCondition.json new file mode 100644 index 00000000..a165a4f4 --- /dev/null +++ b/schemas/data/src/addition/SampleCondition.json @@ -0,0 +1,8 @@ +[ + "Flowing", + "Nearby site is being pumped or pumped recently", + "Static, before pumping or purging", + "The site has been recently pumped or purged", + "The site is being pumped for water use", + "Unspecified" +] diff --git a/schemas/data/src/addition/WellIDContext.json b/schemas/data/src/addition/WellIDContext.json new file mode 100644 index 00000000..08768b8e --- /dev/null +++ b/schemas/data/src/addition/WellIDContext.json @@ -0,0 +1,15 @@ +[ + "AB", + "BC", + "MB", + "NB", + "NL", + "NS", + "NT", + "ON", + "PE", + "QC", + "SK", + "YK", + "OTHER" +] diff --git a/schemas/data/src/addition/WellUseType.json b/schemas/data/src/addition/WellUseType.json new file mode 100644 index 00000000..11174c50 --- /dev/null +++ b/schemas/data/src/addition/WellUseType.json @@ -0,0 +1,10 @@ +[ + "Aquaculture", + "Bottling", + "Dewatering", + "Livestock", + "Monitoring - Ambient", + "Monitoring - Other", + "Public Supply - Municipal", + "Public Supply - Other" +] diff --git a/schemas/data/src/backend.json b/schemas/data/src/backend.json index fd9e0961..6cee8db1 100644 --- a/schemas/data/src/backend.json +++ b/schemas/data/src/backend.json @@ -1,5 +1,5 @@ { - "$id": "https://datastream.org/schema/data/backend", + "$id": "https://datastream.org/schema/data/backend.json", "$schema": "https://json-schema.org/draft/2020-12/schema#", "$vocabulary": { "https://ajv.js.org/packages/ajv-formats.html#date": true, @@ -49,10 +49,89 @@ "$ref": "./definitions.json#/definitions/MonitoringLocationVerticalUnitLoose", "transform": ["trim", "toEnumCase"] }, + "MonitoringLocationVerticalAccuracyMeasure": { + "$ref": "./definitions.json#/definitions/MonitoringLocationVerticalAccuracyMeasure" + }, + "MonitoringLocationVerticalAccuracyUnit": { + "$ref": "./definitions.json#/definitions/MonitoringLocationVerticalAccuracyUnitLoose", + "transform": ["trim", "toEnumCase"] + }, + "MonitoringLocationVerticalCollectionMethod": { + "$ref": "./definitions.json#/definitions/MonitoringLocationVerticalCollectionMethodLoose", + "transform": ["trim", "toEnumCase"] + }, + "MonitoringLocationVerticalCoordinateReferenceSystem": { + "$ref": "./definitions.json#/definitions/MonitoringLocationVerticalCoordinateReferenceSystemLoose", + "transform": ["trim", "toEnumCase"] + }, "MonitoringLocationType": { "$ref": "./definitions.json#/definitions/MonitoringLocationTypeLoose", "transform": ["trim", "toEnumCase"] }, + "WellID": { + "$ref": "./definitions.json#/definitions/WellID", + "transform": ["trim"] + }, + "WellIDContext": { + "$ref": "./definitions.json#/definitions/WellIDContextLoose", + "transform": ["trim", "toEnumCase"] + }, + "WellUseType": { + "$ref": "./definitions.json#/definitions/WellUseTypeLoose", + "transform": ["trim", "toEnumCase"] + }, + "AquiferCode": { + "$ref": "./definitions.json#/definitions/AquiferCode", + "transform": ["trim"] + }, + "AquiferUnitName": { + "$ref": "./definitions.json#/definitions/AquiferUnitNameLoose", + "transform": ["trim", "toEnumCase"] + }, + "AquiferType": { + "$ref": "./definitions.json#/definitions/AquiferTypeLoose", + "transform": ["trim", "toEnumCase"] + }, + "AquiferUnitPorosityType": { + "$ref": "./definitions.json#/definitions/AquiferUnitPorosityTypeLoose", + "transform": ["trim", "toEnumCase"] + }, + "LithologyType": { + "$ref": "./definitions.json#/definitions/LithologyTypeLoose", + "transform": ["trim", "toEnumCase"] + }, + "BoreholeDepthMeasure": { + "$ref": "./definitions.json#/definitions/BoreholeDepthMeasure" + }, + "BoreholeDepthUnit": { + "$ref": "./definitions.json#/definitions/BoreholeDepthUnitLoose", + "transform": ["trim", "toEnumCase"] + }, + "WellDepthMeasure": { + "$ref": "./definitions.json#/definitions/WellDepthMeasure" + }, + "WellDepthUnit": { + "$ref": "./definitions.json#/definitions/WellDepthUnitLoose", + "transform": ["trim", "toEnumCase"] + }, + "WellOpenIntervalTopMeasure": { + "$ref": "./definitions.json#/definitions/WellOpenIntervalTopMeasure" + }, + "WellOpenIntervalTopUnit": { + "$ref": "./definitions.json#/definitions/WellOpenIntervalTopUnitLoose", + "transform": ["trim", "toEnumCase"] + }, + "WellOpenIntervalBottomMeasure": { + "$ref": "./definitions.json#/definitions/WellOpenIntervalBottomMeasure" + }, + "WellOpenIntervalBottomUnit": { + "$ref": "./definitions.json#/definitions/WellOpenIntervalBottomUnitLoose", + "transform": ["trim", "toEnumCase"] + }, + "EventID": { + "$ref": "./definitions.json#/definitions/EventID", + "transform": ["trim"] + }, "ActivityType": { "$ref": "./definitions.json#/definitions/ActivityTypeLoose", "transform": ["trim", "toEnumCase"] @@ -86,10 +165,37 @@ "$ref": "./definitions.json#/definitions/ActivityDepthHeightUnitLoose", "transform": ["trim", "toEnumCase"] }, + "ActivityDepthAltitudeReferencePoint": { + "$ref": "./definitions.json#/definitions/ActivityDepthAltitudeReferencePointLoose", + "transform": ["trim", "toEnumCase"] + }, + "ActivityDepthAltitudeReferencePointMeasure": { + "$ref": "./definitions.json#/definitions/ActivityDepthAltitudeReferencePointMeasure" + }, + "ActivityDepthAltitudeReferencePointUnit": { + "$ref": "./definitions.json#/definitions/ActivityDepthAltitudeReferencePointUnitLoose", + "transform": ["trim", "toEnumCase"] + }, + "SampleCondition": { + "$ref": "./definitions.json#/definitions/SampleConditionLoose", + "transform": ["trim", "toEnumCase"] + }, "SampleCollectionEquipmentName": { "$ref": "./definitions.json#/definitions/SampleCollectionEquipmentNameLoose", "transform": ["trim", "toEnumCase"] }, + "SampleCollectionMethodName": { + "$ref": "./definitions.json#/definitions/SampleCollectionMethodName", + "transform": ["trim"] + }, + "SampleCollectionMethodID": { + "$ref": "./definitions.json#/definitions/SampleCollectionMethodID", + "transform": ["trim"] + }, + "SampleCollectionMethodContext": { + "$ref": "./definitions.json#/definitions/SampleCollectionMethodContextLoose", + "transform": ["trim", "toEnumCase"] + }, "CharacteristicName": { "$ref": "./definitions.json#/definitions/CharacteristicNameLoose", "transform": ["trim", "toEnumCase"] diff --git a/schemas/data/src/definitions.json b/schemas/data/src/definitions.json index 5c53bd28..a720ac23 100644 --- a/schemas/data/src/definitions.json +++ b/schemas/data/src/definitions.json @@ -1,5 +1,5 @@ { - "$id": "https://datastream.org/schema/data/definitions", + "$id": "https://datastream.org/schema/data/definitions.json", "definitions": { "DatasetName": { "$ref": "#/definitions/string", @@ -7,66 +7,197 @@ "maxLength": 512 }, "MonitoringLocationID": { - "$ref": "../node_modules/wqx/json-schema/definitions.json#/definitions/MonitoringLocationID", + "$ref": "https://epa.gov/wqx/definitions.json#/definitions/MonitoringLocationID", "minLength": 1, "errorMessage": { "pattern": "error-string-pattern" } }, "MonitoringLocationName": { - "$ref": "../node_modules/wqx/json-schema/definitions.json#/definitions/MonitoringLocationName", + "$ref": "https://epa.gov/wqx/definitions.json#/definitions/MonitoringLocationName", "minLength": 1, "errorMessage": { "pattern": "error-string-pattern" } }, "MonitoringLocationLatitude": { - "$ref": "../node_modules/wqx/json-schema/definitions.json#/definitions/MonitoringLocationLatitude" + "$ref": "https://epa.gov/wqx/definitions.json#/definitions/MonitoringLocationLatitude" }, "MonitoringLocationLongitude": { - "$ref": "../node_modules/wqx/json-schema/definitions.json#/definitions/MonitoringLocationLongitude" + "$ref": "https://epa.gov/wqx/definitions.json#/definitions/MonitoringLocationLongitude" }, "MonitoringLocationHorizontalCoordinateReferenceSystemStrict": { - "$ref": "./values/MonitoringLocationHorizontalCoordinateReferenceSystem.primary.json" + "$ref": "https://datastream.org/schema/data/values/MonitoringLocationHorizontalCoordinateReferenceSystem.primary.json" }, "MonitoringLocationHorizontalCoordinateReferenceSystemLoose": { - "$ref": "./values/MonitoringLocationHorizontalCoordinateReferenceSystem.legacy.json" + "$ref": "https://datastream.org/schema/data/values/MonitoringLocationHorizontalCoordinateReferenceSystem.legacy.json" }, "MonitoringLocationHorizontalAccuracyMeasure": { - "$ref": "../node_modules/wqx/json-schema/definitions.json#/definitions/ActivityHorizontalAccuracyMeasure" + "$ref": "https://epa.gov/wqx/definitions.json#/definitions/ActivityHorizontalAccuracyMeasure" }, "MonitoringLocationHorizontalAccuracyUnitStrict": { - "$ref": "./values/MonitoringLocationHorizontalAccuracyUnit.primary.json" + "$ref": "https://datastream.org/schema/data/values/MonitoringLocationHorizontalAccuracyUnit.primary.json" }, "MonitoringLocationHorizontalAccuracyUnitLoose": { - "$ref": "./values/MonitoringLocationHorizontalAccuracyUnit.legacy.json" + "$ref": "https://datastream.org/schema/data/values/MonitoringLocationHorizontalAccuracyUnit.legacy.json" }, "MonitoringLocationVerticalMeasure": { - "$ref": "../node_modules/wqx/json-schema/definitions.json#/definitions/VerticalMeasure" + "$ref": "https://epa.gov/wqx/definitions.json#/definitions/VerticalMeasure" }, "MonitoringLocationVerticalUnitStrict": { - "$ref": "./values/MonitoringLocationVerticalUnit.primary.json" + "$ref": "https://datastream.org/schema/data/values/MonitoringLocationVerticalUnit.primary.json" }, "MonitoringLocationVerticalUnitLoose": { - "$ref": "./values/MonitoringLocationVerticalUnit.legacy.json" + "$ref": "https://datastream.org/schema/data/values/MonitoringLocationVerticalUnit.legacy.json" + }, + "MonitoringLocationVerticalAccuracyMeasure": { + "title": "Monitoring Location Vertical Accuracy Measure", + "description": "The relative accuracy of the vertical measure of elevation of ground surface.", + "type": "number", + "minimum": 0, + "maximum": 9007199254740991 + }, + "MonitoringLocationVerticalAccuracyUnitStrict": { + "$ref": "https://datastream.org/schema/data/values/MonitoringLocationVerticalAccuracyUnit.primary.json" + }, + "MonitoringLocationVerticalAccuracyUnitLoose": { + "$ref": "https://datastream.org/schema/data/values/MonitoringLocationVerticalAccuracyUnit.legacy.json" + }, + "MonitoringLocationVerticalCollectionMethodStrict": { + "$ref": "https://datastream.org/schema/data/values/MonitoringLocationVerticalCollectionMethod.primary.json" + }, + "MonitoringLocationVerticalCollectionMethodLoose": { + "$ref": "https://datastream.org/schema/data/values/MonitoringLocationVerticalCollectionMethod.legacy.json" + }, + "MonitoringLocationVerticalCoordinateReferenceSystemStrict": { + "$ref": "https://datastream.org/schema/data/values/MonitoringLocationVerticalCoordinateReferenceSystem.primary.json" + }, + "MonitoringLocationVerticalCoordinateReferenceSystemLoose": { + "$ref": "https://datastream.org/schema/data/values/MonitoringLocationVerticalCoordinateReferenceSystem.legacy.json" }, "MonitoringLocationTypeStrict": { - "$ref": "./values/MonitoringLocationType.primary.json" + "$ref": "https://datastream.org/schema/data/values/MonitoringLocationType.primary.json" }, "MonitoringLocationTypeLoose": { - "$ref": "./values/MonitoringLocationType.legacy.json" + "$ref": "https://datastream.org/schema/data/values/MonitoringLocationType.legacy.json" + }, + "WellID": { + "title": "Well ID", + "description": "The well identifier assigned by the provincial/territorial well database and/or used in the federal Groundwater Information Network (GIN) database.", + "$ref": "#/definitions/string", + "maxLength": 55 + }, + "WellIDContextStrict": { + "$ref": "https://datastream.org/schema/data/values/WellIDContext.primary.json" + }, + "WellIDContextLoose": { + "$ref": "https://datastream.org/schema/data/values/WellIDContext.legacy.json" + }, + "WellUseTypeStrict": { + "$ref": "https://datastream.org/schema/data/values/WellUseType.primary.json" + }, + "WellUseTypeLoose": { + "$ref": "https://datastream.org/schema/data/values/WellUseType.legacy.json" + }, + "AquiferCode": { + "title": "Aquifer Code", + "description": "A code that designates the aquifer or geologic formation from which the groundwater sample was collected. In the absence of mapped/named aquifers, geologic formation names are included.", + "$ref": "#/definitions/string", + "maxLength": 10 + }, + "AquiferUnitNameStrict": { + "$ref": "https://datastream.org/schema/data/values/AquiferUnitName.primary.json" + }, + "AquiferUnitNameLoose": { + "$ref": "https://datastream.org/schema/data/values/AquiferUnitName.legacy.json" + }, + "AquiferTypeStrict": { + "$ref": "https://datastream.org/schema/data/values/AquiferType.primary.json" + }, + "AquiferTypeLoose": { + "$ref": "https://datastream.org/schema/data/values/AquiferType.legacy.json" + }, + "AquiferUnitPorosityTypeStrict": { + "$ref": "https://datastream.org/schema/data/values/AquiferUnitPorosityType.primary.json" + }, + "AquiferUnitPorosityTypeLoose": { + "$ref": "https://datastream.org/schema/data/values/AquiferUnitPorosityType.legacy.json" + }, + "LithologyTypeStrict": { + "$ref": "https://datastream.org/schema/data/values/LithologyType.primary.json" + }, + "LithologyTypeLoose": { + "$ref": "https://datastream.org/schema/data/values/LithologyType.legacy.json" + }, + "BoreholeDepthMeasure": { + "title": "Borehole Depth Measure", + "description": "Depth below ground surface to the bottom of the hole on completion of drilling.", + "type": "number", + "minimum": -9007199254740991, + "maximum": 0 + }, + "BoreholeDepthUnitStrict": { + "$ref": "https://datastream.org/schema/data/values/BoreholeDepthUnit.primary.json" + }, + "BoreholeDepthUnitLoose": { + "$ref": "https://datastream.org/schema/data/values/BoreholeDepthUnit.legacy.json" + }, + "WellDepthMeasure": { + "title": "Well Depth Measure", + "description": "Depth below ground surface to the bottom of the cased well.", + "type": "number", + "minimum": -9007199254740991, + "maximum": 0 + }, + "WellDepthUnitStrict": { + "$ref": "https://datastream.org/schema/data/values/WellDepthUnit.primary.json" + }, + "WellDepthUnitLoose": { + "$ref": "https://datastream.org/schema/data/values/WellDepthUnit.legacy.json" + }, + "WellOpenIntervalTopMeasure": { + "title": "Well Open Interval Top Measure", + "description": "The upper vertical extent of the open or screened interval in a well measured as a depth from ground surface.", + "type": "number", + "minimum": -9007199254740991, + "maximum": 0 + }, + "WellOpenIntervalTopUnitStrict": { + "$ref": "https://datastream.org/schema/data/values/WellOpenIntervalTopUnit.primary.json" + }, + "WellOpenIntervalTopUnitLoose": { + "$ref": "https://datastream.org/schema/data/values/WellOpenIntervalTopUnit.legacy.json" + }, + "WellOpenIntervalBottomMeasure": { + "title": "Well Open Interval Bottom Measure", + "description": "The lower vertical extent of the open or screened interval in a well measured as a depth from ground surface.", + "type": "number", + "minimum": -9007199254740991, + "maximum": 0 + }, + "WellOpenIntervalBottomUnitStrict": { + "$ref": "https://datastream.org/schema/data/values/WellOpenIntervalBottomUnit.primary.json" + }, + "WellOpenIntervalBottomUnitLoose": { + "$ref": "https://datastream.org/schema/data/values/WellOpenIntervalBottomUnit.legacy.json" + }, + "EventID": { + "title": "Event ID", + "description": "A unique identifier supplied by the data contributor, usually corresponding to field sampling events", + "$ref": "#/definitions/string", + "maxLength": 255 }, "ActivityTypeStrict": { - "$ref": "./values/ActivityType.primary.json" + "$ref": "https://datastream.org/schema/data/values/ActivityType.primary.json" }, "ActivityTypeLoose": { - "$ref": "./values/ActivityType.legacy.json" + "$ref": "https://datastream.org/schema/data/values/ActivityType.legacy.json" }, "ActivityMediaNameStrict": { - "$ref": "./values/ActivityMediaName.primary.json" + "$ref": "https://datastream.org/schema/data/values/ActivityMediaName.primary.json" }, "ActivityMediaNameLoose": { - "$ref": "./values/ActivityMediaName.legacy.json" + "$ref": "https://datastream.org/schema/data/values/ActivityMediaName.legacy.json" }, "ActivityStartDate": { "$ref": "#/definitions/date" @@ -99,82 +230,125 @@ "$ref": "#/definitions/timezone-loose" }, "ActivityDepthHeightMeasure": { - "$ref": "../node_modules/wqx/json-schema/definitions.json#/definitions/ActivityDepthHeightMeasure" + "$ref": "https://epa.gov/wqx/definitions.json#/definitions/ActivityDepthHeightMeasure" }, "ActivityDepthHeightUnitStrict": { - "$ref": "./values/ActivityDepthHeightUnit.primary.json" + "$ref": "https://datastream.org/schema/data/values/ActivityDepthHeightUnit.primary.json" }, "ActivityDepthHeightUnitLoose": { - "$ref": "./values/ActivityDepthHeightUnit.legacy.json" + "$ref": "https://datastream.org/schema/data/values/ActivityDepthHeightUnit.legacy.json" + }, + "ActivityDepthAltitudeReferencePointStrict": { + "$ref": "https://datastream.org/schema/data/values/ActivityDepthAltitudeReferencePoint.primary.json" + }, + "ActivityDepthAltitudeReferencePointLoose": { + "$ref": "https://datastream.org/schema/data/values/ActivityDepthAltitudeReferencePoint.legacy.json" + }, + "ActivityDepthAltitudeReferencePointMeasure": { + "title": "Activity Depth Altitude Reference Point Measure", + "description": "The height from ground surface to the measurement point.", + "type": "number", + "minimum": 0, + "maximum": 9007199254740991 + }, + "ActivityDepthAltitudeReferencePointUnitStrict": { + "$ref": "https://datastream.org/schema/data/values/ActivityDepthAltitudeReferencePointUnit.primary.json" + }, + "ActivityDepthAltitudeReferencePointUnitLoose": { + "$ref": "https://datastream.org/schema/data/values/ActivityDepthAltitudeReferencePointUnit.legacy.json" + }, + "SampleConditionStrict": { + "$ref": "https://datastream.org/schema/data/values/SampleCondition.primary.json" + }, + "SampleConditionLoose": { + "$ref": "https://datastream.org/schema/data/values/SampleCondition.legacy.json" }, "SampleCollectionEquipmentNameStrict": { - "$ref": "./values/SampleCollectionEquipmentName.primary.json" + "$ref": "https://datastream.org/schema/data/values/SampleCollectionEquipmentName.primary.json" }, "SampleCollectionEquipmentNameLoose": { - "$ref": "./values/SampleCollectionEquipmentName.legacy.json" + "$ref": "https://datastream.org/schema/data/values/SampleCollectionEquipmentName.legacy.json" + }, + "SampleCollectionMethodName": { + "title": "Sample Collection Method Name", + "description": "The title of the method from the method publisher.", + "$ref": "#/definitions/string", + "maxLength": 300 + }, + "SampleCollectionMethodID": { + "title": "Sample Collection Method ID", + "description": "The ID number or code assigned by the method publisher.", + "$ref": "#/definitions/string", + "maxLength": 50 + }, + "SampleCollectionMethodContextStrict": { + "$ref": "https://datastream.org/schema/data/values/SampleCollectionMethodContext.primary.json" + }, + "SampleCollectionMethodContextLoose": { + "$ref": "https://datastream.org/schema/data/values/SampleCollectionMethodContext.legacy.json" }, "CharacteristicNameStrict": { - "$ref": "./values/CharacteristicName.primary.json" + "$ref": "https://datastream.org/schema/data/values/CharacteristicName.primary.json" }, "CharacteristicNameLoose": { - "$ref": "./values/CharacteristicName.legacy.json" + "$ref": "https://datastream.org/schema/data/values/CharacteristicName.legacy.json" }, "MethodSpeciationStrict": { - "$ref": "./values/MethodSpeciation.primary.json" + "$ref": "https://datastream.org/schema/data/values/MethodSpeciation.primary.json" }, "MethodSpeciationLoose": { - "$ref": "./values/MethodSpeciation.legacy.json" + "$ref": "https://datastream.org/schema/data/values/MethodSpeciation.legacy.json" }, "ResultSampleFractionStrict": { - "$ref": "./values/ResultSampleFraction.primary.json" + "$ref": "https://datastream.org/schema/data/values/ResultSampleFraction.primary.json" }, "ResultSampleFractionLoose": { - "$ref": "./values/ResultSampleFraction.legacy.json" + "$ref": "https://datastream.org/schema/data/values/ResultSampleFraction.legacy.json" }, "ResultValue": { - "$ref": "../node_modules/wqx/json-schema/definitions.json#/definitions/ResultValue" + "$ref": "https://epa.gov/wqx/definitions.json#/definitions/ResultValue" }, "ResultUnitStrict": { - "$ref": "./values/ResultUnit.primary.json" + "$ref": "https://datastream.org/schema/data/values/ResultUnit.primary.json" }, "ResultUnitLoose": { - "$ref": "./values/ResultUnit.legacy.json" + "$ref": "https://datastream.org/schema/data/values/ResultUnit.legacy.json" }, "ResultValueTypeStrict": { - "$ref": "./values/ResultValueType.primary.json" + "$ref": "https://datastream.org/schema/data/values/ResultValueType.primary.json" }, "ResultValueTypeLoose": { - "$ref": "./values/ResultValueType.legacy.json" + "$ref": "https://datastream.org/schema/data/values/ResultValueType.legacy.json" }, "ResultDetectionConditionStrict": { - "$ref": "./values/ResultDetectionCondition.primary.json" + "$ref": "https://datastream.org/schema/data/values/ResultDetectionCondition.primary.json" }, "ResultDetectionConditionLoose": { - "$ref": "./values/ResultDetectionCondition.legacy.json" + "$ref": "https://datastream.org/schema/data/values/ResultDetectionCondition.legacy.json" }, "ResultDetectionQuantitationLimitMeasure": { - "$ref": "../node_modules/wqx/json-schema/definitions.json#/definitions/ResultDetectionQuantitationLimitMeasure" + "$ref": "https://epa.gov/wqx/definitions.json#/definitions/ResultDetectionQuantitationLimitMeasure" }, "ResultDetectionQuantitationLimitUnitStrict": { - "$ref": "./values/ResultDetectionQuantitationLimitUnit.primary.json" + "$ref": "https://datastream.org/schema/data/values/ResultDetectionQuantitationLimitUnit.primary.json" }, "ResultDetectionQuantitationLimitUnitLoose": { - "$ref": "./values/ResultDetectionQuantitationLimitUnit.legacy.json" + "$ref": "https://datastream.org/schema/data/values/ResultDetectionQuantitationLimitUnit.legacy.json" }, "ResultDetectionQuantitationLimitTypeStrict": { - "$ref": "./values/ResultDetectionQuantitationLimitType.primary.json" + "$ref": "https://datastream.org/schema/data/values/ResultDetectionQuantitationLimitType.primary.json" }, "ResultDetectionQuantitationLimitTypeLoose": { - "$ref": "./values/ResultDetectionQuantitationLimitType.legacy.json" + "$ref": "https://datastream.org/schema/data/values/ResultDetectionQuantitationLimitType.legacy.json" }, "ResultStatusIDStrict": { - "$ref": "./values/ResultStatusID.primary.json" + "$ref": "https://datastream.org/schema/data/values/ResultStatusID.primary.json" }, "ResultStatusIDLoose": { - "$ref": "./values/ResultStatusID.legacy.json" + "$ref": "https://datastream.org/schema/data/values/ResultStatusID.legacy.json" }, "ResultComment": { - "$ref": "../node_modules/wqx/json-schema/definitions.json#/definitions/ResultComment", + "$ref": "https://epa.gov/wqx/definitions.json#/definitions/ResultComment", "errorMessage": { "pattern": "error-string-multiline-pattern" } @@ -186,10 +360,10 @@ "maxLength": 50 }, "ResultAnalyticalMethodContextStrict": { - "$ref": "./values/ResultAnalyticalMethodContext.primary.json" + "$ref": "https://datastream.org/schema/data/values/ResultAnalyticalMethodContext.primary.json" }, "ResultAnalyticalMethodContextLoose": { - "$ref": "./values/ResultAnalyticalMethodContext.legacy.json" + "$ref": "https://datastream.org/schema/data/values/ResultAnalyticalMethodContext.legacy.json" }, "ResultAnalyticalMethodName": { "title": "Result Analytical Method Name", @@ -213,7 +387,7 @@ "$ref": "#/definitions/timezone-loose" }, "LaboratoryName": { - "$ref": "../node_modules/wqx/json-schema/definitions.json#/definitions/LaboratoryName", + "$ref": "https://epa.gov/wqx/definitions.json#/definitions/LaboratoryName", "maxLength": 100, "errorMessage": { "pattern": "error-string-pattern" diff --git a/schemas/data/src/extract.json b/schemas/data/src/extract.json index fd831b10..d1e5aa50 100644 --- a/schemas/data/src/extract.json +++ b/schemas/data/src/extract.json @@ -1,5 +1,5 @@ { - "$id": "https://datastream.org/schema", + "$id": "https://datastream.org/schema/data/extract.json", "$schema": "https://json-schema.org/draft/2020-12/schema#", "$vocabulary": { "https://ajv.js.org/packages/ajv-formats.html#date": true, @@ -43,9 +43,72 @@ "MonitoringLocationVerticalUnit": { "$ref": "./definitions.json#/definitions/MonitoringLocationVerticalUnitStrict" }, + "MonitoringLocationVerticalAccuracyMeasure": { + "$ref": "./definitions.json#/definitions/MonitoringLocationVerticalAccuracyMeasure" + }, + "MonitoringLocationVerticalAccuracyUnit": { + "$ref": "./definitions.json#/definitions/MonitoringLocationVerticalAccuracyUnitStrict" + }, + "MonitoringLocationVerticalCollectionMethod": { + "$ref": "./definitions.json#/definitions/MonitoringLocationVerticalCollectionMethodStrict" + }, + "MonitoringLocationVerticalCoordinateReferenceSystem": { + "$ref": "./definitions.json#/definitions/MonitoringLocationVerticalCoordinateReferenceSystemStrict" + }, "MonitoringLocationType": { "$ref": "./definitions.json#/definitions/MonitoringLocationTypeStrict" }, + "WellID": { + "$ref": "./definitions.json#/definitions/WellID" + }, + "WellIDContext": { + "$ref": "./definitions.json#/definitions/WellIDContextStrict" + }, + "WellUseType": { + "$ref": "./definitions.json#/definitions/WellUseTypeStrict" + }, + "AquiferCode": { + "$ref": "./definitions.json#/definitions/AquiferCode" + }, + "AquiferUnitName": { + "$ref": "./definitions.json#/definitions/AquiferUnitNameStrict" + }, + "AquiferType": { + "$ref": "./definitions.json#/definitions/AquiferTypeStrict" + }, + "AquiferUnitPorosityType": { + "$ref": "./definitions.json#/definitions/AquiferUnitPorosityTypeStrict" + }, + "LithologyType": { + "$ref": "./definitions.json#/definitions/LithologyTypeStrict" + }, + "BoreholeDepthMeasure": { + "$ref": "./definitions.json#/definitions/BoreholeDepthMeasure" + }, + "BoreholeDepthUnit": { + "$ref": "./definitions.json#/definitions/BoreholeDepthUnitStrict" + }, + "WellDepthMeasure": { + "$ref": "./definitions.json#/definitions/WellDepthMeasure" + }, + "WellDepthUnit": { + "$ref": "./definitions.json#/definitions/WellDepthUnitStrict" + }, + "WellOpenIntervalTopMeasure": { + "$ref": "./definitions.json#/definitions/WellOpenIntervalTopMeasure" + }, + "WellOpenIntervalTopUnit": { + "$ref": "./definitions.json#/definitions/WellOpenIntervalTopUnitStrict" + }, + "WellOpenIntervalBottomMeasure": { + "$ref": "./definitions.json#/definitions/WellOpenIntervalBottomMeasure" + }, + "WellOpenIntervalBottomUnit": { + "$ref": "./definitions.json#/definitions/WellOpenIntervalBottomUnitStrict" + }, + "EventID": { + "$ref": "./definitions.json#/definitions/EventID" + }, "ActivityType": { "$ref": "./definitions.json#/definitions/ActivityTypeStrict" }, @@ -76,9 +139,30 @@ "ActivityDepthHeightUnit": { "$ref": "./definitions.json#/definitions/ActivityDepthHeightUnitStrict" }, + "ActivityDepthAltitudeReferencePoint": { + "$ref": "./definitions.json#/definitions/ActivityDepthAltitudeReferencePointStrict" + }, + "ActivityDepthAltitudeReferencePointMeasure": { + "$ref": "./definitions.json#/definitions/ActivityDepthAltitudeReferencePointMeasure" + }, + "ActivityDepthAltitudeReferencePointUnit": { + "$ref": "./definitions.json#/definitions/ActivityDepthAltitudeReferencePointUnitStrict" + }, + "SampleCondition": { + "$ref": "./definitions.json#/definitions/SampleConditionStrict" + }, "SampleCollectionEquipmentName": { "$ref": "./definitions.json#/definitions/SampleCollectionEquipmentNameStrict" }, + "SampleCollectionMethodName": { + "$ref": "./definitions.json#/definitions/SampleCollectionMethodName" + }, + "SampleCollectionMethodID": { + "$ref": "./definitions.json#/definitions/SampleCollectionMethodID" + }, + "SampleCollectionMethodContext": { + "$ref": "./definitions.json#/definitions/SampleCollectionMethodContextStrict" + }, "CharacteristicName": { "$ref": "./definitions.json#/definitions/CharacteristicNameStrict" }, @@ -158,15 +242,30 @@ "MonitoringLocationHorizontalAccuracyMeasure": [ "MonitoringLocationHorizontalAccuracyUnit" ], - "MonitoringLocationVerticalMeasure": ["MonitoringLocationVerticalUnit"], + "MonitoringLocationVerticalMeasure": [ + "MonitoringLocationVerticalUnit", + "MonitoringLocationVerticalCollectionMethod", + "MonitoringLocationVerticalCoordinateReferenceSystem" + ], + "MonitoringLocationVerticalAccuracyMeasure": [ + "MonitoringLocationVerticalAccuracyUnit" + ], + "WellID": ["WellIDContext"], + "BoreholeDepthMeasure": ["BoreholeDepthUnit"], + "WellDepthMeasure": ["WellDepthUnit"], + "WellOpenIntervalTopMeasure": ["WellOpenIntervalTopUnit"], + "WellOpenIntervalBottomMeasure": ["WellOpenIntervalBottomUnit"], "ActivityDepthHeightMeasure": ["ActivityDepthHeightUnit"], + "ActivityDepthAltitudeReferencePointMeasure": [ + "ActivityDepthAltitudeReferencePointUnit" + ], + "SampleCollectionMethodID": ["SampleCollectionMethodContext"], "ResultValue": ["ResultUnit"], "ResultDetectionQuantitationLimitMeasure": [ "ResultDetectionQuantitationLimitUnit" ], "ActivityStartTimeZone": ["ActivityStartTime"], "ActivityEndTimeZone": ["ActivityEndTime"], - "AnalysisStartTime": ["AnalysisStartTimeZone"], "AnalysisStartTimeZone": ["AnalysisStartTime"] } }, @@ -205,6 +304,30 @@ }, { "$ref": "./logic/CSVInjection.json" + }, + { + "$ref": "./logic/MonitoringLocationType-Well-WellUseType.json" + }, + { + "$ref": "./logic/MonitoringLocationType-Well-SampleCondition.json" + }, + { + "$ref": "./logic/ActivityDepthHeightMeasure-ActivityDepthAltitudeReferencePoint.json" + }, + { + "$ref": "./logic/CharacteristicName-WaterLevel-ActivityDepthAltitudeReferencePoint.json" + }, + { + "$ref": "./logic/CharacteristicName-Depth-ActivityDepthHeightMeasure.json" + }, + { + "$ref": "./logic/ActivityMediaName-ActivityDepthHeightMeasure-Maximum.json" + }, + { + "$ref": "./logic/ActivityMediaName-Groundwater-DepthMeasure.json" + }, + { + "$ref": "./logic/GroundwaterFields-ActivityMediaName-Groundwater.json" } ] } diff --git a/schemas/data/src/frontend.json b/schemas/data/src/frontend.json index 8ebf2a35..37ee41ce 100644 --- a/schemas/data/src/frontend.json +++ b/schemas/data/src/frontend.json @@ -1,5 +1,5 @@ { - "$id": "https://datastream.org/schema/data/frontend", + "$id": "https://datastream.org/schema/data/frontend.json", "$schema": "https://json-schema.org/draft/2020-12/schema#", "$vocabulary": { "https://ajv.js.org/packages/ajv-formats.html#date": true, @@ -47,10 +47,86 @@ "$ref": "./definitions.json#/definitions/MonitoringLocationVerticalUnitStrict", "transform": ["trim", "toEnumCase"] }, + "MonitoringLocationVerticalAccuracyMeasure": { + "$ref": "./definitions.json#/definitions/MonitoringLocationVerticalAccuracyMeasure" + }, + "MonitoringLocationVerticalAccuracyUnit": { + "$ref": "./definitions.json#/definitions/MonitoringLocationVerticalAccuracyUnitStrict", + "transform": ["trim", "toEnumCase"] + }, + "MonitoringLocationVerticalCollectionMethod": { + "$ref": "./definitions.json#/definitions/MonitoringLocationVerticalCollectionMethodStrict", + "transform": ["trim", "toEnumCase"] + }, + "MonitoringLocationVerticalCoordinateReferenceSystem": { + "$ref": "./definitions.json#/definitions/MonitoringLocationVerticalCoordinateReferenceSystemStrict", + "transform": ["trim", "toEnumCase"] + }, "MonitoringLocationType": { "$ref": "./definitions.json#/definitions/MonitoringLocationTypeStrict", "transform": ["trim", "toEnumCase"] }, + "WellID": { + "$ref": "./definitions.json#/definitions/WellID" + }, + "WellIDContext": { + "$ref": "./definitions.json#/definitions/WellIDContextStrict", + "transform": ["trim", "toEnumCase"] + }, + "WellUseType": { + "$ref": "./definitions.json#/definitions/WellUseTypeStrict", + "transform": ["trim", "toEnumCase"] + }, + "AquiferCode": { + "$ref": "./definitions.json#/definitions/AquiferCode" + }, + "AquiferUnitName": { + "$ref": "./definitions.json#/definitions/AquiferUnitNameStrict", + "transform": ["trim", "toEnumCase"] + }, + "AquiferType": { + "$ref": "./definitions.json#/definitions/AquiferTypeStrict", + "transform": ["trim", "toEnumCase"] + }, + "AquiferUnitPorosityType": { + "$ref": "./definitions.json#/definitions/AquiferUnitPorosityTypeStrict", + "transform": ["trim", "toEnumCase"] + }, + "LithologyType": { + "$ref": "./definitions.json#/definitions/LithologyTypeStrict", + "transform": ["trim", "toEnumCase"] + }, + "BoreholeDepthMeasure": { + "$ref": "./definitions.json#/definitions/BoreholeDepthMeasure" + }, + "BoreholeDepthUnit": { + "$ref": "./definitions.json#/definitions/BoreholeDepthUnitStrict", + "transform": ["trim", "toEnumCase"] + }, + "WellDepthMeasure": { + "$ref": "./definitions.json#/definitions/WellDepthMeasure" + }, + "WellDepthUnit": { + "$ref": "./definitions.json#/definitions/WellDepthUnitStrict", + "transform": ["trim", "toEnumCase"] + }, + "WellOpenIntervalTopMeasure": { + "$ref": "./definitions.json#/definitions/WellOpenIntervalTopMeasure" + }, + "WellOpenIntervalTopUnit": { + "$ref": "./definitions.json#/definitions/WellOpenIntervalTopUnitStrict", + "transform": ["trim", "toEnumCase"] + }, + "WellOpenIntervalBottomMeasure": { + "$ref": "./definitions.json#/definitions/WellOpenIntervalBottomMeasure" + }, + "WellOpenIntervalBottomUnit": { + "$ref": "./definitions.json#/definitions/WellOpenIntervalBottomUnitStrict", + "transform": ["trim", "toEnumCase"] + }, + "EventID": { + "$ref": "./definitions.json#/definitions/EventID" + }, "ActivityType": { "$ref": "./definitions.json#/definitions/ActivityTypeStrict", "transform": ["trim", "toEnumCase"] @@ -84,10 +160,35 @@ "$ref": "./definitions.json#/definitions/ActivityDepthHeightUnitStrict", "transform": ["trim", "toEnumCase"] }, + "ActivityDepthAltitudeReferencePoint": { + "$ref": "./definitions.json#/definitions/ActivityDepthAltitudeReferencePointStrict", + "transform": ["trim", "toEnumCase"] + }, + "ActivityDepthAltitudeReferencePointMeasure": { + "$ref": "./definitions.json#/definitions/ActivityDepthAltitudeReferencePointMeasure" + }, + "ActivityDepthAltitudeReferencePointUnit": { + "$ref": "./definitions.json#/definitions/ActivityDepthAltitudeReferencePointUnitStrict", + "transform": ["trim", "toEnumCase"] + }, + "SampleCondition": { + "$ref": "./definitions.json#/definitions/SampleConditionStrict", + "transform": ["trim", "toEnumCase"] + }, "SampleCollectionEquipmentName": { "$ref": "./definitions.json#/definitions/SampleCollectionEquipmentNameStrict", "transform": ["trim", "toEnumCase"] }, + "SampleCollectionMethodName": { + "$ref": "./definitions.json#/definitions/SampleCollectionMethodName" + }, + "SampleCollectionMethodID": { + "$ref": "./definitions.json#/definitions/SampleCollectionMethodID" + }, + "SampleCollectionMethodContext": { + "$ref": "./definitions.json#/definitions/SampleCollectionMethodContextStrict", + "transform": ["trim", "toEnumCase"] + }, "CharacteristicName": { "$ref": "./definitions.json#/definitions/CharacteristicNameStrict", "transform": ["trim", "toEnumCase"] @@ -177,8 +278,24 @@ "MonitoringLocationHorizontalAccuracyMeasure": [ "MonitoringLocationHorizontalAccuracyUnit" ], - "MonitoringLocationVerticalMeasure": ["MonitoringLocationVerticalUnit"], + "MonitoringLocationVerticalMeasure": [ + "MonitoringLocationVerticalUnit", + "MonitoringLocationVerticalCollectionMethod", + "MonitoringLocationVerticalCoordinateReferenceSystem" + ], + "MonitoringLocationVerticalAccuracyMeasure": [ + "MonitoringLocationVerticalAccuracyUnit" + ], + "WellID": ["WellIDContext"], + "BoreholeDepthMeasure": ["BoreholeDepthUnit"], + "WellDepthMeasure": ["WellDepthUnit"], + "WellOpenIntervalTopMeasure": ["WellOpenIntervalTopUnit"], + "WellOpenIntervalBottomMeasure": ["WellOpenIntervalBottomUnit"], "ActivityDepthHeightMeasure": ["ActivityDepthHeightUnit"], + "ActivityDepthAltitudeReferencePointMeasure": [ + "ActivityDepthAltitudeReferencePointUnit" + ], + "SampleCollectionMethodID": ["SampleCollectionMethodContext"], "ResultValue": ["ResultUnit"], "ResultDetectionQuantitationLimitMeasure": [ "ResultDetectionQuantitationLimitUnit", @@ -186,7 +303,6 @@ ], "ActivityStartTimeZone": ["ActivityStartTime"], "ActivityEndTimeZone": ["ActivityEndTime"], - "AnalysisStartTime": ["AnalysisStartTimeZone"], "AnalysisStartTimeZone": ["AnalysisStartTime"] }, "errorMessage": { @@ -228,6 +344,30 @@ }, { "$ref": "./logic/CSVInjection.json" + }, + { + "$ref": "./logic/MonitoringLocationType-Well-WellUseType.json" + }, + { + "$ref": "./logic/MonitoringLocationType-Well-SampleCondition.json" + }, + { + "$ref": "./logic/ActivityDepthHeightMeasure-ActivityDepthAltitudeReferencePoint.json" + }, + { + "$ref": "./logic/CharacteristicName-WaterLevel-ActivityDepthAltitudeReferencePoint.json" + }, + { + "$ref": "./logic/CharacteristicName-Depth-ActivityDepthHeightMeasure.json" + }, + { + "$ref": "./logic/ActivityMediaName-ActivityDepthHeightMeasure-Maximum.json" + }, + { + "$ref": "./logic/ActivityMediaName-Groundwater-DepthMeasure.json" + }, + { + "$ref": "./logic/GroundwaterFields-ActivityMediaName-Groundwater.json" } ] } diff --git a/schemas/data/src/locales/ActivityDepthAltitudeReferencePoint.json b/schemas/data/src/locales/ActivityDepthAltitudeReferencePoint.json new file mode 100644 index 00000000..dc05a1b1 --- /dev/null +++ b/schemas/data/src/locales/ActivityDepthAltitudeReferencePoint.json @@ -0,0 +1,62 @@ +{ + "name": { + "en": "ActivityDepthAltitudeReferencePoint", + "fr": null + }, + "description": { + "en": null, + "fr": null + }, + "values": { + "Ground surface": { + "name": { + "en": "Ground surface", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Top of instrument shelf": { + "name": { + "en": "Top of instrument shelf", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Top of outer casing": { + "name": { + "en": "Top of outer casing", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Top of well casing": { + "name": { + "en": "Top of well casing", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Unspecified": { + "name": { + "en": "Unspecified", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + } + } +} \ No newline at end of file diff --git a/schemas/data/src/locales/ActivityGroupType.json b/schemas/data/src/locales/ActivityGroupType.json index 0246c0de..ee4f383e 100644 --- a/schemas/data/src/locales/ActivityGroupType.json +++ b/schemas/data/src/locales/ActivityGroupType.json @@ -8,69 +8,69 @@ "fr": null }, "values": { - "Field Set": { + "Continuous Data": { "name": { - "en": "Field", - "fr": "Terrain" + "en": "Continuous Data", + "fr": "Données continues" }, "description": { "en": null, "fr": null } }, - "Other": { + "Field Measure": { "name": { - "en": "Other", - "fr": null + "en": "Field Measure", + "fr": "Mesure sur le terrain" }, "description": { "en": null, "fr": null } }, - "QC Sample": { + "Lab Sample": { "name": { - "en": "Quality Control", - "fr": "Contrôle qualité" + "en": "Lab Sample", + "fr": "Échantillon de laboratoire" }, "description": { "en": null, "fr": null } }, - "Replicate": { + "Quality Control - Field Measure": { "name": { - "en": "Replicate", - "fr": null + "en": "Quality Control - Field Measure", + "fr": "Contrôle qualité - Mesure sur le terrain" }, "description": { "en": null, "fr": null } }, - "Subsample": { + "Quality Control - Lab Sample": { "name": { - "en": "Lab", - "fr": "Laboratoire" + "en": "Quality Control - Lab Sample", + "fr": "Contrôle qualité - Échantillon de laboratoire" }, "description": { "en": null, "fr": null } }, - "Trip": { + "Unspecified": { "name": { - "en": "Trip", - "fr": null + "en": "Unspecified", + "fr": "Non spécifié" }, "description": { "en": null, "fr": null } }, - "Unspecified": { + "Other": { "name": { - "en": "Unspecified", + "en": "Other", "fr": null }, "description": { diff --git a/schemas/data/src/locales/ActivityMediaName.json b/schemas/data/src/locales/ActivityMediaName.json index e76fa219..e4b9166d 100644 --- a/schemas/data/src/locales/ActivityMediaName.json +++ b/schemas/data/src/locales/ActivityMediaName.json @@ -87,6 +87,16 @@ "en": "Suspended sediment in surface water and the top layer of settled sediment. Often this media is collected using dredges, short cores, sediment traps, and suspended sediment samplers. ", "fr": "Les sédiments en suspension dans les eaux de surface et la couche supérieure des sédiments décantés. Ce milieu est souvent recueilli à l’aide de dragues, de carottes courtes, de pièges à sédiments et d’échantillonneurs de sédiments en suspension." } + }, + "Groundwater": { + "name": { + "en": "Groundwater", + "fr": null + }, + "description": { + "en": null, + "fr": null + } } } } \ No newline at end of file diff --git a/schemas/data/src/locales/ActivityType.json b/schemas/data/src/locales/ActivityType.json index ddda147a..9ab324cb 100644 --- a/schemas/data/src/locales/ActivityType.json +++ b/schemas/data/src/locales/ActivityType.json @@ -28,6 +28,36 @@ "fr": "Données continues collectées sur le terrain à l’aide d’un dispositif d’enregistrement de données automatisé qui enregistre en continu une séquence de valeurs de données à des intervalles répétitifs." } }, + "Field Msr/Obs-Integrated Flow Proportioned": { + "name": { + "en": "Field Msr/Obs-Integrated Flow Proportioned", + "fr": null + }, + "description": { + "en": "A discrete measurement collected in the field integrated over an interval or space within which changes in flow are used to alter the proportion of the sampled medium contributing to the integrated sample.", + "fr": "Une mesure discrète prélevées sur le terrain et intégrée sur un intervalle ou un espace au sein duquel les variations du débit servent à modifier la proportion du milieu échantillonné contribuant à l'échantillon intégré." + } + }, + "Field Msr/Obs-Integrated Time Series": { + "name": { + "en": "Field Msr/Obs-Integrated Time Series", + "fr": null + }, + "description": { + "en": "A discrete measurement collected in the field that represents an integrated portion or segment of elapsed time.", + "fr": "Une mesure discrète prélevées sur le terrain, représentant une partie ou un segment intégré de temps écoulé." + } + }, + "Field Msr/Obs-Integrated Vertical Profile": { + "name": { + "en": "Field Msr/Obs-Integrated Vertical Profile", + "fr": null + }, + "description": { + "en": "A discrete measurement collected in the field that represents an integrated portion or segment of a vertical track within the study area.", + "fr": "Une mesure discrète prélevées sur le terrain, représentant une partie ou un segment intégré d'une trajectoire verticale au sein de la zone d'étude." + } + }, "Field Msr/Obs-Portable Data Logger": { "name": { "en": "Field Msr/Obs-Portable Data Logger", @@ -84,7 +114,7 @@ "fr": null }, "description": { - "en": "A field measurement or observation taken to assess the reproducity of the sampling technique or analytical method.", + "en": "A field measurement or observation taken to assess the reproducibility of the sampling technique or analytical method.", "fr": "Une mesure ou une observation sur le terrain effectuée pour évaluer la reproductibilité de la technique d'échantillonnage ou de la méthode d'analyse." } }, @@ -94,8 +124,8 @@ "fr": null }, "description": { - "en": "A measurement taken to verify the quality of data taken by a data logger. For discrete measurements collected by portable loggers (e.g. YSI) in the field. \r\n\r\nNot for use with high-frequency continuous time-series data. For more information, see Continuous data on DataStream on DataStream's Learning Centre", - "fr": "Une mesure prise pour vérifier la qualité des données prélevées à l’aide d’un enregistreur de données. Pour des mesures discrètes prélevées par des enregistreurs portables (par exemple, YSI) sur le terrain. \r\n\r\nNe pas utiliser avec des données de séries temporelles continues à haute fréquence. Pour plus d’information, voir Guide sur les données de séries temporelles continues dans le Centre d'apprentissage de DataStream." + "en": "A field measurement taken to assess the reproducibility of data collected by a data logger. For discrete measurements collected by portable loggers (e.g. YSI) in the field.", + "fr": "Une mesure de terrain effectuée pour évaluer la reproductibilité des données recueillies par un enregistreur de données. Concerne les mesures ponctuelles réalisées sur le terrain à l'aide d'enregistreurs portatifs (par ex. YSI)." } }, "Quality Control Field Sample Equipment Rinsate Blank": { @@ -384,8 +414,8 @@ "fr": null }, "description": { - "en": null, - "fr": null + "en": "The measured value of a calibration standard taken during or after field work to verify that an instrument has maintained its calibration. The expected calibration standard value should be included in the ResultComment.", + "fr": "Valeur mesurée d'un étalon de calibration relevée pendant ou après le travail sur le terrain afin de vérifier que l'instrument a conservé son étalonnage. La valeur attendue de l'étalon de calibration doit être incluse dans le champ « ResultComment »." } }, "Quality Control-Calibration Check Buffer": { @@ -514,8 +544,8 @@ "fr": null }, "description": { - "en": "A discrete/integrated sample, usually derived from a continuous record, representing some portion or segment of a horizontal and vertical track within the study area.", - "fr": "Un échantillon discret/intégré, généralement dérivé d'un enregistrement continu, représentant une partie ou un segment d'une trajectoire horizontale et verticale dans la zone d'étude." + "en": "A discrete sample that represents an integrated portion or segment of a horizontal and vertical track within the study area.", + "fr": "Un échantillon discret représentant une partie ou un segment intégré d'un tracé horizontal et vertical au sein de la zone d'étude." } }, "Sample-Integrated Horizontal Profile": { @@ -524,8 +554,8 @@ "fr": null }, "description": { - "en": "A discrete/integrated sample, usually derived from a continuous record, representing some portion or segment of a horizontal track within the study area.", - "fr": "Un échantillon discret/intégré, généralement dérivé d'un enregistrement continu, représentant une partie ou un segment d'une trajectoire horizontale dans la zone d'étude." + "en": "A discrete sample that represents an integrated portion or segment of a horizontal track within the study area.", + "fr": "Un échantillon discret représentant une partie ou un segment intégré d'un tracé horizontal au sein de la zone d'étude." } }, "Sample-Integrated Time Series": { @@ -534,8 +564,8 @@ "fr": null }, "description": { - "en": "A discrete/integrated sample, representing some portion or segment of elapsed time within the overall activity duration or sample period.", - "fr": "Un échantillon discret/intégré, représentant une partie ou un segment du temps écoulé pendant la durée globale de l'activité ou la période d'échantillonnage." + "en": "A discrete sample that represents an integrated portion or segment of elapsed time.", + "fr": "Un échantillon discret représentant une partie ou un segment intégré de temps écoulé." } }, "Sample-Integrated Vertical Profile": { @@ -544,8 +574,8 @@ "fr": null }, "description": { - "en": "A discrete/integrated sample, usually derived from a continuous record, representing some portion or segment of a vertical track within the study area.", - "fr": "Un échantillon discret/intégré, généralement dérivé d'un enregistrement continu, représentant une partie ou un segment d'un profil vertical dans la zone d'étude." + "en": "A discrete sample that represents an integrated portion or segment of a vertical track within the study area.", + "fr": "Un échantillon discret représentant une partie ou un segment intégré d'une trajectoire verticale au sein de la zone d'étude." } }, "Sample-Negative Control": { diff --git a/schemas/data/src/locales/AquiferType.json b/schemas/data/src/locales/AquiferType.json new file mode 100644 index 00000000..f36c46fa --- /dev/null +++ b/schemas/data/src/locales/AquiferType.json @@ -0,0 +1,52 @@ +{ + "name": { + "en": "AquiferType", + "fr": null + }, + "description": { + "en": null, + "fr": null + }, + "values": { + "Artesian": { + "name": { + "en": "Artesian", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Confined": { + "name": { + "en": "Confined", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Semi-Confined": { + "name": { + "en": "Semi-Confined", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Unconfined": { + "name": { + "en": "Unconfined", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + } + } +} \ No newline at end of file diff --git a/schemas/data/src/locales/AquiferUnitName.json b/schemas/data/src/locales/AquiferUnitName.json new file mode 100644 index 00000000..72bf702c --- /dev/null +++ b/schemas/data/src/locales/AquiferUnitName.json @@ -0,0 +1,7712 @@ +{ + "name": { + "en": "AquiferUnitName", + "fr": null + }, + "description": { + "en": null, + "fr": null + }, + "values": { + "111 Mile Creek Valley Aquifer System": { + "name": { + "en": "111 Mile Creek Valley Aquifer System", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "1WS Member": { + "name": { + "en": "1WS Member", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "2WS Member": { + "name": { + "en": "2WS Member", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Abbotsford Shallow Aquifer": { + "name": { + "en": "Abbotsford Shallow Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Abbotsford Shallow West Aquifer": { + "name": { + "en": "Abbotsford Shallow West Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Alberta Group": { + "name": { + "en": "Alberta Group", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Aldergrove Shallow Aquifer": { + "name": { + "en": "Aldergrove Shallow Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Algonquin Aquifer Complex": { + "name": { + "en": "Algonquin Aquifer Complex", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Algonquin Basin": { + "name": { + "en": "Algonquin Basin", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Algonquin Shoreline": { + "name": { + "en": "Algonquin Shoreline", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Alice Siding Aquifer": { + "name": { + "en": "Alice Siding Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Alliston Aquifer Complex": { + "name": { + "en": "Alliston Aquifer Complex", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Alluvial and glaciofluvial sand and gravel": { + "name": { + "en": "Alluvial and glaciofluvial sand and gravel", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Alviston-Rutherford Aquifer": { + "name": { + "en": "Alviston-Rutherford Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Amabel-Lockport-Guelph Hydrogeologic Unit": { + "name": { + "en": "Amabel-Lockport-Guelph Hydrogeologic Unit", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Amherstburge Aquifer": { + "name": { + "en": "Amherstburge Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Ancaster-West Flamborough Aquifer": { + "name": { + "en": "Ancaster-West Flamborough Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Annapolis-Cornwallis valleys Aquifer": { + "name": { + "en": "Annapolis-Cornwallis valleys Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Anten Coquina Member": { + "name": { + "en": "Anten Coquina Member", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Arras-Fellers Heights Bedrock Aquifer": { + "name": { + "en": "Arras-Fellers Heights Bedrock Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Arrowwood Formation": { + "name": { + "en": "Arrowwood Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Arthur-Mount Forest Aquifer": { + "name": { + "en": "Arthur-Mount Forest Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Assiniboine delta Aquifer": { + "name": { + "en": "Assiniboine delta Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Atha Aquifer": { + "name": { + "en": "Atha Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Ausable Aquifer": { + "name": { + "en": "Ausable Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Bad Heart Formation": { + "name": { + "en": "Bad Heart Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Balfron Formation": { + "name": { + "en": "Balfron Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Banff Formation": { + "name": { + "en": "Banff Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Barons Sand Formation": { + "name": { + "en": "Barons Sand Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Basal Aquifer": { + "name": { + "en": "Basal Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Basal clastic unit (Winnipeg) Aquifer": { + "name": { + "en": "Basal clastic unit (Winnipeg) Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Basal Cretaceous Sandstone": { + "name": { + "en": "Basal Cretaceous Sandstone", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Bass Island Hydrogeologic Unit": { + "name": { + "en": "Bass Island Hydrogeologic Unit", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Battle Formation": { + "name": { + "en": "Battle Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Battleford Formation": { + "name": { + "en": "Battleford Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Beach Ridge sand and gravel": { + "name": { + "en": "Beach Ridge sand and gravel", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Bearpaw Formation": { + "name": { + "en": "Bearpaw Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Beaver Creek Overburden Aquifer": { + "name": { + "en": "Beaver Creek Overburden Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Belle Fourche Formation": { + "name": { + "en": "Belle Fourche Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Belly River Formation": { + "name": { + "en": "Belly River Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Belly River Group": { + "name": { + "en": "Belly River Group", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Beverly-Onoway channel Complex": { + "name": { + "en": "Beverly-Onoway channel Complex", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Billings-Carlsbad-Queenston Hydrogeologic Unit": { + "name": { + "en": "Billings-Carlsbad-Queenston Hydrogeologic Unit", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Blackstone Formation": { + "name": { + "en": "Blackstone Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Blewett Bedrock Aquifer": { + "name": { + "en": "Blewett Bedrock Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Blood Reserve Formation": { + "name": { + "en": "Blood Reserve Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Blue Mountain-Georgian Bay Hydrogeologic Unit": { + "name": { + "en": "Blue Mountain-Georgian Bay Hydrogeologic Unit", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Blueberry Valley Aquifer System": { + "name": { + "en": "Blueberry Valley Aquifer System", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Blueberry-Aitken Bedrock Aquifer": { + "name": { + "en": "Blueberry-Aitken Bedrock Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Bluesky Formation": { + "name": { + "en": "Bluesky Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Bois Blanc Hydrogeologic Unit": { + "name": { + "en": "Bois Blanc Hydrogeologic Unit", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Boissevain Formation": { + "name": { + "en": "Boissevain Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Bonnyville U1 Sand": { + "name": { + "en": "Bonnyville U1 Sand", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Bonnyville U1 Till": { + "name": { + "en": "Bonnyville U1 Till", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Bonnyville U2 Till": { + "name": { + "en": "Bonnyville U2 Till", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Boss Point Formation": { + "name": { + "en": "Boss Point Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Bothwell Aquifer": { + "name": { + "en": "Bothwell Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Bounded Channel Aquifers": { + "name": { + "en": "Bounded Channel Aquifers", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Bourget Aquifer": { + "name": { + "en": "Bourget Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Bow Island Formation": { + "name": { + "en": "Bow Island Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Bradley Creek Valley Aquifer System": { + "name": { + "en": "Bradley Creek Valley Aquifer System", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Brazeau Formation": { + "name": { + "en": "Brazeau Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Bredenbury & Wynyard Formations": { + "name": { + "en": "Bredenbury & Wynyard Formations", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Bridge Lake Aquifer System": { + "name": { + "en": "Bridge Lake Aquifer System", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Brilliant Bedrock Aquifer": { + "name": { + "en": "Brilliant Bedrock Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Bronson Lake": { + "name": { + "en": "Bronson Lake", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Brownsville Local Aquifer": { + "name": { + "en": "Brownsville Local Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Buried valley containing sand and gravel": { + "name": { + "en": "Buried valley containing sand and gravel", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Buried valley/blanket Aquifers": { + "name": { + "en": "Buried valley/blanket Aquifers", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Cadomin Formation": { + "name": { + "en": "Cadomin Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Cadotte Formation": { + "name": { + "en": "Cadotte Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Caledon-Grand River Outwash Aquifer": { + "name": { + "en": "Caledon-Grand River Outwash Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Calgary Lethbridge Corridor HSU C Aquitard": { + "name": { + "en": "Calgary Lethbridge Corridor HSU C Aquitard", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Calgary Lethbridge Corridor HSU S1 Aquifer": { + "name": { + "en": "Calgary Lethbridge Corridor HSU S1 Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Calgary Lethbridge Corridor HSU S2 Aquifer": { + "name": { + "en": "Calgary Lethbridge Corridor HSU S2 Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Canadian Shield": { + "name": { + "en": "Canadian Shield", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Canning Aquitard": { + "name": { + "en": "Canning Aquitard", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Canning Till Aquitard": { + "name": { + "en": "Canning Till Aquitard", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Cantuar Formation": { + "name": { + "en": "Cantuar Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Canyon Overburden Aquifer": { + "name": { + "en": "Canyon Overburden Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Carbon Member": { + "name": { + "en": "Carbon Member", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Carbonate rock Aquifer": { + "name": { + "en": "Carbonate rock Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Carboniferous basin Aquifer": { + "name": { + "en": "Carboniferous basin Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Cardium Formation": { + "name": { + "en": "Cardium Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Carlile Formation": { + "name": { + "en": "Carlile Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Casino Overburden Aquifer": { + "name": { + "en": "Casino Overburden Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Castlegar Overburden Aquifer": { + "name": { + "en": "Castlegar Overburden Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Cataract Group Hydrogeologic Unit": { + "name": { + "en": "Cataract Group Hydrogeologic Unit", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Catfish Creek Aquifer": { + "name": { + "en": "Catfish Creek Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Cedar Grove Aquifer": { + "name": { + "en": "Cedar Grove Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Central Catfish Creek Aquifer": { + "name": { + "en": "Central Catfish Creek Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Central Halfway-Beatton Bedrock Aquifer": { + "name": { + "en": "Central Halfway-Beatton Bedrock Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Central South Nation Aquifer Complex": { + "name": { + "en": "Central South Nation Aquifer Complex", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Champlain Aquifer": { + "name": { + "en": "Champlain Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Channel Aquifer 1": { + "name": { + "en": "Channel Aquifer 1", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Channel Aquifer 2": { + "name": { + "en": "Channel Aquifer 2", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Channel Aquifer 3": { + "name": { + "en": "Channel Aquifer 3", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Channel Aquitard 1": { + "name": { + "en": "Channel Aquitard 1", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Channel Aquitard 2": { + "name": { + "en": "Channel Aquitard 2", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Charlie Halfway Beatton Bedrock Aquifer": { + "name": { + "en": "Charlie Halfway Beatton Bedrock Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Chateauguay Aquifer": { + "name": { + "en": "Chateauguay Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Chauidiere Aquifer": { + "name": { + "en": "Chauidiere Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Chesley Aquifer": { + "name": { + "en": "Chesley Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Chinchaga Formation": { + "name": { + "en": "Chinchaga Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Chu Íntthi Aquifer": { + "name": { + "en": "Chu Íntthi Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Chungo Member": { + "name": { + "en": "Chungo Member", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Clarence Creek Aquifer": { + "name": { + "en": "Clarence Creek Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Clayton Heights Aquifer": { + "name": { + "en": "Clayton Heights Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Clayton Uplands Aquifer": { + "name": { + "en": "Clayton Uplands Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Clinton Creek Bedrock Aquifer": { + "name": { + "en": "Clinton Creek Bedrock Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Clinton Creek Lower Unconsolidated Aquifer": { + "name": { + "en": "Clinton Creek Lower Unconsolidated Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Clinton Creek Upper Sand and Gravel Aquifer": { + "name": { + "en": "Clinton Creek Upper Sand and Gravel Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Clinton Group Hydrogeologic Unit": { + "name": { + "en": "Clinton Group Hydrogeologic Unit", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Coalspur Formation": { + "name": { + "en": "Coalspur Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Cold Lake Formation": { + "name": { + "en": "Cold Lake Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Coldstream Aquifer": { + "name": { + "en": "Coldstream Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Colorado Group": { + "name": { + "en": "Colorado Group", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Connelly Creek Formation": { + "name": { + "en": "Connelly Creek Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Contact Aquifer": { + "name": { + "en": "Contact Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Contact Rapids Formation": { + "name": { + "en": "Contact Rapids Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Cooking Lake area sediments": { + "name": { + "en": "Cooking Lake area sediments", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Cooking Lake Formation": { + "name": { + "en": "Cooking Lake Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Credit River Aquifer": { + "name": { + "en": "Credit River Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Creston-Kootenay River Overburden Aquifer": { + "name": { + "en": "Creston-Kootenay River Overburden Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Cridland Creek Bedrock Aquifer": { + "name": { + "en": "Cridland Creek Bedrock Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Crowsnest River Alluvial Aquifer": { + "name": { + "en": "Crowsnest River Alluvial Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Cumberland Group": { + "name": { + "en": "Cumberland Group", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Cypress Hills Formation": { + "name": { + "en": "Cypress Hills Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Dalehurst Member": { + "name": { + "en": "Dalehurst Member", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Dawson Creek Overburden Aquifer": { + "name": { + "en": "Dawson Creek Overburden Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Del Bonita Formation": { + "name": { + "en": "Del Bonita Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Detroit River Group Hydrogeologic Unit": { + "name": { + "en": "Detroit River Group Hydrogeologic Unit", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Devonian Strata": { + "name": { + "en": "Devonian Strata", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Dinosaur Park Formation": { + "name": { + "en": "Dinosaur Park Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Doe Creek Member": { + "name": { + "en": "Doe Creek Member", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Doig Formation": { + "name": { + "en": "Doig Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Don Formation": { + "name": { + "en": "Don Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Dowling Member": { + "name": { + "en": "Dowling Member", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Drumheller Channel Complex": { + "name": { + "en": "Drumheller Channel Complex", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Drumheller Member": { + "name": { + "en": "Drumheller Member", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Drywood Creek Formation": { + "name": { + "en": "Drywood Creek Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Dundalk Aquifer": { + "name": { + "en": "Dundalk Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Dundee Hydrogeologic Unit": { + "name": { + "en": "Dundee Hydrogeologic Unit", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Dundurn Formation": { + "name": { + "en": "Dundurn Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Dunvegan Formation": { + "name": { + "en": "Dunvegan Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Durham Aquifer": { + "name": { + "en": "Durham Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Duvernay Formation": { + "name": { + "en": "Duvernay Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Dyer-Wingfield-St. Edmund Hydrogeologic Unit": { + "name": { + "en": "Dyer-Wingfield-St. Edmund Hydrogeologic Unit", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "East and Middle Sixteen Mile Aquifer": { + "name": { + "en": "East and Middle Sixteen Mile Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "East Creston Bedrock Aquifer": { + "name": { + "en": "East Creston Bedrock Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "East Pine Bedrock Aquifer": { + "name": { + "en": "East Pine Bedrock Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "East Pine-Groundbirch Bedrock Aquifer": { + "name": { + "en": "East Pine-Groundbirch Bedrock Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Eastend Formation": { + "name": { + "en": "Eastend Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Eastend-Ravenscrag Aquifer": { + "name": { + "en": "Eastend-Ravenscrag Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Edson burried-valley Aquifer": { + "name": { + "en": "Edson burried-valley Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Egmond Bay Formation": { + "name": { + "en": "Egmond Bay Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Elgin-Southampton Aquifer": { + "name": { + "en": "Elgin-Southampton Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Ellerslie Member": { + "name": { + "en": "Ellerslie Member", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Ellis Group": { + "name": { + "en": "Ellis Group", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Empress Formation": { + "name": { + "en": "Empress Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Empress Formation-Uplands glacial": { + "name": { + "en": "Empress Formation-Uplands glacial", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Empress Formation-Valley fill glacial": { + "name": { + "en": "Empress Formation-Valley fill glacial", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Empress Formation-Valley fill glacial Tertiary Undifferentiated": { + "name": { + "en": "Empress Formation-Valley fill glacial Tertiary Undifferentiated", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Empress Formation-Valley fill Tertiary": { + "name": { + "en": "Empress Formation-Valley fill Tertiary", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Erie Interstadial Deposits": { + "name": { + "en": "Erie Interstadial Deposits", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Ernestina Lake Formation": { + "name": { + "en": "Ernestina Lake Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Esker and gravel": { + "name": { + "en": "Esker and gravel", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Estend Formation": { + "name": { + "en": "Estend Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Ethel Lake Formation": { + "name": { + "en": "Ethel Lake Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Etobicoke Aquifer": { + "name": { + "en": "Etobicoke Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Exshaw Formation": { + "name": { + "en": "Exshaw Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Eyot Formation": { + "name": { + "en": "Eyot Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Farrel Creek Bedrock Aquifer": { + "name": { + "en": "Farrel Creek Bedrock Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Fernie Formation": { + "name": { + "en": "Fernie Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "First White Specks Formation": { + "name": { + "en": "First White Specks Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Fish Scales Formation": { + "name": { + "en": "Fish Scales Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Fish Scales Member": { + "name": { + "en": "Fish Scales Member", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Flesherton Aquifer": { + "name": { + "en": "Flesherton Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Floral Formation": { + "name": { + "en": "Floral Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Fontfill Aquifer Complex": { + "name": { + "en": "Fontfill Aquifer Complex", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Foremost Formation": { + "name": { + "en": "Foremost Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Fort Nelson-River Alluvial Aquifer": { + "name": { + "en": "Fort Nelson-River Alluvial Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Fort Simpson Formation": { + "name": { + "en": "Fort Simpson Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Fort St. John Overburden Aquifer System": { + "name": { + "en": "Fort St. John Overburden Aquifer System", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Fort Vermilion Formation": { + "name": { + "en": "Fort Vermilion Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Fourchu Group": { + "name": { + "en": "Fourchu Group", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Fractured Aquifers-Gulf Islands": { + "name": { + "en": "Fractured Aquifers-Gulf Islands", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Fraser Canyon Aquifer, Choate to Yale": { + "name": { + "en": "Fraser Canyon Aquifer, Choate to Yale", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Fraser Canyon Aquifer, from Yale to Haig": { + "name": { + "en": "Fraser Canyon Aquifer, from Yale to Haig", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Fraser Lowlands Aquifer": { + "name": { + "en": "Fraser Lowlands Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Fraser Plateau Lava Aquifer": { + "name": { + "en": "Fraser Plateau Lava Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Frenchman Formation": { + "name": { + "en": "Frenchman Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Frenchman to Eastend Undifferentiated": { + "name": { + "en": "Frenchman to Eastend Undifferentiated", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Fulford Aquifer": { + "name": { + "en": "Fulford Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Fundy Group": { + "name": { + "en": "Fundy Group", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Ganges Harbour Aquifer": { + "name": { + "en": "Ganges Harbour Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Georgeville Group": { + "name": { + "en": "Georgeville Group", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Gething Formation": { + "name": { + "en": "Gething Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Gibsons/SCRD Granthams Landing/Elphinstone Aquifer": { + "name": { + "en": "Gibsons/SCRD Granthams Landing/Elphinstone Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Glaciolacustrine Aquifer Complex": { + "name": { + "en": "Glaciolacustrine Aquifer Complex", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Glade Overburden Aquifer": { + "name": { + "en": "Glade Overburden Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Glauconitic Sandstone Formation": { + "name": { + "en": "Glauconitic Sandstone Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Glemmore Basal Aquifer": { + "name": { + "en": "Glemmore Basal Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Gleneden Aquifer": { + "name": { + "en": "Gleneden Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Grand Centre Formation": { + "name": { + "en": "Grand Centre Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Grand Forks Aquifer": { + "name": { + "en": "Grand Forks Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Grand Rapids Formation": { + "name": { + "en": "Grand Rapids Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Grand River Aquifer": { + "name": { + "en": "Grand River Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Grand River Basin Aquifer": { + "name": { + "en": "Grand River Basin Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Grand River Outwash Deposits": { + "name": { + "en": "Grand River Outwash Deposits", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Grand River Valley Basinal Deposits": { + "name": { + "en": "Grand River Valley Basinal Deposits", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Grandview Aquifer": { + "name": { + "en": "Grandview Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Grant Hill Aquifer": { + "name": { + "en": "Grant Hill Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Greater Kelowna Aquifer": { + "name": { + "en": "Greater Kelowna Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Greatlakean Stade Deposits": { + "name": { + "en": "Greatlakean Stade Deposits", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Green River Aquifer": { + "name": { + "en": "Green River Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Greendale Deep Aquifer": { + "name": { + "en": "Greendale Deep Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Greenwood": { + "name": { + "en": "Greenwood", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Greenwood Aquifer": { + "name": { + "en": "Greenwood Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Grimshaw Gravels Aquifer": { + "name": { + "en": "Grimshaw Gravels Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Grosmont Formation": { + "name": { + "en": "Grosmont Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Groundbirch Buried Valley Aquifer": { + "name": { + "en": "Groundbirch Buried Valley Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Grumbler Group": { + "name": { + "en": "Grumbler Group", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Guichon Creek Aquifer": { + "name": { + "en": "Guichon Creek Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Haans Creek to Blain Creek-Haida Gwaii Aquifer": { + "name": { + "en": "Haans Creek to Blain Creek-Haida Gwaii Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Hagan Aquifer": { + "name": { + "en": "Hagan Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Haida/Lawnhill Aquifer": { + "name": { + "en": "Haida/Lawnhill Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Haig Aquifer": { + "name": { + "en": "Haig Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Halfway Valley Aquifer System": { + "name": { + "en": "Halfway Valley Aquifer System", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Halton Till": { + "name": { + "en": "Halton Till", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Halverson Ridge Formation": { + "name": { + "en": "Halverson Ridge Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Hamilton Group Hydrogeologic Unit": { + "name": { + "en": "Hamilton Group Hydrogeologic Unit", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Hand Hills Formation": { + "name": { + "en": "Hand Hills Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Hanover Aquifer": { + "name": { + "en": "Hanover Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Hanson Member": { + "name": { + "en": "Hanson Member", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Harrow Aquifer": { + "name": { + "en": "Harrow Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Hatzic Prairie Aquifer": { + "name": { + "en": "Hatzic Prairie Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Haultain Formation": { + "name": { + "en": "Haultain Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Haven Member": { + "name": { + "en": "Haven Member", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Haynes Aquifer": { + "name": { + "en": "Haynes Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Haynes Member": { + "name": { + "en": "Haynes Member", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Hazelmere Aquifer": { + "name": { + "en": "Hazelmere Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Hazelmere Valley Aquifer": { + "name": { + "en": "Hazelmere Valley Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Heather Bank Aquifer": { + "name": { + "en": "Heather Bank Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Hillsborough Formation": { + "name": { + "en": "Hillsborough Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Hillsborough River Formation": { + "name": { + "en": "Hillsborough River Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Hockley Valley Aquifer": { + "name": { + "en": "Hockley Valley Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Holstein Aquifer": { + "name": { + "en": "Holstein Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Holt Aquifer Complex": { + "name": { + "en": "Holt Aquifer Complex", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Hopington AB Aquifer": { + "name": { + "en": "Hopington AB Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Hopington C Aquifer": { + "name": { + "en": "Hopington C Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Horseshoe Canyon Formation": { + "name": { + "en": "Horseshoe Canyon Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Horsethief Member": { + "name": { + "en": "Horsethief Member", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Horton Group": { + "name": { + "en": "Horton Group", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Houston Bedrock Aquifer": { + "name": { + "en": "Houston Bedrock Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Hullcar Confined Aquifer": { + "name": { + "en": "Hullcar Confined Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Hullcar Perched": { + "name": { + "en": "Hullcar Perched", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Hullcar Unconfined Aquifer": { + "name": { + "en": "Hullcar Unconfined Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Ireton Formation": { + "name": { + "en": "Ireton Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Ishbel Group": { + "name": { + "en": "Ishbel Group", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Joeyaska Deep Aquifer": { + "name": { + "en": "Joeyaska Deep Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Joeyaska Shallow Aquifer": { + "name": { + "en": "Joeyaska Shallow Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Joli Fou Formation": { + "name": { + "en": "Joli Fou Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Judith River Aquifer": { + "name": { + "en": "Judith River Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Judith River/Belly River Formation": { + "name": { + "en": "Judith River/Belly River Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Jumping Pound SST Member": { + "name": { + "en": "Jumping Pound SST Member", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Jurassic Formations": { + "name": { + "en": "Jurassic Formations", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Kame Outwash Aquifer Complex": { + "name": { + "en": "Kame Outwash Aquifer Complex", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Karmutsen Aquifer": { + "name": { + "en": "Karmutsen Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Kaskapau Formation": { + "name": { + "en": "Kaskapau Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Kawkawa Lake Aquifer": { + "name": { + "en": "Kawkawa Lake Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Keating Aquifer": { + "name": { + "en": "Keating Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Keg River Formation": { + "name": { + "en": "Keg River Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Kettle Point Hydrogeologic Unit": { + "name": { + "en": "Kettle Point Hydrogeologic Unit", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Kildare Formation": { + "name": { + "en": "Kildare Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Kingsvale Aquifer": { + "name": { + "en": "Kingsvale Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Kiskatinaw Buried Channel Aquifer": { + "name": { + "en": "Kiskatinaw Buried Channel Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Kiskatinaw Glaciodeltaic Overburden Aquifer": { + "name": { + "en": "Kiskatinaw Glaciodeltaic Overburden Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Kitchener Creek Overburden Aquifer": { + "name": { + "en": "Kitchener Creek Overburden Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Kleinburg Aquifer": { + "name": { + "en": "Kleinburg Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Koksilah River Valley Aquifer": { + "name": { + "en": "Koksilah River Valley Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Kwinshatin Intertill Aquifer": { + "name": { + "en": "Kwinshatin Intertill Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "La Glace Sandstone Member": { + "name": { + "en": "La Glace Sandstone Member", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "La Loche Formation AND Basal Red Beds Unit": { + "name": { + "en": "La Loche Formation AND Basal Red Beds Unit", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lacombe Aquitard": { + "name": { + "en": "Lacombe Aquitard", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lacombe Member": { + "name": { + "en": "Lacombe Member", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lake Algonquin Sand Aquifer": { + "name": { + "en": "Lake Algonquin Sand Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lake Peel Deltaic Aquifer": { + "name": { + "en": "Lake Peel Deltaic Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lake Schomberg and Algonquin Aquifer": { + "name": { + "en": "Lake Schomberg and Algonquin Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lake Schomberg and Algonquin Aquitard": { + "name": { + "en": "Lake Schomberg and Algonquin Aquitard", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lancaster-Cornwall Aquifer": { + "name": { + "en": "Lancaster-Cornwall Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Langdale/Hopkins Aquifer": { + "name": { + "en": "Langdale/Hopkins Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Langdale/Hopkins Landing Aquifer": { + "name": { + "en": "Langdale/Hopkins Landing Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Langley Upland Aquifer": { + "name": { + "en": "Langley Upland Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Langley Upland Intertill Aquifer": { + "name": { + "en": "Langley Upland Intertill Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "LD Basal Till": { + "name": { + "en": "LD Basal Till", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "LD Local Aquifers": { + "name": { + "en": "LD Local Aquifers", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "LD Lower Aquifer": { + "name": { + "en": "LD Lower Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "LD Middle Till": { + "name": { + "en": "LD Middle Till", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "LD Upper Till": { + "name": { + "en": "LD Upper Till", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lea Park Formation": { + "name": { + "en": "Lea Park Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Leamington Aquifer": { + "name": { + "en": "Leamington Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Leduc Formation": { + "name": { + "en": "Leduc Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lenses of sand and gravel": { + "name": { + "en": "Lenses of sand and gravel", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lincoln Aquifer": { + "name": { + "en": "Lincoln Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Little Qualicum River Aquifer": { + "name": { + "en": "Little Qualicum River Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Local Aquifer 2": { + "name": { + "en": "Local Aquifer 2", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Local Aquitard 1": { + "name": { + "en": "Local Aquitard 1", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lookout Ridge Aquifer": { + "name": { + "en": "Lookout Ridge Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Łots'an Aquifer": { + "name": { + "en": "Łots'an Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lower Bearpaw Formation": { + "name": { + "en": "Lower Bearpaw Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lower Belly River Formation": { + "name": { + "en": "Lower Belly River Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lower Brazeau Member": { + "name": { + "en": "Lower Brazeau Member", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lower Bridge Creek Valley Aquifer System": { + "name": { + "en": "Lower Bridge Creek Valley Aquifer System", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lower Bridge Creek Valley Bedrock Aquifer": { + "name": { + "en": "Lower Bridge Creek Valley Bedrock Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lower Brougham Aquifer": { + "name": { + "en": "Lower Brougham Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lower Cassidy Aquifer": { + "name": { + "en": "Lower Cassidy Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lower Catfish Creek Till Aquitard": { + "name": { + "en": "Lower Catfish Creek Till Aquitard", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lower Cherryville Aquifer": { + "name": { + "en": "Lower Cherryville Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lower Chinguacousy Aquifer": { + "name": { + "en": "Lower Chinguacousy Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lower Coalspur Member": { + "name": { + "en": "Lower Coalspur Member", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lower Coquihalla Canyon Aquifer": { + "name": { + "en": "Lower Coquihalla Canyon Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lower Cowichan River A Aquifer": { + "name": { + "en": "Lower Cowichan River A Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lower Cowichan River C Aquifer": { + "name": { + "en": "Lower Cowichan River C Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lower Erie Phase Aquifer": { + "name": { + "en": "Lower Erie Phase Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lower Erie Phase Aquitard": { + "name": { + "en": "Lower Erie Phase Aquitard", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lower Gates River Aquifer": { + "name": { + "en": "Lower Gates River Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lower Lac la Hache Valley Bedrock Aquifer": { + "name": { + "en": "Lower Lac la Hache Valley Bedrock Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lower Lea Park Formation": { + "name": { + "en": "Lower Lea Park Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lower Loon River Formation": { + "name": { + "en": "Lower Loon River Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lower Lotsberg Formation": { + "name": { + "en": "Lower Lotsberg Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lower Markham Aquifer": { + "name": { + "en": "Lower Markham Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lower Maryhill Till": { + "name": { + "en": "Lower Maryhill Till", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lower Merritt Aquifer": { + "name": { + "en": "Lower Merritt Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lower Montney Formation": { + "name": { + "en": "Lower Montney Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lower Nechako River Aquifer": { + "name": { + "en": "Lower Nechako River Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lower Nicola Aquifer": { + "name": { + "en": "Lower Nicola Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lower Nicola Outwash Aquifer": { + "name": { + "en": "Lower Nicola Outwash Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lower Ordovician OR Cambrian Strata": { + "name": { + "en": "Lower Ordovician OR Cambrian Strata", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lower Scollard Member": { + "name": { + "en": "Lower Scollard Member", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lower Shaftesbury Formation": { + "name": { + "en": "Lower Shaftesbury Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lower Shuswap Deep Confined": { + "name": { + "en": "Lower Shuswap Deep Confined", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lower Shuswap River Confined": { + "name": { + "en": "Lower Shuswap River Confined", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lower Thorncliffe Aquifer": { + "name": { + "en": "Lower Thorncliffe Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lower Thorncliffe Aquitard": { + "name": { + "en": "Lower Thorncliffe Aquitard", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lower Unionville Aquifer": { + "name": { + "en": "Lower Unionville Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lower Victoria Aquifer": { + "name": { + "en": "Lower Victoria Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lower Wapiti Member": { + "name": { + "en": "Lower Wapiti Member", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lower Willow Creek Member": { + "name": { + "en": "Lower Willow Creek Member", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lowland Aquifer Complex": { + "name": { + "en": "Lowland Aquifer Complex", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lumby-Lower Aquifer": { + "name": { + "en": "Lumby-Lower Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lumby-Upper Aquifer": { + "name": { + "en": "Lumby-Upper Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Lundbreck Formation": { + "name": { + "en": "Lundbreck Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Mabou Group": { + "name": { + "en": "Mabou Group", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Mackinaw Interstadial Deposits": { + "name": { + "en": "Mackinaw Interstadial Deposits", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Majeau Lake Formation": { + "name": { + "en": "Majeau Lake Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Major buried sand and gravel": { + "name": { + "en": "Major buried sand and gravel", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Malahat Ridge Aquifer": { + "name": { + "en": "Malahat Ridge Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Malcolm Island Aquifer": { + "name": { + "en": "Malcolm Island Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Mannville Group": { + "name": { + "en": "Mannville Group", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Maple Aquifer": { + "name": { + "en": "Maple Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Mara Aquifer Aquifer": { + "name": { + "en": "Mara Aquifer Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Marble Hill Unconsolidated Aquifer": { + "name": { + "en": "Marble Hill Unconsolidated Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Marie Creek Formation": { + "name": { + "en": "Marie Creek Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Markdale Aquifer": { + "name": { + "en": "Markdale Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Marshybank Formation": { + "name": { + "en": "Marshybank Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Marshybank Member": { + "name": { + "en": "Marshybank Member", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Masset Aquifer": { + "name": { + "en": "Masset Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "McDougall Creek Deltaic Aquifer": { + "name": { + "en": "McDougall Creek Deltaic Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "McMillan Island Aquifer": { + "name": { + "en": "McMillan Island Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "McMurray Formation": { + "name": { + "en": "McMurray Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Meaford Aquifer": { + "name": { + "en": "Meaford Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Medicine Hat Formation": { + "name": { + "en": "Medicine Hat Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Medicine Hat Member": { + "name": { + "en": "Medicine Hat Member", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Meguma SuperGroup": { + "name": { + "en": "Meguma SuperGroup", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Meltwater Channel Hydrogeologic Unit": { + "name": { + "en": "Meltwater Channel Hydrogeologic Unit", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Mennon Formation": { + "name": { + "en": "Mennon Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Middle Erie Phase Aquifer": { + "name": { + "en": "Middle Erie Phase Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Middle Maryhill Till": { + "name": { + "en": "Middle Maryhill Till", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Middle Merritt Aquifer": { + "name": { + "en": "Middle Merritt Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Middle Montney Formation": { + "name": { + "en": "Middle Montney Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Middle Red Beds Formation": { + "name": { + "en": "Middle Red Beds Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Middle Thorncliffe Aquifer": { + "name": { + "en": "Middle Thorncliffe Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Middle Thorncliffe Aquitard": { + "name": { + "en": "Middle Thorncliffe Aquitard", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Middle Waterloo Moraine Aquifer & Equivalents": { + "name": { + "en": "Middle Waterloo Moraine Aquifer & Equivalents", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Milk River Aquifer": { + "name": { + "en": "Milk River Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Milk River Formation": { + "name": { + "en": "Milk River Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Mill Bay Aquifer": { + "name": { + "en": "Mill Bay Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Minesing Basin Transgressive Deposits": { + "name": { + "en": "Minesing Basin Transgressive Deposits", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Mirabel Aquifer": { + "name": { + "en": "Mirabel Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Mission Creek Aquifer": { + "name": { + "en": "Mission Creek Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Monteith Formation": { + "name": { + "en": "Monteith Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Montney Halfway Beatton Bedrock Aquifer": { + "name": { + "en": "Montney Halfway Beatton Bedrock Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Montney Turbidite": { + "name": { + "en": "Montney Turbidite", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Montrose Bedrock Aquifer": { + "name": { + "en": "Montrose Bedrock Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Morien Group": { + "name": { + "en": "Morien Group", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Morrin Member": { + "name": { + "en": "Morrin Member", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Mount Albert Aquifer Complex": { + "name": { + "en": "Mount Albert Aquifer Complex", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Mount Ozzard Bedrock West Aquifer": { + "name": { + "en": "Mount Ozzard Bedrock West Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Mount Ozzard, Bedrock Southeast": { + "name": { + "en": "Mount Ozzard, Bedrock Southeast", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Mount Ozzard, Unconsolidated": { + "name": { + "en": "Mount Ozzard, Unconsolidated", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Mount Tom Bedrock": { + "name": { + "en": "Mount Tom Bedrock", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Mount Tom Bedrock Aquifer": { + "name": { + "en": "Mount Tom Bedrock Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Mount Tom Unconsolidated": { + "name": { + "en": "Mount Tom Unconsolidated", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Muriel Lake": { + "name": { + "en": "Muriel Lake", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Murrayville AC Aquifer": { + "name": { + "en": "Murrayville AC Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Murrayville B Aquifer": { + "name": { + "en": "Murrayville B Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Muskeg Formation": { + "name": { + "en": "Muskeg Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Muskeg Lower Anhydrite Member": { + "name": { + "en": "Muskeg Lower Anhydrite Member", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Muskiki Formation": { + "name": { + "en": "Muskiki Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Muskiki Formation OR Kaskapau Formation": { + "name": { + "en": "Muskiki Formation OR Kaskapau Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Muskiki Member": { + "name": { + "en": "Muskiki Member", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Muskwa Formation": { + "name": { + "en": "Muskwa Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Muskwa River Alluvial Aquifer": { + "name": { + "en": "Muskwa River Alluvial Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Muskwa-Fort Nelson Buried Valley Aquifer": { + "name": { + "en": "Muskwa-Fort Nelson Buried Valley Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Muskwa-Fort Nelson Glaciofluvial Aquifer": { + "name": { + "en": "Muskwa-Fort Nelson Glaciofluvial Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Nanaimo Group Aquifer, Campbell River to Courtney": { + "name": { + "en": "Nanaimo Group Aquifer, Campbell River to Courtney", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Nanaimo Lowlands Aquifer": { + "name": { + "en": "Nanaimo Lowlands Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "NE of White Rock A Aquifer": { + "name": { + "en": "NE of White Rock A Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "NE of White Rock B Aquifer": { + "name": { + "en": "NE of White Rock B Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Nechako Buried Valley Aquifer": { + "name": { + "en": "Nechako Buried Valley Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Nelson Overburden Aquifer": { + "name": { + "en": "Nelson Overburden Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Newmarket Till": { + "name": { + "en": "Newmarket Till", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Newton Upland Aquifer": { + "name": { + "en": "Newton Upland Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Niagra-on-the-Lake Aquifer": { + "name": { + "en": "Niagra-on-the-Lake Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Nicomekl-Serpentine Aquifer": { + "name": { + "en": "Nicomekl-Serpentine Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Nicomen Slough Aquifer": { + "name": { + "en": "Nicomen Slough Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Nikanassin Formation": { + "name": { + "en": "Nikanassin Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Niobrara Formation": { + "name": { + "en": "Niobrara Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Nissouri Stadial Deposits": { + "name": { + "en": "Nissouri Stadial Deposits", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Nivek Aquifer": { + "name": { + "en": "Nivek Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Nomad Member": { + "name": { + "en": "Nomad Member", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Norfolk Sand Plain Aquifer": { + "name": { + "en": "Norfolk Sand Plain Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Norns Creek Overburden Aquifer": { + "name": { + "en": "Norns Creek Overburden Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "North Campbell River Bedrock": { + "name": { + "en": "North Campbell River Bedrock", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "North Campbell River Unconsolidated": { + "name": { + "en": "North Campbell River Unconsolidated", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "North Castlegar Bedrock Aquifer": { + "name": { + "en": "North Castlegar Bedrock Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "North Central Saanich Aquifer": { + "name": { + "en": "North Central Saanich Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "North Hope Aquifer": { + "name": { + "en": "North Hope Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "North Houston Bedrock": { + "name": { + "en": "North Houston Bedrock", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "North Mountain Formation": { + "name": { + "en": "North Mountain Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "North Nechako Terrace Bedrock Aquifer": { + "name": { + "en": "North Nechako Terrace Bedrock Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "North Salt Spring Island Aquifer": { + "name": { + "en": "North Salt Spring Island Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "North-Central Salt Spring Island Aquifer": { + "name": { + "en": "North-Central Salt Spring Island Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Northern Halfway Beatton Bedrock Aquifer": { + "name": { + "en": "Northern Halfway Beatton Bedrock Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Northern Lac la Hache Aquifer System": { + "name": { + "en": "Northern Lac la Hache Aquifer System", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Northwest Halfway-Beatton Bedrock Aquifer": { + "name": { + "en": "Northwest Halfway-Beatton Bedrock Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Northwest of Clearbrook Aquifer": { + "name": { + "en": "Northwest of Clearbrook Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Notre Dame Aquifer": { + "name": { + "en": "Notre Dame Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "O Avenue Aquifer": { + "name": { + "en": "O Avenue Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "O'Keefe Basal": { + "name": { + "en": "O'Keefe Basal", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "O'Keefe Unconfined Aquifer": { + "name": { + "en": "O'Keefe Unconfined Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Oak Ridges Moraine Aquifer": { + "name": { + "en": "Oak Ridges Moraine Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Obed Mountain Formation": { + "name": { + "en": "Obed Mountain Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Odanah Member": { + "name": { + "en": "Odanah Member", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Odanah Shale Aquifer": { + "name": { + "en": "Odanah Shale Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Okanagan Landing Deep Confined": { + "name": { + "en": "Okanagan Landing Deep Confined", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Okanagan Valley Aquifer": { + "name": { + "en": "Okanagan Valley Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Oldcastle Aquifer": { + "name": { + "en": "Oldcastle Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Oldman Formation": { + "name": { + "en": "Oldman Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Opabin Member": { + "name": { + "en": "Opabin Member", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Orangeville Aquifer Complex": { + "name": { + "en": "Orangeville Aquifer Complex", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Orby Head Formation": { + "name": { + "en": "Orby Head Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Oro Moraine Aquifer Complex": { + "name": { + "en": "Oro Moraine Aquifer Complex", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Oro-Medonte Aquifer": { + "name": { + "en": "Oro-Medonte Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Osoyoos West Aquifer": { + "name": { + "en": "Osoyoos West Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Ostracod Beds Member": { + "name": { + "en": "Ostracod Beds Member", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Ottawa Group Hydrogeologic Unit": { + "name": { + "en": "Ottawa Group Hydrogeologic Unit", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Owl Creek Aquifer": { + "name": { + "en": "Owl Creek Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Owl Ridge Aquifer": { + "name": { + "en": "Owl Ridge Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Oyster River Aquifer": { + "name": { + "en": "Oyster River Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Pacheedaht Aquifer": { + "name": { + "en": "Pacheedaht Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Paddy Formation": { + "name": { + "en": "Paddy Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Pakowki Formation": { + "name": { + "en": "Pakowki Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Paldi-Deep Aquifer": { + "name": { + "en": "Paldi-Deep Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Paleozoic Carbonate rock formations, Ordovician to Devonian": { + "name": { + "en": "Paleozoic Carbonate rock formations, Ordovician to Devonian", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Paris Aquifer": { + "name": { + "en": "Paris Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Paris moraine Aquitard": { + "name": { + "en": "Paris moraine Aquitard", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Paskapoo Formation": { + "name": { + "en": "Paskapoo Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Paskapoo Formation Aquifer": { + "name": { + "en": "Paskapoo Formation Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Paterson Overburden Aquifer": { + "name": { + "en": "Paterson Overburden Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Paul's Basin Aquifer": { + "name": { + "en": "Paul's Basin Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Peace River Formation": { + "name": { + "en": "Peace River Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Peace-Valley Aquifer System": { + "name": { + "en": "Peace-Valley Aquifer System", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Pelican Formation": { + "name": { + "en": "Pelican Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Pelican Mountain Formation": { + "name": { + "en": "Pelican Mountain Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Pense Formation": { + "name": { + "en": "Pense Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Pickering Aquifer": { + "name": { + "en": "Pickering Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Pictou Group": { + "name": { + "en": "Pictou Group", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Pike Lake Formation": { + "name": { + "en": "Pike Lake Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Pineview Aquifer": { + "name": { + "en": "Pineview Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Plantagenet Aquifer": { + "name": { + "en": "Plantagenet Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Porcupine Hills Formation": { + "name": { + "en": "Porcupine Hills Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Porcupine Hills Formation Aquifers": { + "name": { + "en": "Porcupine Hills Formation Aquifers", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Port Bruce Phase Aquitard": { + "name": { + "en": "Port Bruce Phase Aquitard", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Port Bruce Stadial Deposits": { + "name": { + "en": "Port Bruce Stadial Deposits", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Port Clements Aquifer": { + "name": { + "en": "Port Clements Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Port Colborne Aquifer": { + "name": { + "en": "Port Colborne Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Port Huron Stadial Deposits": { + "name": { + "en": "Port Huron Stadial Deposits", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Port McNeill East Bedrock Aquifer": { + "name": { + "en": "Port McNeill East Bedrock Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Port McNeill East Unconsolidated": { + "name": { + "en": "Port McNeill East Unconsolidated", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Port McNeill West Bedrock": { + "name": { + "en": "Port McNeill West Bedrock", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Port McNeill West Unconsolidated": { + "name": { + "en": "Port McNeill West Unconsolidated", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Portneuf Aquifer": { + "name": { + "en": "Portneuf Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Pottery Road Formation": { + "name": { + "en": "Pottery Road Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Pouce Coupe Member": { + "name": { + "en": "Pouce Coupe Member", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Pouce Coupe Overburden Aquifer": { + "name": { + "en": "Pouce Coupe Overburden Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Pouce Creek Bedrock Aquifer": { + "name": { + "en": "Pouce Creek Bedrock Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Powers Ck Deltaic Aquifer": { + "name": { + "en": "Powers Ck Deltaic Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Prairie Evaporite Formation": { + "name": { + "en": "Prairie Evaporite Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Pre-Canning Aquifers": { + "name": { + "en": "Pre-Canning Aquifers", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Pre-Canning Aquitard": { + "name": { + "en": "Pre-Canning Aquitard", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Pre-Catfish Aquifers": { + "name": { + "en": "Pre-Catfish Aquifers", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Precambrian Hydrogeologic Unit": { + "name": { + "en": "Precambrian Hydrogeologic Unit", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Precambrian rocks": { + "name": { + "en": "Precambrian rocks", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Precambrian to Model Base": { + "name": { + "en": "Precambrian to Model Base", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Priceville Aquifer": { + "name": { + "en": "Priceville Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Prophet River Alluvial Aquifer": { + "name": { + "en": "Prophet River Alluvial Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Puntledge/ Cumberland Aquifer": { + "name": { + "en": "Puntledge/ Cumberland Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Puskwaskau Formation": { + "name": { + "en": "Puskwaskau Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Puslinch Aquifer": { + "name": { + "en": "Puslinch Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Quadra Central Bedrock Aquifer": { + "name": { + "en": "Quadra Central Bedrock Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Quadra South Bedrock Aquifer": { + "name": { + "en": "Quadra South Bedrock Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Queenston Hydrogeologic Unit": { + "name": { + "en": "Queenston Hydrogeologic Unit", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Quinsam to Stories Beach Aquifer": { + "name": { + "en": "Quinsam to Stories Beach Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Ravenscrag Formation": { + "name": { + "en": "Ravenscrag Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Ravenscrag to Eastend Undifferentiated": { + "name": { + "en": "Ravenscrag to Eastend Undifferentiated", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Rawlings Lake Aquifer": { + "name": { + "en": "Rawlings Lake Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Red Deer River channel complex": { + "name": { + "en": "Red Deer River channel complex", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Regional Aquifer 3": { + "name": { + "en": "Regional Aquifer 3", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Regional Aquitard 3": { + "name": { + "en": "Regional Aquitard 3", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Richelieu-Yamaska Aquifer": { + "name": { + "en": "Richelieu-Yamaska Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Richibucto Formation": { + "name": { + "en": "Richibucto Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Rideau Front Aquifer": { + "name": { + "en": "Rideau Front Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Riding Mountain/Pierre Shale Formation": { + "name": { + "en": "Riding Mountain/Pierre Shale Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Roberts Creek Aquifer": { + "name": { + "en": "Roberts Creek Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Rockcliffe Hydrogeologic Unit": { + "name": { + "en": "Rockcliffe Hydrogeologic Unit", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Rockland Aquifer": { + "name": { + "en": "Rockland Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Rosebery Aquifer": { + "name": { + "en": "Rosebery Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Rundle Group": { + "name": { + "en": "Rundle Group", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Ryder Upland A Aquifer": { + "name": { + "en": "Ryder Upland A Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Ryder Upland B Aquifer": { + "name": { + "en": "Ryder Upland B Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Ryder Upland C Aquifer": { + "name": { + "en": "Ryder Upland C Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Saint-Maurice Aquifer": { + "name": { + "en": "Saint-Maurice Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Salina Hydrogeologic Unit": { + "name": { + "en": "Salina Hydrogeologic Unit", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Salmo River Bedrock Aquifer": { + "name": { + "en": "Salmo River Bedrock Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Salmo River Overburden Aquifer": { + "name": { + "en": "Salmo River Overburden Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Salmon River Aquifer": { + "name": { + "en": "Salmon River Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Salmon River-Lower Aquifer": { + "name": { + "en": "Salmon River-Lower Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Salmon River-Upper Aquifer": { + "name": { + "en": "Salmon River-Upper Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Sand Dunes Aquifer": { + "name": { + "en": "Sand Dunes Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Sandilands Aquifer": { + "name": { + "en": "Sandilands Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Sandspit-Haida Gwaii Aquifer": { + "name": { + "en": "Sandspit-Haida Gwaii Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Sardis-Vedder Aquifer": { + "name": { + "en": "Sardis-Vedder Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Sarsfield Aquifer": { + "name": { + "en": "Sarsfield Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Sayward-Salmon River Aquifer": { + "name": { + "en": "Sayward-Salmon River Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Scarborough Formation": { + "name": { + "en": "Scarborough Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Schomberg Aquifer Complex": { + "name": { + "en": "Schomberg Aquifer Complex", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Schooler Creek Group": { + "name": { + "en": "Schooler Creek Group", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Scollard Formation": { + "name": { + "en": "Scollard Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Sechelt/Wakefield Creek Aquifer": { + "name": { + "en": "Sechelt/Wakefield Creek Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Second White Specks Formation": { + "name": { + "en": "Second White Specks Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Second White Specks/Favel Formation": { + "name": { + "en": "Second White Specks/Favel Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Sediment Above Bedrock": { + "name": { + "en": "Sediment Above Bedrock", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Seton Portage Aquifer": { + "name": { + "en": "Seton Portage Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Shaftesbury Formation": { + "name": { + "en": "Shaftesbury Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Shannon Lake Aquifer": { + "name": { + "en": "Shannon Lake Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Shawnigan Lake Aquifer": { + "name": { + "en": "Shawnigan Lake Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Shawnigan Lake/Cobble Hill/Mill Bay Aquifer": { + "name": { + "en": "Shawnigan Lake/Cobble Hill/Mill Bay Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Sheridan Lake Aquifer": { + "name": { + "en": "Sheridan Lake Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Shuswap Highlands Aquifer": { + "name": { + "en": "Shuswap Highlands Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Silurian": { + "name": { + "en": "Silurian", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Simcoe Group Hydrogeologic Unit": { + "name": { + "en": "Simcoe Group Hydrogeologic Unit", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Similkameen River Aquifer": { + "name": { + "en": "Similkameen River Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Sinkut Mountain North Surficial Aquifer": { + "name": { + "en": "Sinkut Mountain North Surficial Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Skidgate/Queen Charlotte Aquifer": { + "name": { + "en": "Skidgate/Queen Charlotte Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Slave Point Formation": { + "name": { + "en": "Slave Point Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Smoky Group": { + "name": { + "en": "Smoky Group", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Sooke-Metchosin Aquifer": { + "name": { + "en": "Sooke-Metchosin Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "South Castlegar Bedrock Aquifer": { + "name": { + "en": "South Castlegar Bedrock Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "South Central Elgin Aquifer": { + "name": { + "en": "South Central Elgin Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "South Fraser Lake Bedrock Aquifer": { + "name": { + "en": "South Fraser Lake Bedrock Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "South Fraser River Delta Aquifer": { + "name": { + "en": "South Fraser River Delta Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "South London Aquifer": { + "name": { + "en": "South London Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "South Nation Aquifer": { + "name": { + "en": "South Nation Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "South Nechako Terrace Bedrock Aquifer": { + "name": { + "en": "South Nechako Terrace Bedrock Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "South of Aldergrove Aquifer": { + "name": { + "en": "South of Aldergrove Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "South of Hopington Aquifer": { + "name": { + "en": "South of Hopington Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "South of Murrayville AC Aquifer": { + "name": { + "en": "South of Murrayville AC Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "South of Murrayville B Aquifer": { + "name": { + "en": "South of Murrayville B Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "South Quadra Unconsolidated Aquifer": { + "name": { + "en": "South Quadra Unconsolidated Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "South Salt Spring Island Aquifer": { + "name": { + "en": "South Salt Spring Island Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "South Valemont Aquifer": { + "name": { + "en": "South Valemont Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "South Vanderhoof Unconsolidated Aquifer": { + "name": { + "en": "South Vanderhoof Unconsolidated Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "South Vernon Confined Aquifer": { + "name": { + "en": "South Vernon Confined Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "South Vernon Unconfined Aquifer": { + "name": { + "en": "South Vernon Unconfined Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "South-Central Salt Spring Island Aquifer": { + "name": { + "en": "South-Central Salt Spring Island Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Southern Horse Lake Aquifer System Aquifer": { + "name": { + "en": "Southern Horse Lake Aquifer System Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Spallumcheen Basal Confined Aquifer": { + "name": { + "en": "Spallumcheen Basal Confined Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Spallumcheen Confined": { + "name": { + "en": "Spallumcheen Confined", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Spallumcheen Unconfined Aquifer": { + "name": { + "en": "Spallumcheen Unconfined Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Spences Bridge Aquifer": { + "name": { + "en": "Spences Bridge Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Sperling Aquifer": { + "name": { + "en": "Sperling Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Spirit River Formation": { + "name": { + "en": "Spirit River Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Spius Creek West of Canford Aquifer": { + "name": { + "en": "Spius Creek West of Canford Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "St. Catharines Aquifer": { + "name": { + "en": "St. Catharines Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "St. George Aquifers": { + "name": { + "en": "St. George Aquifers", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "St. Martin Aquifer": { + "name": { + "en": "St. Martin Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "St. Mary River Formation": { + "name": { + "en": "St. Mary River Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "St. Mathieu Aquifer": { + "name": { + "en": "St. Mathieu Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "St. Thomas Moraine Local Aquifers": { + "name": { + "en": "St. Thomas Moraine Local Aquifers", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Stavely Aquifer": { + "name": { + "en": "Stavely Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Stellako Unconsolidated Aquifer": { + "name": { + "en": "Stellako Unconsolidated Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Stirling Group": { + "name": { + "en": "Stirling Group", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Stoddart Group": { + "name": { + "en": "Stoddart Group", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Strathmore Member": { + "name": { + "en": "Strathmore Member", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Stumbles Creek Aquifer": { + "name": { + "en": "Stumbles Creek Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Stumbles Creek Confined": { + "name": { + "en": "Stumbles Creek Confined", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Stump Lake": { + "name": { + "en": "Stump Lake", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Stump Lake Bedrock": { + "name": { + "en": "Stump Lake Bedrock", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Sugar Lake Aquifer": { + "name": { + "en": "Sugar Lake Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Sulphur Point Formation": { + "name": { + "en": "Sulphur Point Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Sumas Prairie Aquifer": { + "name": { + "en": "Sumas Prairie Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Sumas Prairie North Aquifer": { + "name": { + "en": "Sumas Prairie North Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Sunchild Aquifer": { + "name": { + "en": "Sunchild Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Sunkay Formation": { + "name": { + "en": "Sunkay Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Sunningdale/Glenmerry Bedrock Aquifer": { + "name": { + "en": "Sunningdale/Glenmerry Bedrock Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Sunnybrae Aquifer": { + "name": { + "en": "Sunnybrae Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Sunnybrook Drift": { + "name": { + "en": "Sunnybrook Drift", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Sunset Creek Overburden Aquifer": { + "name": { + "en": "Sunset Creek Overburden Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Sunset Prairie Bedrock Aquifer": { + "name": { + "en": "Sunset Prairie Bedrock Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Swan Hills Formation": { + "name": { + "en": "Swan Hills Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Swan Lake Confined Aquifer": { + "name": { + "en": "Swan Lake Confined Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Swan Lake Unconfined": { + "name": { + "en": "Swan Lake Unconfined", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Swan River Formation": { + "name": { + "en": "Swan River Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Sweetwater Bedrock Aquifer": { + "name": { + "en": "Sweetwater Bedrock Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Tachick Lake Unconsolidated Aquifer": { + "name": { + "en": "Tachick Lake Unconsolidated Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Talik regions": { + "name": { + "en": "Talik regions", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Tappen Aquifer": { + "name": { + "en": "Tappen Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Thick and extensive unconfined sand and gravel": { + "name": { + "en": "Thick and extensive unconfined sand and gravel", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Thin unconfined sand": { + "name": { + "en": "Thin unconfined sand", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Thistle Member": { + "name": { + "en": "Thistle Member", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Thornbury Aquifer": { + "name": { + "en": "Thornbury Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Thorncliffe Formation": { + "name": { + "en": "Thorncliffe Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Thornill Aquifer": { + "name": { + "en": "Thornill Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Thornton Sand Aquifer": { + "name": { + "en": "Thornton Sand Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Tillsonburg Aquifer": { + "name": { + "en": "Tillsonburg Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Tlell Aquifer": { + "name": { + "en": "Tlell Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Tolman Member": { + "name": { + "en": "Tolman Member", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Topley Bedrock Aquifer": { + "name": { + "en": "Topley Bedrock Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Trail Townsite Overburden Aquifer": { + "name": { + "en": "Trail Townsite Overburden Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Trail/Warfield Bedrock Aquifer": { + "name": { + "en": "Trail/Warfield Bedrock Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Trinity Valley Aquifer": { + "name": { + "en": "Trinity Valley Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Tsawwassen Aquifer": { + "name": { + "en": "Tsawwassen Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Tsolum River, North of Courtney Aquifer": { + "name": { + "en": "Tsolum River, North of Courtney Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Tuhok Confined Aquifer": { + "name": { + "en": "Tuhok Confined Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Tuhok Unconfined Aquifer": { + "name": { + "en": "Tuhok Unconfined Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Turtle Mountain Formation": { + "name": { + "en": "Turtle Mountain Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Two Creeks Interstadial Deposits": { + "name": { + "en": "Two Creeks Interstadial Deposits", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Tyconnell Formation": { + "name": { + "en": "Tyconnell Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Ucluelet Peninsula Aquifer": { + "name": { + "en": "Ucluelet Peninsula Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Ucluelet, Lost Shoe Aquifer": { + "name": { + "en": "Ucluelet, Lost Shoe Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Ucluelet, Lost Show Aquifer": { + "name": { + "en": "Ucluelet, Lost Show Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Unicola Aquifer": { + "name": { + "en": "Unicola Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Unit A Exposed Bedrock and Drift-Poor Areas": { + "name": { + "en": "Unit A Exposed Bedrock and Drift-Poor Areas", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Unit B Till and Ribbed Moraine Deposits": { + "name": { + "en": "Unit B Till and Ribbed Moraine Deposits", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Unit C Ablation Drift Deposits": { + "name": { + "en": "Unit C Ablation Drift Deposits", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Unit D Glaciomarine and Marine Deposits and Glaciolacustrine Deposits": { + "name": { + "en": "Unit D Glaciomarine and Marine Deposits and Glaciolacustrine Deposits", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Unit E Glaciofluvial Deposits": { + "name": { + "en": "Unit E Glaciofluvial Deposits", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Upland Aquifer Complex": { + "name": { + "en": "Upland Aquifer Complex", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Upper and Lower Gloucester Aquifers": { + "name": { + "en": "Upper and Lower Gloucester Aquifers", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Upper and Lower Nepean-Kemptville Aquifers": { + "name": { + "en": "Upper and Lower Nepean-Kemptville Aquifers", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Upper and Lower West Nepean Aquifers": { + "name": { + "en": "Upper and Lower West Nepean Aquifers", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Upper Aquifer 1": { + "name": { + "en": "Upper Aquifer 1", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Upper Bearpaw Formation": { + "name": { + "en": "Upper Bearpaw Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Upper Brazeau Member": { + "name": { + "en": "Upper Brazeau Member", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Upper Bridge Creek Bedrock Aquifer": { + "name": { + "en": "Upper Bridge Creek Bedrock Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Upper Bridge Creek Valley Aquifer System": { + "name": { + "en": "Upper Bridge Creek Valley Aquifer System", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Upper Brougham Aquifer": { + "name": { + "en": "Upper Brougham Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Upper Bulkley Alluvial Aquifer": { + "name": { + "en": "Upper Bulkley Alluvial Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Upper Catfish Creek Till Aquitard": { + "name": { + "en": "Upper Catfish Creek Till Aquitard", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Upper Cherryville Aquifer": { + "name": { + "en": "Upper Cherryville Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Upper Chinguacousy Aquifer": { + "name": { + "en": "Upper Chinguacousy Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Upper Coalspur Member": { + "name": { + "en": "Upper Coalspur Member", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Upper Cretaceous sands Aquifer": { + "name": { + "en": "Upper Cretaceous sands Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Upper Erie Phase Aquifer": { + "name": { + "en": "Upper Erie Phase Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Upper Erie Phase Aquitard": { + "name": { + "en": "Upper Erie Phase Aquitard", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Upper Gates River Aquifer": { + "name": { + "en": "Upper Gates River Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Upper Halfway Bedrock Aquifer": { + "name": { + "en": "Upper Halfway Bedrock Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Upper Lac la Hache Valley Bedrock Aquifer": { + "name": { + "en": "Upper Lac la Hache Valley Bedrock Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Upper Lea Park Formation": { + "name": { + "en": "Upper Lea Park Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Upper Loon Formation": { + "name": { + "en": "Upper Loon Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Upper Lotsberg Formation": { + "name": { + "en": "Upper Lotsberg Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Upper Markham Aquifer": { + "name": { + "en": "Upper Markham Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Upper Maryhill Till": { + "name": { + "en": "Upper Maryhill Till", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Upper Merritt Aquifer": { + "name": { + "en": "Upper Merritt Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Upper Montney Formation": { + "name": { + "en": "Upper Montney Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Upper Ordovician strata": { + "name": { + "en": "Upper Ordovician strata", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Upper Scollard Member": { + "name": { + "en": "Upper Scollard Member", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Upper Shaftesbury Formation": { + "name": { + "en": "Upper Shaftesbury Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Upper Thames Aquifer": { + "name": { + "en": "Upper Thames Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Upper Thorncliffe Aquifer": { + "name": { + "en": "Upper Thorncliffe Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Upper Thorncliffe Aquitard": { + "name": { + "en": "Upper Thorncliffe Aquitard", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Upper Unionville Aquifer": { + "name": { + "en": "Upper Unionville Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Upper Victoria Aquifer": { + "name": { + "en": "Upper Victoria Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Upper Wapiti Member": { + "name": { + "en": "Upper Wapiti Member", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Upper Waterloo Moraine Aquifer": { + "name": { + "en": "Upper Waterloo Moraine Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Upper Willow Creek Member": { + "name": { + "en": "Upper Willow Creek Member", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Valens Outwash Aquifer": { + "name": { + "en": "Valens Outwash Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Valley View-Dawson Creek Bedrock Aquifer": { + "name": { + "en": "Valley View-Dawson Creek Bedrock Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Vanderhoof Alluvial Aquifer": { + "name": { + "en": "Vanderhoof Alluvial Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Vedder Crossing Aquifer": { + "name": { + "en": "Vedder Crossing Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Vedder Mountain NW Bedrock Aquifer": { + "name": { + "en": "Vedder Mountain NW Bedrock Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Vedder Mountain SE Bedrock Aquifer": { + "name": { + "en": "Vedder Mountain SE Bedrock Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Vellore Aquifer": { + "name": { + "en": "Vellore Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Verger Member": { + "name": { + "en": "Verger Member", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Vermillion River Formation": { + "name": { + "en": "Vermillion River Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Vernon Confined": { + "name": { + "en": "Vernon Confined", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Vernon Unconfined": { + "name": { + "en": "Vernon Unconfined", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Viking Formation": { + "name": { + "en": "Viking Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Viking/Newcastle Formation": { + "name": { + "en": "Viking/Newcastle Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Vimy Member": { + "name": { + "en": "Vimy Member", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Wabamun Group": { + "name": { + "en": "Wabamun Group", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Wabiskaw Member": { + "name": { + "en": "Wabiskaw Member", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Wainfleet Aquifer": { + "name": { + "en": "Wainfleet Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Walker Hook Aquifer": { + "name": { + "en": "Walker Hook Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Walkerton Aquifer": { + "name": { + "en": "Walkerton Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Wallaceburg Aquifer": { + "name": { + "en": "Wallaceburg Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Wallacetown Formation": { + "name": { + "en": "Wallacetown Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Wapiabi Formation": { + "name": { + "en": "Wapiabi Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Wapiti Formation": { + "name": { + "en": "Wapiti Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Wark-Colquitz Aquifer": { + "name": { + "en": "Wark-Colquitz Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Warman Formation": { + "name": { + "en": "Warman Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Waterloo Moraine Aquifer": { + "name": { + "en": "Waterloo Moraine Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Waterways Formation": { + "name": { + "en": "Waterways Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Watson Creek Valley Aquifer System": { + "name": { + "en": "Watson Creek Valley Aquifer System", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Watt Mountain Formation": { + "name": { + "en": "Watt Mountain Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Wentworth Aquifer": { + "name": { + "en": "Wentworth Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Wentworth Till/Aquitard": { + "name": { + "en": "Wentworth Till/Aquitard", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "West Arrow Creek Overburden Aquifer": { + "name": { + "en": "West Arrow Creek Overburden Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "West Carlton Aquifer": { + "name": { + "en": "West Carlton Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "West Cluculz Lake Bedrock Aquifer": { + "name": { + "en": "West Cluculz Lake Bedrock Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "West Creston Aquifer": { + "name": { + "en": "West Creston Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "West Langley Aquifer": { + "name": { + "en": "West Langley Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "West of Aldergrove Aquifer": { + "name": { + "en": "West of Aldergrove Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "West of Merritt Aquifer": { + "name": { + "en": "West of Merritt Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "West Saanich Road Aquifer": { + "name": { + "en": "West Saanich Road Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "West Sechelt Aquifer": { + "name": { + "en": "West Sechelt Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Westgate Formation": { + "name": { + "en": "Westgate Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Westwold Aquifer": { + "name": { + "en": "Westwold Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "White Rock Aquifer": { + "name": { + "en": "White Rock Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Whitecourt Mountain Formation": { + "name": { + "en": "Whitecourt Mountain Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Whitemud Formation": { + "name": { + "en": "Whitemud Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Whitemud Member": { + "name": { + "en": "Whitemud Member", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Whittlesey Aquifer": { + "name": { + "en": "Whittlesey Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Whittlesey Clay/Aquitard": { + "name": { + "en": "Whittlesey Clay/Aquitard", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Whittlesey Sand": { + "name": { + "en": "Whittlesey Sand", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Willow Creek Alluvial Aquifer": { + "name": { + "en": "Willow Creek Alluvial Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Willow Creek Formation": { + "name": { + "en": "Willow Creek Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Willow Creek Formation Aquifer": { + "name": { + "en": "Willow Creek Formation Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Windsor Group": { + "name": { + "en": "Windsor Group", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Winnipeg Formation": { + "name": { + "en": "Winnipeg Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Winnipegosis Formation": { + "name": { + "en": "Winnipegosis Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Winterburn Group": { + "name": { + "en": "Winterburn Group", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Wood Mountain and Mount Washington Aquifer": { + "name": { + "en": "Wood Mountain and Mount Washington Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Wood Mountain Formation": { + "name": { + "en": "Wood Mountain Formation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Woodbridge Aquifer": { + "name": { + "en": "Woodbridge Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Yonge Street Aquifer": { + "name": { + "en": "Yonge Street Aquifer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "York Till": { + "name": { + "en": "York Till", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Zama Member": { + "name": { + "en": "Zama Member", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + } + } +} \ No newline at end of file diff --git a/schemas/data/src/locales/AquiferUnitPorosityType.json b/schemas/data/src/locales/AquiferUnitPorosityType.json new file mode 100644 index 00000000..cd7a7f56 --- /dev/null +++ b/schemas/data/src/locales/AquiferUnitPorosityType.json @@ -0,0 +1,52 @@ +{ + "name": { + "en": "AquiferUnitPorosityType", + "fr": null + }, + "description": { + "en": null, + "fr": null + }, + "values": { + "Fractured": { + "name": { + "en": "Fractured", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Granular": { + "name": { + "en": "Granular", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Karstic": { + "name": { + "en": "Karstic", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Mixed": { + "name": { + "en": "Mixed", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + } + } +} \ No newline at end of file diff --git a/schemas/data/src/locales/CharacteristicName.json b/schemas/data/src/locales/CharacteristicName.json index f64e2146..f7632f04 100644 --- a/schemas/data/src/locales/CharacteristicName.json +++ b/schemas/data/src/locales/CharacteristicName.json @@ -4,8 +4,8 @@ "fr": null }, "description": { - "en": "Identifies what is being measured (Ex. Temperature, pH) in a field or lab result. The name used must have a match in the Allowed Values list.", - "fr": "Identifie ce qui est mesuré (p. Ex. température, pH) sur le terrain ou en laboratoire. Le nom utilisé doit avoir une correspondance dans la liste des valeurs autorisées -- voir onglet \"Allowed Values\"." + "en": "Identifies what is being measured (e.g. temperature, pH). The name used must have an exact match in the Allowed Values list.", + "fr": "Identifie ce qui est mesuré (par exemple température, pH). Le nom utilisé doit correspondre exactement à un nom dans la liste des Valeurs autorisées." }, "values": { "(Heptadecafluorooctyl)phosphonic acid": { @@ -98,6 +98,16 @@ "fr": null } }, + ".beta.-Sitosterol": { + "name": { + "en": ".beta.-Sitosterol", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, ".delta.-Hexachlorocyclohexane": { "name": { "en": ".delta.-Hexachlorocyclohexane", @@ -158,6 +168,16 @@ "fr": null } }, + "1-Decanesulfonic acid, 1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,10-heneicosafluoro-": { + "name": { + "en": "1-Decanesulfonic acid, 1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,10-heneicosafluoro-", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "1-Heptanesulfonic acid, 1,1,2,2,3,3,4,4,5,5,6,6,7,7,7-pentadecafluoro-": { "name": { "en": "1-Heptanesulfonic acid, 1,1,2,2,3,3,4,4,5,5,6,6,7,7,7-pentadecafluoro-", @@ -838,6 +858,16 @@ "fr": null } }, + "1,4-Dichloro-cis-2-butene": { + "name": { + "en": "1,4-Dichloro-cis-2-butene", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "1,4-Dichlorobenzene-d4": { "name": { "en": "1,4-Dichlorobenzene-d4", @@ -858,6 +888,16 @@ "fr": null } }, + "1,4-Dioxane": { + "name": { + "en": "1,4-Dioxane", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "1,4,6,7-Tetramethylnaphthalene": { "name": { "en": "1,4,6,7-Tetramethylnaphthalene", @@ -918,6 +958,16 @@ "fr": null } }, + "11-chloroeicosafluoro-3-oxaundecane-1-sulfonic acid": { + "name": { + "en": "11-chloroeicosafluoro-3-oxaundecane-1-sulfonic acid", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "12-Chlorodehydroabietic acid": { "name": { "en": "12-Chlorodehydroabietic acid", @@ -928,6 +978,16 @@ "fr": null } }, + "12,14-Dichlorodehydroabietic acid": { + "name": { + "en": "12,14-Dichlorodehydroabietic acid", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "14-Chlorodehydroabietic acid": { "name": { "en": "14-Chlorodehydroabietic acid", @@ -1608,6 +1668,16 @@ "fr": null } }, + "2,4,6-Trichloroanisole": { + "name": { + "en": "2,4,6-Trichloroanisole", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "2,4,6-Trichlorophenol": { "name": { "en": "2,4,6-Trichlorophenol", @@ -1788,6 +1858,16 @@ "fr": null } }, + "3-Pyridinecarboxamide, N-(2+A2:A19,4-difluorophenyl)-2-[3-(trifluoromethyl)phenoxy]-": { + "name": { + "en": "3-Pyridinecarboxamide, N-(2+A2:A19,4-difluorophenyl)-2-[3-(trifluoromethyl)phenoxy]-", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "3,3'-Dichlorobenzidine": { "name": { "en": "3,3'-Dichlorobenzidine", @@ -1808,6 +1888,16 @@ "fr": null } }, + "3,4-Dichlorocatechol": { + "name": { + "en": "3,4-Dichlorocatechol", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "3,4-Dichlorophenol": { "name": { "en": "3,4-Dichlorophenol", @@ -1818,6 +1908,26 @@ "fr": null } }, + "3,4,5-Trichlorocatechol": { + "name": { + "en": "3,4,5-Trichlorocatechol", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "3,4,5-Trichloroguaiacol": { + "name": { + "en": "3,4,5-Trichloroguaiacol", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "3,4,5-Trichlorophenol": { "name": { "en": "3,4,5-Trichlorophenol", @@ -1828,6 +1938,26 @@ "fr": null } }, + "3,4,6-Trichlorocatechol": { + "name": { + "en": "3,4,6-Trichlorocatechol", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "3,4,6-Trichloroguaiacol": { + "name": { + "en": "3,4,6-Trichloroguaiacol", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "3,5-Dichlorobenzoic acid": { "name": { "en": "3,5-Dichlorobenzoic acid", @@ -1838,6 +1968,16 @@ "fr": null } }, + "3,5-Dichlorocatechol": { + "name": { + "en": "3,5-Dichlorocatechol", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "3,5-Dichlorophenol": { "name": { "en": "3,5-Dichlorophenol", @@ -1878,6 +2018,26 @@ "fr": null } }, + "4-Chloro-3-nitrobenzotrifluoride": { + "name": { + "en": "4-Chloro-3-nitrobenzotrifluoride", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "4-Chlorocatechol": { + "name": { + "en": "4-Chlorocatechol", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "4-Hydroxy-chlorothalonil": { "name": { "en": "4-Hydroxy-chlorothalonil", @@ -1968,6 +2128,46 @@ "fr": null } }, + "4,5-Dichlorocatechol": { + "name": { + "en": "4,5-Dichlorocatechol", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "4,5-Dichloroveratrole": { + "name": { + "en": "4,5-Dichloroveratrole", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "4,5,6-Trichloroguaiacol": { + "name": { + "en": "4,5,6-Trichloroguaiacol", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "4,6-Dichloroguaiacol": { + "name": { + "en": "4,6-Dichloroguaiacol", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "4,6-Dimethyldibenzothiophene": { "name": { "en": "4,6-Dimethyldibenzothiophene", @@ -2068,6 +2268,16 @@ "fr": null } }, + "9-Chlorohexadecafluoro-3-oxanonane-1-sulfonate": { + "name": { + "en": "9-Chlorohexadecafluoro-3-oxanonane-1-sulfonate", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "9-Methylphenanthrene/4-Methylphenanthrene": { "name": { "en": "9-Methylphenanthrene/4-Methylphenanthrene", @@ -2248,6 +2458,16 @@ "fr": null } }, + "Acetamide, 2-(diethylamino)-N-(2,6-dimethylphenyl)-": { + "name": { + "en": "Acetamide, 2-(diethylamino)-N-(2,6-dimethylphenyl)-", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "Acetaminophen": { "name": { "en": "Acetaminophen", @@ -2338,6 +2558,36 @@ "fr": null } }, + "Acrolein": { + "name": { + "en": "Acrolein", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Acrylonitrile": { + "name": { + "en": "Acrylonitrile", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Adamantane Carboxylic Acid-D15": { + "name": { + "en": "Adamantane Carboxylic Acid-D15", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "Adenosine triphosphate": { "name": { "en": "Adenosine triphosphate", @@ -2468,6 +2718,16 @@ "fr": null } }, + "Allidochlor": { + "name": { + "en": "Allidochlor", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "Allyl chloride": { "name": { "en": "Allyl chloride", @@ -2598,6 +2858,16 @@ "fr": null } }, + "Anatoxin-A": { + "name": { + "en": "Anatoxin-A", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "Anilazine": { "name": { "en": "Anilazine", @@ -2668,6 +2938,16 @@ "fr": null } }, + "ar,ar'-Dimethylbiphenyl": { + "name": { + "en": "ar,ar'-Dimethylbiphenyl", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "Aroclor 1016": { "name": { "en": "Aroclor 1016", @@ -2868,6 +3148,16 @@ "fr": null } }, + "Atrazine + all metabolites": { + "name": { + "en": "Atrazine + all metabolites", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "Atrazine + N-Dealkylated Metabolites": { "name": { "en": "Atrazine + N-Dealkylated Metabolites", @@ -2908,6 +3198,16 @@ "fr": null } }, + "Bacteria, Sulfate reducing": { + "name": { + "en": "Bacteria, Sulfate reducing", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "Bankfull Height": { "name": { "en": "Bankfull Height", @@ -3228,6 +3528,16 @@ "fr": null } }, + "Benalaxyl": { + "name": { + "en": "Benalaxyl", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "Bendiocarb": { "name": { "en": "Bendiocarb", @@ -3318,6 +3628,16 @@ "fr": null } }, + "Benzene, 1,2,3-trichloro-4,5-dimethoxy-": { + "name": { + "en": "Benzene, 1,2,3-trichloro-4,5-dimethoxy-", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "Benzeneacetic acid, .alpha.-methyl-4-(2-methylpropyl)-": { "name": { "en": "Benzeneacetic acid, .alpha.-methyl-4-(2-methylpropyl)-", @@ -3548,6 +3868,16 @@ "fr": null } }, + "Benzoylprop-ethyl": { + "name": { + "en": "Benzoylprop-ethyl", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "Beryllium": { "name": { "en": "Beryllium", @@ -3898,6 +4228,16 @@ "fr": null } }, + "BTEX plus styrene, Total": { + "name": { + "en": "BTEX plus styrene, Total", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "BTEX, Total": { "name": { "en": "BTEX, Total", @@ -3908,6 +4248,16 @@ "fr": null } }, + "Bupirimate": { + "name": { + "en": "Bupirimate", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "Butachlor": { "name": { "en": "Butachlor", @@ -4068,6 +4418,16 @@ "fr": null } }, + "C10-C50 Hydrocarbons": { + "name": { + "en": "C10-C50 Hydrocarbons", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "C16-C21 Hydrocarbons": { "name": { "en": "C16-C21 Hydrocarbons", @@ -4088,6 +4448,16 @@ "fr": null } }, + "C16-C50 Hydrocarbons": { + "name": { + "en": "C16-C50 Hydrocarbons", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "C2-Benzo[a]anthracenes/chrysenes": { "name": { "en": "C2-Benzo[a]anthracenes/chrysenes", @@ -4468,6 +4838,16 @@ "fr": null } }, + "Carbazole": { + "name": { + "en": "Carbazole", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "Carbofuran": { "name": { "en": "Carbofuran", @@ -4518,6 +4898,16 @@ "fr": null } }, + "Carbon disulfide": { + "name": { + "en": "Carbon disulfide", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "Carbon monoxide": { "name": { "en": "Carbon monoxide", @@ -5098,6 +5488,16 @@ "fr": null } }, + "Chlorthiamid": { + "name": { + "en": "Chlorthiamid", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "Chlorthiophos": { "name": { "en": "Chlorthiophos", @@ -5498,6 +5898,16 @@ "fr": null } }, + "Coprostanol": { + "name": { + "en": "Coprostanol", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "Corrosion & scaling control, Ryznar Stability Index": { "name": { "en": "Corrosion & scaling control, Ryznar Stability Index", @@ -5518,6 +5928,16 @@ "fr": null } }, + "Cresol": { + "name": { + "en": "Cresol", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "Crufomate": { "name": { "en": "Crufomate", @@ -5668,6 +6088,16 @@ "fr": null } }, + "Cyprazine": { + "name": { + "en": "Cyprazine", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "Cyprodinil": { "name": { "en": "Cyprodinil", @@ -5758,6 +6188,26 @@ "fr": null } }, + "Decanoic acid": { + "name": { + "en": "Decanoic acid", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Decanoic Acid-D19": { + "name": { + "en": "Decanoic Acid-D19", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "Decanoic acid, 3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,10-heptadecafluoro-": { "name": { "en": "Decanoic acid, 3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,10-heptadecafluoro-", @@ -5788,6 +6238,16 @@ "fr": null } }, + "Dehydronifedipine": { + "name": { + "en": "Dehydronifedipine", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "Delta boron-11/boron-10": { "name": { "en": "Delta boron-11/boron-10", @@ -6298,6 +6758,16 @@ "fr": null } }, + "Diclofop": { + "name": { + "en": "Diclofop", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "Diclofop methyl": { "name": { "en": "Diclofop methyl", @@ -6498,6 +6968,16 @@ "fr": null } }, + "Dimethylnaphthalene": { + "name": { + "en": "Dimethylnaphthalene", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "Dinitramine": { "name": { "en": "Dinitramine", @@ -6648,6 +7128,16 @@ "fr": null } }, + "Dysprosium": { + "name": { + "en": "Dysprosium", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "Eicosanoic acid": { "name": { "en": "Eicosanoic acid", @@ -6748,6 +7238,16 @@ "fr": null } }, + "Erbium": { + "name": { + "en": "Erbium", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "Erythromycin": { "name": { "en": "Erythromycin", @@ -6808,6 +7308,16 @@ "fr": null } }, + "Ethanamine, 2-(diphenylmethoxy)-N,N-dimethyl-": { + "name": { + "en": "Ethanamine, 2-(diphenylmethoxy)-N,N-dimethyl-", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "Ethanol": { "name": { "en": "Ethanol", @@ -6868,6 +7378,16 @@ "fr": null } }, + "Ethyl methacrylate": { + "name": { + "en": "Ethyl methacrylate", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "Ethylbenzene": { "name": { "en": "Ethylbenzene", @@ -7038,6 +7558,16 @@ "fr": null } }, + "Fenoxaprop": { + "name": { + "en": "Fenoxaprop", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "Fenoxaprop-ethyl": { "name": { "en": "Fenoxaprop-ethyl", @@ -7108,9 +7638,29 @@ "fr": null } }, - "Filamentous Algae Cover": { + "Filamentous Algae Cover": { + "name": { + "en": "Filamentous Algae Cover", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Fixed dissolved solids": { + "name": { + "en": "Fixed dissolved solids", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Fixed suspended solids": { "name": { - "en": "Filamentous Algae Cover", + "en": "Fixed suspended solids", "fr": null }, "description": { @@ -7118,9 +7668,9 @@ "fr": null } }, - "Fixed dissolved solids": { + "Flamprop-isopropyl": { "name": { - "en": "Fixed dissolved solids", + "en": "Flamprop-isopropyl", "fr": null }, "description": { @@ -7128,9 +7678,9 @@ "fr": null } }, - "Fixed suspended solids": { + "Flamprop-methyl": { "name": { - "en": "Fixed suspended solids", + "en": "Flamprop-methyl", "fr": null }, "description": { @@ -7538,6 +8088,16 @@ "fr": null } }, + "Gross alpha radioactivity (ref std unspecified)": { + "name": { + "en": "Gross alpha radioactivity (ref std unspecified)", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "Gross alpha radioactivity, (Americium-241 ref std)": { "name": { "en": "Gross alpha radioactivity, (Americium-241 ref std)", @@ -7678,6 +8238,16 @@ "fr": null } }, + "Heptadecanoic acid": { + "name": { + "en": "Heptadecanoic acid", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "Heptafluorobutyric acid": { "name": { "en": "Heptafluorobutyric acid", @@ -7698,6 +8268,16 @@ "fr": null } }, + "Heptenophos": { + "name": { + "en": "Heptenophos", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "Heterotrophic bacteria": { "name": { "en": "Heterotrophic bacteria", @@ -7788,6 +8368,16 @@ "fr": null } }, + "Hexadecanoic Acid-D31": { + "name": { + "en": "Hexadecanoic Acid-D31", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "Hexadecanoic acid, 2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,16,16,16-hentriacontafluoro-": { "name": { "en": "Hexadecanoic acid, 2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,16,16,16-hentriacontafluoro-", @@ -8308,6 +8898,16 @@ "fr": null } }, + "Iron-related bacteria": { + "name": { + "en": "Iron-related bacteria", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "Isobutanol": { "name": { "en": "Isobutanol", @@ -8498,6 +9098,16 @@ "fr": null } }, + "Light, Photosynthetic Photon Flux Density (PPFD)": { + "name": { + "en": "Light, Photosynthetic Photon Flux Density (PPFD)", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "Light, underwater extinction coefficient (K)": { "name": { "en": "Light, underwater extinction coefficient (K)", @@ -8548,6 +9158,16 @@ "fr": null } }, + "Linolenic acid": { + "name": { + "en": "Linolenic acid", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "Linuron": { "name": { "en": "Linuron", @@ -8588,6 +9208,16 @@ "fr": null } }, + "Lithocholic Acid-D4": { + "name": { + "en": "Lithocholic Acid-D4", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "Lutetium": { "name": { "en": "Lutetium", @@ -8858,6 +9488,16 @@ "fr": null } }, + "Methacrylonitrile": { + "name": { + "en": "Methacrylonitrile", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "Methamidophos": { "name": { "en": "Methamidophos", @@ -8998,6 +9638,26 @@ "fr": null } }, + "Methyl ethyl ketone": { + "name": { + "en": "Methyl ethyl ketone", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Methyl iodide": { + "name": { + "en": "Methyl iodide", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "Methyl isobutyl ketone": { "name": { "en": "Methyl isobutyl ketone", @@ -9018,6 +9678,16 @@ "fr": null } }, + "Methyl methacrylate": { + "name": { + "en": "Methyl methacrylate", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "Methyl parathion": { "name": { "en": "Methyl parathion", @@ -9058,6 +9728,16 @@ "fr": null } }, + "Methylanthracene": { + "name": { + "en": "Methylanthracene", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "Methylarsonic acid": { "name": { "en": "Methylarsonic acid", @@ -9068,6 +9748,16 @@ "fr": null } }, + "Methylbiphenyl": { + "name": { + "en": "Methylbiphenyl", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "Methylchrysene": { "name": { "en": "Methylchrysene", @@ -9078,6 +9768,16 @@ "fr": null } }, + "Methylcyclohexane": { + "name": { + "en": "Methylcyclohexane", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "Methyldibenzothiophene": { "name": { "en": "Methyldibenzothiophene", @@ -11128,6 +11828,16 @@ "fr": null } }, + "Nitrobenzene-D5": { + "name": { + "en": "Nitrobenzene-D5", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "Nitrofen": { "name": { "en": "Nitrofen", @@ -11298,6 +12008,16 @@ "fr": null } }, + "O-Methylpodocarpic Acid": { + "name": { + "en": "O-Methylpodocarpic Acid", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "o-Nitrophenol": { "name": { "en": "o-Nitrophenol", @@ -11628,6 +12348,16 @@ "fr": null } }, + "Oxygen-17": { + "name": { + "en": "Oxygen-17", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "Oxygen-18": { "name": { "en": "Oxygen-18", @@ -12118,6 +12848,16 @@ "fr": null } }, + "Perfluoro-2-propoxypropanoate": { + "name": { + "en": "Perfluoro-2-propoxypropanoate", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "Perfluoro-3-methoxypropanoic acid": { "name": { "en": "Perfluoro-3-methoxypropanoic acid", @@ -12168,6 +12908,16 @@ "fr": null } }, + "Perfluorodecanesulfonate": { + "name": { + "en": "Perfluorodecanesulfonate", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "Perfluorodecanoic acid": { "name": { "en": "Perfluorodecanoic acid", @@ -12198,6 +12948,16 @@ "fr": null } }, + "Perfluoroheptanesulfonate": { + "name": { + "en": "Perfluoroheptanesulfonate", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "Perfluoroheptanoic acid": { "name": { "en": "Perfluoroheptanoic acid", @@ -12338,6 +13098,16 @@ "fr": null } }, + "Perfluorooctanesulfonate": { + "name": { + "en": "Perfluorooctanesulfonate", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "Perfluorooctanoic acid": { "name": { "en": "Perfluorooctanoic acid", @@ -12538,6 +13308,26 @@ "fr": null } }, + "Phenol, 4-chloro-2-methoxy-": { + "name": { + "en": "Phenol, 4-chloro-2-methoxy-", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Phenol, 4,5-dichloro-2-methoxy-": { + "name": { + "en": "Phenol, 4,5-dichloro-2-methoxy-", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "Phenol, dibromo-": { "name": { "en": "Phenol, dibromo-", @@ -13158,6 +13948,16 @@ "fr": null } }, + "Pyrene-d10 ": { + "name": { + "en": "Pyrene-d10 ", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "Pyrethrin I": { "name": { "en": "Pyrethrin I", @@ -14668,6 +15468,16 @@ "fr": null } }, + "Tetrasul": { + "name": { + "en": "Tetrasul", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "Thallium": { "name": { "en": "Thallium", @@ -14938,6 +15748,16 @@ "fr": null } }, + "Total Hexachlorocyclohexane, sum of isomers": { + "name": { + "en": "Total Hexachlorocyclohexane, sum of isomers", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "Total Nitrogen, mixed forms": { "name": { "en": "Total Nitrogen, mixed forms", @@ -15108,6 +15928,16 @@ "fr": null } }, + "trans-1,4-Dichloro-2-butene": { + "name": { + "en": "trans-1,4-Dichloro-2-butene", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "trans-Chlordane": { "name": { "en": "trans-Chlordane", @@ -15658,6 +16488,26 @@ "fr": null } }, + "Water level elevation": { + "name": { + "en": "Water level elevation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Water level in well, depth from a reference point": { + "name": { + "en": "Water level in well, depth from a reference point", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "Weak, dissociable cyanide": { "name": { "en": "Weak, dissociable cyanide", @@ -15777,6 +16627,16 @@ "en": null, "fr": null } + }, + "Pyrene-d10": { + "name": { + "en": "Pyrene-d10", + "fr": null + }, + "description": { + "en": null, + "fr": null + } } } } \ No newline at end of file diff --git a/schemas/data/src/locales/LithologyType.json b/schemas/data/src/locales/LithologyType.json new file mode 100644 index 00000000..ecef62ed --- /dev/null +++ b/schemas/data/src/locales/LithologyType.json @@ -0,0 +1,722 @@ +{ + "name": { + "en": "LithologyType", + "fr": null + }, + "description": { + "en": null, + "fr": null + }, + "values": { + "Andesite": { + "name": { + "en": "Andesite", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Anthropogenic material": { + "name": { + "en": "Anthropogenic material", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Basalt": { + "name": { + "en": "Basalt", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Bedrock": { + "name": { + "en": "Bedrock", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Bedrock, Fractured": { + "name": { + "en": "Bedrock, Fractured", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Bedrock, Interbedded sandstone/carbonate": { + "name": { + "en": "Bedrock, Interbedded sandstone/carbonate", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Bedrock, Interbedded sandstone/shale": { + "name": { + "en": "Bedrock, Interbedded sandstone/shale", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Bedrock, Interbedded sandstone/shale/carbonate": { + "name": { + "en": "Bedrock, Interbedded sandstone/shale/carbonate", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Bedrock, Interbedded sediments": { + "name": { + "en": "Bedrock, Interbedded sediments", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Bedrock, Interbedded siltstone/carbonate/gypsum": { + "name": { + "en": "Bedrock, Interbedded siltstone/carbonate/gypsum", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Bedrock, Soluble Carbonate - Karst": { + "name": { + "en": "Bedrock, Soluble Carbonate - Karst", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Bedrock, Soluble gypsum/dolomite with shale interb": { + "name": { + "en": "Bedrock, Soluble gypsum/dolomite with shale interb", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Carbonate sedimentary rock": { + "name": { + "en": "Carbonate sedimentary rock", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Clay": { + "name": { + "en": "Clay", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Clayey Sand": { + "name": { + "en": "Clayey Sand", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Clayey Silt": { + "name": { + "en": "Clayey Silt", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Coal": { + "name": { + "en": "Coal", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Conglomerate": { + "name": { + "en": "Conglomerate", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Diamicton": { + "name": { + "en": "Diamicton", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Diorite": { + "name": { + "en": "Diorite", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Dolomite": { + "name": { + "en": "Dolomite", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Evaporite": { + "name": { + "en": "Evaporite", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Gabbro": { + "name": { + "en": "Gabbro", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Gneiss": { + "name": { + "en": "Gneiss", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Granite": { + "name": { + "en": "Granite", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Gravel": { + "name": { + "en": "Gravel", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Gravelly Mud": { + "name": { + "en": "Gravelly Mud", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Gravelly Muddy Sand": { + "name": { + "en": "Gravelly Muddy Sand", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Gravelly Sand": { + "name": { + "en": "Gravelly Sand", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Gravely Sediment": { + "name": { + "en": "Gravely Sediment", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Humus": { + "name": { + "en": "Humus", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Igneous rock": { + "name": { + "en": "Igneous rock", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Interbedded gravel and clay": { + "name": { + "en": "Interbedded gravel and clay", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Interbedded gravel and sand": { + "name": { + "en": "Interbedded gravel and sand", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Interbedded gravel and silt": { + "name": { + "en": "Interbedded gravel and silt", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Interbedded sand and clay": { + "name": { + "en": "Interbedded sand and clay", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Interbedded sand and silt": { + "name": { + "en": "Interbedded sand and silt", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Interbedded silt and clay": { + "name": { + "en": "Interbedded silt and clay", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Limestone": { + "name": { + "en": "Limestone", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Marble": { + "name": { + "en": "Marble", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Metamorphic rock": { + "name": { + "en": "Metamorphic rock", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Mud": { + "name": { + "en": "Mud", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Muddy Gravel": { + "name": { + "en": "Muddy Gravel", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Muddy Sand": { + "name": { + "en": "Muddy Sand", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Muddy Sandy Gravel": { + "name": { + "en": "Muddy Sandy Gravel", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Organic material": { + "name": { + "en": "Organic material", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Peat": { + "name": { + "en": "Peat", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Plutonic rock": { + "name": { + "en": "Plutonic rock", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Quartzite": { + "name": { + "en": "Quartzite", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Rhyolite": { + "name": { + "en": "Rhyolite", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Sand": { + "name": { + "en": "Sand", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Sand, Silt, Clay": { + "name": { + "en": "Sand, Silt, Clay", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Sandstone": { + "name": { + "en": "Sandstone", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Sandy Clay": { + "name": { + "en": "Sandy Clay", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Sandy Gravel": { + "name": { + "en": "Sandy Gravel", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Sandy Mud": { + "name": { + "en": "Sandy Mud", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Sandy Silt": { + "name": { + "en": "Sandy Silt", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Schist": { + "name": { + "en": "Schist", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Sedimentary rock": { + "name": { + "en": "Sedimentary rock", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Shale": { + "name": { + "en": "Shale", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Silt": { + "name": { + "en": "Silt", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Siltite": { + "name": { + "en": "Siltite", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Silty Clay": { + "name": { + "en": "Silty Clay", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Silty Sand": { + "name": { + "en": "Silty Sand", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Slate": { + "name": { + "en": "Slate", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Soil": { + "name": { + "en": "Soil", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Till": { + "name": { + "en": "Till", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Unconsolidated material": { + "name": { + "en": "Unconsolidated material", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Undifferentiated sediment": { + "name": { + "en": "Undifferentiated sediment", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Unknown material": { + "name": { + "en": "Unknown material", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Volcanic rock": { + "name": { + "en": "Volcanic rock", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + } + } +} \ No newline at end of file diff --git a/schemas/data/src/locales/MonitoringLocationHorizontalCoordinateReferenceSystem.json b/schemas/data/src/locales/MonitoringLocationHorizontalCoordinateReferenceSystem.json index 17c8bbe5..dc032736 100644 --- a/schemas/data/src/locales/MonitoringLocationHorizontalCoordinateReferenceSystem.json +++ b/schemas/data/src/locales/MonitoringLocationHorizontalCoordinateReferenceSystem.json @@ -1,193 +1,11 @@ { - "MonitoringLocationHorizontalCoordinateReferenceSystem": { - "name": { - "en": "Monitoring Location Horizontal Coordinate Reference System", - "fr": null - }, - "description": { - "en": "The horizontal datum of the MonitoringLocationLatitude and MonitoringLocationLongitude coordinates (e.g. NAD83, WGS84).", - "fr": "Le système de référence horizontale des coordonnées MonitoringLocationLatitude et MonitoringLocationLongitude (par exemple NAD83, WGS84)." - }, - "values": { - "AMSMA": { - "name": { - "en": "AMSMA", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "ASTRO": { - "name": { - "en": "ASTRO", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "GUAM": { - "name": { - "en": "GUAM", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "HARN": { - "name": { - "en": "HARN", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "JHNSN": { - "name": { - "en": "JHNSN", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "NAD27": { - "name": { - "en": "NAD27", - "fr": null - }, - "description": { - "en": "North American Datum 1927", - "fr": "Système de référence nord-américain de 1927" - } - }, - "NAD83": { - "name": { - "en": "NAD83", - "fr": null - }, - "description": { - "en": "North American Datum 1983", - "fr": "Système de référence nord-américain de 1983" - } - }, - "OLDHI": { - "name": { - "en": "OLDHI", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "OTHER": { - "name": { - "en": "OTHER", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "PR": { - "name": { - "en": "PR", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "SGEOR": { - "name": { - "en": "SGEOR", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "SLAWR": { - "name": { - "en": "SLAWR", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "SPAUL": { - "name": { - "en": "SPAUL", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "UNKWN": { - "name": { - "en": "UNKWN", - "fr": null - }, - "description": { - "en": "Unknown", - "fr": "Incertain" - } - }, - "WAKE": { - "name": { - "en": "WAKE", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "WGS72": { - "name": { - "en": "WGS72", - "fr": null - }, - "description": { - "en": "World Geodetic System 1972", - "fr": "Système géodésique mondial de 1972" - } - }, - "WGS84": { - "name": { - "en": "WGS84", - "fr": null - }, - "description": { - "en": "World Geodetic System 1984", - "fr": "Système géodésique mondial de 1984" - } - } - } - }, "name": { - "en": "MonitoringLocationHorizontalCoordinateReferenceSystem", + "en": "Monitoring Location Horizontal Coordinate Reference System", "fr": null }, "description": { - "en": null, - "fr": null + "en": "The horizontal datum of the MonitoringLocationLatitude and MonitoringLocationLongitude coordinates (e.g. NAD83, WGS84).", + "fr": "Le système de référence horizontale des coordonnées MonitoringLocationLatitude et MonitoringLocationLongitude (par exemple NAD83, WGS84)." }, "values": { "NAD27": { @@ -196,8 +14,8 @@ "fr": null }, "description": { - "en": null, - "fr": null + "en": "North American Datum 1927", + "fr": "Système de référence nord-américain de 1927" } }, "NAD83": { @@ -205,6 +23,16 @@ "en": "NAD83", "fr": null }, + "description": { + "en": "North American Datum 1983", + "fr": "Système de référence nord-américain de 1983" + } + }, + "OTHER": { + "name": { + "en": "OTHER", + "fr": null + }, "description": { "en": null, "fr": null @@ -216,8 +44,8 @@ "fr": null }, "description": { - "en": null, - "fr": null + "en": "Unknown", + "fr": "Incertain" } }, "WGS72": { @@ -226,8 +54,8 @@ "fr": null }, "description": { - "en": null, - "fr": null + "en": "World Geodetic System 1972", + "fr": "Système géodésique mondial de 1972" } }, "WGS84": { @@ -236,8 +64,8 @@ "fr": null }, "description": { - "en": null, - "fr": null + "en": "World Geodetic System 1984", + "fr": "Système géodésique mondial de 1984" } } } diff --git a/schemas/data/src/locales/MonitoringLocationType.json b/schemas/data/src/locales/MonitoringLocationType.json index c7564e53..d0f52462 100644 --- a/schemas/data/src/locales/MonitoringLocationType.json +++ b/schemas/data/src/locales/MonitoringLocationType.json @@ -1,178 +1,26 @@ { - "MonitoringLocationType": { - "name": { - "en": "Monitoring Location Type", - "fr": null - }, - "description": { - "en": "Type of monitoring location. Must be entered exactly as specified in Allowed Values. (e.g. \"River/Stream\").", - "fr": "Type de lieu de surveillance. Doit être saisi en anglais, exactement comme spécifié dans Valeurs autorisées, dans l'onglet Allowed Values. (par exemple « River/Stream » pour rivière/ruisseau)." - }, - "values": { - "Atmosphere": { - "name": { - "en": "Atmosphere", - "fr": "Atmosphère" - }, - "description": { - "en": null, - "fr": null - } - }, - "Canal Drainage": { - "name": { - "en": "Canal Drainage", - "fr": "Drainage de canal" - }, - "description": { - "en": null, - "fr": null - } - }, - "Canal Irrigation": { - "name": { - "en": "Canal Irrigation", - "fr": "Irrigation de canal" - }, - "description": { - "en": null, - "fr": null - } - }, - "Canal Transport": { - "name": { - "en": "Canal Transport", - "fr": "Transport par canal" - }, - "description": { - "en": null, - "fr": null - } - }, - "Estuary": { - "name": { - "en": "Estuary", - "fr": "Estuaire" - }, - "description": { - "en": null, - "fr": null - } - }, - "Great Lake": { - "name": { - "en": "Great Lake", - "fr": "Grand Lac" - }, - "description": { - "en": null, - "fr": null - } - }, - "Lake/Pond": { - "name": { - "en": "Lake/Pond", - "fr": "Lac/Étang" - }, - "description": { - "en": null, - "fr": null - } - }, - "Ocean": { - "name": { - "en": "Ocean", - "fr": "Océan" - }, - "description": { - "en": null, - "fr": null - } - }, - "Pond-Stormwater": { - "name": { - "en": "Pond-Stormwater", - "fr": "Étang - Eaux de ruissellement" - }, - "description": { - "en": null, - "fr": null - } - }, - "Reservoir": { - "name": { - "en": "Reservoir", - "fr": "Réservoir" - }, - "description": { - "en": null, - "fr": null - } - }, - "River/Stream": { - "name": { - "en": "River/Stream", - "fr": "Rivière/Ruisseau" - }, - "description": { - "en": null, - "fr": null - } - }, - "Spring": { - "name": { - "en": "Spring", - "fr": "Source" - }, - "description": { - "en": null, - "fr": null - } - }, - "Storm Sewer": { - "name": { - "en": "Storm Sewer", - "fr": "Égout pluvial" - }, - "description": { - "en": null, - "fr": null - } - }, - "Unspecified": { - "name": { - "en": "Unspecified", - "fr": "Non spécifié" - }, - "description": { - "en": null, - "fr": null - } - }, - "Wetland": { - "name": { - "en": "Wetland", - "fr": "Zone humide" - }, - "description": { - "en": null, - "fr": null - } - } - } - }, "name": { - "en": "MonitoringLocationType", + "en": "Monitoring Location Type", "fr": null }, "description": { - "en": null, - "fr": null + "en": "Type of monitoring location. Must be entered exactly as specified in Allowed Values. (e.g. \"River/Stream\").", + "fr": "Type de lieu de surveillance. Doit être saisi en anglais, exactement comme spécifié dans Valeurs autorisées, dans l'onglet Allowed Values. (par exemple « River/Stream » pour rivière/ruisseau)." }, "values": { "Atmosphere": { "name": { "en": "Atmosphere", + "fr": "Atmosphère" + }, + "description": { + "en": null, + "fr": null + } + }, + "Borehole": { + "name": { + "en": "Borehole", "fr": null }, "description": { @@ -183,7 +31,7 @@ "Canal Drainage": { "name": { "en": "Canal Drainage", - "fr": null + "fr": "Drainage de canal" }, "description": { "en": null, @@ -193,7 +41,7 @@ "Canal Irrigation": { "name": { "en": "Canal Irrigation", - "fr": null + "fr": "Irrigation de canal" }, "description": { "en": null, @@ -203,6 +51,16 @@ "Canal Transport": { "name": { "en": "Canal Transport", + "fr": "Transport par canal" + }, + "description": { + "en": null, + "fr": null + } + }, + "Dug Well": { + "name": { + "en": "Dug Well", "fr": null }, "description": { @@ -213,7 +71,7 @@ "Estuary": { "name": { "en": "Estuary", - "fr": null + "fr": "Estuaire" }, "description": { "en": null, @@ -223,7 +81,7 @@ "Great Lake": { "name": { "en": "Great Lake", - "fr": null + "fr": "Grand Lac" }, "description": { "en": null, @@ -233,6 +91,26 @@ "Lake/Pond": { "name": { "en": "Lake/Pond", + "fr": "Lac/Étang" + }, + "description": { + "en": null, + "fr": null + } + }, + "Multilevel Well": { + "name": { + "en": "Multilevel Well", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Nested Well": { + "name": { + "en": "Nested Well", "fr": null }, "description": { @@ -243,6 +121,26 @@ "Ocean": { "name": { "en": "Ocean", + "fr": "Océan" + }, + "description": { + "en": null, + "fr": null + } + }, + "Other-Ground Water": { + "name": { + "en": "Other-Ground Water", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Piezometer": { + "name": { + "en": "Piezometer", "fr": null }, "description": { @@ -253,7 +151,7 @@ "Pond-Stormwater": { "name": { "en": "Pond-Stormwater", - "fr": null + "fr": "Étang - Eaux de ruissellement" }, "description": { "en": null, @@ -263,7 +161,7 @@ "Reservoir": { "name": { "en": "Reservoir", - "fr": null + "fr": "Réservoir" }, "description": { "en": null, @@ -273,6 +171,16 @@ "River/Stream": { "name": { "en": "River/Stream", + "fr": "Rivière/Ruisseau" + }, + "description": { + "en": null, + "fr": null + } + }, + "Seep": { + "name": { + "en": "Seep", "fr": null }, "description": { @@ -283,7 +191,7 @@ "Spring": { "name": { "en": "Spring", - "fr": null + "fr": "Source" }, "description": { "en": null, @@ -293,6 +201,16 @@ "Storm Sewer": { "name": { "en": "Storm Sewer", + "fr": "Égout pluvial" + }, + "description": { + "en": null, + "fr": null + } + }, + "Sump": { + "name": { + "en": "Sump", "fr": null }, "description": { @@ -303,6 +221,16 @@ "Unspecified": { "name": { "en": "Unspecified", + "fr": "Non spécifié" + }, + "description": { + "en": null, + "fr": null + } + }, + "Well": { + "name": { + "en": "Well", "fr": null }, "description": { @@ -313,7 +241,7 @@ "Wetland": { "name": { "en": "Wetland", - "fr": null + "fr": "Zone humide" }, "description": { "en": null, diff --git a/schemas/data/src/locales/MonitoringLocationVerticalCollectionMethod.json b/schemas/data/src/locales/MonitoringLocationVerticalCollectionMethod.json new file mode 100644 index 00000000..f07c0ac4 --- /dev/null +++ b/schemas/data/src/locales/MonitoringLocationVerticalCollectionMethod.json @@ -0,0 +1,192 @@ +{ + "name": { + "en": "MonitoringLocationVerticalCollectionMethod", + "fr": null + }, + "description": { + "en": null, + "fr": null + }, + "values": { + "Altimetry": { + "name": { + "en": "Altimetry", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Classical Surveying Techniques": { + "name": { + "en": "Classical Surveying Techniques", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Digital Elevation Model": { + "name": { + "en": "Digital Elevation Model", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "GPS Carrier Phase Kinematic Relative Position": { + "name": { + "en": "GPS Carrier Phase Kinematic Relative Position", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "GPS Carrier Phase Static Relative Position": { + "name": { + "en": "GPS Carrier Phase Static Relative Position", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "GPS Code (Pseudo Range) Differential": { + "name": { + "en": "GPS Code (Pseudo Range) Differential", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "GPS Code (Pseudo Range) Precise Position": { + "name": { + "en": "GPS Code (Pseudo Range) Precise Position", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "GPS Code (Pseudo Range) Standard Position (SA Off)": { + "name": { + "en": "GPS Code (Pseudo Range) Standard Position (SA Off)", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "GPS Code (Pseudo Range) Standard Position (SA On)": { + "name": { + "en": "GPS Code (Pseudo Range) Standard Position (SA On)", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Handheld GPS - Positioning Method Unspecified": { + "name": { + "en": "Handheld GPS - Positioning Method Unspecified", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Leveling-Non Bench Mark Control Points": { + "name": { + "en": "Leveling-Non Bench Mark Control Points", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Light Detection And Ranging (LiDAR)": { + "name": { + "en": "Light Detection And Ranging (LiDAR)", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Other": { + "name": { + "en": "Other", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Photogrammetric": { + "name": { + "en": "Photogrammetric", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Precise Leveling-Bench Mark": { + "name": { + "en": "Precise Leveling-Bench Mark", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Topographic Map Interpolation": { + "name": { + "en": "Topographic Map Interpolation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Trigonometric Leveling": { + "name": { + "en": "Trigonometric Leveling", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Unknown": { + "name": { + "en": "Unknown", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + } + } +} \ No newline at end of file diff --git a/schemas/data/src/locales/MonitoringLocationVerticalCoordinateReferenceSystem.json b/schemas/data/src/locales/MonitoringLocationVerticalCoordinateReferenceSystem.json new file mode 100644 index 00000000..4ec0e482 --- /dev/null +++ b/schemas/data/src/locales/MonitoringLocationVerticalCoordinateReferenceSystem.json @@ -0,0 +1,72 @@ +{ + "name": { + "en": "MonitoringLocationVerticalCoordinateReferenceSystem", + "fr": null + }, + "description": { + "en": null, + "fr": null + }, + "values": { + "CGVD2013": { + "name": { + "en": "CGVD2013", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "CGVD28": { + "name": { + "en": "CGVD28", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "NAVD88": { + "name": { + "en": "NAVD88", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "NGVD29": { + "name": { + "en": "NGVD29", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "OTHER": { + "name": { + "en": "OTHER", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "UNKWN": { + "name": { + "en": "UNKWN", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + } + } +} \ No newline at end of file diff --git a/schemas/data/src/locales/ResultAnalyticalMethodContext.json b/schemas/data/src/locales/ResultAnalyticalMethodContext.json index df441f18..2fc51e1f 100644 --- a/schemas/data/src/locales/ResultAnalyticalMethodContext.json +++ b/schemas/data/src/locales/ResultAnalyticalMethodContext.json @@ -1,403 +1,11 @@ { - "ResultAnalyticalMethodContext": { - "name": { - "en": "Result Analytical Method Context", - "fr": null - }, - "description": { - "en": "Publisher of ResultAnalyticalMethodID.\r\n\r\nFor field data: Manufacturer, brand or publisher of field test or equipment used to collect measurements. \r\n\r\nFor laboratory analyzed data: Publisher of method ID code. For more informaton, see Reporting analytical methods on DataStream's Learning Centre. \r\n\r\nRequired if ResultAnalyticalMethodID is populated.", - "fr": "Diffuseur de ResultAnalyticalMethodID.\r\n\r\nPour les données sur le terrain : Fabricant, marque ou diffuseur du test de terrain ou de l’équipement utilisé pour prélever les mesures. \r\n\r\nPour les données analysées en laboratoire : Diffuseur du code d’identification de la méthode. Pour plus d’information, voir Entrer les méthodes d’analyse dans le Centre d’apprentissage de DataStream. \r\n\r\nObligatoire si le champ ResultAnalyticalMethodID est rempli. \r\n" - }, - "values": { - "APHA": { - "name": { - "en": "APHA", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "APHA_SM20ED": { - "name": { - "en": "APHA_SM20ED", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "APHA_SM21ED": { - "name": { - "en": "APHA_SM21ED", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "APHA_SM22ED": { - "name": { - "en": "APHA_SM22ED", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "APHA_SM23ED": { - "name": { - "en": "APHA_SM23ED", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "APHA_SM24ED": { - "name": { - "en": "APHA_SM24ED", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "ASTM": { - "name": { - "en": "ASTM", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "BC_MOE": { - "name": { - "en": "BC_MOE", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "DIN": { - "name": { - "en": "DIN", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "DOI": { - "name": { - "en": "DOI", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "EN": { - "name": { - "en": "EN", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "ENV/CANADA": { - "name": { - "en": "ENV/CANADA", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "ENVIROLOGIX": { - "name": { - "en": "ENVIROLOGIX", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "HACH": { - "name": { - "en": "HACH", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "Hydrolab": { - "name": { - "en": "Hydrolab", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "IDEXX": { - "name": { - "en": "IDEXX", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "ISO": { - "name": { - "en": "ISO", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "LACHAT": { - "name": { - "en": "LACHAT", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "LaMOTTE": { - "name": { - "en": "LaMOTTE", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "METER Group": { - "name": { - "en": "METER Group", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "MICROLOGY LABS": { - "name": { - "en": "MICROLOGY LABS", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "Oakton": { - "name": { - "en": "Oakton", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "ON MECP": { - "name": { - "en": "ON MECP", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "PALINTEST LTD": { - "name": { - "en": "PALINTEST LTD", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "PROPRIETARY": { - "name": { - "en": "PROPRIETARY", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "RBR": { - "name": { - "en": "RBR", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "Seal": { - "name": { - "en": "Seal", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "Solinst": { - "name": { - "en": "Solinst", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "THERMO-SCIENTIFIC": { - "name": { - "en": "THERMO-SCIENTIFIC", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "Turner Designs": { - "name": { - "en": "Turner Designs", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "USEPA": { - "name": { - "en": "USEPA", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "USDOI/USGS": { - "name": { - "en": "USDOI/USGS", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "VMV": { - "name": { - "en": "VMV", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "YSI": { - "name": { - "en": "YSI", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "AOAC": { - "name": { - "en": "AOAC", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "HANNA": { - "name": { - "en": "HANNA", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "HOBO": { - "name": { - "en": "HOBO", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "REED": { - "name": { - "en": "REED", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - } - } - }, "name": { - "en": "ResultAnalyticalMethodContext", + "en": "Result Analytical Method Context", "fr": null }, "description": { - "en": null, - "fr": null + "en": "Publisher of ResultAnalyticalMethodID.\r\n\r\nFor field data: Manufacturer, brand or publisher of field test or equipment used to collect measurements. \r\n\r\nFor laboratory analyzed data: Publisher of method ID code. For more informaton, see Reporting analytical methods on DataStream's Learning Centre. \r\n\r\nRequired if ResultAnalyticalMethodID is populated.", + "fr": "Diffuseur de ResultAnalyticalMethodID.\r\n\r\nPour les données sur le terrain : Fabricant, marque ou diffuseur du test de terrain ou de l’équipement utilisé pour prélever les mesures. \r\n\r\nPour les données analysées en laboratoire : Diffuseur du code d’identification de la méthode. Pour plus d’information, voir Entrer les méthodes d’analyse dans le Centre d’apprentissage de DataStream. \r\n\r\nObligatoire si le champ ResultAnalyticalMethodID est rempli. \r\n" }, "values": { "AOAC": { @@ -490,6 +98,16 @@ "fr": null } }, + "CSSS": { + "name": { + "en": "CSSS", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "DIN": { "name": { "en": "DIN", @@ -660,6 +278,16 @@ "fr": null } }, + "Oxyguard": { + "name": { + "en": "Oxyguard", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "PALINTEST LTD": { "name": { "en": "PALINTEST LTD", @@ -720,6 +348,16 @@ "fr": null } }, + "SSSA": { + "name": { + "en": "SSSA", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "THERMO-SCIENTIFIC": { "name": { "en": "THERMO-SCIENTIFIC", @@ -740,6 +378,16 @@ "fr": null } }, + "USDA/SSIR": { + "name": { + "en": "USDA/SSIR", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "USDOI/USGS": { "name": { "en": "USDOI/USGS", diff --git a/schemas/data/src/locales/ResultSampleFraction.json b/schemas/data/src/locales/ResultSampleFraction.json index 748094a6..ba4d4cbb 100644 --- a/schemas/data/src/locales/ResultSampleFraction.json +++ b/schemas/data/src/locales/ResultSampleFraction.json @@ -1,449 +1,67 @@ { - "ResultSampleFraction": { - "name": { - "en": "Result Sample Fraction", - "fr": "Fraction d’échantillon" - }, - "description": { - "en": "The portion of the characteristic being analyzed. Metals are typically reported as \"Total\" or \"Dissolved\", while nutrients are typically reported as \"Filtered\" or \"Unfiltered\". Required for certain characteristics (see CharacteristicName LOOKUP tab). \r\n\r\nFor details on reporting sample fractions for metals and nutrients, see our guidance documents in the Learning Centre.", - "fr": "La partie de la caractéristique qui est analysée. Les métaux sont généralement signalés comme « Total » (totaux) ou « Dissolved » (dissous), tandis que les nutriments sont généralement signalés comme « Filtered » (filtrés) ou « Unfiltered » (non filtrés). Obligatoire pour certaines caractéristiques (voir l'onglet CharacteristicName LOOKUP). \r\n\r\nPour plus de détails sur la manière de signaler les fractions d’échantillon relatives aux métaux et aux nutriments, voir nos documents-guides dans le Centre d’apprentissage." - }, - "values": { - "Acid Soluble": { - "name": { - "en": "Acid Soluble", - "fr": "Soluble dans l'acide" - }, - "description": { - "en": "Portion of the analyte that becomes dissolved within the sample following treatment with an appropriate acid.", - "fr": "Partie de l’analyte qui se dissout dans l’échantillon après traitement au moyen d’un acide approprié." - } - }, - "Bioavailable": { - "name": { - "en": "Bioavailable", - "fr": "Biodisponible" - }, - "description": { - "en": "Portion of the analyte that can be absorbed by a specific tissue or organ.", - "fr": "Partie de l’analyte qui peut être absorbée par un tissu ou un organe spécifique." - } - }, - "Comb Available": { - "name": { - "en": "Comb Available", - "fr": "Peigne disponible" - }, - "description": { - "en": "Portion of the analyte or other analyte derivatives which is combined with other derivatives yet is still available to oxidize organic matter.", - "fr": "Partie de l’analyte ou d’autres dérivés de l’analyte qui est combinée à d’autres dérivés mais qui reste disponible pour oxyder la matière organique." - } - }, - "Dissolved": { - "name": { - "en": "Dissolved", - "fr": "Dissous" - }, - "description": { - "en": "Portion of the analyte found in the liquid medium, which cannot be removed by filtration. Filter pore size should be indicated in the ResultComment field if it is different than 0.45 µm. DataStream uses this term for metal-series analytes and other non-nutrients to indicate that the water sample was filtered. See relevant guidance on datastream.org.", - "fr": "Partie de l’analyte qui se trouve dans le milieu liquide et qui ne peut pas être éliminée par filtration. La taille des pores du filtre doit être indiquée dans le champ ResultComment si elle est différente de 0,45 µm. DataStream utilise ce terme pour les analytes de la série des métaux et d’autres éléments non nutritifs pour indiquer que l’échantillon d’eau a été filtré. Voir le guide approprié sur datastream.org." - } - }, - "Extractable": { - "name": { - "en": "Extractable", - "fr": "Extractible" - }, - "description": { - "en": "Portion of an analyte that is solubilized from unfiltered water samples or solid samples (e.g., sediment), using a weaker or partial digestion. Applies to unfiltered samples reported by the laboratory as “Acid soluble”. DataStream uses this term for water sample metal-series analytes and other non-nutrients to indicate that it was not filtered and subject to weak or partial digestion. See relevant guidance on datastream.org.", - "fr": "Partie d’un analyte qui est solubilisé à partir d’échantillons d’eau non filtrée ou d’échantillons solides (p.ex. sédiment), à l’aide d’une digestion plus faible ou partielle. S’applique aux échantillons non filtrés signalés par le laboratoire comme étant « solubles dans l’acide ». DataStream utilise ce terme pour les échantillons d’eau contenant des analytes de la série des métaux et d’autres éléments non nutritifs pour indiquer qu’ils n’ont pas été filtrés et qu’ils ont fait l’objet d’une digestion faible ou partielle. Voir le guide approprié sur datastream.org." - } - }, - "Extractable, CaCO3-bound": { - "name": { - "en": "Extractable, CaCO3-bound", - "fr": "Extractibles, liée au CaCO3" - }, - "description": { - "en": null, - "fr": null - } - }, - "Extractable, exchangeable": { - "name": { - "en": "Extractable, exchangeable", - "fr": "Extractible, échangeable" - }, - "description": { - "en": null, - "fr": null - } - }, - "Extractable, organic-bnd": { - "name": { - "en": "Extractable, organic-bnd", - "fr": "Extractibles, lies à l’organique" - }, - "description": { - "en": null, - "fr": null - } - }, - "Extractable, other": { - "name": { - "en": "Extractable, other", - "fr": "Extractible, autre" - }, - "description": { - "en": null, - "fr": null - } - }, - "Extractable, oxide-bound": { - "name": { - "en": "Extractable, oxide-bound", - "fr": "Extractibles, liée à l’oxyde" - }, - "description": { - "en": null, - "fr": null - } - }, - "Extractable, residual": { - "name": { - "en": "Extractable, residual", - "fr": "Extractible, résiduelle" - }, - "description": { - "en": null, - "fr": null - } - }, - "Filter/sieve residue": { - "name": { - "en": "Filter/sieve residue", - "fr": "Résidus de filtre/de tamis" - }, - "description": { - "en": null, - "fr": null - } - }, - "Filterable": { - "name": { - "en": "Filterable", - "fr": "Filtrable" - }, - "description": { - "en": "Portion of the analyte that is in or absorbed to material which passes through the filter during sample filtration.", - "fr": "Partie de l’analyte qui est dans le matériau ou absorbée par le matériau qui passe à travers le filtre lors de la filtration de l’échantillon." - } - }, - "Filtered": { - "name": { - "en": "Filtered", - "fr": "Filtré" - }, - "description": { - "en": "Portion of the analyte measured as the aqueous form through filtration (filtering location unknown). Used with nutrient data in DataStream when reported as \"Dissolved\" fraction. See relevant guidance on datastream.org.", - "fr": "Partie de l’analyte mesurée sous forme aqueuse par filtration (lieu de filtration inconnu). Utilisé avec les données sur les nutriments dans DataStream lorsqu’elles sont signalées comme fraction « Dissolved » (dissoute). Voir le guide approprié sur datastream.org." - } - }, - "Filtered, field": { - "name": { - "en": "Filtered, field", - "fr": "Filtré, terrain" - }, - "description": { - "en": "Portion of the analyte measured as the aqueous form through field filtration. Used with nutrient data in DataStream when reported as \"Dissolved\" fraction. See relevant guidance on datastream.org.", - "fr": "Partie de l’analyte mesurée sous forme aqueuse par filtration sur le terrain. Utilisé avec les données sur les nutriments dans DataStream lorsqu’elles sont signalées comme fraction « Dissolved » (dissoute). Voir le guide approprié sur datastream.org." - } - }, - "Filtered, lab": { - "name": { - "en": "Filtered, lab", - "fr": "Filtré, lab" - }, - "description": { - "en": "Portion of the analyte measured as the aqueous form through lab filtration. Used with nutrient data in DataStream when reported as \"Dissolved\" fraction. See relevant guidance on datastream.org.", - "fr": "Partie de l’analyte mesurée sous forme aqueuse par filtration en laboratoire. Utilisé avec les données sur les nutriments dans DataStream lorsqu’elles sont signalées comme fraction « Dissolved » (dissoute)." - } - }, - "Fixed": { - "name": { - "en": "Fixed", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "Free Available": { - "name": { - "en": "Free Available", - "fr": "Libre disponible" - }, - "description": { - "en": "Portion of the residual analyte present and not combined with any substance or in other less readily available form.", - "fr": "Partie de l’analyte résiduel présente et non combinée à une substance ou sous une autre forme moins aisément disponible." - } - }, - "Inorganic": { - "name": { - "en": "Inorganic", - "fr": "Inorganique" - }, - "description": { - "en": "Portion of the analyte containing inorganic content.", - "fr": "Partie de la substance à analyser contenant des éléments inorganiques." - } - }, - "Non-Filterable (Particle)": { - "name": { - "en": "Non-Filterable (Particle)", - "fr": "Non filtrable (Particule)" - }, - "description": { - "en": "Portion of the analyte that is particulate and does not pass through filter. Used with nutrient data in DataStream when reported as \"Particulate\" fraction. See relevant guidance on datastream.org.", - "fr": "Partie de la substance à analyser qui est particulaire et ne passe pas à travers le filtre. Utilisé avec les données sur les nutriments dans DataStream lorsqu’elles sont signalées comme fraction « Particulate » (particulaire). Voir le guide approprié sur datastream.org." - } - }, - "non-linear function": { - "name": { - "en": "non-linear function", - "fr": "fonction non linéaire" - }, - "description": { - "en": null, - "fr": null - } - }, - "Non-settleable": { - "name": { - "en": "Non-settleable", - "fr": "Non réglable" - }, - "description": { - "en": "Portion of the analyte that is in/absorbed to particles remaining in suspension after a settling process.", - "fr": "Portion de l'analyte qui est dans/absorbée par les particules restant en suspension après un processus de décantation." - } - }, - "Non-volatile": { - "name": { - "en": "Non-volatile", - "fr": "Non volatile" - }, - "description": { - "en": "Portion of the analyte that is in a liquid or solid state under normal temperature and pressure.", - "fr": "Partie de la substance à analyser qui se trouve à l’état liquide ou solide à une température et une pression normales." - } - }, - "Organic": { - "name": { - "en": "Organic", - "fr": "Organique" - }, - "description": { - "en": "Portion of the analyte in organic forms.", - "fr": "Partie de la substance à analyser sous forme organique." - } - }, - "Pot. Dissolved": { - "name": { - "en": "Pot. Dissolved", - "fr": "Pot. Dissous" - }, - "description": { - "en": "Portion of the analyte measured from the filtrate of a water sample that was treated with nitric acid prior to filtration. Samples solubilized with nitric acid reported as “Acid soluble” can be assigned the fraction “Pot. Dissolved”. Filter pore size should be indicated in the ResultComment if it is different than 0.45 µm. DataStream uses this term for metal-series analytes and other non-nutrients to indicate that the water sample was filtered. See relevant guidance on datastream.org.", - "fr": "Partie de l’analyte mesurée à partir du filtrat d’un échantillon d’eau qui a été traité avec de l’acide nitrique avant d’être filtré. Les échantillons solubilisés avec de l’acide nitrique et signalés comme « Acid soluble » (solubles dans l’acide) peuvent se voir attribuer la fraction « Pot. Dissolved » (Pot. dissous). La taille des pores du filtre doit être indiquée dans ResultComment si elle est différente de 0,45 µm. DataStream utilise ce terme pour les analytes de la série des métaux et d’autres éléments non nutritifs pour indiquer que l’échantillon d’eau a été filtré. Voir le guide approprié sur datastream.org." - } - }, - "Settleable": { - "name": { - "en": "Settleable", - "fr": "Réglable" - }, - "description": { - "en": "Portion of the analyte found in/absorbed to the part of the sample which has settled (fallen out of suspension) to the bottom of the sample container.", - "fr": "Portion de l'analyte trouvée dans/absorbée par la partie de l'échantillon qui s'est déposée (tombée en suspension) au fond du récipient d'échantillon." - } - }, - "Sieved": { - "name": { - "en": "Sieved", - "fr": "Tamisé" - }, - "description": { - "en": null, - "fr": null - } - }, - "Supernate": { - "name": { - "en": "Supernate", - "fr": "Surnageant" - }, - "description": { - "en": "Portion of the analyte found in the liquid layer above a precipitate produced from the sample.", - "fr": "Partie de l’analyte trouvée dans la couche liquide au-dessus d’un précipité produit à partir de l’échantillon." - } - }, - "Suspended": { - "name": { - "en": "Suspended", - "fr": "En suspension" - }, - "description": { - "en": "Portion of the analyte suspended in the sampled medium, either as- or adsorbed to- particles that has been physically separated before analysis. DataStream uses this term for water sample metal-series analytes and other non-nutrients to indicate that it was not filtered and subject to weak or partial digestion. See relevant guidance on datastream.org.", - "fr": "Partie de l’analyte en suspension dans le milieu échantillonné, sous forme de particules- ou absorbée sur celles-ci-, qui a été physiquement séparée avant l’analyse. DataStream utilise ce terme pour les échantillons d’eau contenant des analytes de la série des métaux et d’autres éléments non nutritifs pour indiquer qu’ils n’ont pas été filtrés et qu’ils ont fait l’objet d’une digestion faible ou partielle. Voir le guide approprié sur datastream.org." - } - }, - "Total": { - "name": { - "en": "Total", - "fr": "Totale" - }, - "description": { - "en": "Portion of the analyte representing the total of all fractions in an unfiltered water sample, or a sediment sample, obtained by a strong digestion that produces a concentration value that can be assumed to be representative of the entirety of the analyte in the sample. Applies to unfiltered samples reported by the laboratory as \"Total\" or “Total recoverable”. DataStream uses this term for water sample metal-series analytes and other non-nutrients to indicate that it was not filtered and subject to strong digestion. See relevant guidance on datastream.org.", - "fr": "Partie de l’analyte représentant le total de toutes les fractions dans un échantillon d’eau non filtré ou un échantillon de sédiments, obtenu par une forte digestion qui produit une valeur de concentration que l’on peut supposer représentative de la totalité de l’analyte dans l’échantillon. S’applique aux échantillons non filtrés signalés par le laboratoire comme étant « Total » ou « Total recoverable » (Total récupérables). DataStream utilise ce terme pour les échantillons d’eau contenant des analytes de la série des métaux et d’autres éléments non nutritifs pour indiquer qu’ils n’ont pas été filtrés et qu’ils ont fait l’objet d’une digestion forte. Voir le guide approprié sur datastream.org." - } - }, - "Total Recoverable": { - "name": { - "en": "Total Recoverable", - "fr": "Total récupérable" - }, - "description": { - "en": "Portion of the analyte available in an unfiltered sample following solubilization.", - "fr": "Partie de l’analyte disponible dans un échantillon non filtré après solubilisation." - } - }, - "Total Residual": { - "name": { - "en": "Total Residual", - "fr": "Total résiduel" - }, - "description": { - "en": "Portion of the analyte remaining after a given contact time. The sum of the combined available residual analyte and the free available residual analyte.", - "fr": "Partie de l’analyte restant après un temps de contact donné. La somme de l'analyte résiduel disponible et de l'analyte résiduel libre." - } - }, - "Unfiltered": { - "name": { - "en": "Unfiltered", - "fr": "Non filtré" - }, - "description": { - "en": "Portion of the analyte containing aqueous and particulate fractions. Used with nutrient data in DataStream when reported as \"Total\" fraction. See relevant guidance on datastream.org.", - "fr": "Partie de l’analyte contenant des fractions aqueuses et particulaires. Utilisé avec les données sur les nutriments dans DataStream lorsqu’elles sont signalées comme fraction « Total » (totale). Voir le guide approprié sur datastream.org." - } - }, - "Unspecified": { - "name": { - "en": "Unspecified", - "fr": "Non spécifié" - }, - "description": { - "en": null, - "fr": null - } - }, - "Vapor": { - "name": { - "en": "Vapor", - "fr": "Vapeur" - }, - "description": { - "en": "Portion of the analyte that exists in a gaseous state and that under ordinary conditions is liquid or solid.", - "fr": "Partie de l’analyte qui existe à l’état gazeux et qui, dans des conditions normales, est liquide ou solide." - } - }, - "Volatile": { - "name": { - "en": "Volatile", - "fr": "Volatile" - }, - "description": { - "en": "Portion of the analyte that evaporates readily at normal temperature and pressure.", - "fr": "Partie de l’analyte qui s’évapore facilement à une température et une pression normales." - } - }, - "Field": { - "name": { - "en": "Field", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - } - } - }, "name": { - "en": "ResultSampleFraction", - "fr": null + "en": "Result Sample Fraction", + "fr": "Fraction d’échantillon" }, "description": { - "en": null, - "fr": null + "en": "The portion of the characteristic being analyzed. Metals are typically reported as \"Total\" or \"Dissolved\", while nutrients are typically reported as \"Filtered\" or \"Unfiltered\". Required for certain characteristics (see CharacteristicName LOOKUP tab). \r\n\r\nFor details on reporting sample fractions for metals and nutrients, see our guidance documents in the Learning Centre.", + "fr": "La partie de la caractéristique qui est analysée. Les métaux sont généralement signalés comme « Total » (totaux) ou « Dissolved » (dissous), tandis que les nutriments sont généralement signalés comme « Filtered » (filtrés) ou « Unfiltered » (non filtrés). Obligatoire pour certaines caractéristiques (voir l'onglet CharacteristicName LOOKUP). \r\n\r\nPour plus de détails sur la manière de signaler les fractions d’échantillon relatives aux métaux et aux nutriments, voir nos documents-guides dans le Centre d’apprentissage." }, "values": { "Acid Soluble": { "name": { "en": "Acid Soluble", - "fr": null + "fr": "Soluble dans l'acide" }, "description": { - "en": null, - "fr": null + "en": "Portion of the analyte that becomes dissolved within the sample following treatment with an appropriate acid.", + "fr": "Partie de l’analyte qui se dissout dans l’échantillon après traitement au moyen d’un acide approprié." } }, "Bioavailable": { "name": { "en": "Bioavailable", - "fr": null + "fr": "Biodisponible" }, "description": { - "en": null, - "fr": null + "en": "Portion of the analyte that can be absorbed by a specific tissue or organ.", + "fr": "Partie de l’analyte qui peut être absorbée par un tissu ou un organe spécifique." } }, "Comb Available": { "name": { "en": "Comb Available", - "fr": null + "fr": "Peigne disponible" }, "description": { - "en": null, - "fr": null + "en": "Portion of the analyte or other analyte derivatives which is combined with other derivatives yet is still available to oxidize organic matter.", + "fr": "Partie de l’analyte ou d’autres dérivés de l’analyte qui est combinée à d’autres dérivés mais qui reste disponible pour oxyder la matière organique." } }, "Dissolved": { "name": { "en": "Dissolved", - "fr": null + "fr": "Dissous" }, "description": { - "en": null, - "fr": null + "en": "Portion of the analyte found in the liquid medium, which cannot be removed by filtration. Filter pore size should be indicated in the ResultComment field if it is different than 0.45 µm. DataStream uses this term for metal-series analytes and other non-nutrients to indicate that the water sample was filtered. See relevant guidance on datastream.org.", + "fr": "Partie de l’analyte qui se trouve dans le milieu liquide et qui ne peut pas être éliminée par filtration. La taille des pores du filtre doit être indiquée dans le champ ResultComment si elle est différente de 0,45 µm. DataStream utilise ce terme pour les analytes de la série des métaux et d’autres éléments non nutritifs pour indiquer que l’échantillon d’eau a été filtré. Voir le guide approprié sur datastream.org." } }, "Extractable": { "name": { "en": "Extractable", - "fr": null + "fr": "Extractible" }, "description": { - "en": null, - "fr": null + "en": "Portion of an analyte that is solubilized from unfiltered water samples or solid samples (e.g., sediment), using a weaker or partial digestion. Applies to unfiltered samples reported by the laboratory as “Acid soluble”. DataStream uses this term for water sample metal-series analytes and other non-nutrients to indicate that it was not filtered and subject to weak or partial digestion. See relevant guidance on datastream.org.", + "fr": "Partie d’un analyte qui est solubilisé à partir d’échantillons d’eau non filtrée ou d’échantillons solides (p.ex. sédiment), à l’aide d’une digestion plus faible ou partielle. S’applique aux échantillons non filtrés signalés par le laboratoire comme étant « solubles dans l’acide ». DataStream utilise ce terme pour les échantillons d’eau contenant des analytes de la série des métaux et d’autres éléments non nutritifs pour indiquer qu’ils n’ont pas été filtrés et qu’ils ont fait l’objet d’une digestion faible ou partielle. Voir le guide approprié sur datastream.org." } }, "Extractable, CaCO3-bound": { "name": { "en": "Extractable, CaCO3-bound", - "fr": null + "fr": "Extractibles, liée au CaCO3" }, "description": { "en": null, @@ -453,7 +71,7 @@ "Extractable, exchangeable": { "name": { "en": "Extractable, exchangeable", - "fr": null + "fr": "Extractible, échangeable" }, "description": { "en": null, @@ -463,7 +81,7 @@ "Extractable, organic-bnd": { "name": { "en": "Extractable, organic-bnd", - "fr": null + "fr": "Extractibles, lies à l’organique" }, "description": { "en": null, @@ -473,7 +91,7 @@ "Extractable, other": { "name": { "en": "Extractable, other", - "fr": null + "fr": "Extractible, autre" }, "description": { "en": null, @@ -483,7 +101,7 @@ "Extractable, oxide-bound": { "name": { "en": "Extractable, oxide-bound", - "fr": null + "fr": "Extractibles, liée à l’oxyde" }, "description": { "en": null, @@ -493,7 +111,7 @@ "Extractable, residual": { "name": { "en": "Extractable, residual", - "fr": null + "fr": "Extractible, résiduelle" }, "description": { "en": null, @@ -503,187 +121,187 @@ "Filterable": { "name": { "en": "Filterable", - "fr": null + "fr": "Filtrable" }, "description": { - "en": null, - "fr": null + "en": "Portion of the analyte that is in or absorbed to material which passes through the filter during sample filtration.", + "fr": "Partie de l’analyte qui est dans le matériau ou absorbée par le matériau qui passe à travers le filtre lors de la filtration de l’échantillon." } }, "Filtered": { "name": { "en": "Filtered", - "fr": null + "fr": "Filtré" }, "description": { - "en": null, - "fr": null + "en": "Portion of the analyte measured as the aqueous form through filtration (filtering location unknown). Used with nutrient data in DataStream when reported as \"Dissolved\" fraction. See relevant guidance on datastream.org.", + "fr": "Partie de l’analyte mesurée sous forme aqueuse par filtration (lieu de filtration inconnu). Utilisé avec les données sur les nutriments dans DataStream lorsqu’elles sont signalées comme fraction « Dissolved » (dissoute). Voir le guide approprié sur datastream.org." } }, "Filtered, field": { "name": { "en": "Filtered, field", - "fr": null + "fr": "Filtré, terrain" }, "description": { - "en": null, - "fr": null + "en": "Portion of the analyte measured as the aqueous form through field filtration. Used with nutrient data in DataStream when reported as \"Dissolved\" fraction. See relevant guidance on datastream.org.", + "fr": "Partie de l’analyte mesurée sous forme aqueuse par filtration sur le terrain. Utilisé avec les données sur les nutriments dans DataStream lorsqu’elles sont signalées comme fraction « Dissolved » (dissoute). Voir le guide approprié sur datastream.org." } }, "Filtered, lab": { "name": { "en": "Filtered, lab", - "fr": null + "fr": "Filtré, lab" }, "description": { - "en": null, - "fr": null + "en": "Portion of the analyte measured as the aqueous form through lab filtration. Used with nutrient data in DataStream when reported as \"Dissolved\" fraction. See relevant guidance on datastream.org.", + "fr": "Partie de l’analyte mesurée sous forme aqueuse par filtration en laboratoire. Utilisé avec les données sur les nutriments dans DataStream lorsqu’elles sont signalées comme fraction « Dissolved » (dissoute)." } }, "Free Available": { "name": { "en": "Free Available", - "fr": null + "fr": "Libre disponible" }, "description": { - "en": null, - "fr": null + "en": "Portion of the residual analyte present and not combined with any substance or in other less readily available form.", + "fr": "Partie de l’analyte résiduel présente et non combinée à une substance ou sous une autre forme moins aisément disponible." } }, "Inorganic": { "name": { "en": "Inorganic", - "fr": null + "fr": "Inorganique" }, "description": { - "en": null, - "fr": null + "en": "Portion of the analyte containing inorganic content.", + "fr": "Partie de la substance à analyser contenant des éléments inorganiques." } }, "Non-Filterable (Particle)": { "name": { "en": "Non-Filterable (Particle)", - "fr": null + "fr": "Non filtrable (Particule)" }, "description": { - "en": null, - "fr": null + "en": "Portion of the analyte that is particulate and does not pass through filter. Used with nutrient data in DataStream when reported as \"Particulate\" fraction. See relevant guidance on datastream.org.", + "fr": "Partie de la substance à analyser qui est particulaire et ne passe pas à travers le filtre. Utilisé avec les données sur les nutriments dans DataStream lorsqu’elles sont signalées comme fraction « Particulate » (particulaire). Voir le guide approprié sur datastream.org." } }, "Non-settleable": { "name": { "en": "Non-settleable", - "fr": null + "fr": "Non réglable" }, "description": { - "en": null, - "fr": null + "en": "Portion of the analyte that is in/absorbed to particles remaining in suspension after a settling process.", + "fr": "Portion de l'analyte qui est dans/absorbée par les particules restant en suspension après un processus de décantation." } }, "Non-volatile": { "name": { "en": "Non-volatile", - "fr": null + "fr": "Non volatile" }, "description": { - "en": null, - "fr": null + "en": "Portion of the analyte that is in a liquid or solid state under normal temperature and pressure.", + "fr": "Partie de la substance à analyser qui se trouve à l’état liquide ou solide à une température et une pression normales." } }, "Organic": { "name": { "en": "Organic", - "fr": null + "fr": "Organique" }, "description": { - "en": null, - "fr": null + "en": "Portion of the analyte in organic forms.", + "fr": "Partie de la substance à analyser sous forme organique." } }, "Pot. Dissolved": { "name": { "en": "Pot. Dissolved", - "fr": null + "fr": "Pot. Dissous" }, "description": { - "en": null, - "fr": null + "en": "Portion of the analyte measured from the filtrate of a water sample that was treated with nitric acid prior to filtration. Samples solubilized with nitric acid reported as “Acid soluble” can be assigned the fraction “Pot. Dissolved”. Filter pore size should be indicated in the ResultComment if it is different than 0.45 µm. DataStream uses this term for metal-series analytes and other non-nutrients to indicate that the water sample was filtered. See relevant guidance on datastream.org.", + "fr": "Partie de l’analyte mesurée à partir du filtrat d’un échantillon d’eau qui a été traité avec de l’acide nitrique avant d’être filtré. Les échantillons solubilisés avec de l’acide nitrique et signalés comme « Acid soluble » (solubles dans l’acide) peuvent se voir attribuer la fraction « Pot. Dissolved » (Pot. dissous). La taille des pores du filtre doit être indiquée dans ResultComment si elle est différente de 0,45 µm. DataStream utilise ce terme pour les analytes de la série des métaux et d’autres éléments non nutritifs pour indiquer que l’échantillon d’eau a été filtré. Voir le guide approprié sur datastream.org." } }, "Settleable": { "name": { "en": "Settleable", - "fr": null + "fr": "Réglable" }, "description": { - "en": null, - "fr": null + "en": "Portion of the analyte found in/absorbed to the part of the sample which has settled (fallen out of suspension) to the bottom of the sample container.", + "fr": "Portion de l'analyte trouvée dans/absorbée par la partie de l'échantillon qui s'est déposée (tombée en suspension) au fond du récipient d'échantillon." } }, "Supernate": { "name": { "en": "Supernate", - "fr": null + "fr": "Surnageant" }, "description": { - "en": null, - "fr": null + "en": "Portion of the analyte found in the liquid layer above a precipitate produced from the sample.", + "fr": "Partie de l’analyte trouvée dans la couche liquide au-dessus d’un précipité produit à partir de l’échantillon." } }, "Suspended": { "name": { "en": "Suspended", - "fr": null + "fr": "En suspension" }, "description": { - "en": null, - "fr": null + "en": "Portion of the analyte suspended in the sampled medium, either as- or adsorbed to- particles that has been physically separated before analysis. DataStream uses this term for water sample metal-series analytes and other non-nutrients to indicate that it was not filtered and subject to weak or partial digestion. See relevant guidance on datastream.org.", + "fr": "Partie de l’analyte en suspension dans le milieu échantillonné, sous forme de particules- ou absorbée sur celles-ci-, qui a été physiquement séparée avant l’analyse. DataStream utilise ce terme pour les échantillons d’eau contenant des analytes de la série des métaux et d’autres éléments non nutritifs pour indiquer qu’ils n’ont pas été filtrés et qu’ils ont fait l’objet d’une digestion faible ou partielle. Voir le guide approprié sur datastream.org." } }, "Total": { "name": { "en": "Total", - "fr": null + "fr": "Totale" }, "description": { - "en": null, - "fr": null + "en": "Portion of the analyte representing the total of all fractions in an unfiltered water sample, or a sediment sample, obtained by a strong digestion that produces a concentration value that can be assumed to be representative of the entirety of the analyte in the sample. Applies to unfiltered samples reported by the laboratory as \"Total\" or “Total recoverable”. DataStream uses this term for water sample metal-series analytes and other non-nutrients to indicate that it was not filtered and subject to strong digestion. See relevant guidance on datastream.org.", + "fr": "Partie de l’analyte représentant le total de toutes les fractions dans un échantillon d’eau non filtré ou un échantillon de sédiments, obtenu par une forte digestion qui produit une valeur de concentration que l’on peut supposer représentative de la totalité de l’analyte dans l’échantillon. S’applique aux échantillons non filtrés signalés par le laboratoire comme étant « Total » ou « Total recoverable » (Total récupérables). DataStream utilise ce terme pour les échantillons d’eau contenant des analytes de la série des métaux et d’autres éléments non nutritifs pour indiquer qu’ils n’ont pas été filtrés et qu’ils ont fait l’objet d’une digestion forte. Voir le guide approprié sur datastream.org." } }, "Total Recoverable": { "name": { "en": "Total Recoverable", - "fr": null + "fr": "Total récupérable" }, "description": { - "en": null, - "fr": null + "en": "Portion of the analyte available in an unfiltered sample following solubilization.", + "fr": "Partie de l’analyte disponible dans un échantillon non filtré après solubilisation." } }, "Total Residual": { "name": { "en": "Total Residual", - "fr": null + "fr": "Total résiduel" }, "description": { - "en": null, - "fr": null + "en": "Portion of the analyte remaining after a given contact time. The sum of the combined available residual analyte and the free available residual analyte.", + "fr": "Partie de l’analyte restant après un temps de contact donné. La somme de l'analyte résiduel disponible et de l'analyte résiduel libre." } }, "Unfiltered": { "name": { "en": "Unfiltered", - "fr": null + "fr": "Non filtré" }, "description": { - "en": null, - "fr": null + "en": "Portion of the analyte containing aqueous and particulate fractions. Used with nutrient data in DataStream when reported as \"Total\" fraction. See relevant guidance on datastream.org.", + "fr": "Partie de l’analyte contenant des fractions aqueuses et particulaires. Utilisé avec les données sur les nutriments dans DataStream lorsqu’elles sont signalées comme fraction « Total » (totale). Voir le guide approprié sur datastream.org." } }, "Unspecified": { "name": { "en": "Unspecified", - "fr": null + "fr": "Non spécifié" }, "description": { "en": null, @@ -693,21 +311,21 @@ "Vapor": { "name": { "en": "Vapor", - "fr": null + "fr": "Vapeur" }, "description": { - "en": null, - "fr": null + "en": "Portion of the analyte that exists in a gaseous state and that under ordinary conditions is liquid or solid.", + "fr": "Partie de l’analyte qui existe à l’état gazeux et qui, dans des conditions normales, est liquide ou solide." } }, "Volatile": { "name": { "en": "Volatile", - "fr": null + "fr": "Volatile" }, "description": { - "en": null, - "fr": null + "en": "Portion of the analyte that evaporates readily at normal temperature and pressure.", + "fr": "Partie de l’analyte qui s’évapore facilement à une température et une pression normales." } } } diff --git a/schemas/data/src/locales/ResultStatusID.json b/schemas/data/src/locales/ResultStatusID.json index ac190eec..b96405e3 100644 --- a/schemas/data/src/locales/ResultStatusID.json +++ b/schemas/data/src/locales/ResultStatusID.json @@ -1,93 +1,11 @@ { - "ResultStatusID": { - "name": { - "en": "Result Status Identifier", - "fr": null - }, - "description": { - "en": "Stage of QA/QC protocol (as described in the dataset’s metadata) applied to the result (e.g. \"Validated\")", - "fr": "Étape du protocole d’AQ/CQ (tel que décrit dans les métadonnées du jeu de données) appliqué au résultat (par exemple, « Validated » (Validé))" - }, - "values": { - "Accepted": { - "name": { - "en": "Accepted", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "Final": { - "name": { - "en": "Final", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "Historical": { - "name": { - "en": "Historical", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "Preliminary": { - "name": { - "en": "Preliminary", - "fr": null - }, - "description": { - "en": "ResultValue not undergone any QA/QC review as described in the dataset metadata. Some aspect of the observation may be subject to change. ", - "fr": "ResultValue qui n’a pas fait l’objet d’un processus d’AQ/CQ tel que décrit dans les métadonnées du jeu de données. Certains aspects de l'observation pourraient être modifiés." - } - }, - "Rejected": { - "name": { - "en": "Rejected", - "fr": null - }, - "description": { - "en": null, - "fr": null - } - }, - "Validated": { - "name": { - "en": "Validated", - "fr": null - }, - "description": { - "en": "ResultValue validated by the QA/QC protocol described in the dataset metadata.  ", - "fr": "Result/Value validé par le protocole AQ/CQ décrit dans les métadonnées du jeu de données." - } - }, - "Provisional": { - "name": { - "en": "Provisional", - "fr": null - }, - "description": { - "en": "ResultValue undergone some but not all QA/QC protocols described in the dataset metadata. Some aspect of the observation may be subject to change. ", - "fr": "Result/Value qui a fait l’objet de certains protocoles d’AQ/CQ décrit dans les métadonnées du jeu de données. Certains aspects de l'observation pourraient être modifiés." - } - } - } - }, "name": { - "en": "ResultStatusID", + "en": "Result Status Identifier", "fr": null }, "description": { - "en": null, - "fr": null + "en": "Stage of QA/QC protocol (as described in the dataset’s metadata) applied to the result (e.g. \"Validated\")", + "fr": "Étape du protocole d’AQ/CQ (tel que décrit dans les métadonnées du jeu de données) appliqué au résultat (par exemple, « Validated » (Validé))" }, "values": { "Accepted": { @@ -126,8 +44,8 @@ "fr": null }, "description": { - "en": null, - "fr": null + "en": "ResultValue not undergone any QA/QC review as described in the dataset metadata. Some aspect of the observation may be subject to change. ", + "fr": "ResultValue qui n’a pas fait l’objet d’un processus d’AQ/CQ tel que décrit dans les métadonnées du jeu de données. Certains aspects de l'observation pourraient être modifiés." } }, "Provisional": { @@ -136,18 +54,8 @@ "fr": null }, "description": { - "en": null, - "fr": null - } - }, - "Rejected": { - "name": { - "en": "Rejected", - "fr": null - }, - "description": { - "en": null, - "fr": null + "en": "ResultValue undergone some but not all QA/QC protocols described in the dataset metadata. Some aspect of the observation may be subject to change. ", + "fr": "Result/Value qui a fait l’objet de certains protocoles d’AQ/CQ décrit dans les métadonnées du jeu de données. Certains aspects de l'observation pourraient être modifiés." } }, "Validated": { @@ -156,8 +64,8 @@ "fr": null }, "description": { - "en": null, - "fr": null + "en": "ResultValue validated by the QA/QC protocol described in the dataset metadata.  ", + "fr": "Result/Value validé par le protocole AQ/CQ décrit dans les métadonnées du jeu de données." } } } diff --git a/schemas/data/src/locales/SampleCollectionEquipmentName.json b/schemas/data/src/locales/SampleCollectionEquipmentName.json index 00e48e3f..a2cb6e38 100644 --- a/schemas/data/src/locales/SampleCollectionEquipmentName.json +++ b/schemas/data/src/locales/SampleCollectionEquipmentName.json @@ -28,6 +28,16 @@ "fr": null } }, + "Ekman Grab": { + "name": { + "en": "Ekman Grab", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, "DH-81": { "name": { "en": "DH-81", @@ -417,6 +427,76 @@ "en": null, "fr": null } + }, + "Air line": { + "name": { + "en": "Air line", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Bailer": { + "name": { + "en": "Bailer", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Hydrasleeve": { + "name": { + "en": "Hydrasleeve", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Snap sampler": { + "name": { + "en": "Snap sampler", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Tubing": { + "name": { + "en": "Tubing", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Water level meter": { + "name": { + "en": "Water level meter", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Wetted tape": { + "name": { + "en": "Wetted tape", + "fr": null + }, + "description": { + "en": null, + "fr": null + } } } } \ No newline at end of file diff --git a/schemas/data/src/locales/SampleCollectionMethodContext.json b/schemas/data/src/locales/SampleCollectionMethodContext.json new file mode 100644 index 00000000..ca77288e --- /dev/null +++ b/schemas/data/src/locales/SampleCollectionMethodContext.json @@ -0,0 +1,132 @@ +{ + "name": { + "en": "SampleCollectionMethodContext", + "fr": null + }, + "description": { + "en": null, + "fr": null + }, + "values": { + "AB_AEP": { + "name": { + "en": "AB_AEP", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "AB_AGS": { + "name": { + "en": "AB_AGS", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "ASTM": { + "name": { + "en": "ASTM", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "BC_MOE": { + "name": { + "en": "BC_MOE", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "ISO": { + "name": { + "en": "ISO", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "NL_ECCC": { + "name": { + "en": "NL_ECCC", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "NS_DNR": { + "name": { + "en": "NS_DNR", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "NS_ECC": { + "name": { + "en": "NS_ECC", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "PROPRIETARY": { + "name": { + "en": "PROPRIETARY", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "QC_MOE": { + "name": { + "en": "QC_MOE", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "USDOI/USGS": { + "name": { + "en": "USDOI/USGS", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "USEPA": { + "name": { + "en": "USEPA", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + } + } +} \ No newline at end of file diff --git a/schemas/data/src/locales/SampleCondition.json b/schemas/data/src/locales/SampleCondition.json new file mode 100644 index 00000000..0d05bd88 --- /dev/null +++ b/schemas/data/src/locales/SampleCondition.json @@ -0,0 +1,72 @@ +{ + "name": { + "en": "SampleCondition", + "fr": null + }, + "description": { + "en": null, + "fr": null + }, + "values": { + "Flowing": { + "name": { + "en": "Flowing", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Nearby site is being pumped or pumped recently": { + "name": { + "en": "Nearby site is being pumped or pumped recently", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Static, before pumping or purging": { + "name": { + "en": "Static, before pumping or purging", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "The site has been recently pumped or purged": { + "name": { + "en": "The site has been recently pumped or purged", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "The site is being pumped for water use": { + "name": { + "en": "The site is being pumped for water use", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Unspecified": { + "name": { + "en": "Unspecified", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + } + } +} \ No newline at end of file diff --git a/schemas/data/src/locales/WellIDContext.json b/schemas/data/src/locales/WellIDContext.json new file mode 100644 index 00000000..d272ffde --- /dev/null +++ b/schemas/data/src/locales/WellIDContext.json @@ -0,0 +1,142 @@ +{ + "name": { + "en": "WellIDContext", + "fr": null + }, + "description": { + "en": null, + "fr": null + }, + "values": { + "AB": { + "name": { + "en": "AB", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "BC": { + "name": { + "en": "BC", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "MB": { + "name": { + "en": "MB", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "NB": { + "name": { + "en": "NB", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "NL": { + "name": { + "en": "NL", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "NS": { + "name": { + "en": "NS", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "NT": { + "name": { + "en": "NT", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "ON": { + "name": { + "en": "ON", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "OTHER": { + "name": { + "en": "OTHER", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "PE": { + "name": { + "en": "PE", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "QC": { + "name": { + "en": "QC", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "SK": { + "name": { + "en": "SK", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "YK": { + "name": { + "en": "YK", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + } + } +} \ No newline at end of file diff --git a/schemas/data/src/locales/WellUseType.json b/schemas/data/src/locales/WellUseType.json new file mode 100644 index 00000000..1f56379d --- /dev/null +++ b/schemas/data/src/locales/WellUseType.json @@ -0,0 +1,172 @@ +{ + "name": { + "en": "WellUseType", + "fr": null + }, + "description": { + "en": null, + "fr": null + }, + "values": { + "Aquaculture": { + "name": { + "en": "Aquaculture", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Bottling": { + "name": { + "en": "Bottling", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Dewatering": { + "name": { + "en": "Dewatering", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Domestic": { + "name": { + "en": "Domestic", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Geothermal": { + "name": { + "en": "Geothermal", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Industrial": { + "name": { + "en": "Industrial", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Irrigation": { + "name": { + "en": "Irrigation", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Livestock": { + "name": { + "en": "Livestock", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Monitoring - Ambient": { + "name": { + "en": "Monitoring - Ambient", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Monitoring - Other": { + "name": { + "en": "Monitoring - Other", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Oil/Gas Production": { + "name": { + "en": "Oil/Gas Production", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Other": { + "name": { + "en": "Other", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Public Supply - Municipal": { + "name": { + "en": "Public Supply - Municipal", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Public Supply - Other": { + "name": { + "en": "Public Supply - Other", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Recharge": { + "name": { + "en": "Recharge", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + }, + "Test Hole": { + "name": { + "en": "Test Hole", + "fr": null + }, + "description": { + "en": null, + "fr": null + } + } + } +} \ No newline at end of file diff --git a/schemas/data/src/locales/en-CA.ftl b/schemas/data/src/locales/en-CA.ftl index cdb1f479..793533e5 100644 --- a/schemas/data/src/locales/en-CA.ftl +++ b/schemas/data/src/locales/en-CA.ftl @@ -84,11 +84,19 @@ error-string-multiline-pattern = Only letters, numbers, punctuation, symbols, sp ## errors error-ActivityType-CTS-ActivityStartTime = Continuous time-series observations must include a valid ActivityStartTime error-ActivityType-ResultAnalyticalMethod = Requires LaboratoryName and ResultAnalyticalMethod columns when ActivityType starts with 'Sample' (i.e. Activity is not a Field Msr/Obs) +error-ActivityDepthHeightMeasure-ActivityDepthAltitudeReferencePoint = ActivityDepthAltitudeReferencePoint is required when ActivityDepthHeightMeasure is reported +error-ActivityMediaName-ActivityDepthHeightMeasure-Maximum = ActivityDepthHeightMeasure must be reported as a negative value. +error-ActivityMediaName-Groundwater-DepthMeasure = At least one of ActivityDepthHeightMeasure, BoreholeDepthMeasure, WellDepthMeasure, WellOpenIntervalTopMeasure, or WellOpenIntervalBottomMeasure must be reported when ActivityMediaName is 'Groundwater' or 'Porewater' +error-CharacteristicName-Depth-ActivityDepthHeightMeasure = ActivityDepthHeightMeasure should not be populated when the CharacteristicName measures depth (e.g. "Depth of water column"). error-CharacteristicName-MethodSpeciation = MethodSpeciation required for selected CharacteristicName error-CharacteristicName-Nutrient-ResultSampleFraction = ResultSampleFractions for nutrients should follow guidance in Best Practices Guide for Nutrient Data (see https://datastream.org/en-ca/documentation/nutrient-data-guidance) error-CharacteristicName-ResultSampleFraction = ResultSampleFraction required for selected CharacteristicName error-CharacteristicName-StableIsotope-MethodSpeciation = Isotope MethodSpeciation required for selected CharacteristicName. For guidance, please see Best Practices for Reporting Isotope Data (https://datastream.org/en-ca/documentation/isotope-data-guidance) +error-CharacteristicName-WaterLevel-ActivityDepthAltitudeReferencePoint = ActivityDepthAltitudeReferencePoint is required for CharacteristicName 'Water level in well, depth from a reference point' error-CSVInjection = Invalid starting character. `=`, `+`, `-`, `@`, `[space]`, `[tab]`, `[carriage return]` are not valid characters for the beginning of text columns +error-GroundwaterFields-ActivityMediaName-Groundwater = ActivityMediaName must be 'Groundwater' or 'Porewater' when any groundwater- or porewater-specific field is reported +error-MonitoringLocationType-Well-WellUseType = WellUseType is required when MonitoringLocationType is a well or piezometer +error-MonitoringLocationType-Well-SampleCondition = SampleCondition is required when MonitoringLocationType is a well or piezometer (except for Continuous Time Series activities) error-ResultDetectionCondition-ResultDetectionQuantitationLimit-above-below = ResultDetectionQuantitationLimit fields are required when ResultDetectionCondition is above or below Detection/Quantification limits error-ResultDetectionCondition-ResultDetectionQuantitationLimit-not-detect = When ResultDetectionCondition is set to 'Not Detected' or 'Detected Not Quantified' the ResultDetectionQuantitationLimit fields should not be populated error-ResultDetectionCondition-ResultValue = Only one of ResultValue or ResultDetectionCondition should be populated @@ -96,10 +104,11 @@ error-ResultDetectionQuantitationLimitUnit-Salinity = ResultDetectionQuantitatio error-ResultUnit-Salinity = ResultUnit for CharacteristicName Salinity should be ppth (parts per thousand), ppm (parts per million), PSU (practical salinity unit), mg/L (milligrams per litre), or g/L (grams per litre) ## quality-control -qc-ActivityMediaName-ActivityDepthHeightMeasure-Maximum = ActivityDepthHeightMeasure should be below 0 +qc-ActivityMediaName-ActivityDepthHeightMeasure-Maximum = ActivityDepthHeightMeasure should be reported as a negative value. qc-ActivityType-CTS-ActivityStartTimeZone = ActivityStartTimeZone should be included when ActivityType is 'Field Msr/Obs-Continuous Time Series' qc-ActivityType-CTS-ActivityStartTimeZone-UTC = When ActivityStartTimeZone is '+00:00', consider adding a note in your dataset metadata to let others know your data are reported in UTC/GMT qc-ActivityType-ResultSampleFraction = ResultSampleFraction may not be relevant for selected ActivityType, except for nutrient parameters, which should follow guidance in Best Practices Guide for Nutrient Data (see https://datastream.org/en-ca/documentation/nutrient-data-guidance) +qc-AnalysisStartTime-AnalysisStartTimeZone = AnalysisStartTimeZone should be included when AnalysisStartTime is provided # qc-CharacteristicName-Deprecated = CharacteristicName has been deprecated. Review most up to date template for alternate or contact us. qc-CharacteristicName-ActivityMediaName-AmbientAir = The ActivityMediaName for this CharacteristicName should be "Ambient Air" qc-CharacteristicName-ActivityType-Surrogate = When reported as a percentage, this characteristic may be a surrogate standard. If this is the case, please use the ActivityType 'Quality Control Sample-Lab Surrogate Control Standard' or 'Quality Control Sample-Lab Surrogate Control Standard Duplicate' @@ -119,6 +128,7 @@ qc-ResultDetectionQuantitationLimitUnit-NoValue = ResultDetectionQuantitationLim qc-ResultDetectionQuantitationLimitUnit-Turbidity = ResultUnit should be used with CharacteristicName 'Turbidity' qc-ResultSampleFraction-ActivityMediaName-Sediment = If a sequential extraction was performed on a water sample, or particulates in a water sample, information regarding the reagents used should be indicated in the ResultComment, not the ResultSampleFraction. For guidance on how to select ResultSampleFraction in this case, please refer to our Best practices for submitting metal-series data to DataStream (https://datastream.org/en-ca/documentation/metal-series-data-guidance) qc-ResultSampleFraction-FreeAvailable = The ResultSampleFraction 'Free Available' may not be relevant for the selected CharacteristicName +qc-ResultStatusID-Deprecated = ResultStatusID "Final" and "Accepted" are no longer allowed values. Please use the allowed values "Preliminary", "Provisional", or "Validated". # qc-ResultUnit-Elevation = The unit for the CharacteristicName should be an elevation. ** TODO: MASL not a unit, needs to be added to QC rule lists qc-CharacteristicName-pH-ResultUnit-None = The unit for the CharacteristicName should be None qc-CharacteristicName-Ratio-ResultUnit-None = The unit for the CharacteristicName should be None @@ -137,7 +147,7 @@ qc-WhiteSpace = Leading or trailing white space detected in character string ## quality-control (code) qc-RowCount = A dataset requires at least one row. qc-ColumnCount = Should match column count from the first row -qc-DatasetName = The DatasetName in this CSV file does not match the dataset’s metadata. If you proceed, dataset downloads will include the existing dataset name from the metadata. This CSV file containing the mismatched dataset name will still be available via the dataset Changelog. To match your dataset name across all records, update the DatasetName field in the CSV, or update the dataset's metadata. +qc-DatasetName = The DatasetName in this CSV file does not match the dataset's metadata. If you proceed, dataset downloads will include the existing dataset name from the metadata. This CSV file containing the mismatched dataset name will still be available via the dataset Changelog. To match your dataset name across all records, update the DatasetName field in the CSV, or update the dataset's metadata. qc-Date-Future = Contains date in the future qc-ActivityStartDate-Future = {qc-Date-Future} qc-ActivityEndDate-Future = {qc-Date-Future} @@ -147,3 +157,5 @@ qc-MonitoringLocationName-Duplicate = Multiple MonitoringLocationNames are used qc-MonitoringLocationType-Duplicate = Multiple MonitoringLocationTypes are used with the same MonitoringLocationID qc-MonitoringLocationHorizontalCoordinateReferenceSystem-Duplicate = Multiple MonitoringLocationHorizontalCoordinateReferenceSystems are used with the same MonitoringLocationID qc-ActivityTypeContinuous = When there are >= 24 observations of the same type on the same day, ActivityType is expected to equal 'Field Msr/Obs-Continuous Time Series' +error-ActivityMediaName-Groundwater-Mixed = Groundwater and surface water data must be uploaded in separate datasets. If ActivityMediaName is 'Groundwater' and/or 'Porewater' on any row, file cannot contain any other ActivityMediaName values. +error-ActivityType-Continuous-Mixed = Continuous time-series data must be uploaded in a separate dataset from discrete (single point-in-time) data diff --git a/schemas/data/src/logic/ActivityDepthHeightMeasure-ActivityDepthAltitudeReferencePoint.json b/schemas/data/src/logic/ActivityDepthHeightMeasure-ActivityDepthAltitudeReferencePoint.json new file mode 100644 index 00000000..b78088d2 --- /dev/null +++ b/schemas/data/src/logic/ActivityDepthHeightMeasure-ActivityDepthAltitudeReferencePoint.json @@ -0,0 +1,25 @@ +{ + "$id": "https://datastream.org/schema/data/logic/ActivityDepthHeightMeasure-ActivityDepthAltitudeReferencePoint.json", + "title": "ActivityDepthHeightMeasure-ActivityDepthAltitudeReferencePoint", + "description": "ActivityDepthAltitudeReferencePoint is required when ActivityDepthHeightMeasure is reported", + "errorMessage": "error-ActivityDepthHeightMeasure-ActivityDepthAltitudeReferencePoint", + "if": { + "type": "object", + "unevaluatedProperties": true, + "properties": { + "ActivityMediaName": { + "enum": ["Groundwater", "Porewater"] + }, + "ActivityDepthHeightMeasure": true + }, + "required": ["ActivityMediaName", "ActivityDepthHeightMeasure"] + }, + "then": { + "type": "object", + "unevaluatedProperties": true, + "properties": { + "ActivityDepthAltitudeReferencePoint": true + }, + "required": ["ActivityDepthAltitudeReferencePoint"] + } +} diff --git a/schemas/data/src/logic/ActivityMediaName-ActivityDepthHeightMeasure-Maximum.json b/schemas/data/src/logic/ActivityMediaName-ActivityDepthHeightMeasure-Maximum.json new file mode 100644 index 00000000..b63e96bf --- /dev/null +++ b/schemas/data/src/logic/ActivityMediaName-ActivityDepthHeightMeasure-Maximum.json @@ -0,0 +1,35 @@ +{ + "$id": "https://datastream.org/schema/data/logic/ActivityMediaName-ActivityDepthHeightMeasure-Maximum.json", + "title": "ActivityMediaName-ActivityDepthHeightMeasure-Maximum", + "description": "", + "errorMessage": "error-ActivityMediaName-ActivityDepthHeightMeasure-Maximum", + "if": { + "type": "object", + "unevaluatedProperties": true, + "properties": { + "ActivityMediaName": { + "enum": [ + "Ocean Water", + "Rainwater", + "Stormwater", + "Subsurface Soil/Sediment", + "Surface Water", + "Surface Water Sediment" + ] + }, + "ActivityDepthHeightMeasure": true + }, + "required": ["ActivityMediaName", "ActivityDepthHeightMeasure"] + }, + "then": { + "type": "object", + "unevaluatedProperties": true, + "properties": { + "ActivityDepthHeightMeasure": { + "type": "number", + "maximum": 0 + } + }, + "required": ["ActivityDepthHeightMeasure"] + } +} diff --git a/schemas/data/src/logic/ActivityMediaName-Groundwater-DepthMeasure.json b/schemas/data/src/logic/ActivityMediaName-Groundwater-DepthMeasure.json new file mode 100644 index 00000000..663d7f19 --- /dev/null +++ b/schemas/data/src/logic/ActivityMediaName-Groundwater-DepthMeasure.json @@ -0,0 +1,27 @@ +{ + "$id": "https://datastream.org/schema/data/logic/ActivityMediaName-Groundwater-DepthMeasure.json", + "title": "ActivityMediaName-Groundwater-DepthMeasure", + "description": "At least one depth measure (BoreholeDepthMeasure, WellDepthMeasure, WellOpenIntervalTopMeasure, WellOpenIntervalBottomMeasure, or ActivityDepthHeightMeasure) must be populated when ActivityMediaName is Groundwater or Porewater", + "errorMessage": "error-ActivityMediaName-Groundwater-DepthMeasure", + "if": { + "type": "object", + "unevaluatedProperties": true, + "properties": { + "ActivityMediaName": { + "enum": ["Groundwater", "Porewater"] + } + }, + "required": ["ActivityMediaName"] + }, + "then": { + "type": "object", + "unevaluatedProperties": true, + "anyOf": [ + { "required": ["ActivityDepthHeightMeasure"] }, + { "required": ["BoreholeDepthMeasure"] }, + { "required": ["WellDepthMeasure"] }, + { "required": ["WellOpenIntervalTopMeasure"] }, + { "required": ["WellOpenIntervalBottomMeasure"] } + ] + } +} diff --git a/schemas/data/src/logic/ActivityType-CTS-ActivityStartTime.json b/schemas/data/src/logic/ActivityType-CTS-ActivityStartTime.json index db1e7913..240c544f 100644 --- a/schemas/data/src/logic/ActivityType-CTS-ActivityStartTime.json +++ b/schemas/data/src/logic/ActivityType-CTS-ActivityStartTime.json @@ -8,14 +8,10 @@ "unevaluatedProperties": true, "properties": { "ActivityType": { - "enum": [ - "Field Msr/Obs-Continuous Time Series" - ] + "enum": ["Field Msr/Obs-Continuous Time Series"] } }, - "required": [ - "ActivityType" - ] + "required": ["ActivityType"] }, "then": { "type": "object", @@ -23,8 +19,6 @@ "properties": { "ActivityStartTime": true }, - "required": [ - "ActivityStartTime" - ] + "required": ["ActivityStartTime"] } -} \ No newline at end of file +} diff --git a/schemas/data/src/logic/CSVInjection.json b/schemas/data/src/logic/CSVInjection.json index 95ad7cc8..e504181a 100644 --- a/schemas/data/src/logic/CSVInjection.json +++ b/schemas/data/src/logic/CSVInjection.json @@ -29,6 +29,21 @@ }, "LaboratorySampleID": { "$ref": "../definitions.json#/definitions/csv-injection" + }, + "EventID": { + "$ref": "../definitions.json#/definitions/csv-injection" + }, + "WellID": { + "$ref": "../definitions.json#/definitions/csv-injection" + }, + "AquiferCode": { + "$ref": "../definitions.json#/definitions/csv-injection" + }, + "SampleCollectionMethodID": { + "$ref": "../definitions.json#/definitions/csv-injection" + }, + "SampleCollectionMethodName": { + "$ref": "../definitions.json#/definitions/csv-injection" } }, "required": [] diff --git a/schemas/data/src/logic/CharacteristicName-Depth-ActivityDepthHeightMeasure.json b/schemas/data/src/logic/CharacteristicName-Depth-ActivityDepthHeightMeasure.json new file mode 100644 index 00000000..410b827d --- /dev/null +++ b/schemas/data/src/logic/CharacteristicName-Depth-ActivityDepthHeightMeasure.json @@ -0,0 +1,39 @@ +{ + "$id": "https://datastream.org/schema/data/logic/CharacteristicName-Depth-ActivityDepthHeightMeasure.json", + "title": "CharacteristicName-Depth-ActivityDepthHeightMeasure", + "description": "When CharacteristicName measures depth/height, the depth is the result itself, so ActivityDepthHeightMeasure/Unit should not be populated.", + "errorMessage": "error-CharacteristicName-Depth-ActivityDepthHeightMeasure", + "if": { + "type": "object", + "unevaluatedProperties": true, + "properties": { + "CharacteristicName": { + "enum": [ + "Bankfull Height", + "Depth of water column", + "Depth, Secchi disk depth", + "Depth, snow cover", + "Ice thickness", + "Light attenuation, depth at 99%", + "Transparency, Secchi tube with disk", + "Transparency, tube with disk", + "Water level", + "Water level (probe)", + "Water level elevation", + "Water level in well, depth from a reference point", + "White ice thickness" + ] + } + }, + "required": ["CharacteristicName"] + }, + "then": { + "type": "object", + "unevaluatedProperties": true, + "properties": { + "ActivityDepthHeightMeasure": false, + "ActivityDepthHeightUnit": false + }, + "required": [] + } +} diff --git a/schemas/data/src/logic/CharacteristicName-MethodSpeciation.json b/schemas/data/src/logic/CharacteristicName-MethodSpeciation.json index 7d546a9c..c9a42a29 100644 --- a/schemas/data/src/logic/CharacteristicName-MethodSpeciation.json +++ b/schemas/data/src/logic/CharacteristicName-MethodSpeciation.json @@ -34,6 +34,7 @@ "Organic Nitrogen", "Organic phosphorus", "Orthophosphate", + "Oxygen-17", "Oxygen-18", "Oxygen-18/Oxygen-16 ratio", "Phosphorus, hydrolyzable", diff --git a/schemas/data/src/logic/CharacteristicName-StableIsotope-MethodSpeciation.json b/schemas/data/src/logic/CharacteristicName-StableIsotope-MethodSpeciation.json index 2d604162..bb84c95b 100644 --- a/schemas/data/src/logic/CharacteristicName-StableIsotope-MethodSpeciation.json +++ b/schemas/data/src/logic/CharacteristicName-StableIsotope-MethodSpeciation.json @@ -11,6 +11,7 @@ "enum": [ "Nitrogen-15", "Nitrogen-15/Nitrogen-14 ratio", + "Oxygen-17", "Oxygen-18", "Oxygen-18/Oxygen-16 ratio", "delta carbon-13/carbon-12", diff --git a/schemas/data/src/logic/CharacteristicName-WaterLevel-ActivityDepthAltitudeReferencePoint.json b/schemas/data/src/logic/CharacteristicName-WaterLevel-ActivityDepthAltitudeReferencePoint.json new file mode 100644 index 00000000..e0ad3d4c --- /dev/null +++ b/schemas/data/src/logic/CharacteristicName-WaterLevel-ActivityDepthAltitudeReferencePoint.json @@ -0,0 +1,27 @@ +{ + "$id": "https://datastream.org/schema/data/logic/CharacteristicName-WaterLevel-ActivityDepthAltitudeReferencePoint.json", + "title": "CharacteristicName-WaterLevel-ActivityDepthAltitudeReferencePoint", + "description": "ActivityDepthAltitudeReferencePoint is required when CharacteristicName is 'Water level in well, depth from a reference point'", + "errorMessage": "error-CharacteristicName-WaterLevel-ActivityDepthAltitudeReferencePoint", + "if": { + "type": "object", + "unevaluatedProperties": true, + "properties": { + "ActivityMediaName": { + "enum": ["Groundwater", "Porewater"] + }, + "CharacteristicName": { + "enum": ["Water level in well, depth from a reference point"] + } + }, + "required": ["ActivityMediaName", "CharacteristicName"] + }, + "then": { + "type": "object", + "unevaluatedProperties": true, + "properties": { + "ActivityDepthAltitudeReferencePoint": true + }, + "required": ["ActivityDepthAltitudeReferencePoint"] + } +} diff --git a/schemas/data/src/logic/GroundwaterFields-ActivityMediaName-Groundwater.json b/schemas/data/src/logic/GroundwaterFields-ActivityMediaName-Groundwater.json new file mode 100644 index 00000000..198c8e21 --- /dev/null +++ b/schemas/data/src/logic/GroundwaterFields-ActivityMediaName-Groundwater.json @@ -0,0 +1,49 @@ +{ + "$id": "https://datastream.org/schema/data/logic/GroundwaterFields-ActivityMediaName-Groundwater.json", + "title": "GroundwaterFields-ActivityMediaName-Groundwater", + "description": "ActivityMediaName must be Groundwater or Porewater when any Groundwater-specific field is reported", + "errorMessage": "error-GroundwaterFields-ActivityMediaName-Groundwater", + "if": { + "type": "object", + "unevaluatedProperties": true, + "anyOf": [ + { "required": ["MonitoringLocationVerticalCoordinateReferenceSystem"] }, + { "required": ["MonitoringLocationVerticalCollectionMethod"] }, + { "required": ["MonitoringLocationVerticalAccuracyMeasure"] }, + { "required": ["MonitoringLocationVerticalAccuracyUnit"] }, + { "required": ["WellID"] }, + { "required": ["WellIDContext"] }, + { "required": ["WellUseType"] }, + { "required": ["AquiferCode"] }, + { "required": ["AquiferUnitName"] }, + { "required": ["AquiferType"] }, + { "required": ["AquiferUnitPorosityType"] }, + { "required": ["LithologyType"] }, + { "required": ["WellDepthMeasure"] }, + { "required": ["WellDepthUnit"] }, + { "required": ["BoreholeDepthMeasure"] }, + { "required": ["BoreholeDepthUnit"] }, + { "required": ["WellOpenIntervalTopMeasure"] }, + { "required": ["WellOpenIntervalTopUnit"] }, + { "required": ["WellOpenIntervalBottomMeasure"] }, + { "required": ["WellOpenIntervalBottomUnit"] }, + { "required": ["ActivityDepthAltitudeReferencePoint"] }, + { "required": ["ActivityDepthAltitudeReferencePointMeasure"] }, + { "required": ["ActivityDepthAltitudeReferencePointUnit"] }, + { "required": ["SampleCollectionMethodID"] }, + { "required": ["SampleCollectionMethodContext"] }, + { "required": ["SampleCollectionMethodName"] }, + { "required": ["SampleCondition"] } + ] + }, + "then": { + "type": "object", + "unevaluatedProperties": true, + "properties": { + "ActivityMediaName": { + "enum": ["Groundwater", "Porewater"] + } + }, + "required": ["ActivityMediaName"] + } +} diff --git a/schemas/data/src/logic/MonitoringLocationType-Well-SampleCondition.json b/schemas/data/src/logic/MonitoringLocationType-Well-SampleCondition.json new file mode 100644 index 00000000..21f59cfd --- /dev/null +++ b/schemas/data/src/logic/MonitoringLocationType-Well-SampleCondition.json @@ -0,0 +1,38 @@ +{ + "$id": "https://datastream.org/schema/data/logic/MonitoringLocationType-Well-SampleCondition.json", + "title": "MonitoringLocationType-Well-SampleCondition", + "description": "SampleCondition is required when MonitoringLocationType contains 'Well' or 'Piezometer' and ActivityType is NOT 'Field Msr/Obs-Continuous Time Series'", + "errorMessage": "error-MonitoringLocationType-Well-SampleCondition", + "if": { + "type": "object", + "unevaluatedProperties": true, + "properties": { + "ActivityMediaName": { + "enum": ["Groundwater", "Porewater"] + }, + "MonitoringLocationType": { + "enum": [ + "Dug Well", + "Multilevel Well", + "Nested Well", + "Piezometer", + "Well" + ] + }, + "ActivityType": { + "not": { + "enum": ["Field Msr/Obs-Continuous Time Series"] + } + } + }, + "required": ["ActivityMediaName", "MonitoringLocationType", "ActivityType"] + }, + "then": { + "type": "object", + "unevaluatedProperties": true, + "properties": { + "SampleCondition": true + }, + "required": ["SampleCondition"] + } +} diff --git a/schemas/data/src/logic/MonitoringLocationType-Well-WellUseType.json b/schemas/data/src/logic/MonitoringLocationType-Well-WellUseType.json new file mode 100644 index 00000000..b7302d87 --- /dev/null +++ b/schemas/data/src/logic/MonitoringLocationType-Well-WellUseType.json @@ -0,0 +1,33 @@ +{ + "$id": "https://datastream.org/schema/data/logic/MonitoringLocationType-Well-WellUseType.json", + "title": "MonitoringLocationType-Well-WellUseType", + "description": "WellUseType is required when MonitoringLocationType contains 'Well' or 'Piezometer'", + "errorMessage": "error-MonitoringLocationType-Well-WellUseType", + "if": { + "type": "object", + "unevaluatedProperties": true, + "properties": { + "ActivityMediaName": { + "enum": ["Groundwater", "Porewater"] + }, + "MonitoringLocationType": { + "enum": [ + "Dug Well", + "Multilevel Well", + "Nested Well", + "Piezometer", + "Well" + ] + } + }, + "required": ["ActivityMediaName", "MonitoringLocationType"] + }, + "then": { + "type": "object", + "unevaluatedProperties": true, + "properties": { + "WellUseType": true + }, + "required": ["WellUseType"] + } +} diff --git a/schemas/data/src/logic/ResultDetectionCondition-ResultValue.json b/schemas/data/src/logic/ResultDetectionCondition-ResultValue.json index a4f07a41..8f8fcdcb 100644 --- a/schemas/data/src/logic/ResultDetectionCondition-ResultValue.json +++ b/schemas/data/src/logic/ResultDetectionCondition-ResultValue.json @@ -11,7 +11,6 @@ "ResultValue": true, "ResultDetectionCondition": false }, - "maxProperties": 42, "required": ["ResultValue"] }, { @@ -21,7 +20,6 @@ "ResultValue": false, "ResultDetectionCondition": true }, - "maxProperties": 42, "required": ["ResultDetectionCondition"] } ] diff --git a/schemas/data/src/logic/ResultUnit-Salinity.json b/schemas/data/src/logic/ResultUnit-Salinity.json index 57b06a78..6df00bf0 100644 --- a/schemas/data/src/logic/ResultUnit-Salinity.json +++ b/schemas/data/src/logic/ResultUnit-Salinity.json @@ -1,5 +1,5 @@ { - "$id": "https://datastream.org/schema/data/quality-control/ResultUnit-Salinity.json", + "$id": "https://datastream.org/schema/data/logic/ResultUnit-Salinity.json", "title": "ResultUnit-Salinity", "description": "ResultUnit that require special unit notation.", "errorMessage": "error-ResultUnit-Salinity", diff --git a/schemas/data/src/lookup/ActivityType-ActivityGroupType.json b/schemas/data/src/lookup/ActivityType-ActivityGroupType.json index b370015e..1b5d7366 100644 --- a/schemas/data/src/lookup/ActivityType-ActivityGroupType.json +++ b/schemas/data/src/lookup/ActivityType-ActivityGroupType.json @@ -1,67 +1,37 @@ { - "Field Msr/Obs": "Field Set", - "Field Msr/Obs-Habitat Assessment": "Field Set", - "Field Msr/Obs-Incidental": "Field Set", - "Field Msr/Obs-Portable Data Logger": "Field Set", - "Quality Control Alternative Measurement Sensitivity": "QC Sample", - "Quality Control Alternative Measurement Sensitivity Plus": "QC Sample", - "Quality Control Field Calibration Check": "QC Sample", - "Quality Control Field Replicate Habitat Assessment": "QC Sample", - "Quality Control Field Replicate Msr/Obs": "QC Sample", - "Quality Control Field Replicate Portable Data Logger": "QC Sample", - "Quality Control Field Replicate Sample-Composite": "QC Sample", - "Quality Control Field Sample Equipment Rinsate Blank": "QC Sample", - "Quality Control Lab Sample Equipment Rinsate Blank": "QC Sample", - "Quality Control Sample-Blind Duplicate": "QC Sample", - "Quality Control Sample-Equipment Blank": "QC Sample", - "Quality Control Sample-Field Ambient Conditions Blank": "QC Sample", - "Quality Control Sample-Field Blank": "QC Sample", - "Quality Control Sample-Field Replicate": "QC Sample", - "Quality Control Sample-Field Spike": "QC Sample", - "Quality Control Sample-Field Surrogate Spike": "QC Sample", - "Quality Control Sample-Inter-lab Split": "QC Sample", - "Quality Control Sample-Lab Blank": "QC Sample", - "Quality Control Sample-Lab Continuing Calibration Verification": "QC Sample", - "Quality Control Sample-Lab Control Sample/Blank Spike": "QC Sample", - "Quality Control Sample-Lab Control Sample/Blank Spike Duplicate": "QC Sample", - "Quality Control Sample-Lab Control Standard": "QC Sample", - "Quality Control Sample-Lab Control Standard Duplicate": "QC Sample", - "Quality Control Sample-Lab Duplicate": "QC Sample", - "Quality Control Sample-Lab Initial Calib Certified Reference Material": "QC Sample", - "Quality Control Sample-Lab Initial Calibration Verification": "QC Sample", - "Quality Control Sample-Lab Matrix Spike": "QC Sample", - "Quality Control Sample-Lab Matrix Spike Duplicate": "QC Sample", - "Quality Control Sample-Lab Re-Analysis": "QC Sample", - "Quality Control Sample-Lab Spike": "QC Sample", - "Quality Control Sample-Lab Spike Duplicate": "QC Sample", - "Quality Control Sample-Lab Spike of a Lab Blank": "QC Sample", - "Quality Control Sample-Lab Split": "QC Sample", - "Quality Control Sample-Lab Surrogate Control Standard": "QC Sample", - "Quality Control Sample-Lab Surrogate Control Standard Duplicate": "QC Sample", - "Quality Control Sample-Lab Surrogate Method Blank": "QC Sample", - "Quality Control Sample-Measurement Precision Sample": "QC Sample", - "Quality Control Sample-Other": "QC Sample", - "Quality Control Sample-Post-preservative Blank": "QC Sample", - "Quality Control Sample-Pre-preservative Blank": "QC Sample", - "Quality Control Sample-Reagent Blank": "QC Sample", - "Quality Control Sample-Reference Sample": "QC Sample", - "Quality Control Sample-Trip Blank": "QC Sample", - "Quality Control-Negative Control": "QC Sample", - "Sample-Composite With Parents": "Subsample", - "Sample-Composite Without Parents": "Subsample", - "Sample-Depletion Replicate": "Subsample", - "Sample-Field Split": "Subsample", - "Sample-Field Subsample": "Subsample", - "Sample-Integrated Cross-Sectional Profile": "Subsample", - "Sample-Integrated Flow Proportioned": "Subsample", - "Sample-Integrated Horizontal and Vertical Composite Profile": "Subsample", - "Sample-Integrated Horizontal Profile": "Subsample", - "Sample-Integrated Time Series": "Subsample", - "Sample-Integrated Vertical Profile": "Subsample", - "Sample-Negative Control": "Subsample", - "Sample-Other": "Subsample", - "Sample-Positive Control": "Subsample", - "Sample-Routine": "Subsample", - "Sample-Routine Resample": "Subsample", + "Field Msr/Obs-Continuous Time Series": "Continuous Data", + "Field Msr/Obs": "Field Measure", + "Field Msr/Obs-Portable Data Logger": "Field Measure", + "Field Msr/Obs-Integrated Flow Proportioned": "Field Measure", + "Field Msr/Obs-Integrated Time Series": "Field Measure", + "Field Msr/Obs-Integrated Vertical Profile": "Field Measure", + "Sample-Composite With Parents": "Lab Sample", + "Sample-Composite Without Parents": "Lab Sample", + "Sample-Field Split": "Lab Sample", + "Sample-Integrated Flow Proportioned": "Lab Sample", + "Sample-Integrated Horizontal and Vertical Composite Profile": "Lab Sample", + "Sample-Integrated Horizontal Profile": "Lab Sample", + "Sample-Integrated Time Series": "Lab Sample", + "Sample-Integrated Vertical Profile": "Lab Sample", + "Sample-Other": "Lab Sample", + "Sample-Routine": "Lab Sample", + "Quality Control Field Replicate Msr/Obs": "Quality Control - Field Measure", + "Quality Control Field Replicate Portable Data Logger": "Quality Control - Field Measure", + "Quality Control-Calibration Check": "Quality Control - Field Measure", + "Quality Control Field Sample Equipment Rinsate Blank": "Quality Control - Lab Sample", + "Quality Control Sample-Blind Duplicate": "Quality Control - Lab Sample", + "Quality Control Sample-Field Blank": "Quality Control - Lab Sample", + "Quality Control Sample-Field Replicate": "Quality Control - Lab Sample", + "Quality Control Sample-Lab Blank": "Quality Control - Lab Sample", + "Quality Control Sample-Lab Duplicate": "Quality Control - Lab Sample", + "Quality Control Sample-Lab Matrix Spike": "Quality Control - Lab Sample", + "Quality Control Sample-Lab Re-Analysis": "Quality Control - Lab Sample", + "Quality Control Sample-Lab Spike": "Quality Control - Lab Sample", + "Quality Control Sample-Lab Split": "Quality Control - Lab Sample", + "Quality Control Sample-Lab Surrogate Control Standard": "Quality Control - Lab Sample", + "Quality Control Sample-Lab Surrogate Control Standard Duplicate": "Quality Control - Lab Sample", + "Quality Control Sample-Reference Sample": "Quality Control - Lab Sample", + "Quality Control Sample-Trip Blank": "Quality Control - Lab Sample", + "Sample-Positive Control": "Quality Control - Lab Sample", "Unspecified": "Unspecified" } diff --git a/schemas/data/src/lookup/CharacteristicName-CharacteristicWQXGroup.json b/schemas/data/src/lookup/CharacteristicName-CharacteristicWQXGroup.json index 39b31c07..2e6498f7 100644 --- a/schemas/data/src/lookup/CharacteristicName-CharacteristicWQXGroup.json +++ b/schemas/data/src/lookup/CharacteristicName-CharacteristicWQXGroup.json @@ -7,45 +7,53 @@ "1,2-Dichloroethane": "Organics, Other", "1,2-Dichloropropane": "Organics, Other", "1,2,3,4-Tetrahydronaphthalene": "Organics, Other", - "1,2,3,4,6,7,8-Heptachlorodibenzo-p-dioxin-C13":"Organics, Other", - "1,2,3,4,6,7,8-Heptachlorodibenzofuran-C13":"Organics, Other", - "1,2,3,4,7,8,9-Heptachlorodibenzofuran-13C12":"Organics, Other", - "1,2,3,7,8-Pentachlorodibenzo-p-dioxin-C13":"Organics, Other", - "1,2,3,7,8-Pentachlorodibenzofuran-C13":"Organics, Other", + "1,2,3,4,6,7,8-Heptachlorodibenzo-p-dioxin-C13": "Organics, Other", + "1,2,3,4,6,7,8-Heptachlorodibenzofuran-C13": "Organics, Other", + "1,2,3,4,7,8,9-Heptachlorodibenzofuran-13C12": "Organics, Other", + "1,2,3,7,8-Pentachlorodibenzo-p-dioxin-C13": "Organics, Other", + "1,2,3,7,8-Pentachlorodibenzofuran-C13": "Organics, Other", "1,2,6-Trimethylphenanthrene": "Organics, Other", - "1,3-Butadiene":"Organics, Other", + "1,3-Butadiene": "Organics, Other", "1,3-Dichlorobenzene": "Organics, Other", "1,4,6,7-Tetramethylnaphthalene": "Organics, Other", "1,7-Dimethylfluorene": "Organics, Other", "1,7-Dimethylphenanthrene": "Organics, Other", "1,8-Dimethylphenanthrene": "Organics, Other", - "1H,1H, 2H, 2H-Perfluorodecane sulfonic acid":"PFAS,Perfluorinated Alkyl Substance", - "2-Choro-6-ethylamino-4-amino-s-triazine":"Organics, Other", + "1H,1H, 2H, 2H-Perfluorodecane sulfonic acid": "PFAS,Perfluorinated Alkyl Substance", + "2-Choro-6-ethylamino-4-amino-s-triazine": "Organics, Other", "2-Fluorobiphenyl": "Organics, Other", "2-Methyldibenzothiophenes/3-Methyldibenzothiophenes": "Organics, Other", "2-Methylfluorene": "Organics, Other", "2-Methylnaphthalene-D10": "Organics, Other", - "2-Pentanol":"Organics, Other", + "2-Pentanol": "Organics, Other", "2,3,3-tris(4-methoxyphenyl)-N,N-dimethylprop-2-en-1-amine": "Organics, Pesticide", "2,3,4,5- & 2,3,5,6- Tetrachlorophenol": "Organics, Other", - "2,3,4,7,8-Pentachlorodibenzofuran-C13":"Organics, Other", - "2,3,7,8-Tetrachlorodibenzo-p-dioxin-C13":"Organics, Other", - "2,3,7,8-Tetrachlorodibenzofuran-C13":"Organics, Other", + "2,3,4,7,8-Pentachlorodibenzofuran-C13": "Organics, Other", + "2,3,7,8-Tetrachlorodibenzo-p-dioxin-C13": "Organics, Other", + "2,3,7,8-Tetrachlorodibenzofuran-C13": "Organics, Other", "2,4- & 2,5-Dichlorophenol": "Organics, Other", "2,4-DB": "Organics, Pesticide", "2,4-Dichlorophenol-d3": "Organics, Pesticide", "2,4-Dimethyldibenzothiophene": "Organics, Other", "2,4-Dimethylphenol": "Organics, Other", "2,4,5-T": "Organics, Pesticide", + "2,4,6-Trichloroanisole": "Organics, Other", "2,6-Dimethylnaphthalene-D12": "Organics, Other", "2,6-Dimethylphenanthrene": "Organics, Other", "3-Methylfluoranthene/Benzo[a]fluorene": "Organics, Other", "3-Pyridinecarboxamide, N-(2,4-difluorophenyl)-2-[3-(trifluoromethyl)phenoxy]-": "Organics, Other", + "3-Pyridinecarboxamide, N-(2+A2:A19,4-difluorophenyl)-2-[3-(trifluoromethyl)phenoxy]-": "Organics, Pesticide", + "3,4,5-Trichlorocatechol": "Organics, Other", + "3,4,5-Trichloroguaiacol": "Organics, Other", + "3,4,6-Trichloroguaiacol": "Organics, Other", "3,6-Dimethylphenanthrene": "Organics, Other", + "4-Chloro-3-nitrobenzotrifluoride": "Organics, Other", "4-Hydroxy-chlorothalonil": "Organics, Pesticide", - "4-Nonylphenol monoethoxylates":"Organics, Other", - "4-Nonylphenol pentaethoxylates":"Organics, Other", - "4-Nonylphenol tetraethoxylates":"Organics, Other", + "4-Nonylphenol monoethoxylates": "Organics, Other", + "4-Nonylphenol pentaethoxylates": "Organics, Other", + "4-Nonylphenol tetraethoxylates": "Organics, Other", + "4,5-Dichlorocatechol": "Organics, Other", + "4,6-Dichloroguaiacol": "Organics, Other", "4,6-Dimethyldibenzothiophene": "Organics, Other", "5-Methylchrysene/6-Methylchrysene": "Organics, Other", "5,9-Dimethylchrysene": "Organics, Other", @@ -54,9 +62,12 @@ "Acidity": "Physical", "Acridine": "Organics, Other", "Adenosine triphosphate": "Organics, Other", - "Allyl chloride":"Organics, Other", + "Allyl chloride": "Organics, Other", "Ammonia, un-ionized": "Nutrient", - "Asbestos":"Inorganics, Major, Non-metals", + "Antimony-121": "Stable Isotopes", + "ar,ar'-Dimethylbiphenyl": "Organics, Other", + "Arsenic-75": "Stable Isotopes", + "Asbestos": "Inorganics, Major, Non-metals", "BDE-049": "Organics, BDEs", "BDE-071": "Organics, BDEs", "BDE-077": "Organics, BDEs", @@ -66,19 +77,20 @@ "Benzo(a)anthracene-D12": "Organics, Other", "Benzo(b)fluoranthene-D12": "Organics, Other", "Benzo(g,h,i)perylene-D12": "Organics, Other", - "Benzo[ghi]perylene":"Organics, Other", + "Benzo[ghi]perylene": "Organics, Other", "Biphenyl-d10": "Organics, Other", "Bis(2-ethoxyethyl) phthalate": "Organics, Other", - "Bromochloromethane":"Organics, Other", + "Bromochloromethane": "Organics, Other", "Bromophos-ethyl": "Organics, Pesticide", - "Bromopropylate":"Organics, Pesticide", + "Bromopropylate": "Organics, Pesticide", + "Bupirimate": "Organics, Pesticide", "Butyraldehyde": "Organics, Other", "C4-Fluorenes": "Organics, Other", "Carbaryl-d7": "Organics, Pesticide", "Carbon-13": "Stable Isotopes", "Cation/anion ratio": "Physical", "CFC-12": "Organics, Other", - "Chlorine dioxide":"Inorganics, Major, Non-metals", + "Chlorine dioxide": "Inorganics, Major, Non-metals", "Chlorine, Free Residual": "Inorganics, Major, Non-metals", "Chlorine, Total Residual": "Inorganics, Major, Non-metals", "Chlorite": "Inorganics, Major, Non-metals", @@ -89,14 +101,16 @@ "Chlorophyll a, uncorrected for pheophytin": "Biological, Photosynthetic Pigments", "Chromium-52": "Stable Isotopes", "Chromium-53": "Stable Isotopes", - "cis-Cypermethrin":"Organics, Pesticide", + "cis-Cypermethrin": "Organics, Pesticide", "cis-Mevinphos": "Organics, Pesticide", "Clarithromycin": "Organics, Other", "Clindamycin": "Organics, Other", "Clodinafop": "Organics, Pesticide", "Clothianidin-d3": "Organics, Pesticide", + "Cobalt-59": "Stable Isotopes", "Cocaine": "Organics, Other", "Coliphage": "Microbiological", + "Copper-63": "Stable Isotopes", "Cyanate": "Organics, Other", "Cyanazine-d5": "Organics, Pesticide", "Cyanide + Thiocyanate": "Inorganics, Minor, Non-metals", @@ -106,7 +120,7 @@ "Decabromodiphenyl ether": "Organics, BDEs", "Depth, Secchi disk depth": "Physical", "Depth, snow cover": "Physical", - "Desmosterol":"Organics, Other", + "Desmosterol": "Organics, Other", "Desthio-prothioconazole": "Organics, Pesticide", "Deuterium/Hydrogen ratio": "Stable Isotopes", "Di(2-ethylhexyl) phthalate": "Organics, Other", @@ -114,17 +128,18 @@ "Dibenzothiophene-D8": "Organics, Other", "Dichlofenthion": "Organics, Pesticide", "Dichlofluanid": "Organics, Pesticide", - "Dihydrocholesterol":"Organics, Other", + "Diclofop": "Organics, Pesticide", + "Dihydrocholesterol": "Organics, Other", "Dimethoate-d6": "Organics, Pesticide", "Dimethyl diselenide": "Organics, Other", - "Dimethyl selenoxide":"Organics, Other", + "Dimethyl selenoxide": "Organics, Other", "Discharge, River/Stream": "Physical", "Docosanoic acid": "Organics, Other", - "epi-Coprostanol":"Organics, Other", + "epi-Coprostanol": "Organics, Other", "Etrimfos": "Organics, Pesticide", "Fenamidone": "Organics, Pesticide", "Fenitrothion-d6": "Organics, Pesticide", - "Fenobucarb":"Organics, Pesticide", + "Fenobucarb": "Organics, Pesticide", "Fenoxaprop-P-ethyl": "Organics, Pesticide", "Fluazinam": "Organics, Pesticide", "Flumetralin": "Organics, Pesticide", @@ -133,9 +148,10 @@ "Glufosinate": "Organics, Pesticide", "Glyoxal": "Organics, Other", "Heptachlor and Heptachlor epoxide": "Organics, Pesticide", - "Heptafluorobutyric acid":"PFAS,Perfluorinated Alkyl Substance", + "Heptadecanoic acid": "Organics, Other", + "Heptafluorobutyric acid": "PFAS,Perfluorinated Alkyl Substance", "Heptanal": "Organics, Other", - "Hexachlorodibenzo-p-dioxin":"Organics, Other", + "Hexachlorodibenzo-p-dioxin": "Organics, Other", "Hexaldehyde": "Organics, Other", "Hexane Extractable Material (HEM)": "Organics, Other", "Hexavalent chromium compounds": "Inorganics, Minor, Metals", @@ -144,10 +160,12 @@ "Hydroxyphenols": "Organics, Other", "Ice cover, floating or solid, as % area estimate": "Physical", "Indene": "Organics, Other", - "Indomethacin":"Organics, Other", - "Inorganic nitrogen (ammonia, nitrate and nitrite)":"Nutrient", + "Indomethacin": "Organics, Other", + "Inorganic nitrogen (ammonia, nitrate and nitrite)": "Nutrient", "Inorganic nitrogen (nitrate and nitrite)": "Nutrient", "Ipconazole": "Organics, Pesticide", + "Iron-57": "Stable Isotopes", + "Iron-related bacteria": "Microbiological", "Isofenphos": "Organics, Pesticide", "Isovaleraldehyde": "Organics, Other", "Lauric acid": "Organics, Other", @@ -156,17 +174,21 @@ "Mandipropamid": "Organics, Pesticide", "Manganese-55": "Stable Isotopes", "Methamphetamine": "Organics, Other", - "Methyl mercaptan":"Organics, Other", + "Methyl mercaptan": "Organics, Other", + "Methylbiphenyl": "Organics, Other", "Methylglyoxal": "Organics, Other", "Methylmercury(1+)": "Inorganics, Minor, Metals", "Metobromuron": "Organics, Pesticide", "Metolachlor-d6": "Organics, Pesticide", "Moisture content": "Physical", + "Molybdenum-98": "Stable Isotopes", "Monochlorodehydroabietic acid": "Organics, Other", "Monolinuron": "Organics, Pesticide", - "N-Ethylperfluorooctanesulfonamide":"PFAS,Perfluorinated Alkyl Substance", + "N-Ethylperfluorooctanesulfonamide": "PFAS,Perfluorinated Alkyl Substance", + "Nickel-60": "Stable Isotopes", "Nitenpyram": "Organics, Pesticide", "Nitrapyrin": "Organics, Pesticide", + "Nitrobenzene-D5": "Organics, Other", "Nitrogen-15/Nitrogen-14 ratio": "Stable Isotopes", "Nitrophenol": "Organics, Other", "Nonanal": "Organics, Other", @@ -185,11 +207,15 @@ "Particle size, 50 mesh, (0.297 mm)": "Physical", "Penflufen": "Organics, Pesticide", "Pentachloroanisole": "Organics, Other", + "perfluorohexane sulfonamido propyl amine": "PFAS,Perfluorinated Alkyl Substance", + "Perfluorohexane sulfonamidopropyl ammonium": "PFAS,Perfluorinated Alkyl Substance", "Petroleum hydrocarbons, total volatile": "Organics, Other", - "pH, lab":"Physical", - "pH, saturated":"Physical", + "pH, lab": "Physical", + "pH, saturated": "Physical", "Phaeophytin - Periphyton (attached)": "Biological, Photosynthetic Pigments", "Phenol, 2,3-dichloro-6-methoxy-": "Organics, Other", + "Phenol, 4-chloro-2-methoxy-": "Organics, Other", + "Phenol, 4,5-dichloro-2-methoxy-": "Organics, Other", "Phenol, dibromo-": "Organics, Other", "Pheophytin a": "Biological, Photosynthetic Pigments", "Pheophytin": "Biological, Photosynthetic Pigments", @@ -213,18 +239,20 @@ "Sandaracopimaric acid": "Organics, Other", "Selenate": "Inorganics, Minor, Non-metals", "Selenite": "Inorganics, Minor, Non-metals", + "Sodium perfluoroethanesulfonate": "PFAS,Perfluorinated Alkyl Substance", "Spirotetramat": "Organics, Pesticide", + "Strontium-88": "Stable Isotopes", "Substrate - sand": "Physical", "Substrate - sediment thickness": "Physical", "Substrate - silt": "Physical", "Sucralose": "Organics, Other", "Sulfoxaflor-13C15N2": "Organics, Pesticide", "Sulfoxaflor": "Organics, Pesticide", - "Sulfur dioxide":"Inorganics, Minor, Non-metals", + "Sulfur dioxide": "Inorganics, Minor, Non-metals", "Sulfur Total": "Inorganics, Major, Non-metals", "Surfactants": "Organics, Other", "Tetrachloro-m-xylene": "Organics, Other", - "Tetrachloroanisole":"Organics, Other", + "Tetrachloroanisole": "Organics, Other", "Thifensulfuron": "Organics, Pesticide", "Thiophanate Methyl": "Organics, Pesticide", "Thiram": "Organics, Pesticide", @@ -232,12 +260,15 @@ "Tolfenamic acid": "Organics, Other", "Total Volatile Hydrocarbons, C6-C10": "Organics, Other", "Total xylenes": "Organics, Other", - "Triadimenol":"Organics, Pesticide", + "Triadimenol": "Organics, Pesticide", "Trichloroacetic acid": "Organics, Other", + "Trichloroveretrols": "Organics, Other", + "Tricosafluoroundecane-1-sulfonic acid sodium salt": "PFAS,Perfluorinated Alkyl Substance", "Trinexapac-Ethyl": "Organics, Pesticide", "Uranium-234/Uranium-238 ratio": "Radiochemical", - "Valeric acid":"Organics, Other", + "Valeric acid": "Organics, Other", "Venlafaxine": "Organics, Other", + "Water level elevation": "Physical", "Weak, dissociable cyanide": "Inorganics, Minor, Non-metals", "Zinc-66": "Stable Isotopes", "Zoxamide": "Organics, Pesticide" diff --git a/schemas/data/src/lookup/CharacteristicName-MeasurementUnit.json b/schemas/data/src/lookup/CharacteristicName-MeasurementUnit.json index bd589abd..8b23822e 100644 --- a/schemas/data/src/lookup/CharacteristicName-MeasurementUnit.json +++ b/schemas/data/src/lookup/CharacteristicName-MeasurementUnit.json @@ -253,6 +253,8 @@ "Isophorone": ["ng/L"], "Isopropanol": ["mg/L"], "Lead": ["ug/L"], + "Light, photosynthetic active radiation (PAR)": ["umol/m2/s"], + "Light, Photosynthetic Photon Flux Density (PPFD)": ["umol/m2/s"], "Limonene": ["mg/L"], "Linuron": ["ug/L"], "Lithium": ["ug/L"], diff --git a/schemas/data/src/primary.json b/schemas/data/src/primary.json index a56aaa08..de2a717d 100644 --- a/schemas/data/src/primary.json +++ b/schemas/data/src/primary.json @@ -1,5 +1,5 @@ { - "$id": "https://datastream.org/schema/data", + "$id": "https://datastream.org/schema/data/primary.json", "$schema": "https://json-schema.org/draft/2020-12/schema#", "title": "DataStream Data Schema", "description": "Water Quality Data Schema based on WQX.", @@ -38,9 +38,72 @@ "MonitoringLocationVerticalUnit": { "$ref": "./definitions.json#/definitions/MonitoringLocationVerticalUnitStrict" }, + "MonitoringLocationVerticalAccuracyMeasure": { + "$ref": "./definitions.json#/definitions/MonitoringLocationVerticalAccuracyMeasure" + }, + "MonitoringLocationVerticalAccuracyUnit": { + "$ref": "./definitions.json#/definitions/MonitoringLocationVerticalAccuracyUnitStrict" + }, + "MonitoringLocationVerticalCollectionMethod": { + "$ref": "./definitions.json#/definitions/MonitoringLocationVerticalCollectionMethodStrict" + }, + "MonitoringLocationVerticalCoordinateReferenceSystem": { + "$ref": "./definitions.json#/definitions/MonitoringLocationVerticalCoordinateReferenceSystemStrict" + }, "MonitoringLocationType": { "$ref": "./definitions.json#/definitions/MonitoringLocationTypeStrict" }, + "WellID": { + "$ref": "./definitions.json#/definitions/WellID" + }, + "WellIDContext": { + "$ref": "./definitions.json#/definitions/WellIDContextStrict" + }, + "WellUseType": { + "$ref": "./definitions.json#/definitions/WellUseTypeStrict" + }, + "AquiferCode": { + "$ref": "./definitions.json#/definitions/AquiferCode" + }, + "AquiferUnitName": { + "$ref": "./definitions.json#/definitions/AquiferUnitNameStrict" + }, + "AquiferType": { + "$ref": "./definitions.json#/definitions/AquiferTypeStrict" + }, + "AquiferUnitPorosityType": { + "$ref": "./definitions.json#/definitions/AquiferUnitPorosityTypeStrict" + }, + "LithologyType": { + "$ref": "./definitions.json#/definitions/LithologyTypeStrict" + }, + "BoreholeDepthMeasure": { + "$ref": "./definitions.json#/definitions/BoreholeDepthMeasure" + }, + "BoreholeDepthUnit": { + "$ref": "./definitions.json#/definitions/BoreholeDepthUnitStrict" + }, + "WellDepthMeasure": { + "$ref": "./definitions.json#/definitions/WellDepthMeasure" + }, + "WellDepthUnit": { + "$ref": "./definitions.json#/definitions/WellDepthUnitStrict" + }, + "WellOpenIntervalTopMeasure": { + "$ref": "./definitions.json#/definitions/WellOpenIntervalTopMeasure" + }, + "WellOpenIntervalTopUnit": { + "$ref": "./definitions.json#/definitions/WellOpenIntervalTopUnitStrict" + }, + "WellOpenIntervalBottomMeasure": { + "$ref": "./definitions.json#/definitions/WellOpenIntervalBottomMeasure" + }, + "WellOpenIntervalBottomUnit": { + "$ref": "./definitions.json#/definitions/WellOpenIntervalBottomUnitStrict" + }, + "EventID": { + "$ref": "./definitions.json#/definitions/EventID" + }, "ActivityType": { "$ref": "./definitions.json#/definitions/ActivityTypeStrict" }, @@ -71,9 +134,30 @@ "ActivityDepthHeightUnit": { "$ref": "./definitions.json#/definitions/ActivityDepthHeightUnitStrict" }, + "ActivityDepthAltitudeReferencePoint": { + "$ref": "./definitions.json#/definitions/ActivityDepthAltitudeReferencePointStrict" + }, + "ActivityDepthAltitudeReferencePointMeasure": { + "$ref": "./definitions.json#/definitions/ActivityDepthAltitudeReferencePointMeasure" + }, + "ActivityDepthAltitudeReferencePointUnit": { + "$ref": "./definitions.json#/definitions/ActivityDepthAltitudeReferencePointUnitStrict" + }, + "SampleCondition": { + "$ref": "./definitions.json#/definitions/SampleConditionStrict" + }, "SampleCollectionEquipmentName": { "$ref": "./definitions.json#/definitions/SampleCollectionEquipmentNameStrict" }, + "SampleCollectionMethodName": { + "$ref": "./definitions.json#/definitions/SampleCollectionMethodName" + }, + "SampleCollectionMethodID": { + "$ref": "./definitions.json#/definitions/SampleCollectionMethodID" + }, + "SampleCollectionMethodContext": { + "$ref": "./definitions.json#/definitions/SampleCollectionMethodContextStrict" + }, "CharacteristicName": { "$ref": "./definitions.json#/definitions/CharacteristicNameStrict" }, @@ -153,8 +237,24 @@ "MonitoringLocationHorizontalAccuracyMeasure": [ "MonitoringLocationHorizontalAccuracyUnit" ], - "MonitoringLocationVerticalMeasure": ["MonitoringLocationVerticalUnit"], + "MonitoringLocationVerticalMeasure": [ + "MonitoringLocationVerticalUnit", + "MonitoringLocationVerticalCollectionMethod", + "MonitoringLocationVerticalCoordinateReferenceSystem" + ], + "MonitoringLocationVerticalAccuracyMeasure": [ + "MonitoringLocationVerticalAccuracyUnit" + ], + "WellID": ["WellIDContext"], + "BoreholeDepthMeasure": ["BoreholeDepthUnit"], + "WellDepthMeasure": ["WellDepthUnit"], + "WellOpenIntervalTopMeasure": ["WellOpenIntervalTopUnit"], + "WellOpenIntervalBottomMeasure": ["WellOpenIntervalBottomUnit"], "ActivityDepthHeightMeasure": ["ActivityDepthHeightUnit"], + "ActivityDepthAltitudeReferencePointMeasure": [ + "ActivityDepthAltitudeReferencePointUnit" + ], + "SampleCollectionMethodID": ["SampleCollectionMethodContext"], "ResultValue": ["ResultUnit"], "ResultDetectionQuantitationLimitMeasure": [ "ResultDetectionQuantitationLimitUnit", @@ -162,7 +262,6 @@ ], "ActivityStartTimeZone": ["ActivityStartTime"], "ActivityEndTimeZone": ["ActivityEndTime"], - "AnalysisStartTime": ["AnalysisStartTimeZone"], "AnalysisStartTimeZone": ["AnalysisStartTime"] } }, @@ -201,6 +300,30 @@ }, { "$ref": "./logic/CSVInjection.json" + }, + { + "$ref": "./logic/MonitoringLocationType-Well-WellUseType.json" + }, + { + "$ref": "./logic/MonitoringLocationType-Well-SampleCondition.json" + }, + { + "$ref": "./logic/ActivityDepthHeightMeasure-ActivityDepthAltitudeReferencePoint.json" + }, + { + "$ref": "./logic/CharacteristicName-WaterLevel-ActivityDepthAltitudeReferencePoint.json" + }, + { + "$ref": "./logic/CharacteristicName-Depth-ActivityDepthHeightMeasure.json" + }, + { + "$ref": "./logic/ActivityMediaName-ActivityDepthHeightMeasure-Maximum.json" + }, + { + "$ref": "./logic/ActivityMediaName-Groundwater-DepthMeasure.json" + }, + { + "$ref": "./logic/GroundwaterFields-ActivityMediaName-Groundwater.json" } ] } diff --git a/schemas/data/src/quality-control.json b/schemas/data/src/quality-control.json index 6d780239..ba4fe23b 100644 --- a/schemas/data/src/quality-control.json +++ b/schemas/data/src/quality-control.json @@ -1,5 +1,5 @@ { - "$id": "https://datastream.org/schema/data/quality-control", + "$id": "https://datastream.org/schema/data/quality-control.json", "$schema": "https://json-schema.org/draft/2020-12/schema#", "$vocabulary": { "https://ajv.js.org/packages/ajv-errors.html": true @@ -21,7 +21,28 @@ "MonitoringLocationHorizontalAccuracyUnit": true, "MonitoringLocationVerticalMeasure": true, "MonitoringLocationVerticalUnit": true, + "MonitoringLocationVerticalAccuracyMeasure": true, + "MonitoringLocationVerticalAccuracyUnit": true, + "MonitoringLocationVerticalCollectionMethod": true, + "MonitoringLocationVerticalCoordinateReferenceSystem": true, "MonitoringLocationType": true, + "WellID": true, + "WellIDContext": true, + "WellUseType": true, + "AquiferCode": true, + "AquiferUnitName": true, + "AquiferType": true, + "AquiferUnitPorosityType": true, + "LithologyType": true, + "BoreholeDepthMeasure": true, + "BoreholeDepthUnit": true, + "WellDepthMeasure": true, + "WellDepthUnit": true, + "WellOpenIntervalTopMeasure": true, + "WellOpenIntervalTopUnit": true, + "WellOpenIntervalBottomMeasure": true, + "WellOpenIntervalBottomUnit": true, + "EventID": true, "ActivityType": true, "ActivityMediaName": true, "ActivityStartDate": true, @@ -68,7 +89,14 @@ }, "ActivityDepthHeightMeasure": true, "ActivityDepthHeightUnit": true, + "ActivityDepthAltitudeReferencePoint": true, + "ActivityDepthAltitudeReferencePointMeasure": true, + "ActivityDepthAltitudeReferencePointUnit": true, + "SampleCondition": true, "SampleCollectionEquipmentName": true, + "SampleCollectionMethodName": true, + "SampleCollectionMethodID": true, + "SampleCollectionMethodContext": true, "CharacteristicName": true, "MethodSpeciation": true, "ResultSampleFraction": true, @@ -122,6 +150,9 @@ { "$ref": "./quality-control/ActivityType-ResultSampleFraction.json" }, + { + "$ref": "./quality-control/AnalysisStartTime-AnalysisStartTimeZone.json" + }, { "$ref": "./quality-control/CharacteristicName-ActivityMediaName-AmbientAir.json" }, @@ -176,6 +207,9 @@ { "$ref": "./quality-control/ResultSampleFraction-FreeAvailable.json" }, + { + "$ref": "./quality-control/ResultStatusID-Deprecated.json" + }, { "$ref": "./quality-control/ResultUnit-Percent.json" }, @@ -203,9 +237,15 @@ { "$ref": "./quality-control/ResultValue-DOY-Range.json" }, + { + "$ref": "quality-control/WhiteSpace-AquiferCode.json" + }, { "$ref": "quality-control/WhiteSpace-DatasetName.json" }, + { + "$ref": "quality-control/WhiteSpace-EventID.json" + }, { "$ref": "quality-control/WhiteSpace-LaboratoryName.json" }, @@ -226,6 +266,15 @@ }, { "$ref": "quality-control/WhiteSpace-ResultComment.json" + }, + { + "$ref": "quality-control/WhiteSpace-SampleCollectionMethodID.json" + }, + { + "$ref": "quality-control/WhiteSpace-SampleCollectionMethodName.json" + }, + { + "$ref": "quality-control/WhiteSpace-WellID.json" } ] } diff --git a/schemas/data/src/quality-control/ActivityMediaName-ActivityDepthHeightMeasure-Maximum.json b/schemas/data/src/quality-control/ActivityMediaName-ActivityDepthHeightMeasure-Maximum.json index 933d4603..9e0bf569 100644 --- a/schemas/data/src/quality-control/ActivityMediaName-ActivityDepthHeightMeasure-Maximum.json +++ b/schemas/data/src/quality-control/ActivityMediaName-ActivityDepthHeightMeasure-Maximum.json @@ -8,15 +8,7 @@ "unevaluatedProperties": true, "properties": { "ActivityMediaName": { - "enum": [ - "Ocean Water", - "Porewater", - "Rainwater", - "Stormwater", - "Subsurface Soil/Sediment", - "Surface Water", - "Surface Water Sediment" - ] + "enum": ["Groundwater", "Porewater"] }, "ActivityDepthHeightMeasure": true }, diff --git a/schemas/data/src/quality-control/ActivityType-CTS-ActivityStartTimeZone-UTC.json b/schemas/data/src/quality-control/ActivityType-CTS-ActivityStartTimeZone-UTC.json index ca037537..db5b33dd 100644 --- a/schemas/data/src/quality-control/ActivityType-CTS-ActivityStartTimeZone-UTC.json +++ b/schemas/data/src/quality-control/ActivityType-CTS-ActivityStartTimeZone-UTC.json @@ -8,14 +8,10 @@ "unevaluatedProperties": true, "properties": { "ActivityType": { - "enum": [ - "Field Msr/Obs-Continuous Time Series" - ] + "enum": ["Field Msr/Obs-Continuous Time Series"] } }, - "required": [ - "ActivityType" - ] + "required": ["ActivityType"] }, "then": { "type": "object", @@ -28,4 +24,4 @@ } } } -} \ No newline at end of file +} diff --git a/schemas/data/src/quality-control/ActivityType-CTS-ActivityStartTimeZone.json b/schemas/data/src/quality-control/ActivityType-CTS-ActivityStartTimeZone.json index 6a3bba22..0a4b157a 100644 --- a/schemas/data/src/quality-control/ActivityType-CTS-ActivityStartTimeZone.json +++ b/schemas/data/src/quality-control/ActivityType-CTS-ActivityStartTimeZone.json @@ -8,14 +8,10 @@ "unevaluatedProperties": true, "properties": { "ActivityType": { - "enum": [ - "Field Msr/Obs-Continuous Time Series" - ] + "enum": ["Field Msr/Obs-Continuous Time Series"] } }, - "required": [ - "ActivityType" - ] + "required": ["ActivityType"] }, "then": { "type": "object", @@ -23,8 +19,6 @@ "properties": { "ActivityStartTimeZone": true }, - "required": [ - "ActivityStartTimeZone" - ] + "required": ["ActivityStartTimeZone"] } -} \ No newline at end of file +} diff --git a/schemas/data/src/quality-control/ActivityType-ResultSampleFraction.json b/schemas/data/src/quality-control/ActivityType-ResultSampleFraction.json index 7f1d1e1c..70b701fd 100644 --- a/schemas/data/src/quality-control/ActivityType-ResultSampleFraction.json +++ b/schemas/data/src/quality-control/ActivityType-ResultSampleFraction.json @@ -11,7 +11,12 @@ "ActivityType": { "enum": [ "Field Msr/Obs", + "Field Msr/Obs-Continuous Time Series", + "Field Msr/Obs-Integrated Flow Proportioned", + "Field Msr/Obs-Integrated Time Series", + "Field Msr/Obs-Integrated Vertical Profile", "Field Msr/Obs-Portable Data Logger", + "Quality Control-Calibration Check", "Quality Control Field Replicate Msr/Obs", "Quality Control Field Replicate Portable Data Logger" ] diff --git a/schemas/data/src/quality-control/AnalysisStartTime-AnalysisStartTimeZone.json b/schemas/data/src/quality-control/AnalysisStartTime-AnalysisStartTimeZone.json new file mode 100644 index 00000000..b622dce9 --- /dev/null +++ b/schemas/data/src/quality-control/AnalysisStartTime-AnalysisStartTimeZone.json @@ -0,0 +1,18 @@ +{ + "$id": "https://datastream.org/schema/data/quality-control/AnalysisStartTime-AnalysisStartTimeZone.json", + "title": "AnalysisStartTime-AnalysisStartTimeZone", + "description": "AnalysisStartTimeZone should be included when AnalysisStartTime is provided.", + "errorMessage": "qc-AnalysisStartTime-AnalysisStartTimeZone", + "if": { + "type": "object", + "unevaluatedProperties": true, + "properties": { "AnalysisStartTime": true }, + "required": ["AnalysisStartTime"] + }, + "then": { + "type": "object", + "unevaluatedProperties": true, + "properties": { "AnalysisStartTimeZone": true }, + "required": ["AnalysisStartTimeZone"] + } +} diff --git a/schemas/data/src/quality-control/CharacteristicName-ActivityType-Surrogate.json b/schemas/data/src/quality-control/CharacteristicName-ActivityType-Surrogate.json index 77d986d3..92e1a5f6 100644 --- a/schemas/data/src/quality-control/CharacteristicName-ActivityType-Surrogate.json +++ b/schemas/data/src/quality-control/CharacteristicName-ActivityType-Surrogate.json @@ -32,6 +32,7 @@ "Acenaphthene-d10", "Acenaphthylene-d8", "Acridine-d9", + "Adamantane Carboxylic Acid-D15", "Anilazine", "Atrazine-d5 (ethyl-d5)", "Benzene, 1-bromo-2-(trifluoromethyl)-", @@ -46,6 +47,7 @@ "Chrysene-d12", "Clothianidin-d3", "Cyanazine-d5", + "Decanoic Acid-D19", "Dibenzo(a,h)anthracene-D14", "Dibenzothiophene-D8", "Dimethoate-d6", @@ -53,8 +55,10 @@ "Fenitrothion-d6", "Flonicamid-d3", "Fluoranthene-d10", + "Hexadecanoic Acid-D31", "Indeno[1,2,3-cd]pyrene-d12", "Linuron-d6", + "Lithocholic Acid-D4", "Malathion-d6", "Metolachlor-d6", "Naphthalene-d8", @@ -189,12 +193,14 @@ "Naphthenic Acid, C9H14O2", "Naphthenic Acid, C9H16O2", "Naphthenic Acid, C9H18O2", + "Nitrobenzene-D5", "p-Bromofluorobenzene", "p-Terphenyl-d14", "Parathion-d10", "Perylene-d12", "Phenanthrene-d10", "Phorate-d10", + "Pyrene-d10", "Terbufos-d10", "Terphenyl-d14", "Toluene-d8" @@ -214,10 +220,7 @@ "const": "%" } }, - "required": [ - "CharacteristicName", - "ResultUnit" - ] + "required": ["CharacteristicName", "ResultUnit"] }, { "properties": { @@ -247,8 +250,6 @@ ] } }, - "required": [ - "ActivityType" - ] + "required": ["ActivityType"] } } diff --git a/schemas/data/src/quality-control/CharacteristicName-Ammonia.json b/schemas/data/src/quality-control/CharacteristicName-Ammonia.json index ee1c60ca..f36c4fa2 100644 --- a/schemas/data/src/quality-control/CharacteristicName-Ammonia.json +++ b/schemas/data/src/quality-control/CharacteristicName-Ammonia.json @@ -5,11 +5,11 @@ "errorMessage": "qc-CharacteristicName-Ammonia", "type": "object", "unevaluatedProperties": true, - "properties": { - "CharacteristicName": { - "not": { - "const": "Ammonia" - } + "properties": { + "CharacteristicName": { + "not": { + "const": "Ammonia" } } - } \ No newline at end of file + } +} diff --git a/schemas/data/src/quality-control/CharacteristicName-MethodSpeciation.json b/schemas/data/src/quality-control/CharacteristicName-MethodSpeciation.json index e6455645..d5f0b11b 100644 --- a/schemas/data/src/quality-control/CharacteristicName-MethodSpeciation.json +++ b/schemas/data/src/quality-control/CharacteristicName-MethodSpeciation.json @@ -50,6 +50,7 @@ "Organic Nitrogen", "Organic phosphorus", "Orthophosphate", + "Oxygen-17", "Oxygen-18", "Oxygen-18/Oxygen-16 ratio", "Phosphorus, hydrolyzable", diff --git a/schemas/data/src/quality-control/CharacteristicName-Ratio-ResultDetectionQuantitationLimitUnit-None.json b/schemas/data/src/quality-control/CharacteristicName-Ratio-ResultDetectionQuantitationLimitUnit-None.json index 1b2edddf..35d92984 100644 --- a/schemas/data/src/quality-control/CharacteristicName-Ratio-ResultDetectionQuantitationLimitUnit-None.json +++ b/schemas/data/src/quality-control/CharacteristicName-Ratio-ResultDetectionQuantitationLimitUnit-None.json @@ -25,7 +25,10 @@ }, "ResultDetectionQuantitationLimitMeasure": true }, - "required": ["CharacteristicName", "ResultDetectionQuantitationLimitMeasure"] + "required": [ + "CharacteristicName", + "ResultDetectionQuantitationLimitMeasure" + ] }, "then": { "type": "object", diff --git a/schemas/data/src/quality-control/CharacteristicName-pH-ActivityType-Sample.json b/schemas/data/src/quality-control/CharacteristicName-pH-ActivityType-Sample.json index cdc90f1a..0c3553eb 100644 --- a/schemas/data/src/quality-control/CharacteristicName-pH-ActivityType-Sample.json +++ b/schemas/data/src/quality-control/CharacteristicName-pH-ActivityType-Sample.json @@ -11,10 +11,7 @@ "const": "pH" } }, - "required": [ - "CharacteristicName", - "ActivityType" - ] + "required": ["CharacteristicName", "ActivityType"] }, "then": { "type": "object", @@ -27,8 +24,6 @@ } } }, - "required": [ - "ActivityType" - ] + "required": ["ActivityType"] } } diff --git a/schemas/data/src/quality-control/ResultAnalyticalMethodContext-ActivityType.json b/schemas/data/src/quality-control/ResultAnalyticalMethodContext-ActivityType.json index 98ae3688..5bd7485f 100644 --- a/schemas/data/src/quality-control/ResultAnalyticalMethodContext-ActivityType.json +++ b/schemas/data/src/quality-control/ResultAnalyticalMethodContext-ActivityType.json @@ -33,13 +33,14 @@ "ActivityType": { "enum": [ "Field Msr/Obs", - "Field Msr/Obs-Portable Data Logger", "Field Msr/Obs-Continuous Time Series", - "Quality Control Field Msr/Obs Post-Calibration", - "Quality Control Field Msr/Obs Pre-Calibration", + "Field Msr/Obs-Integrated Flow Proportioned", + "Field Msr/Obs-Integrated Time Series", + "Field Msr/Obs-Integrated Vertical Profile", + "Field Msr/Obs-Portable Data Logger", + "Quality Control-Calibration Check", "Quality Control Field Replicate Msr/Obs", - "Quality Control Field Replicate Portable Data Logger", - "Quality Control Field Sample Equipment Rinsate Blank" + "Quality Control Field Replicate Portable Data Logger" ] } }, diff --git a/schemas/data/src/quality-control/ResultDetectionQuantitationLimitMeasure-Minimum.json b/schemas/data/src/quality-control/ResultDetectionQuantitationLimitMeasure-Minimum.json index feeed615..e3af078c 100644 --- a/schemas/data/src/quality-control/ResultDetectionQuantitationLimitMeasure-Minimum.json +++ b/schemas/data/src/quality-control/ResultDetectionQuantitationLimitMeasure-Minimum.json @@ -1,5 +1,5 @@ { - "$id": "https://datastream.org/schema/data/quality-control/ResultDetectionQuantitationLimitMinimumMeasure-Minimum.json", + "$id": "https://datastream.org/schema/data/quality-control/ResultDetectionQuantitationLimitMeasure-Minimum.json", "title": "ResultDetectionQuantitationLimitMinimumMeasure-Minimum", "description": "Some water quality measurements, for example concentrations, should not have a value lower than zero. Please review these data points and correct as necessary.", "errorMessage": "qc-ResultDetectionQuantitationLimitMinimumMeasure-Minimum", diff --git a/schemas/data/src/quality-control/ResultSampleFraction-FreeAvailable.json b/schemas/data/src/quality-control/ResultSampleFraction-FreeAvailable.json index 46f53a42..387610f2 100644 --- a/schemas/data/src/quality-control/ResultSampleFraction-FreeAvailable.json +++ b/schemas/data/src/quality-control/ResultSampleFraction-FreeAvailable.json @@ -18,7 +18,7 @@ "unevaluatedProperties": true, "properties": { "CharacteristicName": { - "enum": ["Chlorine","Cyanide"] + "enum": ["Chlorine", "Cyanide"] } }, "required": ["CharacteristicName"] diff --git a/schemas/data/src/quality-control/ResultStatusID-Deprecated.json b/schemas/data/src/quality-control/ResultStatusID-Deprecated.json new file mode 100644 index 00000000..892c88f7 --- /dev/null +++ b/schemas/data/src/quality-control/ResultStatusID-Deprecated.json @@ -0,0 +1,13 @@ +{ + "$id": "https://datastream.org/schema/data/quality-control/ResultStatusID-Deprecated.json", + "title": "ResultStatusID-Deprecated", + "description": "ResultStatusID 'Final' and 'Accepted' are no longer allowed; use Preliminary, Provisional, or Validated.", + "errorMessage": "qc-ResultStatusID-Deprecated", + "type": "object", + "unevaluatedProperties": true, + "properties": { + "ResultStatusID": { + "not": { "enum": ["Accepted", "Final"] } + } + } +} diff --git a/schemas/data/src/quality-control/WhiteSpace-AquiferCode.json b/schemas/data/src/quality-control/WhiteSpace-AquiferCode.json new file mode 100644 index 00000000..2eb24d03 --- /dev/null +++ b/schemas/data/src/quality-control/WhiteSpace-AquiferCode.json @@ -0,0 +1,14 @@ +{ + "$id": "https://datastream.org/schema/data/quality-control/WhiteSpace-AquiferCode.json", + "title": "WhiteSpace-AquiferCode", + "description": "Leading or trailing white space (i.e., spaces inserted before or after your character string) can cause issues with data management.", + "errorMessage": "qc-WhiteSpace", + "type": "object", + "unevaluatedProperties": true, + "properties": { + "AquiferCode": { + "$ref": "../definitions.json#/definitions/trim" + } + }, + "required": [] +} diff --git a/schemas/data/src/quality-control/WhiteSpace-EventID.json b/schemas/data/src/quality-control/WhiteSpace-EventID.json new file mode 100644 index 00000000..7527e460 --- /dev/null +++ b/schemas/data/src/quality-control/WhiteSpace-EventID.json @@ -0,0 +1,14 @@ +{ + "$id": "https://datastream.org/schema/data/quality-control/WhiteSpace-EventID.json", + "title": "WhiteSpace-EventID", + "description": "Leading or trailing white space (i.e., spaces inserted before or after your character string) can cause issues with data management.", + "errorMessage": "qc-WhiteSpace", + "type": "object", + "unevaluatedProperties": true, + "properties": { + "EventID": { + "$ref": "../definitions.json#/definitions/trim" + } + }, + "required": [] +} diff --git a/schemas/data/src/quality-control/WhiteSpace-SampleCollectionMethodID.json b/schemas/data/src/quality-control/WhiteSpace-SampleCollectionMethodID.json new file mode 100644 index 00000000..d2f29572 --- /dev/null +++ b/schemas/data/src/quality-control/WhiteSpace-SampleCollectionMethodID.json @@ -0,0 +1,14 @@ +{ + "$id": "https://datastream.org/schema/data/quality-control/WhiteSpace-SampleCollectionMethodID.json", + "title": "WhiteSpace-SampleCollectionMethodID", + "description": "Leading or trailing white space (i.e., spaces inserted before or after your character string) can cause issues with data management.", + "errorMessage": "qc-WhiteSpace", + "type": "object", + "unevaluatedProperties": true, + "properties": { + "SampleCollectionMethodID": { + "$ref": "../definitions.json#/definitions/trim" + } + }, + "required": [] +} diff --git a/schemas/data/src/quality-control/WhiteSpace-SampleCollectionMethodName.json b/schemas/data/src/quality-control/WhiteSpace-SampleCollectionMethodName.json new file mode 100644 index 00000000..a0e8e018 --- /dev/null +++ b/schemas/data/src/quality-control/WhiteSpace-SampleCollectionMethodName.json @@ -0,0 +1,14 @@ +{ + "$id": "https://datastream.org/schema/data/quality-control/WhiteSpace-SampleCollectionMethodName.json", + "title": "WhiteSpace-SampleCollectionMethodName", + "description": "Leading or trailing white space (i.e., spaces inserted before or after your character string) can cause issues with data management.", + "errorMessage": "qc-WhiteSpace", + "type": "object", + "unevaluatedProperties": true, + "properties": { + "SampleCollectionMethodName": { + "$ref": "../definitions.json#/definitions/trim" + } + }, + "required": [] +} diff --git a/schemas/data/src/quality-control/WhiteSpace-WellID.json b/schemas/data/src/quality-control/WhiteSpace-WellID.json new file mode 100644 index 00000000..4dfa8ce7 --- /dev/null +++ b/schemas/data/src/quality-control/WhiteSpace-WellID.json @@ -0,0 +1,14 @@ +{ + "$id": "https://datastream.org/schema/data/quality-control/WhiteSpace-WellID.json", + "title": "WhiteSpace-WellID", + "description": "Leading or trailing white space (i.e., spaces inserted before or after your character string) can cause issues with data management.", + "errorMessage": "qc-WhiteSpace", + "type": "object", + "unevaluatedProperties": true, + "properties": { + "WellID": { + "$ref": "../definitions.json#/definitions/trim" + } + }, + "required": [] +} diff --git a/schemas/data/src/subset/ActivityDepthAltitudeReferencePointUnit.json b/schemas/data/src/subset/ActivityDepthAltitudeReferencePointUnit.json new file mode 100644 index 00000000..c614f620 --- /dev/null +++ b/schemas/data/src/subset/ActivityDepthAltitudeReferencePointUnit.json @@ -0,0 +1 @@ +["cm", "ft", "in", "m"] diff --git a/schemas/data/src/subset/ActivityMediaName.json b/schemas/data/src/subset/ActivityMediaName.json index f9794cc5..c4e86676 100644 --- a/schemas/data/src/subset/ActivityMediaName.json +++ b/schemas/data/src/subset/ActivityMediaName.json @@ -1,5 +1,6 @@ [ "Ambient Air", + "Groundwater", "Ocean Water", "Porewater", "Rainwater", diff --git a/schemas/data/src/subset/ActivityType.json b/schemas/data/src/subset/ActivityType.json new file mode 100644 index 00000000..d02e87fb --- /dev/null +++ b/schemas/data/src/subset/ActivityType.json @@ -0,0 +1,37 @@ +[ + "Field Msr/Obs", + "Field Msr/Obs-Continuous Time Series", + "Field Msr/Obs-Integrated Flow Proportioned", + "Field Msr/Obs-Integrated Time Series", + "Field Msr/Obs-Integrated Vertical Profile", + "Field Msr/Obs-Portable Data Logger", + "Quality Control Field Replicate Msr/Obs", + "Quality Control Field Replicate Portable Data Logger", + "Quality Control Field Sample Equipment Rinsate Blank", + "Quality Control Sample-Blind Duplicate", + "Quality Control Sample-Field Blank", + "Quality Control Sample-Field Replicate", + "Quality Control Sample-Lab Blank", + "Quality Control Sample-Lab Duplicate", + "Quality Control Sample-Lab Matrix Spike", + "Quality Control Sample-Lab Re-Analysis", + "Quality Control Sample-Lab Spike", + "Quality Control Sample-Lab Split", + "Quality Control Sample-Lab Surrogate Control Standard", + "Quality Control Sample-Lab Surrogate Control Standard Duplicate", + "Quality Control Sample-Reference Sample", + "Quality Control Sample-Trip Blank", + "Quality Control-Calibration Check", + "Sample-Composite With Parents", + "Sample-Composite Without Parents", + "Sample-Field Split", + "Sample-Integrated Flow Proportioned", + "Sample-Integrated Horizontal and Vertical Composite Profile", + "Sample-Integrated Horizontal Profile", + "Sample-Integrated Time Series", + "Sample-Integrated Vertical Profile", + "Sample-Other", + "Sample-Positive Control", + "Sample-Routine", + "Unspecified" +] diff --git a/schemas/data/src/subset/BoreholeDepthUnit.json b/schemas/data/src/subset/BoreholeDepthUnit.json new file mode 100644 index 00000000..de7808f8 --- /dev/null +++ b/schemas/data/src/subset/BoreholeDepthUnit.json @@ -0,0 +1 @@ +["ft", "m"] diff --git a/schemas/data/src/subset/CharacteristicName.json b/schemas/data/src/subset/CharacteristicName.json index b9c47289..643319d3 100644 --- a/schemas/data/src/subset/CharacteristicName.json +++ b/schemas/data/src/subset/CharacteristicName.json @@ -6,6 +6,7 @@ ".beta.-Endosulfan", ".beta.-Heptachlor epoxide", ".beta.-Hexachlorocyclohexane", + ".beta.-Sitosterol", ".delta.-Hexachlorocyclohexane", ".gamma.-Hexachlorocyclohexane", ".lambda.-Cyhalothrin", @@ -14,6 +15,7 @@ "1-(3,4-dichlorophenyl)-3-methyl urea", "1-Butanesulfonamide, 1,1,2,2,3,3,4,4,4-nonafluoro-N-methyl-", "1-Butanol", + "1-Decanesulfonic acid, 1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,10-heneicosafluoro-", "1-Heptanesulfonic acid, 1,1,2,2,3,3,4,4,5,5,6,6,7,7,7-pentadecafluoro-", "1-Methylchrysene", "1-Methylnaphthalene", @@ -82,15 +84,19 @@ "1,3,4,6,7,8-Hexahydro-4,6,6,7,8,8-hexamethylcyclopenta[g]-2-benzopyran", "1,3,5-Trichlorobenzene", "1,3,5-Trimethylbenzene", + "1,4-Dichloro-cis-2-butene", "1,4-Dichlorobenzene-d4", "1,4-Difluorobenzene", + "1,4-Dioxane", "1,4,6,7-Tetramethylnaphthalene", "1,6,7-Trimethylnaphthalene", "1,7-Dimethylfluorene", "1,7-Dimethylphenanthrene", "1,8-Dimethylphenanthrene", "10:2 Fluorotelomer sulfonic acid", + "11-chloroeicosafluoro-3-oxaundecane-1-sulfonic acid", "12-Chlorodehydroabietic acid", + "12,14-Dichlorodehydroabietic acid", "14-Chlorodehydroabietic acid", "17.alpha.-Estradiol", "1H,1H, 2H, 2H-Perfluorodecane sulfonic acid", @@ -159,6 +165,7 @@ "2,4,5-Trichlorophenol", "2,4,5-Trichlorotoluene", "2,4,6-Tribromophenol", + "2,4,6-Trichloroanisole", "2,4,6-Trichlorophenol", "2,4,6-Trinitro-5-tert-butyl-m-xylene", "2,5-Dibromobenzoic Acid", @@ -177,15 +184,24 @@ "3-Methylfluoranthene/Benzo[a]fluorene", "3-Methylphenanthrene", "3-Pyridinecarboxamide, N-(2,4-difluorophenyl)-2-[3-(trifluoromethyl)phenoxy]-", + "3-Pyridinecarboxamide, N-(2+A2:A19,4-difluorophenyl)-2-[3-(trifluoromethyl)phenoxy]-", "3,3'-Dichlorobenzidine", "3,3',5,5'-Tetrachlorobiphenyl", + "3,4-Dichlorocatechol", "3,4-Dichlorophenol", + "3,4,5-Trichlorocatechol", + "3,4,5-Trichloroguaiacol", "3,4,5-Trichlorophenol", + "3,4,6-Trichlorocatechol", + "3,4,6-Trichloroguaiacol", "3,5-Dichlorobenzoic acid", + "3,5-Dichlorocatechol", "3,5-Dichlorophenol", "3,6-Dimethylphenanthrene", "3:3 Fluorotelomer carboxylate, ion(1-)", "4-Chloro-2-methylphenol", + "4-Chloro-3-nitrobenzotrifluoride", + "4-Chlorocatechol", "4-Hydroxy-chlorothalonil", "4-Methyl-2-pentanol", "4-methyl-6-(2-methyl-5-propan-2-ylphenyl)-2-(5-propan-2-yl-1H-indazol-4-yl)-7,8-dihydro-5H-1,6-naphthyridine", @@ -195,6 +211,10 @@ "4-Nonylphenol triethoxylate", "4,4'-Dibromobiphenyl", "4,4'-Isopropylidenediphenol", + "4,5-Dichlorocatechol", + "4,5-Dichloroveratrole", + "4,5,6-Trichloroguaiacol", + "4,6-Dichloroguaiacol", "4,6-Dimethyldibenzothiophene", "4,6-Dinitro-o-cresol", "5-Methylchrysene/6-Methylchrysene", @@ -205,6 +225,7 @@ "7-Methylbenzo[a]pyrene", "7,12-Dimethylbenz[a]anthracene", "8(14)-Abietenic acid", + "9-Chlorohexadecafluoro-3-oxanonane-1-sulfonate", "9-Methylphenanthrene/4-Methylphenanthrene", "9,10-Dichlorostearic Acid", "Abietic acid", @@ -223,6 +244,7 @@ "Acephate", "Acesulfame", "Acetaldehyde", + "Acetamide, 2-(diethylamino)-N-(2,6-dimethylphenyl)-", "Acetaminophen", "Acetamiprid", "Acetic acid", @@ -232,6 +254,9 @@ "Acifluorfen, sodium salt", "Acridine-d9", "Acridine", + "Acrolein", + "Acrylonitrile", + "Adamantane Carboxylic Acid-D15", "Adenosine triphosphate", "Adsorbable organic halides", "Alachlor", @@ -245,6 +270,7 @@ "Alkalinity, Hydroxide", "Alkalinity, Phenolphthalein (total hydroxide+1/2 carbonate)", "Alkalinity, total", + "Allidochlor", "Allyl chloride", "Aluminum-27", "Aluminum", @@ -258,6 +284,7 @@ "Ammonium 4,8-dioxa-3H-perfluorononanoate", "Ammonium", "Amoxicillin", + "Anatoxin-A", "Anilazine", "Anion/cation ratio", "Anthracene", @@ -265,6 +292,7 @@ "Antimony-125", "Antimony", "Apparent color", + "ar,ar'-Dimethylbiphenyl", "Aroclor 1016", "Aroclor 1221", "Aroclor 1232", @@ -283,12 +311,14 @@ "Aspartame", "Aspirin", "Asulam", + "Atrazine + all metabolites", "Atrazine + N-Dealkylated Metabolites", "Atrazine-d5 (ethyl-d5)", "Atrazine", "Azinphos-ethyl", "Azinphos-methyl", "Azoxystrobin", + "Bacteria, Sulfate reducing", "Bankfull Height", "Bankfull width", "Barium-137", @@ -322,6 +352,7 @@ "BDE-197", "BDE-206", "BDE-207", + "Benalaxyl", "Bendiocarb", "Benfluralin", "Benomyl", @@ -330,6 +361,7 @@ "Benzaldehyde", "Benzene, 1-bromo-2-(trifluoromethyl)-", "Benzene, 1,2-dichloro-4-methyl-", + "Benzene, 1,2,3-trichloro-4,5-dimethoxy-", "Benzene", "Benzeneacetic acid, .alpha.-methyl-4-(2-methylpropyl)-", "Benzidine", @@ -354,6 +386,7 @@ "Benzofluoranthene", "Benzoic acid", "Benzoylecgonine", + "Benzoylprop-ethyl", "Beryllium-9", "Beryllium", "Beta Cypermethrin", @@ -389,7 +422,9 @@ "Bromophos", "Bromopropylate", "Bromoxynil", + "BTEX plus styrene, Total", "BTEX, Total", + "Bupirimate", "Butachlor", "Butanoic acid, 4-(4-chloro-2-methylphenoxy)-, ethyl ester", "Butralin", @@ -406,8 +441,10 @@ "C1-Fluoranthenes/pyrenes", "C1-Phenanthrenes/anthracenes", "C10-C16 Hydrocarbons", + "C10-C50 Hydrocarbons", "C16-C21 Hydrocarbons", "C16-C34 Hydrocarbons", + "C16-C50 Hydrocarbons", "C2-Benzo[a]anthracenes/chrysenes", "C2-Benzofluoranthenes/benzopyrenes", "C2-Biphenyls", @@ -446,9 +483,11 @@ "Carbamazepine", "Carbaryl-d7", "Carbaryl", + "Carbazole", "Carbofuran", "Carbon Dioxide, free CO2", "Carbon dioxide", + "Carbon disulfide", "Carbon monoxide", "Carbon tetrachloride", "Carbon-13", @@ -511,6 +550,7 @@ "Chlorpyrifos", "Chlorsulfuron", "Chlorthal-dimethyl", + "Chlorthiamid", "Chlorthiophos", "Cholesterol", "Chromium-52", @@ -551,8 +591,10 @@ "Copper-63", "Copper-65", "Copper", + "Coprostanol", "Corrosion & scaling control, Ryznar Stability Index", "Cotinine", + "Cresol", "Crufomate", "Cryptosporidium", "Cumene", @@ -568,6 +610,7 @@ "Cyclohexanesulfonic acid, 1,2,2,3,3,4,5,5,6,6-decafluoro-4-(1,1,2,2,2-pentafluoroethyl)-, potassium salt (1:1)", "Cyfluthrin", "Cyhalothrin", + "Cyprazine", "Cyprodinil", "Day, ice off", "Day, ice on", @@ -577,9 +620,12 @@ "DDT/DDD/DDE, sum of p,p' isomers", "Decabromodiphenyl ether", "Decachlorobiphenyl", + "Decanoic Acid-D19", "Decanoic acid, 3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,10-heptadecafluoro-", "Decanoic acid, 4,4,5,5,6,6,7,7,8,8,9,9,10,10,10-pentadecafluoro-", + "Decanoic acid", "Dehydroabietic acid", + "Dehydronifedipine", "Delta boron-11/boron-10", "delta carbon-13/carbon-12", "Delta nitrogen-15/nitrogen-14", @@ -632,6 +678,7 @@ "Diclofenac, 4-hydroxy", "Diclofenac", "Diclofop methyl", + "Diclofop", "Dicofol", "Dicrotophos", "Didecyl dimethyl ammonium chloride", @@ -651,6 +698,7 @@ "Dimethyl phthalate", "Dimethyl selenoxide", "Dimethyl sulfone", + "Dimethylnaphthalene", "Dinitramine", "Dinoseb", "Dinotefuran", @@ -666,6 +714,7 @@ "Diuron", "Docosanoic acid", "Dodecanoic acid, 3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,12-heneicosafluoro-", + "Dysprosium", "Eicosanoic acid", "Endosulfan sulfate", "Endosulfan", @@ -676,18 +725,21 @@ "Enterococcus", "epi-Coprostanol", "EPTC-d14", + "Erbium", "Erythromycin", "Escherichia coli", "Estradiol", "Estriol", "Estrone", "Ethalfluralin", + "Ethanamine, 2-(diphenylmethoxy)-N,N-dimethyl-", "Ethanol", "Ethinyl estradiol", "Ethion", "Ethofumesate", "Ethoprop", "Ethyl acetate", + "Ethyl methacrylate", "Ethylbenzene", "Ethylene dibromide", "Ethylene glycol", @@ -707,6 +759,7 @@ "Fenoprofen", "Fenoxaprop-ethyl", "Fenoxaprop-P-ethyl", + "Fenoxaprop", "Fensulfothion", "Fenthion", "Fenvalerate", @@ -715,6 +768,8 @@ "Filamentous Algae Cover", "Fixed dissolved solids", "Fixed suspended solids", + "Flamprop-isopropyl", + "Flamprop-methyl", "Flonicamid-d3", "Flonicamid", "Flow", @@ -755,6 +810,7 @@ "Gold", "Grain size, coarse sand (>=630 to 2000 um)", "Gran acid neutralizing capacity", + "Gross alpha radioactivity (ref std unspecified)", "Gross alpha radioactivity, (Americium-241 ref std)", "Gross beta radioactivity, (Cesium-137 ref std)", "Hafnium", @@ -769,8 +825,10 @@ "Heptachlor", "Heptachlorodibenzo-p-dioxin", "Heptachlorodibenzofuran", + "Heptadecanoic acid", "Heptafluorobutyric acid", "Heptanal", + "Heptenophos", "Heterotrophic bacteria", "Hexachlorobenzene", "Hexachlorobutadiene", @@ -780,6 +838,7 @@ "Hexachlorodibenzofuran", "Hexachloroethane", "Hexaconazole", + "Hexadecanoic Acid-D31", "Hexadecanoic acid, 2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,16,16,16-hentriacontafluoro-", "Hexafluoropropylene oxide dimer acid ammonium salt", "Hexafluoropropylene oxide dimer acid", @@ -831,6 +890,7 @@ "Iprodione", "Iridium", "Iron-57", + "Iron-related bacteria", "Iron", "Isobutanol", "Isobutyraldehyde", @@ -851,15 +911,18 @@ "Lead", "Light attenuation, depth at 99%", "Light, photosynthetic active radiation (PAR)", + "Light, Photosynthetic Photon Flux Density (PPFD)", "Light, underwater extinction coefficient (K)", "Light, underwater incident", "Lignoceric Acid", "Lincomycin", "Linoleic acid", + "Linolenic acid", "Linuron-d6", "Linuron", "Lithium-7", "Lithium", + "Lithocholic Acid-D4", "Lutetium", "m and p-Cresol", "m- & p-Chlorophenol", @@ -887,6 +950,7 @@ "Metalaxyl-M", "Metalaxyl", "Metconazole", + "Methacrylonitrile", "Methamidophos", "Methamphetamine", "Methane", @@ -901,15 +965,21 @@ "Methoxychlor", "Methoxycitronellal", "Methyl bromide", + "Methyl ethyl ketone", + "Methyl iodide", "Methyl isobutyl ketone", "Methyl mercaptan", + "Methyl methacrylate", "Methyl parathion", "Methyl parathion", "Methyl Selenium", "Methyl tert-butyl ether", "Methylacenaphthene", + "Methylanthracene", "Methylarsonic acid", + "Methylbiphenyl", "Methylchrysene", + "Methylcyclohexane", "Methyldibenzothiophene", "Methylene chloride", "Methylfluorene", @@ -1114,6 +1184,7 @@ "Nitrate", "Nitrilotriacetic acid", "Nitrite", + "Nitrobenzene-D5", "Nitrobenzene", "Nitrofen", "Nitrogen dioxide", @@ -1132,6 +1203,7 @@ "o-Cresol", "o-Dichlorobenzene", "O-Ethyl O-(p-nitrophenyl) phenylphosphonothioate", + "O-Methylpodocarpic Acid", "o-Nitrophenol", "o-Xylene, mixt. with m-xylene and p-xylene", "o-Xylene", @@ -1165,6 +1237,7 @@ "Oxycarboxin", "Oxychlordane", "Oxyfluorfen", + "Oxygen-17", "Oxygen-18", "Oxygen-18/Oxygen-16 ratio", "p-Bromofluorobenzene", @@ -1214,14 +1287,17 @@ "Pentoxifylline", "Perfluoro-1-decanesulfonamide", "Perfluoro-1-dodecanesulfonate", + "Perfluoro-2-propoxypropanoate", "Perfluoro-3-methoxypropanoic acid", "Perfluoro-3,6-dioxaheptanoic acid", "Perfluoro(4-methoxybutanoic) acid", "Perfluorobutanesulfonic acid", "Perfluorobutylsulfonamide", + "Perfluorodecanesulfonate", "Perfluorodecanoic acid", "Perfluorododecanoic acid", "Perfluoroheptane sulfonamide", + "Perfluoroheptanesulfonate", "Perfluoroheptanoic acid", "perfluorohexane sulfonamido propyl amine", "Perfluorohexane sulfonamidopropyl ammonium", @@ -1236,6 +1312,7 @@ "Perfluorooctanesulfonamide", "Perfluorooctanesulfonamido amine oxide", "Perfluorooctanesulfonamido betaine", + "Perfluorooctanesulfonate", "Perfluorooctanoic acid", "Perfluoropentanesulfonic acid", "Perfluorotetradecanoic acid", @@ -1255,6 +1332,8 @@ "Phenanthrene-d10", "Phenanthrene", "Phenol, 2,3-dichloro-6-methoxy-", + "Phenol, 4-chloro-2-methoxy-", + "Phenol, 4,5-dichloro-2-methoxy-", "Phenol, dibromo-", "Phenol", "Phenolics", @@ -1319,6 +1398,7 @@ "Pseudomonas fluorescens", "Purgeable hydrocarbons", "Pyraclostrobin", + "Pyrene-d10", "Pyrene", "Pyrethrin I", "Pyrethrin II", @@ -1473,6 +1553,7 @@ "Tetraethylene glycol", "Tetramethrin", "Tetrapropyl dithiopyrophosphate", + "Tetrasul", "Thallium-205", "Thallium", "Thiabendazole", @@ -1500,6 +1581,7 @@ "Total dissolved solids", "Total fixed solids", "Total hardness", + "Total Hexachlorocyclohexane, sum of isomers", "Total Nitrogen, mixed forms", "Total PAHs, high wt", "Total PAHs, low wt", @@ -1517,6 +1599,7 @@ "Tralkoxydim", "trans-1,2-Dichloroethylene", "trans-1,3-Dichloropropene", + "trans-1,4-Dichloro-2-butene", "trans-Chlordane", "trans-Nonachlor", "Transmittance at 254 nm", @@ -1571,6 +1654,8 @@ "Volatile Dissolved Solids", "Volatile suspended solids", "Water level (probe)", + "Water level elevation", + "Water level in well, depth from a reference point", "Water level", "Weak, dissociable cyanide", "Wetted Width", @@ -1584,4 +1669,4 @@ "Zinc", "Zirconium", "Zoxamide" -] \ No newline at end of file +] diff --git a/schemas/data/src/subset/LithologyType.json b/schemas/data/src/subset/LithologyType.json new file mode 100644 index 00000000..1d1a7a4d --- /dev/null +++ b/schemas/data/src/subset/LithologyType.json @@ -0,0 +1,73 @@ +[ + "Andesite", + "Anthropogenic material", + "Basalt", + "Bedrock", + "Bedrock, Fractured", + "Bedrock, Interbedded sandstone/carbonate", + "Bedrock, Interbedded sandstone/shale", + "Bedrock, Interbedded sandstone/shale/carbonate", + "Bedrock, Interbedded sediments", + "Bedrock, Interbedded siltstone/carbonate/gypsum", + "Bedrock, Soluble Carbonate - Karst", + "Bedrock, Soluble gypsum/dolomite with shale interb", + "Carbonate sedimentary rock", + "Clay", + "Clayey Sand", + "Clayey Silt", + "Coal", + "Conglomerate", + "Diamicton", + "Diorite", + "Dolomite", + "Evaporite", + "Gabbro", + "Gneiss", + "Granite", + "Gravel", + "Gravelly Mud", + "Gravelly Muddy Sand", + "Gravelly Sand", + "Gravely Sediment", + "Humus", + "Igneous rock", + "Interbedded gravel and clay", + "Interbedded gravel and sand", + "Interbedded gravel and silt", + "Interbedded sand and clay", + "Interbedded sand and silt", + "Interbedded silt and clay", + "Limestone", + "Marble", + "Metamorphic rock", + "Mud", + "Muddy Gravel", + "Muddy Sand", + "Muddy Sandy Gravel", + "Organic material", + "Peat", + "Plutonic rock", + "Quartzite", + "Rhyolite", + "Sand", + "Sand, Silt, Clay", + "Sandstone", + "Sandy Clay", + "Sandy Gravel", + "Sandy Mud", + "Sandy Silt", + "Schist", + "Sedimentary rock", + "Shale", + "Silt", + "Siltite", + "Silty Clay", + "Silty Sand", + "Slate", + "Soil", + "Till", + "Unconsolidated material", + "Undifferentiated sediment", + "Unknown material", + "Volcanic rock" +] diff --git a/schemas/data/src/subset/MonitoringLocationHorizontalAccuracyUnit.json b/schemas/data/src/subset/MonitoringLocationHorizontalAccuracyUnit.json index 3bceb556..546ca3b7 100644 --- a/schemas/data/src/subset/MonitoringLocationHorizontalAccuracyUnit.json +++ b/schemas/data/src/subset/MonitoringLocationHorizontalAccuracyUnit.json @@ -1,4 +1 @@ -[ - "km", - "m" -] +["km", "m"] diff --git a/schemas/data/src/subset/MonitoringLocationHorizontalCoordinateReferenceSystem.json b/schemas/data/src/subset/MonitoringLocationHorizontalCoordinateReferenceSystem.json index 941b721b..ce320444 100644 --- a/schemas/data/src/subset/MonitoringLocationHorizontalCoordinateReferenceSystem.json +++ b/schemas/data/src/subset/MonitoringLocationHorizontalCoordinateReferenceSystem.json @@ -1,7 +1 @@ -[ - "NAD27", - "NAD83", - "UNKWN", - "WGS72", - "WGS84" -] \ No newline at end of file +["NAD27", "NAD83", "OTHER", "UNKWN", "WGS72", "WGS84"] diff --git a/schemas/data/src/subset/MonitoringLocationType.json b/schemas/data/src/subset/MonitoringLocationType.json index 705f5d3d..aa21c2df 100644 --- a/schemas/data/src/subset/MonitoringLocationType.json +++ b/schemas/data/src/subset/MonitoringLocationType.json @@ -1,17 +1,26 @@ [ "Atmosphere", + "Borehole", "Canal Drainage", "Canal Irrigation", "Canal Transport", + "Dug Well", "Estuary", "Great Lake", "Lake/Pond", + "Multilevel Well", + "Nested Well", "Ocean", + "Other-Ground Water", + "Piezometer", "Pond-Stormwater", "Reservoir", "River/Stream", + "Seep", "Spring", "Storm Sewer", + "Sump", "Unspecified", + "Well", "Wetland" ] diff --git a/schemas/data/src/subset/MonitoringLocationVerticalAccuracyUnit.json b/schemas/data/src/subset/MonitoringLocationVerticalAccuracyUnit.json new file mode 100644 index 00000000..de7808f8 --- /dev/null +++ b/schemas/data/src/subset/MonitoringLocationVerticalAccuracyUnit.json @@ -0,0 +1 @@ +["ft", "m"] diff --git a/schemas/data/src/subset/MonitoringLocationVerticalCollectionMethod.json b/schemas/data/src/subset/MonitoringLocationVerticalCollectionMethod.json new file mode 100644 index 00000000..34e06590 --- /dev/null +++ b/schemas/data/src/subset/MonitoringLocationVerticalCollectionMethod.json @@ -0,0 +1,20 @@ +[ + "Altimetry", + "Classical Surveying Techniques", + "Digital Elevation Model", + "GPS Carrier Phase Kinematic Relative Position", + "GPS Carrier Phase Static Relative Position", + "GPS Code (Pseudo Range) Differential", + "GPS Code (Pseudo Range) Precise Position", + "GPS Code (Pseudo Range) Standard Position (SA Off)", + "GPS Code (Pseudo Range) Standard Position (SA On)", + "Handheld GPS - Positioning Method Unspecified", + "Leveling-Non Bench Mark Control Points", + "Light Detection And Ranging (LiDAR)", + "Other", + "Photogrammetric", + "Precise Leveling-Bench Mark", + "Topographic Map Interpolation", + "Trigonometric Leveling", + "Unknown" +] diff --git a/schemas/data/src/subset/MonitoringLocationVerticalCoordinateReferenceSystem.json b/schemas/data/src/subset/MonitoringLocationVerticalCoordinateReferenceSystem.json new file mode 100644 index 00000000..6981d7b6 --- /dev/null +++ b/schemas/data/src/subset/MonitoringLocationVerticalCoordinateReferenceSystem.json @@ -0,0 +1 @@ +["CGVD2013", "CGVD28", "NAVD88", "NGVD29", "OTHER", "UNKWN"] diff --git a/schemas/data/src/subset/MonitoringLocationVerticalUnit.json b/schemas/data/src/subset/MonitoringLocationVerticalUnit.json index 09fbdc4c..1e67085e 100644 --- a/schemas/data/src/subset/MonitoringLocationVerticalUnit.json +++ b/schemas/data/src/subset/MonitoringLocationVerticalUnit.json @@ -1 +1 @@ -["MASL"] +["ft", "m", "MASL"] diff --git a/schemas/data/src/subset/ResultAnalyticalMethodContext.json b/schemas/data/src/subset/ResultAnalyticalMethodContext.json index a99a8602..c4fb5222 100644 --- a/schemas/data/src/subset/ResultAnalyticalMethodContext.json +++ b/schemas/data/src/subset/ResultAnalyticalMethodContext.json @@ -8,6 +8,7 @@ "APHA_SM24ED", "ASTM", "BC_MOE", + "CSSS", "DIN", "DOI", "EN", @@ -25,14 +26,17 @@ "MICROLOGY LABS", "Oakton", "ON MECP", + "Oxyguard", "PALINTEST LTD", "PROPRIETARY", "REED", "RBR", "Seal", "Solinst", + "SSSA", "THERMO-SCIENTIFIC", "Turner Designs", + "USDA/SSIR", "USDOI/USGS", "USEPA", "VMV", diff --git a/schemas/data/src/subset/ResultDetectionCondition.json b/schemas/data/src/subset/ResultDetectionCondition.json index 5134f645..b447e4c6 100644 --- a/schemas/data/src/subset/ResultDetectionCondition.json +++ b/schemas/data/src/subset/ResultDetectionCondition.json @@ -3,6 +3,6 @@ "Above Detection/Quantification Limit", "Detected Not Quantified", "Not Detected", - "Not Reported", + "Not Reported", "Unable to Measure" ] diff --git a/schemas/data/src/subset/ResultSampleFraction.json b/schemas/data/src/subset/ResultSampleFraction.json new file mode 100644 index 00000000..c17fa567 --- /dev/null +++ b/schemas/data/src/subset/ResultSampleFraction.json @@ -0,0 +1,34 @@ +[ + "Acid Soluble", + "Bioavailable", + "Comb Available", + "Dissolved", + "Extractable", + "Extractable, CaCO3-bound", + "Extractable, exchangeable", + "Extractable, organic-bnd", + "Extractable, other", + "Extractable, oxide-bound", + "Extractable, residual", + "Filterable", + "Filtered", + "Filtered, field", + "Filtered, lab", + "Free Available", + "Inorganic", + "Non-Filterable (Particle)", + "Non-settleable", + "Non-volatile", + "Organic", + "Pot. Dissolved", + "Settleable", + "Supernate", + "Suspended", + "Total", + "Total Recoverable", + "Total Residual", + "Unfiltered", + "Unspecified", + "Vapor", + "Volatile" +] diff --git a/schemas/data/src/subset/ResultStatusID.json b/schemas/data/src/subset/ResultStatusID.json index da5c47a0..abdaac1e 100644 --- a/schemas/data/src/subset/ResultStatusID.json +++ b/schemas/data/src/subset/ResultStatusID.json @@ -1,9 +1 @@ -[ -"Accepted", -"Final", -"Historical", -"Preliminary", -"Provisional", -"Rejected", -"Validated" -] +["Accepted", "Final", "Historical", "Preliminary", "Provisional", "Validated"] diff --git a/schemas/data/src/subset/ResultValueType.json b/schemas/data/src/subset/ResultValueType.json new file mode 100644 index 00000000..e6c0970b --- /dev/null +++ b/schemas/data/src/subset/ResultValueType.json @@ -0,0 +1 @@ +["Actual", "Blank Corrected", "Calculated", "Control Adjusted", "Estimated"] diff --git a/schemas/data/src/subset/SampleCollectionEquipmentName.json b/schemas/data/src/subset/SampleCollectionEquipmentName.json index 21b17a25..2073a3d0 100644 --- a/schemas/data/src/subset/SampleCollectionEquipmentName.json +++ b/schemas/data/src/subset/SampleCollectionEquipmentName.json @@ -1,11 +1,15 @@ [ + "Air line", + "Bailer", "Beta sampler", "Bucket", "DH-81", "DH-95", "Diffusion Gradient in Thin Film", - "Kemmerer Bottle", + "Ekman Grab", "Gravity Corer (Generic)", + "Hydrasleeve", + "Kemmerer Bottle", "Nansen Bottle", "Niskin Bottle", "Osterberg Piston Sampler", @@ -28,16 +32,20 @@ "Sediment sub-core", "Sediment Trap", "Semipermeable Membrane Device", + "Snap sampler", "Syringe", "Test strip", + "Tubing", "Turbidimeter", "Turbidity Tube", "Van Dorn Bottle", "Variable voltage pulsator unit", "Vinyl Tube", "Water Bottle", + "Water level meter", "Water Sampler (Other)", "WBH-96", + "Wetted tape", "Whirl-pak bag", "Wide mouth glass jar" ] diff --git a/schemas/data/src/subset/SampleCollectionMethodContext.json b/schemas/data/src/subset/SampleCollectionMethodContext.json new file mode 100644 index 00000000..793a7f63 --- /dev/null +++ b/schemas/data/src/subset/SampleCollectionMethodContext.json @@ -0,0 +1,14 @@ +[ + "AB_AEP", + "AB_AGS", + "ASTM", + "BC_MOE", + "ISO", + "NL_ECCC", + "NS_DNR", + "NS_ECC", + "PROPRIETARY", + "QC_MOE", + "USDOI/USGS", + "USEPA" +] diff --git a/schemas/data/src/subset/WellDepthUnit.json b/schemas/data/src/subset/WellDepthUnit.json new file mode 100644 index 00000000..de7808f8 --- /dev/null +++ b/schemas/data/src/subset/WellDepthUnit.json @@ -0,0 +1 @@ +["ft", "m"] diff --git a/schemas/data/src/subset/WellOpenIntervalBottomUnit.json b/schemas/data/src/subset/WellOpenIntervalBottomUnit.json new file mode 100644 index 00000000..de7808f8 --- /dev/null +++ b/schemas/data/src/subset/WellOpenIntervalBottomUnit.json @@ -0,0 +1 @@ +["ft", "m"] diff --git a/schemas/data/src/subset/WellOpenIntervalTopUnit.json b/schemas/data/src/subset/WellOpenIntervalTopUnit.json new file mode 100644 index 00000000..de7808f8 --- /dev/null +++ b/schemas/data/src/subset/WellOpenIntervalTopUnit.json @@ -0,0 +1 @@ +["ft", "m"] diff --git a/schemas/data/src/subset/WellUseType.json b/schemas/data/src/subset/WellUseType.json new file mode 100644 index 00000000..0bb5a952 --- /dev/null +++ b/schemas/data/src/subset/WellUseType.json @@ -0,0 +1,18 @@ +[ + "Aquaculture", + "Bottling", + "Dewatering", + "Domestic", + "Geothermal", + "Industrial", + "Irrigation", + "Livestock", + "Monitoring - Ambient", + "Monitoring - Other", + "Oil/Gas Production", + "Other", + "Public Supply - Municipal", + "Public Supply - Other", + "Recharge", + "Test Hole" +] diff --git a/schemas/data/src/subtraction/ActivityType.json b/schemas/data/src/subtraction/ActivityType.json deleted file mode 100644 index 86b2eb86..00000000 --- a/schemas/data/src/subtraction/ActivityType.json +++ /dev/null @@ -1,52 +0,0 @@ -[ - "Field Msr/Obs-Habitat Assessment", - "Field Msr/Obs-Incidental", - "Quality Control", - "Quality Control Field Calibration Check", - "Quality Control Field Replicate Habitat Assessment", - "Quality Control Field Replicate Sample-Composite", - "Quality Control Field Replicate Sample-Field Subsample", - "Quality Control Lab Sample Equipment Rinsate Blank", - "Quality Control Sample-Archive Blank", - "Quality Control Sample-Blind", - "Quality Control Sample-Concurrent Replicate", - "Quality Control Sample-Equipment Blank", - "Quality Control Sample-Field Ambient Conditions Blank", - "Quality Control Sample-Integrated Time Series-Ambient Blank", - "Quality Control Sample-Integrated Time Series-Concurrent Replicate", - "Quality Control Sample-Integrated Time Series-Sequential Replicate", - "Quality Control Sample-Integrated Time Series-Split Replicate", - "Quality Control Sample-Integrated Time Series-SplitConcurrentReplicate", - "Quality Control Sample-Integrated Time Series-SplitSequentialReplicate", - "Quality Control Sample-Integrated Time Series-Unspecified", - "Quality Control Sample-Integrated Time Series-Unspecified Replicate", - "Quality Control Sample-Lab Continuing Calibration Verification", - "Quality Control Sample-Lab Control Sample/Blank Spike", - "Quality Control Sample-Lab Control Sample/Blank Spike Duplicate", - "Quality Control Sample-Lab Control Standard", - "Quality Control Sample-Lab Control Standard Duplicate", - "Quality Control Sample-Lab Initial Calib Certified Reference Material", - "Quality Control Sample-Lab Initial Calibration Verification", - "Quality Control Sample-Lab Matrix Spike Duplicate", - "Quality Control Sample-Lab Spike Duplicate", - "Quality Control Sample-Lab Spike of a Lab Blank", - "Quality Control Sample-Lab Surrogate Method Blank", - "Quality Control Sample-Reference Material", - "Quality Control Sample-Sequential Replicate", - "Quality Control Sample-Source Solution Blank", - "Quality Control Sample-Spike Replicate", - "Quality Control Sample-Spike Solution", - "Quality Control Sample-Spike, Unspecified Type", - "Quality Control Sample-Split Concurrent Replicate", - "Quality Control Sample-Split Replicate", - "Quality Control Sample-Split Sequential Replicate", - "Quality Control Sample-Topical Blank", - "Quality Control Sample-Topical Replicate", - "Quality Control Sample-Topical Spike", - "Quality Control Sample-Unspecified", - "Quality Control Sample-Unspecified Blank", - "Quality Control Sample-Unspecified Replicate", - "Quality Control Sample-Unspecified Topical", - "Sample-Integrated Unspecified Profile", - "Sample-Routine Resample" -] diff --git a/schemas/data/src/subtraction/ResultSampleFraction.json b/schemas/data/src/subtraction/ResultSampleFraction.json deleted file mode 100644 index ea6425a2..00000000 --- a/schemas/data/src/subtraction/ResultSampleFraction.json +++ /dev/null @@ -1,20 +0,0 @@ -[ - "Bed Sediment", - "Bedload", - "Field", - "Filter/sieve residue", - "Filtered field and/or lab", - "Fixed", - "Leachable", - "Net (Hot)", - "None", - "non-linear function", - "Semivolatile", - "Sieved", - "Strong Acid Diss", - "Total Soluble", - "Unfiltered, field", - "Unfiltered, lab", - "Weak Acid Diss", - "Yield" -] diff --git a/schemas/data/src/subtraction/ResultValueType.json b/schemas/data/src/subtraction/ResultValueType.json deleted file mode 100644 index ac18ddf8..00000000 --- a/schemas/data/src/subtraction/ResultValueType.json +++ /dev/null @@ -1 +0,0 @@ -["Blank Corrected Calc"] diff --git a/schemas/data/src/values/ActivityDepthAltitudeReferencePoint.legacy.json b/schemas/data/src/values/ActivityDepthAltitudeReferencePoint.legacy.json new file mode 100644 index 00000000..ee03e428 --- /dev/null +++ b/schemas/data/src/values/ActivityDepthAltitudeReferencePoint.legacy.json @@ -0,0 +1,14 @@ +{ + "$id": "https://datastream.org/schema/data/values/ActivityDepthAltitudeReferencePoint.legacy.json", + "title": "Activity Depth Altitude Reference Point", + "description": "", + "type": "string", + "enum": [ + "Ground surface", + "Top of instrument shelf", + "Top of outer casing", + "Top of well casing", + "Unspecified" + ], + "maxLength": 23 +} \ No newline at end of file diff --git a/schemas/data/src/values/ActivityDepthAltitudeReferencePoint.primary.json b/schemas/data/src/values/ActivityDepthAltitudeReferencePoint.primary.json new file mode 100644 index 00000000..5df88f65 --- /dev/null +++ b/schemas/data/src/values/ActivityDepthAltitudeReferencePoint.primary.json @@ -0,0 +1,14 @@ +{ + "$id": "https://datastream.org/schema/data/values/ActivityDepthAltitudeReferencePoint.primary.json", + "title": "Activity Depth Altitude Reference Point", + "description": "", + "type": "string", + "enum": [ + "Ground surface", + "Top of instrument shelf", + "Top of outer casing", + "Top of well casing", + "Unspecified" + ], + "maxLength": 23 +} \ No newline at end of file diff --git a/schemas/data/src/values/ActivityDepthAltitudeReferencePointUnit.legacy.json b/schemas/data/src/values/ActivityDepthAltitudeReferencePointUnit.legacy.json new file mode 100644 index 00000000..25bc8a88 --- /dev/null +++ b/schemas/data/src/values/ActivityDepthAltitudeReferencePointUnit.legacy.json @@ -0,0 +1,13 @@ +{ + "$id": "https://datastream.org/schema/data/values/ActivityDepthAltitudeReferencePointUnit.legacy.json", + "title": "Measurement Unit", + "description": "", + "type": "string", + "enum": [ + "cm", + "ft", + "in", + "m" + ], + "maxLength": 2 +} \ No newline at end of file diff --git a/schemas/data/src/values/ActivityDepthAltitudeReferencePointUnit.primary.json b/schemas/data/src/values/ActivityDepthAltitudeReferencePointUnit.primary.json new file mode 100644 index 00000000..c9ed519e --- /dev/null +++ b/schemas/data/src/values/ActivityDepthAltitudeReferencePointUnit.primary.json @@ -0,0 +1,13 @@ +{ + "$id": "https://datastream.org/schema/data/values/ActivityDepthAltitudeReferencePointUnit.primary.json", + "title": "Measurement Unit", + "description": "", + "type": "string", + "enum": [ + "cm", + "ft", + "in", + "m" + ], + "maxLength": 2 +} \ No newline at end of file diff --git a/schemas/data/src/values/ActivityDepthHeightUnit.legacy.json b/schemas/data/src/values/ActivityDepthHeightUnit.legacy.json index 84470b2f..66317eee 100644 --- a/schemas/data/src/values/ActivityDepthHeightUnit.legacy.json +++ b/schemas/data/src/values/ActivityDepthHeightUnit.legacy.json @@ -1,5 +1,5 @@ { - "$id": "https://datastream.org/schema/data/values/ActivityDepthHeightUnit.loose.json", + "$id": "https://datastream.org/schema/data/values/ActivityDepthHeightUnit.legacy.json", "title": "Measurement Unit", "description": "", "type": "string", diff --git a/schemas/data/src/values/ActivityDepthHeightUnit.primary.json b/schemas/data/src/values/ActivityDepthHeightUnit.primary.json index 2b4ab20a..5fd1c287 100644 --- a/schemas/data/src/values/ActivityDepthHeightUnit.primary.json +++ b/schemas/data/src/values/ActivityDepthHeightUnit.primary.json @@ -1,5 +1,5 @@ { - "$id": "https://datastream.org/schema/data/values/ActivityDepthHeightUnit.strict.json", + "$id": "https://datastream.org/schema/data/values/ActivityDepthHeightUnit.primary.json", "title": "Measurement Unit", "description": "", "type": "string", diff --git a/schemas/data/src/values/ActivityGroupType.legacy.json b/schemas/data/src/values/ActivityGroupType.legacy.json index 65b716f6..16a372a3 100644 --- a/schemas/data/src/values/ActivityGroupType.legacy.json +++ b/schemas/data/src/values/ActivityGroupType.legacy.json @@ -1,16 +1,16 @@ { - "$id": "https://datastream.org/schema/data/values/ActivityGroupType.loose.json", + "$id": "https://datastream.org/schema/data/values/ActivityGroupType.legacy.json", "title": "Activity Group Type", "description": "", "type": "string", "enum": [ - "Field Set", + "Continuous Data", + "Field Measure", + "Lab Sample", "Other", - "QC Sample", - "Replicate", - "Subsample", - "Trip", + "Quality Control - Field Measure", + "Quality Control - Lab Sample", "Unspecified" ], - "maxLength": 11 + "maxLength": 31 } \ No newline at end of file diff --git a/schemas/data/src/values/ActivityGroupType.primary.json b/schemas/data/src/values/ActivityGroupType.primary.json index 582247d4..d48e72c7 100644 --- a/schemas/data/src/values/ActivityGroupType.primary.json +++ b/schemas/data/src/values/ActivityGroupType.primary.json @@ -1,16 +1,16 @@ { - "$id": "https://datastream.org/schema/data/values/ActivityGroupType.strict.json", + "$id": "https://datastream.org/schema/data/values/ActivityGroupType.primary.json", "title": "Activity Group Type", "description": "", "type": "string", "enum": [ - "Field Set", + "Continuous Data", + "Field Measure", + "Lab Sample", "Other", - "QC Sample", - "Replicate", - "Subsample", - "Trip", + "Quality Control - Field Measure", + "Quality Control - Lab Sample", "Unspecified" ], - "maxLength": 11 + "maxLength": 31 } \ No newline at end of file diff --git a/schemas/data/src/values/ActivityMediaName.legacy.json b/schemas/data/src/values/ActivityMediaName.legacy.json index 306bf444..2c544736 100644 --- a/schemas/data/src/values/ActivityMediaName.legacy.json +++ b/schemas/data/src/values/ActivityMediaName.legacy.json @@ -1,5 +1,5 @@ { - "$id": "https://datastream.org/schema/data/values/ActivityMediaName.loose.json", + "$id": "https://datastream.org/schema/data/values/ActivityMediaName.legacy.json", "title": "Activity Media Subdivision", "description": "", "type": "string", diff --git a/schemas/data/src/values/ActivityMediaName.primary.json b/schemas/data/src/values/ActivityMediaName.primary.json index 4c05ce90..b899822d 100644 --- a/schemas/data/src/values/ActivityMediaName.primary.json +++ b/schemas/data/src/values/ActivityMediaName.primary.json @@ -1,10 +1,11 @@ { - "$id": "https://datastream.org/schema/data/values/ActivityMediaName.strict.json", + "$id": "https://datastream.org/schema/data/values/ActivityMediaName.primary.json", "title": "Activity Media Subdivision", "description": "", "type": "string", "enum": [ "Ambient Air", + "Groundwater", "Ocean Water", "Porewater", "Rainwater", diff --git a/schemas/data/src/values/ActivityType.legacy.json b/schemas/data/src/values/ActivityType.legacy.json index c7a2ffe0..5e1e4f32 100644 --- a/schemas/data/src/values/ActivityType.legacy.json +++ b/schemas/data/src/values/ActivityType.legacy.json @@ -1,5 +1,5 @@ { - "$id": "https://datastream.org/schema/data/values/ActivityType.loose.json", + "$id": "https://datastream.org/schema/data/values/ActivityType.legacy.json", "title": "Activity Type", "description": "", "type": "string", @@ -8,8 +8,10 @@ "Field Msr/Obs-Continuous Time Series", "Field Msr/Obs-Habitat Assessment", "Field Msr/Obs-Incidental", + "Field Msr/Obs-Integrated Flow Proportioned", + "Field Msr/Obs-Integrated Time Series", + "Field Msr/Obs-Integrated Vertical Profile", "Field Msr/Obs-Portable Data Logger", - "Quality Control", "Quality Control Alternative Measurement Sensitivity", "Quality Control Alternative Measurement Sensitivity Plus", "Quality Control Field Calibration Check", diff --git a/schemas/data/src/values/ActivityType.primary.json b/schemas/data/src/values/ActivityType.primary.json index a51a2686..7057cba7 100644 --- a/schemas/data/src/values/ActivityType.primary.json +++ b/schemas/data/src/values/ActivityType.primary.json @@ -1,65 +1,40 @@ { - "$id": "https://datastream.org/schema/data/values/ActivityType.strict.json", + "$id": "https://datastream.org/schema/data/values/ActivityType.primary.json", "title": "Activity Type", "description": "", "type": "string", "enum": [ "Field Msr/Obs", "Field Msr/Obs-Continuous Time Series", + "Field Msr/Obs-Integrated Flow Proportioned", + "Field Msr/Obs-Integrated Time Series", + "Field Msr/Obs-Integrated Vertical Profile", "Field Msr/Obs-Portable Data Logger", - "Quality Control Alternative Measurement Sensitivity", - "Quality Control Alternative Measurement Sensitivity Plus", - "Quality Control Field Msr/Obs Post-Calibration", - "Quality Control Field Msr/Obs Pre-Calibration", "Quality Control Field Replicate Msr/Obs", "Quality Control Field Replicate Portable Data Logger", "Quality Control Field Sample Equipment Rinsate Blank", "Quality Control Sample-Blind Duplicate", "Quality Control Sample-Field Blank", "Quality Control Sample-Field Replicate", - "Quality Control Sample-Field Spike", - "Quality Control Sample-Field Surrogate Spike", - "Quality Control Sample-Integrated Time Series-Equipment Blank", - "Quality Control Sample-Integrated Time Series-Field Blank", - "Quality Control Sample-Integrated Time Series-Lab Blank", - "Quality Control Sample-Integrated Time Series-Trip Blank", - "Quality Control Sample-Integrated Time Series-Unspecified Blank", - "Quality Control Sample-Inter-lab Split", "Quality Control Sample-Lab Blank", "Quality Control Sample-Lab Duplicate", - "Quality Control Sample-Lab Duplicate 2", "Quality Control Sample-Lab Matrix Spike", "Quality Control Sample-Lab Re-Analysis", "Quality Control Sample-Lab Spike", - "Quality Control Sample-Lab Spike Target", "Quality Control Sample-Lab Split", "Quality Control Sample-Lab Surrogate Control Standard", "Quality Control Sample-Lab Surrogate Control Standard Duplicate", - "Quality Control Sample-Measurement Precision Sample", - "Quality Control Sample-Other", - "Quality Control Sample-Post-preservative Blank", - "Quality Control Sample-Pre-preservative Blank", - "Quality Control Sample-Reagent Blank", "Quality Control Sample-Reference Sample", "Quality Control Sample-Trip Blank", "Quality Control-Calibration Check", - "Quality Control-Calibration Check Buffer", - "Quality Control-Meter Lab Blank", - "Quality Control-Meter Lab Duplicate", - "Quality Control-Meter Lab Duplicate 2", - "Quality Control-Negative Control", "Sample-Composite With Parents", "Sample-Composite Without Parents", - "Sample-Depletion Replicate", "Sample-Field Split", - "Sample-Field Subsample", - "Sample-Integrated Cross-Sectional Profile", "Sample-Integrated Flow Proportioned", "Sample-Integrated Horizontal and Vertical Composite Profile", "Sample-Integrated Horizontal Profile", "Sample-Integrated Time Series", "Sample-Integrated Vertical Profile", - "Sample-Negative Control", "Sample-Other", "Sample-Positive Control", "Sample-Routine", diff --git a/schemas/data/src/values/AquiferType.legacy.json b/schemas/data/src/values/AquiferType.legacy.json new file mode 100644 index 00000000..04e6d5c7 --- /dev/null +++ b/schemas/data/src/values/AquiferType.legacy.json @@ -0,0 +1,13 @@ +{ + "$id": "https://datastream.org/schema/data/values/AquiferType.legacy.json", + "title": "Aquifer Type", + "description": "", + "type": "string", + "enum": [ + "Artesian", + "Confined", + "Semi-Confined", + "Unconfined" + ], + "maxLength": 13 +} \ No newline at end of file diff --git a/schemas/data/src/values/AquiferType.primary.json b/schemas/data/src/values/AquiferType.primary.json new file mode 100644 index 00000000..e403eb49 --- /dev/null +++ b/schemas/data/src/values/AquiferType.primary.json @@ -0,0 +1,13 @@ +{ + "$id": "https://datastream.org/schema/data/values/AquiferType.primary.json", + "title": "Aquifer Type", + "description": "", + "type": "string", + "enum": [ + "Artesian", + "Confined", + "Semi-Confined", + "Unconfined" + ], + "maxLength": 13 +} \ No newline at end of file diff --git a/schemas/data/src/values/AquiferUnitName.legacy.json b/schemas/data/src/values/AquiferUnitName.legacy.json new file mode 100644 index 00000000..a82ecd2a --- /dev/null +++ b/schemas/data/src/values/AquiferUnitName.legacy.json @@ -0,0 +1,779 @@ +{ + "$id": "https://datastream.org/schema/data/values/AquiferUnitName.legacy.json", + "title": "Aquifer Unit Name", + "description": "", + "type": "string", + "enum": [ + "111 Mile Creek Valley Aquifer System", + "1WS Member", + "2WS Member", + "Abbotsford Shallow Aquifer", + "Abbotsford Shallow West Aquifer", + "Alberta Group", + "Aldergrove Shallow Aquifer", + "Algonquin Aquifer Complex", + "Algonquin Basin", + "Algonquin Shoreline", + "Alice Siding Aquifer", + "Alliston Aquifer Complex", + "Alluvial and glaciofluvial sand and gravel", + "Alviston-Rutherford Aquifer", + "Amabel-Lockport-Guelph Hydrogeologic Unit", + "Amherstburge Aquifer", + "Ancaster-West Flamborough Aquifer", + "Annapolis-Cornwallis valleys Aquifer", + "Anten Coquina Member", + "Arras-Fellers Heights Bedrock Aquifer", + "Arrowwood Formation", + "Arthur-Mount Forest Aquifer", + "Assiniboine delta Aquifer", + "Atha Aquifer", + "Ausable Aquifer", + "Bad Heart Formation", + "Balfron Formation", + "Banff Formation", + "Barons Sand Formation", + "Basal Aquifer", + "Basal clastic unit (Winnipeg) Aquifer", + "Basal Cretaceous Sandstone", + "Bass Island Hydrogeologic Unit", + "Battle Formation", + "Battleford Formation", + "Beach Ridge sand and gravel", + "Bearpaw Formation", + "Beaver Creek Overburden Aquifer", + "Belle Fourche Formation", + "Belly River Formation", + "Belly River Group", + "Beverly-Onoway channel Complex", + "Billings-Carlsbad-Queenston Hydrogeologic Unit", + "Blackstone Formation", + "Blewett Bedrock Aquifer", + "Blood Reserve Formation", + "Blue Mountain-Georgian Bay Hydrogeologic Unit", + "Blueberry Valley Aquifer System", + "Blueberry-Aitken Bedrock Aquifer", + "Bluesky Formation", + "Bois Blanc Hydrogeologic Unit", + "Boissevain Formation", + "Bonnyville U1 Sand", + "Bonnyville U1 Till", + "Bonnyville U2 Till", + "Boss Point Formation", + "Bothwell Aquifer", + "Bounded Channel Aquifers", + "Bourget Aquifer", + "Bow Island Formation", + "Bradley Creek Valley Aquifer System", + "Brazeau Formation", + "Bredenbury & Wynyard Formations", + "Bridge Lake Aquifer System", + "Brilliant Bedrock Aquifer", + "Bronson Lake", + "Brownsville Local Aquifer", + "Buried valley containing sand and gravel", + "Buried valley/blanket Aquifers", + "Cadomin Formation", + "Cadotte Formation", + "Caledon-Grand River Outwash Aquifer", + "Calgary Lethbridge Corridor HSU C Aquitard", + "Calgary Lethbridge Corridor HSU S1 Aquifer", + "Calgary Lethbridge Corridor HSU S2 Aquifer", + "Canadian Shield", + "Canning Aquitard", + "Canning Till Aquitard", + "Cantuar Formation", + "Canyon Overburden Aquifer", + "Carbon Member", + "Carbonate rock Aquifer", + "Carboniferous basin Aquifer", + "Cardium Formation", + "Carlile Formation", + "Casino Overburden Aquifer", + "Castlegar Overburden Aquifer", + "Cataract Group Hydrogeologic Unit", + "Catfish Creek Aquifer", + "Cedar Grove Aquifer", + "Central Catfish Creek Aquifer", + "Central Halfway-Beatton Bedrock Aquifer", + "Central South Nation Aquifer Complex", + "Champlain Aquifer", + "Channel Aquifer 1", + "Channel Aquifer 2", + "Channel Aquifer 3", + "Channel Aquitard 1", + "Channel Aquitard 2", + "Charlie Halfway Beatton Bedrock Aquifer", + "Chateauguay Aquifer", + "Chauidiere Aquifer", + "Chesley Aquifer", + "Chinchaga Formation", + "Chu Íntthi Aquifer", + "Chungo Member", + "Clarence Creek Aquifer", + "Clayton Heights Aquifer", + "Clayton Uplands Aquifer", + "Clinton Creek Bedrock Aquifer", + "Clinton Creek Lower Unconsolidated Aquifer", + "Clinton Creek Upper Sand and Gravel Aquifer", + "Clinton Group Hydrogeologic Unit", + "Coalspur Formation", + "Cold Lake Formation", + "Coldstream Aquifer", + "Colorado Group", + "Connelly Creek Formation", + "Contact Aquifer", + "Contact Rapids Formation", + "Cooking Lake area sediments", + "Cooking Lake Formation", + "Credit River Aquifer", + "Creston-Kootenay River Overburden Aquifer", + "Cridland Creek Bedrock Aquifer", + "Crowsnest River Alluvial Aquifer", + "Cumberland Group", + "Cypress Hills Formation", + "Dalehurst Member", + "Dawson Creek Overburden Aquifer", + "Del Bonita Formation", + "Detroit River Group Hydrogeologic Unit", + "Devonian Strata", + "Dinosaur Park Formation", + "Doe Creek Member", + "Doig Formation", + "Don Formation", + "Dowling Member", + "Drumheller Channel Complex", + "Drumheller Member", + "Drywood Creek Formation", + "Dundalk Aquifer", + "Dundee Hydrogeologic Unit", + "Dundurn Formation", + "Dunvegan Formation", + "Durham Aquifer", + "Duvernay Formation", + "Dyer-Wingfield-St. Edmund Hydrogeologic Unit", + "East and Middle Sixteen Mile Aquifer", + "East Creston Bedrock Aquifer", + "East Pine Bedrock Aquifer", + "East Pine-Groundbirch Bedrock Aquifer", + "Eastend Formation", + "Eastend-Ravenscrag Aquifer", + "Edson burried-valley Aquifer", + "Egmond Bay Formation", + "Elgin-Southampton Aquifer", + "Ellerslie Member", + "Ellis Group", + "Empress Formation", + "Empress Formation-Uplands glacial", + "Empress Formation-Valley fill glacial", + "Empress Formation-Valley fill glacial Tertiary Undifferentiated", + "Empress Formation-Valley fill Tertiary", + "Erie Interstadial Deposits", + "Ernestina Lake Formation", + "Esker and gravel", + "Estend Formation", + "Ethel Lake Formation", + "Etobicoke Aquifer", + "Exshaw Formation", + "Eyot Formation", + "Farrel Creek Bedrock Aquifer", + "Fernie Formation", + "First White Specks Formation", + "Fish Scales Formation", + "Fish Scales Member", + "Flesherton Aquifer", + "Floral Formation", + "Fontfill Aquifer Complex", + "Foremost Formation", + "Fort Nelson-River Alluvial Aquifer", + "Fort Simpson Formation", + "Fort St. John Overburden Aquifer System", + "Fort Vermilion Formation", + "Fourchu Group", + "Fractured Aquifers-Gulf Islands", + "Fraser Canyon Aquifer, Choate to Yale", + "Fraser Canyon Aquifer, from Yale to Haig", + "Fraser Lowlands Aquifer", + "Fraser Plateau Lava Aquifer", + "Frenchman Formation", + "Frenchman to Eastend Undifferentiated", + "Fulford Aquifer", + "Fundy Group", + "Ganges Harbour Aquifer", + "Georgeville Group", + "Gething Formation", + "Gibsons/SCRD Granthams Landing/Elphinstone Aquifer", + "Glaciolacustrine Aquifer Complex", + "Glade Overburden Aquifer", + "Glauconitic Sandstone Formation", + "Glemmore Basal Aquifer", + "Gleneden Aquifer", + "Grand Centre Formation", + "Grand Forks Aquifer", + "Grand Rapids Formation", + "Grand River Aquifer", + "Grand River Basin Aquifer", + "Grand River Outwash Deposits", + "Grand River Valley Basinal Deposits", + "Grandview Aquifer", + "Grant Hill Aquifer", + "Greater Kelowna Aquifer", + "Greatlakean Stade Deposits", + "Green River Aquifer", + "Greendale Deep Aquifer", + "Greenwood", + "Greenwood Aquifer", + "Grimshaw Gravels Aquifer", + "Grosmont Formation", + "Groundbirch Buried Valley Aquifer", + "Grumbler Group", + "Guichon Creek Aquifer", + "Haans Creek to Blain Creek-Haida Gwaii Aquifer", + "Hagan Aquifer", + "Haida/Lawnhill Aquifer", + "Haig Aquifer", + "Halfway Valley Aquifer System", + "Halton Till", + "Halverson Ridge Formation", + "Hamilton Group Hydrogeologic Unit", + "Hand Hills Formation", + "Hanover Aquifer", + "Hanson Member", + "Harrow Aquifer", + "Hatzic Prairie Aquifer", + "Haultain Formation", + "Haven Member", + "Haynes Aquifer", + "Haynes Member", + "Hazelmere Aquifer", + "Hazelmere Valley Aquifer", + "Heather Bank Aquifer", + "Hillsborough Formation", + "Hillsborough River Formation", + "Hockley Valley Aquifer", + "Holstein Aquifer", + "Holt Aquifer Complex", + "Hopington AB Aquifer", + "Hopington C Aquifer", + "Horseshoe Canyon Formation", + "Horsethief Member", + "Horton Group", + "Houston Bedrock Aquifer", + "Hullcar Confined Aquifer", + "Hullcar Perched", + "Hullcar Unconfined Aquifer", + "Ireton Formation", + "Ishbel Group", + "Joeyaska Deep Aquifer", + "Joeyaska Shallow Aquifer", + "Joli Fou Formation", + "Judith River Aquifer", + "Judith River/Belly River Formation", + "Jumping Pound SST Member", + "Jurassic Formations", + "Kame Outwash Aquifer Complex", + "Karmutsen Aquifer", + "Kaskapau Formation", + "Kawkawa Lake Aquifer", + "Keating Aquifer", + "Keg River Formation", + "Kettle Point Hydrogeologic Unit", + "Kildare Formation", + "Kingsvale Aquifer", + "Kiskatinaw Buried Channel Aquifer", + "Kiskatinaw Glaciodeltaic Overburden Aquifer", + "Kitchener Creek Overburden Aquifer", + "Kleinburg Aquifer", + "Koksilah River Valley Aquifer", + "Kwinshatin Intertill Aquifer", + "La Glace Sandstone Member", + "La Loche Formation AND Basal Red Beds Unit", + "Lacombe Aquitard", + "Lacombe Member", + "Lake Algonquin Sand Aquifer", + "Lake Peel Deltaic Aquifer", + "Lake Schomberg and Algonquin Aquifer", + "Lake Schomberg and Algonquin Aquitard", + "Lancaster-Cornwall Aquifer", + "Langdale/Hopkins Aquifer", + "Langdale/Hopkins Landing Aquifer", + "Langley Upland Aquifer", + "Langley Upland Intertill Aquifer", + "LD Basal Till", + "LD Local Aquifers", + "LD Lower Aquifer", + "LD Middle Till", + "LD Upper Till", + "Lea Park Formation", + "Leamington Aquifer", + "Leduc Formation", + "Lenses of sand and gravel", + "Lincoln Aquifer", + "Little Qualicum River Aquifer", + "Local Aquifer 2", + "Local Aquitard 1", + "Lookout Ridge Aquifer", + "Łots'an Aquifer", + "Lower Bearpaw Formation", + "Lower Belly River Formation", + "Lower Brazeau Member", + "Lower Bridge Creek Valley Aquifer System", + "Lower Bridge Creek Valley Bedrock Aquifer", + "Lower Brougham Aquifer", + "Lower Cassidy Aquifer", + "Lower Catfish Creek Till Aquitard", + "Lower Cherryville Aquifer", + "Lower Chinguacousy Aquifer", + "Lower Coalspur Member", + "Lower Coquihalla Canyon Aquifer", + "Lower Cowichan River A Aquifer", + "Lower Cowichan River C Aquifer", + "Lower Erie Phase Aquifer", + "Lower Erie Phase Aquitard", + "Lower Gates River Aquifer", + "Lower Lac la Hache Valley Bedrock Aquifer", + "Lower Lea Park Formation", + "Lower Loon River Formation", + "Lower Lotsberg Formation", + "Lower Markham Aquifer", + "Lower Maryhill Till", + "Lower Merritt Aquifer", + "Lower Montney Formation", + "Lower Nechako River Aquifer", + "Lower Nicola Aquifer", + "Lower Nicola Outwash Aquifer", + "Lower Ordovician OR Cambrian Strata", + "Lower Scollard Member", + "Lower Shaftesbury Formation", + "Lower Shuswap Deep Confined", + "Lower Shuswap River Confined", + "Lower Thorncliffe Aquifer", + "Lower Thorncliffe Aquitard", + "Lower Unionville Aquifer", + "Lower Victoria Aquifer", + "Lower Wapiti Member", + "Lower Willow Creek Member", + "Lowland Aquifer Complex", + "Lumby-Lower Aquifer", + "Lumby-Upper Aquifer", + "Lundbreck Formation", + "Mabou Group", + "Mackinaw Interstadial Deposits", + "Majeau Lake Formation", + "Major buried sand and gravel", + "Malahat Ridge Aquifer", + "Malcolm Island Aquifer", + "Mannville Group", + "Maple Aquifer", + "Mara Aquifer Aquifer", + "Marble Hill Unconsolidated Aquifer", + "Marie Creek Formation", + "Markdale Aquifer", + "Marshybank Formation", + "Marshybank Member", + "Masset Aquifer", + "McDougall Creek Deltaic Aquifer", + "McMillan Island Aquifer", + "McMurray Formation", + "Meaford Aquifer", + "Medicine Hat Formation", + "Medicine Hat Member", + "Meguma SuperGroup", + "Meltwater Channel Hydrogeologic Unit", + "Mennon Formation", + "Middle Erie Phase Aquifer", + "Middle Maryhill Till", + "Middle Merritt Aquifer", + "Middle Montney Formation", + "Middle Red Beds Formation", + "Middle Thorncliffe Aquifer", + "Middle Thorncliffe Aquitard", + "Middle Waterloo Moraine Aquifer & Equivalents", + "Milk River Aquifer", + "Milk River Formation", + "Mill Bay Aquifer", + "Minesing Basin Transgressive Deposits", + "Mirabel Aquifer", + "Mission Creek Aquifer", + "Monteith Formation", + "Montney Halfway Beatton Bedrock Aquifer", + "Montney Turbidite", + "Montrose Bedrock Aquifer", + "Morien Group", + "Morrin Member", + "Mount Albert Aquifer Complex", + "Mount Ozzard Bedrock West Aquifer", + "Mount Ozzard, Bedrock Southeast", + "Mount Ozzard, Unconsolidated", + "Mount Tom Bedrock", + "Mount Tom Bedrock Aquifer", + "Mount Tom Unconsolidated", + "Muriel Lake", + "Murrayville AC Aquifer", + "Murrayville B Aquifer", + "Muskeg Formation", + "Muskeg Lower Anhydrite Member", + "Muskiki Formation", + "Muskiki Formation OR Kaskapau Formation", + "Muskiki Member", + "Muskwa Formation", + "Muskwa River Alluvial Aquifer", + "Muskwa-Fort Nelson Buried Valley Aquifer", + "Muskwa-Fort Nelson Glaciofluvial Aquifer", + "Nanaimo Group Aquifer, Campbell River to Courtney", + "Nanaimo Lowlands Aquifer", + "NE of White Rock A Aquifer", + "NE of White Rock B Aquifer", + "Nechako Buried Valley Aquifer", + "Nelson Overburden Aquifer", + "Newmarket Till", + "Newton Upland Aquifer", + "Niagra-on-the-Lake Aquifer", + "Nicomekl-Serpentine Aquifer", + "Nicomen Slough Aquifer", + "Nikanassin Formation", + "Niobrara Formation", + "Nissouri Stadial Deposits", + "Nivek Aquifer", + "Nomad Member", + "Norfolk Sand Plain Aquifer", + "Norns Creek Overburden Aquifer", + "North Campbell River Bedrock", + "North Campbell River Unconsolidated", + "North Castlegar Bedrock Aquifer", + "North Central Saanich Aquifer", + "North Hope Aquifer", + "North Houston Bedrock", + "North Mountain Formation", + "North Nechako Terrace Bedrock Aquifer", + "North Salt Spring Island Aquifer", + "North-Central Salt Spring Island Aquifer", + "Northern Halfway Beatton Bedrock Aquifer", + "Northern Lac la Hache Aquifer System", + "Northwest Halfway-Beatton Bedrock Aquifer", + "Northwest of Clearbrook Aquifer", + "Notre Dame Aquifer", + "O Avenue Aquifer", + "O'Keefe Basal", + "O'Keefe Unconfined Aquifer", + "Oak Ridges Moraine Aquifer", + "Obed Mountain Formation", + "Odanah Member", + "Odanah Shale Aquifer", + "Okanagan Landing Deep Confined", + "Okanagan Valley Aquifer", + "Oldcastle Aquifer", + "Oldman Formation", + "Opabin Member", + "Orangeville Aquifer Complex", + "Orby Head Formation", + "Oro Moraine Aquifer Complex", + "Oro-Medonte Aquifer", + "Osoyoos West Aquifer", + "Ostracod Beds Member", + "Ottawa Group Hydrogeologic Unit", + "Owl Creek Aquifer", + "Owl Ridge Aquifer", + "Oyster River Aquifer", + "Pacheedaht Aquifer", + "Paddy Formation", + "Pakowki Formation", + "Paldi-Deep Aquifer", + "Paleozoic Carbonate rock formations, Ordovician to Devonian", + "Paris Aquifer", + "Paris moraine Aquitard", + "Paskapoo Formation", + "Paskapoo Formation Aquifer", + "Paterson Overburden Aquifer", + "Paul's Basin Aquifer", + "Peace River Formation", + "Peace-Valley Aquifer System", + "Pelican Formation", + "Pelican Mountain Formation", + "Pense Formation", + "Pickering Aquifer", + "Pictou Group", + "Pike Lake Formation", + "Pineview Aquifer", + "Plantagenet Aquifer", + "Porcupine Hills Formation", + "Porcupine Hills Formation Aquifers", + "Port Bruce Phase Aquitard", + "Port Bruce Stadial Deposits", + "Port Clements Aquifer", + "Port Colborne Aquifer", + "Port Huron Stadial Deposits", + "Port McNeill East Bedrock Aquifer", + "Port McNeill East Unconsolidated", + "Port McNeill West Bedrock", + "Port McNeill West Unconsolidated", + "Portneuf Aquifer", + "Pottery Road Formation", + "Pouce Coupe Member", + "Pouce Coupe Overburden Aquifer", + "Pouce Creek Bedrock Aquifer", + "Powers Ck Deltaic Aquifer", + "Prairie Evaporite Formation", + "Pre-Canning Aquifers", + "Pre-Canning Aquitard", + "Pre-Catfish Aquifers", + "Precambrian Hydrogeologic Unit", + "Precambrian rocks", + "Precambrian to Model Base", + "Priceville Aquifer", + "Prophet River Alluvial Aquifer", + "Puntledge/ Cumberland Aquifer", + "Puskwaskau Formation", + "Puslinch Aquifer", + "Quadra Central Bedrock Aquifer", + "Quadra South Bedrock Aquifer", + "Queenston Hydrogeologic Unit", + "Quinsam to Stories Beach Aquifer", + "Ravenscrag Formation", + "Ravenscrag to Eastend Undifferentiated", + "Rawlings Lake Aquifer", + "Red Deer River channel complex", + "Regional Aquifer 3", + "Regional Aquitard 3", + "Richelieu-Yamaska Aquifer", + "Richibucto Formation", + "Rideau Front Aquifer", + "Riding Mountain/Pierre Shale Formation", + "Roberts Creek Aquifer", + "Rockcliffe Hydrogeologic Unit", + "Rockland Aquifer", + "Rosebery Aquifer", + "Rundle Group", + "Ryder Upland A Aquifer", + "Ryder Upland B Aquifer", + "Ryder Upland C Aquifer", + "Saint-Maurice Aquifer", + "Salina Hydrogeologic Unit", + "Salmo River Bedrock Aquifer", + "Salmo River Overburden Aquifer", + "Salmon River Aquifer", + "Salmon River-Lower Aquifer", + "Salmon River-Upper Aquifer", + "Sand Dunes Aquifer", + "Sandilands Aquifer", + "Sandspit-Haida Gwaii Aquifer", + "Sardis-Vedder Aquifer", + "Sarsfield Aquifer", + "Sayward-Salmon River Aquifer", + "Scarborough Formation", + "Schomberg Aquifer Complex", + "Schooler Creek Group", + "Scollard Formation", + "Sechelt/Wakefield Creek Aquifer", + "Second White Specks Formation", + "Second White Specks/Favel Formation", + "Sediment Above Bedrock", + "Seton Portage Aquifer", + "Shaftesbury Formation", + "Shannon Lake Aquifer", + "Shawnigan Lake Aquifer", + "Shawnigan Lake/Cobble Hill/Mill Bay Aquifer", + "Sheridan Lake Aquifer", + "Shuswap Highlands Aquifer", + "Silurian", + "Simcoe Group Hydrogeologic Unit", + "Similkameen River Aquifer", + "Sinkut Mountain North Surficial Aquifer", + "Skidgate/Queen Charlotte Aquifer", + "Slave Point Formation", + "Smoky Group", + "Sooke-Metchosin Aquifer", + "South Castlegar Bedrock Aquifer", + "South Central Elgin Aquifer", + "South Fraser Lake Bedrock Aquifer", + "South Fraser River Delta Aquifer", + "South London Aquifer", + "South Nation Aquifer", + "South Nechako Terrace Bedrock Aquifer", + "South of Aldergrove Aquifer", + "South of Hopington Aquifer", + "South of Murrayville AC Aquifer", + "South of Murrayville B Aquifer", + "South Quadra Unconsolidated Aquifer", + "South Salt Spring Island Aquifer", + "South Valemont Aquifer", + "South Vanderhoof Unconsolidated Aquifer", + "South Vernon Confined Aquifer", + "South Vernon Unconfined Aquifer", + "South-Central Salt Spring Island Aquifer", + "Southern Horse Lake Aquifer System Aquifer", + "Spallumcheen Basal Confined Aquifer", + "Spallumcheen Confined", + "Spallumcheen Unconfined Aquifer", + "Spences Bridge Aquifer", + "Sperling Aquifer", + "Spirit River Formation", + "Spius Creek West of Canford Aquifer", + "St. Catharines Aquifer", + "St. George Aquifers", + "St. Martin Aquifer", + "St. Mary River Formation", + "St. Mathieu Aquifer", + "St. Thomas Moraine Local Aquifers", + "Stavely Aquifer", + "Stellako Unconsolidated Aquifer", + "Stirling Group", + "Stoddart Group", + "Strathmore Member", + "Stumbles Creek Aquifer", + "Stumbles Creek Confined", + "Stump Lake", + "Stump Lake Bedrock", + "Sugar Lake Aquifer", + "Sulphur Point Formation", + "Sumas Prairie Aquifer", + "Sumas Prairie North Aquifer", + "Sunchild Aquifer", + "Sunkay Formation", + "Sunningdale/Glenmerry Bedrock Aquifer", + "Sunnybrae Aquifer", + "Sunnybrook Drift", + "Sunset Creek Overburden Aquifer", + "Sunset Prairie Bedrock Aquifer", + "Swan Hills Formation", + "Swan Lake Confined Aquifer", + "Swan Lake Unconfined", + "Swan River Formation", + "Sweetwater Bedrock Aquifer", + "Tachick Lake Unconsolidated Aquifer", + "Talik regions", + "Tappen Aquifer", + "Thick and extensive unconfined sand and gravel", + "Thin unconfined sand", + "Thistle Member", + "Thornbury Aquifer", + "Thorncliffe Formation", + "Thornill Aquifer", + "Thornton Sand Aquifer", + "Tillsonburg Aquifer", + "Tlell Aquifer", + "Tolman Member", + "Topley Bedrock Aquifer", + "Trail Townsite Overburden Aquifer", + "Trail/Warfield Bedrock Aquifer", + "Trinity Valley Aquifer", + "Tsawwassen Aquifer", + "Tsolum River, North of Courtney Aquifer", + "Tuhok Confined Aquifer", + "Tuhok Unconfined Aquifer", + "Turtle Mountain Formation", + "Two Creeks Interstadial Deposits", + "Tyconnell Formation", + "Ucluelet Peninsula Aquifer", + "Ucluelet, Lost Shoe Aquifer", + "Ucluelet, Lost Show Aquifer", + "Unicola Aquifer", + "Unit A Exposed Bedrock and Drift-Poor Areas", + "Unit B Till and Ribbed Moraine Deposits", + "Unit C Ablation Drift Deposits", + "Unit D Glaciomarine and Marine Deposits and Glaciolacustrine Deposits", + "Unit E Glaciofluvial Deposits", + "Upland Aquifer Complex", + "Upper and Lower Gloucester Aquifers", + "Upper and Lower Nepean-Kemptville Aquifers", + "Upper and Lower West Nepean Aquifers", + "Upper Aquifer 1", + "Upper Bearpaw Formation", + "Upper Brazeau Member", + "Upper Bridge Creek Bedrock Aquifer", + "Upper Bridge Creek Valley Aquifer System", + "Upper Brougham Aquifer", + "Upper Bulkley Alluvial Aquifer", + "Upper Catfish Creek Till Aquitard", + "Upper Cherryville Aquifer", + "Upper Chinguacousy Aquifer", + "Upper Coalspur Member", + "Upper Cretaceous sands Aquifer", + "Upper Erie Phase Aquifer", + "Upper Erie Phase Aquitard", + "Upper Gates River Aquifer", + "Upper Halfway Bedrock Aquifer", + "Upper Lac la Hache Valley Bedrock Aquifer", + "Upper Lea Park Formation", + "Upper Loon Formation", + "Upper Lotsberg Formation", + "Upper Markham Aquifer", + "Upper Maryhill Till", + "Upper Merritt Aquifer", + "Upper Montney Formation", + "Upper Ordovician strata", + "Upper Scollard Member", + "Upper Shaftesbury Formation", + "Upper Thames Aquifer", + "Upper Thorncliffe Aquifer", + "Upper Thorncliffe Aquitard", + "Upper Unionville Aquifer", + "Upper Victoria Aquifer", + "Upper Wapiti Member", + "Upper Waterloo Moraine Aquifer", + "Upper Willow Creek Member", + "Valens Outwash Aquifer", + "Valley View-Dawson Creek Bedrock Aquifer", + "Vanderhoof Alluvial Aquifer", + "Vedder Crossing Aquifer", + "Vedder Mountain NW Bedrock Aquifer", + "Vedder Mountain SE Bedrock Aquifer", + "Vellore Aquifer", + "Verger Member", + "Vermillion River Formation", + "Vernon Confined", + "Vernon Unconfined", + "Viking Formation", + "Viking/Newcastle Formation", + "Vimy Member", + "Wabamun Group", + "Wabiskaw Member", + "Wainfleet Aquifer", + "Walker Hook Aquifer", + "Walkerton Aquifer", + "Wallaceburg Aquifer", + "Wallacetown Formation", + "Wapiabi Formation", + "Wapiti Formation", + "Wark-Colquitz Aquifer", + "Warman Formation", + "Waterloo Moraine Aquifer", + "Waterways Formation", + "Watson Creek Valley Aquifer System", + "Watt Mountain Formation", + "Wentworth Aquifer", + "Wentworth Till/Aquitard", + "West Arrow Creek Overburden Aquifer", + "West Carlton Aquifer", + "West Cluculz Lake Bedrock Aquifer", + "West Creston Aquifer", + "West Langley Aquifer", + "West of Aldergrove Aquifer", + "West of Merritt Aquifer", + "West Saanich Road Aquifer", + "West Sechelt Aquifer", + "Westgate Formation", + "Westwold Aquifer", + "White Rock Aquifer", + "Whitecourt Mountain Formation", + "Whitemud Formation", + "Whitemud Member", + "Whittlesey Aquifer", + "Whittlesey Clay/Aquitard", + "Whittlesey Sand", + "Willow Creek Alluvial Aquifer", + "Willow Creek Formation", + "Willow Creek Formation Aquifer", + "Windsor Group", + "Winnipeg Formation", + "Winnipegosis Formation", + "Winterburn Group", + "Wood Mountain and Mount Washington Aquifer", + "Wood Mountain Formation", + "Woodbridge Aquifer", + "Yonge Street Aquifer", + "York Till", + "Zama Member" + ], + "maxLength": 69 +} \ No newline at end of file diff --git a/schemas/data/src/values/AquiferUnitName.primary.json b/schemas/data/src/values/AquiferUnitName.primary.json new file mode 100644 index 00000000..2f892422 --- /dev/null +++ b/schemas/data/src/values/AquiferUnitName.primary.json @@ -0,0 +1,779 @@ +{ + "$id": "https://datastream.org/schema/data/values/AquiferUnitName.primary.json", + "title": "Aquifer Unit Name", + "description": "", + "type": "string", + "enum": [ + "111 Mile Creek Valley Aquifer System", + "1WS Member", + "2WS Member", + "Abbotsford Shallow Aquifer", + "Abbotsford Shallow West Aquifer", + "Alberta Group", + "Aldergrove Shallow Aquifer", + "Algonquin Aquifer Complex", + "Algonquin Basin", + "Algonquin Shoreline", + "Alice Siding Aquifer", + "Alliston Aquifer Complex", + "Alluvial and glaciofluvial sand and gravel", + "Alviston-Rutherford Aquifer", + "Amabel-Lockport-Guelph Hydrogeologic Unit", + "Amherstburge Aquifer", + "Ancaster-West Flamborough Aquifer", + "Annapolis-Cornwallis valleys Aquifer", + "Anten Coquina Member", + "Arras-Fellers Heights Bedrock Aquifer", + "Arrowwood Formation", + "Arthur-Mount Forest Aquifer", + "Assiniboine delta Aquifer", + "Atha Aquifer", + "Ausable Aquifer", + "Bad Heart Formation", + "Balfron Formation", + "Banff Formation", + "Barons Sand Formation", + "Basal Aquifer", + "Basal clastic unit (Winnipeg) Aquifer", + "Basal Cretaceous Sandstone", + "Bass Island Hydrogeologic Unit", + "Battle Formation", + "Battleford Formation", + "Beach Ridge sand and gravel", + "Bearpaw Formation", + "Beaver Creek Overburden Aquifer", + "Belle Fourche Formation", + "Belly River Formation", + "Belly River Group", + "Beverly-Onoway channel Complex", + "Billings-Carlsbad-Queenston Hydrogeologic Unit", + "Blackstone Formation", + "Blewett Bedrock Aquifer", + "Blood Reserve Formation", + "Blue Mountain-Georgian Bay Hydrogeologic Unit", + "Blueberry Valley Aquifer System", + "Blueberry-Aitken Bedrock Aquifer", + "Bluesky Formation", + "Bois Blanc Hydrogeologic Unit", + "Boissevain Formation", + "Bonnyville U1 Sand", + "Bonnyville U1 Till", + "Bonnyville U2 Till", + "Boss Point Formation", + "Bothwell Aquifer", + "Bounded Channel Aquifers", + "Bourget Aquifer", + "Bow Island Formation", + "Bradley Creek Valley Aquifer System", + "Brazeau Formation", + "Bredenbury & Wynyard Formations", + "Bridge Lake Aquifer System", + "Brilliant Bedrock Aquifer", + "Bronson Lake", + "Brownsville Local Aquifer", + "Buried valley containing sand and gravel", + "Buried valley/blanket Aquifers", + "Cadomin Formation", + "Cadotte Formation", + "Caledon-Grand River Outwash Aquifer", + "Calgary Lethbridge Corridor HSU C Aquitard", + "Calgary Lethbridge Corridor HSU S1 Aquifer", + "Calgary Lethbridge Corridor HSU S2 Aquifer", + "Canadian Shield", + "Canning Aquitard", + "Canning Till Aquitard", + "Cantuar Formation", + "Canyon Overburden Aquifer", + "Carbon Member", + "Carbonate rock Aquifer", + "Carboniferous basin Aquifer", + "Cardium Formation", + "Carlile Formation", + "Casino Overburden Aquifer", + "Castlegar Overburden Aquifer", + "Cataract Group Hydrogeologic Unit", + "Catfish Creek Aquifer", + "Cedar Grove Aquifer", + "Central Catfish Creek Aquifer", + "Central Halfway-Beatton Bedrock Aquifer", + "Central South Nation Aquifer Complex", + "Champlain Aquifer", + "Channel Aquifer 1", + "Channel Aquifer 2", + "Channel Aquifer 3", + "Channel Aquitard 1", + "Channel Aquitard 2", + "Charlie Halfway Beatton Bedrock Aquifer", + "Chateauguay Aquifer", + "Chauidiere Aquifer", + "Chesley Aquifer", + "Chinchaga Formation", + "Chu Íntthi Aquifer", + "Chungo Member", + "Clarence Creek Aquifer", + "Clayton Heights Aquifer", + "Clayton Uplands Aquifer", + "Clinton Creek Bedrock Aquifer", + "Clinton Creek Lower Unconsolidated Aquifer", + "Clinton Creek Upper Sand and Gravel Aquifer", + "Clinton Group Hydrogeologic Unit", + "Coalspur Formation", + "Cold Lake Formation", + "Coldstream Aquifer", + "Colorado Group", + "Connelly Creek Formation", + "Contact Aquifer", + "Contact Rapids Formation", + "Cooking Lake area sediments", + "Cooking Lake Formation", + "Credit River Aquifer", + "Creston-Kootenay River Overburden Aquifer", + "Cridland Creek Bedrock Aquifer", + "Crowsnest River Alluvial Aquifer", + "Cumberland Group", + "Cypress Hills Formation", + "Dalehurst Member", + "Dawson Creek Overburden Aquifer", + "Del Bonita Formation", + "Detroit River Group Hydrogeologic Unit", + "Devonian Strata", + "Dinosaur Park Formation", + "Doe Creek Member", + "Doig Formation", + "Don Formation", + "Dowling Member", + "Drumheller Channel Complex", + "Drumheller Member", + "Drywood Creek Formation", + "Dundalk Aquifer", + "Dundee Hydrogeologic Unit", + "Dundurn Formation", + "Dunvegan Formation", + "Durham Aquifer", + "Duvernay Formation", + "Dyer-Wingfield-St. Edmund Hydrogeologic Unit", + "East and Middle Sixteen Mile Aquifer", + "East Creston Bedrock Aquifer", + "East Pine Bedrock Aquifer", + "East Pine-Groundbirch Bedrock Aquifer", + "Eastend Formation", + "Eastend-Ravenscrag Aquifer", + "Edson burried-valley Aquifer", + "Egmond Bay Formation", + "Elgin-Southampton Aquifer", + "Ellerslie Member", + "Ellis Group", + "Empress Formation", + "Empress Formation-Uplands glacial", + "Empress Formation-Valley fill glacial", + "Empress Formation-Valley fill glacial Tertiary Undifferentiated", + "Empress Formation-Valley fill Tertiary", + "Erie Interstadial Deposits", + "Ernestina Lake Formation", + "Esker and gravel", + "Estend Formation", + "Ethel Lake Formation", + "Etobicoke Aquifer", + "Exshaw Formation", + "Eyot Formation", + "Farrel Creek Bedrock Aquifer", + "Fernie Formation", + "First White Specks Formation", + "Fish Scales Formation", + "Fish Scales Member", + "Flesherton Aquifer", + "Floral Formation", + "Fontfill Aquifer Complex", + "Foremost Formation", + "Fort Nelson-River Alluvial Aquifer", + "Fort Simpson Formation", + "Fort St. John Overburden Aquifer System", + "Fort Vermilion Formation", + "Fourchu Group", + "Fractured Aquifers-Gulf Islands", + "Fraser Canyon Aquifer, Choate to Yale", + "Fraser Canyon Aquifer, from Yale to Haig", + "Fraser Lowlands Aquifer", + "Fraser Plateau Lava Aquifer", + "Frenchman Formation", + "Frenchman to Eastend Undifferentiated", + "Fulford Aquifer", + "Fundy Group", + "Ganges Harbour Aquifer", + "Georgeville Group", + "Gething Formation", + "Gibsons/SCRD Granthams Landing/Elphinstone Aquifer", + "Glaciolacustrine Aquifer Complex", + "Glade Overburden Aquifer", + "Glauconitic Sandstone Formation", + "Glemmore Basal Aquifer", + "Gleneden Aquifer", + "Grand Centre Formation", + "Grand Forks Aquifer", + "Grand Rapids Formation", + "Grand River Aquifer", + "Grand River Basin Aquifer", + "Grand River Outwash Deposits", + "Grand River Valley Basinal Deposits", + "Grandview Aquifer", + "Grant Hill Aquifer", + "Greater Kelowna Aquifer", + "Greatlakean Stade Deposits", + "Green River Aquifer", + "Greendale Deep Aquifer", + "Greenwood", + "Greenwood Aquifer", + "Grimshaw Gravels Aquifer", + "Grosmont Formation", + "Groundbirch Buried Valley Aquifer", + "Grumbler Group", + "Guichon Creek Aquifer", + "Haans Creek to Blain Creek-Haida Gwaii Aquifer", + "Hagan Aquifer", + "Haida/Lawnhill Aquifer", + "Haig Aquifer", + "Halfway Valley Aquifer System", + "Halton Till", + "Halverson Ridge Formation", + "Hamilton Group Hydrogeologic Unit", + "Hand Hills Formation", + "Hanover Aquifer", + "Hanson Member", + "Harrow Aquifer", + "Hatzic Prairie Aquifer", + "Haultain Formation", + "Haven Member", + "Haynes Aquifer", + "Haynes Member", + "Hazelmere Aquifer", + "Hazelmere Valley Aquifer", + "Heather Bank Aquifer", + "Hillsborough Formation", + "Hillsborough River Formation", + "Hockley Valley Aquifer", + "Holstein Aquifer", + "Holt Aquifer Complex", + "Hopington AB Aquifer", + "Hopington C Aquifer", + "Horseshoe Canyon Formation", + "Horsethief Member", + "Horton Group", + "Houston Bedrock Aquifer", + "Hullcar Confined Aquifer", + "Hullcar Perched", + "Hullcar Unconfined Aquifer", + "Ireton Formation", + "Ishbel Group", + "Joeyaska Deep Aquifer", + "Joeyaska Shallow Aquifer", + "Joli Fou Formation", + "Judith River Aquifer", + "Judith River/Belly River Formation", + "Jumping Pound SST Member", + "Jurassic Formations", + "Kame Outwash Aquifer Complex", + "Karmutsen Aquifer", + "Kaskapau Formation", + "Kawkawa Lake Aquifer", + "Keating Aquifer", + "Keg River Formation", + "Kettle Point Hydrogeologic Unit", + "Kildare Formation", + "Kingsvale Aquifer", + "Kiskatinaw Buried Channel Aquifer", + "Kiskatinaw Glaciodeltaic Overburden Aquifer", + "Kitchener Creek Overburden Aquifer", + "Kleinburg Aquifer", + "Koksilah River Valley Aquifer", + "Kwinshatin Intertill Aquifer", + "La Glace Sandstone Member", + "La Loche Formation AND Basal Red Beds Unit", + "Lacombe Aquitard", + "Lacombe Member", + "Lake Algonquin Sand Aquifer", + "Lake Peel Deltaic Aquifer", + "Lake Schomberg and Algonquin Aquifer", + "Lake Schomberg and Algonquin Aquitard", + "Lancaster-Cornwall Aquifer", + "Langdale/Hopkins Aquifer", + "Langdale/Hopkins Landing Aquifer", + "Langley Upland Aquifer", + "Langley Upland Intertill Aquifer", + "LD Basal Till", + "LD Local Aquifers", + "LD Lower Aquifer", + "LD Middle Till", + "LD Upper Till", + "Lea Park Formation", + "Leamington Aquifer", + "Leduc Formation", + "Lenses of sand and gravel", + "Lincoln Aquifer", + "Little Qualicum River Aquifer", + "Local Aquifer 2", + "Local Aquitard 1", + "Lookout Ridge Aquifer", + "Łots'an Aquifer", + "Lower Bearpaw Formation", + "Lower Belly River Formation", + "Lower Brazeau Member", + "Lower Bridge Creek Valley Aquifer System", + "Lower Bridge Creek Valley Bedrock Aquifer", + "Lower Brougham Aquifer", + "Lower Cassidy Aquifer", + "Lower Catfish Creek Till Aquitard", + "Lower Cherryville Aquifer", + "Lower Chinguacousy Aquifer", + "Lower Coalspur Member", + "Lower Coquihalla Canyon Aquifer", + "Lower Cowichan River A Aquifer", + "Lower Cowichan River C Aquifer", + "Lower Erie Phase Aquifer", + "Lower Erie Phase Aquitard", + "Lower Gates River Aquifer", + "Lower Lac la Hache Valley Bedrock Aquifer", + "Lower Lea Park Formation", + "Lower Loon River Formation", + "Lower Lotsberg Formation", + "Lower Markham Aquifer", + "Lower Maryhill Till", + "Lower Merritt Aquifer", + "Lower Montney Formation", + "Lower Nechako River Aquifer", + "Lower Nicola Aquifer", + "Lower Nicola Outwash Aquifer", + "Lower Ordovician OR Cambrian Strata", + "Lower Scollard Member", + "Lower Shaftesbury Formation", + "Lower Shuswap Deep Confined", + "Lower Shuswap River Confined", + "Lower Thorncliffe Aquifer", + "Lower Thorncliffe Aquitard", + "Lower Unionville Aquifer", + "Lower Victoria Aquifer", + "Lower Wapiti Member", + "Lower Willow Creek Member", + "Lowland Aquifer Complex", + "Lumby-Lower Aquifer", + "Lumby-Upper Aquifer", + "Lundbreck Formation", + "Mabou Group", + "Mackinaw Interstadial Deposits", + "Majeau Lake Formation", + "Major buried sand and gravel", + "Malahat Ridge Aquifer", + "Malcolm Island Aquifer", + "Mannville Group", + "Maple Aquifer", + "Mara Aquifer Aquifer", + "Marble Hill Unconsolidated Aquifer", + "Marie Creek Formation", + "Markdale Aquifer", + "Marshybank Formation", + "Marshybank Member", + "Masset Aquifer", + "McDougall Creek Deltaic Aquifer", + "McMillan Island Aquifer", + "McMurray Formation", + "Meaford Aquifer", + "Medicine Hat Formation", + "Medicine Hat Member", + "Meguma SuperGroup", + "Meltwater Channel Hydrogeologic Unit", + "Mennon Formation", + "Middle Erie Phase Aquifer", + "Middle Maryhill Till", + "Middle Merritt Aquifer", + "Middle Montney Formation", + "Middle Red Beds Formation", + "Middle Thorncliffe Aquifer", + "Middle Thorncliffe Aquitard", + "Middle Waterloo Moraine Aquifer & Equivalents", + "Milk River Aquifer", + "Milk River Formation", + "Mill Bay Aquifer", + "Minesing Basin Transgressive Deposits", + "Mirabel Aquifer", + "Mission Creek Aquifer", + "Monteith Formation", + "Montney Halfway Beatton Bedrock Aquifer", + "Montney Turbidite", + "Montrose Bedrock Aquifer", + "Morien Group", + "Morrin Member", + "Mount Albert Aquifer Complex", + "Mount Ozzard Bedrock West Aquifer", + "Mount Ozzard, Bedrock Southeast", + "Mount Ozzard, Unconsolidated", + "Mount Tom Bedrock", + "Mount Tom Bedrock Aquifer", + "Mount Tom Unconsolidated", + "Muriel Lake", + "Murrayville AC Aquifer", + "Murrayville B Aquifer", + "Muskeg Formation", + "Muskeg Lower Anhydrite Member", + "Muskiki Formation", + "Muskiki Formation OR Kaskapau Formation", + "Muskiki Member", + "Muskwa Formation", + "Muskwa River Alluvial Aquifer", + "Muskwa-Fort Nelson Buried Valley Aquifer", + "Muskwa-Fort Nelson Glaciofluvial Aquifer", + "Nanaimo Group Aquifer, Campbell River to Courtney", + "Nanaimo Lowlands Aquifer", + "NE of White Rock A Aquifer", + "NE of White Rock B Aquifer", + "Nechako Buried Valley Aquifer", + "Nelson Overburden Aquifer", + "Newmarket Till", + "Newton Upland Aquifer", + "Niagra-on-the-Lake Aquifer", + "Nicomekl-Serpentine Aquifer", + "Nicomen Slough Aquifer", + "Nikanassin Formation", + "Niobrara Formation", + "Nissouri Stadial Deposits", + "Nivek Aquifer", + "Nomad Member", + "Norfolk Sand Plain Aquifer", + "Norns Creek Overburden Aquifer", + "North Campbell River Bedrock", + "North Campbell River Unconsolidated", + "North Castlegar Bedrock Aquifer", + "North Central Saanich Aquifer", + "North Hope Aquifer", + "North Houston Bedrock", + "North Mountain Formation", + "North Nechako Terrace Bedrock Aquifer", + "North Salt Spring Island Aquifer", + "North-Central Salt Spring Island Aquifer", + "Northern Halfway Beatton Bedrock Aquifer", + "Northern Lac la Hache Aquifer System", + "Northwest Halfway-Beatton Bedrock Aquifer", + "Northwest of Clearbrook Aquifer", + "Notre Dame Aquifer", + "O Avenue Aquifer", + "O'Keefe Basal", + "O'Keefe Unconfined Aquifer", + "Oak Ridges Moraine Aquifer", + "Obed Mountain Formation", + "Odanah Member", + "Odanah Shale Aquifer", + "Okanagan Landing Deep Confined", + "Okanagan Valley Aquifer", + "Oldcastle Aquifer", + "Oldman Formation", + "Opabin Member", + "Orangeville Aquifer Complex", + "Orby Head Formation", + "Oro Moraine Aquifer Complex", + "Oro-Medonte Aquifer", + "Osoyoos West Aquifer", + "Ostracod Beds Member", + "Ottawa Group Hydrogeologic Unit", + "Owl Creek Aquifer", + "Owl Ridge Aquifer", + "Oyster River Aquifer", + "Pacheedaht Aquifer", + "Paddy Formation", + "Pakowki Formation", + "Paldi-Deep Aquifer", + "Paleozoic Carbonate rock formations, Ordovician to Devonian", + "Paris Aquifer", + "Paris moraine Aquitard", + "Paskapoo Formation", + "Paskapoo Formation Aquifer", + "Paterson Overburden Aquifer", + "Paul's Basin Aquifer", + "Peace River Formation", + "Peace-Valley Aquifer System", + "Pelican Formation", + "Pelican Mountain Formation", + "Pense Formation", + "Pickering Aquifer", + "Pictou Group", + "Pike Lake Formation", + "Pineview Aquifer", + "Plantagenet Aquifer", + "Porcupine Hills Formation", + "Porcupine Hills Formation Aquifers", + "Port Bruce Phase Aquitard", + "Port Bruce Stadial Deposits", + "Port Clements Aquifer", + "Port Colborne Aquifer", + "Port Huron Stadial Deposits", + "Port McNeill East Bedrock Aquifer", + "Port McNeill East Unconsolidated", + "Port McNeill West Bedrock", + "Port McNeill West Unconsolidated", + "Portneuf Aquifer", + "Pottery Road Formation", + "Pouce Coupe Member", + "Pouce Coupe Overburden Aquifer", + "Pouce Creek Bedrock Aquifer", + "Powers Ck Deltaic Aquifer", + "Prairie Evaporite Formation", + "Pre-Canning Aquifers", + "Pre-Canning Aquitard", + "Pre-Catfish Aquifers", + "Precambrian Hydrogeologic Unit", + "Precambrian rocks", + "Precambrian to Model Base", + "Priceville Aquifer", + "Prophet River Alluvial Aquifer", + "Puntledge/ Cumberland Aquifer", + "Puskwaskau Formation", + "Puslinch Aquifer", + "Quadra Central Bedrock Aquifer", + "Quadra South Bedrock Aquifer", + "Queenston Hydrogeologic Unit", + "Quinsam to Stories Beach Aquifer", + "Ravenscrag Formation", + "Ravenscrag to Eastend Undifferentiated", + "Rawlings Lake Aquifer", + "Red Deer River channel complex", + "Regional Aquifer 3", + "Regional Aquitard 3", + "Richelieu-Yamaska Aquifer", + "Richibucto Formation", + "Rideau Front Aquifer", + "Riding Mountain/Pierre Shale Formation", + "Roberts Creek Aquifer", + "Rockcliffe Hydrogeologic Unit", + "Rockland Aquifer", + "Rosebery Aquifer", + "Rundle Group", + "Ryder Upland A Aquifer", + "Ryder Upland B Aquifer", + "Ryder Upland C Aquifer", + "Saint-Maurice Aquifer", + "Salina Hydrogeologic Unit", + "Salmo River Bedrock Aquifer", + "Salmo River Overburden Aquifer", + "Salmon River Aquifer", + "Salmon River-Lower Aquifer", + "Salmon River-Upper Aquifer", + "Sand Dunes Aquifer", + "Sandilands Aquifer", + "Sandspit-Haida Gwaii Aquifer", + "Sardis-Vedder Aquifer", + "Sarsfield Aquifer", + "Sayward-Salmon River Aquifer", + "Scarborough Formation", + "Schomberg Aquifer Complex", + "Schooler Creek Group", + "Scollard Formation", + "Sechelt/Wakefield Creek Aquifer", + "Second White Specks Formation", + "Second White Specks/Favel Formation", + "Sediment Above Bedrock", + "Seton Portage Aquifer", + "Shaftesbury Formation", + "Shannon Lake Aquifer", + "Shawnigan Lake Aquifer", + "Shawnigan Lake/Cobble Hill/Mill Bay Aquifer", + "Sheridan Lake Aquifer", + "Shuswap Highlands Aquifer", + "Silurian", + "Simcoe Group Hydrogeologic Unit", + "Similkameen River Aquifer", + "Sinkut Mountain North Surficial Aquifer", + "Skidgate/Queen Charlotte Aquifer", + "Slave Point Formation", + "Smoky Group", + "Sooke-Metchosin Aquifer", + "South Castlegar Bedrock Aquifer", + "South Central Elgin Aquifer", + "South Fraser Lake Bedrock Aquifer", + "South Fraser River Delta Aquifer", + "South London Aquifer", + "South Nation Aquifer", + "South Nechako Terrace Bedrock Aquifer", + "South of Aldergrove Aquifer", + "South of Hopington Aquifer", + "South of Murrayville AC Aquifer", + "South of Murrayville B Aquifer", + "South Quadra Unconsolidated Aquifer", + "South Salt Spring Island Aquifer", + "South Valemont Aquifer", + "South Vanderhoof Unconsolidated Aquifer", + "South Vernon Confined Aquifer", + "South Vernon Unconfined Aquifer", + "South-Central Salt Spring Island Aquifer", + "Southern Horse Lake Aquifer System Aquifer", + "Spallumcheen Basal Confined Aquifer", + "Spallumcheen Confined", + "Spallumcheen Unconfined Aquifer", + "Spences Bridge Aquifer", + "Sperling Aquifer", + "Spirit River Formation", + "Spius Creek West of Canford Aquifer", + "St. Catharines Aquifer", + "St. George Aquifers", + "St. Martin Aquifer", + "St. Mary River Formation", + "St. Mathieu Aquifer", + "St. Thomas Moraine Local Aquifers", + "Stavely Aquifer", + "Stellako Unconsolidated Aquifer", + "Stirling Group", + "Stoddart Group", + "Strathmore Member", + "Stumbles Creek Aquifer", + "Stumbles Creek Confined", + "Stump Lake", + "Stump Lake Bedrock", + "Sugar Lake Aquifer", + "Sulphur Point Formation", + "Sumas Prairie Aquifer", + "Sumas Prairie North Aquifer", + "Sunchild Aquifer", + "Sunkay Formation", + "Sunningdale/Glenmerry Bedrock Aquifer", + "Sunnybrae Aquifer", + "Sunnybrook Drift", + "Sunset Creek Overburden Aquifer", + "Sunset Prairie Bedrock Aquifer", + "Swan Hills Formation", + "Swan Lake Confined Aquifer", + "Swan Lake Unconfined", + "Swan River Formation", + "Sweetwater Bedrock Aquifer", + "Tachick Lake Unconsolidated Aquifer", + "Talik regions", + "Tappen Aquifer", + "Thick and extensive unconfined sand and gravel", + "Thin unconfined sand", + "Thistle Member", + "Thornbury Aquifer", + "Thorncliffe Formation", + "Thornill Aquifer", + "Thornton Sand Aquifer", + "Tillsonburg Aquifer", + "Tlell Aquifer", + "Tolman Member", + "Topley Bedrock Aquifer", + "Trail Townsite Overburden Aquifer", + "Trail/Warfield Bedrock Aquifer", + "Trinity Valley Aquifer", + "Tsawwassen Aquifer", + "Tsolum River, North of Courtney Aquifer", + "Tuhok Confined Aquifer", + "Tuhok Unconfined Aquifer", + "Turtle Mountain Formation", + "Two Creeks Interstadial Deposits", + "Tyconnell Formation", + "Ucluelet Peninsula Aquifer", + "Ucluelet, Lost Shoe Aquifer", + "Ucluelet, Lost Show Aquifer", + "Unicola Aquifer", + "Unit A Exposed Bedrock and Drift-Poor Areas", + "Unit B Till and Ribbed Moraine Deposits", + "Unit C Ablation Drift Deposits", + "Unit D Glaciomarine and Marine Deposits and Glaciolacustrine Deposits", + "Unit E Glaciofluvial Deposits", + "Upland Aquifer Complex", + "Upper and Lower Gloucester Aquifers", + "Upper and Lower Nepean-Kemptville Aquifers", + "Upper and Lower West Nepean Aquifers", + "Upper Aquifer 1", + "Upper Bearpaw Formation", + "Upper Brazeau Member", + "Upper Bridge Creek Bedrock Aquifer", + "Upper Bridge Creek Valley Aquifer System", + "Upper Brougham Aquifer", + "Upper Bulkley Alluvial Aquifer", + "Upper Catfish Creek Till Aquitard", + "Upper Cherryville Aquifer", + "Upper Chinguacousy Aquifer", + "Upper Coalspur Member", + "Upper Cretaceous sands Aquifer", + "Upper Erie Phase Aquifer", + "Upper Erie Phase Aquitard", + "Upper Gates River Aquifer", + "Upper Halfway Bedrock Aquifer", + "Upper Lac la Hache Valley Bedrock Aquifer", + "Upper Lea Park Formation", + "Upper Loon Formation", + "Upper Lotsberg Formation", + "Upper Markham Aquifer", + "Upper Maryhill Till", + "Upper Merritt Aquifer", + "Upper Montney Formation", + "Upper Ordovician strata", + "Upper Scollard Member", + "Upper Shaftesbury Formation", + "Upper Thames Aquifer", + "Upper Thorncliffe Aquifer", + "Upper Thorncliffe Aquitard", + "Upper Unionville Aquifer", + "Upper Victoria Aquifer", + "Upper Wapiti Member", + "Upper Waterloo Moraine Aquifer", + "Upper Willow Creek Member", + "Valens Outwash Aquifer", + "Valley View-Dawson Creek Bedrock Aquifer", + "Vanderhoof Alluvial Aquifer", + "Vedder Crossing Aquifer", + "Vedder Mountain NW Bedrock Aquifer", + "Vedder Mountain SE Bedrock Aquifer", + "Vellore Aquifer", + "Verger Member", + "Vermillion River Formation", + "Vernon Confined", + "Vernon Unconfined", + "Viking Formation", + "Viking/Newcastle Formation", + "Vimy Member", + "Wabamun Group", + "Wabiskaw Member", + "Wainfleet Aquifer", + "Walker Hook Aquifer", + "Walkerton Aquifer", + "Wallaceburg Aquifer", + "Wallacetown Formation", + "Wapiabi Formation", + "Wapiti Formation", + "Wark-Colquitz Aquifer", + "Warman Formation", + "Waterloo Moraine Aquifer", + "Waterways Formation", + "Watson Creek Valley Aquifer System", + "Watt Mountain Formation", + "Wentworth Aquifer", + "Wentworth Till/Aquitard", + "West Arrow Creek Overburden Aquifer", + "West Carlton Aquifer", + "West Cluculz Lake Bedrock Aquifer", + "West Creston Aquifer", + "West Langley Aquifer", + "West of Aldergrove Aquifer", + "West of Merritt Aquifer", + "West Saanich Road Aquifer", + "West Sechelt Aquifer", + "Westgate Formation", + "Westwold Aquifer", + "White Rock Aquifer", + "Whitecourt Mountain Formation", + "Whitemud Formation", + "Whitemud Member", + "Whittlesey Aquifer", + "Whittlesey Clay/Aquitard", + "Whittlesey Sand", + "Willow Creek Alluvial Aquifer", + "Willow Creek Formation", + "Willow Creek Formation Aquifer", + "Windsor Group", + "Winnipeg Formation", + "Winnipegosis Formation", + "Winterburn Group", + "Wood Mountain and Mount Washington Aquifer", + "Wood Mountain Formation", + "Woodbridge Aquifer", + "Yonge Street Aquifer", + "York Till", + "Zama Member" + ], + "maxLength": 69 +} \ No newline at end of file diff --git a/schemas/data/src/values/AquiferUnitPorosityType.legacy.json b/schemas/data/src/values/AquiferUnitPorosityType.legacy.json new file mode 100644 index 00000000..3b4b61d9 --- /dev/null +++ b/schemas/data/src/values/AquiferUnitPorosityType.legacy.json @@ -0,0 +1,13 @@ +{ + "$id": "https://datastream.org/schema/data/values/AquiferUnitPorosityType.legacy.json", + "title": "Aquifer Unit Porosity Type", + "description": "", + "type": "string", + "enum": [ + "Fractured", + "Granular", + "Karstic", + "Mixed" + ], + "maxLength": 9 +} \ No newline at end of file diff --git a/schemas/data/src/values/AquiferUnitPorosityType.primary.json b/schemas/data/src/values/AquiferUnitPorosityType.primary.json new file mode 100644 index 00000000..974bddda --- /dev/null +++ b/schemas/data/src/values/AquiferUnitPorosityType.primary.json @@ -0,0 +1,13 @@ +{ + "$id": "https://datastream.org/schema/data/values/AquiferUnitPorosityType.primary.json", + "title": "Aquifer Unit Porosity Type", + "description": "", + "type": "string", + "enum": [ + "Fractured", + "Granular", + "Karstic", + "Mixed" + ], + "maxLength": 9 +} \ No newline at end of file diff --git a/schemas/data/src/values/BoreholeDepthUnit.legacy.json b/schemas/data/src/values/BoreholeDepthUnit.legacy.json new file mode 100644 index 00000000..0073afde --- /dev/null +++ b/schemas/data/src/values/BoreholeDepthUnit.legacy.json @@ -0,0 +1,11 @@ +{ + "$id": "https://datastream.org/schema/data/values/BoreholeDepthUnit.legacy.json", + "title": "Measurement Unit", + "description": "", + "type": "string", + "enum": [ + "ft", + "m" + ], + "maxLength": 2 +} \ No newline at end of file diff --git a/schemas/data/src/values/BoreholeDepthUnit.primary.json b/schemas/data/src/values/BoreholeDepthUnit.primary.json new file mode 100644 index 00000000..9dae5f0c --- /dev/null +++ b/schemas/data/src/values/BoreholeDepthUnit.primary.json @@ -0,0 +1,11 @@ +{ + "$id": "https://datastream.org/schema/data/values/BoreholeDepthUnit.primary.json", + "title": "Measurement Unit", + "description": "", + "type": "string", + "enum": [ + "ft", + "m" + ], + "maxLength": 2 +} \ No newline at end of file diff --git a/schemas/data/src/values/CharacteristicGroup.legacy.json b/schemas/data/src/values/CharacteristicGroup.legacy.json index e1bcc075..1c1e7c4f 100644 --- a/schemas/data/src/values/CharacteristicGroup.legacy.json +++ b/schemas/data/src/values/CharacteristicGroup.legacy.json @@ -1,5 +1,5 @@ { - "$id": "https://datastream.org/schema/data/values/CharacteristicGroup.loose.json", + "$id": "https://datastream.org/schema/data/values/CharacteristicGroup.legacy.json", "title": "Characteristic Group", "description": "", "type": "string", diff --git a/schemas/data/src/values/CharacteristicGroup.primary.json b/schemas/data/src/values/CharacteristicGroup.primary.json index 0ff539a5..3953a7fc 100644 --- a/schemas/data/src/values/CharacteristicGroup.primary.json +++ b/schemas/data/src/values/CharacteristicGroup.primary.json @@ -1,5 +1,5 @@ { - "$id": "https://datastream.org/schema/data/values/CharacteristicGroup.strict.json", + "$id": "https://datastream.org/schema/data/values/CharacteristicGroup.primary.json", "title": "Characteristic Group", "description": "", "type": "string", diff --git a/schemas/data/src/values/CharacteristicName.legacy.json b/schemas/data/src/values/CharacteristicName.legacy.json index 2ea5e54d..cd55a047 100644 --- a/schemas/data/src/values/CharacteristicName.legacy.json +++ b/schemas/data/src/values/CharacteristicName.legacy.json @@ -1,5 +1,5 @@ { - "$id": "https://datastream.org/schema/data/values/CharacteristicName.loose.json", + "$id": "https://datastream.org/schema/data/values/CharacteristicName.legacy.json", "title": "Characteristic", "description": "", "type": "string", @@ -561,6 +561,7 @@ "(Z)-(Perfluorodecyl)ethyl 9-octadecenoate", "(Z)-(Perfluorohexyl)ethyl 9-octadecenoate", "(Z)-(Perfluorooctyl)ethyl 9-octadecenoate", + "(Z)-3-Methyl-2-hexene", "(Z)-Chloro-1-propene", "(Z)-Dimethomorph", "(Z)-Octadec-9-enyl (5-(((2-(((perfluorooctyl)sulphonyl)methylamino)ethoxy)carbonyl)amino)-o-tolyl)carbamate", @@ -1476,6 +1477,7 @@ "1-Hexanol, 3,3,4,4,5,5,6,6,6-nonafluoro-", "1-Hexanol, 3,3,4,4,5,5,6,6,6-nonafluoro-, 1,1'-(hydrogen phosphate)", "1-Hexanol, 6-chloro-3,3,4,4,5,5,6,6-octafluoro-", + "1-Hexen-3-one", "1-Hexen-3-yne, 5-methyl-5-(2,2,3,3-tetrafluoropropoxy)-", "1-Hexene", "1-Hexene & 2-Methyl-1-pentene", @@ -3384,6 +3386,7 @@ "1,3-Isobenzofurandione, 5,5'-[2,2,2-trifluoro-1-(trifluoromethyl)ethylidene]bis-, polymer with 4,4'-oxybis[benzenamine] and 4,4'-sulfonylbis[benzenamine]", "1,3-Isobenzofurandione, 5,5'-carbonylbis-, polymer with 4,4'-[[2,2,2-trifluoro-1-(trifluoromethyl)ethylidene]bis(4,1-phenyleneoxy)]bis[benzenamine]", "1,3-Isobenzofurandione, polymer with .alpha.-fluoro-.omega.-(oxiranylmethyl)poly(difluoromethylene) and (phenoxymethyl)oxirane", + "1,3-Octadiene", "1,3-Oxathiolane-4-acetic acid, 5-oxo-2,2-bis(trifluoromethyl)-", "1,3-Pentadiene", "1,3-Pentadiene, (3E)-", @@ -3570,6 +3573,8 @@ "1,5,6-Triazabicyclo[3.1.0]hexane, 2-methyl-2-phenyl-4,4,6-tris(trifluoromethyl)", "1,5,6-Triazabicyclo[3.1.0]hexane, 2,2-dimethyl-4,4,6-tris(trifluoromethyl)-", "1,5,8-Trioxa-3-aza-4.lambda.^5-phosphaspiro[3.4]octane, 2,2,6,6,7,7-hexakis(trifluoromethyl)-4-[2,2,2-trifluoro-1-(trifluoromethyl)ethoxy]-", + "1,6-Anhydro-beta-D-glucopyranose-13C6", + "1,6-anhydro-beta-D-mannopyranose", "1,6-B+D873is(trimethoxysilanylethyl)perfluorohexane", "1,6-Bis(perfluoroethyl)hexane", "1,6-dibromo-2-chloro-1,1,2-trifluorohexane", @@ -3688,6 +3693,7 @@ "12,12,13,13,14,14,15,15,16,16,17,17,17-Tridecafluoroheptadecan-1-ol", "12,12,13,13,14,14,15,15,16,16,17,17,17-Tridecafluoroheptadecanoyl chloride", "12,12,13,13,14,14,15,15,16,16,17,17,18,18,19,19,19-Heptadecafluorononadecan-1-ol", + "12,14-Dichlorodehydroabietic acid", "12:1 Fluorotelomer amino ethyl trimethyl ammonium", "12:2 Fluorotelomer aldehyde", "12:2 Fluorotelomer carboxylic acid", @@ -5484,6 +5490,7 @@ "2-Vinylperfluoropropane", "2, 4-DB DMA", "2,1-Benzoxaphospholium, 1,3-dihydro-1,1-diphenyl-3,3-bis(trifluoromethyl)-", + "2,10-Dimethylundecane", "2,2-Bis(chloromethyl)-1,3-propanediyl bis[bis(2-chloroethyl)phosphate]", "2,2-bis(Trifluoromethyl)-2-hydroxyacetic acid", "2,2-bis(Trifluoromethyl)perfluoropropane", @@ -7763,6 +7770,7 @@ "3,4-Dichloroaniline-2,6-d2", "3,4-Dichlorobenzotrifluoride", "3,4-Dichlorobiphenyl", + "3,4-Dichlorocatechol", "3,4-Dichloroguaiacol", "3,4-Dichloronitrobenzene", "3,4-Dichlorophenol", @@ -7834,6 +7842,7 @@ "3,4,5,6,7-Pentafluoro-3-(1,1,1,2,3,3,3-heptafluoropropan-2-yl)-2-benzofuran-1(3H)-one", "3,4,6-Trichloro-2-(2-chloro-4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,11-heptadecafluoroundecyl)phenyl acetate", "3,4,6-Trichloro-5-cyano-2-hydroxybenzamide", + "3,4,6-Trichlorocatechol", "3,4,6-Trichloroguaiacol", "3,4'-Bis(heptadecafluorooctyl)-2,2'-bithiophene", "3,4'-DIBDE", @@ -7847,6 +7856,7 @@ "3,5-Dichloroaniline", "3,5-Dichlorobenzoic acid", "3,5-Dichlorobiphenyl", + "3,5-Dichlorocatechol", "3,5-Dichloromethoxy triclosan", "3,5-Dichlorophenol", "3,5-Diethyltoluene", @@ -8244,6 +8254,7 @@ "4-Chlorobenzylmethylsulfone", "4-Chlorobiphenyl", "4-Chlorobiphenyl-C13", + "4-Chlorocatechol", "4-Chlorophenyl (2,2,3,3,4,4,4-heptafluorobutanoyl)sulfamate", "4-Chlorophenyl ether", "4-Chlorophenylurea", @@ -8340,6 +8351,7 @@ "4-Methylchrysene", "4-Methyldecane", "4-Methyldibenzofuran", + "4-Methyldodecane", "4-Methylheptane", "4-Methylhexan-2-one", "4-Methylindan", @@ -8376,22 +8388,14 @@ "4-Nitroquinoline 1-oxide", "4-Nonylphenol decaethoxylate", "4-Nonylphenol dodecaethoxylate", - "4-Nonylphenol dodecaethoxylates", "4-Nonylphenol heptadecaethoxylate", - "4-Nonylphenol heptadecaethoxylates", "4-Nonylphenol heptaethoxylate", - "4-Nonylphenol heptaethoxylates", "4-Nonylphenol hexadecaethoxylate", - "4-Nonylphenol hexadecaethoxylates", "4-Nonylphenol hexaethoxylate", - "4-Nonylphenol hexaethoxylates", "4-Nonylphenol monoethoxylates", "4-Nonylphenol nonaethoxylate", - "4-Nonylphenol nonaethoxylates", "4-Nonylphenol octadecaethoxylate", - "4-Nonylphenol octadecaethoxylates", "4-Nonylphenol octaethoxylate", - "4-Nonylphenol octaethoxylates", "4-Nonylphenol pentadecaethoxylate", "4-Nonylphenol pentadecaethoxylates", "4-Nonylphenol pentaethoxylate", @@ -8625,6 +8629,7 @@ "4,5-Dichloro-4,5,5-trifluoropent-1-ene", "4,5-Dichlorocatechol", "4,5-Dichloroperfluoro-3-oxapentanesulfonyl fluoride", + "4,5-Dichloroveratrole", "4,5-Dihydro-2-phenyl-.alpha.-((perfluorohexyl)ethyloxy)methyl-1H-Imidazole-1-ethanol", "4,5-Dimethyl-1,2-dithiol-3-one", "4,5-dimethyl-Phenanthrene", @@ -8869,6 +8874,7 @@ "5-Methyl-2-(1,2,2,2-tetrafluoroethyl)pyridine", "5-Methyl-2-hexene", "5-Methyl-5-[(2,2,3,3,4,4,5,5-octafluoropentyl)oxy]hex-1-en-3-yne", + "5-Methyl-5-propylnonane", "5-Methyl-6-[(3,3,4,4,5,5,6,6,7,7,8,8,8-tridecafluorooctyl)sulfanyl]hexahydro-4,7-methano-2-benzofuran-1,3-dione", "5-methylbenzotriazole", "5-Methylchrysene", @@ -9600,6 +9606,7 @@ "Actual Number of Individuals Weighed", "Acyclovir", "AD-67 antidote", + "Adamantane Carboxylic Acid-D15", "Adenosine triphosphate", "Adipic acid", "Adiponitrile, perfluoro", @@ -9702,6 +9709,7 @@ "Alkyl iodides, C8-14, gamma-mu-perfluoro", "Alkylbenzene sulfonate", "Allethrin", + "Allidochlor", "Allobarbital", "Allyl 1H,1H-heptafluorobutyl ether", "Allyl 1H,1H-perfluorooctyl ether", @@ -10025,6 +10033,7 @@ "Atorvastatin-d5", "Atraton", "Atrazine", + "Atrazine + all metabolites", "Atrazine + N-Dealkylated Metabolites", "Atrazine-13C3", "Atrazine-d5", @@ -10092,6 +10101,8 @@ "Bacteria, nitrifiers", "Bacteria, slime-forming", "Bacteria, Sulfate reducing", + "Bacteroides - avian", + "Bacteroides - canine", "Balsalazide", "Balsalazide-d3", "Bank Angle", @@ -10104,6 +10115,7 @@ "Bank class, Right (choice list)", "Bank conditions - A (choice list)", "Bank conditions - B (choice list)", + "Bank Erosion", "Bank erosion hazard index", "Bank Erosion Length of 10m Segment-Left Bank", "Bank Erosion Length of 10m Segment-Right Bank", @@ -10115,6 +10127,7 @@ "Bank Height, Right", "Bank Instability Erosion Class (choice list)", "Bank Side Measured", + "Bank Slope", "Bank Slope, Left", "Bank Slope, Right", "Bank Stability Index", @@ -10127,8 +10140,10 @@ "Bank Stability RDB", "Bank Stability, Left (choice list)", "Bank Stability, Right (choice list)", + "Bank Substrate", "Bank Undercut", "Bank vegetative stability (choice list)", + "Banke Vegetative Cover", "Bankful Angle (choice list)", "Bankfull cross-sectional area", "Bankfull depth", @@ -10395,6 +10410,7 @@ "Beaver Flow Modification (choice list)", "Beck Biotic Index", "Bedrock", + "Benalaxyl", "Bendiocarb", "Bendiocarb phenol", "Bendroflumethiazide", @@ -10924,6 +10940,7 @@ "Benzoylecgonine hydrate", "Benzoylecgonine-D3", "Benzoylecgonine-d8", + "Benzoylprop-ethyl", "Benzphetamine", "Benzphetamine hydrochloride", "Benzthiazide", @@ -10992,6 +11009,7 @@ "Bicyclo[2.2.1]heptane-2,2-dicarbonitrile, 5,6-dichloro-3,3-bis(trifluoromethyl)-, (1S,4R,5S,6R)-", "Bicyclo[2.2.1]heptane-2,3-dicarboxylic acid, 5-[(.gamma.-.omega.-perfluoro-C8-20-alkyl)thio] derivs.", "Bicyclo[2.2.1]heptane, 2,2,3-trimethyl-, endo-", + "Bicyclo[2.2.1]heptane, 2,2,3-trimethyl-, exo-", "Bicyclo[3.2.0]hepta-2,6-diene, 4,4-bis(trifluoromethyl)-", "Bicyclo[3.3.1]nonane", "Bicyclo[4.2.0]octa-1,3,5-triene", @@ -11315,6 +11333,7 @@ "Brown spot fungal disease severity (choice list)", "Brush Cover (%)", "Brush Jabs", + "BTEX plus styrene, Total", "BTEX, Total", "BTU", "Bufencarb", @@ -11324,6 +11343,7 @@ "Bulk Density", "Bumetanide", "Bumetanide-d5", + "Bupirimate", "Buprenorphine", "Buprenorphine hydrochloride", "Buprofezin", @@ -11533,6 +11553,7 @@ "C10-C12 Aliphatics", "C10-C12 Aromatics", "C10-C16 Hydrocarbons", + "C10-C50 Hydrocarbons", "C11-C22 Aromatics", "C11-C22 Aromatics, Adjusted", "C11-C22 Aromatics, Unadjusted", @@ -11547,6 +11568,7 @@ "C16-C21 Aromatics", "C16-C21 Hydrocarbons", "C16-C34 Hydrocarbons", + "C16-C50 Hydrocarbons", "C18 Hydrocarbons", "C19-C36 Aliphatics", "C19-C36 Aliphatics, Unadjusted", @@ -11900,6 +11922,7 @@ "Channel-full width", "Channel-full width-to-depth ratio", "Channelization Type", + "Chara cover", "characteristicname", "Chemical oxygen demand", "Chemical oxygen demand, (high level)", @@ -12065,6 +12088,7 @@ "Chlorthal-dimethyl", "Chlorthal-Monomethyl", "Chlorthalidone", + "Chlorthiamid", "Chlorthion", "Chlorthiophos", "Cholest-5-en-3-one", @@ -12138,6 +12162,7 @@ "Cis-2-Pentene", "cis-2-Pentene & 2-methylpentane", "cis-2-Phenyl-2-butene", + "cis-3-Dodecene", "cis-3-Hexene", "cis-4-Methyl-2-pentene", "cis-Androsterone-16,16-d2", @@ -12151,6 +12176,7 @@ "cis-Cypermethrin", "cis-Decalin", "cis-Deltamethric acid", + "cis-Hydrindane", "cis-Mevinphos", "cis-Nonachlor", "cis-Perfluoro-1-methyl-2-ethylcyclohexane", @@ -12327,6 +12353,7 @@ "Copper(2+) bis(6,6,7,7,8,8,8-heptafluoro-2,2-dimethyl-5-oxooct-3-en-3-olate)", "Copper(I) cyanide", "Coprostan-3-one", + "Coprostanol", "Coprosterol", "Coral Bleached Cover", "Coral Diseased Cover", @@ -12497,6 +12524,7 @@ "Cyclohexanecarboxamide, N,N'-[4-(phenylazo)-1,3-phenylene]bis[1,2,2,3,3,4,4,5,5,6,6-undecafluoro- (9CI)", "Cyclohexanecarboxylic acid", "Cyclohexanecarboxylic acid, 1-(1,1,2,2-tetrafluoroethyl)-", + "Cyclohexaneethanol", "Cyclohexanemethanol, 1,2,2,3,3,4,4,5,5,6,6-undecafluoro-", "Cyclohexanemethanol, 4-[(ethenyloxy)methyl]-, polymer with chlorotrifluoroethene, (ethenyloxy)cyclohexane, .alpha.-[[4-[(ethenyloxy)methyl]cyclohexyl]methyl]-.omega.-hydroxypoly(oxy-1,2-ethanediyl) and ethoxyethene", "Cyclohexanesulfonic acid, 1,2,2,3,3,4,4,5,5,6,6-undecafluoro-, potassium salt (1:1)", @@ -12594,6 +12622,7 @@ "Cyclopropane, pentafluoro-1-propen-1-yl-", "Cyclopropane, pentafluoro(1,1,2,2,3,3,3-heptafluoropropoxy)-", "Cyclopropanecarbonyl chloride, 3-formyl-2,2-bis(trifluoromethyl)-, trans)-", + "Cyclopropanecarboxaldehyde", "Cyclopropanecarboxylic acid, 1,2,2,3,3-pentafluoro-", "Cyclopropanecarboxylic acid, 2,2-bis(trifluoromethyl)-, methyl ester", "Cyclopropanecarboxylic acid, 2,2-bis(trifluoromethyl)-3-(3,3,3-trifluoro-2- (trifluoromethyl)-1-propenyl)-, ethyl ester,", @@ -12771,6 +12800,7 @@ "Decane, 3,3,4,4,5,5,6,6,7,7,8,8-dodecafluoro-1,10-diiodo-", "Decane, 6-bromo-1,1,1,2,2,3,3-heptafluoro-4,4-bis(trifluoromethyl)-", "Decanoic acid", + "Decanoic Acid-D19", "Decanoic acid, 2,2,3,3,4,4,5,5-octafluoropentyl ester", "Decanoic acid, 2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,10,10,10-octadecafluoro-9-(trifluoromethyl)-", "Decanoic acid, 2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,10,10,10-octadecafluoro-9-(trifluoromethyl)-, ammonium salt (1:1)", @@ -12815,7 +12845,6 @@ "Dehydrogenase", "Dehydrogenase (corrected for carbon content)", "Dehydronifedipine", - "Deiodo flubendiamide", "Deisopropyl prometryn", "Deisopropylhydroxyatrazine", "Deisopropyliprodione", @@ -12859,6 +12888,7 @@ "Deoxygenation constant-carbon", "Deoxygenation constant-nitrogen", "Deoxynivalenol", + "Deposition and scouring (Y/N) (choice list)", "Deposits in Water", "Depth", "Depth by Pole", @@ -13162,7 +13192,6 @@ "Diethylmethoxy(3,3,4,4,5,5,6,6,6-nonafluorohexyl)silane", "Diethylmethoxy(3,3,4,4,5,5,6,6,7,7,7-undecafluoroheptyl)silane", "Diethylmethoxy(3,3,4,4,5,5,6,6,7,7,8,8,8-tridecafluorooctyl)silane", - "Diethylstilbesterol glucuronide", "Diethylstilbestrol", "Diethylstilbestrol glucuronide", "Diethylstilbestrol glucuronide (DES-GlcA)", @@ -13452,6 +13481,7 @@ "DogBact DNA marker", "Dominance", "Dominance, Top 3 species", + "Dominant Bank Vegetation (choice list)", "Dominant Habitat Type", "Dominant Land Use (choice list)", "Dominant particle size", @@ -13585,6 +13615,7 @@ "Erbium", "Erbium, tris[3-[2,2,3,3,4,4,4-heptafluoro-1-(oxo-.kappa.O)butyl]-1,7,7-trimethylbicyclo[2.2.1]heptan-2-onato-.kappa.O]-", "Ergosterol", + "Eroded Bank Height", "Eroded Fins Present (Y/N) (choice list)", "Erosion Causes", "Erosion within 1 Meter of Transect-Left Bank (choice list)", @@ -14129,6 +14160,7 @@ "Fenofibrate", "Fenofibrate-d6", "Fenoprofen", + "Fenoxaprop", "Fenoxaprop-ethyl", "Fenoxaprop-P-ethyl", "Fenoxycarb", @@ -14218,6 +14250,8 @@ "Fish Tissue Collected (Y/N) (choice list)", "Fixed dissolved solids", "Fixed suspended solids", + "Flamprop-isopropyl", + "Flamprop-methyl", "Flash point", "Flavobacterium", "Flazasulfuron", @@ -14239,6 +14273,7 @@ "Flonicamid", "Flonicamid-d3", "Flood Evidence (choice list)", + "Flood Evidence (text)", "Flood Frequency", "Flood prone area width", "Floodplain Presence (choice list)", @@ -14575,6 +14610,7 @@ "Grid count", "Griseofulvin", "Gross Alpha radioactivity", + "Gross alpha radioactivity (ref std unspecified)", "Gross alpha radioactivity, (Americium-241 ref std)", "Gross alpha radioactivity, (nat-Uranium ref std)", "Gross alpha radioactivity, (Plutonium-239 ref std)", @@ -14622,9 +14658,13 @@ "Habitat type, Dams Present Downstream", "Habitat type, Dams Present Upstream", "Habitat type, Distance between Riffles", + "Habitat Type, Dry (choice list)", + "Habitat Type, Pool (choice list)", "Habitat Type, Rapids (%)", + "Habitat Type, Riffle (choice list)", "Habitat type, Riffle Length", "Habitat type, Riffle Width", + "Habitat Type, Run (choice list)", "Habitat Type, Steps (%)", "Habitat type, Stream Shade Coverage", "Habitat type, Substrate - Inorganic", @@ -14780,6 +14820,7 @@ "Heptatriacontafluorononadecanoic acid", "Heptatriacontane", "Heptene", + "Heptenophos", "Heptyl sulfate", "Herbicide mix, unspecified", "Herbicides", @@ -14818,6 +14859,7 @@ "Hexadecane, 1,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,14,14-nonacosafluoro-16-iodo-", "Hexadecane, 1,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,16,16-tritriacontafluoro-16-iodo-", "Hexadecane, 2,6,11,15-tetramethyl-", + "Hexadecanoic Acid-D31", "Hexadecanoic acid, 2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,16,16,16-hentriacontafluoro-", "Hexadecyl sulfate", "Hexaethylene glycol monotetradecyl ether", @@ -14839,7 +14881,6 @@ "Hexafluoropropene, oxidized, oligomers, reduced and hydrolyzed", "Hexafluoropropylene oxide dimer acid", "Hexafluoropropylene oxide dimer acid ammonium salt", - "Hexafluoropropylene oxide-dimer acid", "Hexafluoropropylene polymer", "Hexahydrohexamethyl cyclopentabenzopyran lactone", "Hexakis (1H,1H,6H-Decafluorohexyloxy) phosphazine", @@ -15216,6 +15257,15 @@ "Insect Infestation Disturbance (choice list)", "Insectivores", "Instream Cover (%)", + "Instream Cover, Bedrock ledges", + "Instream Cover, Cobble, boulder, & growth", + "Instream Cover, Emergent aquatic vegetation", + "Instream Cover, Large woody debris", + "Instream Cover, Roots", + "Instream Cover, Small woody debris", + "Instream Cover, Submerged aquatic vegetation", + "Instream Cover, Terrestrial vegetation", + "Instream Cover, Undercut banks", "Instream feature, stream substrate (choice list)", "Instream Snags", "Inter-Transect Bearing", @@ -15503,7 +15553,6 @@ "Lake surface condition (choice list)", "Lake Type (choice list)", "Lake water level (choice list)", - "Lambda-Cyhalothrin", "Lamivudine", "Lamotrigine", "Lamotrigine N2-glucuronide", @@ -15640,6 +15689,7 @@ "Light, path", "Light, photosynthetic active radiation (PAR)", "Light, photosynthetic active radiation at depth (PAR)", + "Light, Photosynthetic Photon Flux Density (PPFD)", "Light, reflected", "Light, transmissivity", "Light, underwater extinction coefficient (K)", @@ -15661,6 +15711,7 @@ "Linear alkylbenzene sulfonate", "Linear perfluoroalkyl(C1-24)iodide", "Linoleic acid", + "Linolenic acid", "Linuron", "Linuron-d6", "Lipid (dry) content", @@ -15708,6 +15759,7 @@ "Lithium(1+) perfluoro-5-{[(perfluoropentanesulfonyl)azanidyl]sulfonyl}pentane", "Lithium(1+) perfluoro-8-{[(perfluorooctanesulfonyl)azanidyl]sulfonyl}octane", "Lithium/calcium ratio", + "Lithocholic Acid-D4", "Lithology code", "Litter Coverage", "Littoral Cover Complexity Index", @@ -16428,6 +16480,7 @@ "Morpholine, 3-methyl-2-phenyl-", "Morpholine, 4-(2,2,3,3-tetrafluoropropyl)-", "Mortality", + "Moss cover", "Moss Stream Reach Coverage Average (choice list)", "Motor Boat Density (choice list)", "Motor Boat Restrictions (choice list)", @@ -17637,6 +17690,7 @@ "o-Fluorophenatole", "o-Fluorophenol", "o-Hydroxyhippuric acid", + "O-Methylpodocarpic Acid", "o-Nitroaniline", "o-Nitroanisole", "o-Nitrophenol", @@ -17930,6 +17984,7 @@ "Oxygen plus argon", "Oxygen uptake, day", "Oxygen uptake, night", + "Oxygen-17", "Oxygen-17/oxygen-16 ratio", "Oxygen-18", "Oxygen-18/Oxygen-16 ratio", @@ -19230,6 +19285,7 @@ "Perfluorovaleric acid", "Perflutren - Human albumin", "Pericoma", + "Peridinin", "Perindopril", "Periphyton", "Periphyton biovolume", @@ -19622,6 +19678,7 @@ "Plutonium-239/plutonium-240", "Plutonium-240", "Plutonium-241", + "Point bar (Y/N) (choice list)", "Point Source Pollution - Outfall Pipe Discharging (Y/N) (choice list)", "Point Source Pollution - Outfall Pipe Present (Y/N) (choice list)", "Polar organic chemicals", @@ -20007,6 +20064,7 @@ "Precipitation amount last event", "Precipitation during activity (choice list)", "Precipitation event duration", + "Precipitation Intensity (choice list)", "Precipitation Last 24hrs (CA SWAMP) (choice list)", "Precipitation volume", "Precipitation, how heavy (choice list)", @@ -20926,6 +20984,7 @@ "Riparian Channel % Canopy Cover", "Riparian Channel Canopy Cover Left Bank-Left (choice list)", "Riparian Channel Canopy Cover Right Bank-Right (choice list)", + "Riparian Condition (choice list)", "Riparian Cover Complexity Index", "Riparian Disturbance Intensity-Extent Index", "Riparian Erosion", @@ -20933,6 +20992,7 @@ "Riparian vegetation composition (choice list)", "Riparian vegetation density (choice list)", "Riparian vegetation, dominant species present", + "Riparian Width", "Riparian Width LDB", "Riparian Width RDB", "Riparian Width, Both Banks", @@ -21720,6 +21780,7 @@ "Styrene", "Styrene and o-xylene", "Styrene oxide", + "Subdominant Substrate Description (text)", "Submerged Cover (%)", "Submerged Vegetation Habitat Type (%)", "Submergent Macrophyte Coverage (choice list)", @@ -21787,6 +21848,7 @@ "Substrate Odor (choice list)", "Substrate Origin", "Substrate Quality", + "Substrate Size Class", "Substrate Size Class, Midpoint", "Substrate Size Class, Transect", "Substrate Subdominant, Transect (choice list)", @@ -21995,7 +22057,6 @@ "Taxonomic Redundancy", "Taxonomic Richness", "Taxonomic Richness, Ephemeroptera, Plecoptera, Tricoptera", - "Taxonomic richness, EPT", "Taxonomic richness, weighted", "Taxonomic unit, assigned", "Taxonomic, pollution tolerance value (PTV) 2-4", @@ -22193,6 +22254,7 @@ "Tetramethylammonium perfluorobutane sulfonate", "Tetramethylammonium perfluorohexane sulfonate", "Tetramethylammonium perfluorooctane sulfonate", + "Tetramethylfulvene", "Tetramethyllead", "Tetramethylpyrazine", "Tetramethyltin", @@ -22206,6 +22268,7 @@ "Tetrasiphonidae", "Tetrastemma", "Tetrastemmatidae", + "Tetrasul", "Tetratetracontane", "Tetrathionate", "Tetratriacontafluoro-10,13,16,19-tetraoxaoctacosadiene", @@ -22400,6 +22463,7 @@ "Total hardness", "Total Heptachloro Biphenyls", "Total Hexachloro Biphenyls", + "Total Hexachlorocyclohexane, sum of isomers", "Total Hexachloronaphthalene", "Total Kjeldahl nitrogen", "Total Kjeldahl nitrogen (Organic N & NH3)", @@ -22527,6 +22591,7 @@ "Tramadol", "trans-(4-Methylcyclohexyl)methanol", "trans-1-Butyl-2-methylcyclopropane", + "trans-1-Ethyl-4-methylcyclohexane", "trans-1,2-Bis(perfluorohexyl)ethylene", "trans-1,2-Cyclohexanediol", "trans-1,2-Dichlorocyclohexane", @@ -22949,6 +23014,7 @@ "Undecanoic acid, 4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,11-heptadecafluoro-", "Undecyl heptafluorobutanoate", "Undecyl sulfate", + "Undecylcyclohexane", "Undercut Banks (%)", "Undercut Horizontal-Left Bank", "Undercut Horizontal-Right Bank", @@ -23126,6 +23192,7 @@ "Water flow compared to normal conditions (choice list)", "Water level", "Water level (probe)", + "Water level elevation", "Water level in relation to reference point", "Water level in well during pumping, MSL", "Water level in well, depth from a reference point", diff --git a/schemas/data/src/values/CharacteristicName.primary.json b/schemas/data/src/values/CharacteristicName.primary.json index 308191ae..4374a1a5 100644 --- a/schemas/data/src/values/CharacteristicName.primary.json +++ b/schemas/data/src/values/CharacteristicName.primary.json @@ -1,5 +1,5 @@ { - "$id": "https://datastream.org/schema/data/values/CharacteristicName.strict.json", + "$id": "https://datastream.org/schema/data/values/CharacteristicName.primary.json", "title": "Characteristic", "description": "", "type": "string", @@ -11,6 +11,7 @@ ".beta.-Endosulfan", ".beta.-Heptachlor epoxide", ".beta.-Hexachlorocyclohexane", + ".beta.-Sitosterol", ".delta.-Hexachlorocyclohexane", ".gamma.-Hexachlorocyclohexane", ".lambda.-Cyhalothrin", @@ -19,6 +20,7 @@ "1-(3,4-dichlorophenyl)-3-methyl urea", "1-Butanesulfonamide, 1,1,2,2,3,3,4,4,4-nonafluoro-N-methyl-", "1-Butanol", + "1-Decanesulfonic acid, 1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,10-heneicosafluoro-", "1-Heptanesulfonic acid, 1,1,2,2,3,3,4,4,5,5,6,6,7,7,7-pentadecafluoro-", "1-Methylchrysene", "1-Methylnaphthalene", @@ -87,15 +89,19 @@ "1,3,4,6,7,8-Hexahydro-4,6,6,7,8,8-hexamethylcyclopenta[g]-2-benzopyran", "1,3,5-Trichlorobenzene", "1,3,5-Trimethylbenzene", + "1,4-Dichloro-cis-2-butene", "1,4-Dichlorobenzene-d4", "1,4-Difluorobenzene", + "1,4-Dioxane", "1,4,6,7-Tetramethylnaphthalene", "1,6,7-Trimethylnaphthalene", "1,7-Dimethylfluorene", "1,7-Dimethylphenanthrene", "1,8-Dimethylphenanthrene", "10:2 Fluorotelomer sulfonic acid", + "11-chloroeicosafluoro-3-oxaundecane-1-sulfonic acid", "12-Chlorodehydroabietic acid", + "12,14-Dichlorodehydroabietic acid", "14-Chlorodehydroabietic acid", "17.alpha.-Estradiol", "1H,1H, 2H, 2H-Perfluorodecane sulfonic acid", @@ -164,6 +170,7 @@ "2,4,5-Trichlorophenol", "2,4,5-Trichlorotoluene", "2,4,6-Tribromophenol", + "2,4,6-Trichloroanisole", "2,4,6-Trichlorophenol", "2,4,6-Trinitro-5-tert-butyl-m-xylene", "2,5-Dibromobenzoic Acid", @@ -182,15 +189,24 @@ "3-Methylfluoranthene/Benzo[a]fluorene", "3-Methylphenanthrene", "3-Pyridinecarboxamide, N-(2,4-difluorophenyl)-2-[3-(trifluoromethyl)phenoxy]-", + "3-Pyridinecarboxamide, N-(2+A2:A19,4-difluorophenyl)-2-[3-(trifluoromethyl)phenoxy]-", "3,3'-Dichlorobenzidine", "3,3',5,5'-Tetrachlorobiphenyl", + "3,4-Dichlorocatechol", "3,4-Dichlorophenol", + "3,4,5-Trichlorocatechol", + "3,4,5-Trichloroguaiacol", "3,4,5-Trichlorophenol", + "3,4,6-Trichlorocatechol", + "3,4,6-Trichloroguaiacol", "3,5-Dichlorobenzoic acid", + "3,5-Dichlorocatechol", "3,5-Dichlorophenol", "3,6-Dimethylphenanthrene", "3:3 Fluorotelomer carboxylate, ion(1-)", "4-Chloro-2-methylphenol", + "4-Chloro-3-nitrobenzotrifluoride", + "4-Chlorocatechol", "4-Hydroxy-chlorothalonil", "4-Methyl-2-pentanol", "4-methyl-6-(2-methyl-5-propan-2-ylphenyl)-2-(5-propan-2-yl-1H-indazol-4-yl)-7,8-dihydro-5H-1,6-naphthyridine", @@ -200,6 +216,10 @@ "4-Nonylphenol triethoxylate", "4,4'-Dibromobiphenyl", "4,4'-Isopropylidenediphenol", + "4,5-Dichlorocatechol", + "4,5-Dichloroveratrole", + "4,5,6-Trichloroguaiacol", + "4,6-Dichloroguaiacol", "4,6-Dimethyldibenzothiophene", "4,6-Dinitro-o-cresol", "5-Methylchrysene/6-Methylchrysene", @@ -210,6 +230,7 @@ "7-Methylbenzo[a]pyrene", "7,12-Dimethylbenz[a]anthracene", "8(14)-Abietenic acid", + "9-Chlorohexadecafluoro-3-oxanonane-1-sulfonate", "9-Methylphenanthrene/4-Methylphenanthrene", "9,10-Dichlorostearic Acid", "Abietic acid", @@ -228,6 +249,7 @@ "Acephate", "Acesulfame", "Acetaldehyde", + "Acetamide, 2-(diethylamino)-N-(2,6-dimethylphenyl)-", "Acetaminophen", "Acetamiprid", "Acetic acid", @@ -237,6 +259,9 @@ "Acifluorfen, sodium salt", "Acridine", "Acridine-d9", + "Acrolein", + "Acrylonitrile", + "Adamantane Carboxylic Acid-D15", "Adenosine triphosphate", "Adsorbable organic halides", "Alachlor", @@ -250,6 +275,7 @@ "Alkalinity, Hydroxide", "Alkalinity, Phenolphthalein (total hydroxide+1/2 carbonate)", "Alkalinity, total", + "Allidochlor", "Allyl chloride", "Aluminum", "Aluminum-27", @@ -263,6 +289,7 @@ "Ammonium", "Ammonium 4,8-dioxa-3H-perfluorononanoate", "Amoxicillin", + "Anatoxin-A", "Anilazine", "Anion/cation ratio", "Anthracene", @@ -270,6 +297,7 @@ "Antimony-121", "Antimony-125", "Apparent color", + "ar,ar'-Dimethylbiphenyl", "Aroclor 1016", "Aroclor 1221", "Aroclor 1232", @@ -289,11 +317,13 @@ "Aspirin", "Asulam", "Atrazine", + "Atrazine + all metabolites", "Atrazine + N-Dealkylated Metabolites", "Atrazine-d5 (ethyl-d5)", "Azinphos-ethyl", "Azinphos-methyl", "Azoxystrobin", + "Bacteria, Sulfate reducing", "Bankfull Height", "Bankfull width", "Barium", @@ -326,6 +356,7 @@ "BDE-197", "BDE-206", "BDE-207", + "Benalaxyl", "Bendiocarb", "Benfluralin", "Benomyl", @@ -335,6 +366,7 @@ "Benzene", "Benzene, 1-bromo-2-(trifluoromethyl)-", "Benzene, 1,2-dichloro-4-methyl-", + "Benzene, 1,2,3-trichloro-4,5-dimethoxy-", "Benzeneacetic acid, .alpha.-methyl-4-(2-methylpropyl)-", "Benzidine", "Benzo(a)anthracene-D12", @@ -358,6 +390,7 @@ "Benzofluoranthene", "Benzoic acid", "Benzoylecgonine", + "Benzoylprop-ethyl", "Beryllium", "Beryllium-9", "Beta Cypermethrin", @@ -393,7 +426,9 @@ "Bromophos-ethyl", "Bromopropylate", "Bromoxynil", + "BTEX plus styrene, Total", "BTEX, Total", + "Bupirimate", "Butachlor", "Butanoic acid, 4-(4-chloro-2-methylphenoxy)-, ethyl ester", "Butralin", @@ -410,8 +445,10 @@ "C1-Fluoranthenes/pyrenes", "C1-Phenanthrenes/anthracenes", "C10-C16 Hydrocarbons", + "C10-C50 Hydrocarbons", "C16-C21 Hydrocarbons", "C16-C34 Hydrocarbons", + "C16-C50 Hydrocarbons", "C2-Benzo[a]anthracenes/chrysenes", "C2-Benzofluoranthenes/benzopyrenes", "C2-Biphenyls", @@ -450,9 +487,11 @@ "Carbamazepine", "Carbaryl", "Carbaryl-d7", + "Carbazole", "Carbofuran", "Carbon dioxide", "Carbon Dioxide, free CO2", + "Carbon disulfide", "Carbon monoxide", "Carbon tetrachloride", "Carbon-13", @@ -513,6 +552,7 @@ "Chlorpyrifos-methyl", "Chlorsulfuron", "Chlorthal-dimethyl", + "Chlorthiamid", "Chlorthiophos", "Cholesterol", "Chromium", @@ -553,8 +593,10 @@ "Copper 8-quinolinolate", "Copper-63", "Copper-65", + "Coprostanol", "Corrosion & scaling control, Ryznar Stability Index", "Cotinine", + "Cresol", "Crufomate", "Cryptosporidium", "Cumene", @@ -570,6 +612,7 @@ "Cyclohexanesulfonic acid, 1,2,2,3,3,4,5,5,6,6-decafluoro-4-(1,1,2,2,2-pentafluoroethyl)-, potassium salt (1:1)", "Cyfluthrin", "Cyhalothrin", + "Cyprazine", "Cyprodinil", "Day, ice off", "Day, ice on", @@ -579,9 +622,12 @@ "DDT/DDD/DDE, sum of p,p' isomers", "Decabromodiphenyl ether", "Decachlorobiphenyl", + "Decanoic acid", + "Decanoic Acid-D19", "Decanoic acid, 3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,10-heptadecafluoro-", "Decanoic acid, 4,4,5,5,6,6,7,7,8,8,9,9,10,10,10-pentadecafluoro-", "Dehydroabietic acid", + "Dehydronifedipine", "Delta boron-11/boron-10", "delta carbon-13/carbon-12", "Delta nitrogen-15/nitrogen-14", @@ -633,6 +679,7 @@ "Dichlorvos", "Diclofenac", "Diclofenac, 4-hydroxy", + "Diclofop", "Diclofop methyl", "Dicofol", "Dicrotophos", @@ -653,6 +700,7 @@ "Dimethyl phthalate", "Dimethyl selenoxide", "Dimethyl sulfone", + "Dimethylnaphthalene", "Dinitramine", "Dinoseb", "Dinotefuran", @@ -668,6 +716,7 @@ "Diuron", "Docosanoic acid", "Dodecanoic acid, 3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,12-heneicosafluoro-", + "Dysprosium", "Eicosanoic acid", "Endosulfan", "Endosulfan sulfate", @@ -678,18 +727,21 @@ "Enterococcus", "epi-Coprostanol", "EPTC-d14", + "Erbium", "Erythromycin", "Escherichia coli", "Estradiol", "Estriol", "Estrone", "Ethalfluralin", + "Ethanamine, 2-(diphenylmethoxy)-N,N-dimethyl-", "Ethanol", "Ethinyl estradiol", "Ethion", "Ethofumesate", "Ethoprop", "Ethyl acetate", + "Ethyl methacrylate", "Ethylbenzene", "Ethylene dibromide", "Ethylene glycol", @@ -707,6 +759,7 @@ "Fenitrothion-d6", "Fenobucarb", "Fenoprofen", + "Fenoxaprop", "Fenoxaprop-ethyl", "Fenoxaprop-P-ethyl", "Fensulfothion", @@ -717,6 +770,8 @@ "Filamentous Algae Cover", "Fixed dissolved solids", "Fixed suspended solids", + "Flamprop-isopropyl", + "Flamprop-methyl", "Flonicamid", "Flonicamid-d3", "Flow", @@ -757,6 +812,7 @@ "Gold", "Grain size, coarse sand (>=630 to 2000 um)", "Gran acid neutralizing capacity", + "Gross alpha radioactivity (ref std unspecified)", "Gross alpha radioactivity, (Americium-241 ref std)", "Gross beta radioactivity, (Cesium-137 ref std)", "Hafnium", @@ -771,8 +827,10 @@ "Heptachlor epoxide", "Heptachlorodibenzo-p-dioxin", "Heptachlorodibenzofuran", + "Heptadecanoic acid", "Heptafluorobutyric acid", "Heptanal", + "Heptenophos", "Heterotrophic bacteria", "Hexachlorobenzene", "Hexachlorobutadiene", @@ -782,6 +840,7 @@ "Hexachlorodibenzofuran", "Hexachloroethane", "Hexaconazole", + "Hexadecanoic Acid-D31", "Hexadecanoic acid, 2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,16,16,16-hentriacontafluoro-", "Hexafluoropropylene oxide dimer acid", "Hexafluoropropylene oxide dimer acid ammonium salt", @@ -834,6 +893,7 @@ "Iridium", "Iron", "Iron-57", + "Iron-related bacteria", "Isobutanol", "Isobutyraldehyde", "Isofenphos", @@ -853,15 +913,18 @@ "Lead-210", "Light attenuation, depth at 99%", "Light, photosynthetic active radiation (PAR)", + "Light, Photosynthetic Photon Flux Density (PPFD)", "Light, underwater extinction coefficient (K)", "Light, underwater incident", "Lignoceric Acid", "Lincomycin", "Linoleic acid", + "Linolenic acid", "Linuron", "Linuron-d6", "Lithium", "Lithium-7", + "Lithocholic Acid-D4", "Lutetium", "m and p-Cresol", "m- & p-Chlorophenol", @@ -889,6 +952,7 @@ "Metalaxyl", "Metalaxyl-M", "Metconazole", + "Methacrylonitrile", "Methamidophos", "Methamphetamine", "Methane", @@ -903,14 +967,20 @@ "Methoxychlor", "Methoxycitronellal", "Methyl bromide", + "Methyl ethyl ketone", + "Methyl iodide", "Methyl isobutyl ketone", "Methyl mercaptan", + "Methyl methacrylate", "Methyl parathion", "Methyl Selenium", "Methyl tert-butyl ether", "Methylacenaphthene", + "Methylanthracene", "Methylarsonic acid", + "Methylbiphenyl", "Methylchrysene", + "Methylcyclohexane", "Methyldibenzothiophene", "Methylene chloride", "Methylfluorene", @@ -1116,6 +1186,7 @@ "Nitrilotriacetic acid", "Nitrite", "Nitrobenzene", + "Nitrobenzene-D5", "Nitrofen", "Nitrogen dioxide", "Nitrogen-15", @@ -1133,6 +1204,7 @@ "o-Cresol", "o-Dichlorobenzene", "O-Ethyl O-(p-nitrophenyl) phenylphosphonothioate", + "O-Methylpodocarpic Acid", "o-Nitrophenol", "o-Xylene", "o-Xylene, mixt. with m-xylene and p-xylene", @@ -1166,6 +1238,7 @@ "Oxycarboxin", "Oxychlordane", "Oxyfluorfen", + "Oxygen-17", "Oxygen-18", "Oxygen-18/Oxygen-16 ratio", "p-Bromofluorobenzene", @@ -1214,14 +1287,17 @@ "Pentoxifylline", "Perfluoro-1-decanesulfonamide", "Perfluoro-1-dodecanesulfonate", + "Perfluoro-2-propoxypropanoate", "Perfluoro-3-methoxypropanoic acid", "Perfluoro-3,6-dioxaheptanoic acid", "Perfluoro(4-methoxybutanoic) acid", "Perfluorobutanesulfonic acid", "Perfluorobutylsulfonamide", + "Perfluorodecanesulfonate", "Perfluorodecanoic acid", "Perfluorododecanoic acid", "Perfluoroheptane sulfonamide", + "Perfluoroheptanesulfonate", "Perfluoroheptanoic acid", "perfluorohexane sulfonamido propyl amine", "Perfluorohexane sulfonamidopropyl ammonium", @@ -1236,6 +1312,7 @@ "Perfluorooctanesulfonamide", "Perfluorooctanesulfonamido amine oxide", "Perfluorooctanesulfonamido betaine", + "Perfluorooctanesulfonate", "Perfluorooctanoic acid", "Perfluoropentanesulfonic acid", "Perfluorotetradecanoic acid", @@ -1256,6 +1333,8 @@ "Phenanthrene-d10", "Phenol", "Phenol, 2,3-dichloro-6-methoxy-", + "Phenol, 4-chloro-2-methoxy-", + "Phenol, 4,5-dichloro-2-methoxy-", "Phenol, dibromo-", "Phenolics", "Phenols", @@ -1318,6 +1397,7 @@ "Purgeable hydrocarbons", "Pyraclostrobin", "Pyrene", + "Pyrene-d10", "Pyrethrin I", "Pyrethrin II", "Pyridaben", @@ -1469,6 +1549,7 @@ "Tetraethylene glycol", "Tetramethrin", "Tetrapropyl dithiopyrophosphate", + "Tetrasul", "Thallium", "Thallium-205", "Thiabendazole", @@ -1496,6 +1577,7 @@ "Total dissolved solids", "Total fixed solids", "Total hardness", + "Total Hexachlorocyclohexane, sum of isomers", "Total Nitrogen, mixed forms", "Total PAHs, high wt", "Total PAHs, low wt", @@ -1513,6 +1595,7 @@ "Tralkoxydim", "trans-1,2-Dichloroethylene", "trans-1,3-Dichloropropene", + "trans-1,4-Dichloro-2-butene", "trans-Chlordane", "trans-Nonachlor", "Transmittance at 254 nm", @@ -1568,6 +1651,8 @@ "Volatile suspended solids", "Water level", "Water level (probe)", + "Water level elevation", + "Water level in well, depth from a reference point", "Weak, dissociable cyanide", "Wetted Width", "White ice thickness", diff --git a/schemas/data/src/values/LithologyType.legacy.json b/schemas/data/src/values/LithologyType.legacy.json new file mode 100644 index 00000000..9aa686ba --- /dev/null +++ b/schemas/data/src/values/LithologyType.legacy.json @@ -0,0 +1,90 @@ +{ + "$id": "https://datastream.org/schema/data/values/LithologyType.legacy.json", + "title": "Well Formation Type", + "description": "", + "type": "string", + "enum": [ + "Andesite", + "Anthropogenic material", + "Basalt", + "Bedrock", + "Bedrock, Carbonate", + "Bedrock, Fractured", + "Bedrock, Interbedded sandstone/carbonate", + "Bedrock, Interbedded sandstone/shale", + "Bedrock, Interbedded sandstone/shale/carbonate", + "Bedrock, Interbedded sediments", + "Bedrock, Interbedded siltstone/carbonate/gypsum", + "Bedrock, Massive sandstone", + "Bedrock, Soluble Carbonate - Karst", + "Bedrock, Soluble gypsum/dolomite with shale interb", + "Carbonate sedimentary rock", + "Clay", + "Clayey Sand", + "Clayey Silt", + "Coal", + "Conglomerate", + "Diamicton", + "Diorite", + "Dolomite", + "Evaporite", + "Gabbro", + "Geologic", + "Gneiss", + "Granite", + "Gravel", + "Gravelly Mud", + "Gravelly Muddy Sand", + "Gravelly Sand", + "Gravely Sediment", + "Humus", + "Hydrogeologic", + "Igneous rock", + "Interbedded gravel and clay", + "Interbedded gravel and sand", + "Interbedded gravel and silt", + "Interbedded sand and clay", + "Interbedded sand and silt", + "Interbedded silt and clay", + "Limestone", + "Marble", + "Metamorphic rock", + "Mixed", + "Mud", + "Muddy Gravel", + "Muddy Sand", + "Muddy Sandy Gravel", + "Organic material", + "Peat", + "Plutonic rock", + "Quartzite", + "Rhyolite", + "Sand", + "Sand, Silt, Clay", + "Sandstone", + "Sandy Clay", + "Sandy Gravel", + "Sandy Mud", + "Sandy Silt", + "Schist", + "Sediment, Alluvium/Terrace", + "Sediment, Isolated Terrace", + "Sediment, Terrace", + "Sediment, Unconsolidated", + "Sedimentary rock", + "Shale", + "Silt", + "Siltite", + "Silty Clay", + "Silty Sand", + "Slate", + "Soil", + "Soil Horizon", + "Till", + "Unconsolidated material", + "Undifferentiated sediment", + "Unknown material", + "Volcanic rock" + ], + "maxLength": 50 +} \ No newline at end of file diff --git a/schemas/data/src/values/LithologyType.primary.json b/schemas/data/src/values/LithologyType.primary.json new file mode 100644 index 00000000..30cc6bcb --- /dev/null +++ b/schemas/data/src/values/LithologyType.primary.json @@ -0,0 +1,80 @@ +{ + "$id": "https://datastream.org/schema/data/values/LithologyType.primary.json", + "title": "Well Formation Type", + "description": "", + "type": "string", + "enum": [ + "Andesite", + "Anthropogenic material", + "Basalt", + "Bedrock", + "Bedrock, Fractured", + "Bedrock, Interbedded sandstone/carbonate", + "Bedrock, Interbedded sandstone/shale", + "Bedrock, Interbedded sandstone/shale/carbonate", + "Bedrock, Interbedded sediments", + "Bedrock, Interbedded siltstone/carbonate/gypsum", + "Bedrock, Soluble Carbonate - Karst", + "Bedrock, Soluble gypsum/dolomite with shale interb", + "Carbonate sedimentary rock", + "Clay", + "Clayey Sand", + "Clayey Silt", + "Coal", + "Conglomerate", + "Diamicton", + "Diorite", + "Dolomite", + "Evaporite", + "Gabbro", + "Gneiss", + "Granite", + "Gravel", + "Gravelly Mud", + "Gravelly Muddy Sand", + "Gravelly Sand", + "Gravely Sediment", + "Humus", + "Igneous rock", + "Interbedded gravel and clay", + "Interbedded gravel and sand", + "Interbedded gravel and silt", + "Interbedded sand and clay", + "Interbedded sand and silt", + "Interbedded silt and clay", + "Limestone", + "Marble", + "Metamorphic rock", + "Mud", + "Muddy Gravel", + "Muddy Sand", + "Muddy Sandy Gravel", + "Organic material", + "Peat", + "Plutonic rock", + "Quartzite", + "Rhyolite", + "Sand", + "Sand, Silt, Clay", + "Sandstone", + "Sandy Clay", + "Sandy Gravel", + "Sandy Mud", + "Sandy Silt", + "Schist", + "Sedimentary rock", + "Shale", + "Silt", + "Siltite", + "Silty Clay", + "Silty Sand", + "Slate", + "Soil", + "Till", + "Unconsolidated material", + "Undifferentiated sediment", + "Unknown material", + "Volcanic rock" + ], + "maxLength": 50 +} \ No newline at end of file diff --git a/schemas/data/src/values/MeasurementUnit.legacy.json b/schemas/data/src/values/MeasurementUnit.legacy.json index 22f6fd01..ef4ff0c4 100644 --- a/schemas/data/src/values/MeasurementUnit.legacy.json +++ b/schemas/data/src/values/MeasurementUnit.legacy.json @@ -1,5 +1,5 @@ { - "$id": "https://datastream.org/schema/data/values/MeasurementUnit.loose.json", + "$id": "https://datastream.org/schema/data/values/MeasurementUnit.legacy.json", "title": "Measurement Unit", "description": "", "type": "string", @@ -77,6 +77,7 @@ "cells/dL", "cfm", "cfs", + "cfs-day", "CFU", "cfu/100g", "cfu/100mL", @@ -147,9 +148,11 @@ "ft/min", "ft/sec", "ft2", + "ft2/day", "ft3", "ft3/day", "ft3/sec", + "ftH2O", "FTU", "g", "g/cm2", @@ -173,6 +176,7 @@ "g/stalk", "gal", "gal/day", + "gal/day/ft", "gal/hr", "gal/min", "gal/sec", diff --git a/schemas/data/src/values/MeasurementUnit.primary.json b/schemas/data/src/values/MeasurementUnit.primary.json index bb7bf9e2..c1cc7360 100644 --- a/schemas/data/src/values/MeasurementUnit.primary.json +++ b/schemas/data/src/values/MeasurementUnit.primary.json @@ -1,5 +1,5 @@ { - "$id": "https://datastream.org/schema/data/values/MeasurementUnit.strict.json", + "$id": "https://datastream.org/schema/data/values/MeasurementUnit.primary.json", "title": "Measurement Unit", "description": "", "type": "string", diff --git a/schemas/data/src/values/MethodSpeciation.legacy.json b/schemas/data/src/values/MethodSpeciation.legacy.json index c185369e..1062a56d 100644 --- a/schemas/data/src/values/MethodSpeciation.legacy.json +++ b/schemas/data/src/values/MethodSpeciation.legacy.json @@ -1,5 +1,5 @@ { - "$id": "https://datastream.org/schema/data/values/MethodSpeciation.loose.json", + "$id": "https://datastream.org/schema/data/values/MethodSpeciation.legacy.json", "title": "Method Speciation", "description": "", "type": "string", diff --git a/schemas/data/src/values/MethodSpeciation.primary.json b/schemas/data/src/values/MethodSpeciation.primary.json index 4c65374a..5797fb95 100644 --- a/schemas/data/src/values/MethodSpeciation.primary.json +++ b/schemas/data/src/values/MethodSpeciation.primary.json @@ -1,5 +1,5 @@ { - "$id": "https://datastream.org/schema/data/values/MethodSpeciation.strict.json", + "$id": "https://datastream.org/schema/data/values/MethodSpeciation.primary.json", "title": "Method Speciation", "description": "", "type": "string", diff --git a/schemas/data/src/values/MonitoringLocationHorizontalAccuracyUnit.legacy.json b/schemas/data/src/values/MonitoringLocationHorizontalAccuracyUnit.legacy.json index 990d2792..c0efdb84 100644 --- a/schemas/data/src/values/MonitoringLocationHorizontalAccuracyUnit.legacy.json +++ b/schemas/data/src/values/MonitoringLocationHorizontalAccuracyUnit.legacy.json @@ -1,5 +1,5 @@ { - "$id": "https://datastream.org/schema/data/values/MonitoringLocationHorizontalAccuracyUnit.loose.json", + "$id": "https://datastream.org/schema/data/values/MonitoringLocationHorizontalAccuracyUnit.legacy.json", "title": "Measurement Unit", "description": "", "type": "string", diff --git a/schemas/data/src/values/MonitoringLocationHorizontalAccuracyUnit.primary.json b/schemas/data/src/values/MonitoringLocationHorizontalAccuracyUnit.primary.json index b4529bdb..73a547a0 100644 --- a/schemas/data/src/values/MonitoringLocationHorizontalAccuracyUnit.primary.json +++ b/schemas/data/src/values/MonitoringLocationHorizontalAccuracyUnit.primary.json @@ -1,5 +1,5 @@ { - "$id": "https://datastream.org/schema/data/values/MonitoringLocationHorizontalAccuracyUnit.strict.json", + "$id": "https://datastream.org/schema/data/values/MonitoringLocationHorizontalAccuracyUnit.primary.json", "title": "Measurement Unit", "description": "", "type": "string", diff --git a/schemas/data/src/values/MonitoringLocationHorizontalCoordinateReferenceSystem.legacy.json b/schemas/data/src/values/MonitoringLocationHorizontalCoordinateReferenceSystem.legacy.json index 7e05d371..580ce397 100644 --- a/schemas/data/src/values/MonitoringLocationHorizontalCoordinateReferenceSystem.legacy.json +++ b/schemas/data/src/values/MonitoringLocationHorizontalCoordinateReferenceSystem.legacy.json @@ -1,5 +1,5 @@ { - "$id": "https://datastream.org/schema/data/values/MonitoringLocationHorizontalCoordinateReferenceSystem.loose.json", + "$id": "https://datastream.org/schema/data/values/MonitoringLocationHorizontalCoordinateReferenceSystem.legacy.json", "title": "Horizontal Reference Datum", "description": "", "type": "string", diff --git a/schemas/data/src/values/MonitoringLocationHorizontalCoordinateReferenceSystem.primary.json b/schemas/data/src/values/MonitoringLocationHorizontalCoordinateReferenceSystem.primary.json index 63352bb7..33842dcd 100644 --- a/schemas/data/src/values/MonitoringLocationHorizontalCoordinateReferenceSystem.primary.json +++ b/schemas/data/src/values/MonitoringLocationHorizontalCoordinateReferenceSystem.primary.json @@ -1,11 +1,12 @@ { - "$id": "https://datastream.org/schema/data/values/MonitoringLocationHorizontalCoordinateReferenceSystem.strict.json", + "$id": "https://datastream.org/schema/data/values/MonitoringLocationHorizontalCoordinateReferenceSystem.primary.json", "title": "Horizontal Reference Datum", "description": "", "type": "string", "enum": [ "NAD27", "NAD83", + "OTHER", "UNKWN", "WGS72", "WGS84" diff --git a/schemas/data/src/values/MonitoringLocationType.legacy.json b/schemas/data/src/values/MonitoringLocationType.legacy.json index 60360ad0..22c91202 100644 --- a/schemas/data/src/values/MonitoringLocationType.legacy.json +++ b/schemas/data/src/values/MonitoringLocationType.legacy.json @@ -1,5 +1,5 @@ { - "$id": "https://datastream.org/schema/data/values/MonitoringLocationType.loose.json", + "$id": "https://datastream.org/schema/data/values/MonitoringLocationType.legacy.json", "title": "Monitoring Location Type", "description": "", "type": "string", @@ -27,6 +27,7 @@ "Constructed Tunnel", "Constructed Water Transport Structure", "Constructed Wetland", + "Dug Well", "Estuary", "Estuary-Freshwater", "Facility Industrial", @@ -63,11 +64,14 @@ "Mine/Mine Discharge Adit (Mine Entrance)", "Mine/Mine Discharge Tailings Pile", "Mine/Mine Discharge Waste Rock Pile", + "Multilevel Well", "National Air Monitoring Station", + "Nested Well", "Ocean", "Oil and Gas Well", "Other-Ground Water", "Other-Surface Water", + "Piezometer", "Pipe, Unspecified Source", "Playa", "Pond", diff --git a/schemas/data/src/values/MonitoringLocationType.primary.json b/schemas/data/src/values/MonitoringLocationType.primary.json index 8ce3dee7..88df0cb1 100644 --- a/schemas/data/src/values/MonitoringLocationType.primary.json +++ b/schemas/data/src/values/MonitoringLocationType.primary.json @@ -1,23 +1,32 @@ { - "$id": "https://datastream.org/schema/data/values/MonitoringLocationType.strict.json", + "$id": "https://datastream.org/schema/data/values/MonitoringLocationType.primary.json", "title": "Monitoring Location Type", "description": "", "type": "string", "enum": [ "Atmosphere", + "Borehole", "Canal Drainage", "Canal Irrigation", "Canal Transport", + "Dug Well", "Estuary", "Great Lake", "Lake/Pond", + "Multilevel Well", + "Nested Well", "Ocean", + "Other-Ground Water", + "Piezometer", "Pond-Stormwater", "Reservoir", "River/Stream", + "Seep", "Spring", "Storm Sewer", + "Sump", "Unspecified", + "Well", "Wetland" ], "maxLength": 40 diff --git a/schemas/data/src/values/MonitoringLocationVerticalAccuracyUnit.legacy.json b/schemas/data/src/values/MonitoringLocationVerticalAccuracyUnit.legacy.json new file mode 100644 index 00000000..2ef35712 --- /dev/null +++ b/schemas/data/src/values/MonitoringLocationVerticalAccuracyUnit.legacy.json @@ -0,0 +1,11 @@ +{ + "$id": "https://datastream.org/schema/data/values/MonitoringLocationVerticalAccuracyUnit.legacy.json", + "title": "Measurement Unit", + "description": "", + "type": "string", + "enum": [ + "ft", + "m" + ], + "maxLength": 2 +} \ No newline at end of file diff --git a/schemas/data/src/values/MonitoringLocationVerticalAccuracyUnit.primary.json b/schemas/data/src/values/MonitoringLocationVerticalAccuracyUnit.primary.json new file mode 100644 index 00000000..f25ceb20 --- /dev/null +++ b/schemas/data/src/values/MonitoringLocationVerticalAccuracyUnit.primary.json @@ -0,0 +1,11 @@ +{ + "$id": "https://datastream.org/schema/data/values/MonitoringLocationVerticalAccuracyUnit.primary.json", + "title": "Measurement Unit", + "description": "", + "type": "string", + "enum": [ + "ft", + "m" + ], + "maxLength": 2 +} \ No newline at end of file diff --git a/schemas/data/src/values/MonitoringLocationVerticalCollectionMethod.legacy.json b/schemas/data/src/values/MonitoringLocationVerticalCollectionMethod.legacy.json new file mode 100644 index 00000000..a8ccd004 --- /dev/null +++ b/schemas/data/src/values/MonitoringLocationVerticalCollectionMethod.legacy.json @@ -0,0 +1,27 @@ +{ + "$id": "https://datastream.org/schema/data/values/MonitoringLocationVerticalCollectionMethod.legacy.json", + "title": "Vertical Collection Method", + "description": "", + "type": "string", + "enum": [ + "Altimetry", + "Classical Surveying Techniques", + "Digital Elevation Model", + "GPS Carrier Phase Kinematic Relative Position", + "GPS Carrier Phase Static Relative Position", + "GPS Code (Pseudo Range) Differential", + "GPS Code (Pseudo Range) Precise Position", + "GPS Code (Pseudo Range) Standard Position (SA Off)", + "GPS Code (Pseudo Range) Standard Position (SA On)", + "Handheld GPS - Positioning Method Unspecified", + "Leveling-Non Bench Mark Control Points", + "Light Detection And Ranging (LiDAR)", + "Other", + "Photogrammetric", + "Precise Leveling-Bench Mark", + "Topographic Map Interpolation", + "Trigonometric Leveling", + "Unknown" + ], + "maxLength": 50 +} \ No newline at end of file diff --git a/schemas/data/src/values/MonitoringLocationVerticalCollectionMethod.primary.json b/schemas/data/src/values/MonitoringLocationVerticalCollectionMethod.primary.json new file mode 100644 index 00000000..02bf6c40 --- /dev/null +++ b/schemas/data/src/values/MonitoringLocationVerticalCollectionMethod.primary.json @@ -0,0 +1,27 @@ +{ + "$id": "https://datastream.org/schema/data/values/MonitoringLocationVerticalCollectionMethod.primary.json", + "title": "Vertical Collection Method", + "description": "", + "type": "string", + "enum": [ + "Altimetry", + "Classical Surveying Techniques", + "Digital Elevation Model", + "GPS Carrier Phase Kinematic Relative Position", + "GPS Carrier Phase Static Relative Position", + "GPS Code (Pseudo Range) Differential", + "GPS Code (Pseudo Range) Precise Position", + "GPS Code (Pseudo Range) Standard Position (SA Off)", + "GPS Code (Pseudo Range) Standard Position (SA On)", + "Handheld GPS - Positioning Method Unspecified", + "Leveling-Non Bench Mark Control Points", + "Light Detection And Ranging (LiDAR)", + "Other", + "Photogrammetric", + "Precise Leveling-Bench Mark", + "Topographic Map Interpolation", + "Trigonometric Leveling", + "Unknown" + ], + "maxLength": 50 +} \ No newline at end of file diff --git a/schemas/data/src/values/MonitoringLocationVerticalCoordinateReferenceSystem.legacy.json b/schemas/data/src/values/MonitoringLocationVerticalCoordinateReferenceSystem.legacy.json new file mode 100644 index 00000000..eabcd73e --- /dev/null +++ b/schemas/data/src/values/MonitoringLocationVerticalCoordinateReferenceSystem.legacy.json @@ -0,0 +1,17 @@ +{ + "$id": "https://datastream.org/schema/data/values/MonitoringLocationVerticalCoordinateReferenceSystem.legacy.json", + "title": "Vertical Reference Datum", + "description": "", + "type": "string", + "enum": [ + "CGVD2013", + "CGVD28", + "LTD", + "NAVD88", + "NGVD29", + "OTHER", + "SEALV", + "UNKWN" + ], + "maxLength": 8 +} \ No newline at end of file diff --git a/schemas/data/src/values/MonitoringLocationVerticalCoordinateReferenceSystem.primary.json b/schemas/data/src/values/MonitoringLocationVerticalCoordinateReferenceSystem.primary.json new file mode 100644 index 00000000..8380f15b --- /dev/null +++ b/schemas/data/src/values/MonitoringLocationVerticalCoordinateReferenceSystem.primary.json @@ -0,0 +1,15 @@ +{ + "$id": "https://datastream.org/schema/data/values/MonitoringLocationVerticalCoordinateReferenceSystem.primary.json", + "title": "Vertical Reference Datum", + "description": "", + "type": "string", + "enum": [ + "CGVD2013", + "CGVD28", + "NAVD88", + "NGVD29", + "OTHER", + "UNKWN" + ], + "maxLength": 8 +} \ No newline at end of file diff --git a/schemas/data/src/values/MonitoringLocationVerticalUnit.legacy.json b/schemas/data/src/values/MonitoringLocationVerticalUnit.legacy.json index 8bc672fd..efe068de 100644 --- a/schemas/data/src/values/MonitoringLocationVerticalUnit.legacy.json +++ b/schemas/data/src/values/MonitoringLocationVerticalUnit.legacy.json @@ -1,9 +1,11 @@ { - "$id": "https://datastream.org/schema/data/values/MonitoringLocationVerticalUnit.loose.json", + "$id": "https://datastream.org/schema/data/values/MonitoringLocationVerticalUnit.legacy.json", "title": "Measurement Unit", "description": "", "type": "string", "enum": [ + "ft", + "m", "MASL" ], "maxLength": 4 diff --git a/schemas/data/src/values/MonitoringLocationVerticalUnit.primary.json b/schemas/data/src/values/MonitoringLocationVerticalUnit.primary.json index 931f88a2..cf64454b 100644 --- a/schemas/data/src/values/MonitoringLocationVerticalUnit.primary.json +++ b/schemas/data/src/values/MonitoringLocationVerticalUnit.primary.json @@ -1,9 +1,11 @@ { - "$id": "https://datastream.org/schema/data/values/MonitoringLocationVerticalUnit.strict.json", + "$id": "https://datastream.org/schema/data/values/MonitoringLocationVerticalUnit.primary.json", "title": "Measurement Unit", "description": "", "type": "string", "enum": [ + "ft", + "m", "MASL" ], "maxLength": 4 diff --git a/schemas/data/src/values/ResultAnalyticalMethodContext.legacy.json b/schemas/data/src/values/ResultAnalyticalMethodContext.legacy.json index 7e3adbbf..f06031e6 100644 --- a/schemas/data/src/values/ResultAnalyticalMethodContext.legacy.json +++ b/schemas/data/src/values/ResultAnalyticalMethodContext.legacy.json @@ -1,5 +1,5 @@ { - "$id": "https://datastream.org/schema/data/values/ResultAnalyticalMethodContext.loose.json", + "$id": "https://datastream.org/schema/data/values/ResultAnalyticalMethodContext.legacy.json", "title": "Analytical Method Context", "description": "", "type": "string", @@ -38,6 +38,7 @@ "CDC", "CHEVRON", "CSIRO", + "CSSS", "DIN", "DOE", "DOI", @@ -83,6 +84,7 @@ "OK ST U", "ON MECP", "ORNL", + "Oxyguard", "PACE LABS", "PALINTEST LTD", "PRACTICAL STATS", @@ -98,6 +100,7 @@ "SM", "Solinst", "Source Molecular", + "SSSA", "SWAN ANALYTISCHE", "SYAGEN", "SYNGENTA", @@ -114,6 +117,7 @@ "UCD", "USDA", "USDA/ARS", + "USDA/SSIR", "USDOC/NOAA", "USDOE/ASD", "USDOE/EML", diff --git a/schemas/data/src/values/ResultAnalyticalMethodContext.primary.json b/schemas/data/src/values/ResultAnalyticalMethodContext.primary.json index 76643ee2..6d438e80 100644 --- a/schemas/data/src/values/ResultAnalyticalMethodContext.primary.json +++ b/schemas/data/src/values/ResultAnalyticalMethodContext.primary.json @@ -1,5 +1,5 @@ { - "$id": "https://datastream.org/schema/data/values/ResultAnalyticalMethodContext.strict.json", + "$id": "https://datastream.org/schema/data/values/ResultAnalyticalMethodContext.primary.json", "title": "Analytical Method Context", "description": "", "type": "string", @@ -13,6 +13,7 @@ "APHA_SM24ED", "ASTM", "BC_MOE", + "CSSS", "DIN", "DOI", "EN", @@ -30,14 +31,17 @@ "MICROLOGY LABS", "Oakton", "ON MECP", + "Oxyguard", "PALINTEST LTD", "PROPRIETARY", "RBR", "REED", "Seal", "Solinst", + "SSSA", "THERMO-SCIENTIFIC", "Turner Designs", + "USDA/SSIR", "USDOI/USGS", "USEPA", "VMV", diff --git a/schemas/data/src/values/ResultDetectionCondition.legacy.json b/schemas/data/src/values/ResultDetectionCondition.legacy.json index 6d78522e..6bd194a0 100644 --- a/schemas/data/src/values/ResultDetectionCondition.legacy.json +++ b/schemas/data/src/values/ResultDetectionCondition.legacy.json @@ -1,5 +1,5 @@ { - "$id": "https://datastream.org/schema/data/values/ResultDetectionCondition.loose.json", + "$id": "https://datastream.org/schema/data/values/ResultDetectionCondition.legacy.json", "title": "Result Detection Condition", "description": "", "type": "string", diff --git a/schemas/data/src/values/ResultDetectionCondition.primary.json b/schemas/data/src/values/ResultDetectionCondition.primary.json index cb943d80..e79242bb 100644 --- a/schemas/data/src/values/ResultDetectionCondition.primary.json +++ b/schemas/data/src/values/ResultDetectionCondition.primary.json @@ -1,5 +1,5 @@ { - "$id": "https://datastream.org/schema/data/values/ResultDetectionCondition.strict.json", + "$id": "https://datastream.org/schema/data/values/ResultDetectionCondition.primary.json", "title": "Result Detection Condition", "description": "", "type": "string", diff --git a/schemas/data/src/values/ResultDetectionQuantitationLimitType.legacy.json b/schemas/data/src/values/ResultDetectionQuantitationLimitType.legacy.json index 4b960ea4..d1901080 100644 --- a/schemas/data/src/values/ResultDetectionQuantitationLimitType.legacy.json +++ b/schemas/data/src/values/ResultDetectionQuantitationLimitType.legacy.json @@ -1,5 +1,5 @@ { - "$id": "https://datastream.org/schema/data/values/ResultDetectionQuantitationLimitType.loose.json", + "$id": "https://datastream.org/schema/data/values/ResultDetectionQuantitationLimitType.legacy.json", "title": "Detection Quantitation Limit Type", "description": "", "type": "string", diff --git a/schemas/data/src/values/ResultDetectionQuantitationLimitType.primary.json b/schemas/data/src/values/ResultDetectionQuantitationLimitType.primary.json index e8e53bd0..f0c6a015 100644 --- a/schemas/data/src/values/ResultDetectionQuantitationLimitType.primary.json +++ b/schemas/data/src/values/ResultDetectionQuantitationLimitType.primary.json @@ -1,5 +1,5 @@ { - "$id": "https://datastream.org/schema/data/values/ResultDetectionQuantitationLimitType.strict.json", + "$id": "https://datastream.org/schema/data/values/ResultDetectionQuantitationLimitType.primary.json", "title": "Detection Quantitation Limit Type", "description": "", "type": "string", diff --git a/schemas/data/src/values/ResultDetectionQuantitationLimitUnit.legacy.json b/schemas/data/src/values/ResultDetectionQuantitationLimitUnit.legacy.json index 20826ddf..06ede9e2 100644 --- a/schemas/data/src/values/ResultDetectionQuantitationLimitUnit.legacy.json +++ b/schemas/data/src/values/ResultDetectionQuantitationLimitUnit.legacy.json @@ -1,5 +1,5 @@ { - "$id": "https://datastream.org/schema/data/values/ResultDetectionQuantitationLimitUnit.loose.json", + "$id": "https://datastream.org/schema/data/values/ResultDetectionQuantitationLimitUnit.legacy.json", "title": "Measurement Unit", "description": "", "type": "string", @@ -77,6 +77,7 @@ "cells/dL", "cfm", "cfs", + "cfs-day", "CFU", "cfu/100g", "cfu/100mL", @@ -147,9 +148,11 @@ "ft/min", "ft/sec", "ft2", + "ft2/day", "ft3", "ft3/day", "ft3/sec", + "ftH2O", "FTU", "g", "g/cm2", @@ -173,6 +176,7 @@ "g/stalk", "gal", "gal/day", + "gal/day/ft", "gal/hr", "gal/min", "gal/sec", diff --git a/schemas/data/src/values/ResultDetectionQuantitationLimitUnit.primary.json b/schemas/data/src/values/ResultDetectionQuantitationLimitUnit.primary.json index 7a79185f..17748c16 100644 --- a/schemas/data/src/values/ResultDetectionQuantitationLimitUnit.primary.json +++ b/schemas/data/src/values/ResultDetectionQuantitationLimitUnit.primary.json @@ -1,5 +1,5 @@ { - "$id": "https://datastream.org/schema/data/values/ResultDetectionQuantitationLimitUnit.strict.json", + "$id": "https://datastream.org/schema/data/values/ResultDetectionQuantitationLimitUnit.primary.json", "title": "Measurement Unit", "description": "", "type": "string", diff --git a/schemas/data/src/values/ResultSampleFraction.legacy.json b/schemas/data/src/values/ResultSampleFraction.legacy.json index 3602125c..69624adc 100644 --- a/schemas/data/src/values/ResultSampleFraction.legacy.json +++ b/schemas/data/src/values/ResultSampleFraction.legacy.json @@ -1,5 +1,5 @@ { - "$id": "https://datastream.org/schema/data/values/ResultSampleFraction.loose.json", + "$id": "https://datastream.org/schema/data/values/ResultSampleFraction.legacy.json", "title": "Sample Fraction", "description": "", "type": "string", diff --git a/schemas/data/src/values/ResultSampleFraction.primary.json b/schemas/data/src/values/ResultSampleFraction.primary.json index 0a8e1cd7..40b14359 100644 --- a/schemas/data/src/values/ResultSampleFraction.primary.json +++ b/schemas/data/src/values/ResultSampleFraction.primary.json @@ -1,5 +1,5 @@ { - "$id": "https://datastream.org/schema/data/values/ResultSampleFraction.strict.json", + "$id": "https://datastream.org/schema/data/values/ResultSampleFraction.primary.json", "title": "Sample Fraction", "description": "", "type": "string", diff --git a/schemas/data/src/values/ResultStatusID.legacy.json b/schemas/data/src/values/ResultStatusID.legacy.json index bdf74fcc..0bf82549 100644 --- a/schemas/data/src/values/ResultStatusID.legacy.json +++ b/schemas/data/src/values/ResultStatusID.legacy.json @@ -1,5 +1,5 @@ { - "$id": "https://datastream.org/schema/data/values/ResultStatusID.loose.json", + "$id": "https://datastream.org/schema/data/values/ResultStatusID.legacy.json", "title": "Result Status", "description": "", "type": "string", diff --git a/schemas/data/src/values/ResultStatusID.primary.json b/schemas/data/src/values/ResultStatusID.primary.json index 8dc2314b..7ae0aea1 100644 --- a/schemas/data/src/values/ResultStatusID.primary.json +++ b/schemas/data/src/values/ResultStatusID.primary.json @@ -1,5 +1,5 @@ { - "$id": "https://datastream.org/schema/data/values/ResultStatusID.strict.json", + "$id": "https://datastream.org/schema/data/values/ResultStatusID.primary.json", "title": "Result Status", "description": "", "type": "string", @@ -9,7 +9,6 @@ "Historical", "Preliminary", "Provisional", - "Rejected", "Validated" ], "maxLength": 11 diff --git a/schemas/data/src/values/ResultUnit.legacy.json b/schemas/data/src/values/ResultUnit.legacy.json index 16d21699..78cc81ce 100644 --- a/schemas/data/src/values/ResultUnit.legacy.json +++ b/schemas/data/src/values/ResultUnit.legacy.json @@ -1,5 +1,5 @@ { - "$id": "https://datastream.org/schema/data/values/ResultUnit.loose.json", + "$id": "https://datastream.org/schema/data/values/ResultUnit.legacy.json", "title": "Measurement Unit", "description": "", "type": "string", @@ -77,6 +77,7 @@ "cells/dL", "cfm", "cfs", + "cfs-day", "CFU", "cfu/100g", "cfu/100mL", @@ -147,9 +148,11 @@ "ft/min", "ft/sec", "ft2", + "ft2/day", "ft3", "ft3/day", "ft3/sec", + "ftH2O", "FTU", "g", "g/cm2", @@ -173,6 +176,7 @@ "g/stalk", "gal", "gal/day", + "gal/day/ft", "gal/hr", "gal/min", "gal/sec", diff --git a/schemas/data/src/values/ResultUnit.primary.json b/schemas/data/src/values/ResultUnit.primary.json index 11ee1e46..35f3f731 100644 --- a/schemas/data/src/values/ResultUnit.primary.json +++ b/schemas/data/src/values/ResultUnit.primary.json @@ -1,5 +1,5 @@ { - "$id": "https://datastream.org/schema/data/values/ResultUnit.strict.json", + "$id": "https://datastream.org/schema/data/values/ResultUnit.primary.json", "title": "Measurement Unit", "description": "", "type": "string", diff --git a/schemas/data/src/values/ResultValueType.legacy.json b/schemas/data/src/values/ResultValueType.legacy.json index f8753999..eb246640 100644 --- a/schemas/data/src/values/ResultValueType.legacy.json +++ b/schemas/data/src/values/ResultValueType.legacy.json @@ -1,5 +1,5 @@ { - "$id": "https://datastream.org/schema/data/values/ResultValueType.loose.json", + "$id": "https://datastream.org/schema/data/values/ResultValueType.legacy.json", "title": "Result Value Type", "description": "", "type": "string", diff --git a/schemas/data/src/values/ResultValueType.primary.json b/schemas/data/src/values/ResultValueType.primary.json index 28d59fad..695bbb20 100644 --- a/schemas/data/src/values/ResultValueType.primary.json +++ b/schemas/data/src/values/ResultValueType.primary.json @@ -1,5 +1,5 @@ { - "$id": "https://datastream.org/schema/data/values/ResultValueType.strict.json", + "$id": "https://datastream.org/schema/data/values/ResultValueType.primary.json", "title": "Result Value Type", "description": "", "type": "string", diff --git a/schemas/data/src/values/SampleCollectionEquipmentName.legacy.json b/schemas/data/src/values/SampleCollectionEquipmentName.legacy.json index 2059d8cd..f0aa9f2e 100644 --- a/schemas/data/src/values/SampleCollectionEquipmentName.legacy.json +++ b/schemas/data/src/values/SampleCollectionEquipmentName.legacy.json @@ -1,5 +1,5 @@ { - "$id": "https://datastream.org/schema/data/values/SampleCollectionEquipmentName.loose.json", + "$id": "https://datastream.org/schema/data/values/SampleCollectionEquipmentName.legacy.json", "title": "Sample Collection Equipment", "description": "", "type": "string", @@ -7,12 +7,14 @@ "6 Inch Core", "A-Frame Net", "Activity Trap", + "Air line", "Anchor Box Dredge", "Artificial Substrate", "Autonomous Underwater Vehicle", "Autosampler (other)", "Backhoe", "Backpack Electroshock", + "Bailer", "Beach Seine Net", "Beam Trawl", "Benthic Corer (Other)", @@ -90,6 +92,7 @@ "Hivol Modified, XAD Resin", "Hook And Line", "Horizontal Secchi Disk", + "Hydrasleeve", "Hydraulic Grab", "Hydraulic Push Core/Geoprobe", "Hydroacoustics", @@ -105,6 +108,7 @@ "Kullenberg Gravity Corer", "Large Van Veen Grab", "Larval Light Fish Trap", + "Light Meter", "Long Line", "Marmap Neuston Net", "Meteorological Data", @@ -200,6 +204,7 @@ "Single-stage suspended sampler", "Single-Vessel Operated Tow Net", "Smith-McIntire Grab", + "Snap sampler", "Sodium Cyanide", "SPATT Bags", "Spear/Gun", @@ -249,8 +254,10 @@ "Visual Sighting", "Water Bottle", "Water Level Gage", + "Water level meter", "Water Sampler (Other)", "WBH-96", + "Wetted tape", "Whirl-pak bag", "Wide mouth glass jar", "Wisconsin-Style Net", diff --git a/schemas/data/src/values/SampleCollectionEquipmentName.primary.json b/schemas/data/src/values/SampleCollectionEquipmentName.primary.json index a7ccd268..edec7786 100644 --- a/schemas/data/src/values/SampleCollectionEquipmentName.primary.json +++ b/schemas/data/src/values/SampleCollectionEquipmentName.primary.json @@ -1,15 +1,19 @@ { - "$id": "https://datastream.org/schema/data/values/SampleCollectionEquipmentName.strict.json", + "$id": "https://datastream.org/schema/data/values/SampleCollectionEquipmentName.primary.json", "title": "Sample Collection Equipment", "description": "", "type": "string", "enum": [ + "Air line", + "Bailer", "Beta sampler", "Bucket", "DH-81", "DH-95", "Diffusion Gradient in Thin Film", + "Ekman Grab", "Gravity Corer (Generic)", + "Hydrasleeve", "Kemmerer Bottle", "Nansen Bottle", "Niskin Bottle", @@ -33,16 +37,20 @@ "Sediment sub-core", "Sediment Trap", "Semipermeable Membrane Device", + "Snap sampler", "Syringe", "Test strip", + "Tubing", "Turbidimeter", "Turbidity Tube", "Van Dorn Bottle", "Variable voltage pulsator unit", "Vinyl Tube", "Water Bottle", + "Water level meter", "Water Sampler (Other)", "WBH-96", + "Wetted tape", "Whirl-pak bag", "Wide mouth glass jar" ], diff --git a/schemas/data/src/values/SampleCollectionMethodContext.legacy.json b/schemas/data/src/values/SampleCollectionMethodContext.legacy.json new file mode 100644 index 00000000..42fe7cbb --- /dev/null +++ b/schemas/data/src/values/SampleCollectionMethodContext.legacy.json @@ -0,0 +1,53 @@ +{ + "$id": "https://datastream.org/schema/data/values/SampleCollectionMethodContext.legacy.json", + "title": "Sample Collection Method Context", + "description": "", + "type": "string", + "enum": [ + "11NPSWRD", + "AB_AEP", + "AB_AGS", + "ADEM", + "AFS", + "ANS-PCER", + "ANSP", + "Applegate WC", + "ASTM", + "BC_MOE", + "BIORECON", + "CA_Waterboards", + "CDPHE", + "CRWA Laboratory", + "CWW", + "EnvCanada-AWQMSD", + "GA DNR", + "GA EPD", + "GA-DNR", + "GeoEngineers", + "IDEXX", + "ISO", + "Kansas DHE", + "KNA__", + "MASSWATER", + "MDEQ-WQ", + "NJDEP", + "NL_ECCC", + "NS_DNR", + "NS_ECC", + "PFBMP", + "PIBO-EMP", + "PNAMP", + "PROPRIETARY", + "QC_MOE", + "TCEQ", + "TN DEC", + "TRC Omni", + "USACE", + "USDOI/USGS", + "USEPA", + "UTAHDWQ", + "WSDOE", + "WYDEQ" + ], + "maxLength": 16 +} \ No newline at end of file diff --git a/schemas/data/src/values/SampleCollectionMethodContext.primary.json b/schemas/data/src/values/SampleCollectionMethodContext.primary.json new file mode 100644 index 00000000..fe8b3750 --- /dev/null +++ b/schemas/data/src/values/SampleCollectionMethodContext.primary.json @@ -0,0 +1,21 @@ +{ + "$id": "https://datastream.org/schema/data/values/SampleCollectionMethodContext.primary.json", + "title": "Sample Collection Method Context", + "description": "", + "type": "string", + "enum": [ + "AB_AEP", + "AB_AGS", + "ASTM", + "BC_MOE", + "ISO", + "NL_ECCC", + "NS_DNR", + "NS_ECC", + "PROPRIETARY", + "QC_MOE", + "USDOI/USGS", + "USEPA" + ], + "maxLength": 16 +} \ No newline at end of file diff --git a/schemas/data/src/values/SampleCondition.legacy.json b/schemas/data/src/values/SampleCondition.legacy.json new file mode 100644 index 00000000..690c2f08 --- /dev/null +++ b/schemas/data/src/values/SampleCondition.legacy.json @@ -0,0 +1,15 @@ +{ + "$id": "https://datastream.org/schema/data/values/SampleCondition.legacy.json", + "title": "Sample Condition", + "description": "", + "type": "string", + "enum": [ + "Flowing", + "Nearby site is being pumped or pumped recently", + "Static, before pumping or purging", + "The site has been recently pumped or purged", + "The site is being pumped for water use", + "Unspecified" + ], + "maxLength": 46 +} \ No newline at end of file diff --git a/schemas/data/src/values/SampleCondition.primary.json b/schemas/data/src/values/SampleCondition.primary.json new file mode 100644 index 00000000..2b1ffe3c --- /dev/null +++ b/schemas/data/src/values/SampleCondition.primary.json @@ -0,0 +1,15 @@ +{ + "$id": "https://datastream.org/schema/data/values/SampleCondition.primary.json", + "title": "Sample Condition", + "description": "", + "type": "string", + "enum": [ + "Flowing", + "Nearby site is being pumped or pumped recently", + "Static, before pumping or purging", + "The site has been recently pumped or purged", + "The site is being pumped for water use", + "Unspecified" + ], + "maxLength": 46 +} \ No newline at end of file diff --git a/schemas/data/src/values/WellDepthUnit.legacy.json b/schemas/data/src/values/WellDepthUnit.legacy.json new file mode 100644 index 00000000..d9e645ae --- /dev/null +++ b/schemas/data/src/values/WellDepthUnit.legacy.json @@ -0,0 +1,11 @@ +{ + "$id": "https://datastream.org/schema/data/values/WellDepthUnit.legacy.json", + "title": "Measurement Unit", + "description": "", + "type": "string", + "enum": [ + "ft", + "m" + ], + "maxLength": 2 +} \ No newline at end of file diff --git a/schemas/data/src/values/WellDepthUnit.primary.json b/schemas/data/src/values/WellDepthUnit.primary.json new file mode 100644 index 00000000..90d5e110 --- /dev/null +++ b/schemas/data/src/values/WellDepthUnit.primary.json @@ -0,0 +1,11 @@ +{ + "$id": "https://datastream.org/schema/data/values/WellDepthUnit.primary.json", + "title": "Measurement Unit", + "description": "", + "type": "string", + "enum": [ + "ft", + "m" + ], + "maxLength": 2 +} \ No newline at end of file diff --git a/schemas/data/src/values/WellIDContext.legacy.json b/schemas/data/src/values/WellIDContext.legacy.json new file mode 100644 index 00000000..06b215b8 --- /dev/null +++ b/schemas/data/src/values/WellIDContext.legacy.json @@ -0,0 +1,22 @@ +{ + "$id": "https://datastream.org/schema/data/values/WellIDContext.legacy.json", + "title": "Well ID Context", + "description": "", + "type": "string", + "enum": [ + "AB", + "BC", + "MB", + "NB", + "NL", + "NS", + "NT", + "ON", + "OTHER", + "PE", + "QC", + "SK", + "YK" + ], + "maxLength": 5 +} \ No newline at end of file diff --git a/schemas/data/src/values/WellIDContext.primary.json b/schemas/data/src/values/WellIDContext.primary.json new file mode 100644 index 00000000..c7478a40 --- /dev/null +++ b/schemas/data/src/values/WellIDContext.primary.json @@ -0,0 +1,22 @@ +{ + "$id": "https://datastream.org/schema/data/values/WellIDContext.primary.json", + "title": "Well ID Context", + "description": "", + "type": "string", + "enum": [ + "AB", + "BC", + "MB", + "NB", + "NL", + "NS", + "NT", + "ON", + "OTHER", + "PE", + "QC", + "SK", + "YK" + ], + "maxLength": 5 +} \ No newline at end of file diff --git a/schemas/data/src/values/WellOpenIntervalBottomUnit.legacy.json b/schemas/data/src/values/WellOpenIntervalBottomUnit.legacy.json new file mode 100644 index 00000000..ffe73824 --- /dev/null +++ b/schemas/data/src/values/WellOpenIntervalBottomUnit.legacy.json @@ -0,0 +1,11 @@ +{ + "$id": "https://datastream.org/schema/data/values/WellOpenIntervalBottomUnit.legacy.json", + "title": "Measurement Unit", + "description": "", + "type": "string", + "enum": [ + "ft", + "m" + ], + "maxLength": 2 +} \ No newline at end of file diff --git a/schemas/data/src/values/WellOpenIntervalBottomUnit.primary.json b/schemas/data/src/values/WellOpenIntervalBottomUnit.primary.json new file mode 100644 index 00000000..bcad6296 --- /dev/null +++ b/schemas/data/src/values/WellOpenIntervalBottomUnit.primary.json @@ -0,0 +1,11 @@ +{ + "$id": "https://datastream.org/schema/data/values/WellOpenIntervalBottomUnit.primary.json", + "title": "Measurement Unit", + "description": "", + "type": "string", + "enum": [ + "ft", + "m" + ], + "maxLength": 2 +} \ No newline at end of file diff --git a/schemas/data/src/values/WellOpenIntervalTopUnit.legacy.json b/schemas/data/src/values/WellOpenIntervalTopUnit.legacy.json new file mode 100644 index 00000000..ab3d1d4f --- /dev/null +++ b/schemas/data/src/values/WellOpenIntervalTopUnit.legacy.json @@ -0,0 +1,11 @@ +{ + "$id": "https://datastream.org/schema/data/values/WellOpenIntervalTopUnit.legacy.json", + "title": "Measurement Unit", + "description": "", + "type": "string", + "enum": [ + "ft", + "m" + ], + "maxLength": 2 +} \ No newline at end of file diff --git a/schemas/data/src/values/WellOpenIntervalTopUnit.primary.json b/schemas/data/src/values/WellOpenIntervalTopUnit.primary.json new file mode 100644 index 00000000..42b2a45c --- /dev/null +++ b/schemas/data/src/values/WellOpenIntervalTopUnit.primary.json @@ -0,0 +1,11 @@ +{ + "$id": "https://datastream.org/schema/data/values/WellOpenIntervalTopUnit.primary.json", + "title": "Measurement Unit", + "description": "", + "type": "string", + "enum": [ + "ft", + "m" + ], + "maxLength": 2 +} \ No newline at end of file diff --git a/schemas/data/src/values/WellUseType.legacy.json b/schemas/data/src/values/WellUseType.legacy.json new file mode 100644 index 00000000..a72376ab --- /dev/null +++ b/schemas/data/src/values/WellUseType.legacy.json @@ -0,0 +1,45 @@ +{ + "$id": "https://datastream.org/schema/data/values/WellUseType.legacy.json", + "title": "Well Type", + "description": "", + "type": "string", + "enum": [ + "Anode", + "Aquaculture", + "Bottling", + "Capture", + "Commercial", + "Dewater", + "Dewatering", + "Domestic", + "Drainage", + "Geothermal", + "Heat Reservoir", + "Industrial", + "Injection", + "Irrigation", + "Livestock", + "Monitoring", + "Monitoring - Ambient", + "Monitoring - Other", + "Observation", + "Oil/Gas Production", + "Other", + "Piezometer", + "Public Supply - Municipal", + "Public Supply - Other", + "Recharge", + "Remediation", + "Repressurization", + "Seismic", + "Soil Vapor Extraction", + "Soil Vapor Monitoring", + "Test Hole", + "Waste Disposal", + "Water Quality Assessment", + "Water Supply/Production", + "Well-Temporary", + "Withdrawal of Water" + ], + "maxLength": 25 +} \ No newline at end of file diff --git a/schemas/data/src/values/WellUseType.primary.json b/schemas/data/src/values/WellUseType.primary.json new file mode 100644 index 00000000..cef97386 --- /dev/null +++ b/schemas/data/src/values/WellUseType.primary.json @@ -0,0 +1,25 @@ +{ + "$id": "https://datastream.org/schema/data/values/WellUseType.primary.json", + "title": "Well Type", + "description": "", + "type": "string", + "enum": [ + "Aquaculture", + "Bottling", + "Dewatering", + "Domestic", + "Geothermal", + "Industrial", + "Irrigation", + "Livestock", + "Monitoring - Ambient", + "Monitoring - Other", + "Oil/Gas Production", + "Other", + "Public Supply - Municipal", + "Public Supply - Other", + "Recharge", + "Test Hole" + ], + "maxLength": 25 +} \ No newline at end of file diff --git a/schemas/data/test/build.js b/schemas/data/test/build.js new file mode 100644 index 00000000..eb6823b6 --- /dev/null +++ b/schemas/data/test/build.js @@ -0,0 +1,37 @@ +import { test } from 'node:test' +import assert from 'node:assert/strict' +import { toFriendlyName } from '../bin/build-lib.js' + +test('toFriendlyName › Should convert PascalCase to friendly name', (t) => { + assert.equal(toFriendlyName('AquiferCode'), 'Aquifer Code') +}) + +test('toFriendlyName › Should convert camelCase to friendly name', (t) => { + assert.equal(toFriendlyName('aquiferCode'), 'aquifer Code') +}) + +test('toFriendlyName › Should handle acronyms followed by words', (t) => { + assert.equal(toFriendlyName('WellIDContext'), 'Well ID Context') +}) + +test('toFriendlyName › Should handle multiple word boundaries', (t) => { + assert.equal( + toFriendlyName('AquiferUnitPorosityType'), + 'Aquifer Unit Porosity Type' + ) +}) + +test('toFriendlyName › Should handle long field names', (t) => { + assert.equal( + toFriendlyName('ActivityDepthAltitudeReferencePoint'), + 'Activity Depth Altitude Reference Point' + ) +}) + +test('toFriendlyName › Should handle single word', (t) => { + assert.equal(toFriendlyName('Sample'), 'Sample') +}) + +test('toFriendlyName › Should handle consecutive acronyms', (t) => { + assert.equal(toFriendlyName('XMLHTTPRequest'), 'XMLHTTP Request') +}) diff --git a/schemas/data/test/format.js b/schemas/data/test/format.js index 16e40719..aadaafb3 100644 --- a/schemas/data/test/format.js +++ b/schemas/data/test/format.js @@ -1,73 +1,78 @@ -import test from "ava"; - -import validate from "../frontend/index.js"; -import validateStrict from "../extract/index.js"; -import validateBackend from "../backend/index.js"; +import { test } from 'node:test' +import assert from 'node:assert/strict' +import validate from '../frontend/index.js' +import validateStrict from '../extract/index.js' +import validateBackend from '../backend/index.js' const checkProperty = (errors, keyword, property) => { for (const error of errors) { - if (error.keyword === "errorMessage") { - const nested = checkProperty(error.params.errors, keyword, property); - if (nested) return nested; + if (error.keyword === 'errorMessage') { + const nested = checkProperty(error.params.errors, keyword, property) + if (nested) return nested } - if (error.keyword !== keyword) continue; + if (error.keyword !== keyword) continue if ( - ["required", "dependencies"].includes(keyword) && + ['required', 'dependencies'].includes(keyword) && error.params.missingProperty === property ) { - return true; + return true } else if ( - keyword === "additionalProperties" && + keyword === 'additionalProperties' && error.params.additionalProperty === property ) { - return true; + return true } else if ( - keyword === "oneOf" && + keyword === 'oneOf' && error.params.passingSchemas.includes(property) ) { - return true; - } else if (keyword === "anyOf") return true; - else if (keyword === "not" && error.instancePath.includes(property)) { - return true; - } else if (keyword === "enum" && error.instancePath.includes(property)) { - return true; - } else if (keyword === "minimum" && error.instancePath.includes(property)) { - return true; + return true + } else if (keyword === 'anyOf') return true + else if (keyword === 'not' && error.instancePath.includes(property)) { + return true + } else if (keyword === 'enum' && error.instancePath.includes(property)) { + return true + } else if (keyword === 'minimum' && error.instancePath.includes(property)) { + return true + } else if ( + keyword === 'exclusiveMinimum' && + error.instancePath.includes(property) + ) { + return true + } else if (keyword === 'maximum' && error.instancePath.includes(property)) { + return true } else if ( - keyword === "exclusiveMinimum" && + keyword === 'exclusiveMaximum' && error.instancePath.includes(property) ) { - return true; - } else if (keyword === "maximum" && error.instancePath.includes(property)) { - return true; + return true } else if ( - keyword === "exclusiveMaximum" && + keyword === 'maxLength' && error.instancePath.includes(property) ) { - return true; - } else if (keyword === "pattern") return true; + return true + } else if (keyword === 'pattern') return true } - return false; -}; + return false +} -test("Should accept strings", async (t) => { +test('Should accept strings', async (t) => { validate({ - DatasetName: "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM:/.,-'\"", - MonitoringLocationID: "1234567890 W̱E¸NÁ¸NEĆ", - MonitoringLocationName: "ÀàäÄÂâÆæÇçÈèÉéÊêËëÎîÏïÔôŒœÙùÛûÜü", - }); - t.is(checkProperty(validate.errors, "pattern", "DatasetName"), false); - t.is( - checkProperty(validate.errors, "pattern", "MonitoringLocationID"), - false, - ); - t.is( - checkProperty(validate.errors, "pattern", "MonitoringLocationName"), - false, - ); -}); - -test("Should reject strings with multiline", async (t) => { + DatasetName: 'qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM:/.,-\'"', + MonitoringLocationID: '1234567890 W̱E¸NÁ¸NEĆ', + MonitoringLocationName: 'ÀàäÄÂâÆæÇçÈèÉéÊêËëÎîÏïÔôŒœÙùÛûÜü', + }) + assert.equal(checkProperty(validate.errors, 'pattern', 'DatasetName'), false) + assert.equal( + checkProperty(validate.errors, 'pattern', 'MonitoringLocationID'), + false + ) + assert.equal( + checkProperty(validate.errors, 'pattern', 'MonitoringLocationName'), + false + ) +}) + +test('Should reject strings with multiline', async (t) => { validate({ DatasetName: `qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM:/.,-'\" 1234`, @@ -83,36 +88,39 @@ test("Should reject strings with multiline", async (t) => { 1234`, LaboratorySampleID: `qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM:/.,-'\" 1234`, - }); - - t.is(checkProperty(validate.errors, "pattern", "DatasetName"), true); - t.is( - checkProperty(validate.errors, "pattern", "MonitoringLocationID"), - true, - ); - t.is( - checkProperty(validate.errors, "pattern", "MonitoringLocationName"), - true, - ); - t.is( - checkProperty(validate.errors, "pattern", "ResultAnalyticalMethodID"), - true, - ); - t.is( - checkProperty(validate.errors, "pattern", "ResultAnalyticalMethodName"), - true, - ); - t.is( - checkProperty(validate.errors, "pattern", "LaboratoryName"), - true, - ); - t.is( - checkProperty(validate.errors, "pattern", "LaboratorySampleID"), - true, - ); -}); - -test("Should accept strings-multiline", async (t) => { + EventID: `qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM:/.,-'\" + 1234`, + }) + + assert.equal(checkProperty(validate.errors, 'pattern', 'DatasetName'), true) + assert.equal( + checkProperty(validate.errors, 'pattern', 'MonitoringLocationID'), + true + ) + assert.equal( + checkProperty(validate.errors, 'pattern', 'MonitoringLocationName'), + true + ) + assert.equal( + checkProperty(validate.errors, 'pattern', 'ResultAnalyticalMethodID'), + true + ) + assert.equal( + checkProperty(validate.errors, 'pattern', 'ResultAnalyticalMethodName'), + true + ) + assert.equal( + checkProperty(validate.errors, 'pattern', 'LaboratoryName'), + true + ) + assert.equal( + checkProperty(validate.errors, 'pattern', 'LaboratorySampleID'), + true + ) + assert.equal(checkProperty(validate.errors, 'pattern', 'EventID'), true) +}) + +test('Should accept strings-multiline', async (t) => { validate({ ResultComment: `English: qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM French: ÀàäÄÂâÆæÇçÈèÉéÊêËëÎîÏïÔôŒœÙùÛûÜü @@ -120,464 +128,680 @@ test("Should accept strings-multiline", async (t) => { Symbols: ~!@#$%^&*()_+-={}|[]\\:";'<>?,./ Other: W̱E¸NÁ¸NEĆ `, - }); - t.is(checkProperty(validate.errors, "pattern", "ResultComment"), false); -}); + }) + assert.equal( + checkProperty(validate.errors, 'pattern', 'ResultComment'), + false + ) +}) // TODO update to included strict and loose time format -test("Should accept time formats", async (t) => { +test('Should accept time formats', async (t) => { validate({ - ActivityStartTime: "9:15:00", - ActivityEndTime: "13:15:00.000", - AnalysisStartTime: "0:15", - }); - t.is(checkProperty(validate.errors, "pattern", "ActivityStartTime"), false); - t.is(checkProperty(validate.errors, "pattern", "ActivityEndTime"), false); - t.is(checkProperty(validate.errors, "pattern", "AnalysisStartTime"), false); -}); - -test("Should reject time formats", async (t) => { + ActivityStartTime: '9:15:00', + ActivityEndTime: '13:15:00.000', + AnalysisStartTime: '0:15', + }) + assert.equal( + checkProperty(validate.errors, 'pattern', 'ActivityStartTime'), + false + ) + assert.equal( + checkProperty(validate.errors, 'pattern', 'ActivityEndTime'), + false + ) + assert.equal( + checkProperty(validate.errors, 'pattern', 'AnalysisStartTime'), + false + ) +}) + +test('Should reject time formats', async (t) => { validate({ - ActivityStartTime: "9:15.00", - ActivityEndTime: "13:15.00.000", - AnalysisStartTime: "2.15", - }); - t.is(checkProperty(validate.errors, "pattern", "ActivityStartTime"), true); - t.is(checkProperty(validate.errors, "pattern", "ActivityEndTime"), true); - t.is(checkProperty(validate.errors, "pattern", "AnalysisStartTime"), true); + ActivityStartTime: '9:15.00', + ActivityEndTime: '13:15.00.000', + AnalysisStartTime: '2.15', + }) + assert.equal( + checkProperty(validate.errors, 'pattern', 'ActivityStartTime'), + true + ) + assert.equal( + checkProperty(validate.errors, 'pattern', 'ActivityEndTime'), + true + ) + assert.equal( + checkProperty(validate.errors, 'pattern', 'AnalysisStartTime'), + true + ) validate({ - ActivityStartTime: "0:15", - ActivityEndTime: "!0:15", + ActivityStartTime: '0:15', + ActivityEndTime: '!0:15', // 'AnalysisStartTime': '2.15' - }); - t.is(checkProperty(validate.errors, "pattern", "ActivityStartTime"), true); - t.is(checkProperty(validate.errors, "pattern", "ActivityEndTime"), true); - // t.is(checkProperty(validate.errors, 'pattern', 'AnalysisStartTime'), true) -}); - -test("Should accept timezone formats (strict)", async (t) => { + }) + assert.equal( + checkProperty(validate.errors, 'pattern', 'ActivityStartTime'), + true + ) + assert.equal( + checkProperty(validate.errors, 'pattern', 'ActivityEndTime'), + true + ) + // assert.equal(checkProperty(validate.errors, 'pattern', 'AnalysisStartTime'), true) +}) + +test('Should accept timezone formats (strict)', async (t) => { let valid = validateStrict({ - ActivityStartTimeZone: "Z", - ActivityEndTimeZone: "Z", - AnalysisStartTimeZone: "Z", - }); - t.false(valid); - t.is( + ActivityStartTimeZone: 'Z', + ActivityEndTimeZone: 'Z', + AnalysisStartTimeZone: 'Z', + }) + assert.equal(valid, false) + assert.equal( validateStrict.errors.filter( - (i) => i.instancePath === "/ActivityStartTimeZone", + (i) => i.instancePath === '/ActivityStartTimeZone' ).length, - 0, - ); - t.is( + 0 + ) + assert.equal( validateStrict.errors.filter( - (i) => i.instancePath === "/ActivityEndTimeZone", + (i) => i.instancePath === '/ActivityEndTimeZone' ).length, - 0, - ); - t.is( + 0 + ) + assert.equal( validateStrict.errors.filter( - (i) => i.instancePath === "/AnalysisStartTimeZone", + (i) => i.instancePath === '/AnalysisStartTimeZone' ).length, - 0, - ); + 0 + ) valid = validateStrict({ - ActivityStartTimeZone: "+02:15", - ActivityEndTimeZone: "+02:15", - AnalysisStartTimeZone: "+02:15", - }); - t.false(valid); - t.is( + ActivityStartTimeZone: '+02:15', + ActivityEndTimeZone: '+02:15', + AnalysisStartTimeZone: '+02:15', + }) + assert.equal(valid, false) + assert.equal( validateStrict.errors.filter( - (i) => i.instancePath === "/ActivityStartTimeZone", + (i) => i.instancePath === '/ActivityStartTimeZone' ).length, - 0, - ); - t.is( + 0 + ) + assert.equal( validateStrict.errors.filter( - (i) => i.instancePath === "/ActivityEndTimeZone", + (i) => i.instancePath === '/ActivityEndTimeZone' ).length, - 0, - ); - t.is( + 0 + ) + assert.equal( validateStrict.errors.filter( - (i) => i.instancePath === "/AnalysisStartTimeZone", + (i) => i.instancePath === '/AnalysisStartTimeZone' ).length, - 0, - ); + 0 + ) valid = validateStrict({ - ActivityStartTimeZone: "-02:15", - ActivityEndTimeZone: "-02:15", - AnalysisStartTimeZone: "-02:15", - }); - t.false(valid); - t.is( + ActivityStartTimeZone: '-02:15', + ActivityEndTimeZone: '-02:15', + AnalysisStartTimeZone: '-02:15', + }) + assert.equal(valid, false) + assert.equal( validateStrict.errors.filter( - (i) => i.instancePath === "/ActivityStartTimeZone", + (i) => i.instancePath === '/ActivityStartTimeZone' ).length, - 0, - ); - t.is( + 0 + ) + assert.equal( validateStrict.errors.filter( - (i) => i.instancePath === "/ActivityEndTimeZone", + (i) => i.instancePath === '/ActivityEndTimeZone' ).length, - 0, - ); - t.is( + 0 + ) + assert.equal( validateStrict.errors.filter( - (i) => i.instancePath === "/AnalysisStartTimeZone", + (i) => i.instancePath === '/AnalysisStartTimeZone' ).length, - 0, - ); -}); + 0 + ) +}) -test("Should reject timezone formats (strict)", async (t) => { +test('Should reject timezone formats (strict)', async (t) => { let valid = validateStrict({ - ActivityStartTimeZone: "z", - ActivityEndTimeZone: "z", - AnalysisStartTimeZone: "z", - }); - t.false(valid); - t.is( + ActivityStartTimeZone: 'z', + ActivityEndTimeZone: 'z', + AnalysisStartTimeZone: 'z', + }) + assert.equal(valid, false) + assert.equal( validateStrict.errors.filter( - (i) => i.instancePath === "/ActivityStartTimeZone", + (i) => i.instancePath === '/ActivityStartTimeZone' ).length, - 1, - ); - t.is( + 1 + ) + assert.equal( validateStrict.errors.filter( - (i) => i.instancePath === "/ActivityEndTimeZone", + (i) => i.instancePath === '/ActivityEndTimeZone' ).length, - 1, - ); - t.is( + 1 + ) + assert.equal( validateStrict.errors.filter( - (i) => i.instancePath === "/AnalysisStartTimeZone", + (i) => i.instancePath === '/AnalysisStartTimeZone' ).length, - 1, - ); + 1 + ) valid = validateStrict({ - ActivityStartTimeZone: "9:45", - ActivityEndTimeZone: "9:45", - AnalysisStartTimeZone: "9:45", - }); - t.false(valid); - t.is( + ActivityStartTimeZone: '9:45', + ActivityEndTimeZone: '9:45', + AnalysisStartTimeZone: '9:45', + }) + assert.equal(valid, false) + assert.equal( validateStrict.errors.filter( - (i) => i.instancePath === "/ActivityStartTimeZone", + (i) => i.instancePath === '/ActivityStartTimeZone' ).length, - 1, - ); - t.is( + 1 + ) + assert.equal( validateStrict.errors.filter( - (i) => i.instancePath === "/ActivityEndTimeZone", + (i) => i.instancePath === '/ActivityEndTimeZone' ).length, - 1, - ); - t.is( + 1 + ) + assert.equal( validateStrict.errors.filter( - (i) => i.instancePath === "/AnalysisStartTimeZone", + (i) => i.instancePath === '/AnalysisStartTimeZone' ).length, - 1, - ); + 1 + ) valid = validateStrict({ - ActivityStartTimeZone: "-00:00:00", - ActivityEndTimeZone: "-00:00:00", - AnalysisStartTimeZone: "-00:00:00", - }); - t.false(valid); - t.is( + ActivityStartTimeZone: '-00:00:00', + ActivityEndTimeZone: '-00:00:00', + AnalysisStartTimeZone: '-00:00:00', + }) + assert.equal(valid, false) + assert.equal( validateStrict.errors.filter( - (i) => i.instancePath === "/ActivityStartTimeZone", + (i) => i.instancePath === '/ActivityStartTimeZone' ).length, - 2, - ); - t.is( + 2 + ) + assert.equal( validateStrict.errors.filter( - (i) => i.instancePath === "/ActivityEndTimeZone", + (i) => i.instancePath === '/ActivityEndTimeZone' ).length, - 2, - ); - t.is( + 2 + ) + assert.equal( validateStrict.errors.filter( - (i) => i.instancePath === "/AnalysisStartTimeZone", + (i) => i.instancePath === '/AnalysisStartTimeZone' ).length, - 2, - ); + 2 + ) valid = validateStrict({ - ActivityStartTimeZone: "-0215", - ActivityEndTimeZone: "-0215", - AnalysisStartTimeZone: "-0215", - }); - t.false(valid); - t.is( + ActivityStartTimeZone: '-0215', + ActivityEndTimeZone: '-0215', + AnalysisStartTimeZone: '-0215', + }) + assert.equal(valid, false) + assert.equal( validateStrict.errors.filter( - (i) => i.instancePath === "/ActivityStartTimeZone", + (i) => i.instancePath === '/ActivityStartTimeZone' ).length, - 1, - ); - t.is( + 1 + ) + assert.equal( validateStrict.errors.filter( - (i) => i.instancePath === "/ActivityEndTimeZone", + (i) => i.instancePath === '/ActivityEndTimeZone' ).length, - 1, - ); - t.is( + 1 + ) + assert.equal( validateStrict.errors.filter( - (i) => i.instancePath === "/AnalysisStartTimeZone", + (i) => i.instancePath === '/AnalysisStartTimeZone' ).length, - 1, - ); + 1 + ) valid = validateStrict({ - ActivityStartTimeZone: "-215", - ActivityEndTimeZone: "-215", - AnalysisStartTimeZone: "-215", - }); - t.false(valid); - t.is( + ActivityStartTimeZone: '-215', + ActivityEndTimeZone: '-215', + AnalysisStartTimeZone: '-215', + }) + assert.equal(valid, false) + assert.equal( validateStrict.errors.filter( - (i) => i.instancePath === "/ActivityStartTimeZone", + (i) => i.instancePath === '/ActivityStartTimeZone' ).length, - 1, - ); - t.is( + 1 + ) + assert.equal( validateStrict.errors.filter( - (i) => i.instancePath === "/ActivityEndTimeZone", + (i) => i.instancePath === '/ActivityEndTimeZone' ).length, - 1, - ); - t.is( + 1 + ) + assert.equal( validateStrict.errors.filter( - (i) => i.instancePath === "/AnalysisStartTimeZone", + (i) => i.instancePath === '/AnalysisStartTimeZone' ).length, - 1, - ); + 1 + ) valid = validateStrict({ - ActivityStartTimeZone: "-2:15", - ActivityEndTimeZone: "-2:15", - AnalysisStartTimeZone: "-2:15", - }); - t.false(valid); - t.is( + ActivityStartTimeZone: '-2:15', + ActivityEndTimeZone: '-2:15', + AnalysisStartTimeZone: '-2:15', + }) + assert.equal(valid, false) + assert.equal( validateStrict.errors.filter( - (i) => i.instancePath === "/ActivityStartTimeZone", + (i) => i.instancePath === '/ActivityStartTimeZone' ).length, - 1, - ); - t.is( + 1 + ) + assert.equal( validateStrict.errors.filter( - (i) => i.instancePath === "/ActivityEndTimeZone", + (i) => i.instancePath === '/ActivityEndTimeZone' ).length, - 1, - ); - t.is( + 1 + ) + assert.equal( validateStrict.errors.filter( - (i) => i.instancePath === "/AnalysisStartTimeZone", + (i) => i.instancePath === '/AnalysisStartTimeZone' ).length, - 1, - ); -}); + 1 + ) +}) -test("Should accept timezone formats (loose)", async (t) => { +test('Should accept timezone formats (loose)', async (t) => { let valid = validateBackend({ - ActivityStartTimeZone: "Z", - ActivityEndTimeZone: "Z", - AnalysisStartTimeZone: "Z", - }); - t.true(valid); - t.is(validateBackend.errors, null); + ActivityStartTimeZone: 'Z', + ActivityEndTimeZone: 'Z', + AnalysisStartTimeZone: 'Z', + }) + assert.equal(valid, true) + assert.equal(validateBackend.errors, null) valid = validateBackend({ - ActivityStartTimeZone: "+02:15", - ActivityEndTimeZone: "+02:15", - AnalysisStartTimeZone: "+02:15", - }); - t.true(valid); - t.is(validateBackend.errors, null); + ActivityStartTimeZone: '+02:15', + ActivityEndTimeZone: '+02:15', + AnalysisStartTimeZone: '+02:15', + }) + assert.equal(valid, true) + assert.equal(validateBackend.errors, null) valid = validateBackend({ - ActivityStartTimeZone: "-02:15", - ActivityEndTimeZone: "-02:15", - AnalysisStartTimeZone: "-02:15", - }); - t.true(valid); - t.is(validateBackend.errors, null); + ActivityStartTimeZone: '-02:15', + ActivityEndTimeZone: '-02:15', + AnalysisStartTimeZone: '-02:15', + }) + assert.equal(valid, true) + assert.equal(validateBackend.errors, null) valid = validateBackend({ - ActivityStartTimeZone: "-0215", - ActivityEndTimeZone: "-0215", - AnalysisStartTimeZone: "-0215", - }); - t.true(valid); - t.is(validateBackend.errors, null); + ActivityStartTimeZone: '-0215', + ActivityEndTimeZone: '-0215', + AnalysisStartTimeZone: '-0215', + }) + assert.equal(valid, true) + assert.equal(validateBackend.errors, null) valid = validateBackend({ - ActivityStartTimeZone: "-215", - ActivityEndTimeZone: "-215", - AnalysisStartTimeZone: "-215", - }); - t.true(valid); - t.is(validateBackend.errors, null); + ActivityStartTimeZone: '-215', + ActivityEndTimeZone: '-215', + AnalysisStartTimeZone: '-215', + }) + assert.equal(valid, true) + assert.equal(validateBackend.errors, null) valid = validateBackend({ - ActivityStartTimeZone: "-2:15", - ActivityEndTimeZone: "-2:15", - AnalysisStartTimeZone: "-2:15", - }); - t.true(valid); - t.is(validateBackend.errors, null); -}); - -test("Should reject timezone formats (loose)", async (t) => { + ActivityStartTimeZone: '-2:15', + ActivityEndTimeZone: '-2:15', + AnalysisStartTimeZone: '-2:15', + }) + assert.equal(valid, true) + assert.equal(validateBackend.errors, null) +}) + +test('Should reject timezone formats (loose)', async (t) => { let valid = validateBackend({ - ActivityStartTimeZone: "z", - ActivityEndTimeZone: "z", - AnalysisStartTimeZone: "z", - }); - t.false(valid); - t.is( + ActivityStartTimeZone: 'z', + ActivityEndTimeZone: 'z', + AnalysisStartTimeZone: 'z', + }) + assert.equal(valid, false) + assert.equal( validateBackend.errors.filter( - (i) => i.instancePath === "/ActivityStartTimeZone", + (i) => i.instancePath === '/ActivityStartTimeZone' ).length, - 1, - ); - t.is( + 1 + ) + assert.equal( validateBackend.errors.filter( - (i) => i.instancePath === "/ActivityEndTimeZone", + (i) => i.instancePath === '/ActivityEndTimeZone' ).length, - 1, - ); - t.is( + 1 + ) + assert.equal( validateBackend.errors.filter( - (i) => i.instancePath === "/AnalysisStartTimeZone", + (i) => i.instancePath === '/AnalysisStartTimeZone' ).length, - 1, - ); + 1 + ) valid = validateBackend({ - ActivityStartTimeZone: "9:45", - ActivityEndTimeZone: "9:45", - AnalysisStartTimeZone: "9:45", - }); - t.false(valid); - t.is( + ActivityStartTimeZone: '9:45', + ActivityEndTimeZone: '9:45', + AnalysisStartTimeZone: '9:45', + }) + assert.equal(valid, false) + assert.equal( validateBackend.errors.filter( - (i) => i.instancePath === "/ActivityStartTimeZone", + (i) => i.instancePath === '/ActivityStartTimeZone' ).length, - 1, - ); - t.is( + 1 + ) + assert.equal( validateBackend.errors.filter( - (i) => i.instancePath === "/ActivityEndTimeZone", + (i) => i.instancePath === '/ActivityEndTimeZone' ).length, - 1, - ); - t.is( + 1 + ) + assert.equal( validateBackend.errors.filter( - (i) => i.instancePath === "/AnalysisStartTimeZone", + (i) => i.instancePath === '/AnalysisStartTimeZone' ).length, - 1, - ); + 1 + ) valid = validateBackend({ - ActivityStartTimeZone: "-00:00:00", - ActivityEndTimeZone: "-00:00:00", - AnalysisStartTimeZone: "-00:00:00", - }); - t.false(valid); - t.is( + ActivityStartTimeZone: '-00:00:00', + ActivityEndTimeZone: '-00:00:00', + AnalysisStartTimeZone: '-00:00:00', + }) + assert.equal(valid, false) + assert.equal( validateBackend.errors.filter( - (i) => i.instancePath === "/ActivityStartTimeZone", + (i) => i.instancePath === '/ActivityStartTimeZone' ).length, - 2, - ); - t.is( + 2 + ) + assert.equal( validateBackend.errors.filter( - (i) => i.instancePath === "/ActivityEndTimeZone", + (i) => i.instancePath === '/ActivityEndTimeZone' ).length, - 2, - ); - t.is( + 2 + ) + assert.equal( validateBackend.errors.filter( - (i) => i.instancePath === "/AnalysisStartTimeZone", + (i) => i.instancePath === '/AnalysisStartTimeZone' ).length, - 2, - ); -}); + 2 + ) +}) -test("Should pass CSV Injection check", async (t) => { +test('Should pass CSV Injection check', async (t) => { validate({ - ResultComment: "Bar River", - }); - t.is(checkProperty(validate.errors, "pattern", "ResultComment"), false); -}); - -test("Should reject CSV Injection check when leading space", async (t) => { + ResultComment: 'Bar River', + }) + assert.equal( + checkProperty(validate.errors, 'pattern', 'ResultComment'), + false + ) +}) + +test('Should reject CSV Injection check when leading space', async (t) => { validate({ - ResultComment: " test", - }); - t.is(checkProperty(validate.errors, "pattern", "ResultComment"), true); -}); + ResultComment: ' test', + }) + assert.equal(checkProperty(validate.errors, 'pattern', 'ResultComment'), true) +}) -test("Should reject CSV Injection check when leading caragereturn", async (t) => { +test('Should reject CSV Injection check when leading caragereturn', async (t) => { validate({ - ResultComment: "\rtest", - }); - t.is(checkProperty(validate.errors, "pattern", "ResultComment"), true); -}); + ResultComment: '\rtest', + }) + assert.equal(checkProperty(validate.errors, 'pattern', 'ResultComment'), true) +}) -test("Should reject CSV Injection check when leading newline", async (t) => { +test('Should reject CSV Injection check when leading newline', async (t) => { validate({ - ResultComment: "\ntest", - }); - t.is(checkProperty(validate.errors, "pattern", "ResultComment"), true); -}); + ResultComment: '\ntest', + }) + assert.equal(checkProperty(validate.errors, 'pattern', 'ResultComment'), true) +}) -test("Should reject CSV Injection check when leading tab", async (t) => { +test('Should reject CSV Injection check when leading tab', async (t) => { validate({ - ResultComment: "\ttest", - }); - t.is(checkProperty(validate.errors, "pattern", "ResultComment"), true); -}); + ResultComment: '\ttest', + }) + assert.equal(checkProperty(validate.errors, 'pattern', 'ResultComment'), true) +}) -test("Should reject CSV Injection check when leading =", async (t) => { +test('Should reject CSV Injection check when leading =', async (t) => { validate({ - ResultComment: "=test", - }); - t.is(checkProperty(validate.errors, "pattern", "ResultComment"), true); -}); + ResultComment: '=test', + }) + assert.equal(checkProperty(validate.errors, 'pattern', 'ResultComment'), true) +}) -test("Should reject CSV Injection check when leading +", async (t) => { +test('Should reject CSV Injection check when leading +', async (t) => { validate({ - ResultComment: "+test", - }); - t.is(checkProperty(validate.errors, "pattern", "ResultComment"), true); -}); + ResultComment: '+test', + }) + assert.equal(checkProperty(validate.errors, 'pattern', 'ResultComment'), true) +}) -test("Should reject CSV Injection check when leading -", async (t) => { +test('Should reject CSV Injection check when leading -', async (t) => { validate({ - ResultComment: "-test", - }); - t.is(checkProperty(validate.errors, "pattern", "ResultComment"), true); -}); + ResultComment: '-test', + }) + assert.equal(checkProperty(validate.errors, 'pattern', 'ResultComment'), true) +}) -test("Should reject CSV Injection check when leading @", async (t) => { +test('Should reject CSV Injection check when leading @', async (t) => { validate({ - ResultComment: "@test", - }); - t.is(checkProperty(validate.errors, "pattern", "ResultComment"), true); -}); + ResultComment: '@test', + }) + assert.equal(checkProperty(validate.errors, 'pattern', 'ResultComment'), true) +}) -test("Should reject CSV Injection check when leading null char", async (t) => { +test('Should reject CSV Injection check when leading null char', async (t) => { + validate({ + ResultComment: '\x00test', + }) + assert.equal(checkProperty(validate.errors, 'pattern', 'ResultComment'), true) +}) + +// *** Range constraints — GW measure fields *** // +test('Should reject BoreholeDepthMeasure > 0', async (t) => { + validate({ BoreholeDepthMeasure: 1, BoreholeDepthUnit: 'm' }) + assert.equal( + checkProperty(validate.errors, 'maximum', 'BoreholeDepthMeasure'), + true + ) +}) +test('Should accept BoreholeDepthMeasure <= 0', async (t) => { + validate({ BoreholeDepthMeasure: -10, BoreholeDepthUnit: 'm' }) + assert.equal( + checkProperty(validate.errors, 'maximum', 'BoreholeDepthMeasure'), + false + ) +}) + +test('Should reject WellDepthMeasure > 0', async (t) => { + validate({ WellDepthMeasure: 1, WellDepthUnit: 'm' }) + assert.equal( + checkProperty(validate.errors, 'maximum', 'WellDepthMeasure'), + true + ) +}) +test('Should accept WellDepthMeasure <= 0', async (t) => { + validate({ WellDepthMeasure: -10, WellDepthUnit: 'm' }) + assert.equal( + checkProperty(validate.errors, 'maximum', 'WellDepthMeasure'), + false + ) +}) + +test('Should reject WellOpenIntervalTopMeasure > 0', async (t) => { + validate({ WellOpenIntervalTopMeasure: 1, WellOpenIntervalTopUnit: 'm' }) + assert.equal( + checkProperty(validate.errors, 'maximum', 'WellOpenIntervalTopMeasure'), + true + ) +}) +test('Should accept WellOpenIntervalTopMeasure <= 0', async (t) => { + validate({ WellOpenIntervalTopMeasure: -5, WellOpenIntervalTopUnit: 'm' }) + assert.equal( + checkProperty(validate.errors, 'maximum', 'WellOpenIntervalTopMeasure'), + false + ) +}) + +test('Should reject WellOpenIntervalBottomMeasure > 0', async (t) => { + validate({ + WellOpenIntervalBottomMeasure: 1, + WellOpenIntervalBottomUnit: 'm', + }) + assert.equal( + checkProperty(validate.errors, 'maximum', 'WellOpenIntervalBottomMeasure'), + true + ) +}) +test('Should accept WellOpenIntervalBottomMeasure <= 0', async (t) => { + validate({ + WellOpenIntervalBottomMeasure: -10, + WellOpenIntervalBottomUnit: 'm', + }) + assert.equal( + checkProperty(validate.errors, 'maximum', 'WellOpenIntervalBottomMeasure'), + false + ) +}) + +test('Should reject MonitoringLocationVerticalAccuracyMeasure < 0', async (t) => { + validate({ + MonitoringLocationVerticalAccuracyMeasure: -1, + MonitoringLocationVerticalAccuracyUnit: 'm', + }) + assert.equal( + checkProperty( + validate.errors, + 'minimum', + 'MonitoringLocationVerticalAccuracyMeasure' + ), + true + ) +}) +test('Should accept MonitoringLocationVerticalAccuracyMeasure >= 0', async (t) => { + validate({ + MonitoringLocationVerticalAccuracyMeasure: 5, + MonitoringLocationVerticalAccuracyUnit: 'm', + }) + assert.equal( + checkProperty( + validate.errors, + 'minimum', + 'MonitoringLocationVerticalAccuracyMeasure' + ), + false + ) +}) + +test('Should reject ActivityDepthAltitudeReferencePointMeasure < 0', async (t) => { + validate({ + ActivityDepthAltitudeReferencePointMeasure: -1, + ActivityDepthAltitudeReferencePointUnit: 'm', + }) + assert.equal( + checkProperty( + validate.errors, + 'minimum', + 'ActivityDepthAltitudeReferencePointMeasure' + ), + true + ) +}) +test('Should accept ActivityDepthAltitudeReferencePointMeasure >= 0', async (t) => { validate({ - ResultComment: "\x00test", - }); - t.is(checkProperty(validate.errors, "pattern", "ResultComment"), true); -}); + ActivityDepthAltitudeReferencePointMeasure: 5, + ActivityDepthAltitudeReferencePointUnit: 'm', + }) + assert.equal( + checkProperty( + validate.errors, + 'minimum', + 'ActivityDepthAltitudeReferencePointMeasure' + ), + false + ) +}) + +// *** Length constraints — GW text fields *** // +test('Should reject AquiferCode > 10 chars', async (t) => { + validate({ AquiferCode: '12345678901' }) + assert.equal(checkProperty(validate.errors, 'maxLength', 'AquiferCode'), true) +}) +test('Should accept AquiferCode <= 10 chars', async (t) => { + validate({ AquiferCode: '1234567890' }) + assert.equal( + checkProperty(validate.errors, 'maxLength', 'AquiferCode'), + false + ) +}) + +test('Should reject WellID > 55 chars', async (t) => { + validate({ WellID: 'x'.repeat(56) }) + assert.equal(checkProperty(validate.errors, 'maxLength', 'WellID'), true) +}) +test('Should accept WellID <= 55 chars', async (t) => { + validate({ WellID: 'x'.repeat(55) }) + assert.equal(checkProperty(validate.errors, 'maxLength', 'WellID'), false) +}) + +test('Should reject SampleCollectionMethodName > 300 chars', async (t) => { + validate({ SampleCollectionMethodName: 'x'.repeat(301) }) + assert.equal( + checkProperty(validate.errors, 'maxLength', 'SampleCollectionMethodName'), + true + ) +}) +test('Should accept SampleCollectionMethodName <= 300 chars', async (t) => { + validate({ SampleCollectionMethodName: 'x'.repeat(300) }) + assert.equal( + checkProperty(validate.errors, 'maxLength', 'SampleCollectionMethodName'), + false + ) +}) + +test('Should reject SampleCollectionMethodID > 50 chars', async (t) => { + validate({ SampleCollectionMethodID: 'x'.repeat(51) }) + assert.equal( + checkProperty(validate.errors, 'maxLength', 'SampleCollectionMethodID'), + true + ) +}) +test('Should accept SampleCollectionMethodID <= 50 chars', async (t) => { + validate({ SampleCollectionMethodID: 'x'.repeat(50) }) + assert.equal( + checkProperty(validate.errors, 'maxLength', 'SampleCollectionMethodID'), + false + ) +}) + +test('Should reject EventID > 255 chars', async (t) => { + validate({ EventID: 'x'.repeat(256) }) + assert.equal(checkProperty(validate.errors, 'maxLength', 'EventID'), true) +}) +test('Should accept EventID <= 255 chars', async (t) => { + validate({ EventID: 'x'.repeat(255) }) + assert.equal(checkProperty(validate.errors, 'maxLength', 'EventID'), false) +}) diff --git a/schemas/data/test/logic.js b/schemas/data/test/logic.js index 9616cf26..4f7dc519 100644 --- a/schemas/data/test/logic.js +++ b/schemas/data/test/logic.js @@ -1,9 +1,9 @@ -import test from "ava"; - -import validate from "../frontend/index.js"; +import { test } from 'node:test' +import assert from 'node:assert/strict' +import validate from '../frontend/index.js' const checkProperty = (errors, keyword, property) => { - if (errors === null) return false; + if (errors === null) return false for (const error of errors) { if (keyword === 'message' && error.message === property) { return true @@ -11,346 +11,436 @@ const checkProperty = (errors, keyword, property) => { const nested = checkProperty(error.params.errors, keyword, property) if (nested) return nested } - if (error.keyword !== keyword) continue; + if (error.keyword !== keyword) continue if ( - ["required", "dependencies"].includes(keyword) && + ['required', 'dependencies'].includes(keyword) && error.params.missingProperty === property ) { - return true; + return true } else if ( - keyword === "additionalProperties" && + keyword === 'additionalProperties' && error.params.additionalProperty === property ) { - return true; + return true } else if ( - keyword === "oneOf" && + keyword === 'oneOf' && error.params.passingSchemas.includes(property) ) { - return true; - } else if (keyword === "anyOf") return true; - else if (keyword === "not" && error.instancePath.includes(property)) { - return true; - } else if (keyword === "enum" && error.instancePath.includes(property)) { - return true; - } else if (keyword === "minimum" && error.instancePath.includes(property)) { - return true; + return true + } else if (keyword === 'anyOf') + return true // anyOf branches surface as nested `required` errors inside errorMessage; query those directly via keyword="required" for property-specific assertions. + else if (keyword === 'not' && error.instancePath.includes(property)) { + return true + } else if (keyword === 'enum' && error.instancePath.includes(property)) { + return true + } else if (keyword === 'minimum' && error.instancePath.includes(property)) { + return true } else if ( - keyword === "exclusiveMinimum" && + keyword === 'exclusiveMinimum' && error.instancePath.includes(property) ) { - return true; - } else if (keyword === "maximum" && error.instancePath.includes(property)) { - return true; + return true + } else if (keyword === 'maximum' && error.instancePath.includes(property)) { + return true } else if ( - keyword === "exclusiveMaximum" && + keyword === 'exclusiveMaximum' && error.instancePath.includes(property) ) { - return true; + return true } else if ( - keyword === "false schema" && + keyword === 'false schema' && error.instancePath.includes(property) ) { - return true; - } else if (keyword === "pattern") return true; + return true + } else if (keyword === 'pattern') return true } - return false; -}; + return false +} // *** ActivityType-CTS-ActivityStartTime *** // -test("Should accept ActivityType without ActivityStartTime for non-CTS", async (t) => { +test('Should accept ActivityType without ActivityStartTime for non-CTS', async (t) => { const valid = validate({ - ActivityType: "Field Msr/Obs", - }); - t.false(valid); - t.is(checkProperty(validate.errors, "required", "ActivityType"), false); - t.is(checkProperty(validate.errors, "required", "ActivityStartTime"), false); -}); + ActivityType: 'Field Msr/Obs', + }) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'required', 'ActivityType'), + false + ) + assert.equal( + checkProperty(validate.errors, 'required', 'ActivityStartTime'), + false + ) +}) -test("Should accept ActivityType with ActivityStartTime for non-CTS", async (t) => { +test('Should accept ActivityType with ActivityStartTime for non-CTS', async (t) => { const valid = validate({ - ActivityType: "Field Msr/Obs", + ActivityType: 'Field Msr/Obs', ActivityStartTime: '13:15:00', - }); - t.false(valid); - t.is(checkProperty(validate.errors, "required", "ActivityType"), false); - t.is(checkProperty(validate.errors, "required", "ActivityStartTime"), false); -}); + }) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'required', 'ActivityType'), + false + ) + assert.equal( + checkProperty(validate.errors, 'required', 'ActivityStartTime'), + false + ) +}) -test("Should reject ActivityType Field Msr/Obs-Continuous Time Series without ActivityStartTime for CTS", async (t) => { +test('Should reject ActivityType Field Msr/Obs-Continuous Time Series without ActivityStartTime for CTS', async (t) => { const valid = validate({ - ActivityType: "Field Msr/Obs-Continuous Time Series", - }); - t.false(valid); - t.is(checkProperty(validate.errors, "required", "ActivityStartTime"), true); -}); + ActivityType: 'Field Msr/Obs-Continuous Time Series', + }) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'required', 'ActivityStartTime'), + true + ) +}) -test("Should accept ActivityType Field Msr/Obs-Continuous Time Series with ActivityStartTime for CTS", async (t) => { +test('Should accept ActivityType Field Msr/Obs-Continuous Time Series with ActivityStartTime for CTS', async (t) => { const valid = validate({ - ActivityType: "Field Msr/Obs-Continuous Time Series", + ActivityType: 'Field Msr/Obs-Continuous Time Series', ActivityStartTime: '13:15:00', - }); - t.false(valid); - t.is(checkProperty(validate.errors, "required", "ActivityType"), false); - t.is(checkProperty(validate.errors, "required", "ActivityStartTime"), false); -}); + }) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'required', 'ActivityType'), + false + ) + assert.equal( + checkProperty(validate.errors, 'required', 'ActivityStartTime'), + false + ) +}) // *** ActivityType-ResultAnalyticalMethod *** // -test("Should reject ActivityType = Sample-*", async (t) => { - const valid = validate({ - ActivityType: "Sample-Other", - }); - t.false(valid); - t.is(checkProperty(validate.errors, "dependencies", "LaboratoryName"), true); - t.is( - checkProperty(validate.errors, "dependencies", "ResultAnalyticalMethodID"), - true, - ); - t.is( +test('Should reject ActivityType = Sample-*', async (t) => { + const valid = validate({ + ActivityType: 'Sample-Other', + }) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'dependencies', 'LaboratoryName'), + true + ) + assert.equal( + checkProperty(validate.errors, 'dependencies', 'ResultAnalyticalMethodID'), + true + ) + assert.equal( checkProperty( validate.errors, - "dependencies", - "ResultAnalyticalMethodContext", + 'dependencies', + 'ResultAnalyticalMethodContext' ), - true, - ); - t.is( + true + ) + assert.equal( checkProperty( validate.errors, - "dependencies", - "ResultAnalyticalMethodName", - ), - true, - ); -}); -test("Should reject ActivityType = Quality Control Sample-*", async (t) => { - const valid = validate({ - ActivityType: "Quality Control Sample-Other", - }); - t.false(valid); - t.is(checkProperty(validate.errors, "dependencies", "LaboratoryName"), true); - t.is( - checkProperty(validate.errors, "dependencies", "ResultAnalyticalMethodID"), - true, - ); - t.is( + 'dependencies', + 'ResultAnalyticalMethodName' + ), + true + ) +}) +test('Should reject ActivityType = Quality Control Sample-*', async (t) => { + const valid = validate({ + ActivityType: 'Quality Control Sample-Other', + }) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'dependencies', 'LaboratoryName'), + true + ) + assert.equal( + checkProperty(validate.errors, 'dependencies', 'ResultAnalyticalMethodID'), + true + ) + assert.equal( checkProperty( validate.errors, - "dependencies", - "ResultAnalyticalMethodContext", + 'dependencies', + 'ResultAnalyticalMethodContext' ), - true, - ); - t.is( + true + ) + assert.equal( checkProperty( validate.errors, - "dependencies", - "ResultAnalyticalMethodName", + 'dependencies', + 'ResultAnalyticalMethodName' ), - true, - ); -}); -test("Should accept ActivityType = Sample-* w/ ResultAnalyticalMethodID & ResultAnalyticalMethodContext", async (t) => { - const valid = validate({ - ActivityType: "Sample-Other", - LaboratoryName: "A", - ResultAnalyticalMethodID: "0", - ResultAnalyticalMethodContext: "ENV", - }); - t.false(valid); - t.is(checkProperty(validate.errors, "dependencies", "LaboratoryName"), false); - t.is( - checkProperty(validate.errors, "dependencies", "ResultAnalyticalMethodID"), - false, - ); - t.is( + true + ) +}) +test('Should accept ActivityType = Sample-* w/ ResultAnalyticalMethodID & ResultAnalyticalMethodContext', async (t) => { + const valid = validate({ + ActivityType: 'Sample-Other', + LaboratoryName: 'A', + ResultAnalyticalMethodID: '0', + ResultAnalyticalMethodContext: 'ENV', + }) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'dependencies', 'LaboratoryName'), + false + ) + assert.equal( + checkProperty(validate.errors, 'dependencies', 'ResultAnalyticalMethodID'), + false + ) + assert.equal( checkProperty( validate.errors, - "dependencies", - "ResultAnalyticalMethodContext", + 'dependencies', + 'ResultAnalyticalMethodContext' ), - false, - ); - t.is( + false + ) + assert.equal( checkProperty( validate.errors, - "dependencies", - "ResultAnalyticalMethodName", + 'dependencies', + 'ResultAnalyticalMethodName' ), - false, - ); -}); -test("Should accept ActivityType = Quality Control Sample-* w/ ResultAnalyticalMethodID & ResultAnalyticalMethodContext", async (t) => { + false + ) +}) +test('Should accept ActivityType = Quality Control Sample-* w/ ResultAnalyticalMethodID & ResultAnalyticalMethodContext', async (t) => { const valid = validate({ - ActivityType: "Quality Control Sample-Other", - LaboratoryName: "A", - ResultAnalyticalMethodID: "0", - ResultAnalyticalMethodContext: "ENV", - }); - t.false(valid); - t.is(checkProperty(validate.errors, "dependencies", "LaboratoryName"), false); - t.is( - checkProperty(validate.errors, "dependencies", "ResultAnalyticalMethodID"), - false, - ); - t.is( + ActivityType: 'Quality Control Sample-Other', + LaboratoryName: 'A', + ResultAnalyticalMethodID: '0', + ResultAnalyticalMethodContext: 'ENV', + }) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'dependencies', 'LaboratoryName'), + false + ) + assert.equal( + checkProperty(validate.errors, 'dependencies', 'ResultAnalyticalMethodID'), + false + ) + assert.equal( checkProperty( validate.errors, - "dependencies", - "ResultAnalyticalMethodContext", + 'dependencies', + 'ResultAnalyticalMethodContext' ), - false, - ); - t.is( + false + ) + assert.equal( checkProperty( validate.errors, - "dependencies", - "ResultAnalyticalMethodName", + 'dependencies', + 'ResultAnalyticalMethodName' ), - false, - ); -}); + false + ) +}) -test("Should accept ActivityType = Sample-* w/ ResultAnalyticalMethodName", async (t) => { +test('Should accept ActivityType = Sample-* w/ ResultAnalyticalMethodName', async (t) => { const valid = validate({ - ActivityType: "Sample-Other", - LaboratoryName: "A", - ResultAnalyticalMethodName: "Unspecified", - }); - t.false(valid); - t.is(checkProperty(validate.errors, "dependencies", "LaboratoryName"), false); - t.is( - checkProperty(validate.errors, "dependencies", "ResultAnalyticalMethodID"), - false, - ); - t.is( + ActivityType: 'Sample-Other', + LaboratoryName: 'A', + ResultAnalyticalMethodName: 'Unspecified', + }) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'dependencies', 'LaboratoryName'), + false + ) + assert.equal( + checkProperty(validate.errors, 'dependencies', 'ResultAnalyticalMethodID'), + false + ) + assert.equal( checkProperty( validate.errors, - "dependencies", - "ResultAnalyticalMethodContext", + 'dependencies', + 'ResultAnalyticalMethodContext' ), - false, - ); - t.is( + false + ) + assert.equal( checkProperty( validate.errors, - "dependencies", - "ResultAnalyticalMethodName", + 'dependencies', + 'ResultAnalyticalMethodName' ), - false, - ); -}); -test("Should accept ActivityType = Quality Control Sample-* w/ ResultAnalyticalMethodName", async (t) => { + false + ) +}) +test('Should accept ActivityType = Quality Control Sample-* w/ ResultAnalyticalMethodName', async (t) => { const valid = validate({ - ActivityType: "Sample-Other", - LaboratoryName: "A", - ResultAnalyticalMethodName: "Unspecified", - }); - t.false(valid); - t.is(checkProperty(validate.errors, "dependencies", "LaboratoryName"), false); - t.is( - checkProperty(validate.errors, "dependencies", "ResultAnalyticalMethodID"), - false, - ); - t.is( + ActivityType: 'Sample-Other', + LaboratoryName: 'A', + ResultAnalyticalMethodName: 'Unspecified', + }) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'dependencies', 'LaboratoryName'), + false + ) + assert.equal( + checkProperty(validate.errors, 'dependencies', 'ResultAnalyticalMethodID'), + false + ) + assert.equal( checkProperty( validate.errors, - "dependencies", - "ResultAnalyticalMethodContext", + 'dependencies', + 'ResultAnalyticalMethodContext' ), - false, - ); - t.is( + false + ) + assert.equal( checkProperty( validate.errors, - "dependencies", - "ResultAnalyticalMethodName", + 'dependencies', + 'ResultAnalyticalMethodName' ), - false, - ); -}); + false + ) +}) // *** CharacteristicName-MethodSpeciation *** // -test("Should accept CharacteristicName AND NOT MethodSpeciation", async (t) => { - const valid = validate({ - CharacteristicName: "Calcium", - }); - t.false(valid); - t.is(checkProperty(validate.errors, "required", "CharacteristicName"), false); - t.is(checkProperty(validate.errors, "required", "MethodSpeciation"), false); -}); -test("Should reject CharacteristicName Ammonia, un-ionized AND NOT MethodSpeciation", async (t) => { - const valid = validate({ - CharacteristicName: "Ammonia, un-ionized", - }); - t.false(valid); - t.is(checkProperty(validate.errors, "required", "MethodSpeciation"), true); - t.is(checkProperty(validate.errors, "message", "error-CharacteristicName-MethodSpeciation"), true); -}); -test("Should reject CharacteristicName Nitrogen-15 AND NOT MethodSpeciation", async (t) => { - const valid = validate({ - CharacteristicName: "Nitrogen-15", - LaboratoryName: "A", - }); - t.false(valid); - t.is(checkProperty(validate.errors, "required", "MethodSpeciation"), true); - t.is(checkProperty(validate.errors, "message", "error-CharacteristicName-MethodSpeciation"), true); -}); -test("Should accept CharacteristicName AND MethodSpeciation", async (t) => { - const valid = validate({ - CharacteristicName: "Nitrate", - MethodSpeciation: "as N", - }); - t.false(valid); - t.is(checkProperty(validate.errors, "required", "CharacteristicName"), false); - t.is(checkProperty(validate.errors, "required", "MethodSpeciation"), false); -}); +test('Should accept CharacteristicName AND NOT MethodSpeciation', async (t) => { + const valid = validate({ + CharacteristicName: 'Calcium', + }) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'required', 'CharacteristicName'), + false + ) + assert.equal( + checkProperty(validate.errors, 'required', 'MethodSpeciation'), + false + ) +}) +test('Should reject CharacteristicName Ammonia, un-ionized AND NOT MethodSpeciation', async (t) => { + const valid = validate({ + CharacteristicName: 'Ammonia, un-ionized', + }) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'required', 'MethodSpeciation'), + true + ) + assert.equal( + checkProperty( + validate.errors, + 'message', + 'error-CharacteristicName-MethodSpeciation' + ), + true + ) +}) +test('Should reject CharacteristicName Nitrogen-15 AND NOT MethodSpeciation', async (t) => { + const valid = validate({ + CharacteristicName: 'Nitrogen-15', + LaboratoryName: 'A', + }) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'required', 'MethodSpeciation'), + true + ) + assert.equal( + checkProperty( + validate.errors, + 'message', + 'error-CharacteristicName-MethodSpeciation' + ), + true + ) +}) +test('Should accept CharacteristicName AND MethodSpeciation', async (t) => { + const valid = validate({ + CharacteristicName: 'Nitrate', + MethodSpeciation: 'as N', + }) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'required', 'CharacteristicName'), + false + ) + assert.equal( + checkProperty(validate.errors, 'required', 'MethodSpeciation'), + false + ) +}) // *** CharacteristicName-Nutrient-ResultSampleFraction *** // -test("Should reject Nutrient CharacteristicName AND ResultSampleFraction", async (t) => { - const valid = validate({ - ActivityMediaName: "Surface Water", - CharacteristicName: "Ammonia", - ActivityType: "", - ResultSampleFraction: "Total", - }); - t.false(valid); - t.is(checkProperty(validate.errors, "required", "CharacteristicName"), false); - t.is( - checkProperty(validate.errors, "required", "ResultSampleFraction"), - false, - ); - t.is(checkProperty(validate.errors, "enum", "ResultSampleFraction"), true); -}); -test("Should accept Nutrient CharacteristicName AND filter ResultSampleFraction", async (t) => { - const valid = validate({ - ActivityMediaName: "Surface Water", - CharacteristicName: "Ammonia", - ActivityType: "", - ResultSampleFraction: "Filtered", - }); - t.false(valid); - t.is(checkProperty(validate.errors, "required", "CharacteristicName"), false); - t.is( - checkProperty(validate.errors, "required", "ResultSampleFraction"), - false, - ); - t.is(checkProperty(validate.errors, "enum", "ResultSampleFraction"), false); -}); -test("Should accept Nutrient Sediment", async (t) => { - const valid = validate({ - ActivityMediaName: "Surface Water Sediment", - CharacteristicName: "Ammonia", - ActivityType: "", - ResultSampleFraction: "Total", - }); - t.false(valid); - t.is(checkProperty(validate.errors, "required", "CharacteristicName"), false); - t.is( - checkProperty(validate.errors, "required", "ResultSampleFraction"), - false, - ); - t.is(checkProperty(validate.errors, "enum", "ResultSampleFraction"), false); -}); +test('Should reject Nutrient CharacteristicName AND ResultSampleFraction', async (t) => { + const valid = validate({ + ActivityMediaName: 'Surface Water', + CharacteristicName: 'Ammonia', + ActivityType: '', + ResultSampleFraction: 'Total', + }) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'required', 'CharacteristicName'), + false + ) + assert.equal( + checkProperty(validate.errors, 'required', 'ResultSampleFraction'), + false + ) + assert.equal( + checkProperty(validate.errors, 'enum', 'ResultSampleFraction'), + true + ) +}) +test('Should accept Nutrient CharacteristicName AND filter ResultSampleFraction', async (t) => { + const valid = validate({ + ActivityMediaName: 'Surface Water', + CharacteristicName: 'Ammonia', + ActivityType: '', + ResultSampleFraction: 'Filtered', + }) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'required', 'CharacteristicName'), + false + ) + assert.equal( + checkProperty(validate.errors, 'required', 'ResultSampleFraction'), + false + ) + assert.equal( + checkProperty(validate.errors, 'enum', 'ResultSampleFraction'), + false + ) +}) +test('Should accept Nutrient Sediment', async (t) => { + const valid = validate({ + ActivityMediaName: 'Surface Water Sediment', + CharacteristicName: 'Ammonia', + ActivityType: '', + ResultSampleFraction: 'Total', + }) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'required', 'CharacteristicName'), + false + ) + assert.equal( + checkProperty(validate.errors, 'required', 'ResultSampleFraction'), + false + ) + assert.equal( + checkProperty(validate.errors, 'enum', 'ResultSampleFraction'), + false + ) +}) // test('Should accept Nutrient Sediment with no sample fraction', async (t) => { // let valid = validate({ // 'ActivityMediaName':'Surface Water Sediment', @@ -359,480 +449,1191 @@ test("Should accept Nutrient Sediment", async (t) => { // 'ResultSampleFraction': '' // }) // console.log(validate.errors) -// t.is(checkProperty(validate.errors, 'required', 'CharacteristicName'), false) -// t.is(checkProperty(validate.errors, 'required', 'ResultSampleFraction'), false) -// t.is(checkProperty(validate.errors, 'enum', 'ResultSampleFraction'), false) +// assert.equal(checkProperty(validate.errors, 'required', 'CharacteristicName'), false) +// assert.equal(checkProperty(validate.errors, 'required', 'ResultSampleFraction'), false) +// assert.equal(checkProperty(validate.errors, 'enum', 'ResultSampleFraction'), false) // // }) // *** CharacteristicName-ResultSampleFraction *** // -test("Should accept CharacteristicName AND NOT ResultSampleFraction", async (t) => { - const valid = validate({ - CharacteristicName: "Dissolved oxygen (DO)", - }); - t.false(valid); - t.is(checkProperty(validate.errors, "required", "CharacteristicName"), false); - t.is( - checkProperty(validate.errors, "required", "ResultSampleFraction"), - false, - ); -}); -test("Should rejects CharacteristicName AND NOT ResultSampleFraction", async (t) => { - const valid = validate({ - CharacteristicName: "Silver", - }); - t.false(valid); - t.is( - checkProperty(validate.errors, "required", "ResultSampleFraction"), - true, - ); -}); -test("Should accept CharacteristicName AND ResultSampleFraction", async (t) => { - const valid = validate({ - CharacteristicName: "Silver", - ResultSampleFraction: "Dissolved", - }); - t.false(valid); - t.is(checkProperty(validate.errors, "required", "CharacteristicName"), false); - t.is( - checkProperty(validate.errors, "required", "ResultSampleFraction"), - false, - ); -}); +test('Should accept CharacteristicName AND NOT ResultSampleFraction', async (t) => { + const valid = validate({ + CharacteristicName: 'Dissolved oxygen (DO)', + }) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'required', 'CharacteristicName'), + false + ) + assert.equal( + checkProperty(validate.errors, 'required', 'ResultSampleFraction'), + false + ) +}) +test('Should rejects CharacteristicName AND NOT ResultSampleFraction', async (t) => { + const valid = validate({ + CharacteristicName: 'Silver', + }) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'required', 'ResultSampleFraction'), + true + ) +}) +test('Should accept CharacteristicName AND ResultSampleFraction', async (t) => { + const valid = validate({ + CharacteristicName: 'Silver', + ResultSampleFraction: 'Dissolved', + }) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'required', 'CharacteristicName'), + false + ) + assert.equal( + checkProperty(validate.errors, 'required', 'ResultSampleFraction'), + false + ) +}) // *** CharacteristicName-StableIsotope-MethodSpeciation *** // -test("Should reject StableIsotope CharacteristicName, MethodSpeciation required", async (t) => { - const valid = validate({ - CharacteristicName: "Nitrogen-15", - }); - t.false(valid); - t.is(checkProperty(validate.errors, "required", "CharacteristicName"), false); - t.is(checkProperty(validate.errors, "required", "MethodSpeciation"), true); -}); -test("Should reject StableIsotope CharacteristicName", async (t) => { - const valid = validate({ - CharacteristicName: "Nitrogen-15", - MethodSpeciation: "as NH4", - }); - t.false(valid); - t.is(checkProperty(validate.errors, "required", "CharacteristicName"), false); - t.is(checkProperty(validate.errors, "enum", "MethodSpeciation"), true); -}); -test("Should accept StableIsotope CharacteristicName", async (t) => { - const valid = validate({ - CharacteristicName: "Nitrogen-15", - MethodSpeciation: "of NH4", - }); - t.false(valid); - t.is(checkProperty(validate.errors, "required", "CharacteristicName"), false); - t.is(checkProperty(validate.errors, "required", "MethodSpeciation"), false); -}); +test('Should reject StableIsotope CharacteristicName, MethodSpeciation required', async (t) => { + const valid = validate({ + CharacteristicName: 'Nitrogen-15', + }) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'required', 'CharacteristicName'), + false + ) + assert.equal( + checkProperty(validate.errors, 'required', 'MethodSpeciation'), + true + ) +}) +test('Should reject StableIsotope CharacteristicName', async (t) => { + const valid = validate({ + CharacteristicName: 'Nitrogen-15', + MethodSpeciation: 'as NH4', + }) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'required', 'CharacteristicName'), + false + ) + assert.equal(checkProperty(validate.errors, 'enum', 'MethodSpeciation'), true) +}) +test('Should accept StableIsotope CharacteristicName', async (t) => { + const valid = validate({ + CharacteristicName: 'Nitrogen-15', + MethodSpeciation: 'of NH4', + }) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'required', 'CharacteristicName'), + false + ) + assert.equal( + checkProperty(validate.errors, 'required', 'MethodSpeciation'), + false + ) +}) // *** ResultDetectionCondition-ResultValue *** // -test("Should reject NOT ResultValue AND NOT ResultDetectionCondition", async (t) => { - const valid = validate({}); - t.false(valid); - t.is(checkProperty(validate.errors, "required", "ResultValue"), true); - t.is( - checkProperty(validate.errors, "required", "ResultDetectionCondition"), - true, - ); -}); -test("Should reject ResultValue AND ResultDetectionCondition", async (t) => { +test('Should reject NOT ResultValue AND NOT ResultDetectionCondition', async (t) => { + const valid = validate({}) + assert.equal(valid, false) + assert.equal(checkProperty(validate.errors, 'required', 'ResultValue'), true) + assert.equal( + checkProperty(validate.errors, 'required', 'ResultDetectionCondition'), + true + ) +}) +test('Should reject ResultValue AND ResultDetectionCondition', async (t) => { const valid = validate({ ResultValue: 1, - ResultDetectionCondition: "Not Reported", - }); - t.false(valid); - t.is(checkProperty(validate.errors, "false schema", "ResultValue"), true); - t.is( - checkProperty(validate.errors, "false schema", "ResultDetectionCondition"), - true, - ); -}); - -test("Should accept ResultValue OR ResultDetectionCondition", async (t) => { + ResultDetectionCondition: 'Not Reported', + }) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'false schema', 'ResultValue'), + true + ) + assert.equal( + checkProperty(validate.errors, 'false schema', 'ResultDetectionCondition'), + true + ) +}) + +test('Should accept ResultValue OR ResultDetectionCondition', async (t) => { let valid = validate({ ResultValue: 1, - }); - t.false(valid); - t.is(checkProperty(validate.errors, "required", "ResultValue"), false); - t.is( - checkProperty(validate.errors, "required", "ResultDetectionCondition"), - false, - ); - t.is(checkProperty(validate.errors, "enum", "ResultValue"), false); - t.is( - checkProperty(validate.errors, "enum", "ResultDetectionCondition"), - false, - ); + }) + assert.equal(valid, false) + assert.equal(checkProperty(validate.errors, 'required', 'ResultValue'), false) + assert.equal( + checkProperty(validate.errors, 'required', 'ResultDetectionCondition'), + false + ) + assert.equal(checkProperty(validate.errors, 'enum', 'ResultValue'), false) + assert.equal( + checkProperty(validate.errors, 'enum', 'ResultDetectionCondition'), + false + ) valid = validate({ - ResultDetectionCondition: "Not Reported", - }); - t.false(valid); - t.is(checkProperty(validate.errors, "required", "ResultValue"), false); - t.is( - checkProperty(validate.errors, "required", "ResultDetectionCondition"), - false, - ); - t.is(checkProperty(validate.errors, "enum", "ResultValue"), false); - t.is( - checkProperty(validate.errors, "enum", "ResultDetectionCondition"), - false, - ); -}); + ResultDetectionCondition: 'Not Reported', + }) + assert.equal(valid, false) + assert.equal(checkProperty(validate.errors, 'required', 'ResultValue'), false) + assert.equal( + checkProperty(validate.errors, 'required', 'ResultDetectionCondition'), + false + ) + assert.equal(checkProperty(validate.errors, 'enum', 'ResultValue'), false) + assert.equal( + checkProperty(validate.errors, 'enum', 'ResultDetectionCondition'), + false + ) +}) // *** ResultDetectionCondition-ResultDetectionQuantitationLimit-above-below *** // -test("Should reject ResultDetectionCondition = Present Above Quantification Limit", async (t) => { +test('Should reject ResultDetectionCondition = Present Above Quantification Limit', async (t) => { const valid = validate({ - ResultDetectionCondition: "Present Above Quantification Limit", - }); - t.false(valid); - t.is( + ResultDetectionCondition: 'Present Above Quantification Limit', + }) + assert.equal(valid, false) + assert.equal( checkProperty( validate.errors, - "dependencies", - "ResultDetectionQuantitationLimitType", + 'dependencies', + 'ResultDetectionQuantitationLimitType' ), - true, - ); - t.is( + true + ) + assert.equal( checkProperty( validate.errors, - "dependencies", - "ResultDetectionQuantitationLimitMeasure", + 'dependencies', + 'ResultDetectionQuantitationLimitMeasure' ), - true, - ); - t.is( + true + ) + assert.equal( checkProperty( validate.errors, - "dependencies", - "ResultDetectionQuantitationLimitUnit", + 'dependencies', + 'ResultDetectionQuantitationLimitUnit' ), - true, - ); -}); + true + ) +}) -test("Should reject ResultDetectionCondition = Present Below Quantification Limit", async (t) => { +test('Should reject ResultDetectionCondition = Present Below Quantification Limit', async (t) => { const valid = validate({ ResultValue: 1, - ResultDetectionCondition: "Present Below Quantification Limit", - }); - t.false(valid); - t.is( + ResultDetectionCondition: 'Present Below Quantification Limit', + }) + assert.equal(valid, false) + assert.equal( checkProperty( validate.errors, - "dependencies", - "ResultDetectionQuantitationLimitType", + 'dependencies', + 'ResultDetectionQuantitationLimitType' ), - true, - ); - t.is( + true + ) + assert.equal( checkProperty( validate.errors, - "dependencies", - "ResultDetectionQuantitationLimitMeasure", + 'dependencies', + 'ResultDetectionQuantitationLimitMeasure' ), - true, - ); - t.is( + true + ) + assert.equal( checkProperty( validate.errors, - "dependencies", - "ResultDetectionQuantitationLimitUnit", + 'dependencies', + 'ResultDetectionQuantitationLimitUnit' ), - true, - ); -}); + true + ) +}) -test("Should accept ResultDetectionCondition", async (t) => { +test('Should accept ResultDetectionCondition', async (t) => { const valid = validate({ ResultValue: 1, - ResultDetectionCondition: "Present Below Quantification Limit", - ResultDetectionQuantitationLimitType: "A", + ResultDetectionCondition: 'Present Below Quantification Limit', + ResultDetectionQuantitationLimitType: 'A', ResultDetectionQuantitationLimitMeasure: 1, - ResultDetectionQuantitationLimitUnit: "mg/L", - }); - t.false(valid); - t.is( + ResultDetectionQuantitationLimitUnit: 'mg/L', + }) + assert.equal(valid, false) + assert.equal( checkProperty( validate.errors, - "dependencies", - "ResultDetectionQuantitationLimitType", + 'dependencies', + 'ResultDetectionQuantitationLimitType' ), - false, - ); - t.is( + false + ) + assert.equal( checkProperty( validate.errors, - "dependencies", - "ResultDetectionQuantitationLimitMeasure", + 'dependencies', + 'ResultDetectionQuantitationLimitMeasure' ), - false, - ); - t.is( + false + ) + assert.equal( checkProperty( validate.errors, - "dependencies", - "ResultDetectionQuantitationLimitUnit", + 'dependencies', + 'ResultDetectionQuantitationLimitUnit' ), - false, - ); -}); + false + ) +}) // *** ResultDetectionCondition-ResultDetectionQuantitationLimit-not-detect *** // -test("Should reject ResultDetectionCondition = Not Detected", async (t) => { +test('Should reject ResultDetectionCondition = Not Detected', async (t) => { const valid = validate({ - ResultDetectionCondition: "Not Detected", - ResultDetectionQuantitationLimitType: "Sample Detection Limit", + ResultDetectionCondition: 'Not Detected', + ResultDetectionQuantitationLimitType: 'Sample Detection Limit', ResultDetectionQuantitationLimitMeasure: 0, - ResultDetectionQuantitationLimitUnit: "None", - }); - t.false(valid); - t.is( + ResultDetectionQuantitationLimitUnit: 'None', + }) + assert.equal(valid, false) + assert.equal( checkProperty( validate.errors, - "false schema", - "ResultDetectionQuantitationLimitType", + 'false schema', + 'ResultDetectionQuantitationLimitType' ), - true, - ); - t.is( + true + ) + assert.equal( checkProperty( validate.errors, - "false schema", - "ResultDetectionQuantitationLimitMeasure", + 'false schema', + 'ResultDetectionQuantitationLimitMeasure' ), - true, - ); - t.is( + true + ) + assert.equal( checkProperty( validate.errors, - "false schema", - "ResultDetectionQuantitationLimitUnit", + 'false schema', + 'ResultDetectionQuantitationLimitUnit' ), - true, - ); -}); + true + ) +}) -test("Should accept ResultDetectionCondition = Not Detected", async (t) => { +test('Should accept ResultDetectionCondition = Not Detected', async (t) => { const valid = validate({ - ResultDetectionCondition: "Not Detected", - }); - t.false(valid); - t.is( + ResultDetectionCondition: 'Not Detected', + }) + assert.equal(valid, false) + assert.equal( checkProperty( validate.errors, - "enum", - "ResultDetectionQuantitationLimitType", + 'enum', + 'ResultDetectionQuantitationLimitType' ), - false, - ); - t.is( + false + ) + assert.equal( checkProperty( validate.errors, - "enum", - "ResultDetectionQuantitationLimitMeasure", + 'enum', + 'ResultDetectionQuantitationLimitMeasure' ), - false, - ); - t.is( + false + ) + assert.equal( checkProperty( validate.errors, - "enum", - "ResultDetectionQuantitationLimitUnit", + 'enum', + 'ResultDetectionQuantitationLimitUnit' ), - false, - ); -}); + false + ) +}) -test("Should reject ResultDetectionCondition = Detected Not Quantified", async (t) => { +test('Should reject ResultDetectionCondition = Detected Not Quantified', async (t) => { const valid = validate({ - ResultDetectionCondition: "Detected Not Quantified", - ResultDetectionQuantitationLimitType: "Sample Detection Limit", + ResultDetectionCondition: 'Detected Not Quantified', + ResultDetectionQuantitationLimitType: 'Sample Detection Limit', ResultDetectionQuantitationLimitMeasure: 0, - ResultDetectionQuantitationLimitUnit: "None", - }); - t.false(valid); - t.is( + ResultDetectionQuantitationLimitUnit: 'None', + }) + assert.equal(valid, false) + assert.equal( checkProperty( validate.errors, - "false schema", - "ResultDetectionQuantitationLimitType", + 'false schema', + 'ResultDetectionQuantitationLimitType' ), - true, - ); - t.is( + true + ) + assert.equal( checkProperty( validate.errors, - "false schema", - "ResultDetectionQuantitationLimitMeasure", + 'false schema', + 'ResultDetectionQuantitationLimitMeasure' ), - true, - ); - t.is( + true + ) + assert.equal( checkProperty( validate.errors, - "false schema", - "ResultDetectionQuantitationLimitUnit", + 'false schema', + 'ResultDetectionQuantitationLimitUnit' ), - true, - ); -}); + true + ) +}) -test("Should accept ResultDetectionCondition = Detected Not Quantified", async (t) => { +test('Should accept ResultDetectionCondition = Detected Not Quantified', async (t) => { const valid = validate({ - ResultDetectionCondition: "Detected Not Quantified", - }); - t.false(valid); - t.is( + ResultDetectionCondition: 'Detected Not Quantified', + }) + assert.equal(valid, false) + assert.equal( checkProperty( validate.errors, - "enum", - "ResultDetectionQuantitationLimitType", + 'enum', + 'ResultDetectionQuantitationLimitType' ), - false, - ); - t.is( + false + ) + assert.equal( checkProperty( validate.errors, - "enum", - "ResultDetectionQuantitationLimitMeasure", + 'enum', + 'ResultDetectionQuantitationLimitMeasure' ), - false, - ); - t.is( + false + ) + assert.equal( checkProperty( validate.errors, - "enum", - "ResultDetectionQuantitationLimitUnit", + 'enum', + 'ResultDetectionQuantitationLimitUnit' ), - false, - ); -}); + false + ) +}) // *** CSVInjection *** // -test("Should reject columns with potential csv injection", async (t) => { +test('Should reject columns with potential csv injection', async (t) => { const valid = validate({ - DatasetName: "=equals", - MonitoringLocationID: "+positive", - MonitoringLocationName: "-negative", - ResultComment: "@at ", + DatasetName: '=equals', + MonitoringLocationID: '+positive', + MonitoringLocationName: '-negative', + ResultComment: '@at ', ResultAnalyticalMethodID: ` carriage return`, - ResultAnalyticalMethodName: "\ncarriage return", - LaboratoryName: "\rcarriage return", - LaboratorySampleID: "\ttab", - }); - t.false(valid); - t.is(checkProperty(validate.errors, "pattern", "DatasetName"), true); - t.is(checkProperty(validate.errors, "pattern", "MonitoringLocationID"), true); - t.is( - checkProperty(validate.errors, "pattern", "MonitoringLocationName"), - true, - ); - t.is(checkProperty(validate.errors, "pattern", "ResultComment"), true); - t.is( - checkProperty(validate.errors, "pattern", "ResultAnalyticalMethodID"), - true, - ); - t.is( - checkProperty(validate.errors, "pattern", "ResultAnalyticalMethodName"), - true, - ); - t.is(checkProperty(validate.errors, "pattern", "LaboratoryName"), true); - t.is(checkProperty(validate.errors, "pattern", "LaboratorySampleID"), true); -}); - -test("Should accept columns without potential csv injection", async (t) => { - const valid = validate({ - DatasetName: "~", - MonitoringLocationID: "1", - MonitoringLocationName: "&", - ResultComment: "$", - ResultAnalyticalMethodID: "#", - ResultAnalyticalMethodName: "|", - LaboratoryName: "_", - LaboratorySampleID: "*", - }); - t.false(valid); + ResultAnalyticalMethodName: '\ncarriage return', + LaboratoryName: '\rcarriage return', + LaboratorySampleID: '\ttab', + EventID: '=SUM(A1)', + WellID: '+1234', + AquiferCode: '-A1', + SampleCollectionMethodID: '@GRAB', + SampleCollectionMethodName: '@Grab sample', + }) + assert.equal(valid, false) + assert.equal(checkProperty(validate.errors, 'pattern', 'DatasetName'), true) + assert.equal( + checkProperty(validate.errors, 'pattern', 'MonitoringLocationID'), + true + ) + assert.equal( + checkProperty(validate.errors, 'pattern', 'MonitoringLocationName'), + true + ) + assert.equal(checkProperty(validate.errors, 'pattern', 'ResultComment'), true) + assert.equal( + checkProperty(validate.errors, 'pattern', 'ResultAnalyticalMethodID'), + true + ) + assert.equal( + checkProperty(validate.errors, 'pattern', 'ResultAnalyticalMethodName'), + true + ) + assert.equal( + checkProperty(validate.errors, 'pattern', 'LaboratoryName'), + true + ) + assert.equal( + checkProperty(validate.errors, 'pattern', 'LaboratorySampleID'), + true + ) + assert.equal(checkProperty(validate.errors, 'pattern', 'EventID'), true) + assert.equal(checkProperty(validate.errors, 'pattern', 'WellID'), true) + assert.equal(checkProperty(validate.errors, 'pattern', 'AquiferCode'), true) + assert.equal( + checkProperty(validate.errors, 'pattern', 'SampleCollectionMethodID'), + true + ) + assert.equal( + checkProperty(validate.errors, 'pattern', 'SampleCollectionMethodName'), + true + ) +}) + +test('Should accept columns without potential csv injection', async (t) => { + const valid = validate({ + DatasetName: '~', + MonitoringLocationID: '1', + MonitoringLocationName: '&', + ResultComment: '$', + ResultAnalyticalMethodID: '#', + ResultAnalyticalMethodName: '|', + LaboratoryName: '_', + LaboratorySampleID: '*', + EventID: 'Spring 2018 survey', + WellID: 'W-001', + AquiferCode: 'A1', + SampleCollectionMethodID: 'GRAB-01', + SampleCollectionMethodName: 'Grab sample', + }) + assert.equal(valid, false) // console.log(valid, JSON.stringify(validate.errors, null, 2)) - t.is(checkProperty(validate.errors, "pattern", "DatasetName"), false); - t.is( - checkProperty(validate.errors, "pattern", "MonitoringLocationID"), - false, - ); - t.is( - checkProperty(validate.errors, "pattern", "MonitoringLocationName"), - false, - ); - t.is(checkProperty(validate.errors, "pattern", "ResultComment"), false); - t.is( - checkProperty(validate.errors, "pattern", "ResultAnalyticalMethodID"), - false, - ); - t.is( - checkProperty(validate.errors, "pattern", "ResultAnalyticalMethodName"), - false, - ); - t.is(checkProperty(validate.errors, "pattern", "LaboratoryName"), false); - t.is(checkProperty(validate.errors, "pattern", "LaboratorySampleID"), false); -}); + assert.equal(checkProperty(validate.errors, 'pattern', 'DatasetName'), false) + assert.equal( + checkProperty(validate.errors, 'pattern', 'MonitoringLocationID'), + false + ) + assert.equal( + checkProperty(validate.errors, 'pattern', 'MonitoringLocationName'), + false + ) + assert.equal( + checkProperty(validate.errors, 'pattern', 'ResultComment'), + false + ) + assert.equal( + checkProperty(validate.errors, 'pattern', 'ResultAnalyticalMethodID'), + false + ) + assert.equal( + checkProperty(validate.errors, 'pattern', 'ResultAnalyticalMethodName'), + false + ) + assert.equal( + checkProperty(validate.errors, 'pattern', 'LaboratoryName'), + false + ) + assert.equal( + checkProperty(validate.errors, 'pattern', 'LaboratorySampleID'), + false + ) + assert.equal(checkProperty(validate.errors, 'pattern', 'EventID'), false) + assert.equal(checkProperty(validate.errors, 'pattern', 'WellID'), false) + assert.equal(checkProperty(validate.errors, 'pattern', 'AquiferCode'), false) + assert.equal( + checkProperty(validate.errors, 'pattern', 'SampleCollectionMethodID'), + false + ) + assert.equal( + checkProperty(validate.errors, 'pattern', 'SampleCollectionMethodName'), + false + ) +}) // *** ResultUnit-Salinity *** // -test("Should accept when Salinity and expected unit", async (t) => { +test('Should accept when Salinity and expected unit', async (t) => { const valid = validate({ - CharacteristicName: "Salinity", + CharacteristicName: 'Salinity', ResultValue: 0, - ResultUnit: "PSU", - }); - t.is(valid, false); - t.is(checkProperty(validate.errors, "enum", "ResultUnit"), false); -}); -test("Should reject when Salinity and `ppt`", async (t) => { - const valid = validate({ - CharacteristicName: "Salinity", - ResultUnit: "ppt", - }); - t.is(valid, false); - t.is(checkProperty(validate.errors, "enum", "ResultUnit"), true); -}); + ResultUnit: 'PSU', + }) + assert.equal(valid, false) + assert.equal(checkProperty(validate.errors, 'enum', 'ResultUnit'), false) +}) +test('Should reject when Salinity and `ppt`', async (t) => { + const valid = validate({ + CharacteristicName: 'Salinity', + ResultUnit: 'ppt', + }) + assert.equal(valid, false) + assert.equal(checkProperty(validate.errors, 'enum', 'ResultUnit'), true) +}) // *** ResultDetectionQuantitationLimitUnit-Salinity *** // -test("Should accept when Salinity and expected ResultDetectionQuantitationLimitUnit", async (t) => { +test('Should accept when Salinity and expected ResultDetectionQuantitationLimitUnit', async (t) => { const valid = validate({ - CharacteristicName: "Salinity", + CharacteristicName: 'Salinity', ResultDetectionQuantitationLimitMeasure: 0, - ResultDetectionQuantitationLimitUnit: "PSU", - }); - t.is(valid, false); - t.is( + ResultDetectionQuantitationLimitUnit: 'PSU', + }) + assert.equal(valid, false) + assert.equal( checkProperty( validate.errors, - "enum", - "ResultDetectionQuantitationLimitUnit", + 'enum', + 'ResultDetectionQuantitationLimitUnit' ), - false, - ); -}); -test("Should reject when Salinity and ResultDetectionQuantitationLimitUnit=`ppt`", async (t) => { + false + ) +}) +test('Should reject when Salinity and ResultDetectionQuantitationLimitUnit=`ppt`', async (t) => { const valid = validate({ - CharacteristicName: "Salinity", + CharacteristicName: 'Salinity', ResultDetectionQuantitationLimitMeasure: 0, - ResultDetectionQuantitationLimitUnit: "ppt", - }); - t.is(valid, false); - t.is( + ResultDetectionQuantitationLimitUnit: 'ppt', + }) + assert.equal(valid, false) + assert.equal( + checkProperty( + validate.errors, + 'enum', + 'ResultDetectionQuantitationLimitUnit' + ), + true + ) +}) + +// *** MonitoringLocationType-Well-WellUseType *** // +test('Should reject Well MonitoringLocationType without WellUseType', async (t) => { + const valid = validate({ + ActivityMediaName: 'Groundwater', + MonitoringLocationType: 'Well', + }) + assert.equal(valid, false) + assert.equal(checkProperty(validate.errors, 'required', 'WellUseType'), true) +}) + +test('Should reject Piezometer MonitoringLocationType without WellUseType', async (t) => { + const valid = validate({ + ActivityMediaName: 'Groundwater', + MonitoringLocationType: 'Piezometer', + }) + assert.equal(valid, false) + assert.equal(checkProperty(validate.errors, 'required', 'WellUseType'), true) +}) + +test('Should reject Dug Well MonitoringLocationType without WellUseType', async (t) => { + const valid = validate({ + ActivityMediaName: 'Groundwater', + MonitoringLocationType: 'Dug Well', + }) + assert.equal(valid, false) + assert.equal(checkProperty(validate.errors, 'required', 'WellUseType'), true) +}) + +test('Should accept Well MonitoringLocationType with WellUseType', async (t) => { + const valid = validate({ + ActivityMediaName: 'Groundwater', + MonitoringLocationType: 'Well', + WellUseType: 'Monitoring - Ambient', + }) + assert.equal(valid, false) + assert.equal(checkProperty(validate.errors, 'required', 'WellUseType'), false) +}) + +test('Should accept non-well MonitoringLocationType without WellUseType', async (t) => { + const valid = validate({ + ActivityMediaName: 'Surface Water', + MonitoringLocationType: 'River/Stream', + }) + assert.equal(valid, false) + assert.equal(checkProperty(validate.errors, 'required', 'WellUseType'), false) +}) + +// *** MonitoringLocationType-Well-SampleCondition *** // +test('Should reject Well without SampleCondition for non-CTS', async (t) => { + const valid = validate({ + ActivityMediaName: 'Groundwater', + MonitoringLocationType: 'Well', + ActivityType: 'Field Msr/Obs', + }) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'required', 'SampleCondition'), + true + ) +}) + +test('Should accept Well without SampleCondition for CTS', async (t) => { + const valid = validate({ + ActivityMediaName: 'Groundwater', + MonitoringLocationType: 'Well', + ActivityType: 'Field Msr/Obs-Continuous Time Series', + ActivityStartTime: '13:15:00', + }) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'required', 'SampleCondition'), + false + ) +}) + +test('Should accept Well with SampleCondition for non-CTS', async (t) => { + const valid = validate({ + ActivityMediaName: 'Groundwater', + MonitoringLocationType: 'Well', + ActivityType: 'Field Msr/Obs', + SampleCondition: 'Static', + }) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'required', 'SampleCondition'), + false + ) +}) + +// *** ActivityDepthHeightMeasure-ActivityDepthAltitudeReferencePoint *** // +test('Should reject ActivityDepthHeightMeasure without ActivityDepthAltitudeReferencePoint', async (t) => { + const valid = validate({ + ActivityMediaName: 'Groundwater', + ActivityDepthHeightMeasure: -5, + ActivityDepthHeightUnit: 'm', + }) + assert.equal(valid, false) + assert.equal( + checkProperty( + validate.errors, + 'required', + 'ActivityDepthAltitudeReferencePoint' + ), + true + ) +}) + +test('Should accept ActivityDepthHeightMeasure with ActivityDepthAltitudeReferencePoint', async (t) => { + const valid = validate({ + ActivityMediaName: 'Groundwater', + ActivityDepthHeightMeasure: -5, + ActivityDepthHeightUnit: 'm', + ActivityDepthAltitudeReferencePoint: 'Ground surface', + }) + assert.equal(valid, false) + assert.equal( + checkProperty( + validate.errors, + 'required', + 'ActivityDepthAltitudeReferencePoint' + ), + false + ) +}) + +test('Should accept ActivityDepthHeightMeasure without ActivityDepthAltitudeReferencePoint for non-GW media', async (t) => { + const valid = validate({ + ActivityMediaName: 'Surface Water', + ActivityDepthHeightMeasure: -5, + ActivityDepthHeightUnit: 'm', + }) + assert.equal(valid, false) + assert.equal( + checkProperty( + validate.errors, + 'required', + 'ActivityDepthAltitudeReferencePoint' + ), + false + ) +}) + +// *** CharacteristicName-WaterLevel-ActivityDepthAltitudeReferencePoint *** // +test('Should reject Water level CharacteristicName without ActivityDepthAltitudeReferencePoint', async (t) => { + const valid = validate({ + ActivityMediaName: 'Groundwater', + CharacteristicName: 'Water level in well, depth from a reference point', + ResultValue: -10, + ResultUnit: 'm', + }) + assert.equal(valid, false) + assert.equal( + checkProperty( + validate.errors, + 'required', + 'ActivityDepthAltitudeReferencePoint' + ), + true + ) +}) + +test('Should accept Water level CharacteristicName with ActivityDepthAltitudeReferencePoint', async (t) => { + const valid = validate({ + ActivityMediaName: 'Groundwater', + CharacteristicName: 'Water level in well, depth from a reference point', + ResultValue: -10, + ResultUnit: 'm', + ActivityDepthAltitudeReferencePoint: 'Top of well casing', + }) + assert.equal(valid, false) + assert.equal( + checkProperty( + validate.errors, + 'required', + 'ActivityDepthAltitudeReferencePoint' + ), + false + ) +}) + +// *** CharacteristicName-Depth-ActivityDepthHeightMeasure *** // +test('Should reject ActivityDepthHeightMeasure when CharacteristicName measures depth', async (t) => { + const valid = validate({ + ActivityMediaName: 'Surface Water', + CharacteristicName: 'Depth of water column', + ActivityDepthHeightMeasure: 5, + ActivityDepthHeightUnit: 'm', + ResultValue: 5, + ResultUnit: 'm', + }) + assert.equal(valid, false) + assert.equal( + checkProperty( + validate.errors, + 'message', + 'error-CharacteristicName-Depth-ActivityDepthHeightMeasure' + ), + true + ) +}) + +test('Should reject ActivityDepthHeightUnit when CharacteristicName measures depth', async (t) => { + const valid = validate({ + ActivityMediaName: 'Surface Water', + CharacteristicName: 'Water level', + ActivityDepthHeightUnit: 'm', + ResultValue: 1.2, + ResultUnit: 'm', + }) + assert.equal(valid, false) + assert.equal( + checkProperty( + validate.errors, + 'message', + 'error-CharacteristicName-Depth-ActivityDepthHeightMeasure' + ), + true + ) +}) + +test('Should accept depth CharacteristicName without ActivityDepthHeight fields', async (t) => { + const valid = validate({ + ActivityMediaName: 'Surface Water', + CharacteristicName: 'Depth of water column', + ResultValue: 5, + ResultUnit: 'm', + }) + assert.equal( + checkProperty( + validate.errors, + 'message', + 'error-CharacteristicName-Depth-ActivityDepthHeightMeasure' + ), + false + ) +}) + +test('Should accept ActivityDepthHeightMeasure for a non-depth CharacteristicName', async (t) => { + const valid = validate({ + ActivityMediaName: 'Surface Water', + CharacteristicName: 'Temperature, water', + ActivityDepthHeightMeasure: 5, + ActivityDepthHeightUnit: 'm', + ResultValue: 12.3, + ResultUnit: 'deg C', + }) + assert.equal( + checkProperty( + validate.errors, + 'message', + 'error-CharacteristicName-Depth-ActivityDepthHeightMeasure' + ), + false + ) +}) + +// *** ActivityMediaName-ActivityDepthHeightMeasure-Maximum *** // +test("Should reject ActivityDepthHeightMeasure > 0 for ActivityMediaName 'Surface Water'", async (t) => { + const valid = validate({ + ActivityMediaName: 'Surface Water', + CharacteristicName: 'Temperature, water', + ActivityDepthHeightMeasure: 5, + ActivityDepthHeightUnit: 'm', + ResultValue: 12.3, + ResultUnit: 'deg C', + }) + assert.equal(valid, false) + assert.equal( + checkProperty( + validate.errors, + 'message', + 'error-ActivityMediaName-ActivityDepthHeightMeasure-Maximum' + ), + true + ) +}) + +test("Should accept ActivityDepthHeightMeasure <= 0 for ActivityMediaName 'Surface Water'", async (t) => { + const valid = validate({ + ActivityMediaName: 'Surface Water', + CharacteristicName: 'Temperature, water', + ActivityDepthHeightMeasure: -5, + ActivityDepthHeightUnit: 'm', + ResultValue: 12.3, + ResultUnit: 'deg C', + }) + assert.equal( + checkProperty( + validate.errors, + 'message', + 'error-ActivityMediaName-ActivityDepthHeightMeasure-Maximum' + ), + false + ) +}) + +test("Should accept ActivityMediaName 'Surface Water' without ActivityDepthHeightMeasure", async (t) => { + const valid = validate({ + ActivityMediaName: 'Surface Water', + CharacteristicName: 'Temperature, water', + ResultValue: 12.3, + ResultUnit: 'deg C', + }) + assert.equal( + checkProperty( + validate.errors, + 'message', + 'error-ActivityMediaName-ActivityDepthHeightMeasure-Maximum' + ), + false + ) +}) + +test('Should not apply the ActivityDepthHeightMeasure maximum to Groundwater (covered by QC warning)', async (t) => { + const valid = validate({ + ActivityMediaName: 'Groundwater', + CharacteristicName: 'Temperature, water', + ActivityDepthHeightMeasure: 5, + ActivityDepthHeightUnit: 'm', + ResultValue: 12.3, + ResultUnit: 'deg C', + }) + assert.equal( checkProperty( validate.errors, - "enum", - "ResultDetectionQuantitationLimitUnit", + 'message', + 'error-ActivityMediaName-ActivityDepthHeightMeasure-Maximum' ), - true, - ); -}); + false + ) +}) + +// *** ActivityMediaName-Groundwater-DepthMeasure *** // +test('Should reject Groundwater ActivityMediaName without any depth measure', async (t) => { + const valid = validate({ + ActivityMediaName: 'Groundwater', + MonitoringLocationType: 'Well', + WellUseType: 'Domestic', + }) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'required', 'BoreholeDepthMeasure'), + true + ) + assert.equal( + checkProperty(validate.errors, 'required', 'WellDepthMeasure'), + true + ) + assert.equal( + checkProperty(validate.errors, 'required', 'WellOpenIntervalTopMeasure'), + true + ) + assert.equal( + checkProperty(validate.errors, 'required', 'WellOpenIntervalBottomMeasure'), + true + ) + assert.equal( + checkProperty(validate.errors, 'required', 'ActivityDepthHeightMeasure'), + true + ) +}) + +test('Should accept Groundwater ActivityMediaName with WellDepthMeasure', async (t) => { + const valid = validate({ + ActivityMediaName: 'Groundwater', + MonitoringLocationType: 'Well', + WellUseType: 'Domestic', + WellDepthMeasure: -10, + WellDepthUnit: 'm', + }) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'required', 'WellDepthMeasure'), + false + ) + assert.equal( + checkProperty(validate.errors, 'required', 'BoreholeDepthMeasure'), + false + ) +}) + +test('Should accept Groundwater ActivityMediaName with ActivityDepthHeightMeasure', async (t) => { + const valid = validate({ + ActivityMediaName: 'Groundwater', + MonitoringLocationType: 'Well', + WellUseType: 'Domestic', + ActivityDepthHeightMeasure: -5, + ActivityDepthHeightUnit: 'm', + ActivityDepthAltitudeReferencePoint: 'Ground surface', + }) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'required', 'ActivityDepthHeightMeasure'), + false + ) + assert.equal( + checkProperty(validate.errors, 'required', 'BoreholeDepthMeasure'), + false + ) +}) + +test('Should accept non-GW ActivityMediaName without any depth measure', async (t) => { + const valid = validate({ + ActivityMediaName: 'Surface Water', + MonitoringLocationType: 'River/Stream', + }) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'required', 'BoreholeDepthMeasure'), + false + ) + assert.equal( + checkProperty(validate.errors, 'required', 'WellDepthMeasure'), + false + ) + assert.equal( + checkProperty(validate.errors, 'required', 'ActivityDepthHeightMeasure'), + false + ) +}) + +// *** GroundwaterFields-ActivityMediaName-Groundwater *** // +test('Should reject Surface Water with WellID (GW-only field)', async (t) => { + const valid = validate({ + ActivityMediaName: 'Surface Water', + MonitoringLocationType: 'River/Stream', + WellID: 'well-123', + WellIDContext: 'AB', + }) + assert.equal(valid, false) + assert.equal( + checkProperty( + validate.errors, + 'message', + 'error-GroundwaterFields-ActivityMediaName-Groundwater' + ), + true + ) + assert.equal( + checkProperty(validate.errors, 'enum', 'ActivityMediaName'), + true + ) + assert.equal( + checkProperty(validate.errors, 'required', 'ActivityMediaName'), + false + ) +}) + +test('Should reject Surface Water with AquiferCode (GW-only field)', async (t) => { + const valid = validate({ + ActivityMediaName: 'Surface Water', + MonitoringLocationType: 'River/Stream', + AquiferCode: 'AQ-01', + }) + assert.equal(valid, false) + assert.equal( + checkProperty( + validate.errors, + 'message', + 'error-GroundwaterFields-ActivityMediaName-Groundwater' + ), + true + ) + assert.equal( + checkProperty(validate.errors, 'enum', 'ActivityMediaName'), + true + ) + assert.equal( + checkProperty(validate.errors, 'required', 'ActivityMediaName'), + false + ) +}) + +test('Should reject Surface Water with WellDepthMeasure (GW-only field)', async (t) => { + const valid = validate({ + ActivityMediaName: 'Surface Water', + MonitoringLocationType: 'River/Stream', + WellDepthMeasure: -10, + WellDepthUnit: 'm', + }) + assert.equal(valid, false) + assert.equal( + checkProperty( + validate.errors, + 'message', + 'error-GroundwaterFields-ActivityMediaName-Groundwater' + ), + true + ) + assert.equal( + checkProperty(validate.errors, 'enum', 'ActivityMediaName'), + true + ) + assert.equal( + checkProperty(validate.errors, 'required', 'ActivityMediaName'), + false + ) +}) + +test('Should reject GW field without ActivityMediaName at all', async (t) => { + const valid = validate({ + MonitoringLocationType: 'Well', + WellID: 'well-123', + WellIDContext: 'AB', + }) + assert.equal(valid, false) + assert.equal( + checkProperty( + validate.errors, + 'message', + 'error-GroundwaterFields-ActivityMediaName-Groundwater' + ), + true + ) + assert.equal( + checkProperty(validate.errors, 'required', 'ActivityMediaName'), + true + ) + assert.equal( + checkProperty(validate.errors, 'enum', 'ActivityMediaName'), + false + ) +}) + +test('Should accept Groundwater with WellID and WellUseType (GW fields allowed)', async (t) => { + const valid = validate({ + ActivityMediaName: 'Groundwater', + MonitoringLocationType: 'Well', + WellID: 'well-123', + WellIDContext: 'AB', + WellUseType: 'Domestic', + WellDepthMeasure: -10, + WellDepthUnit: 'm', + SampleCondition: 'Static, before pumping or purging', + }) + assert.equal(valid, false) + assert.equal( + checkProperty( + validate.errors, + 'message', + 'error-GroundwaterFields-ActivityMediaName-Groundwater' + ), + false + ) + assert.equal( + checkProperty(validate.errors, 'enum', 'ActivityMediaName'), + false + ) + assert.equal( + checkProperty(validate.errors, 'required', 'ActivityMediaName'), + false + ) +}) + +test('Should accept Porewater with WellID and WellUseType (GW fields allowed)', async (t) => { + const valid = validate({ + ActivityMediaName: 'Porewater', + MonitoringLocationType: 'Well', + WellID: 'well-123', + WellIDContext: 'AB', + WellUseType: 'Domestic', + WellDepthMeasure: -10, + WellDepthUnit: 'm', + SampleCondition: 'Static, before pumping or purging', + }) + assert.equal(valid, false) + assert.equal( + checkProperty( + validate.errors, + 'message', + 'error-GroundwaterFields-ActivityMediaName-Groundwater' + ), + false + ) + assert.equal( + checkProperty(validate.errors, 'enum', 'ActivityMediaName'), + false + ) + assert.equal( + checkProperty(validate.errors, 'required', 'ActivityMediaName'), + false + ) +}) + +test('Should reject Surface Water with MonitoringLocationVerticalAccuracyMeasure (GW-only field)', async (t) => { + const valid = validate({ + ActivityMediaName: 'Surface Water', + MonitoringLocationType: 'River/Stream', + MonitoringLocationVerticalAccuracyMeasure: 0.5, + MonitoringLocationVerticalAccuracyUnit: 'm', + }) + assert.equal(valid, false) + assert.equal( + checkProperty( + validate.errors, + 'message', + 'error-GroundwaterFields-ActivityMediaName-Groundwater' + ), + true + ) + assert.equal( + checkProperty(validate.errors, 'enum', 'ActivityMediaName'), + true + ) + assert.equal( + checkProperty(validate.errors, 'required', 'ActivityMediaName'), + false + ) +}) + +test('Should reject Surface Water with SampleCollectionMethodID (GW-only field)', async (t) => { + const valid = validate({ + ActivityMediaName: 'Surface Water', + MonitoringLocationType: 'River/Stream', + SampleCollectionMethodID: 'method-1', + SampleCollectionMethodContext: 'USEPA', + SampleCollectionMethodName: 'Test method', + }) + assert.equal(valid, false) + assert.equal( + checkProperty( + validate.errors, + 'message', + 'error-GroundwaterFields-ActivityMediaName-Groundwater' + ), + true + ) + assert.equal( + checkProperty(validate.errors, 'enum', 'ActivityMediaName'), + true + ) + assert.equal( + checkProperty(validate.errors, 'required', 'ActivityMediaName'), + false + ) +}) // *** one off *** // /*test('one off', async (t) => { @@ -857,8 +1658,8 @@ test("Should reject when Salinity and ResultDetectionQuantitationLimitUnit=`ppt` }) console.log(validate.errors) console.log(validate.errors[0].params) - t.is(valid, false) - t.is( + assert.equal(valid, false) + assert.equal( checkProperty( validate.errors, 'enum', diff --git a/schemas/data/test/messages.js b/schemas/data/test/messages.js index 80610070..4606f833 100644 --- a/schemas/data/test/messages.js +++ b/schemas/data/test/messages.js @@ -1,52 +1,165 @@ -import test from 'ava' - +import { test } from 'node:test' +import assert from 'node:assert/strict' import en from '../locales/en-CA.js' import validate from '../quality-control/index.js' +import validateFrontend from '../frontend/index.js' +import validateExtract from '../extract/index.js' test('Should transform error message', async (t) => { const valid = validate({ ActivityType: 'Field Msr/Obs', CharacteristicName: 'Temperature, water', - ResultSampleFraction: 'Filtered' + ResultSampleFraction: 'Filtered', }) en(validate.errors) - t.is(valid, false) + assert.equal(valid, false) }) test('Should transform enum error message', async (t) => { const valid = validate({ CharacteristicName: 'pH', ResultValue: 7, - ResultUnit: 'mg/L' + ResultUnit: 'mg/L', }) - t.is(valid, false) + assert.equal(valid, false) en(validate.errors) - t.true(validate.errors.every(e => typeof e.message === 'string' && e.message.length > 0)) + assert.equal( + validate.errors.every( + (e) => typeof e.message === 'string' && e.message.length > 0 + ), + true + ) }) test('Should transform minimum error message', async (t) => { const valid = validate({ ResultValue: -1, - ResultUnit: 'mg/l' + ResultUnit: 'mg/l', }) - t.is(valid, false) + assert.equal(valid, false) en(validate.errors) - t.true(validate.errors.every(e => typeof e.message === 'string' && e.message.length > 0)) + assert.equal( + validate.errors.every( + (e) => typeof e.message === 'string' && e.message.length > 0 + ), + true + ) }) test('Should transform pattern error message', async (t) => { const valid = validate({ ActivityStartDate: '2020-01-01', - ActivityStartTime: '9:30:00' + ActivityStartTime: '9:30:00', }) - t.is(valid, false) + assert.equal(valid, false) en(validate.errors) - t.true(validate.errors.every(e => typeof e.message === 'string' && e.message.length > 0)) + assert.equal( + validate.errors.every( + (e) => typeof e.message === 'string' && e.message.length > 0 + ), + true + ) }) test('Should handle null errors gracefully', async (t) => { const valid = validate({}) - t.is(valid, true) + assert.equal(valid, true) en(validate.errors) - t.pass() +}) + +// *** definitions-level errorMessage surfaces in frontend/extract *** // +// Regression guard: the build must NOT strip errorMessage from the shared +// definitions build (see bin/build `clean definitions`), or these friendly +// messages silently fall back to the raw regex. +const messageFor = (fn, record, field) => { + fn(record) + const errors = fn.errors ?? [] + en(errors) + return errors.find( + (e) => e.instancePath === '/' + field && e.keyword === 'errorMessage' + )?.message +} + +const validRow = { + DatasetName: 'Test', + MonitoringLocationID: 'L1', + MonitoringLocationName: 'Station 1', + MonitoringLocationLatitude: '45.4215', + MonitoringLocationLongitude: '-75.6972', + MonitoringLocationHorizontalCoordinateReferenceSystem: 'WGS84', + MonitoringLocationType: 'Estuary', + ActivityType: 'Field Msr/Obs', + ActivityMediaName: 'Surface Water', + ActivityStartDate: '2026-06-15', + CharacteristicName: 'Temperature, water', + ResultValue: '18.5', + ResultUnit: 'deg C', + ResultValueType: 'Actual', +} + +test('frontend surfaces the friendly single-line string message', async (t) => { + const message = messageFor( + validateFrontend, + { ...validRow, EventID: 'a\nb' }, + 'EventID' + ) + assert.match(message, /Only letters, numbers/) +}) + +test('extract surfaces the friendly single-line string message', async (t) => { + const message = messageFor( + validateExtract, + { ...validRow, EventID: 'a\nb' }, + 'EventID' + ) + assert.match(message, /Only letters, numbers/) +}) + +test('frontend surfaces the friendly multiline string message', async (t) => { + const message = messageFor( + validateFrontend, + { ...validRow, ResultComment: 'a\tb' }, + 'ResultComment' + ) + assert.match(message, /line feeds\/carriage returns are allowed/) +}) + +test('frontend surfaces the friendly date-format message', async (t) => { + const message = messageFor( + validateFrontend, + { ...validRow, ActivityStartDate: 'not-a-date' }, + 'ActivityStartDate' + ) + assert.match(message, /YYYY-MM-DD/) +}) + +test('frontend surfaces the friendly loose-time message', async (t) => { + const message = messageFor( + validateFrontend, + { ...validRow, ActivityStartTime: '99:99' }, + 'ActivityStartTime' + ) + assert.match(message, /HH:MM:SS/) +}) + +test('extract surfaces the friendly strict-time message', async (t) => { + const message = messageFor( + validateExtract, + { ...validRow, ActivityStartTime: '9:30:00' }, + 'ActivityStartTime' + ) + assert.match(message, /leading zero/) +}) + +test('frontend surfaces the friendly timezone message', async (t) => { + const message = messageFor( + validateFrontend, + { + ...validRow, + ActivityStartTime: '12:00:00', + ActivityStartTimeZone: 'bad', + }, + 'ActivityStartTimeZone' + ) + assert.match(message, /-06:00/) }) diff --git a/schemas/data/test/primary.js b/schemas/data/test/primary.js new file mode 100644 index 00000000..929bf514 --- /dev/null +++ b/schemas/data/test/primary.js @@ -0,0 +1,182 @@ +import { test } from 'node:test' +import assert from 'node:assert/strict' +import primary from '../primary/index.json' with { type: 'json' } +import frontend from '../frontend/index.json' with { type: 'json' } +import extract from '../extract/index.json' with { type: 'json' } +import backend from '../backend/index.json' with { type: 'json' } +import qualityControl from '../quality-control/index.json' with { type: 'json' } + +const flavours = { + primary, + frontend, + extract, + backend, + 'quality-control': qualityControl, +} +const main = primary.allOf[0] + +// *** $id contract *** // +test('primary $id matches the published URL', () => { + assert.equal(primary.$id, 'https://datastream.org/schema/data/primary.json') +}) + +test('all flavour $ids match their filesystem paths', () => { + for (const [flavour, schema] of Object.entries(flavours)) { + assert.equal( + schema.$id, + `https://datastream.org/schema/data/${flavour}.json`, + `${flavour}/index.json` + ) + } +}) + +// *** structural integrity *** // +test('primary has no unresolved $refs (fully dereferenced bundle)', () => { + assert.equal(JSON.stringify(primary).includes('"$ref":'), false) +}) + +test('primary has no transform keyword (strict, no coercion)', () => { + assert.equal(JSON.stringify(primary).includes('"transform":'), false) +}) + +// *** required fields contract *** // +test('primary required fields match the documented contract', () => { + assert.deepEqual(main.required.sort(), [ + 'ActivityMediaName', + 'ActivityStartDate', + 'ActivityType', + 'CharacteristicName', + 'DatasetName', + 'MonitoringLocationHorizontalCoordinateReferenceSystem', + 'MonitoringLocationID', + 'MonitoringLocationLatitude', + 'MonitoringLocationLongitude', + 'MonitoringLocationName', + 'MonitoringLocationType', + 'ResultValueType', + ]) +}) + +// *** GW field constraints (pinned) *** // +test('AquiferCode is text with maxLength 10', () => { + const f = main.properties.AquiferCode + assert.equal(f.type, 'string') + assert.equal(f.maxLength, 10) +}) + +test('WellID is text with maxLength 55', () => { + const f = main.properties.WellID + assert.equal(f.type, 'string') + assert.equal(f.maxLength, 55) +}) + +test('SampleCollectionMethodID has maxLength 50', () => { + assert.equal(main.properties.SampleCollectionMethodID.maxLength, 50) +}) + +test('SampleCollectionMethodName has maxLength 300', () => { + assert.equal(main.properties.SampleCollectionMethodName.maxLength, 300) +}) + +test('BoreholeDepthMeasure has maximum 0', () => { + assert.equal(main.properties.BoreholeDepthMeasure.maximum, 0) +}) + +test('WellDepthMeasure has maximum 0', () => { + assert.equal(main.properties.WellDepthMeasure.maximum, 0) +}) + +test('WellOpenIntervalTopMeasure has maximum 0', () => { + assert.equal(main.properties.WellOpenIntervalTopMeasure.maximum, 0) +}) + +test('WellOpenIntervalBottomMeasure has maximum 0', () => { + assert.equal(main.properties.WellOpenIntervalBottomMeasure.maximum, 0) +}) + +test('MonitoringLocationVerticalAccuracyMeasure has minimum 0', () => { + assert.equal( + main.properties.MonitoringLocationVerticalAccuracyMeasure.minimum, + 0 + ) +}) + +test('ActivityDepthAltitudeReferencePointMeasure has minimum 0', () => { + assert.equal( + main.properties.ActivityDepthAltitudeReferencePointMeasure.minimum, + 0 + ) +}) + +// *** non-GW field constraints (pinned) *** // +test('MonitoringLocationLatitude bounded to 0..90 (northern hemisphere)', () => { + const f = main.properties.MonitoringLocationLatitude + assert.equal(f.minimum, 0) + assert.equal(f.maximum, 90) +}) + +test('MonitoringLocationLongitude bounded to -180..180', () => { + const f = main.properties.MonitoringLocationLongitude + assert.equal(f.minimum, -180) + assert.equal(f.maximum, 180) +}) + +test('MonitoringLocationHorizontalAccuracyMeasure has minimum 0', () => { + assert.equal( + main.properties.MonitoringLocationHorizontalAccuracyMeasure.minimum, + 0 + ) +}) + +test('DatasetName has length 1..512', () => { + const f = main.properties.DatasetName + assert.equal(f.minLength, 1) + assert.equal(f.maxLength, 512) +}) + +test('MonitoringLocationID has length 1..55', () => { + const f = main.properties.MonitoringLocationID + assert.equal(f.minLength, 1) + assert.equal(f.maxLength, 55) +}) + +test('MonitoringLocationName has length 1..255', () => { + const f = main.properties.MonitoringLocationName + assert.equal(f.minLength, 1) + assert.equal(f.maxLength, 255) +}) + +test('LaboratoryName has maxLength 100', () => { + assert.equal(main.properties.LaboratoryName.maxLength, 100) +}) + +test('LaboratorySampleID has maxLength 60', () => { + assert.equal(main.properties.LaboratorySampleID.maxLength, 60) +}) + +test('EventID is text with maxLength 255', () => { + const f = main.properties.EventID + assert.equal(f.type, 'string') + assert.equal(f.maxLength, 255) +}) + +test('ResultComment has maxLength 4000', () => { + assert.equal(main.properties.ResultComment.maxLength, 4000) +}) + +test('ResultAnalyticalMethodID has maxLength 50', () => { + assert.equal(main.properties.ResultAnalyticalMethodID.maxLength, 50) +}) + +test('ResultAnalyticalMethodName has maxLength 300', () => { + assert.equal(main.properties.ResultAnalyticalMethodName.maxLength, 300) +}) + +// *** cross-flavour consistency *** // +test('primary, frontend, extract, and backend define the same property names', () => { + const pProps = Object.keys(main.properties).sort() + for (const flavour of ['frontend', 'extract', 'backend']) { + const props = Object.keys(flavours[flavour].allOf[0].properties).sort() + assert.deepEqual(props, pProps, `${flavour} differs from primary`) + } +}) diff --git a/schemas/data/test/quality-control.js b/schemas/data/test/quality-control.js index b41a0878..9cbb3d82 100644 --- a/schemas/data/test/quality-control.js +++ b/schemas/data/test/quality-control.js @@ -1,5 +1,5 @@ -import test from 'ava' - +import { test } from 'node:test' +import assert from 'node:assert/strict' import validate from '../quality-control/index.js' const defaultObject = { @@ -21,7 +21,7 @@ const defaultObject = { ResultValue: 99.99, ResultUnit: '#/100ml', ResultValueType: 'Actual', - ResultStatusID: 'Accepted', + ResultStatusID: 'Validated', ResultComment: 'None at this time', ResultAnalyticalMethodID: '1', ResultAnalyticalMethodContext: 'APHA', @@ -33,7 +33,7 @@ const defaultObject = { LaboratorySampleID: '101010011110', AnalysisStartDate: '2018-02-23', AnalysisStartTime: '13:15:00', - AnalysisStartTimeZone: '-06:00' + AnalysisStartTimeZone: '-06:00', } const checkProperty = (errors, keyword, property) => { @@ -85,7 +85,8 @@ const checkProperty = (errors, keyword, property) => { error.instancePath.includes(property) ) { return true - } else if (keyword === 'pattern' && error.instancePath.includes(property)) return true + } else if (keyword === 'pattern' && error.instancePath.includes(property)) + return true } return false } @@ -93,7 +94,7 @@ const checkProperty = (errors, keyword, property) => { test('Should accept with empty object', async (t) => { const obj = {} const valid = validate(obj) - t.true(valid) + assert.equal(valid, true) }) test('Should accept with undefined values', async (t) => { @@ -102,7 +103,7 @@ test('Should accept with undefined values', async (t) => { obj[key] = undefined } const valid = validate(obj) - t.is(valid, true) + assert.equal(valid, true) }) // test('Should accept with empty strings values', function(done) { @@ -115,170 +116,236 @@ test('Should accept with undefined values', async (t) => { // } // const valid = validate(obj) // console.log(valid, JSON.stringify(validate.errors, null, 2)) -// t.is(valid, true) +// assert.equal(valid, true) // // }) test('Should reject improperly formatted time', async (t) => { const valid = validate({ ActivityStartDate: '2020-01-01', - ActivityStartTime: '9:30:00' + ActivityStartTime: '9:30:00', }) - t.is(valid, false) - t.is(checkProperty(validate.errors, 'pattern', 'ActivityStartTime'), true) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'pattern', 'ActivityStartTime'), + true + ) }) // *** ActivityMediaName-ActivityDepthHeightMeasure-Maximum *** // -test('Should reject ActivityDepthHeightMeasure > 0 when ActivityMediaName is set', async (t) => { +// The depth-maximum hard error (see test/logic.js) now covers the other media; +// the QC warning covers Groundwater/Porewater only. +test('Should warn ActivityDepthHeightMeasure > 0 when ActivityMediaName is Porewater', async (t) => { const valid = validate({ - ActivityMediaName: 'Surface Water', + ActivityMediaName: 'Porewater', ActivityDepthHeightMeasure: 1, - ActivityDepthHeightUnit: 'm' + ActivityDepthHeightUnit: 'm', }) - t.is(valid, false) - t.is( + assert.equal(valid, false) + assert.equal( checkProperty(validate.errors, 'maximum', 'ActivityDepthHeightMeasure'), true ) }) -test('Should accept ActivityDepthHeightMeasure < 0 when ActivityMediaName is set', async (t) => { +test('Should accept ActivityDepthHeightMeasure = 0 when ActivityMediaName is Groundwater', async (t) => { const valid = validate({ - ActivityMediaName: 'Surface Water', - ActivityDepthHeightMeasure: -1, - ActivityDepthHeightUnit: 'm' + ActivityMediaName: 'Groundwater', + ActivityDepthHeightMeasure: 0, + ActivityDepthHeightUnit: 'm', + }) + assert.equal(valid, true) +}) +test('Should accept when ActivityDepthHeightMeasure is not set and when ActivityMediaName is Groundwater', async (t) => { + const valid = validate({ + ActivityMediaName: 'Groundwater', }) - t.is(valid, true) + assert.equal(valid, true) }) -test('Should accept ActivityDepthHeightMeasure = 0 when ActivityMediaName is set', async (t) => { +test('Should NOT raise a QC warning for the Surface Water medium (enforced as a hard error instead)', async (t) => { const valid = validate({ ActivityMediaName: 'Surface Water', - ActivityDepthHeightMeasure: 0, - ActivityDepthHeightUnit: 'm' + ActivityDepthHeightMeasure: 1, + ActivityDepthHeightUnit: 'm', }) - t.is(valid, true) + assert.equal(valid, true) + assert.equal( + checkProperty(validate.errors, 'maximum', 'ActivityDepthHeightMeasure'), + false + ) }) -test('Should accept when ActivityDepthHeightMeasure is not set and when ActivityMediaName is set', async (t) => { +test('Should reject ActivityDepthHeightMeasure > 0 when ActivityMediaName is Groundwater', async (t) => { const valid = validate({ - ActivityMediaName: 'Surface Water' + ActivityMediaName: 'Groundwater', + ActivityDepthHeightMeasure: 1, + ActivityDepthHeightUnit: 'm', }) - t.is(valid, true) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'maximum', 'ActivityDepthHeightMeasure'), + true + ) +}) +test('Should accept ActivityDepthHeightMeasure < 0 when ActivityMediaName is Groundwater', async (t) => { + const valid = validate({ + ActivityMediaName: 'Groundwater', + ActivityDepthHeightMeasure: -1, + ActivityDepthHeightUnit: 'm', + }) + assert.equal(valid, true) }) test('Should ignore ActivityDepthHeightMeasure > 0 when ActivityMediaName is other value', async (t) => { const valid = validate({ ActivityMediaName: 'Ambient Air', ActivityDepthHeightMeasure: 1, - ActivityDepthHeightUnit: 'm' + ActivityDepthHeightUnit: 'm', }) - t.is(valid, true) + assert.equal(valid, true) }) test('Should ignore ActivityDepthHeightMeasure > 0 when measure is not defined', async (t) => { const valid = validate({ - ActivityMediaName: 'Surface Water', - ActivityDepthHeightUnit: 'm' + ActivityMediaName: 'Groundwater', + ActivityDepthHeightUnit: 'm', }) - t.is(valid, true) - t.is( + assert.equal(valid, true) + assert.equal( checkProperty(validate.errors, 'maximum', 'ActivityDepthHeightMeasure'), false ) }) test('Should ignore ActivityDepthHeightMeasure > 0 when measure is a string', async (t) => { const valid = validate({ - ActivityMediaName: 'Surface Water', + ActivityMediaName: 'Groundwater', ActivityDepthHeightMeasure: 'unknown', - ActivityDepthHeightUnit: 'm' + ActivityDepthHeightUnit: 'm', }) - t.is(valid, false) - t.is( + assert.equal(valid, false) + assert.equal( checkProperty(validate.errors, 'maximum', 'ActivityDepthHeightMeasure'), false ) }) // ActivityType-CTS-ActivityStartTimeZone -test("Should accept ActivityType without ActivityStartTimeZone for non-CTS", async (t) => { +test('Should accept ActivityType without ActivityStartTimeZone for non-CTS', async (t) => { const valid = validate({ - ActivityType: "Field Msr/Obs", - }); - t.true(valid); - t.is(checkProperty(validate.errors, "required", "ActivityType"), false); - t.is(checkProperty(validate.errors, "required", "ActivityStartTimeZone"), false); -}); + ActivityType: 'Field Msr/Obs', + }) + assert.equal(valid, true) + assert.equal( + checkProperty(validate.errors, 'required', 'ActivityType'), + false + ) + assert.equal( + checkProperty(validate.errors, 'required', 'ActivityStartTimeZone'), + false + ) +}) -test("Should accept ActivityType with ActivityStartTimeZone for non-CTS", async (t) => { +test('Should accept ActivityType with ActivityStartTimeZone for non-CTS', async (t) => { const valid = validate({ - ActivityType: "Field Msr/Obs", + ActivityType: 'Field Msr/Obs', ActivityStartTime: '13:15:00', ActivityStartTimeZone: '-03:00', - }); - t.true(valid); - t.is(checkProperty(validate.errors, "required", "ActivityType"), false); - t.is(checkProperty(validate.errors, "required", "ActivityStartTimeZone"), false); -}); + }) + assert.equal(valid, true) + assert.equal( + checkProperty(validate.errors, 'required', 'ActivityType'), + false + ) + assert.equal( + checkProperty(validate.errors, 'required', 'ActivityStartTimeZone'), + false + ) +}) -test("Should reject ActivityType without ActivityStartTimeZone for CTS", async (t) => { +test('Should reject ActivityType without ActivityStartTimeZone for CTS', async (t) => { const valid = validate({ - ActivityType: "Field Msr/Obs-Continuous Time Series", + ActivityType: 'Field Msr/Obs-Continuous Time Series', ActivityStartDate: '2025-01-01', - ActivityStartTime: '13:15:00' - }); - t.false(valid); - t.is(checkProperty(validate.errors, "required", "ActivityStartTimeZone"), true); -}); + ActivityStartTime: '13:15:00', + }) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'required', 'ActivityStartTimeZone'), + true + ) +}) -test("Should accept ActivityType with ActivityStartTimeZone for CTS", async (t) => { +test('Should accept ActivityType with ActivityStartTimeZone for CTS', async (t) => { const valid = validate({ - ActivityType: "Field Msr/Obs-Continuous Time Series", + ActivityType: 'Field Msr/Obs-Continuous Time Series', ActivityStartTime: '13:15:00', ActivityStartTimeZone: '-06:00', - }); - t.true(valid); - t.is(checkProperty(validate.errors, "required", "ActivityType"), false); - t.is(checkProperty(validate.errors, "required", "ActivityStartTimeZone"), false); -}); + }) + assert.equal(valid, true) + assert.equal( + checkProperty(validate.errors, 'required', 'ActivityType'), + false + ) + assert.equal( + checkProperty(validate.errors, 'required', 'ActivityStartTimeZone'), + false + ) +}) // ActivityType-CTS-ActivityStartTimeZone-UTC -test("Should accept ActivityType with UTC ActivityStartTimeZone for non-CTS", async (t) => { +test('Should accept ActivityType with UTC ActivityStartTimeZone for non-CTS', async (t) => { const valid = validate({ - ActivityType: "Field Msr/Obs", + ActivityType: 'Field Msr/Obs', ActivityStartTime: '13:15:00', ActivityStartTimeZone: '+00:00', - }); - t.true(valid); - t.is(checkProperty(validate.errors, "required", "ActivityType"), false); - t.is(checkProperty(validate.errors, "required", "ActivityStartTimeZone"), false); -}); + }) + assert.equal(valid, true) + assert.equal( + checkProperty(validate.errors, 'required', 'ActivityType'), + false + ) + assert.equal( + checkProperty(validate.errors, 'required', 'ActivityStartTimeZone'), + false + ) +}) -test("Should accept ActivityType-CTS-ActivityStartTimeZone-UTC without ActivityStartTimeZone", async (t) => { +test('Should accept ActivityType-CTS-ActivityStartTimeZone-UTC without ActivityStartTimeZone', async (t) => { const valid = validate({ - ActivityType: "Field Msr/Obs-Continuous Time Series", - ActivityStartDate: '2025-01-01' - }); - t.false(valid) - t.is(checkProperty(validate.errors, "message", "qc-ActivityType-CTS-ActivityStartTimeZone-UTC"), false); -}); + ActivityType: 'Field Msr/Obs-Continuous Time Series', + ActivityStartDate: '2025-01-01', + }) + assert.equal(valid, false) + assert.equal( + checkProperty( + validate.errors, + 'message', + 'qc-ActivityType-CTS-ActivityStartTimeZone-UTC' + ), + false + ) +}) -test("Should reject ActivityType with UTC ActivityStartTimeZone for CTS", async (t) => { +test('Should reject ActivityType with UTC ActivityStartTimeZone for CTS', async (t) => { const valid = validate({ - ActivityType: "Field Msr/Obs-Continuous Time Series", + ActivityType: 'Field Msr/Obs-Continuous Time Series', ActivityStartTime: '13:15:00', ActivityStartTimeZone: '+00:00', - }); - t.false(valid); - t.is(checkProperty(validate.errors, "not", "ActivityStartTimeZone"), true); -}); + }) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'not', 'ActivityStartTimeZone'), + true + ) +}) // *** ActivityType-ResultSampleFraction *** // test('Should reject ResultSampleFraction when ActivityType is set to field', async (t) => { const valid = validate({ ActivityType: 'Field Msr/Obs', CharacteristicName: 'Temperature, water', - ResultSampleFraction: 'Filtered' + ResultSampleFraction: 'Filtered', }) - t.is(valid, false) - t.is( + assert.equal(valid, false) + assert.equal( checkProperty(validate.errors, 'false schema', 'ResultSampleFraction'), true ) @@ -288,34 +355,37 @@ test('Should accept ResultSampleFraction when ActivityType is set to field and C const valid = validate({ ActivityType: 'Field Msr/Obs', CharacteristicName: 'Ammonia, un-ionized', - ResultSampleFraction: 'Filtered' + ResultSampleFraction: 'Filtered', }) - t.is(valid, true) + assert.equal(valid, true) }) test('Should accept empty ResultSampleFraction when ActivityType is set to field', async (t) => { const valid = validate({ ActivityType: 'Field Msr/Obs', - CharacteristicName: 'Temperature, water' + CharacteristicName: 'Temperature, water', }) - t.is(valid, true) + assert.equal(valid, true) }) // *** CharacteristicName-ActivityMediaName-AmbientAir *** // test('Should accept CharacteristicName-ActivityMediaName-AmbientAir', async (t) => { const valid = validate({ CharacteristicName: 'Temperature, air', - ActivityMediaName: 'Ambient Air' + ActivityMediaName: 'Ambient Air', }) - t.is(valid, true) + assert.equal(valid, true) }) test('Should reject CharacteristicName-ActivityMediaName-AmbientAir', async (t) => { const valid = validate({ CharacteristicName: 'Temperature, air', - ActivityMediaName: 'Stormwater' + ActivityMediaName: 'Stormwater', }) - t.is(valid, false) - t.is(checkProperty(validate.errors, 'enum', 'ActivityMediaName'), true) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'enum', 'ActivityMediaName'), + true + ) }) // *** CharacteristicName-ActivityType-Surrogate *** // @@ -323,167 +393,203 @@ test('Should accept CharacteristicName-ActivityType-Surrogate & ResultUnit', asy const valid = validate({ CharacteristicName: '2-Methylnaphthalene-D10', ResultValue: '10', - ResultUnit: "%", - ActivityType: 'Quality Control Sample-Lab Surrogate Control Standard' + ResultUnit: '%', + ActivityType: 'Quality Control Sample-Lab Surrogate Control Standard', }) - t.is(valid, true) + assert.equal(valid, true) }) test('Should reject CharacteristicName-ActivityType-Surrogate & ResultUnit', async (t) => { const valid = validate({ CharacteristicName: '2-Methylnaphthalene-D10', ResultValue: '10', - ResultUnit: "%", - ActivityType: 'Field Msr/Obs-Portable Data Logger' + ResultUnit: '%', + ActivityType: 'Field Msr/Obs-Portable Data Logger', }) - t.is(valid, false) - t.is(checkProperty(validate.errors, 'enum', 'ActivityType'), true) + assert.equal(valid, false) + assert.equal(checkProperty(validate.errors, 'enum', 'ActivityType'), true) }) test('Should accept CharacteristicName-ActivityType-Surrogate & ResultDetectionQuantitationLimitUnit', async (t) => { const valid = validate({ CharacteristicName: 'Indeno[1,2,3-cd]pyrene-d12', ResultDetectionQuantitationLimitMeasure: '10', - ResultDetectionQuantitationLimitUnit: "%", - ActivityType: 'Quality Control Sample-Lab Surrogate Control Standard Duplicate' + ResultDetectionQuantitationLimitUnit: '%', + ActivityType: + 'Quality Control Sample-Lab Surrogate Control Standard Duplicate', }) - t.is(valid, true) + assert.equal(valid, true) }) test('Should reject CharacteristicName-ActivityType-Surrogate & ResultDetectionQuantitationLimitUnit', async (t) => { const valid = validate({ CharacteristicName: 'Indeno[1,2,3-cd]pyrene-d12', ResultDetectionQuantitationLimitMeasure: '10', - ResultDetectionQuantitationLimitUnit: "%", - ActivityType: 'Quality Control Sample-Lab Surrogate Method Blank' + ResultDetectionQuantitationLimitUnit: '%', + ActivityType: 'Quality Control Sample-Lab Surrogate Method Blank', }) - t.is(valid, false) - t.is(checkProperty(validate.errors, 'enum', 'ActivityType'), true) + assert.equal(valid, false) + assert.equal(checkProperty(validate.errors, 'enum', 'ActivityType'), true) }) // *** CharacteristicName-Ammonia *** // test('Should accept CharacteristicName Ammonia, un-ionized', async (t) => { const valid = validate({ - CharacteristicName: 'Ammonia, un-ionized' + CharacteristicName: 'Ammonia, un-ionized', }) - t.is(valid, true) + assert.equal(valid, true) }) test('Should reject CharacteristicName-Ammonia', async (t) => { const valid = validate({ - CharacteristicName: 'Ammonia' + CharacteristicName: 'Ammonia', }) - t.is(valid, false) - t.is(checkProperty(validate.errors, 'not', 'CharacteristicName'), true) - t.is(checkProperty(validate.errors, 'message', 'qc-CharacteristicName-Ammonia'), true) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'not', 'CharacteristicName'), + true + ) + assert.equal( + checkProperty(validate.errors, 'message', 'qc-CharacteristicName-Ammonia'), + true + ) }) // *** CharacteristicName-Metal-ResultSampleFraction *** // test('Should accept CharacteristicName-Metal-ResultSampleFraction', async (t) => { const valid = validate({ CharacteristicName: 'Iron', - ResultSampleFraction: 'Total' + ResultSampleFraction: 'Total', }) - t.is(valid, true) + assert.equal(valid, true) }) test('Should accept CharacteristicName-Metal-ResultSampleFraction when undefined', async (t) => { const valid = validate({ CharacteristicName: 'Europium', - ResultSampleFraction: undefined + ResultSampleFraction: undefined, }) - t.is(valid, true) + assert.equal(valid, true) }) test('Should reject CharacteristicName-Metal-ResultSampleFraction', async (t) => { const valid = validate({ CharacteristicName: 'Iron', - ResultSampleFraction: 'Total Recoverable' + ResultSampleFraction: 'Total Recoverable', }) - t.is(valid, false) - t.is(checkProperty(validate.errors, 'not', 'ResultSampleFraction'), true) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'not', 'ResultSampleFraction'), + true + ) }) // *** CharacteristicName-MethodSpeciation *** // test('Should accept CharacteristicName-MethodSpeciation when its not expected', async (t) => { const valid = validate({ CharacteristicName: 'Ammonia and ammonium', - MethodSpeciation: 'as N' + MethodSpeciation: 'as N', }) - t.is(valid, true) + assert.equal(valid, true) }) test('Should reject MethodSpeciation when its not expected', async (t) => { const valid = validate({ CharacteristicName: 'pH', - MethodSpeciation: 'as N' + MethodSpeciation: 'as N', }) - t.is(valid, false) - t.is(checkProperty(validate.errors, 'false schema', 'MethodSpeciation'), true) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'false schema', 'MethodSpeciation'), + true + ) }) test('Should accept MethodSpeciation when its expected', async (t) => { const valid = validate({ - CharacteristicName: 'pH' + CharacteristicName: 'pH', }) - t.is(valid, true) + assert.equal(valid, true) }) test('Should accept MethodSpeciation when its not expected', async (t) => { const valid = validate({ - CharacteristicName: 'Ammonia and ammonium' + CharacteristicName: 'Ammonia and ammonium', }) - t.is(valid, true) + assert.equal(valid, true) }) // *** CharacteristicName-pH-ActivityType-Sample *** // -test("Should accept CharacteristicName-pH,lab with ActivityType-Sample", async (t) => { +test('Should accept CharacteristicName-pH,lab with ActivityType-Sample', async (t) => { const valid = validate({ - CharacteristicName: "pH, lab", - ActivityType: "Sample-Routine", - LaboratoryName: "A", - ResultAnalyticalMethodName: "Unspecified" + CharacteristicName: 'pH, lab', + ActivityType: 'Sample-Routine', + LaboratoryName: 'A', + ResultAnalyticalMethodName: 'Unspecified', }) - t.true(valid); - t.is(checkProperty(validate.errors, "required", "CharacteristicName"), false); - t.is(checkProperty(validate.errors, "required", "ActivityType"), false); - t.is(checkProperty(validate.errors, "not", "ActivityType"), false); -}); + assert.equal(valid, true) + assert.equal( + checkProperty(validate.errors, 'required', 'CharacteristicName'), + false + ) + assert.equal( + checkProperty(validate.errors, 'required', 'ActivityType'), + false + ) + assert.equal(checkProperty(validate.errors, 'not', 'ActivityType'), false) +}) -test("Should reject CharacteristicName-pH with ActivityType-Sample", async (t) => { +test('Should reject CharacteristicName-pH with ActivityType-Sample', async (t) => { const valid = validate({ - CharacteristicName: "pH", - ActivityType: "Sample-Routine", - LaboratoryName: "A", - ResultAnalyticalMethodName: "Unspecified" + CharacteristicName: 'pH', + ActivityType: 'Sample-Routine', + LaboratoryName: 'A', + ResultAnalyticalMethodName: 'Unspecified', }) - t.false(valid); - t.is(checkProperty(validate.errors, "not", "ActivityType"), true); - t.is(checkProperty(validate.errors, "message", "qc-CharacteristicName-pH-ActivityType-Sample"), true); -}); + assert.equal(valid, false) + assert.equal(checkProperty(validate.errors, 'not', 'ActivityType'), true) + assert.equal( + checkProperty( + validate.errors, + 'message', + 'qc-CharacteristicName-pH-ActivityType-Sample' + ), + true + ) +}) -test("Should reject CharacteristicName-pH with ActivityType-Quality Control Sample", async (t) => { +test('Should reject CharacteristicName-pH with ActivityType-Quality Control Sample', async (t) => { const valid = validate({ - CharacteristicName: "pH", - ActivityType: "Quality Control Sample-Other", - LaboratoryName: "A", - ResultAnalyticalMethodName: "Unspecified" + CharacteristicName: 'pH', + ActivityType: 'Quality Control Sample-Other', + LaboratoryName: 'A', + ResultAnalyticalMethodName: 'Unspecified', }) - t.false(valid); - t.is(checkProperty(validate.errors, "not", "ActivityType"), true); - t.is(checkProperty(validate.errors, "message", "qc-CharacteristicName-pH-ActivityType-Sample"), true); -}); + assert.equal(valid, false) + assert.equal(checkProperty(validate.errors, 'not', 'ActivityType'), true) + assert.equal( + checkProperty( + validate.errors, + 'message', + 'qc-CharacteristicName-pH-ActivityType-Sample' + ), + true + ) +}) // *** CharacteristicName-Metal-ResultAnalyticalMethodName *** // test('Should accept CharacteristicName-ResultAnalyticalMethodName', async (t) => { const valid = validate({ CharacteristicName: 'Ammonia and ammonium', - ResultAnalyticalMethodName: 'Test Method Name' + ResultAnalyticalMethodName: 'Test Method Name', }) - t.is(valid, true) + assert.equal(valid, true) }) test('Should reject CharacteristicName-ResultAnalyticalMethodName when empty', async (t) => { const valid = validate({ CharacteristicName: 'Day, ice off', - ResultAnalyticalMethodName: undefined + ResultAnalyticalMethodName: undefined, }) - t.is(valid, false) - t.is(checkProperty(validate.errors, 'required', 'ResultAnalyticalMethodName'), true) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'required', 'ResultAnalyticalMethodName'), + true + ) }) // MonitoringLocationDepthHeightMeasure - TODO future? @@ -492,18 +598,18 @@ test('Should reject CharacteristicName-ResultAnalyticalMethodName when empty', a test('Should accept MonitoringLocationLatitude/Longitude when its within bounds', async (t) => { const valid = validate({ MonitoringLocationLatitude: 51, - MonitoringLocationLongitude: -114 + MonitoringLocationLongitude: -114, }) - t.is(valid, true) + assert.equal(valid, true) }) test('Should reject MonitoringLocationLatitude when its out of bounds', async (t) => { const valid = validate({ MonitoringLocationLatitude: 35, - MonitoringLocationLongitude: -114 + MonitoringLocationLongitude: -114, }) - t.is(valid, false) - t.is( + assert.equal(valid, false) + assert.equal( checkProperty(validate.errors, 'minimum', 'MonitoringLocationLatitude'), true ) @@ -512,10 +618,10 @@ test('Should reject MonitoringLocationLatitude when its out of bounds', async (t test('Should reject MonitoringLocationLongitude when its out of bounds', async (t) => { const valid = validate({ MonitoringLocationLatitude: 51, - MonitoringLocationLongitude: -45 + MonitoringLocationLongitude: -45, }) - t.is(valid, false) - t.is( + assert.equal(valid, false) + assert.equal( checkProperty(validate.errors, 'minimum', 'MonitoringLocationLongitude'), true ) @@ -525,39 +631,39 @@ test('Should reject MonitoringLocationLongitude when its out of bounds', async ( test('Should reject ActivityType when ResultAnalyticalMethodContext is YSI', async (t) => { const valid = validate({ ResultAnalyticalMethodContext: 'YSI', - ActivityType: 'Sample-Routine' + ActivityType: 'Sample-Routine', }) - t.is(valid, false) - t.is(checkProperty(validate.errors, 'enum', 'ActivityType'), true) + assert.equal(valid, false) + assert.equal(checkProperty(validate.errors, 'enum', 'ActivityType'), true) }) test('Should reject ActivityType when ResultAnalyticalMethodContext is Oakton', async (t) => { const valid = validate({ ResultAnalyticalMethodContext: 'Oakton', - ActivityType: 'Sample-Routine' + ActivityType: 'Sample-Routine', }) - t.is(valid, false) - t.is(checkProperty(validate.errors, 'enum', 'ActivityType'), true) + assert.equal(valid, false) + assert.equal(checkProperty(validate.errors, 'enum', 'ActivityType'), true) }) test('Should accept ActivityType when ResultAnalyticalMethodContext is YSI', async (t) => { const valid = validate({ ResultAnalyticalMethodContext: 'YSI', - ActivityType: 'Field Msr/Obs-Portable Data Logger' + ActivityType: 'Field Msr/Obs-Portable Data Logger', }) - t.is(valid, true) + assert.equal(valid, true) }) test('Should accept ActivityType when ResultAnalyticalMethodContext is Oakton', async (t) => { const valid = validate({ ResultAnalyticalMethodContext: 'Oakton', - ActivityType: 'Field Msr/Obs-Portable Data Logger' + ActivityType: 'Field Msr/Obs-Portable Data Logger', }) - t.is(valid, true) + assert.equal(valid, true) }) test('Should ignore ActivityType when ResultAnalyticalMethodContext is not YSI', async (t) => { const valid = validate({ - ResultAnalyticalMethodContext: 'ANY' + ResultAnalyticalMethodContext: 'ANY', }) - t.is(valid, true) - // t.is( + assert.equal(valid, true) + // assert.equal( // checkProperty( // validate.errors, // 'minimum', @@ -571,10 +677,10 @@ test('Should ignore ActivityType when ResultAnalyticalMethodContext is not YSI', test('Should reject ResultDetectionQuantitationLimit when measure is below 0', async (t) => { const valid = validate({ ResultDetectionQuantitationLimitMeasure: -1, - ResultDetectionQuantitationLimitUnit: 'mg/l' + ResultDetectionQuantitationLimitUnit: 'mg/l', }) - t.is(valid, false) - t.is( + assert.equal(valid, false) + assert.equal( checkProperty( validate.errors, 'minimum', @@ -586,16 +692,16 @@ test('Should reject ResultDetectionQuantitationLimit when measure is below 0', a test('Should accept ResultDetectionQuantitationLimit when measure is above 0', async (t) => { const valid = validate({ ResultDetectionQuantitationLimitMeasure: 1, - ResultDetectionQuantitationLimitUnit: 'mg/l' + ResultDetectionQuantitationLimitUnit: 'mg/l', }) - t.is(valid, true) + assert.equal(valid, true) }) test('Should ignore ResultDetectionQuantitationLimit when measure is not defined', async (t) => { const valid = validate({ - ResultDetectionQuantitationLimitUnit: 'mg/l' + ResultDetectionQuantitationLimitUnit: 'mg/l', }) - t.is(valid, false) - t.is( + assert.equal(valid, false) + assert.equal( checkProperty( validate.errors, 'minimum', @@ -610,18 +716,18 @@ test('Should accept when CharacteristicName is pH and ResultDetectionQuantitatio const valid = validate({ CharacteristicName: 'pH', ResultDetectionQuantitationLimitMeasure: 7, - ResultDetectionQuantitationLimitUnit: 'None' + ResultDetectionQuantitationLimitUnit: 'None', }) - t.is(valid, true) + assert.equal(valid, true) }) test('Should reject when CharacteristicName is pH and ResultDetectionQuantitationLimitUnit is not None', async (t) => { const valid = validate({ CharacteristicName: 'pH', ResultDetectionQuantitationLimitMeasure: 7, - ResultDetectionQuantitationLimitUnit: 'mg/L' + ResultDetectionQuantitationLimitUnit: 'mg/L', }) - t.is(valid, false) - t.is( + assert.equal(valid, false) + assert.equal( checkProperty( validate.errors, 'enum', @@ -629,26 +735,28 @@ test('Should reject when CharacteristicName is pH and ResultDetectionQuantitatio ), true ) - // t.is(checkProperty(validate.errors, 'false schema', 'ResultDetectionQuantitationLimitUnit'), true) + // assert.equal(checkProperty(validate.errors, 'false schema', 'ResultDetectionQuantitationLimitUnit'), true) }) // *** CharacteristicName-Ratio-ResultDetectionQuantitationLimitUnit-None *** // test('Should accept when CharacteristicName is a ratio and ResultDetectionQuantitationLimitUnit is None', async (t) => { const valid = validate({ - CharacteristicName: 'Sodium adsorption ratio [(Na)/(sq root of 1/2 Ca + Mg)]', + CharacteristicName: + 'Sodium adsorption ratio [(Na)/(sq root of 1/2 Ca + Mg)]', ResultDetectionQuantitationLimitMeasure: 7, - ResultDetectionQuantitationLimitUnit: 'None' + ResultDetectionQuantitationLimitUnit: 'None', }) - t.is(valid, true) + assert.equal(valid, true) }) test('Should reject when CharacteristicName is a ratio and ResultDetectionQuantitationLimitUnit is not None', async (t) => { const valid = validate({ - CharacteristicName: 'Sodium adsorption ratio [(Na)/(sq root of 1/2 Ca + Mg)]', + CharacteristicName: + 'Sodium adsorption ratio [(Na)/(sq root of 1/2 Ca + Mg)]', ResultDetectionQuantitationLimitMeasure: 7, - ResultDetectionQuantitationLimitUnit: 'mg/L' + ResultDetectionQuantitationLimitUnit: 'mg/L', }) - t.is(valid, false) - t.is( + assert.equal(valid, false) + assert.equal( checkProperty( validate.errors, 'enum', @@ -656,7 +764,7 @@ test('Should reject when CharacteristicName is a ratio and ResultDetectionQuanti ), true ) - // t.is(checkProperty(validate.errors, 'false schema', 'ResultDetectionQuantitationLimitUnit'), true) + // assert.equal(checkProperty(validate.errors, 'false schema', 'ResultDetectionQuantitationLimitUnit'), true) }) // *** ResultDetectionQuantitationLimitUnit-NoValue *** // @@ -664,17 +772,17 @@ test('Should accept when ResultDetectionQuantitationLimitMeasure & ResultDetecti const valid = validate({ CharacteristicName: 'Temperature, water', ResultDetectionQuantitationLimitMeasure: 0, - ResultDetectionQuantitationLimitUnit: 'deg C' + ResultDetectionQuantitationLimitUnit: 'deg C', }) - t.is(valid, true) + assert.equal(valid, true) }) test('Should reject when ResultDetectionQuantitationLimitUnit exists without ResultDetectionQuantitationLimitMeasure', async (t) => { const valid = validate({ CharacteristicName: 'Temperature, water', - ResultDetectionQuantitationLimitUnit: 'deg C' + ResultDetectionQuantitationLimitUnit: 'deg C', }) - t.is(valid, false) - t.is( + assert.equal(valid, false) + assert.equal( checkProperty( validate.errors, 'false schema', @@ -688,49 +796,55 @@ test('Should reject when ResultDetectionQuantitationLimitUnit exists without Res test('Should accept ResultSampleFraction-ActivityMediaName-Sediment', async (t) => { const valid = validate({ ActivityMediaName: 'Subsurface Soil/Sediment', - ResultSampleFraction: 'Extractable, other' + ResultSampleFraction: 'Extractable, other', }) - t.is(valid, true) + assert.equal(valid, true) }) test('Should reject ResultSampleFraction-ActivityMediaName-Sediment', async (t) => { const valid = validate({ ActivityMediaName: 'Stormwater', - ResultSampleFraction: 'Extractable, other' + ResultSampleFraction: 'Extractable, other', }) - t.is(valid, false) - t.is(checkProperty(validate.errors, 'enum', 'ActivityMediaName'), true) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'enum', 'ActivityMediaName'), + true + ) }) // *** ResultSampleFraction-FreeAvailable *** // test('Should accept ResultSampleFraction Free Available with Chlorine', async (t) => { const valid = validate({ CharacteristicName: 'Chlorine', - ResultSampleFraction: 'Free Available' + ResultSampleFraction: 'Free Available', }) - t.is(valid, true) + assert.equal(valid, true) }) test('Should accept ResultSampleFraction Free Available with Cyanide', async (t) => { const valid = validate({ CharacteristicName: 'Cyanide', - ResultSampleFraction: 'Free Available' + ResultSampleFraction: 'Free Available', }) - t.is(valid, true) + assert.equal(valid, true) }) test('Should reject ResultSampleFraction Free Available with unrelated CharacteristicName', async (t) => { const valid = validate({ CharacteristicName: 'Iron', - ResultSampleFraction: 'Free Available' + ResultSampleFraction: 'Free Available', }) - t.is(valid, false) - t.is(checkProperty(validate.errors, 'enum', 'CharacteristicName'), true) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'enum', 'CharacteristicName'), + true + ) }) test('Should accept when ResultSampleFraction is not Free Available', async (t) => { const valid = validate({ CharacteristicName: 'Iron', - ResultSampleFraction: 'Total' + ResultSampleFraction: 'Total', }) - t.is(valid, true) + assert.equal(valid, true) }) // *** ResultUnit-Elevation *** // @@ -740,8 +854,8 @@ test('Should accept when ResultSampleFraction is not Free Available', async (t) ResultValue: 1800, ResultUnit: 'm' }) - t.is(valid, false) - t.is(checkProperty(validate.errors, 'enum', 'ResultUnit'), true) + assert.equal(valid, false) + assert.equal(checkProperty(validate.errors, 'enum', 'ResultUnit'), true) }) test('Should accept Water level in MASL', async (t) => { const valid = validate({ @@ -749,7 +863,7 @@ test('Should accept Water level in MASL', async (t) => { ResultValue: 1800, ResultUnit: 'MASL' }) - t.is(valid, true) + assert.equal(valid, true) })*/ // *** ResultUnit-Percent *** // @@ -758,19 +872,19 @@ test('Should reject Taxonomic Richness... in None', async (t) => { CharacteristicName: 'Taxonomic Richness, Ephemeroptera, Plecoptera, Tricoptera', ResultValue: 100, - ResultUnit: 'None' + ResultUnit: 'None', }) - t.is(valid, false) - t.is(checkProperty(validate.errors, 'enum', 'ResultUnit'), true) + assert.equal(valid, false) + assert.equal(checkProperty(validate.errors, 'enum', 'ResultUnit'), true) }) test('Should acceptTaxonomic Richness... in %', async (t) => { const valid = validate({ CharacteristicName: 'Taxonomic Richness, Ephemeroptera, Plecoptera, Tricoptera', ResultValue: 100, - ResultUnit: '%' + ResultUnit: '%', }) - t.is(valid, true) + assert.equal(valid, true) }) // *** CharacteristicName-pH-ResultUnit-None *** // @@ -778,19 +892,19 @@ test('Should accept when CharacteristicName is pH and ResultUnit is None', async const valid = validate({ CharacteristicName: 'pH', ResultValue: 7, - ResultUnit: 'None' + ResultUnit: 'None', }) - t.is(valid, true) + assert.equal(valid, true) }) test('Should reject when CharacteristicName is pH and ResultUnit is not None', async (t) => { const valid = validate({ CharacteristicName: 'pH', ResultValue: 7, - ResultUnit: 'mg/L' + ResultUnit: 'mg/L', }) - t.is(valid, false) - t.is(checkProperty(validate.errors, 'enum', 'ResultUnit'), true) - // t.is(checkProperty(validate.errors, 'false schema', 'ResultUnit'), true) + assert.equal(valid, false) + assert.equal(checkProperty(validate.errors, 'enum', 'ResultUnit'), true) + // assert.equal(checkProperty(validate.errors, 'false schema', 'ResultUnit'), true) }) // *** CharacteristicName-Ratio-ResultUnit-None *** // @@ -798,19 +912,19 @@ test('Should accept when CharacteristicName is a ratio and ResultUnit is None', const valid = validate({ CharacteristicName: 'Anion/cation ratio', ResultValue: 7, - ResultUnit: 'None' + ResultUnit: 'None', }) - t.is(valid, true) + assert.equal(valid, true) }) test('Should reject when CharacteristicName is a ratio and ResultUnit is not None', async (t) => { const valid = validate({ CharacteristicName: 'Anion/cation ratio', ResultValue: 7, - ResultUnit: 'mg/L' + ResultUnit: 'mg/L', }) - t.is(valid, false) - t.is(checkProperty(validate.errors, 'enum', 'ResultUnit'), true) - // t.is(checkProperty(validate.errors, 'false schema', 'ResultUnit'), true) + assert.equal(valid, false) + assert.equal(checkProperty(validate.errors, 'enum', 'ResultUnit'), true) + // assert.equal(checkProperty(validate.errors, 'false schema', 'ResultUnit'), true) }) // *** ResultUnit-NoValue *** // @@ -818,18 +932,21 @@ test('Should accept when ResultValue & ResultUnit exist', async (t) => { const valid = validate({ CharacteristicName: 'Temperature, water', ResultValue: 0, - ResultUnit: 'deg C' + ResultUnit: 'deg C', }) - t.is(valid, true) + assert.equal(valid, true) }) test('Should reject when ResultUnit exists without ResultValue', async (t) => { const valid = validate({ CharacteristicName: 'Temperature, water', - ResultUnit: 'deg C' + ResultUnit: 'deg C', }) - t.is(valid, false) - t.is(checkProperty(validate.errors, 'false schema', 'ResultUnit'), true) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'false schema', 'ResultUnit'), + true + ) }) // *** ResultValue-DepthMaximum *** // @@ -839,8 +956,8 @@ test('Should reject when ResultUnit exists without ResultValue', async (t) => { ResultValue: 1, ResultUnit: 'm' }) - t.is(valid, false) - t.is(checkProperty(validate.errors, 'maximum', 'ResultValue'), true) + assert.equal(valid, false) + assert.equal(checkProperty(validate.errors, 'maximum', 'ResultValue'), true) }) test('Should accept Depth at -1 ft', async (t) => { const valid = validate({ @@ -848,7 +965,7 @@ test('Should accept Depth at -1 ft', async (t) => { ResultValue: -1, ResultUnit: 'ft' }) - t.is(valid, true) + assert.equal(valid, true) })*/ // *** ResultUnit-Turbidity *** // @@ -856,26 +973,29 @@ test('Should accept Turbidity ResultUnit with Turbidity CharacteristicName', asy const valid = validate({ CharacteristicName: 'Turbidity', ResultValue: 10, - ResultUnit: 'NTU' + ResultUnit: 'NTU', }) - t.is(valid, true) + assert.equal(valid, true) }) test('Should reject Turbidity ResultUnit with non-Turbidity CharacteristicName', async (t) => { const valid = validate({ CharacteristicName: 'Iron', ResultValue: 10, - ResultUnit: 'NTU' + ResultUnit: 'NTU', }) - t.is(valid, false) - t.is(checkProperty(validate.errors, 'enum', 'CharacteristicName'), true) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'enum', 'CharacteristicName'), + true + ) }) test('Should accept non-Turbidity ResultUnit with non-Turbidity CharacteristicName', async (t) => { const valid = validate({ CharacteristicName: 'Iron', ResultValue: 10, - ResultUnit: 'mg/L' + ResultUnit: 'mg/L', }) - t.is(valid, true) + assert.equal(valid, true) }) // *** ResultDetectionQuantitationLimitUnit-Turbidity *** // @@ -883,26 +1003,29 @@ test('Should accept Turbidity ResultDetectionQuantitationLimitUnit with Turbidit const valid = validate({ CharacteristicName: 'Turbidity', ResultDetectionQuantitationLimitMeasure: 10, - ResultDetectionQuantitationLimitUnit: 'NTU' + ResultDetectionQuantitationLimitUnit: 'NTU', }) - t.is(valid, true) + assert.equal(valid, true) }) test('Should reject Turbidity ResultDetectionQuantitationLimitUnit with non-Turbidity CharacteristicName', async (t) => { const valid = validate({ CharacteristicName: 'Iron', ResultDetectionQuantitationLimitMeasure: 10, - ResultDetectionQuantitationLimitUnit: 'NTU' + ResultDetectionQuantitationLimitUnit: 'NTU', }) - t.is(valid, false) - t.is(checkProperty(validate.errors, 'enum', 'CharacteristicName'), true) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'enum', 'CharacteristicName'), + true + ) }) test('Should accept non-Turbidity ResultDetectionQuantitationLimitUnit with non-Turbidity CharacteristicName', async (t) => { const valid = validate({ CharacteristicName: 'Iron', ResultDetectionQuantitationLimitMeasure: 10, - ResultDetectionQuantitationLimitUnit: 'mg/L' + ResultDetectionQuantitationLimitUnit: 'mg/L', }) - t.is(valid, true) + assert.equal(valid, true) }) // *** ResultValue-DissolvedOxygenUnit *** // @@ -910,18 +1033,18 @@ test('Should reject Dissolved oxygen (DO) in %', async (t) => { const valid = validate({ CharacteristicName: 'Dissolved oxygen (DO)', ResultValue: 1, - ResultUnit: '%' + ResultUnit: '%', }) - t.is(valid, false) - t.is(checkProperty(validate.errors, 'enum', 'ResultUnit'), true) + assert.equal(valid, false) + assert.equal(checkProperty(validate.errors, 'enum', 'ResultUnit'), true) }) test('Should accept Dissolved oxygen (DO) in mg/L', async (t) => { const valid = validate({ CharacteristicName: 'Dissolved oxygen (DO)', ResultValue: 1, - ResultUnit: 'mg/L' + ResultUnit: 'mg/L', }) - t.is(valid, true) + assert.equal(valid, true) }) // *** ResultValue-DOSatMinimum *** // @@ -929,50 +1052,50 @@ test('Should reject Dissolved oxygen saturation when measure is below 0', async const valid = validate({ CharacteristicName: 'Dissolved oxygen saturation', ResultValue: -1, - ResultUnit: 'mg/l' + ResultUnit: 'mg/l', }) - t.is(valid, false) - t.is(checkProperty(validate.errors, 'minimum', 'ResultValue'), true) + assert.equal(valid, false) + assert.equal(checkProperty(validate.errors, 'minimum', 'ResultValue'), true) }) test('Should accept Dissolved oxygen saturation when measure is above 0', async (t) => { const valid = validate({ CharacteristicName: 'Dissolved oxygen saturation', ResultValue: 1, - ResultUnit: 'mg/l' + ResultUnit: 'mg/l', }) - t.is(valid, true) + assert.equal(valid, true) }) // *** ResultValue-Minimum *** // test('Should reject Result when measure is below 0', async (t) => { const valid = validate({ ResultValue: -1, - ResultUnit: 'mg/l' + ResultUnit: 'mg/l', }) - t.is(valid, false) - t.is(checkProperty(validate.errors, 'minimum', 'ResultValue'), true) + assert.equal(valid, false) + assert.equal(checkProperty(validate.errors, 'minimum', 'ResultValue'), true) }) test('Should accept Result when measure is above 0', async (t) => { const valid = validate({ ResultValue: 1, - ResultUnit: 'mg/l' + ResultUnit: 'mg/l', }) - t.is(valid, true) + assert.equal(valid, true) }) test('Should ignore Result when measure is not defined', async (t) => { const valid = validate({ - ResultUnit: '#/100ml' + ResultUnit: '#/100ml', }) - t.is(valid, false) - t.is(checkProperty(validate.errors, 'minimum', 'ResultValue'), false) + assert.equal(valid, false) + assert.equal(checkProperty(validate.errors, 'minimum', 'ResultValue'), false) }) test('Should ignore Result when measure is a string', async (t) => { const valid = validate({ ResultValue: 'unknown', - ResultUnit: '#/100ml' + ResultUnit: '#/100ml', }) - t.is(valid, false) - t.is(checkProperty(validate.errors, 'minimum', 'ResultValue'), false) + assert.equal(valid, false) + assert.equal(checkProperty(validate.errors, 'minimum', 'ResultValue'), false) }) // *** ResultValue-pH-Range *** // @@ -980,47 +1103,47 @@ test('Should reject pH below range', async (t) => { const valid = validate({ CharacteristicName: 'pH', ResultValue: -1, - ResultUnit: 'None' + ResultUnit: 'None', }) - t.is(valid, false) - t.is(checkProperty(validate.errors, 'minimum', 'ResultValue'), true) + assert.equal(valid, false) + assert.equal(checkProperty(validate.errors, 'minimum', 'ResultValue'), true) }) test('Should reject pH above range', async (t) => { const valid = validate({ CharacteristicName: 'pH', ResultValue: 15, - ResultUnit: 'None' + ResultUnit: 'None', }) - t.is(valid, false) - t.is(checkProperty(validate.errors, 'maximum', 'ResultValue'), true) + assert.equal(valid, false) + assert.equal(checkProperty(validate.errors, 'maximum', 'ResultValue'), true) }) test('Should accept pH within range', async (t) => { const valid = validate({ CharacteristicName: 'pH', ResultValue: 7, - ResultUnit: 'None' + ResultUnit: 'None', }) - t.is(valid, true) + assert.equal(valid, true) }) test('Should ignore pH range check when measure is not defined', async (t) => { const valid = validate({ CharacteristicName: 'pH', - ResultUnit: 'None' + ResultUnit: 'None', }) - t.is(valid, false) // due to another QC - t.is(checkProperty(validate.errors, 'minimum', 'ResultValue'), false) - t.is(checkProperty(validate.errors, 'maximum', 'ResultValue'), false) + assert.equal(valid, false) // due to another QC + assert.equal(checkProperty(validate.errors, 'minimum', 'ResultValue'), false) + assert.equal(checkProperty(validate.errors, 'maximum', 'ResultValue'), false) }) test('Should ignore pH range check when measure is a string', async (t) => { const valid = validate({ CharacteristicName: 'pH', ResultValue: 'Unknown', - ResultUnit: 'None' + ResultUnit: 'None', }) - t.is(valid, false) - t.is(checkProperty(validate.errors, 'minimum', 'ResultValue'), false) - t.is(checkProperty(validate.errors, 'maximum', 'ResultValue'), false) + assert.equal(valid, false) + assert.equal(checkProperty(validate.errors, 'minimum', 'ResultValue'), false) + assert.equal(checkProperty(validate.errors, 'maximum', 'ResultValue'), false) }) // *** ResultValue-Temperature-Range *** // @@ -1028,88 +1151,88 @@ test('Should reject Temperature below range', async (t) => { const valid = validate({ CharacteristicName: 'Temperature, water', ResultValue: -101, - ResultUnit: 'deg C' + ResultUnit: 'deg C', }) - t.is(valid, false) - t.is(checkProperty(validate.errors, 'minimum', 'ResultValue'), true) + assert.equal(valid, false) + assert.equal(checkProperty(validate.errors, 'minimum', 'ResultValue'), true) }) test('Should reject Temperature above range', async (t) => { const valid = validate({ CharacteristicName: 'Temperature, water', ResultValue: 101, - ResultUnit: 'deg C' + ResultUnit: 'deg C', }) - t.is(valid, false) - t.is(checkProperty(validate.errors, 'maximum', 'ResultValue'), true) + assert.equal(valid, false) + assert.equal(checkProperty(validate.errors, 'maximum', 'ResultValue'), true) }) test('Should accept Temperature within range', async (t) => { const valid = validate({ CharacteristicName: 'Temperature, water', ResultValue: 0, - ResultUnit: 'deg C' + ResultUnit: 'deg C', }) - t.is(valid, true) + assert.equal(valid, true) }) test('Should ignore Temperature range check when measure is not defined', async (t) => { const valid = validate({ CharacteristicName: 'Temperature, water', - ResultUnit: 'deg C' + ResultUnit: 'deg C', }) - t.is(valid, false) // due to another QC - t.is(checkProperty(validate.errors, 'minimum', 'ResultValue'), false) - t.is(checkProperty(validate.errors, 'maximum', 'ResultValue'), false) + assert.equal(valid, false) // due to another QC + assert.equal(checkProperty(validate.errors, 'minimum', 'ResultValue'), false) + assert.equal(checkProperty(validate.errors, 'maximum', 'ResultValue'), false) }) test('Should ignore Temperature range check when measure is a string', async (t) => { const valid = validate({ CharacteristicName: 'Temperature, water', ResultValue: 'Unknown', - ResultUnit: 'deg C' + ResultUnit: 'deg C', }) - t.is(valid, false) - t.is(checkProperty(validate.errors, 'minimum', 'ResultValue'), false) - t.is(checkProperty(validate.errors, 'maximum', 'ResultValue'), false) + assert.equal(valid, false) + assert.equal(checkProperty(validate.errors, 'minimum', 'ResultValue'), false) + assert.equal(checkProperty(validate.errors, 'maximum', 'ResultValue'), false) }) // *** ResultValue-DOY-Range *** // test('Should reject DOY below range (1-366)', async (t) => { const valid = validate({ ResultUnit: 'DOY', - ResultValue: 0 + ResultValue: 0, }) - t.is(valid, false) - t.is(checkProperty(validate.errors, 'minimum', 'ResultValue'), true) + assert.equal(valid, false) + assert.equal(checkProperty(validate.errors, 'minimum', 'ResultValue'), true) }) test('Should reject DOY above range (1-366)', async (t) => { const valid = validate({ ResultUnit: 'DOY', - ResultValue: 367 + ResultValue: 367, }) - t.is(valid, false) - t.is(checkProperty(validate.errors, 'maximum', 'ResultValue'), true) + assert.equal(valid, false) + assert.equal(checkProperty(validate.errors, 'maximum', 'ResultValue'), true) }) test('Should accept DOY within range (1-366)', async (t) => { const valid = validate({ ResultUnit: 'DOY', - ResultValue: 300 + ResultValue: 300, }) - t.is(valid, true) + assert.equal(valid, true) }) test('Should ignore DOY range check when measure is not defined', async (t) => { const valid = validate({ - ResultUnit: 'DOY' + ResultUnit: 'DOY', }) - t.is(valid, false) // due to another QC - t.is(checkProperty(validate.errors, 'minimum', 'ResultValue'), false) - t.is(checkProperty(validate.errors, 'maximum', 'ResultValue'), false) + assert.equal(valid, false) // due to another QC + assert.equal(checkProperty(validate.errors, 'minimum', 'ResultValue'), false) + assert.equal(checkProperty(validate.errors, 'maximum', 'ResultValue'), false) }) test('Should ignore DOY range check when measure is a string', async (t) => { const valid = validate({ ResultValue: 'Unknown', - ResultUnit: 'DOY' + ResultUnit: 'DOY', }) - t.is(valid, false) - t.is(checkProperty(validate.errors, 'minimum', 'ResultValue'), false) - t.is(checkProperty(validate.errors, 'maximum', 'ResultValue'), false) + assert.equal(valid, false) + assert.equal(checkProperty(validate.errors, 'minimum', 'ResultValue'), false) + assert.equal(checkProperty(validate.errors, 'maximum', 'ResultValue'), false) }) // *** WhiteSpace *** // @@ -1122,26 +1245,51 @@ test('Should reject columns with extra whitespace', async (t) => { ResultAnalyticalMethodID: ' sum ', ResultAnalyticalMethodName: 'sum ', LaboratoryName: ' sum', - LaboratorySampleID: ' sum ' - }) - t.is(valid, false) - t.is(checkProperty(validate.errors, 'pattern', 'DatasetName'), true) - t.is(checkProperty(validate.errors, 'pattern', 'MonitoringLocationID'), true) - t.is( + LaboratorySampleID: ' sum ', + EventID: ' sum ', + WellID: ' sum ', + AquiferCode: ' sum ', + SampleCollectionMethodID: ' sum ', + SampleCollectionMethodName: ' sum ', + }) + assert.equal(valid, false) + assert.equal(checkProperty(validate.errors, 'pattern', 'DatasetName'), true) + assert.equal( + checkProperty(validate.errors, 'pattern', 'MonitoringLocationID'), + true + ) + assert.equal( checkProperty(validate.errors, 'pattern', 'MonitoringLocationName'), true ) - t.is(checkProperty(validate.errors, 'pattern', 'ResultComment'), true) - t.is( + assert.equal(checkProperty(validate.errors, 'pattern', 'ResultComment'), true) + assert.equal( checkProperty(validate.errors, 'pattern', 'ResultAnalyticalMethodID'), true ) - t.is( + assert.equal( checkProperty(validate.errors, 'pattern', 'ResultAnalyticalMethodName'), true ) - t.is(checkProperty(validate.errors, 'pattern', 'LaboratoryName'), true) - t.is(checkProperty(validate.errors, 'pattern', 'LaboratorySampleID'), true) + assert.equal( + checkProperty(validate.errors, 'pattern', 'LaboratoryName'), + true + ) + assert.equal( + checkProperty(validate.errors, 'pattern', 'LaboratorySampleID'), + true + ) + assert.equal(checkProperty(validate.errors, 'pattern', 'EventID'), true) + assert.equal(checkProperty(validate.errors, 'pattern', 'WellID'), true) + assert.equal(checkProperty(validate.errors, 'pattern', 'AquiferCode'), true) + assert.equal( + checkProperty(validate.errors, 'pattern', 'SampleCollectionMethodID'), + true + ) + assert.equal( + checkProperty(validate.errors, 'pattern', 'SampleCollectionMethodName'), + true + ) }) test('Should accept columns without extra whitespace', async (t) => { const valid = validate({ @@ -1152,7 +1300,66 @@ test('Should accept columns without extra whitespace', async (t) => { ResultAnalyticalMethodID: 'sum', ResultAnalyticalMethodName: 'sum', LaboratoryName: 'sum', - LaboratorySampleID: 'A' + LaboratorySampleID: 'A', + EventID: 'Spring 2018 survey', + WellID: 'W-001', + AquiferCode: 'A1', + SampleCollectionMethodID: 'GRAB-01', + SampleCollectionMethodName: 'Grab sample', + }) + assert.equal(valid, true) +}) + +// *** ResultStatusID-Deprecated *** // +test('Should reject deprecated ResultStatusID Final', async (t) => { + const valid = validate({ + ResultStatusID: 'Final', + }) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'message', 'qc-ResultStatusID-Deprecated'), + true + ) +}) + +test('Should reject deprecated ResultStatusID Accepted', async (t) => { + const valid = validate({ + ResultStatusID: 'Accepted', + }) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'message', 'qc-ResultStatusID-Deprecated'), + true + ) +}) + +test('Should accept ResultStatusID Validated', async (t) => { + const valid = validate({ + ResultStatusID: 'Validated', + }) + assert.equal(valid, true) +}) + +// *** AnalysisStartTime-AnalysisStartTimeZone *** // +test('Should warn when AnalysisStartTime is present without AnalysisStartTimeZone', async (t) => { + const valid = validate({ + AnalysisStartTime: '13:15:00', + }) + assert.equal(valid, false) + assert.equal( + checkProperty( + validate.errors, + 'message', + 'qc-AnalysisStartTime-AnalysisStartTimeZone' + ), + true + ) +}) + +test('Should accept AnalysisStartTime with AnalysisStartTimeZone', async (t) => { + const valid = validate({ + AnalysisStartTime: '13:15:00', + AnalysisStartTimeZone: '-06:00', }) - t.is(valid, true) + assert.equal(valid, true) }) diff --git a/schemas/data/test/required.js b/schemas/data/test/required.js index 554e3a2b..e24eabc0 100644 --- a/schemas/data/test/required.js +++ b/schemas/data/test/required.js @@ -1,268 +1,608 @@ -import test from "ava"; - -import validate from "../frontend/index.js"; +import { test } from 'node:test' +import assert from 'node:assert/strict' +import validate from '../frontend/index.js' const checkProperty = (errors, keyword, property) => { - if (errors === null) return false; + if (errors === null) return false for (const error of errors) { - if (error.keyword === "errorMessage") { - const nested = checkProperty(error.params.errors, keyword, property); - if (nested) return nested; + if (error.keyword === 'errorMessage') { + const nested = checkProperty(error.params.errors, keyword, property) + if (nested) return nested } - if (error.keyword !== keyword) continue; + if (error.keyword !== keyword) continue if ( - ["required", "dependencies"].includes(keyword) && + ['required', 'dependencies'].includes(keyword) && error.params.missingProperty === property ) { - return true; + return true } else if ( - keyword === "additionalProperties" && + keyword === 'additionalProperties' && error.params.additionalProperty === property ) { - return true; + return true } else if ( - keyword === "unevaluatedProperties" && + keyword === 'unevaluatedProperties' && error.params.unevaluatedProperty === property ) { - return true; + return true } else if ( - keyword === "oneOf" && + keyword === 'oneOf' && error.params.passingSchemas.includes(property) ) { - return true; - } else if (keyword === "anyOf") return true; - else if (keyword === "not" && error.instancePath.includes(property)) { - return true; - } else if (keyword === "enum" && error.instancePath.includes(property)) { - return true; - } else if (keyword === "minimum" && error.instancePath.includes(property)) { - return true; + return true + } else if (keyword === 'anyOf') return true + else if (keyword === 'not' && error.instancePath.includes(property)) { + return true + } else if (keyword === 'enum' && error.instancePath.includes(property)) { + return true + } else if (keyword === 'minimum' && error.instancePath.includes(property)) { + return true } else if ( - keyword === "exclusiveMinimum" && + keyword === 'exclusiveMinimum' && error.instancePath.includes(property) ) { - return true; - } else if (keyword === "maximum" && error.instancePath.includes(property)) { - return true; + return true + } else if (keyword === 'maximum' && error.instancePath.includes(property)) { + return true } else if ( - keyword === "exclusiveMaximum" && + keyword === 'exclusiveMaximum' && error.instancePath.includes(property) ) { - return true; + return true } else if ( - keyword === "false schema" && + keyword === 'false schema' && error.instancePath.includes(property) ) { - return true; - } else if (keyword === "pattern") return true; + return true + } else if (keyword === 'pattern') return true } - return false; -}; + return false +} -test("Should not set any defaults", async (t) => { - const data = {}; - const valid = validate(data); - t.false(valid); - t.deepEqual(data, {}); -}); +test('Should not set any defaults', async (t) => { + const data = {} + const valid = validate(data) + assert.equal(valid, false) + assert.deepEqual(data, {}) +}) -test("Should require properties", async (t) => { - const valid = validate({}); - t.is(valid, false); +test('Should require properties', async (t) => { + const valid = validate({}) + assert.equal(valid, false) // #/allOf/0 - t.is(checkProperty(validate.errors, "required", "DatasetName"), true); - t.is( - checkProperty(validate.errors, "required", "MonitoringLocationID"), - true, - ); - t.is( - checkProperty(validate.errors, "required", "MonitoringLocationName"), - true, - ); - t.is( - checkProperty(validate.errors, "required", "MonitoringLocationType"), - true, - ); - t.is( - checkProperty(validate.errors, "required", "MonitoringLocationLatitude"), - true, - ); - t.is( - checkProperty(validate.errors, "required", "MonitoringLocationLongitude"), - true, - ); - t.is( + assert.equal(checkProperty(validate.errors, 'required', 'DatasetName'), true) + assert.equal( + checkProperty(validate.errors, 'required', 'MonitoringLocationID'), + true + ) + assert.equal( + checkProperty(validate.errors, 'required', 'MonitoringLocationName'), + true + ) + assert.equal( + checkProperty(validate.errors, 'required', 'MonitoringLocationType'), + true + ) + assert.equal( + checkProperty(validate.errors, 'required', 'MonitoringLocationLatitude'), + true + ) + assert.equal( + checkProperty(validate.errors, 'required', 'MonitoringLocationLongitude'), + true + ) + assert.equal( checkProperty( validate.errors, - "required", - "MonitoringLocationHorizontalCoordinateReferenceSystem", + 'required', + 'MonitoringLocationHorizontalCoordinateReferenceSystem' ), - true, - ); - t.is(checkProperty(validate.errors, "required", "ActivityType"), true); - t.is(checkProperty(validate.errors, "required", "ActivityMediaName"), true); - t.is(checkProperty(validate.errors, "required", "ActivityStartDate"), true); - t.is(checkProperty(validate.errors, "required", "CharacteristicName"), true); - t.is(checkProperty(validate.errors, "required", "ResultValueType"), true); -}); + true + ) + assert.equal(checkProperty(validate.errors, 'required', 'ActivityType'), true) + assert.equal( + checkProperty(validate.errors, 'required', 'ActivityMediaName'), + true + ) + assert.equal( + checkProperty(validate.errors, 'required', 'ActivityStartDate'), + true + ) + assert.equal( + checkProperty(validate.errors, 'required', 'CharacteristicName'), + true + ) + assert.equal( + checkProperty(validate.errors, 'required', 'ResultValueType'), + true + ) +}) -test("Should not require properties", async (t) => { - const valid = validate({ - DatasetName: "Test", - MonitoringLocationID: "A1", - MonitoringLocationName: "A1 Test", - MonitoringLocationLatitude: "51.0486", - MonitoringLocationLongitude: "-114.0708", - MonitoringLocationHorizontalCoordinateReferenceSystem: "WGS84", - MonitoringLocationType: "Ocean", - ActivityType: "Field Msr/Obs", - ActivityMediaName: "Surface Water", - ActivityDepthHeightMeasure: "-34", - ActivityDepthHeightUnit: "m", - SampleCollectionEquipmentName: "Bucket", - CharacteristicName: "Sulfur", - MethodSpeciation: "as B", - ResultSampleFraction: "Dissolved", - ResultValue: "99.99", - ResultUnit: "ug/l", - ResultValueType: "Actual", - ResultStatusID: "Accepted", - ResultComment: "None at this time", - ResultAnalyticalMethodID: "1", - ResultAnalyticalMethodContext: "APHA", - ActivityStartDate: "2018-02-23", - ActivityStartTime: "13:15:00", - ActivityEndDate: "2018-02-23", - ActivityEndTime: "13:15:00", - LaboratoryName: "Farrell Labs", - LaboratorySampleID: "101010011110", - AnalysisStartDate: "2018-02-23", - AnalysisStartTime: "13:15:00", - AnalysisStartTimeZone: "-06:00", - }); - t.is(valid, true); -}); +test('Should not require properties', async (t) => { + const valid = validate({ + DatasetName: 'Test', + MonitoringLocationID: 'A1', + MonitoringLocationName: 'A1 Test', + MonitoringLocationLatitude: '51.0486', + MonitoringLocationLongitude: '-114.0708', + MonitoringLocationHorizontalCoordinateReferenceSystem: 'WGS84', + MonitoringLocationType: 'Ocean', + ActivityType: 'Field Msr/Obs', + ActivityMediaName: 'Surface Water', + ActivityDepthHeightMeasure: '-34', + ActivityDepthHeightUnit: 'm', + SampleCollectionEquipmentName: 'Bucket', + CharacteristicName: 'Sulfur', + MethodSpeciation: 'as B', + ResultSampleFraction: 'Dissolved', + ResultValue: '99.99', + ResultUnit: 'ug/l', + ResultValueType: 'Actual', + ResultStatusID: 'Accepted', + ResultComment: 'None at this time', + ResultAnalyticalMethodID: '1', + ResultAnalyticalMethodContext: 'APHA', + ActivityStartDate: '2018-02-23', + ActivityStartTime: '13:15:00', + ActivityEndDate: '2018-02-23', + ActivityEndTime: '13:15:00', + LaboratoryName: 'Farrell Labs', + LaboratorySampleID: '101010011110', + AnalysisStartDate: '2018-02-23', + AnalysisStartTime: '13:15:00', + AnalysisStartTimeZone: '-06:00', + }) + assert.equal(valid, true) +}) -test("Should reject additional headers", async (t) => { +test('Should reject additional headers', async (t) => { const valid = validate({ - MonitoringLocationWaterBody: "Lake", - }); - t.is(valid, false); - t.is( + MonitoringLocationWaterBody: 'Lake', + }) + assert.equal(valid, false) + assert.equal( checkProperty( validate.errors, - "unevaluatedProperties", - "MonitoringLocationWaterBody", + 'unevaluatedProperties', + 'MonitoringLocationWaterBody' ), - true, - ); -}); + true + ) +}) + +test('Should treat EventID as an optional, unconditional field', async (t) => { + validate({ EventID: 'Spring 2018 survey' }) + // Recognized column — not rejected as an unknown/additional header. + assert.equal( + checkProperty(validate.errors, 'unevaluatedProperties', 'EventID'), + false + ) + // Imposes no requirement of its own — never reported as required or as a dependency. + assert.equal(checkProperty(validate.errors, 'required', 'EventID'), false) + assert.equal(checkProperty(validate.errors, 'dependencies', 'EventID'), false) +}) -test("Should reject ActivityDepthHeightMeasure AND NOT ActivityDepthHeightUnit", async (t) => { +test('Should reject ActivityDepthHeightMeasure AND NOT ActivityDepthHeightUnit', async (t) => { const valid = validate({ ActivityDepthHeightMeasure: true, - }); - t.is(valid, false); - t.is( - checkProperty(validate.errors, "dependencies", "ActivityDepthHeightUnit"), - true, - ); -}); -test("Should accept ActivityDepthHeightMeasure AND ActivityDepthHeightUnit", async (t) => { + }) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'dependencies', 'ActivityDepthHeightUnit'), + true + ) +}) +test('Should accept ActivityDepthHeightMeasure AND ActivityDepthHeightUnit', async (t) => { const valid = validate({ ActivityDepthHeightMeasure: true, ActivityDepthHeightUnit: true, - }); - t.is(valid, false); - t.is( - checkProperty(validate.errors, "dependencies", "ActivityDepthHeightUnit"), - false, - ); -}); + }) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'dependencies', 'ActivityDepthHeightUnit'), + false + ) +}) -test("Should reject ResultValue AND NOT ResultUnit", async (t) => { +test('Should reject ResultValue AND NOT ResultUnit', async (t) => { const valid = validate({ ResultValue: true, - }); - t.is(valid, false); - t.is(checkProperty(validate.errors, "dependencies", "ResultUnit"), true); -}); -test("Should reject ResultValue AND ResultUnit", async (t) => { + }) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'dependencies', 'ResultUnit'), + true + ) +}) +test('Should reject ResultValue AND ResultUnit', async (t) => { const valid = validate({ ResultValue: true, ResultUnit: true, - }); - t.is(valid, false); - t.is(checkProperty(validate.errors, "dependencies", "ResultUnit"), false); -}); + }) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'dependencies', 'ResultUnit'), + false + ) +}) -test("Should reject ResultDetectionQuantitationLimitMeasure AND NOT ResultDetectionQuantitationLimit{Unit,Type}", async (t) => { +test('Should reject ResultDetectionQuantitationLimitMeasure AND NOT ResultDetectionQuantitationLimit{Unit,Type}', async (t) => { const valid = validate({ ResultDetectionQuantitationLimitMeasure: true, - }); - t.is(valid, false); - t.is( + }) + assert.equal(valid, false) + assert.equal( checkProperty( validate.errors, - "dependencies", - "ResultDetectionQuantitationLimitUnit", + 'dependencies', + 'ResultDetectionQuantitationLimitUnit' ), - true, - ); - t.is( + true + ) + assert.equal( checkProperty( validate.errors, - "dependencies", - "ResultDetectionQuantitationLimitType", + 'dependencies', + 'ResultDetectionQuantitationLimitType' ), - true, - ); -}); -test("Should accept ResultDetectionQuantitationLimitMeasure AND ResultDetectionQuantitationLimit{Unit,Type}", async (t) => { + true + ) +}) +test('Should accept ResultDetectionQuantitationLimitMeasure AND ResultDetectionQuantitationLimit{Unit,Type}', async (t) => { const valid = validate({ ResultDetectionQuantitationLimitMeasure: true, ResultDetectionQuantitationLimitUnit: true, ResultDetectionQuantitationLimitType: true, - }); - t.is(valid, false); - t.is( + }) + assert.equal(valid, false) + assert.equal( checkProperty( validate.errors, - "dependencies", - "ResultDetectionQuantitationLimitUnit", + 'dependencies', + 'ResultDetectionQuantitationLimitUnit' ), - false, - ); - t.is( + false + ) + assert.equal( checkProperty( validate.errors, - "dependencies", - "ResultDetectionQuantitationLimitType", + 'dependencies', + 'ResultDetectionQuantitationLimitType' ), - false, - ); -}); + false + ) +}) -test("Should reject AnalysisStartTime AND NOT AnalysisStartTimeZone", async (t) => { +test('Should accept AnalysisStartTime AND NOT AnalysisStartTimeZone (no longer an error; warning only)', async (t) => { const valid = validate({ AnalysisStartTime: true, - }); - t.false(valid); - t.is( - checkProperty(validate.errors, "dependencies", "AnalysisStartTimeZone"), - true, - ); -}); + }) + assert.equal( + checkProperty(validate.errors, 'dependencies', 'AnalysisStartTimeZone'), + false + ) +}) + +test('Should reject AnalysisStartTimeZone AND NOT AnalysisStartTime', async (t) => { + const valid = validate({ + AnalysisStartTimeZone: true, + }) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'dependencies', 'AnalysisStartTime'), + true + ) +}) -test("Should accept AnalysisStartTime AND AnalysisStartTimeZone", async (t) => { +test('Should accept AnalysisStartTime AND AnalysisStartTimeZone', async (t) => { const valid = validate({ AnalysisStartTime: true, AnalysisStartTimeZone: true, - }); - t.false(valid); - t.is( - checkProperty(validate.errors, "dependencies", "AnalysisStartTimeZone"), - false, - ); -}); + }) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'dependencies', 'AnalysisStartTimeZone'), + false + ) +}) + +// Groundwater-related dependency tests + +test('Should reject MonitoringLocationVerticalMeasure AND NOT MonitoringLocationVerticalUnit', async (t) => { + const valid = validate({ + MonitoringLocationVerticalMeasure: true, + }) + assert.equal(valid, false) + assert.equal( + checkProperty( + validate.errors, + 'dependencies', + 'MonitoringLocationVerticalUnit' + ), + true + ) +}) +test('Should accept MonitoringLocationVerticalMeasure AND MonitoringLocationVerticalUnit', async (t) => { + const valid = validate({ + MonitoringLocationVerticalMeasure: true, + MonitoringLocationVerticalUnit: true, + }) + assert.equal(valid, false) + assert.equal( + checkProperty( + validate.errors, + 'dependencies', + 'MonitoringLocationVerticalUnit' + ), + false + ) +}) + +test('Should reject MonitoringLocationVerticalMeasure AND NOT MonitoringLocationVerticalCollectionMethod', async (t) => { + const valid = validate({ + MonitoringLocationVerticalMeasure: true, + }) + assert.equal(valid, false) + assert.equal( + checkProperty( + validate.errors, + 'dependencies', + 'MonitoringLocationVerticalCollectionMethod' + ), + true + ) +}) +test('Should accept MonitoringLocationVerticalMeasure AND MonitoringLocationVerticalCollectionMethod', async (t) => { + const valid = validate({ + MonitoringLocationVerticalMeasure: true, + MonitoringLocationVerticalCollectionMethod: true, + }) + assert.equal(valid, false) + assert.equal( + checkProperty( + validate.errors, + 'dependencies', + 'MonitoringLocationVerticalCollectionMethod' + ), + false + ) +}) + +test('Should reject MonitoringLocationVerticalMeasure AND NOT MonitoringLocationVerticalCoordinateReferenceSystem', async (t) => { + const valid = validate({ + MonitoringLocationVerticalMeasure: true, + }) + assert.equal(valid, false) + assert.equal( + checkProperty( + validate.errors, + 'dependencies', + 'MonitoringLocationVerticalCoordinateReferenceSystem' + ), + true + ) +}) +test('Should accept MonitoringLocationVerticalMeasure AND MonitoringLocationVerticalCoordinateReferenceSystem', async (t) => { + const valid = validate({ + MonitoringLocationVerticalMeasure: true, + MonitoringLocationVerticalCoordinateReferenceSystem: true, + }) + assert.equal(valid, false) + assert.equal( + checkProperty( + validate.errors, + 'dependencies', + 'MonitoringLocationVerticalCoordinateReferenceSystem' + ), + false + ) +}) + +test('Should reject MonitoringLocationVerticalAccuracyMeasure AND NOT MonitoringLocationVerticalAccuracyUnit', async (t) => { + const valid = validate({ + MonitoringLocationVerticalAccuracyMeasure: true, + }) + assert.equal(valid, false) + assert.equal( + checkProperty( + validate.errors, + 'dependencies', + 'MonitoringLocationVerticalAccuracyUnit' + ), + true + ) +}) +test('Should accept MonitoringLocationVerticalAccuracyMeasure AND MonitoringLocationVerticalAccuracyUnit', async (t) => { + const valid = validate({ + MonitoringLocationVerticalAccuracyMeasure: true, + MonitoringLocationVerticalAccuracyUnit: true, + }) + assert.equal(valid, false) + assert.equal( + checkProperty( + validate.errors, + 'dependencies', + 'MonitoringLocationVerticalAccuracyUnit' + ), + false + ) +}) + +test('Should reject WellID AND NOT WellIDContext', async (t) => { + const valid = validate({ + WellID: true, + }) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'dependencies', 'WellIDContext'), + true + ) +}) +test('Should accept WellID AND WellIDContext', async (t) => { + const valid = validate({ + WellID: true, + WellIDContext: true, + }) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'dependencies', 'WellIDContext'), + false + ) +}) + +test('Should reject BoreholeDepthMeasure AND NOT BoreholeDepthUnit', async (t) => { + const valid = validate({ + BoreholeDepthMeasure: true, + }) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'dependencies', 'BoreholeDepthUnit'), + true + ) +}) +test('Should accept BoreholeDepthMeasure AND BoreholeDepthUnit', async (t) => { + const valid = validate({ + BoreholeDepthMeasure: true, + BoreholeDepthUnit: true, + }) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'dependencies', 'BoreholeDepthUnit'), + false + ) +}) + +test('Should reject WellDepthMeasure AND NOT WellDepthUnit', async (t) => { + const valid = validate({ + WellDepthMeasure: true, + }) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'dependencies', 'WellDepthUnit'), + true + ) +}) +test('Should accept WellDepthMeasure AND WellDepthUnit', async (t) => { + const valid = validate({ + WellDepthMeasure: true, + WellDepthUnit: true, + }) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'dependencies', 'WellDepthUnit'), + false + ) +}) + +test('Should reject WellOpenIntervalTopMeasure AND NOT WellOpenIntervalTopUnit', async (t) => { + const valid = validate({ + WellOpenIntervalTopMeasure: true, + }) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'dependencies', 'WellOpenIntervalTopUnit'), + true + ) +}) +test('Should accept WellOpenIntervalTopMeasure AND WellOpenIntervalTopUnit', async (t) => { + const valid = validate({ + WellOpenIntervalTopMeasure: true, + WellOpenIntervalTopUnit: true, + }) + assert.equal(valid, false) + assert.equal( + checkProperty(validate.errors, 'dependencies', 'WellOpenIntervalTopUnit'), + false + ) +}) + +test('Should reject WellOpenIntervalBottomMeasure AND NOT WellOpenIntervalBottomUnit', async (t) => { + const valid = validate({ + WellOpenIntervalBottomMeasure: true, + }) + assert.equal(valid, false) + assert.equal( + checkProperty( + validate.errors, + 'dependencies', + 'WellOpenIntervalBottomUnit' + ), + true + ) +}) +test('Should accept WellOpenIntervalBottomMeasure AND WellOpenIntervalBottomUnit', async (t) => { + const valid = validate({ + WellOpenIntervalBottomMeasure: true, + WellOpenIntervalBottomUnit: true, + }) + assert.equal(valid, false) + assert.equal( + checkProperty( + validate.errors, + 'dependencies', + 'WellOpenIntervalBottomUnit' + ), + false + ) +}) + +test('Should reject ActivityDepthAltitudeReferencePointMeasure AND NOT ActivityDepthAltitudeReferencePointUnit', async (t) => { + const valid = validate({ + ActivityDepthAltitudeReferencePointMeasure: true, + }) + assert.equal(valid, false) + assert.equal( + checkProperty( + validate.errors, + 'dependencies', + 'ActivityDepthAltitudeReferencePointUnit' + ), + true + ) +}) +test('Should accept ActivityDepthAltitudeReferencePointMeasure AND ActivityDepthAltitudeReferencePointUnit', async (t) => { + const valid = validate({ + ActivityDepthAltitudeReferencePointMeasure: true, + ActivityDepthAltitudeReferencePointUnit: true, + }) + assert.equal(valid, false) + assert.equal( + checkProperty( + validate.errors, + 'dependencies', + 'ActivityDepthAltitudeReferencePointUnit' + ), + false + ) +}) + +test('Should reject SampleCollectionMethodID AND NOT SampleCollectionMethodContext', async (t) => { + const valid = validate({ + SampleCollectionMethodID: true, + }) + assert.equal(valid, false) + assert.equal( + checkProperty( + validate.errors, + 'dependencies', + 'SampleCollectionMethodContext' + ), + true + ) +}) +test('Should accept SampleCollectionMethodID AND SampleCollectionMethodContext', async (t) => { + const valid = validate({ + SampleCollectionMethodID: true, + SampleCollectionMethodContext: true, + }) + assert.equal(valid, false) + assert.equal( + checkProperty( + validate.errors, + 'dependencies', + 'SampleCollectionMethodContext' + ), + false + ) +}) diff --git a/schemas/data/test/transform.js b/schemas/data/test/transform.js index 3d4f2184..f088ec28 100644 --- a/schemas/data/test/transform.js +++ b/schemas/data/test/transform.js @@ -1,7 +1,8 @@ -import test from 'ava' - +import { test } from 'node:test' +import assert from 'node:assert/strict' import validate from '../frontend/index.js' import validateBackend from '../backend/index.js' +import validateExtract from '../extract/index.js' test('Should transform values (frontend)', async (t) => { const valid = validate({ @@ -36,10 +37,10 @@ test('Should transform values (frontend)', async (t) => { LaboratorySampleID: '101010011110 ', AnalysisStartDate: '2018-02-23', AnalysisStartTime: '13:15:00', - AnalysisStartTimeZone: '-06:00' + AnalysisStartTimeZone: '-06:00', }) //console.log(valid, JSON.stringify(validate.errors, null, 2)) - t.is(valid, true) + assert.equal(valid, true) }) test('Should transform values (backend)', async (t) => { @@ -64,6 +65,7 @@ test('Should transform values (backend)', async (t) => { ResultValueType: 'actual', ResultStatusID: 'accepted', ResultComment: ' None at this time', + EventID: ' Spring 2018 survey ', ResultAnalyticalMethodID: ' 1', ResultAnalyticalMethodContext: 'APHA', ResultAnalyticalMethodName: ' Alpha', @@ -75,8 +77,267 @@ test('Should transform values (backend)', async (t) => { LaboratorySampleID: '101010011110 ', AnalysisStartDate: '2018-02-23', AnalysisStartTime: '13:15:00', - AnalysisStartTimeZone: '-06:00' + AnalysisStartTimeZone: '-06:00', }) //console.log(valid, JSON.stringify(validateBackend.errors, null, 2)) - t.is(valid, true) + assert.equal(valid, true) }) + +// *** cross-flavour fixtures *** // +// Each fixture is run through frontend, extract, and backend validators to +// exercise validation paths that the flavour-specific tests above don't reach. + +const crossFlavourFixtures = [ + { + name: 'Groundwater well field measurement', + data: { + DatasetName: 'GW Test', + MonitoringLocationID: 'GW-01', + MonitoringLocationName: 'Test Well', + MonitoringLocationLatitude: 51.0486, + MonitoringLocationLongitude: -114.0708, + MonitoringLocationHorizontalCoordinateReferenceSystem: 'WGS84', + MonitoringLocationVerticalMeasure: 1050, + MonitoringLocationVerticalUnit: 'm', + MonitoringLocationVerticalCoordinateReferenceSystem: 'CGVD2013', + MonitoringLocationVerticalCollectionMethod: + 'GPS Carrier Phase Static Relative Position', + MonitoringLocationVerticalAccuracyMeasure: 0.1, + MonitoringLocationVerticalAccuracyUnit: 'm', + MonitoringLocationType: 'Well', + WellID: 'well-123', + WellIDContext: 'AB', + WellUseType: 'Domestic', + AquiferCode: 'AQ-01', + AquiferUnitName: 'Abbotsford Shallow Aquifer', + AquiferType: 'Confined', + AquiferUnitPorosityType: 'Granular', + LithologyType: 'Sand', + WellDepthMeasure: -30, + WellDepthUnit: 'm', + BoreholeDepthMeasure: -32, + BoreholeDepthUnit: 'm', + WellOpenIntervalTopMeasure: -25, + WellOpenIntervalTopUnit: 'm', + WellOpenIntervalBottomMeasure: -28, + WellOpenIntervalBottomUnit: 'm', + ActivityType: 'Field Msr/Obs', + ActivityMediaName: 'Groundwater', + ActivityStartDate: '2026-01-15', + ActivityStartTime: '12:00:00', + ActivityStartTimeZone: '-06:00', + ActivityDepthAltitudeReferencePoint: 'Top of well casing', + ActivityDepthAltitudeReferencePointMeasure: 27, + ActivityDepthAltitudeReferencePointUnit: 'm', + SampleCondition: 'Static, before pumping or purging', + CharacteristicName: 'Temperature, water', + ResultValue: 8.2, + ResultUnit: 'deg C', + ResultValueType: 'Actual', + ResultStatusID: 'Validated', + }, + }, + { + name: 'Groundwater well routine sample collection', + data: { + DatasetName: 'GW Sample', + MonitoringLocationID: 'GW-04', + MonitoringLocationName: 'Test Well 4', + MonitoringLocationLatitude: 51.0486, + MonitoringLocationLongitude: -114.0708, + MonitoringLocationHorizontalCoordinateReferenceSystem: 'WGS84', + MonitoringLocationVerticalMeasure: 1050, + MonitoringLocationVerticalUnit: 'm', + MonitoringLocationVerticalCoordinateReferenceSystem: 'CGVD2013', + MonitoringLocationVerticalCollectionMethod: + 'GPS Carrier Phase Static Relative Position', + MonitoringLocationVerticalAccuracyMeasure: 0.1, + MonitoringLocationVerticalAccuracyUnit: 'm', + MonitoringLocationType: 'Well', + WellID: 'well-456', + WellIDContext: 'AB', + WellUseType: 'Domestic', + AquiferCode: 'AQ-02', + AquiferUnitName: 'Abbotsford Shallow Aquifer', + AquiferType: 'Confined', + AquiferUnitPorosityType: 'Granular', + LithologyType: 'Sand', + WellDepthMeasure: -30, + WellDepthUnit: 'm', + BoreholeDepthMeasure: -32, + BoreholeDepthUnit: 'm', + WellOpenIntervalTopMeasure: -25, + WellOpenIntervalTopUnit: 'm', + WellOpenIntervalBottomMeasure: -28, + WellOpenIntervalBottomUnit: 'm', + ActivityType: 'Sample-Routine', + ActivityMediaName: 'Groundwater', + ActivityStartDate: '2026-01-15', + ActivityStartTime: '12:00:00', + ActivityStartTimeZone: '-06:00', + ActivityDepthAltitudeReferencePoint: 'Top of well casing', + ActivityDepthAltitudeReferencePointMeasure: 27, + ActivityDepthAltitudeReferencePointUnit: 'm', + SampleCollectionMethodID: 'D4448-01', + SampleCollectionMethodContext: 'ASTM', + SampleCollectionMethodName: + 'Standard guide for sampling ground-water monitoring wells', + SampleCondition: 'Static, before pumping or purging', + CharacteristicName: 'Chloride', + ResultSampleFraction: 'Dissolved', + ResultValue: 12.4, + ResultUnit: 'mg/L', + ResultValueType: 'Actual', + ResultStatusID: 'Validated', + ResultAnalyticalMethodID: 'EPA-300.0', + ResultAnalyticalMethodContext: 'USEPA', + LaboratoryName: 'Test Lab Inc.', + }, + }, + { + name: 'Surface water field measurement', + data: { + DatasetName: 'SW Test', + MonitoringLocationID: 'SW-01', + MonitoringLocationName: 'Test River', + MonitoringLocationLatitude: 51.0486, + MonitoringLocationLongitude: -114.0708, + MonitoringLocationHorizontalCoordinateReferenceSystem: 'WGS84', + MonitoringLocationType: 'River/Stream', + EventID: 'Spring 2018 survey', + ActivityType: 'Field Msr/Obs', + ActivityMediaName: 'Surface Water', + ActivityStartDate: '2026-01-15', + ActivityStartTime: '12:00:00', + ActivityStartTimeZone: '-06:00', + CharacteristicName: 'Temperature, water', + ResultValue: 18.5, + ResultUnit: 'deg C', + ResultValueType: 'Actual', + ResultStatusID: 'Validated', + }, + }, + { + name: 'Groundwater with sample collection method context/ID', + data: { + DatasetName: 'GW Method', + MonitoringLocationID: 'GW-02', + MonitoringLocationName: 'Test Well 2', + MonitoringLocationLatitude: 51.0486, + MonitoringLocationLongitude: -114.0708, + MonitoringLocationHorizontalCoordinateReferenceSystem: 'WGS84', + MonitoringLocationType: 'Well', + WellUseType: 'Domestic', + WellDepthMeasure: -15, + WellDepthUnit: 'm', + SampleCollectionMethodID: 'D4448-01', + SampleCollectionMethodContext: 'ASTM', + SampleCollectionMethodName: + 'Standard guide for sampling ground-water monitoring wells', + ActivityType: 'Field Msr/Obs', + ActivityMediaName: 'Groundwater', + ActivityStartDate: '2026-01-15', + ActivityStartTime: '12:00:00', + ActivityStartTimeZone: '-06:00', + SampleCondition: 'Static, before pumping or purging', + CharacteristicName: 'Temperature, water', + ResultValue: 8.2, + ResultUnit: 'deg C', + ResultValueType: 'Actual', + ResultStatusID: 'Validated', + }, + }, + { + name: 'Groundwater with vertical measure cascade', + data: { + DatasetName: 'GW Vertical', + MonitoringLocationID: 'GW-03', + MonitoringLocationName: 'Test Well 3', + MonitoringLocationLatitude: 51.0486, + MonitoringLocationLongitude: -114.0708, + MonitoringLocationHorizontalCoordinateReferenceSystem: 'WGS84', + MonitoringLocationVerticalMeasure: 1500, + MonitoringLocationVerticalUnit: 'm', + MonitoringLocationVerticalCollectionMethod: + 'GPS Carrier Phase Static Relative Position', + MonitoringLocationVerticalCoordinateReferenceSystem: 'CGVD2013', + MonitoringLocationType: 'Well', + WellUseType: 'Domestic', + WellDepthMeasure: -20, + WellDepthUnit: 'm', + ActivityType: 'Field Msr/Obs', + ActivityMediaName: 'Groundwater', + ActivityStartDate: '2026-01-15', + ActivityStartTime: '12:00:00', + ActivityStartTimeZone: '-06:00', + SampleCondition: 'Static, before pumping or purging', + CharacteristicName: 'Temperature, water', + ResultValue: 8.2, + ResultUnit: 'deg C', + ResultValueType: 'Actual', + ResultStatusID: 'Validated', + }, + }, +] + +for (const { name, data } of crossFlavourFixtures) { + test(`frontend accepts ${name}`, async () => { + assert.equal(validate(structuredClone(data)), true) + }) + test(`extract accepts ${name}`, async () => { + assert.equal(validateExtract(structuredClone(data)), true) + }) + test(`backend accepts ${name}`, async () => { + assert.equal(validateBackend(structuredClone(data)), true) + }) +} + +// *** cross-flavour negative fixtures *** // +// Each fixture mutates the GW well baseline with a single violation. Run +// through all three validators to exercise error-reporting paths. + +const baseline = crossFlavourFixtures[0].data +const negativeFixtures = [ + { + name: 'invalid MonitoringLocationType enum', + mutate: (d) => { + d.MonitoringLocationType = 'NotAType' + }, + }, + { + name: 'WellDepthMeasure > 0 (range violation)', + mutate: (d) => { + d.WellDepthMeasure = 5 + }, + }, + { + name: 'WellID exceeding maxLength', + mutate: (d) => { + d.WellID = 'x'.repeat(56) + d.WellIDContext = 'AB' + }, + }, + { + name: 'AquiferCode exceeding maxLength', + mutate: (d) => { + d.AquiferCode = '12345678901' + }, + }, +] + +for (const { name, mutate } of negativeFixtures) { + const build = () => { + const d = structuredClone(baseline) + mutate(d) + return d + } + test(`frontend rejects ${name}`, async () => { + assert.equal(validate(build()), false) + }) + test(`extract rejects ${name}`, async () => { + assert.equal(validateExtract(build()), false) + }) + test(`backend rejects ${name}`, async () => { + assert.equal(validateBackend(build()), false) + }) +}