mirror of
https://github.com/apache/superset.git
synced 2026-08-01 03:22:26 +00:00
Compare commits
2 Commits
codex/ci-m
...
fix/resolv
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
46c2c9c48f | ||
|
|
801baf0a0a |
2
.github/workflows/bump-python-package.yml
vendored
2
.github/workflows/bump-python-package.yml
vendored
@@ -40,7 +40,7 @@ jobs:
|
||||
uses: ./.github/actions/setup-supersetbot/
|
||||
|
||||
- name: Set up Python ${{ inputs.python-version }}
|
||||
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
||||
uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
|
||||
with:
|
||||
python-version: "3.11"
|
||||
|
||||
|
||||
2
.github/workflows/check-python-deps.yml
vendored
2
.github/workflows/check-python-deps.yml
vendored
@@ -46,7 +46,7 @@ jobs:
|
||||
- name: Login to Docker Hub
|
||||
if: steps.check.outputs.python
|
||||
continue-on-error: true
|
||||
uses: docker/login-action@06fb636fac595d6fb4b28a5dfcb21a6f5091859c # v4.5.0
|
||||
uses: docker/login-action@af1e73f918a031802d376d3c8bbc3fe56130a9b0 # v4.4.0
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USER }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
|
||||
4
.github/workflows/codeql-analysis.yml
vendored
4
.github/workflows/codeql-analysis.yml
vendored
@@ -64,7 +64,7 @@ jobs:
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@e4fba868fa4b1b91e1fdab776edc8cfbe6e9fb81 # v4.37.3
|
||||
uses: github/codeql-action/init@7188fc363630916deb702c7fdcf4e481b751f97a # v4.37.1
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||
@@ -75,6 +75,6 @@ jobs:
|
||||
# queries: security-extended,security-and-quality
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@e4fba868fa4b1b91e1fdab776edc8cfbe6e9fb81 # v4.37.3
|
||||
uses: github/codeql-action/analyze@7188fc363630916deb702c7fdcf4e481b751f97a # v4.37.1
|
||||
with:
|
||||
category: "/language:${{matrix.language}}"
|
||||
|
||||
1
.github/workflows/dependency-review.yml
vendored
1
.github/workflows/dependency-review.yml
vendored
@@ -32,6 +32,7 @@ jobs:
|
||||
persist-credentials: false
|
||||
- name: "Dependency Review"
|
||||
uses: actions/dependency-review-action@a1d282b36b6f3519aa1f3fc636f609c47dddb294 # v5.0.0
|
||||
continue-on-error: true
|
||||
with:
|
||||
fail-on-severity: critical
|
||||
# compatible/incompatible licenses addressed here: https://www.apache.org/legal/resolved.html
|
||||
|
||||
@@ -46,4 +46,4 @@ jobs:
|
||||
run: bash .github/workflows/github-action-validator.sh
|
||||
|
||||
- name: Check for security issues on GHA workflows
|
||||
uses: zizmorcore/zizmor-action@6fc4b006235f201fdab3722e17240ab420d580e5 # v0.6.1
|
||||
uses: zizmorcore/zizmor-action@6599ee8b7a49aef6a770f63d261d214911a7ce02 # v0.6.0
|
||||
|
||||
@@ -2,10 +2,10 @@ name: supersetbot orglabel based on author
|
||||
|
||||
on:
|
||||
issues:
|
||||
types: [opened, edited]
|
||||
types: [created, edited]
|
||||
|
||||
pull_request:
|
||||
types: [opened, edited]
|
||||
types: [created, edited]
|
||||
|
||||
jobs:
|
||||
superbot-orglabel:
|
||||
@@ -30,4 +30,4 @@ jobs:
|
||||
# Label the issue with the appropriate org using supersetbot
|
||||
# - this requires for the author to be publicly associated with their org
|
||||
# - and for the org to be listed in `supersetbot/src/metadata.js`
|
||||
supersetbot orglabel --issue ${{ github.event.number || github.event.issue.number }} --repo ${{ github.repository }} || true
|
||||
supersetbot orglabel --issue ${{ github.event.number }} --repo ${{ github.repository }} || true
|
||||
77
.github/workflows/superset-docs-verify.yml
vendored
77
.github/workflows/superset-docs-verify.yml
vendored
@@ -21,8 +21,8 @@ permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
lychee:
|
||||
# See docs here: https://github.com/lycheeverse/lychee-action
|
||||
linkinator:
|
||||
# See docs here: https://github.com/marketplace/actions/linkinator
|
||||
# Only run on pull_request, not workflow_run
|
||||
if: github.event_name == 'pull_request'
|
||||
name: Link Checking
|
||||
@@ -31,52 +31,37 @@ jobs:
|
||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
# Restores the on-disk request cache (.lycheecache) lychee writes when
|
||||
# `--cache` is set, so re-runs don't re-check every external link from
|
||||
# scratch. Key never matches exactly (github.run_id is unique per run),
|
||||
# so actions/cache always saves a fresh copy afterwards; restore-keys
|
||||
# falls back to the most recent prior cache on lookup.
|
||||
- uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
||||
with:
|
||||
path: .lycheecache
|
||||
key: lychee-cache-${{ github.run_id }}
|
||||
restore-keys: lychee-cache-
|
||||
# v2.8.0 and v2.9.0 are both on ASF Infra's action allowlist
|
||||
# (apache/infrastructure-actions approved_patterns.yml) as of this
|
||||
# writing. Do not bump past v2.9.0 without opening an Infra ticket
|
||||
# to allow the new SHA first!
|
||||
- uses: lycheeverse/lychee-action@e7477775783ea5526144ba13e8db5eec57747ce8 # v2.9.0
|
||||
# Do not bump this linkinator-action version without opening
|
||||
# an ASF Infra ticket to allow the new version first!
|
||||
- uses: JustinBeckwith/linkinator-action@af984b9f30f63e796ae2ea5be5e07cb587f1bbd9 # v2.3
|
||||
continue-on-error: true # This will make the job advisory (non-blocking, no red X)
|
||||
with:
|
||||
fail: false
|
||||
args: >-
|
||||
--verbose --no-progress
|
||||
--cache --max-cache-age 7d
|
||||
--exclude '^https://github.com/apache/(superset|incubator-superset)/(pull|issues)/\d+'
|
||||
--exclude '^https://github.com/apache/(superset|incubator-superset)/commit/[a-f0-9]+'
|
||||
--exclude 'superset-frontend/.*CHANGELOG\.md'
|
||||
--exclude 'http://localhost:8088/'
|
||||
--exclude 'http://127.0.0.1:3000/'
|
||||
--exclude 'http://localhost:9001/'
|
||||
--exclude 'https://charts.bitnami.com/bitnami'
|
||||
--exclude 'https://www.li.me/'
|
||||
--exclude 'https://www.fanatics.com/'
|
||||
--exclude 'https://tails.com/gb/'
|
||||
--exclude 'https://www.techaudit.info/'
|
||||
--exclude 'https://avetilearning.com/'
|
||||
--exclude 'https://www.udemy.com/'
|
||||
--exclude 'https://trustmedis.com/'
|
||||
--exclude 'http://theiconic.com.au/'
|
||||
--exclude 'https://dev.mysql.com/doc/refman/5.7/en/innodb-limits.html'
|
||||
--exclude '^https://img\.shields\.io/.*'
|
||||
--exclude 'https://vkusvill.ru/'
|
||||
--exclude 'https://www.linkedin.com/in/mark-thomas-b16751158/'
|
||||
--exclude 'https://theiconic.com.au/'
|
||||
--exclude 'https://wattbewerb.de/'
|
||||
--exclude 'https://timbr.ai/'
|
||||
--exclude 'https://opensource.org/license/apache-2-0'
|
||||
--exclude 'https://www.plaidcloud.com/'
|
||||
'./**/*.md' './**/*.mdx'
|
||||
paths: "**/*.md, **/*.mdx"
|
||||
linksToSkip: >-
|
||||
^https://github.com/apache/(superset|incubator-superset)/(pull|issues)/\d+,
|
||||
^https://github.com/apache/(superset|incubator-superset)/commit/[a-f0-9]+,
|
||||
superset-frontend/.*CHANGELOG\.md,
|
||||
http://localhost:8088/,
|
||||
http://127.0.0.1:3000/,
|
||||
http://localhost:9001/,
|
||||
https://charts.bitnami.com/bitnami,
|
||||
https://www.li.me/,
|
||||
https://www.fanatics.com/,
|
||||
https://tails.com/gb/,
|
||||
https://www.techaudit.info/,
|
||||
https://avetilearning.com/,
|
||||
https://www.udemy.com/,
|
||||
https://trustmedis.com/,
|
||||
http://theiconic.com.au/,
|
||||
https://dev.mysql.com/doc/refman/5.7/en/innodb-limits.html,
|
||||
^https://img\.shields\.io/.*,
|
||||
https://vkusvill.ru/,
|
||||
https://www.linkedin.com/in/mark-thomas-b16751158/,
|
||||
https://theiconic.com.au/,
|
||||
https://wattbewerb.de/,
|
||||
https://timbr.ai/,
|
||||
https://opensource.org/license/apache-2-0,
|
||||
https://www.plaidcloud.com/
|
||||
|
||||
build-on-pr:
|
||||
# Build docs when PR changes docs/** (uses committed databases.json)
|
||||
|
||||
20
.github/workflows/superset-frontend.yml
vendored
20
.github/workflows/superset-frontend.yml
vendored
@@ -23,12 +23,6 @@ jobs:
|
||||
frontend-build:
|
||||
runs-on: ubuntu-26.04
|
||||
timeout-minutes: 30
|
||||
# The change detector reads the PR's file list, which needs
|
||||
# `pull-requests: read`. Public repos serve that endpoint without it;
|
||||
# private forks return 403.
|
||||
permissions:
|
||||
contents: read
|
||||
pull-requests: read
|
||||
outputs:
|
||||
should-run: ${{ steps.check.outputs.frontend }}
|
||||
steps:
|
||||
@@ -128,13 +122,25 @@ jobs:
|
||||
pattern: coverage-artifacts-*
|
||||
path: coverage/
|
||||
|
||||
- name: Reorganize test result reports
|
||||
run: |
|
||||
find coverage/
|
||||
for i in {1..8}; do
|
||||
mv coverage/coverage-artifacts-${i}/coverage-final.json coverage/coverage-shard-${i}.json
|
||||
done
|
||||
shell: bash
|
||||
|
||||
- name: Merge Code Coverage
|
||||
run: npx nyc merge coverage/ merged-output/coverage-summary.json
|
||||
|
||||
- name: Upload Code Coverage
|
||||
uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0
|
||||
with:
|
||||
flags: javascript
|
||||
use_oidc: true
|
||||
verbose: true
|
||||
directory: coverage
|
||||
disable_search: true
|
||||
files: merged-output/coverage-summary.json
|
||||
slug: apache/superset
|
||||
|
||||
lint-frontend:
|
||||
|
||||
93
.github/workflows/superset-helm-release.yml
vendored
93
.github/workflows/superset-helm-release.yml
vendored
@@ -1,9 +1,6 @@
|
||||
# This workflow automates the release process for Helm charts.
|
||||
# Each run force-recreates a single 'helm-publish' branch from the tip of 'gh-pages' and
|
||||
# opens (or reuses) one pull request against 'gh-pages', allowing the changes to be
|
||||
# reviewed and merged manually. Because chart-releaser rebuilds index.yaml from all
|
||||
# published GitHub releases, the branch always contains every chart released since the
|
||||
# last merge, and the PR can never go stale or conflict with gh-pages.
|
||||
# The workflow creates a new branch for the release and opens a pull request against the 'gh-pages' branch,
|
||||
# allowing the changes to be reviewed and merged manually.
|
||||
|
||||
name: "Helm: release charts"
|
||||
|
||||
@@ -21,12 +18,6 @@ on:
|
||||
required: false
|
||||
default: "master"
|
||||
|
||||
# Serialize runs: concurrent runs would race on force-pushing the shared
|
||||
# helm-publish branch while chart-releaser is mid-release.
|
||||
concurrency:
|
||||
group: helm-release
|
||||
cancel-in-progress: false
|
||||
|
||||
jobs:
|
||||
release:
|
||||
runs-on: ubuntu-26.04
|
||||
@@ -66,9 +57,9 @@ jobs:
|
||||
echo "DEBUG TAGS"
|
||||
git show-ref --tags
|
||||
|
||||
- name: Set pages branch name
|
||||
- name: Create unique pages branch name
|
||||
id: vars
|
||||
run: echo "branch_name=helm-publish" >> $GITHUB_ENV
|
||||
run: echo "branch_name=helm-publish-${GITHUB_SHA:0:7}" >> $GITHUB_ENV
|
||||
|
||||
- name: Force recreate branch from gh-pages
|
||||
env:
|
||||
@@ -106,17 +97,12 @@ jobs:
|
||||
version: v1.6.0
|
||||
charts_dir: helm
|
||||
mark_as_latest: false
|
||||
# A helm/** change without a Chart.yaml version bump repackages the
|
||||
# already-released version; without this, cr aborts on the existing
|
||||
# release tag (422 already_exists) instead of proceeding to rebuild
|
||||
# the index, and the whole run fails.
|
||||
skip_existing: true
|
||||
pages_branch: ${{ env.branch_name }}
|
||||
env:
|
||||
CR_TOKEN: "${{ github.token }}"
|
||||
CR_RELEASE_NAME_TEMPLATE: "superset-helm-chart-{{ .Version }}"
|
||||
|
||||
- name: Open or reuse Pull Request
|
||||
- name: Open Pull Request
|
||||
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
|
||||
with:
|
||||
script: |
|
||||
@@ -127,72 +113,15 @@ jobs:
|
||||
throw new Error("Branch name is not defined.");
|
||||
}
|
||||
|
||||
// The branch is force-recreated from gh-pages on every run, so an
|
||||
// already-open PR for it now reflects this run's charts; opening
|
||||
// another would both fail (422) and recreate the stale-PR pileup
|
||||
// this fixed branch exists to avoid.
|
||||
const { data: existing } = await github.rest.pulls.list({
|
||||
const pr = await github.rest.pulls.create({
|
||||
owner,
|
||||
repo,
|
||||
state: "open",
|
||||
head: `${owner}:${branchName}`,
|
||||
base: "gh-pages",
|
||||
title: `Helm chart release for ${branchName}`,
|
||||
head: branchName,
|
||||
base: "gh-pages", // Adjust if the target branch is different
|
||||
body: `This PR releases Helm charts to the gh-pages branch.`,
|
||||
});
|
||||
|
||||
let current;
|
||||
if (existing.length > 0) {
|
||||
current = existing[0];
|
||||
core.info(`Reusing existing pull request: ${current.html_url}`);
|
||||
} else {
|
||||
const { data: pr } = await github.rest.pulls.create({
|
||||
owner,
|
||||
repo,
|
||||
title: "Helm chart release",
|
||||
head: branchName,
|
||||
base: "gh-pages", // Adjust if the target branch is different
|
||||
body: [
|
||||
"This PR releases Helm charts to the gh-pages branch.",
|
||||
"",
|
||||
"It is force-updated from the tip of `gh-pages` by every release run,",
|
||||
"so it always contains every chart released since the last merge and",
|
||||
"never needs to be closed as superseded.",
|
||||
].join("\n"),
|
||||
});
|
||||
current = pr;
|
||||
core.info(`Pull request created: ${current.html_url}`);
|
||||
}
|
||||
|
||||
// Sweep release PRs left open by older runs (per-SHA helm-publish-*
|
||||
// branches from the previous scheme). Their content is a subset of
|
||||
// the evergreen PR, so close them with a pointer to it.
|
||||
const { data: openPrs } = await github.rest.pulls.list({
|
||||
owner,
|
||||
repo,
|
||||
state: "open",
|
||||
base: "gh-pages",
|
||||
per_page: 100,
|
||||
});
|
||||
|
||||
for (const stale of openPrs) {
|
||||
if (
|
||||
stale.number !== current.number &&
|
||||
stale.head.repo?.full_name === process.env.GITHUB_REPOSITORY &&
|
||||
stale.head.ref.startsWith("helm-publish")
|
||||
) {
|
||||
await github.rest.issues.createComment({
|
||||
owner,
|
||||
repo,
|
||||
issue_number: stale.number,
|
||||
body: `Superseded by #${current.number}, which now carries all unreleased charts. Closing.`,
|
||||
});
|
||||
await github.rest.pulls.update({
|
||||
owner,
|
||||
repo,
|
||||
pull_number: stale.number,
|
||||
state: "closed",
|
||||
});
|
||||
core.info(`Closed superseded release PR #${stale.number}`);
|
||||
}
|
||||
}
|
||||
core.info(`Pull request created: ${pr.data.html_url}`);
|
||||
env:
|
||||
BRANCH_NAME: ${{ env.branch_name }}
|
||||
|
||||
@@ -38,7 +38,7 @@ jobs:
|
||||
- name: Login to Docker Hub
|
||||
if: ${{ steps.dependabot-metadata.outputs.package-ecosystem == 'pip' }}
|
||||
continue-on-error: true
|
||||
uses: docker/login-action@06fb636fac595d6fb4b28a5dfcb21a6f5091859c # v4.5.0
|
||||
uses: docker/login-action@af1e73f918a031802d376d3c8bbc3fe56130a9b0 # v4.4.0
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USER }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
|
||||
@@ -144,7 +144,7 @@ repos:
|
||||
git fetch --no-recurse-submodules origin "$TARGET_BRANCH" 2>/dev/null || true
|
||||
fi
|
||||
BASE=$(git merge-base origin/"$TARGET_BRANCH" HEAD 2>/dev/null) || BASE="HEAD"
|
||||
files=$(git diff --name-only --diff-filter=ACM "$BASE"..HEAD 2>/dev/null | grep '^superset/.*\.py$' | grep -v '^superset/migrations/' || true)
|
||||
files=$(git diff --name-only --diff-filter=ACM "$BASE"..HEAD 2>/dev/null | grep '^superset/.*\.py$' || true)
|
||||
if [ -n "$files" ]; then
|
||||
pylint --rcfile=.pylintrc --load-plugins=superset.extensions.pylint --reports=no $files
|
||||
else
|
||||
|
||||
@@ -29,7 +29,7 @@ under the License.
|
||||
[](https://github.com/apache/superset/commits/master)
|
||||
[](https://github.com/apache/superset/issues)
|
||||
[](https://github.com/apache/superset/pulls)
|
||||
[](https://bit.ly/join-superset-slack)
|
||||
[](http://bit.ly/join-superset-slack)
|
||||
[](https://superset.apache.org)
|
||||
|
||||
<picture width="500">
|
||||
@@ -186,7 +186,7 @@ Try out Superset's [quickstart](https://superset.apache.org/docs/quickstart/) gu
|
||||
## Get Involved
|
||||
|
||||
- Ask and answer questions on [StackOverflow](https://stackoverflow.com/questions/tagged/apache-superset) using the **apache-superset** tag
|
||||
- [Join our community's Slack](https://bit.ly/join-superset-slack)
|
||||
- [Join our community's Slack](http://bit.ly/join-superset-slack)
|
||||
and please read our [Slack Community Guidelines](https://github.com/apache/superset/blob/master/CODE_OF_CONDUCT.md#slack-community-guidelines)
|
||||
- [Join our dev@superset.apache.org Mailing list](https://lists.apache.org/list.html?dev@superset.apache.org). To join, simply send an email to [dev-subscribe@superset.apache.org](mailto:dev-subscribe@superset.apache.org)
|
||||
- Follow us on social media:
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Licensed to the Apache Software Foundation (ASF) under one
|
||||
# or more contributor license agreements. See the NOTICE file
|
||||
# distributed with this work for additional information
|
||||
@@ -15,8 +17,6 @@
|
||||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
#!/bin/bash
|
||||
|
||||
# Function to determine Python command
|
||||
get_python_command() {
|
||||
if command -v python3 &>/dev/null; then
|
||||
|
||||
66
UPDATING.md
66
UPDATING.md
@@ -24,46 +24,6 @@ assists people when migrating to a new version.
|
||||
|
||||
## Next
|
||||
|
||||
### Principal listing APIs now honour related-field filters
|
||||
|
||||
Two authorization-related listing behaviors changed for API clients. Neither
|
||||
affects the Superset UI — `include_ids` and `security/subject` have no frontend
|
||||
callers — but external clients will notice:
|
||||
|
||||
- `GET /api/v1/<resource>/related/<column>?include_ids=...` now applies the
|
||||
endpoint's `base_related_field_filters`. Previously the forced IDs were fetched
|
||||
with no filtering, so a caller could resolve principals the related-field
|
||||
filters deliberately hide; those IDs are now omitted from the response.
|
||||
- `GET /api/v1/security/subject/` now honours `EXCLUDE_USERS_FROM_LISTS` and
|
||||
`EXTRA_RELATED_QUERY_FILTERS`, matching every other principal-listing endpoint.
|
||||
List counts may drop, and fetching an excluded principal via
|
||||
`GET /api/v1/security/subject/<id>` now returns `404`.
|
||||
|
||||
### v1 chart import no longer re-adds the importer as editor on overwrite
|
||||
|
||||
Re-importing over an existing chart (an overwrite or a soft-delete restore) no
|
||||
longer appends the importing user to the chart's `editors`, matching the
|
||||
dashboard importer's behavior. This changes anything only for a user who was not
|
||||
already an editor of that chart — typically an admin overwriting a chart they do
|
||||
not own, who was previously added as an editor as a side effect of the import.
|
||||
Newly-created charts are unaffected.
|
||||
### ClickHouse: system sampling queries retry with a bounded read
|
||||
|
||||
System-generated sampling queries — filter-value dropdowns, the Samples
|
||||
tab/dataset preview, and datetime format detection — that ClickHouse rejects
|
||||
with a `max_rows_to_read` error (`TOO_MANY_ROWS`, code 158) are now retried
|
||||
once with `SETTINGS read_overflow_mode='break'` appended, so they return a
|
||||
partial result bounded by the operator's row cap instead of failing. The retry
|
||||
applies only to statements Superset generates for physical-table datasets;
|
||||
virtual datasets and user-authored SQL remain fully governed by configured
|
||||
read limits, and queries that already succeed are never altered. Operators who
|
||||
rely on `max_rows_to_read` as a hard failure gate for these system queries can
|
||||
restore the previous behavior per database with
|
||||
`"disable_sampling_read_limit_override": true` in the database's Extra JSON.
|
||||
Note that a retried query returns partial data with no truncation indicator
|
||||
(e.g. a filter dropdown may list only a subset of values on tables above the
|
||||
row cap).
|
||||
|
||||
### Dashboard "Export Data to Excel" requires a Celery worker and S3 bucket
|
||||
|
||||
A new dashboard action exports every chart's data to a single multi-sheet
|
||||
@@ -398,26 +358,6 @@ A read-only companion to the version-history endpoints: each entity type gains a
|
||||
|
||||
Authorization reuses the resource's `can_read` permission and per-object `raise_for_access`; related-entity rows are visibility-filtered to what the caller may see. The stream is empty unless version capture is on (`ENABLE_VERSIONING_CAPTURE`).
|
||||
|
||||
### Version-history retention (pruning)
|
||||
|
||||
Entity version history (the `version_transaction` / `*_version` shadow tables that back version capture) is aged out by a nightly Celery beat task, `version_history.prune_old_versions` (`superset.tasks.version_history_retention`).
|
||||
|
||||
| Key | Default | Purpose |
|
||||
|---|---|---|
|
||||
| `SUPERSET_VERSION_HISTORY_RETENTION_DAYS` | `30` | Version rows whose owning `version_transaction.issued_at` is older than this many days are pruned. Each entity's live row (`end_transaction_id IS NULL`) is always preserved, as are the live rows of its children and associations; closed historical rows (including the baseline) age out. Set to `0` or a negative value to disable pruning. |
|
||||
|
||||
The task ships in the default `CeleryConfig.beat_schedule`; a deployment that overrides `CELERY_CONFIG` without inheriting the default will log a startup warning that the prune task is absent (so it never silently stops running). Retention only prunes whatever history exists — capture itself is gated separately by `ENABLE_VERSIONING_CAPTURE` (ships off).
|
||||
|
||||
### Deletion retention (soft-deleted entities are eventually purged)
|
||||
|
||||
Soft-deleted dashboards, charts, and datasets are now permanently removed after a retention window (default 30 days; `SOFT_DELETE_RETENTION_DAYS`, `0` disables; settable per workspace at runtime via the `deletion-retention set-window` CLI, which takes precedence). The `deletion_retention.purge_soft_deleted` Celery beat task runs daily and removes each aged-out entity together with its M:N join rows, owned children, datasource permission, and version-history shadow rows. After purge an entity is **unrecoverable** — its detail and `/restore` endpoints return 404 and its version history is gone.
|
||||
|
||||
The introducing release **defaults to dry-run** (`SOFT_DELETE_PURGE_DRY_RUN=True`): the task logs `would_purge` counts but deletes nothing, so operators can validate against production before activating real purging by setting it to `False`. Note `would_purge` is an **upper bound** — it counts every entity past the retention window without evaluating deletion blockers, so a real run may purge fewer (entities referenced by report schedules or set as a user's welcome dashboard are blocked and reported separately). The task only acts while the temporary `SOFT_DELETE` rollout flag is on.
|
||||
|
||||
Deployments that replace the default `CELERY_CONFIG` must add `superset.tasks.deletion_retention` to the Celery `imports` and schedule the `deletion_retention.purge_soft_deleted` task themselves. The shipped Docker development config includes both entries.
|
||||
|
||||
Operators can immediately erase a specific entity for compliance (GDPR) via `superset deletion-retention force-purge --uuid <uuid>`; this applies legacy hard-delete semantics — a live chart referencing a force-purged dataset is left without a datasource until re-pointed (the chart is not modified), and it purges the named entity even when it was never soft-deleted. Every purge writes an immutable, content-free audit record to the new `purge_audit_log` table that survives the entity it names: the **scheduled** purge fails closed (an entity whose audit row cannot be written is skipped and retried next run), while **force-purge** proceeds even if the audit write fails — the operator is present and deletion outranks audit for a compliance erasure.
|
||||
|
||||
### Webhook alerts/reports block private/internal hosts by default
|
||||
|
||||
Webhook alert/report dispatch (`WebhookNotification.send`) now validates the target URL's host against the same private/internal-IP block applied to dataset import URLs. If the resolved host is in a loopback, link-local, private (RFC-1918), shared-CGNAT, or multicast range, the webhook is rejected with `NotificationParamException`.
|
||||
@@ -706,12 +646,6 @@ Added a new combined datasource list endpoint at `GET /api/v1/datasource/` to se
|
||||
- Semantic views are included only when the `SEMANTIC_LAYERS` feature flag is enabled.
|
||||
- The endpoint enforces strict `order_column` validation and returns `400` for invalid sort columns.
|
||||
|
||||
### Custom time range "Now"/"Today" anchors resolve in local time
|
||||
|
||||
Custom time ranges that use the "Now" or "Today" anchor (for the Start, End, or the relative anchor itself) previously resolved that anchor in UTC before formatting it into a naive datetime string, which was then re-parsed elsewhere as local time. For users outside UTC, this made the resolved anchor drift by their browser's UTC offset. "Now"/"Today" now resolve directly in local time, matching the later local re-parse.
|
||||
|
||||
Charts and dashboards using these anchors will compute a different (correct) timestamp after upgrading; if a chart's filters or drill-downs were tuned to compensate for the old offset, review them after upgrading.
|
||||
|
||||
## 6.1.0
|
||||
|
||||
### ClickHouse minimum driver version bump
|
||||
|
||||
@@ -28,10 +28,8 @@ x-superset-image: &superset-image apachesuperset.docker.scarf.sh/apache/superset
|
||||
x-superset-volumes:
|
||||
&superset-volumes # /app/pythonpath_docker will be appended to the PYTHONPATH in the final container
|
||||
- ./docker:/app/docker
|
||||
- ./superset-core:/app/superset-core
|
||||
- superset_home:/app/superset_home
|
||||
x-superset-environment: &superset-environment
|
||||
# Tagged images must use their bundled packages rather than host bind mounts.
|
||||
DEV_MODE: "false"
|
||||
|
||||
services:
|
||||
redis:
|
||||
@@ -60,7 +58,6 @@ services:
|
||||
required: true
|
||||
- path: docker/.env-local # optional override
|
||||
required: false
|
||||
environment: *superset-environment
|
||||
image: *superset-image
|
||||
container_name: superset_app
|
||||
command: ["/app/docker/docker-bootstrap.sh", "app-gunicorn"]
|
||||
@@ -82,7 +79,6 @@ services:
|
||||
required: true
|
||||
- path: docker/.env-local # optional override
|
||||
required: false
|
||||
environment: *superset-environment
|
||||
depends_on:
|
||||
db:
|
||||
condition: service_started
|
||||
@@ -102,7 +98,6 @@ services:
|
||||
required: true
|
||||
- path: docker/.env-local # optional override
|
||||
required: false
|
||||
environment: *superset-environment
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
superset-init:
|
||||
@@ -125,7 +120,6 @@ services:
|
||||
required: true
|
||||
- path: docker/.env-local # optional override
|
||||
required: false
|
||||
environment: *superset-environment
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
superset-init:
|
||||
|
||||
@@ -38,7 +38,7 @@ RESET='\033[0m'
|
||||
echo -e "${GREEN}Updating package lists...${RESET}"
|
||||
apt-get update -qq
|
||||
|
||||
echo -e "${GREEN}Installing packages: $@${RESET}"
|
||||
echo -e "${GREEN}Installing packages: $*${RESET}"
|
||||
apt-get install -yqq --no-install-recommends "$@"
|
||||
|
||||
echo -e "${GREEN}Autoremoving unnecessary packages...${RESET}"
|
||||
|
||||
@@ -84,7 +84,6 @@ class CeleryConfig:
|
||||
broker_url = f"redis://{REDIS_HOST}:{REDIS_PORT}/{REDIS_CELERY_DB}"
|
||||
imports = (
|
||||
"superset.sql_lab",
|
||||
"superset.tasks.deletion_retention",
|
||||
"superset.tasks.scheduler",
|
||||
"superset.tasks.thumbnails",
|
||||
"superset.tasks.cache",
|
||||
@@ -102,13 +101,6 @@ class CeleryConfig:
|
||||
"task": "reports.prune_log",
|
||||
"schedule": crontab(minute=10, hour=0),
|
||||
},
|
||||
# Gated on the SOFT_DELETE feature flag, which is off by default: the
|
||||
# task is scheduled either way, but purges nothing while the flag is
|
||||
# unset. Enable it in FEATURE_FLAGS below to exercise retention locally.
|
||||
"deletion_retention.purge_soft_deleted": {
|
||||
"task": "deletion_retention.purge_soft_deleted",
|
||||
"schedule": crontab(minute=0, hour=0),
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -163,10 +163,10 @@ do
|
||||
# Iterate through the components of the version strings
|
||||
for (( j=0; j<${#THIS_TAG_NAME_ARRAY[@]}; j++ )); do
|
||||
echo "Comparing ${THIS_TAG_NAME_ARRAY[$j]} to ${LATEST_RELEASE_TAG_ARRAY[$j]}"
|
||||
if [[ $((THIS_TAG_NAME_ARRAY[$j])) > $((LATEST_RELEASE_TAG_ARRAY[$j])) ]]; then
|
||||
if [[ $((THIS_TAG_NAME_ARRAY[$j])) -gt $((LATEST_RELEASE_TAG_ARRAY[$j])) ]]; then
|
||||
compare_result="greater"
|
||||
break
|
||||
elif [[ $((THIS_TAG_NAME_ARRAY[$j])) < $((LATEST_RELEASE_TAG_ARRAY[$j])) ]]; then
|
||||
elif [[ $((THIS_TAG_NAME_ARRAY[$j])) -lt $((LATEST_RELEASE_TAG_ARRAY[$j])) ]]; then
|
||||
compare_result="lesser"
|
||||
break
|
||||
fi
|
||||
|
||||
@@ -76,21 +76,6 @@ value defined in `DATA_CACHE_CONFIG`.
|
||||
Note, that by setting the cache timeout to `-1`, caching for charting data can be disabled, either
|
||||
per chart, dataset or database, or by default if set in `DATA_CACHE_CONFIG`.
|
||||
|
||||
## Limiting Cached Result Size
|
||||
|
||||
Very large chart or SQL query results can flood the cache backend (Redis/Memcached), evicting many
|
||||
smaller useful entries or exhausting memory. To cap the size of any single value written to the data
|
||||
cache, set `DATA_CACHE_MAX_VALUE_SIZE` (in bytes) in `superset_config.py`:
|
||||
|
||||
```python
|
||||
DATA_CACHE_MAX_VALUE_SIZE = 10 * 1024 * 1024 # 10 MB
|
||||
```
|
||||
|
||||
When a result's serialized size exceeds this threshold it is not written to the data cache — the
|
||||
chart still renders, but the next load re-queries the datasource instead of getting a cache hit. The
|
||||
`skip_cache_value_too_large` statsd metric is incremented each time this happens. Set to `None` (the
|
||||
default) to disable the check.
|
||||
|
||||
## SQL Lab Query Results
|
||||
|
||||
Caching for SQL Lab query results is used when async queries are enabled and is configured using
|
||||
|
||||
@@ -247,51 +247,6 @@ This feature is particularly useful for:
|
||||
- Granting access to dashboards without exposing the underlying datasets for other uses
|
||||
- Creating dashboard-specific access patterns that don't align with dataset permissions
|
||||
|
||||
#### Assigning the creator's groups automatically
|
||||
|
||||
```python
|
||||
FEATURE_FLAGS = {
|
||||
"ENABLE_VIEWERS": True,
|
||||
"ASSIGN_CREATOR_GROUPS_AS_VIEWERS": True,
|
||||
}
|
||||
```
|
||||
|
||||
This requires `ENABLE_VIEWERS` — it has no effect on its own, since it works by populating the
|
||||
`viewers` relationship that `ENABLE_VIEWERS` governs.
|
||||
|
||||
With this enabled, a newly created dashboard or chart is shared read-only with every group its
|
||||
creator belongs to, unless the create payload names viewers explicitly. It applies to every path
|
||||
that creates an asset: the REST API, `/dashboard/new/`, save-as from Explore, dashboard copy,
|
||||
the import commands, and the MCP tools. Datasets are unaffected, as they have editors but no
|
||||
viewers.
|
||||
|
||||
For dashboards, viewer access additionally requires the dashboard to be **published** — the same
|
||||
rule that governs every dashboard viewer. Until a new dashboard is published its creator's groups
|
||||
see nothing, and because it now has viewers the dataset-based fallback no longer applies to it
|
||||
either; group members gain access only once it is published. Charts have no such publish gate, so a
|
||||
new chart's viewer grant takes effect immediately. Note, though, that the viewer relationship
|
||||
governs access to the chart itself; rendering its **data** still runs the normal datasource
|
||||
permission check unless `VIEWER_PROMISCUOUS_MODE` is enabled — a group member without access to the
|
||||
underlying dataset can open the chart but won't load its data.
|
||||
|
||||
Note that this **narrows** access rather than widening it. Because an asset with no viewers falls
|
||||
back to dataset-based access, giving new assets a viewer makes that fallback unreachable for them:
|
||||
a colleague who could previously open a new dashboard by virtue of dataset access can no longer do
|
||||
so unless they share one of the creator's groups. Existing assets are untouched — only assets
|
||||
created after the feature flag is enabled are affected.
|
||||
|
||||
The same narrowing affects background execution as a fixed identity. Alerts, reports, and
|
||||
thumbnails that run as a `FixedExecutor` service account (via `ALERT_REPORTS_EXECUTE_AS` or
|
||||
`THUMBNAIL_EXECUTE_AS`) reach a chart or dashboard through the dataset fallback when that account
|
||||
is neither an editor nor a viewer. Once a new asset is scoped to the creator's groups that
|
||||
fallback is gone, so rendering fails `raise_for_access` unless the executor account is an admin,
|
||||
an editor, or shares one of those groups. If a fixed executor must render assets it does not own,
|
||||
grant it the needed access (make it an admin or add it to the relevant groups) — or leave the
|
||||
feature flag off.
|
||||
|
||||
The setting assigns groups as *viewers*, not editors, so group members get read-only access and
|
||||
cannot modify or delete the asset.
|
||||
|
||||
### SQL Execution Security Considerations
|
||||
|
||||
Apache Superset includes features designed to provide safeguards when interacting with connected databases, such as the `DISALLOWED_SQL_FUNCTIONS` configuration setting. This aims to prevent the execution of potentially harmful database functions or system variables directly from Superset interfaces like SQL Lab.
|
||||
|
||||
@@ -85,7 +85,7 @@ Often a product page will have the same title as the objects it contains. In thi
|
||||
Examples: Query A, Query B
|
||||
|
||||
6. **Database names.** Always capitalize names of database engines and connectors.
|
||||
Examples: Presto, Trino, Drill, Hive, Databricks, Google Sheets
|
||||
Examples: Presto, Trino, Drill, Hive, Google Sheets
|
||||
|
||||
## Button Design Guidelines
|
||||
|
||||
|
||||
@@ -53,16 +53,16 @@
|
||||
"@emotion/core": "^11.0.0",
|
||||
"@emotion/react": "^11.13.3",
|
||||
"@emotion/styled": "^11.14.1",
|
||||
"@fontsource/fira-code": "^5.3.0",
|
||||
"@fontsource/ibm-plex-mono": "^5.3.0",
|
||||
"@fontsource/inter": "^5.3.0",
|
||||
"@fontsource/fira-code": "^5.2.7",
|
||||
"@fontsource/ibm-plex-mono": "^5.2.7",
|
||||
"@fontsource/inter": "^5.2.8",
|
||||
"@mdx-js/react": "^3.1.1",
|
||||
"@saucelabs/theme-github-codeblock": "^0.3.0",
|
||||
"@storybook/addon-docs": "^10.5.3",
|
||||
"@storybook/addon-docs": "^10.5.0",
|
||||
"@superset-ui/core": "^0.20.4",
|
||||
"@swc/core": "^1.15.46",
|
||||
"@swc/core": "^1.15.43",
|
||||
"antd": "^6.5.1",
|
||||
"baseline-browser-mapping": "^2.11.1",
|
||||
"baseline-browser-mapping": "^2.10.43",
|
||||
"caniuse-lite": "^1.0.30001806",
|
||||
"docusaurus-plugin-openapi-docs": "^5.1.2",
|
||||
"docusaurus-theme-openapi-docs": "^5.1.2",
|
||||
@@ -77,8 +77,8 @@
|
||||
"react-table": "^7.8.0",
|
||||
"remark-import-partial": "^0.0.2",
|
||||
"reselect": "^5.2.0",
|
||||
"storybook": "^10.5.3",
|
||||
"swagger-ui-react": "^5.32.11",
|
||||
"storybook": "^10.5.0",
|
||||
"swagger-ui-react": "^5.32.8",
|
||||
"swc-loader": "^0.2.7",
|
||||
"tinycolor2": "^1.4.2",
|
||||
"unist-util-visit": "^5.1.0"
|
||||
@@ -89,16 +89,16 @@
|
||||
"@eslint/js": "^9.39.2",
|
||||
"@types/js-yaml": "^4.0.9",
|
||||
"@types/react": "^19.1.8",
|
||||
"@typescript-eslint/eslint-plugin": "^8.65.0",
|
||||
"@typescript-eslint/parser": "^8.65.0",
|
||||
"@typescript-eslint/eslint-plugin": "^8.64.0",
|
||||
"@typescript-eslint/parser": "^8.64.0",
|
||||
"eslint": "^9.39.2",
|
||||
"eslint-config-prettier": "^10.1.8",
|
||||
"eslint-plugin-prettier": "^5.5.6",
|
||||
"eslint-plugin-react": "^7.37.5",
|
||||
"globals": "^17.7.0",
|
||||
"prettier": "^3.9.6",
|
||||
"prettier": "^3.9.5",
|
||||
"typescript": "~6.0.3",
|
||||
"typescript-eslint": "^8.65.0",
|
||||
"typescript-eslint": "^8.64.0",
|
||||
"webpack": "^5.108.2"
|
||||
},
|
||||
"browserslist": {
|
||||
|
||||
7
docs/static/feature-flags.json
vendored
7
docs/static/feature-flags.json
vendored
@@ -138,13 +138,6 @@
|
||||
"lifecycle": "testing",
|
||||
"description": "Allow users to export full CSV of table viz type. Warning: Could cause server memory/compute issues with large datasets."
|
||||
},
|
||||
{
|
||||
"name": "ASSIGN_CREATOR_GROUPS_AS_VIEWERS",
|
||||
"default": false,
|
||||
"lifecycle": "testing",
|
||||
"description": "Share a newly created dashboard or chart read-only with every group its creator belongs to, unless the create payload names viewers explicitly. Requires ENABLE_VIEWERS. Narrows access: an asset with no viewers falls back to datasource permissions; one with viewers is limited to its editors and viewers, and dashboards must also be published before those viewers gain access.",
|
||||
"category": "security"
|
||||
},
|
||||
{
|
||||
"name": "AWS_DATABASE_IAM_AUTH",
|
||||
"default": false,
|
||||
|
||||
425
docs/yarn.lock
425
docs/yarn.lock
@@ -2529,20 +2529,20 @@
|
||||
resolved "https://registry.yarnpkg.com/@faker-js/faker/-/faker-5.5.3.tgz#18e3af6b8eae7984072bbeb0c0858474d7c4cefe"
|
||||
integrity sha512-R11tGE6yIFwqpaIqcfkcg7AICXzFg14+5h5v0TfF/9+RMDL6jhzCy/pxHVOfbALGdtVYdt6JdR21tuxEgl34dw==
|
||||
|
||||
"@fontsource/fira-code@^5.3.0":
|
||||
version "5.3.0"
|
||||
resolved "https://registry.yarnpkg.com/@fontsource/fira-code/-/fira-code-5.3.0.tgz#487475cedfa1f7ba7650810ddce00b6c7b1b7a25"
|
||||
integrity sha512-EJL968RJRkakubAj/coU8pSUaeTE5UNoRjtzAr6kGiSZ3jWuN8/AKWHwym/PFUaQL1q7IL/H+EXs4358YhrTBQ==
|
||||
"@fontsource/fira-code@^5.2.7":
|
||||
version "5.2.7"
|
||||
resolved "https://registry.yarnpkg.com/@fontsource/fira-code/-/fira-code-5.2.7.tgz#9ecbd909d53e7196a5d895b601747fe34491fc6a"
|
||||
integrity sha512-tnB9NNund9TwIym8/7DMJe573nlPEQb+fKUV5GL8TBYXjIhDvL0D7mgmNVNQUPhXp+R7RylQeiBdkA4EbOHPGQ==
|
||||
|
||||
"@fontsource/ibm-plex-mono@^5.3.0":
|
||||
version "5.3.0"
|
||||
resolved "https://registry.yarnpkg.com/@fontsource/ibm-plex-mono/-/ibm-plex-mono-5.3.0.tgz#1879699d104602d5331e28e103f33c3b1b766b17"
|
||||
integrity sha512-eTgnZjZEGk1QtD3ZstF+Vclo2HLAni8YMy34/DxllwZvyz1lR/1RF/xTiAquOBO7MvqBx8D2Ig2WCPMVfdZu7Q==
|
||||
"@fontsource/ibm-plex-mono@^5.2.7":
|
||||
version "5.2.7"
|
||||
resolved "https://registry.yarnpkg.com/@fontsource/ibm-plex-mono/-/ibm-plex-mono-5.2.7.tgz#ef5b6f052115fdf6666208a5f8a0f13fcd7ba1fd"
|
||||
integrity sha512-MKAb8qV+CaiMQn2B0dIi1OV3565NYzp3WN5b4oT6LTkk+F0jR6j0ZN+5BKJiIhffDC3rtBULsYZE65+0018z9w==
|
||||
|
||||
"@fontsource/inter@^5.3.0":
|
||||
version "5.3.0"
|
||||
resolved "https://registry.yarnpkg.com/@fontsource/inter/-/inter-5.3.0.tgz#866278dc2357659f8be1755c8b67f29d3697b440"
|
||||
integrity sha512-RofMylZmjlJEfELXeNHFWBRcSs75rGU/6bV2S2jfnvv/3rPXPGe0LgUJTklcHZ9lM4OZmAVFhcJPnACfb91A3g==
|
||||
"@fontsource/inter@^5.2.8":
|
||||
version "5.2.8"
|
||||
resolved "https://registry.yarnpkg.com/@fontsource/inter/-/inter-5.2.8.tgz#10c95d877d972c7de5bd4592309d42fb6a5e1a5b"
|
||||
integrity sha512-P6r5WnJoKiNVV+zvW2xM13gNdFhAEpQ9dQJHt3naLvfg+LkF2ldgSLiF4T41lf1SQCM9QmkqPTn4TH568IRagg==
|
||||
|
||||
"@hapi/hoek@^9.0.0", "@hapi/hoek@^9.3.0":
|
||||
version "9.3.0"
|
||||
@@ -4005,23 +4005,23 @@
|
||||
resolved "https://registry.yarnpkg.com/@standard-schema/utils/-/utils-0.3.0.tgz#3d5e608f16c2390c10528e98e59aef6bf73cae7b"
|
||||
integrity sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==
|
||||
|
||||
"@storybook/addon-docs@^10.5.3":
|
||||
version "10.5.3"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/addon-docs/-/addon-docs-10.5.3.tgz#b5666cf20361d85c98cc836b2bfcdbbb72af3e97"
|
||||
integrity sha512-MI1VDMSMQk78YxjIdt7WlrVOiA3TzTP00lRed1LeXh0fCvA9jxz9YXJI2+XigsLaxCSuOAEf/l35/GTLDMHD8A==
|
||||
"@storybook/addon-docs@^10.5.0":
|
||||
version "10.5.2"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/addon-docs/-/addon-docs-10.5.2.tgz#e8023d1a68f637de9188be093f719895a8252d19"
|
||||
integrity sha512-MoBANDsh5qEA14U+JaBoQcYsKbayJDDMopigFN0NdVAsZTdBfVIsL7cnjTFBL6ubB3ifb5M0tCXbScpml1KqiQ==
|
||||
dependencies:
|
||||
"@mdx-js/react" "^3.0.0"
|
||||
"@storybook/csf-plugin" "10.5.3"
|
||||
"@storybook/csf-plugin" "10.5.2"
|
||||
"@storybook/icons" "^2.0.2"
|
||||
"@storybook/react-dom-shim" "10.5.3"
|
||||
"@storybook/react-dom-shim" "10.5.2"
|
||||
react "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
|
||||
react-dom "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
|
||||
ts-dedent "^2.0.0"
|
||||
|
||||
"@storybook/csf-plugin@10.5.3":
|
||||
version "10.5.3"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/csf-plugin/-/csf-plugin-10.5.3.tgz#0818709c2761910f1e42710f6231f773eb97fb41"
|
||||
integrity sha512-mkPq6zru8fN5+46uC1cZEbKW2ws1hh9KvF4g4/Gu8pNbKnvqULPhk0/Bf0ZCtlr7zI7DvcFhyCy3dbvN+2n4Gw==
|
||||
"@storybook/csf-plugin@10.5.2":
|
||||
version "10.5.2"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/csf-plugin/-/csf-plugin-10.5.2.tgz#a359dffe0b842dfffacb0e94ad98da0ccb13ba69"
|
||||
integrity sha512-PK/wXiALFf88mt4HmDtiZJ6NRvhExSXEM9uFIN+OIHxGqg7Xbp6MB0SPdhsTbMY9720ahiu/DJx5iIzkidcA3w==
|
||||
dependencies:
|
||||
unplugin "^2.3.5"
|
||||
|
||||
@@ -4035,10 +4035,10 @@
|
||||
resolved "https://registry.yarnpkg.com/@storybook/icons/-/icons-2.1.0.tgz#edfc2450a39c5e780f28c6cbc49acd7bff59b41a"
|
||||
integrity sha512-Fxh9vYpX9bQqFeHRiY8h2ApeRGDzRSMLwJwNZ/AIRqnyOKHxRKL+yFe+ctEkVJmuptRE9u1Hrn8ZZNHyfDKKNg==
|
||||
|
||||
"@storybook/react-dom-shim@10.5.3":
|
||||
version "10.5.3"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/react-dom-shim/-/react-dom-shim-10.5.3.tgz#e176a6549aa02002e375cb66467a00c5403745f8"
|
||||
integrity sha512-eUWBsRRax5R3MDJVFs/CrFDF1bYS58AMB9tX02lLRuiZe6xy1cKh3CRFS+2xH571l0fNaXQ+7j69TOJ0fk2tmA==
|
||||
"@storybook/react-dom-shim@10.5.2":
|
||||
version "10.5.2"
|
||||
resolved "https://registry.yarnpkg.com/@storybook/react-dom-shim/-/react-dom-shim-10.5.2.tgz#993077c517ee1a1c065c82bf0143ae08856a3c90"
|
||||
integrity sha512-TbdYVLuD7gwj1CFsDJhCHUiwfVmzFWzalKEUGy9XgXyNpyOV1CYRsdmRdhaOHgmn2ljQZuTAxSnG7NlElghVaw==
|
||||
|
||||
"@superset-ui/core@^0.20.4":
|
||||
version "0.20.4"
|
||||
@@ -4697,86 +4697,86 @@
|
||||
dependencies:
|
||||
apg-lite "^1.0.4"
|
||||
|
||||
"@swc/core-darwin-arm64@1.15.46":
|
||||
version "1.15.46"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.46.tgz#393903c7eda790dbd89abd8fa0afdd9041543e5f"
|
||||
integrity sha512-IsISIT22EfktVJrlvIpnAxG2u/A9aob9l99HMlx80x72WlFmFPk1V3UhkEzx86eJP8hw049KTFv/RISho2cq2Q==
|
||||
"@swc/core-darwin-arm64@1.15.43":
|
||||
version "1.15.43"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.43.tgz#386294f8427dde2df1a70dd0a5826d67af70e996"
|
||||
integrity sha512-v1aVuvXdo/BHxJzco9V2xpHrvwWmhfS8t6gziY5wJxd+Z2h8AeJRnAwPD8itCDaGXVBwJ/CaKfxEzTkG0Va0OA==
|
||||
|
||||
"@swc/core-darwin-x64@1.15.46":
|
||||
version "1.15.46"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.15.46.tgz#ddf16787e320636621180df480a3490fd9a868ca"
|
||||
integrity sha512-4Tj4ppVIPCmUMpmGFiGtyEriwLyJ+yi/US4WfBrP/ok8COGddDZXLEzQETnKyK46mjvr1v0jevrS23zjoff7vA==
|
||||
"@swc/core-darwin-x64@1.15.43":
|
||||
version "1.15.43"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.15.43.tgz#c4823529c424e2ae25b7eb786438474741521fcb"
|
||||
integrity sha512-lp3d4Lamc8dt5huYdGLSR+9hLxmfr1jb0l+4XXG2zPqZwYWRN9R0U2qYoTrggiU2RWW0oV9VbWM3kBnqIc2kdQ==
|
||||
|
||||
"@swc/core-linux-arm-gnueabihf@1.15.46":
|
||||
version "1.15.46"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.46.tgz#7bee01b7311c43b913771ef9c7012931871de73b"
|
||||
integrity sha512-i8tUGnNjyOgMmfmgFSg4aeJLQoFyfpIHK5FjpQAwpRyQIqEUB2w1e8zIDQzY1WhOxx8NoS1S5iUL813Un4Sf5A==
|
||||
"@swc/core-linux-arm-gnueabihf@1.15.43":
|
||||
version "1.15.43"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.43.tgz#c0a0ed17cffc5d4af192935667f12f05feeb39f9"
|
||||
integrity sha512-JWTQQELtsG5GgphDrr/XqqmM2pDN3cZqbMS0Mrg+iTiXL3F74sn/S2IyYE/5u4h2KLkTf9qQ7dXyxsbx7YzkeA==
|
||||
|
||||
"@swc/core-linux-arm64-gnu@1.15.46":
|
||||
version "1.15.46"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.46.tgz#964596d757d18f04a02873d85a3660416c09c187"
|
||||
integrity sha512-c0OnhqzdhfOvv6qhNCcByepB+sNYOGZyhtr2Qa6ZCHvAWTYhSRw4j/u92Stue9PbZ/6q74b9nHzi76+kVzqQHQ==
|
||||
"@swc/core-linux-arm64-gnu@1.15.43":
|
||||
version "1.15.43"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.43.tgz#1eb2d9c5eeee5bb9d00599b475ddc31dc2870d22"
|
||||
integrity sha512-B4otJRdPWIsmiSBf0uG7Z/+vMWmkufjz5MmYxubwKuZazDW14Zd3symga1N62QR4RT+kEFeHEgsXfZGyn/w0hw==
|
||||
|
||||
"@swc/core-linux-arm64-musl@1.15.46":
|
||||
version "1.15.46"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.46.tgz#213d3ece772689a8166ed51064836346c6ce1c2a"
|
||||
integrity sha512-imyRpNEcUzFQFV2LE4jL68ErvmKEuZCbvZru77iQREunJ+bR4i658cupTgtG1mLYM3F1Tzy3Sb9xYb02KghWTg==
|
||||
"@swc/core-linux-arm64-musl@1.15.43":
|
||||
version "1.15.43"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.43.tgz#ea6b5c38088f3921a57922d3931b2d74fd23a9fd"
|
||||
integrity sha512-6zB6OnpViBxYy4tgY3v2i6AZY9fwkcHZ032UOwtwUuW1d19sdT07qF0kZe6/3UR1tUaK6jjg2rmVcUIBCEYVjQ==
|
||||
|
||||
"@swc/core-linux-ppc64-gnu@1.15.46":
|
||||
version "1.15.46"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-linux-ppc64-gnu/-/core-linux-ppc64-gnu-1.15.46.tgz#4d2ec554103c6bef60cc1e294f374ea5a5edaf78"
|
||||
integrity sha512-ctEfcl/HcUeomK33cbySiHZm98GEDIxTm1EkpBsYCiHxElYBzvTXVeuQT2YwbUXn9XCrjiw4ipyUNk33k26qRg==
|
||||
"@swc/core-linux-ppc64-gnu@1.15.43":
|
||||
version "1.15.43"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-linux-ppc64-gnu/-/core-linux-ppc64-gnu-1.15.43.tgz#538fac30bbd5f1e678bb7bac9ccc62246a6f6d7a"
|
||||
integrity sha512-coxE1ZWdB3uSDVNoEtYNrRi/1epvckZx9cTJ8ICUxTMTxGk+yvQ/Twacp3ruZSaMPGCriUjP86C37VhaT6nyRg==
|
||||
|
||||
"@swc/core-linux-s390x-gnu@1.15.46":
|
||||
version "1.15.46"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-linux-s390x-gnu/-/core-linux-s390x-gnu-1.15.46.tgz#097a19792ec22e2f51f6bfac02da1e0b3f5e5bb1"
|
||||
integrity sha512-DxlMdnt84TtRVTv7WL/thWyz9+QU8QZNNoAP9rrk0P68LziuhfePp8MjQ44zIprpTHTsEwyziIuGUUN5iSC1bQ==
|
||||
"@swc/core-linux-s390x-gnu@1.15.43":
|
||||
version "1.15.43"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-linux-s390x-gnu/-/core-linux-s390x-gnu-1.15.43.tgz#ee564b45f3f578b1fc82136c4dab163189316641"
|
||||
integrity sha512-lXfLhs+LpBsD5inuYx+YDH5WsPPBQ95KPUiy8P5wq9ob9xKDZFqwNfU2QW6bGO8NqRO/H9JQomTSt5Yyh+FGfA==
|
||||
|
||||
"@swc/core-linux-x64-gnu@1.15.46":
|
||||
version "1.15.46"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.46.tgz#39c1ca215f9ca643a4aa3ca6250cc38ba5f5c673"
|
||||
integrity sha512-SKxI7J6t90XPl8hRUqtJi9NfGdunN/E/vZMc7Bc0figeRdOPDBT+Tm8g7cx9xM0T0mewh2l+8dewa3Am27/P+A==
|
||||
"@swc/core-linux-x64-gnu@1.15.43":
|
||||
version "1.15.43"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.43.tgz#e6e3bfea76921c7f5e16d50a126615f2e04ce1c8"
|
||||
integrity sha512-07XnKwTmKy8TGOZG3D9fRnLWGynxPjwQnZLVmBFbo6F+7vHYzBIOuwXEhemrChBWb6yDNZsVCcMWCPX6FDD2xg==
|
||||
|
||||
"@swc/core-linux-x64-musl@1.15.46":
|
||||
version "1.15.46"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.46.tgz#323a720bc965fffeedacdc3167b46a291553b5e0"
|
||||
integrity sha512-qj9T6B7bosI0VEsrWOVXZN1OXxS8Tp63ywyrLxNdOycnUtLdkgYcoBsN5y8ImnDDsnwrEWZOy1e+J4xSe7mA3Q==
|
||||
"@swc/core-linux-x64-musl@1.15.43":
|
||||
version "1.15.43"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.43.tgz#539f6f2721c0cc32e5db5cf0d453c82045f6662d"
|
||||
integrity sha512-TJc+bsSIaBh+hZvZ5GRtW/K1bw66TJ9vsUwvVIsZdiWxU5ObLwZvfcnZ3UpgVfMnFibRes9uriJrQNBHEEogRQ==
|
||||
|
||||
"@swc/core-win32-arm64-msvc@1.15.46":
|
||||
version "1.15.46"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.46.tgz#9c2cfd2a59be74671a018097b8914f8cfbcc698d"
|
||||
integrity sha512-8p7l4c3LU+eA5g9Et1JPhNeMC1oQwXTGU+uah8DPIBX7YXzqswvaBtyKVmXefVGi/DJU1x3YJsc3mbAp9aWzSQ==
|
||||
"@swc/core-win32-arm64-msvc@1.15.43":
|
||||
version "1.15.43"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.43.tgz#b7bb6b611d484ac19d0ee21469e7012d646c28b5"
|
||||
integrity sha512-jfd7s2/bUQYkOHLs+LWQNKZdmDa8+sufKLllhpWAhVQ2GDCwsHe3vR/j+OSiItZNtkzFuaawa3+SAKz9y5gYfw==
|
||||
|
||||
"@swc/core-win32-ia32-msvc@1.15.46":
|
||||
version "1.15.46"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.46.tgz#bd7bd009a47b0f9826212e7ed36385d32fe193d8"
|
||||
integrity sha512-tUEnfr3Bn9u6FOjUb3PN9p+09qZC2j+wNDLKHzXXZn22rqGcUqR/ohCRSS+nG9B9+X+U+3FewNEHJkTmdIvMjQ==
|
||||
"@swc/core-win32-ia32-msvc@1.15.43":
|
||||
version "1.15.43"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.43.tgz#e5b25722a7d27bb0c9a9bdee7863f29c8674364e"
|
||||
integrity sha512-rLAE8JvucqEW1ZGohxPQrQWPBQeJG4+ypKbWfdlU/qmKScvCkxf9/Jxnzki1dkUQCQ7P5Enp13RlvqOlvx/32g==
|
||||
|
||||
"@swc/core-win32-x64-msvc@1.15.46":
|
||||
version "1.15.46"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.46.tgz#8371845a5bdb330cf05b009f602bb8c4636c6beb"
|
||||
integrity sha512-Vux7UDzBJYQggSuPfcl2w9iu+IJpgpRCxHzgCaVkELnAXAE4XZMOTX9HNcaNiwfeIDqdu2rkr69RuDm6wY8neA==
|
||||
"@swc/core-win32-x64-msvc@1.15.43":
|
||||
version "1.15.43"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.43.tgz#d28842621201c345383d468d40c09648b6cd6e68"
|
||||
integrity sha512-h8MLDHZcfIukwQWj03rIJZx1I0E81AYj2X7J/nGErG4nz+QAv6G1Z+peotvinL3lqpbo32tLYSMFo32/ySzxKg==
|
||||
|
||||
"@swc/core@^1.15.40", "@swc/core@^1.15.46":
|
||||
version "1.15.46"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.15.46.tgz#8acc0f68ee55010fdc876adf2a8faf0b097c681b"
|
||||
integrity sha512-Ri3em2mBpq3h2zSPliCYl63otDGqek8PPEfv2nWgRQEbZ/VBCNyypVTVQ6cEbTCXBhy+WE2T3fQb08moIyuYaw==
|
||||
"@swc/core@^1.15.40", "@swc/core@^1.15.43":
|
||||
version "1.15.43"
|
||||
resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.15.43.tgz#653e6573968fd5c74163b9885ea0a933012c9f22"
|
||||
integrity sha512-1CuKjFkPxIgGdeHVuNbkxmBxkcbdc08u0aiI43pFq6yY1tTVKmXT9hFEooyyKs/sJ3xf1GPHyEwTtk9Xl8dvQw==
|
||||
dependencies:
|
||||
"@swc/counter" "^0.1.3"
|
||||
"@swc/types" "^0.1.27"
|
||||
optionalDependencies:
|
||||
"@swc/core-darwin-arm64" "1.15.46"
|
||||
"@swc/core-darwin-x64" "1.15.46"
|
||||
"@swc/core-linux-arm-gnueabihf" "1.15.46"
|
||||
"@swc/core-linux-arm64-gnu" "1.15.46"
|
||||
"@swc/core-linux-arm64-musl" "1.15.46"
|
||||
"@swc/core-linux-ppc64-gnu" "1.15.46"
|
||||
"@swc/core-linux-s390x-gnu" "1.15.46"
|
||||
"@swc/core-linux-x64-gnu" "1.15.46"
|
||||
"@swc/core-linux-x64-musl" "1.15.46"
|
||||
"@swc/core-win32-arm64-msvc" "1.15.46"
|
||||
"@swc/core-win32-ia32-msvc" "1.15.46"
|
||||
"@swc/core-win32-x64-msvc" "1.15.46"
|
||||
"@swc/core-darwin-arm64" "1.15.43"
|
||||
"@swc/core-darwin-x64" "1.15.43"
|
||||
"@swc/core-linux-arm-gnueabihf" "1.15.43"
|
||||
"@swc/core-linux-arm64-gnu" "1.15.43"
|
||||
"@swc/core-linux-arm64-musl" "1.15.43"
|
||||
"@swc/core-linux-ppc64-gnu" "1.15.43"
|
||||
"@swc/core-linux-s390x-gnu" "1.15.43"
|
||||
"@swc/core-linux-x64-gnu" "1.15.43"
|
||||
"@swc/core-linux-x64-musl" "1.15.43"
|
||||
"@swc/core-win32-arm64-msvc" "1.15.43"
|
||||
"@swc/core-win32-ia32-msvc" "1.15.43"
|
||||
"@swc/core-win32-x64-msvc" "1.15.43"
|
||||
|
||||
"@swc/counter@^0.1.3":
|
||||
version "0.1.3"
|
||||
@@ -5527,100 +5527,100 @@
|
||||
dependencies:
|
||||
"@types/yargs-parser" "*"
|
||||
|
||||
"@typescript-eslint/eslint-plugin@8.65.0", "@typescript-eslint/eslint-plugin@^8.65.0":
|
||||
version "8.65.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.65.0.tgz#0a58df6fea8c0bf6b396f518077099bc8b762bb5"
|
||||
integrity sha512-IEgob78X12rHpUmtcwFsXhZdVGJtwTVP8FiCLZkR6GlYVrl2PcuB+KhCE5BlVC/eQpQnu8WXRtkHZuPar+gCRA==
|
||||
"@typescript-eslint/eslint-plugin@8.64.0", "@typescript-eslint/eslint-plugin@^8.64.0":
|
||||
version "8.64.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.64.0.tgz#71a0c3d5f8a5e6c5dfdb4f0f04bd1bfb572d5e24"
|
||||
integrity sha512-CGvQPBxN3wZLu6Rz2kFUpZeoCm78xUic92ck39KPePkO1NPOwjCqdQnm5Q87tpWw9vcBvW8XLrDXjH9PWYtJ3Q==
|
||||
dependencies:
|
||||
"@eslint-community/regexpp" "^4.12.2"
|
||||
"@typescript-eslint/scope-manager" "8.65.0"
|
||||
"@typescript-eslint/type-utils" "8.65.0"
|
||||
"@typescript-eslint/utils" "8.65.0"
|
||||
"@typescript-eslint/visitor-keys" "8.65.0"
|
||||
"@typescript-eslint/scope-manager" "8.64.0"
|
||||
"@typescript-eslint/type-utils" "8.64.0"
|
||||
"@typescript-eslint/utils" "8.64.0"
|
||||
"@typescript-eslint/visitor-keys" "8.64.0"
|
||||
ignore "^7.0.5"
|
||||
natural-compare "^1.4.0"
|
||||
ts-api-utils "^2.5.0"
|
||||
|
||||
"@typescript-eslint/parser@8.65.0", "@typescript-eslint/parser@^8.65.0":
|
||||
version "8.65.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.65.0.tgz#5295c1058c0a1dd746ef28baaf9c0341dbdf03dc"
|
||||
integrity sha512-CZ4nMxWwgu1HEEFNkeaCptra9QCtkmKdgf3sWh1rl1trIhmxLilgTV4cwcbQ4wemnT4sWQN8CaKOmdYx+g2gMA==
|
||||
"@typescript-eslint/parser@8.64.0", "@typescript-eslint/parser@^8.64.0":
|
||||
version "8.64.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.64.0.tgz#c9864a1cc28a13ff29a7314fbdef0528bb122f72"
|
||||
integrity sha512-KA0OshtlcCCXmbfqyZkM5pV3/WNraJf7DkJRLpyrmwPtud57H5BDX7C3k0LPSPxpprfRL+cJDGabF10mvNCoCw==
|
||||
dependencies:
|
||||
"@typescript-eslint/scope-manager" "8.65.0"
|
||||
"@typescript-eslint/types" "8.65.0"
|
||||
"@typescript-eslint/typescript-estree" "8.65.0"
|
||||
"@typescript-eslint/visitor-keys" "8.65.0"
|
||||
"@typescript-eslint/scope-manager" "8.64.0"
|
||||
"@typescript-eslint/types" "8.64.0"
|
||||
"@typescript-eslint/typescript-estree" "8.64.0"
|
||||
"@typescript-eslint/visitor-keys" "8.64.0"
|
||||
debug "^4.4.3"
|
||||
|
||||
"@typescript-eslint/project-service@8.65.0":
|
||||
version "8.65.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.65.0.tgz#65fbbc9a1591abffaeab5513200f848271cb0aa5"
|
||||
integrity sha512-SxnPhbTsGahizDgbu7oqFH/xVtzIqMd/s+WtnSxNxJZJpLbdT5IPdzg8EZxO3+PoKahXmwJLeNQOpKJb3/bi7Q==
|
||||
"@typescript-eslint/project-service@8.64.0":
|
||||
version "8.64.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.64.0.tgz#14c4e29390d7325a7f8a1218c2788fd649b85da6"
|
||||
integrity sha512-tk4WpOJ6IEbGrVHaNmM0YRrwAD3exZlIK3iadQNAxh4YKk6jvUQ4ecq18n+v7+meh+cJ3j+D8nbk8sRKhlwLQg==
|
||||
dependencies:
|
||||
"@typescript-eslint/tsconfig-utils" "^8.65.0"
|
||||
"@typescript-eslint/types" "^8.65.0"
|
||||
"@typescript-eslint/tsconfig-utils" "^8.64.0"
|
||||
"@typescript-eslint/types" "^8.64.0"
|
||||
debug "^4.4.3"
|
||||
|
||||
"@typescript-eslint/scope-manager@8.65.0":
|
||||
version "8.65.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.65.0.tgz#9547202ce7e608e7b6283df585703b980a0ea70d"
|
||||
integrity sha512-Esbl8OSYiVxBokYgWPf7VVWg/BE798wXhimnn9ML9Pt5qoDf8bfQlgjlKXR/k98+AcNzlLKYrpCcrcuZ9DZLgg==
|
||||
"@typescript-eslint/scope-manager@8.64.0":
|
||||
version "8.64.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.64.0.tgz#d45f15304a94c85c39db317b717b158fb6259958"
|
||||
integrity sha512-CXEaFdYXjSTgKhisNkwCcJwTP8Pl+fmRrEQrri4nm3vU743bALrxzLmq7fHG/7e6a5xO0lDYeURpZmBuhHk54w==
|
||||
dependencies:
|
||||
"@typescript-eslint/types" "8.65.0"
|
||||
"@typescript-eslint/visitor-keys" "8.65.0"
|
||||
"@typescript-eslint/types" "8.64.0"
|
||||
"@typescript-eslint/visitor-keys" "8.64.0"
|
||||
|
||||
"@typescript-eslint/tsconfig-utils@8.65.0", "@typescript-eslint/tsconfig-utils@^8.65.0":
|
||||
version "8.65.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.65.0.tgz#36f168fcdbb1295f7446ff0379667f98c3cf1bf3"
|
||||
integrity sha512-j6GzGqCiRdA7Qhur2VVmKZAkBLfnHFQfx4TaJGL9RMveZqCo48jSHHO0DTgizEnGhtWnqmbtCUSrqSkdiY/0Hg==
|
||||
"@typescript-eslint/tsconfig-utils@8.64.0", "@typescript-eslint/tsconfig-utils@^8.64.0":
|
||||
version "8.64.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.64.0.tgz#c62ac8ea9173c3cac8b38b8e66e30a046b548851"
|
||||
integrity sha512-2yo8rRNKuzbVWQp5kslhANqZ2uDAeROQHBRZNPu8JDsHmeFNj/XJJhX/FhNUWmkHHvoNsKa6+tHJiig87EzsQw==
|
||||
|
||||
"@typescript-eslint/type-utils@8.65.0":
|
||||
version "8.65.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.65.0.tgz#d316d7522d93cff4cd14f305e02f3df2d804f9c1"
|
||||
integrity sha512-YjaZ7PRI5qY7ax2L3PbvX0rRyGtipAReCWs0mhhDBHjH/vl0g0BonaGXrKdKpMbIIsMIwDgbk/xzkBTyAltS5g==
|
||||
"@typescript-eslint/type-utils@8.64.0":
|
||||
version "8.64.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.64.0.tgz#106fa7d58cf9cf7758f3dd8e426ac8237eceacf3"
|
||||
integrity sha512-XWG4Fmmv/6SvyS9nH8jWrKs6terwJvE8cyRt1CzYYqzp9OrPhCT4cMc/f7C6RZCwG+qMmiffJS1/qJP8G1URtg==
|
||||
dependencies:
|
||||
"@typescript-eslint/types" "8.65.0"
|
||||
"@typescript-eslint/typescript-estree" "8.65.0"
|
||||
"@typescript-eslint/utils" "8.65.0"
|
||||
"@typescript-eslint/types" "8.64.0"
|
||||
"@typescript-eslint/typescript-estree" "8.64.0"
|
||||
"@typescript-eslint/utils" "8.64.0"
|
||||
debug "^4.4.3"
|
||||
ts-api-utils "^2.5.0"
|
||||
|
||||
"@typescript-eslint/types@8.65.0", "@typescript-eslint/types@^8.65.0":
|
||||
version "8.65.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.65.0.tgz#3e86738416a777c8b8925ab46745f48ecf904c9f"
|
||||
integrity sha512-JSSwWNy+H0E/01jJEM+hrX6N0OFDzFzeIhHFSAS01tlVaevpG8cFyYRPhS5yjGOvBUx3sqQHVMjCL1CAZZMxBg==
|
||||
"@typescript-eslint/types@8.64.0", "@typescript-eslint/types@^8.64.0":
|
||||
version "8.64.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.64.0.tgz#b41f8ef5dd40616908658b991197a9d486cda60b"
|
||||
integrity sha512-qjhfuTfLXjA4IOzXvz0rTjT01BqEiIgPoUeMwiEjnaHKJMTNo8rH5pYW1a2L/0Dnux2fPC85AeyJoWaGa8WxTA==
|
||||
|
||||
"@typescript-eslint/typescript-estree@8.65.0":
|
||||
version "8.65.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.65.0.tgz#f1f514808f6aa713e2d678ae8ff592a65e1632af"
|
||||
integrity sha512-JboAE2swaYt4tb1fHhHTABE2K+OLy09XfcTbhnk4Pw96f9dd2e9iYsJ28gBggHlo5z5x1rkyWvcPoTuNTd4oGg==
|
||||
"@typescript-eslint/typescript-estree@8.64.0":
|
||||
version "8.64.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.64.0.tgz#b8d51255e2d726eb4bd80d397a4fb4170c02eecc"
|
||||
integrity sha512-Pztpsn1aCE1oWDvDEfUk31nngvvF7vUB5SwHFEaZIFpvw7WJtqUHHL4plBZDA9HfWJJjL13BdG0YrJInTUvoVA==
|
||||
dependencies:
|
||||
"@typescript-eslint/project-service" "8.65.0"
|
||||
"@typescript-eslint/tsconfig-utils" "8.65.0"
|
||||
"@typescript-eslint/types" "8.65.0"
|
||||
"@typescript-eslint/visitor-keys" "8.65.0"
|
||||
"@typescript-eslint/project-service" "8.64.0"
|
||||
"@typescript-eslint/tsconfig-utils" "8.64.0"
|
||||
"@typescript-eslint/types" "8.64.0"
|
||||
"@typescript-eslint/visitor-keys" "8.64.0"
|
||||
debug "^4.4.3"
|
||||
minimatch "^10.2.2"
|
||||
semver "^7.7.3"
|
||||
tinyglobby "^0.2.15"
|
||||
ts-api-utils "^2.5.0"
|
||||
|
||||
"@typescript-eslint/utils@8.65.0":
|
||||
version "8.65.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.65.0.tgz#afedd974a0c8deeef553b509df5800bafd615a72"
|
||||
integrity sha512-gXiwIHsYreboxeJucHKPvgwl7dXt50mF8s1/c00cP/WoVTyWKFdtfhRWwZiXYFU5H2O8vVoSLNrexFZjYS/SGA==
|
||||
"@typescript-eslint/utils@8.64.0":
|
||||
version "8.64.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.64.0.tgz#98bb2010cfb754b41985b9c93e6e8b3dcd7bd600"
|
||||
integrity sha512-aJUGVB3+U0htrrCjoA8qukw8cm8fNCGAxK/tVoS70k8aeb7DETKeFozRiVFIwEeN9WJLsjaP3ph8I60tY2XZoQ==
|
||||
dependencies:
|
||||
"@eslint-community/eslint-utils" "^4.9.1"
|
||||
"@typescript-eslint/scope-manager" "8.65.0"
|
||||
"@typescript-eslint/types" "8.65.0"
|
||||
"@typescript-eslint/typescript-estree" "8.65.0"
|
||||
"@typescript-eslint/scope-manager" "8.64.0"
|
||||
"@typescript-eslint/types" "8.64.0"
|
||||
"@typescript-eslint/typescript-estree" "8.64.0"
|
||||
|
||||
"@typescript-eslint/visitor-keys@8.65.0":
|
||||
version "8.65.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.65.0.tgz#e3704c13cb4a1c22454c1abf28ff4737e15018c6"
|
||||
integrity sha512-8C71BQkGjiMmXtop7pHVJu1l2NNShFdkCyD6a2ezzs5vU/L3LRtb69EtcteFwz0mYMPzIgOw0n6OV4VBUWZd7A==
|
||||
"@typescript-eslint/visitor-keys@8.64.0":
|
||||
version "8.64.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.64.0.tgz#7a08421d10e54960733352cd7c95fab1784e8473"
|
||||
integrity sha512-mrtuL8Nsn6gi2H4mo5KMTp823M+3Q19Ew/i+Zlikq20tIMm99C3Ez0dCmkWWnxut20esQvTg8aUSEhMcAOXhEw==
|
||||
dependencies:
|
||||
"@typescript-eslint/types" "8.65.0"
|
||||
"@typescript-eslint/types" "8.64.0"
|
||||
eslint-visitor-keys "^5.0.0"
|
||||
|
||||
"@ungap/structured-clone@^1.0.0":
|
||||
@@ -6368,10 +6368,10 @@ base64-js@^1.3.1, base64-js@^1.5.1:
|
||||
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
|
||||
integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
|
||||
|
||||
baseline-browser-mapping@^2.10.38, baseline-browser-mapping@^2.11.1, baseline-browser-mapping@^2.9.19:
|
||||
version "2.11.1"
|
||||
resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.11.1.tgz#390b4714558634093df77add4acca0c5c0c1605e"
|
||||
integrity sha512-HYXq73DDpCtNzOmrFsm9eSwCvWCql0RzqjpDzXN9EadiLJ4DNat0nsZ/Bzmy+Ud12mb4/zKDY0cQ805ZzN+i0A==
|
||||
baseline-browser-mapping@^2.10.38, baseline-browser-mapping@^2.10.43, baseline-browser-mapping@^2.9.19:
|
||||
version "2.10.43"
|
||||
resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.10.43.tgz#7b5d11590ce5acdbe4859443e3c940e81ce8c02d"
|
||||
integrity sha512-AjYpR78kDWAY3Efj+cDTFH9t9SCoL7OoTp1BOb0mQV7S+6CiLwnWM3FyxhJtdPufDFKzmCSFoUncKjWgJEZTCQ==
|
||||
|
||||
batch@0.6.1:
|
||||
version "0.6.1"
|
||||
@@ -7007,7 +7007,7 @@ copy-text-to-clipboard@^3.2.0:
|
||||
resolved "https://registry.yarnpkg.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.2.tgz#99bc79db3f2d355ec33a08d573aff6804491ddb9"
|
||||
integrity sha512-T6SqyLd1iLuqPA90J5N4cTalrtovCySh58iiZDGJ6FGznbclKh4UI+FGacQSgFzwKG77W7XT5gwbVEbd9cIH1A==
|
||||
|
||||
copy-to-clipboard@^3.3.3:
|
||||
copy-to-clipboard@^3.3.1:
|
||||
version "3.3.3"
|
||||
resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz#55ac43a1db8ae639a4bd99511c148cdd1b83a1b0"
|
||||
integrity sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==
|
||||
@@ -7962,7 +7962,7 @@ domhandler@^5.0.2, domhandler@^5.0.3:
|
||||
dependencies:
|
||||
domelementtype "^2.3.0"
|
||||
|
||||
dompurify@^3.3.3, dompurify@^3.4.12:
|
||||
dompurify@^3.3.3, dompurify@^3.4.11:
|
||||
version "3.4.12"
|
||||
resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.4.12.tgz#6fa2265e9bbdce882c4ace4107626051b448ffa8"
|
||||
integrity sha512-zQvGet8Z2sWbQhCmfFz/T5QWH2oBmjnqK3qvOjaqaNLrLEF912WamU+ohnTp0TCep/MFVHpdJuCZEdFOdTnEFg==
|
||||
@@ -9567,10 +9567,10 @@ immer@^11.0.0:
|
||||
resolved "https://registry.yarnpkg.com/immer/-/immer-11.1.11.tgz#bbf825a333ae1b16fd450d8da5f61d54de6a553d"
|
||||
integrity sha512-qzXuyXAkPySAGYkfsAwodDPWT8Zm7/Uo5BNt4BjhMhG5WlWyZZ4wQqnWwdS8kjlQ1Cwu6gjw3A6+0gTQwlyYtw==
|
||||
|
||||
immutable@^4.3.9:
|
||||
version "4.3.9"
|
||||
resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.9.tgz#c98349e05e9c6e2a4d8fe88ac0b363e0d536b544"
|
||||
integrity sha512-ObHy4YN7ycwZOUCLI1/6svfyAFu7vL8RhAvVu/bh/RZW9EPlOyDaQ9jDQWCtdqzaXUjgXZCW1migtHE7YI7UGQ==
|
||||
immutable@^3.x.x:
|
||||
version "3.8.3"
|
||||
resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.3.tgz#0a8d2494a94d4b2d4f0e99986e74dd25d1e9a859"
|
||||
integrity sha512-AUY/VyX0E5XlibOmWt10uabJzam1zlYjwiEgQSDc5+UIkFNaF9WM0JxXKaNMGf+F/ffUF+7kRKXM9A7C0xXqMg==
|
||||
|
||||
immutable@^5.1.5:
|
||||
version "5.1.9"
|
||||
@@ -10141,13 +10141,20 @@ js-levenshtein@^1.1.6:
|
||||
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
|
||||
integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
|
||||
|
||||
js-yaml@4.1.0, js-yaml@=4.3.0, js-yaml@^4.1.0, js-yaml@^4.1.1, js-yaml@^4.2.0, js-yaml@^4.3.0:
|
||||
js-yaml@4.1.0, js-yaml@^4.1.0, js-yaml@^4.1.1, js-yaml@^4.2.0, js-yaml@^4.3.0:
|
||||
version "4.3.0"
|
||||
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.3.0.tgz#d1900572a7f7cf0b5f540c83673e60bad3436592"
|
||||
integrity sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==
|
||||
dependencies:
|
||||
argparse "^2.0.1"
|
||||
|
||||
js-yaml@=4.2.0:
|
||||
version "4.2.0"
|
||||
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.2.0.tgz#2bd9e85682dd91bd469afb809d816043b3d49524"
|
||||
integrity sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==
|
||||
dependencies:
|
||||
argparse "^2.0.1"
|
||||
|
||||
js-yaml@^5.2.2:
|
||||
version "5.2.2"
|
||||
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-5.2.2.tgz#497bfe63f0b0db11c7bbc5ce8bc568e836c8b08c"
|
||||
@@ -13022,10 +13029,10 @@ prettier-linter-helpers@^1.0.1:
|
||||
dependencies:
|
||||
fast-diff "^1.1.2"
|
||||
|
||||
prettier@^3.9.6:
|
||||
version "3.9.6"
|
||||
resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.9.6.tgz#b3ea5146515d40fc53f18aa63f74dfab1e10dbf6"
|
||||
integrity sha512-OpN0zzVdiaiAhxpuuj5efpIS4sY9j7bY6uR5mnj5yPzGkdkjNKSJeUThPb60Jw29QuAZgA4o+/iB49kFiaBX6g==
|
||||
prettier@^3.9.5:
|
||||
version "3.9.5"
|
||||
resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.9.5.tgz#4fec97736e33b9d0b620b48914fe93b530e835ad"
|
||||
integrity sha512-/FVl766LpUfB5vXgCYOYa0MeV/441Ia99AeICQIQFTY/Nw0roZwULcXpku5i1/m5kt/baz+s4Zogspd839HSMg==
|
||||
|
||||
pretty-error@^4.0.0:
|
||||
version "4.0.0"
|
||||
@@ -13236,12 +13243,12 @@ rc@1.2.8:
|
||||
minimist "^1.2.0"
|
||||
strip-json-comments "~2.0.1"
|
||||
|
||||
react-copy-to-clipboard@5.1.1:
|
||||
version "5.1.1"
|
||||
resolved "https://registry.yarnpkg.com/react-copy-to-clipboard/-/react-copy-to-clipboard-5.1.1.tgz#76adb8be03616e99692fcf3f762365ed3fb5ff16"
|
||||
integrity sha512-s+HrzLyJBxrpGTYXF15dTgMjAJpEPZT/Yp6NytAtZMRngejxt6Pt5WrfFxLAcsqUDU6sY1Jz6tyHwIicE1U2Xg==
|
||||
react-copy-to-clipboard@5.1.0:
|
||||
version "5.1.0"
|
||||
resolved "https://registry.yarnpkg.com/react-copy-to-clipboard/-/react-copy-to-clipboard-5.1.0.tgz#09aae5ec4c62750ccb2e6421a58725eabc41255c"
|
||||
integrity sha512-k61RsNgAayIJNoy9yDsYzDe/yAZAzEbEgcz3DZMhF686LEyukcE1hzurxe85JandPUG+yTfGVFzuEw3xt8WP/A==
|
||||
dependencies:
|
||||
copy-to-clipboard "^3.3.3"
|
||||
copy-to-clipboard "^3.3.1"
|
||||
prop-types "^15.8.1"
|
||||
|
||||
react-debounce-input@=3.3.0:
|
||||
@@ -14620,10 +14627,10 @@ stop-iteration-iterator@^1.1.0:
|
||||
es-errors "^1.3.0"
|
||||
internal-slot "^1.1.0"
|
||||
|
||||
storybook@^10.5.3:
|
||||
version "10.5.3"
|
||||
resolved "https://registry.yarnpkg.com/storybook/-/storybook-10.5.3.tgz#72ee7cc02e3b6353eeec9633c2367437cf2ac86e"
|
||||
integrity sha512-c8Wumu5qz0N2fnzWBxcPzUsY+8BpKBKChNyl4BEh9qhMV6KW587gL8il8emRB+4Hay+zMjDHA7cIeTkl4FKYuw==
|
||||
storybook@^10.5.0:
|
||||
version "10.5.2"
|
||||
resolved "https://registry.yarnpkg.com/storybook/-/storybook-10.5.2.tgz#751aca53cbeea086886d84ceb46c8a29a5f802f3"
|
||||
integrity sha512-zkYxVZoDMj8njzZc3EH5UyY7885wpi9a1mmWVwFiNHSo+i5r2Go84E2OI1cdOctRymLkNvgs1j5jqAKA0ftBqg==
|
||||
dependencies:
|
||||
"@storybook/global" "^5.0.0"
|
||||
"@storybook/icons" "^2.0.2"
|
||||
@@ -14894,10 +14901,10 @@ svgo@^3.0.2, svgo@^3.2.0:
|
||||
picocolors "^1.0.0"
|
||||
sax "^1.5.0"
|
||||
|
||||
swagger-client@^3.37.7:
|
||||
version "3.37.7"
|
||||
resolved "https://registry.yarnpkg.com/swagger-client/-/swagger-client-3.37.7.tgz#75cd740b6aebdebce5e7c9eada193b63d00e21ad"
|
||||
integrity sha512-AzmF/FDSPYBcoxXarHPnqK3lSXoKH9Fh0EjLHAlP0h/D7EG1Fofl/wEuGqhYT+IBpriu3mSgWCh2xAftsYdL8w==
|
||||
swagger-client@^3.37.4:
|
||||
version "3.37.5"
|
||||
resolved "https://registry.yarnpkg.com/swagger-client/-/swagger-client-3.37.5.tgz#2c55c034319e1aeede336524a6eeea7b35e15cd4"
|
||||
integrity sha512-MuABJgD8vIsT5GVBTGj3HjmiEhArf58ng+YP4fo23NOJb/mKXOpKW3Rln90fnoi7ROt6IJsJy9d5kg8Yidn0/Q==
|
||||
dependencies:
|
||||
"@babel/runtime-corejs3" "^7.22.15"
|
||||
"@scarf/scarf" "=1.4.0"
|
||||
@@ -14917,33 +14924,11 @@ swagger-client@^3.37.7:
|
||||
openapi-server-url-templating "^1.3.0"
|
||||
ramda "^0.30.1"
|
||||
ramda-adjunct "^5.1.0"
|
||||
optionalDependencies:
|
||||
"@swagger-api/apidom-ns-asyncapi-2" "^1.11.3"
|
||||
"@swagger-api/apidom-ns-asyncapi-3" "^1.11.3"
|
||||
"@swagger-api/apidom-ns-openapi-2" "^1.11.3"
|
||||
"@swagger-api/apidom-parser-adapter-api-design-systems-json" "^1.11.3"
|
||||
"@swagger-api/apidom-parser-adapter-api-design-systems-yaml" "^1.11.3"
|
||||
"@swagger-api/apidom-parser-adapter-arazzo-json-1" "^1.11.3"
|
||||
"@swagger-api/apidom-parser-adapter-arazzo-yaml-1" "^1.11.3"
|
||||
"@swagger-api/apidom-parser-adapter-asyncapi-json-2" "^1.11.3"
|
||||
"@swagger-api/apidom-parser-adapter-asyncapi-json-3" "^1.11.3"
|
||||
"@swagger-api/apidom-parser-adapter-asyncapi-yaml-2" "^1.11.3"
|
||||
"@swagger-api/apidom-parser-adapter-asyncapi-yaml-3" "^1.11.3"
|
||||
"@swagger-api/apidom-parser-adapter-json" "^1.11.3"
|
||||
"@swagger-api/apidom-parser-adapter-openapi-json-2" "^1.11.3"
|
||||
"@swagger-api/apidom-parser-adapter-openapi-json-3-0" "^1.11.3"
|
||||
"@swagger-api/apidom-parser-adapter-openapi-json-3-1" "^1.11.3"
|
||||
"@swagger-api/apidom-parser-adapter-openapi-json-3-2" "^1.11.3"
|
||||
"@swagger-api/apidom-parser-adapter-openapi-yaml-2" "^1.11.3"
|
||||
"@swagger-api/apidom-parser-adapter-openapi-yaml-3-0" "^1.11.3"
|
||||
"@swagger-api/apidom-parser-adapter-openapi-yaml-3-1" "^1.11.3"
|
||||
"@swagger-api/apidom-parser-adapter-openapi-yaml-3-2" "^1.11.3"
|
||||
"@swagger-api/apidom-parser-adapter-yaml-1-2" "^1.11.3"
|
||||
|
||||
swagger-ui-react@^5.32.11:
|
||||
version "5.32.11"
|
||||
resolved "https://registry.yarnpkg.com/swagger-ui-react/-/swagger-ui-react-5.32.11.tgz#9a98015aca1101c086968df9e7d2897e93875a9a"
|
||||
integrity sha512-84WYsBEs6vIpWXtqxq7kIrJRs2+YeZPQFULPJ/afjuHKw+rKWvwyA1uQsUC2VWq3oA9XIig3pjlMVE5xXaCDyA==
|
||||
swagger-ui-react@^5.32.8:
|
||||
version "5.32.8"
|
||||
resolved "https://registry.yarnpkg.com/swagger-ui-react/-/swagger-ui-react-5.32.8.tgz#0608b45cf552f33fcc9b3fc5e07740c9a854861f"
|
||||
integrity sha512-Cstx4Tq8fT5l2TBxHxts8pG+ks0qKSkuO1pwUwgrQQiZ241Mqs+KUODLVIonsYXL/gqX143rkcipUa4d0Rid7w==
|
||||
dependencies:
|
||||
"@babel/runtime-corejs3" "^7.27.1"
|
||||
"@scarf/scarf" "=1.4.0"
|
||||
@@ -14952,16 +14937,16 @@ swagger-ui-react@^5.32.11:
|
||||
classnames "^2.5.1"
|
||||
css.escape "1.5.1"
|
||||
deep-extend "0.6.0"
|
||||
dompurify "^3.4.12"
|
||||
dompurify "^3.4.11"
|
||||
ieee754 "^1.2.1"
|
||||
immutable "^4.3.9"
|
||||
immutable "^3.x.x"
|
||||
js-file-download "^0.4.12"
|
||||
js-yaml "=4.3.0"
|
||||
js-yaml "=4.2.0"
|
||||
lodash "^4.18.1"
|
||||
prop-types "^15.8.1"
|
||||
randexp "^0.5.3"
|
||||
randombytes "^2.1.0"
|
||||
react-copy-to-clipboard "5.1.1"
|
||||
react-copy-to-clipboard "5.1.0"
|
||||
react-debounce-input "=3.3.0"
|
||||
react-immutable-proptypes "2.2.0"
|
||||
react-immutable-pure-component "^2.2.0"
|
||||
@@ -14974,7 +14959,7 @@ swagger-ui-react@^5.32.11:
|
||||
reselect "^5.1.1"
|
||||
serialize-error "^8.1.0"
|
||||
sha.js "^2.4.12"
|
||||
swagger-client "^3.37.7"
|
||||
swagger-client "^3.37.4"
|
||||
url-parse "^1.5.10"
|
||||
xml "=1.0.1"
|
||||
xml-but-prettier "^1.0.1"
|
||||
@@ -15324,15 +15309,15 @@ types-ramda@^0.30.1:
|
||||
dependencies:
|
||||
ts-toolbelt "^9.6.0"
|
||||
|
||||
typescript-eslint@^8.65.0:
|
||||
version "8.65.0"
|
||||
resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.65.0.tgz#754c953fd6a9a3d36fa54015bdba80a6eb2a4957"
|
||||
integrity sha512-/ggrHAwyjENDusvyxbuqxAC2dTnZg/Z8F+fgQtYIz+L6n/9HfSlEZcFGV/NsMNa6CkGk0xUjUAFwC0vHOflvIA==
|
||||
typescript-eslint@^8.64.0:
|
||||
version "8.64.0"
|
||||
resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.64.0.tgz#4984dae4de9dc8bf892acf5c394d0a2a5f08c3e1"
|
||||
integrity sha512-0qg+pDNMnqYzqH9AnNK+39tejHvsShUOUUoRUgtnTGE7QuMZhiFDnozq8nHJVq+Wae6NMLKNWLg5WmkcC/ndyQ==
|
||||
dependencies:
|
||||
"@typescript-eslint/eslint-plugin" "8.65.0"
|
||||
"@typescript-eslint/parser" "8.65.0"
|
||||
"@typescript-eslint/typescript-estree" "8.65.0"
|
||||
"@typescript-eslint/utils" "8.65.0"
|
||||
"@typescript-eslint/eslint-plugin" "8.64.0"
|
||||
"@typescript-eslint/parser" "8.64.0"
|
||||
"@typescript-eslint/typescript-estree" "8.64.0"
|
||||
"@typescript-eslint/utils" "8.64.0"
|
||||
|
||||
typescript@~6.0.3:
|
||||
version "6.0.3"
|
||||
|
||||
@@ -29,7 +29,7 @@ maintainers:
|
||||
- name: craig-rueda
|
||||
email: craig@craigrueda.com
|
||||
url: https://github.com/craig-rueda
|
||||
version: 0.22.4 # See [README](https://github.com/apache/superset/blob/master/helm/superset/README.md#versioning) for version details.
|
||||
version: 0.22.3 # See [README](https://github.com/apache/superset/blob/master/helm/superset/README.md#versioning) for version details.
|
||||
dependencies:
|
||||
- name: postgresql
|
||||
version: 16.7.27
|
||||
|
||||
@@ -23,7 +23,7 @@ NOTE: This file is generated by helm-docs: https://github.com/norwoodj/helm-docs
|
||||
|
||||
# superset
|
||||
|
||||

|
||||

|
||||
|
||||
Apache Superset is a modern, enterprise-ready business intelligence web application
|
||||
|
||||
@@ -159,10 +159,6 @@ Alternatively, perform a fresh install. This is a one-time migration; subsequent
|
||||
| init.extraInitContainers | list | `[]` | Extra init containers appended after init job initContainers |
|
||||
| init.initContainers | list | a container waiting for postgres | List of initContainers |
|
||||
| init.initscript | string | unused; kept for backwards-compatibility only | DEPRECATED: this field is no longer used by the chart. The init script is rendered entirely from the internal `superset.initScript` template (which runs `superset db upgrade`, `superset init`, admin creation, and examples). Any customization placed here is silently ignored. See UPGRADING.md. |
|
||||
| init.istio | object | `{"disableSidecarInjection":false,"quitEndpoint":"http://localhost:15020/quitquitquit","terminateSidecarOnExit":false}` | Configuration for compatibility with the Istio service mesh. Without these mitigations, when the init-db Job runs in a namespace with automatic Istio sidecar injection enabled, the injected envoy-proxy container keeps running after the init container has exited, preventing the Job from ever reaching the Completed state. See https://github.com/apache/superset/issues/25798 |
|
||||
| init.istio.disableSidecarInjection | bool | `false` | When true, adds the `sidecar.istio.io/inject: "false"` label to the init job pod template, opting it out of Istio automatic sidecar injection. This is the recommended fix when the cluster's mesh policy allows opting out per pod. |
|
||||
| init.istio.quitEndpoint | string | `"http://localhost:15020/quitquitquit"` | Endpoint that the trap POSTs to in order to terminate the sidecar. The default matches the standard Istio pilot-agent admin port. |
|
||||
| init.istio.terminateSidecarOnExit | bool | `false` | When true, the rendered `superset_init.sh` script (from the internal `superset.initScript` template) registers an `EXIT` trap that POSTs to the Istio pilot-agent's `/quitquitquit` endpoint after the init logic finishes, gracefully terminating an injected envoy-proxy sidecar so the Job can complete. Enable this when sidecar injection cannot be disabled per pod (e.g. when enforced by a cluster-wide Istio policy). Note: requires `curl` to be available in the init container image (it is included in the default `apache/superset` image) and only takes effect when `init.command` sources the rendered `superset_init.sh`. |
|
||||
| init.jobAnnotations."helm.sh/hook" | string | `"post-install,post-upgrade"` | |
|
||||
| init.jobAnnotations."helm.sh/hook-delete-policy" | string | `"before-hook-creation"` | |
|
||||
| init.loadExamples | bool | `false` | |
|
||||
|
||||
@@ -685,14 +685,6 @@ TALISMAN_CONFIG = {
|
||||
{{- define "superset.initScript" -}}
|
||||
#!/bin/sh
|
||||
set -eu
|
||||
{{- if dig "istio" "terminateSidecarOnExit" false .Values.init }}
|
||||
# Notify the Istio pilot-agent sidecar to exit when this script completes
|
||||
# (whether successfully or via `set -e`), so that the Job can reach the
|
||||
# Completed state instead of hanging on a still-running envoy-proxy.
|
||||
# See https://github.com/apache/superset/issues/25798
|
||||
ISTIO_QUIT_ENDPOINT={{ dig "istio" "quitEndpoint" "http://localhost:15020/quitquitquit" .Values.init | replace "'" "'\\''" | squote }}
|
||||
trap 'rc=$?; curl -fsS -m 5 -X POST "$ISTIO_QUIT_ENDPOINT" >/dev/null 2>&1 || echo "WARNING: failed to notify Istio sidecar at $ISTIO_QUIT_ENDPOINT to quit; the Job may hang if sidecar injection is active" >&2; exit $rc' EXIT
|
||||
{{- end }}
|
||||
echo "Upgrading DB schema..."
|
||||
superset db upgrade
|
||||
echo "Initializing roles and permissions..."
|
||||
|
||||
@@ -35,7 +35,6 @@ spec:
|
||||
{{- if .Values.init.podAnnotations }}
|
||||
annotations: {{- toYaml .Values.init.podAnnotations | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- $istioDisableInject := dig "istio" "disableSidecarInjection" false .Values.init }}
|
||||
labels:
|
||||
{{- include "superset.componentSelectorLabels" (dict "component" "init" "root" .) | nindent 8 }}
|
||||
job: {{ template "superset.fullname" . }}-init-db
|
||||
@@ -45,9 +44,6 @@ spec:
|
||||
{{- if .Values.init.podLabels }}
|
||||
{{- toYaml .Values.init.podLabels | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- if $istioDisableInject }}
|
||||
sidecar.istio.io/inject: "false"
|
||||
{{- end }}
|
||||
spec:
|
||||
{{- if .Values.init.additionalPodSpec }}
|
||||
{{- tpl (toYaml .Values.init.additionalPodSpec) . | nindent 6 }}
|
||||
|
||||
@@ -1,183 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed with
|
||||
# this work for additional information regarding copyright ownership.
|
||||
# The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
# (the "License"); you may not use this file except in compliance with
|
||||
# the License. You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
# Renders the chart with `helm template` for several `init.istio.*` value
|
||||
# combinations and asserts that the relevant manifests contain (or omit)
|
||||
# the expected fields. Intended to be run from the chart directory or via
|
||||
# `bash helm/superset/tests/test-istio.sh` from the repo root.
|
||||
#
|
||||
# Covers the fix for:
|
||||
# https://github.com/apache/superset/issues/25798
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
CHART_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)"
|
||||
|
||||
pass=0
|
||||
fail=0
|
||||
|
||||
assert_contains() {
|
||||
local label="$1"
|
||||
local needle="$2"
|
||||
local haystack="$3"
|
||||
if grep -qF -- "${needle}" <<<"${haystack}"; then
|
||||
echo " PASS: ${label}"
|
||||
pass=$((pass + 1))
|
||||
else
|
||||
echo " FAIL: ${label}"
|
||||
echo " expected to contain: ${needle}"
|
||||
fail=$((fail + 1))
|
||||
fi
|
||||
}
|
||||
|
||||
assert_not_contains() {
|
||||
local label="$1"
|
||||
local needle="$2"
|
||||
local haystack="$3"
|
||||
if ! grep -qF -- "${needle}" <<<"${haystack}"; then
|
||||
echo " PASS: ${label}"
|
||||
pass=$((pass + 1))
|
||||
else
|
||||
echo " FAIL: ${label}"
|
||||
echo " expected NOT to contain: ${needle}"
|
||||
fail=$((fail + 1))
|
||||
fi
|
||||
}
|
||||
|
||||
render() {
|
||||
helm template release "${CHART_DIR}" "$@"
|
||||
}
|
||||
|
||||
extract_init_job() {
|
||||
awk '
|
||||
/^# Source: superset\/templates\/init-job\.yaml/ { capture = 1 }
|
||||
capture && /^---$/ { capture = 0 }
|
||||
capture { print }
|
||||
' <<<"$1"
|
||||
}
|
||||
|
||||
extract_config_secret() {
|
||||
awk '
|
||||
/^# Source: superset\/templates\/secret-superset-config\.yaml/ { capture = 1 }
|
||||
capture && /^---$/ { capture = 0 }
|
||||
capture { print }
|
||||
' <<<"$1"
|
||||
}
|
||||
|
||||
echo "==> defaults: no istio mitigations applied"
|
||||
out_default="$(render)"
|
||||
init_job_default="$(extract_init_job "${out_default}")"
|
||||
config_default="$(extract_config_secret "${out_default}")"
|
||||
assert_not_contains "default does not set sidecar.istio.io/inject label" \
|
||||
'sidecar.istio.io/inject' "${init_job_default}"
|
||||
assert_not_contains "default initscript does not register quitquitquit trap" \
|
||||
'quitquitquit' "${config_default}"
|
||||
|
||||
echo "==> init.istio.disableSidecarInjection=true"
|
||||
out_disable="$(render --set init.istio.disableSidecarInjection=true)"
|
||||
init_job_disable="$(extract_init_job "${out_disable}")"
|
||||
config_disable="$(extract_config_secret "${out_disable}")"
|
||||
assert_contains "init job sets sidecar.istio.io/inject: \"false\"" \
|
||||
'sidecar.istio.io/inject: "false"' "${init_job_disable}"
|
||||
assert_not_contains "disableSidecarInjection alone does not add quitquitquit trap" \
|
||||
'quitquitquit' "${config_disable}"
|
||||
|
||||
echo "==> init.istio.terminateSidecarOnExit=true"
|
||||
out_terminate="$(render --set init.istio.terminateSidecarOnExit=true)"
|
||||
init_job_terminate="$(extract_init_job "${out_terminate}")"
|
||||
config_terminate="$(extract_config_secret "${out_terminate}")"
|
||||
assert_not_contains "terminateSidecarOnExit alone does not add inject label" \
|
||||
'sidecar.istio.io/inject' "${init_job_terminate}"
|
||||
assert_contains "initscript registers EXIT trap that calls quitquitquit" \
|
||||
"trap 'rc=\$?; curl -fsS -m 5 -X POST" "${config_terminate}"
|
||||
assert_contains "initscript trap targets the configured quit endpoint" \
|
||||
'http://localhost:15020/quitquitquit' "${config_terminate}"
|
||||
assert_contains "initscript trap binds to the EXIT signal" \
|
||||
"' EXIT" "${config_terminate}"
|
||||
|
||||
echo "==> init.istio.quitEndpoint override"
|
||||
out_endpoint="$(render --set init.istio.terminateSidecarOnExit=true \
|
||||
--set init.istio.quitEndpoint=http://127.0.0.1:15020/quitquitquit)"
|
||||
config_endpoint="$(extract_config_secret "${out_endpoint}")"
|
||||
assert_contains "trap honours custom quitEndpoint" \
|
||||
'http://127.0.0.1:15020/quitquitquit' "${config_endpoint}"
|
||||
|
||||
echo "==> both options combined"
|
||||
out_both="$(render --set init.istio.disableSidecarInjection=true \
|
||||
--set init.istio.terminateSidecarOnExit=true)"
|
||||
init_job_both="$(extract_init_job "${out_both}")"
|
||||
config_both="$(extract_config_secret "${out_both}")"
|
||||
assert_contains "combined: inject label present" \
|
||||
'sidecar.istio.io/inject: "false"' "${init_job_both}"
|
||||
assert_contains "combined: trap present" \
|
||||
'quitquitquit' "${config_both}"
|
||||
|
||||
echo "==> existing init.podLabels are preserved alongside istio label"
|
||||
out_labels="$(render --set init.istio.disableSidecarInjection=true \
|
||||
--set init.podLabels.team=data-platform)"
|
||||
init_job_labels="$(extract_init_job "${out_labels}")"
|
||||
assert_contains "user-supplied podLabel still rendered" \
|
||||
'team: data-platform' "${init_job_labels}"
|
||||
assert_contains "istio inject label rendered alongside" \
|
||||
'sidecar.istio.io/inject: "false"' "${init_job_labels}"
|
||||
|
||||
echo "==> init.istio explicitly overridden to null"
|
||||
out_null_istio="$(render --set init.istio=null)"
|
||||
init_job_null_istio="$(extract_init_job "${out_null_istio}")"
|
||||
config_null_istio="$(extract_config_secret "${out_null_istio}")"
|
||||
assert_not_contains "null init.istio does not set inject label" \
|
||||
'sidecar.istio.io/inject' "${init_job_null_istio}"
|
||||
assert_not_contains "null init.istio does not register quitquitquit trap" \
|
||||
'quitquitquit' "${config_null_istio}"
|
||||
|
||||
echo "==> EXIT trap propagates the script's exit code, not the notification's"
|
||||
# The trap's own curl call is best-effort (failures are logged with
|
||||
# `|| echo ... >&2`, not swallowed with `|| true`) and must not mask a
|
||||
# failed migration. Extract the two rendered lines and actually run them,
|
||||
# with curl pointed at a closed local port so the notification itself fails,
|
||||
# to make sure the wrapped script's real exit code still comes through.
|
||||
quit_endpoint_line="$(grep -F 'ISTIO_QUIT_ENDPOINT=' <<<"${config_terminate}" || true)"
|
||||
trap_line="$(grep -F "trap 'rc=\$?; curl" <<<"${config_terminate}" || true)"
|
||||
if [[ -z "${quit_endpoint_line}" || -z "${trap_line}" ]]; then
|
||||
echo " FAIL: script exit code (42) survives a failing quitquitquit notification"
|
||||
echo " could not locate the rendered ISTIO_QUIT_ENDPOINT/trap lines to exercise"
|
||||
fail=$((fail + 1))
|
||||
else
|
||||
set +e
|
||||
(
|
||||
eval "${quit_endpoint_line}"
|
||||
ISTIO_QUIT_ENDPOINT="http://127.0.0.1:1/quitquitquit"
|
||||
eval "${trap_line}"
|
||||
exit 42
|
||||
)
|
||||
trap_test_rc=$?
|
||||
set -e
|
||||
if [[ "${trap_test_rc}" -eq 42 ]]; then
|
||||
echo " PASS: script exit code (42) survives a failing quitquitquit notification"
|
||||
pass=$((pass + 1))
|
||||
else
|
||||
echo " FAIL: script exit code (42) survives a failing quitquitquit notification"
|
||||
echo " got exit code: ${trap_test_rc}"
|
||||
fail=$((fail + 1))
|
||||
fi
|
||||
fi
|
||||
|
||||
echo
|
||||
echo "passed: ${pass}, failed: ${fail}"
|
||||
if [[ ${fail} -gt 0 ]]; then
|
||||
exit 1
|
||||
fi
|
||||
@@ -1241,31 +1241,6 @@ init:
|
||||
topologySpreadConstraints: []
|
||||
# -- Set priorityClassName for init job pods
|
||||
priorityClassName: ~
|
||||
# -- Configuration for compatibility with the Istio service mesh.
|
||||
# Without these mitigations, when the init-db Job runs in a namespace with
|
||||
# automatic Istio sidecar injection enabled, the injected envoy-proxy
|
||||
# container keeps running after the init container has exited, preventing
|
||||
# the Job from ever reaching the Completed state.
|
||||
# See https://github.com/apache/superset/issues/25798
|
||||
istio:
|
||||
# -- When true, adds the `sidecar.istio.io/inject: "false"` label to the
|
||||
# init job pod template, opting it out of Istio automatic sidecar
|
||||
# injection. This is the recommended fix when the cluster's mesh policy
|
||||
# allows opting out per pod.
|
||||
disableSidecarInjection: false
|
||||
# -- When true, the rendered `superset_init.sh` script (from the internal
|
||||
# `superset.initScript` template) registers an `EXIT` trap that POSTs to
|
||||
# the Istio pilot-agent's `/quitquitquit` endpoint after the init logic
|
||||
# finishes, gracefully terminating an injected envoy-proxy sidecar so
|
||||
# the Job can complete. Enable this when sidecar injection cannot be
|
||||
# disabled per pod (e.g. when enforced by a cluster-wide Istio policy).
|
||||
# Note: requires `curl` to be available in the init container image
|
||||
# (it is included in the default `apache/superset` image) and only
|
||||
# takes effect when `init.command` sources the rendered `superset_init.sh`.
|
||||
terminateSidecarOnExit: false
|
||||
# -- Endpoint that the trap POSTs to in order to terminate the sidecar.
|
||||
# The default matches the standard Istio pilot-agent admin port.
|
||||
quitEndpoint: "http://localhost:15020/quitquitquit"
|
||||
|
||||
# -- Configuration values for the postgresql dependency.
|
||||
# ref: https://github.com/bitnami/charts/tree/main/bitnami/postgresql
|
||||
|
||||
@@ -96,7 +96,7 @@ dependencies = [
|
||||
"python-dateutil",
|
||||
"python-dotenv", # optional dependencies for Flask but required for Superset, see https://flask.palletsprojects.com/en/stable/installation/#optional-dependencies
|
||||
"pygeohash",
|
||||
"pyarrow>=24.0.0, <26", # before upgrading pyarrow, check that all db dependencies support this, see e.g. https://github.com/apache/superset/pull/34693
|
||||
"pyarrow>=24.0.0, <25", # before upgrading pyarrow, check that all db dependencies support this, see e.g. https://github.com/apache/superset/pull/34693
|
||||
"pyyaml>=6.0.3, <7.0.0",
|
||||
"PyJWT>=2.4.0, <3.0",
|
||||
"redis>=5.0.0, <9.0",
|
||||
|
||||
@@ -30,7 +30,7 @@ cryptography>=49.0.0,<50.0.0
|
||||
# Security: Snyk - XSS vulnerability in Mako templates
|
||||
mako>=1.3.11,<2.0.0
|
||||
# Security: CVE-2024-52338 (CRITICAL) - Deserialization of untrusted data in IPC/Parquet readers
|
||||
pyarrow>=24.0.0,<26.0.0
|
||||
pyarrow>=24.0.0,<25.0.0
|
||||
# Security: CVE-2026-27459 - pyopenssl certificate validation
|
||||
pyopenssl>=26.0.0,<27.0.0
|
||||
# Security: CVE-2026-25645 (MEDIUM) - Insecure Temporary File
|
||||
|
||||
@@ -297,7 +297,7 @@ prison==0.2.1
|
||||
# via flask-appbuilder
|
||||
prompt-toolkit==3.0.51
|
||||
# via click-repl
|
||||
pyarrow==25.0.0
|
||||
pyarrow==24.0.0
|
||||
# via
|
||||
# -r requirements/base.in
|
||||
# apache-superset (pyproject.toml)
|
||||
|
||||
@@ -721,7 +721,7 @@ psycopg2-binary==2.9.12
|
||||
# via apache-superset
|
||||
py-key-value-aio==0.4.4
|
||||
# via fastmcp-slim
|
||||
pyarrow==25.0.0
|
||||
pyarrow==24.0.0
|
||||
# via
|
||||
# -c requirements/base-constraint.txt
|
||||
# apache-superset
|
||||
|
||||
@@ -31,18 +31,14 @@ from urllib.request import Request, urlopen
|
||||
MAX_RETRIES: int = 4
|
||||
RETRY_BACKOFF_SECONDS: int = 2
|
||||
REQUEST_TIMEOUT_SECONDS: int = 30
|
||||
# GitHub returns 429 when throttling, which is transient and worth retrying
|
||||
# alongside 5xx server errors. It also returns 403 for two very different
|
||||
# reasons — a secondary rate limit, and a token missing the required scope —
|
||||
# so 403 is only retried when the response headers show throttling. Retrying a
|
||||
# scope failure just delays the error and buries its cause.
|
||||
RETRYABLE_STATUS_CODES: frozenset[int] = frozenset({429})
|
||||
# GitHub returns 429 (and 403 for secondary rate limits) when throttling, which
|
||||
# is transient and worth retrying alongside 5xx server errors.
|
||||
RETRYABLE_STATUS_CODES: frozenset[int] = frozenset({403, 429})
|
||||
|
||||
# Define patterns for each group of files you're interested in
|
||||
PATTERNS = {
|
||||
"python": [
|
||||
r"^\.github/workflows/.*python",
|
||||
r"^docker-compose-image-tag\.yml$",
|
||||
r"^tests/",
|
||||
r"^superset/",
|
||||
r"^scripts/",
|
||||
@@ -72,37 +68,6 @@ PATTERNS = {
|
||||
GITHUB_TOKEN = os.environ.get("GITHUB_TOKEN")
|
||||
|
||||
|
||||
def _is_rate_limited(err: HTTPError) -> bool:
|
||||
"""Whether a 403 is GitHub throttling rather than a missing token scope."""
|
||||
headers = getattr(err, "headers", None)
|
||||
if headers is None:
|
||||
return False
|
||||
try:
|
||||
return (
|
||||
headers.get("x-ratelimit-remaining") == "0"
|
||||
or headers.get("retry-after") is not None
|
||||
)
|
||||
except AttributeError:
|
||||
return False
|
||||
|
||||
|
||||
def _api_error_detail(err: object) -> str:
|
||||
"""The API's own explanation, e.g. ``Resource not accessible by integration``.
|
||||
|
||||
Without this a 403 is indistinguishable from a rate limit in the CI log.
|
||||
"""
|
||||
try:
|
||||
body = err.read().decode("utf-8", "replace") # type: ignore[attr-defined]
|
||||
except Exception: # noqa: BLE001 # pylint: disable=broad-except
|
||||
return ""
|
||||
try:
|
||||
detail = json.loads(body).get("message") or body
|
||||
except (ValueError, AttributeError):
|
||||
detail = body
|
||||
# Bound the output so a large/HTML error page can't flood the CI log.
|
||||
return detail[:500]
|
||||
|
||||
|
||||
def fetch_files_github_api(url: str): # type: ignore
|
||||
"""Fetches data using GitHub API, retrying on transient failures."""
|
||||
req = Request(url) # noqa: S310
|
||||
@@ -122,14 +87,9 @@ def fetch_files_github_api(url: str): # type: ignore
|
||||
# re-raise once the retry budget is exhausted.
|
||||
status = getattr(err, "code", None)
|
||||
is_transient = (
|
||||
status is None
|
||||
or status >= 500
|
||||
or status in RETRYABLE_STATUS_CODES
|
||||
or (status == 403 and _is_rate_limited(err)) # type: ignore[arg-type]
|
||||
status is None or status >= 500 or status in RETRYABLE_STATUS_CODES
|
||||
)
|
||||
if not is_transient or attempt == MAX_RETRIES:
|
||||
if detail := _api_error_detail(err):
|
||||
print(f"GitHub API error {status}: {detail}")
|
||||
raise
|
||||
wait = RETRY_BACKOFF_SECONDS * 2 ** (attempt - 1)
|
||||
print(
|
||||
|
||||
@@ -35,7 +35,7 @@ acquire_rat_jar () {
|
||||
wget --quiet ${URL} -O "$JAR_DL" && mv "$JAR_DL" "$JAR"
|
||||
else
|
||||
printf "You do not have curl or wget installed, please install rat manually.\n"
|
||||
exit -1
|
||||
exit 255
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -44,7 +44,7 @@ acquire_rat_jar () {
|
||||
# We failed to download
|
||||
rm "$JAR"
|
||||
printf "Our attempt to download rat locally to ${JAR} failed. Please install rat manually.\n"
|
||||
exit -1
|
||||
exit 255
|
||||
fi
|
||||
printf "Done downloading.\n"
|
||||
}
|
||||
|
||||
@@ -163,10 +163,10 @@ do
|
||||
# Iterate through the components of the version strings
|
||||
for (( j=0; j<${#THIS_TAG_NAME_ARRAY[@]}; j++ )); do
|
||||
echo "Comparing ${THIS_TAG_NAME_ARRAY[$j]} to ${LATEST_RELEASE_TAG_ARRAY[$j]}"
|
||||
if [[ $((THIS_TAG_NAME_ARRAY[$j])) > $((LATEST_RELEASE_TAG_ARRAY[$j])) ]]; then
|
||||
if [[ $((THIS_TAG_NAME_ARRAY[$j])) -gt $((LATEST_RELEASE_TAG_ARRAY[$j])) ]]; then
|
||||
compare_result="greater"
|
||||
break
|
||||
elif [[ $((THIS_TAG_NAME_ARRAY[$j])) < $((LATEST_RELEASE_TAG_ARRAY[$j])) ]]; then
|
||||
elif [[ $((THIS_TAG_NAME_ARRAY[$j])) -lt $((LATEST_RELEASE_TAG_ARRAY[$j])) ]]; then
|
||||
compare_result="lesser"
|
||||
break
|
||||
fi
|
||||
|
||||
@@ -215,7 +215,6 @@
|
||||
"jsx-a11y/no-noninteractive-tabindex": "error",
|
||||
"jsx-a11y/no-redundant-roles": "error",
|
||||
"jsx-a11y/no-static-element-interactions": "error",
|
||||
"jsx-a11y/prefer-tag-over-role": "error",
|
||||
"jsx-a11y/role-has-required-aria-props": "error",
|
||||
"jsx-a11y/role-supports-aria-props": "error",
|
||||
"jsx-a11y/scope": "error",
|
||||
|
||||
1196
superset-frontend/package-lock.json
generated
1196
superset-frontend/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -115,9 +115,9 @@
|
||||
"@emotion/cache": "^11.4.0",
|
||||
"@emotion/react": "^11.14.0",
|
||||
"@emotion/styled": "^11.14.1",
|
||||
"@fontsource/fira-code": "^5.3.0",
|
||||
"@fontsource/ibm-plex-mono": "^5.3.0",
|
||||
"@fontsource/inter": "^5.3.0",
|
||||
"@fontsource/fira-code": "^5.2.7",
|
||||
"@fontsource/ibm-plex-mono": "^5.2.7",
|
||||
"@fontsource/inter": "^5.2.8",
|
||||
"@googleapis/sheets": "^13.0.2",
|
||||
"@great-expectations/jsonforms-antd-renderers": "^2.2.10",
|
||||
"@jsonforms/core": "^3.7.0",
|
||||
@@ -130,9 +130,9 @@
|
||||
"@luma.gl/shadertools": "~9.2.5",
|
||||
"@luma.gl/webgl": "~9.2.5",
|
||||
"@reduxjs/toolkit": "^1.9.3",
|
||||
"@rjsf/core": "^6.7.0",
|
||||
"@rjsf/core": "^6.6.2",
|
||||
"@rjsf/utils": "^6.6.2",
|
||||
"@rjsf/validator-ajv8": "^6.7.0",
|
||||
"@rjsf/validator-ajv8": "^6.6.2",
|
||||
"@scarf/scarf": "^1.4.0",
|
||||
"@superset-ui/chart-controls": "file:./packages/superset-ui-chart-controls",
|
||||
"@superset-ui/core": "file:./packages/superset-ui-core",
|
||||
@@ -166,10 +166,10 @@
|
||||
"@visx/scale": "^4.0.0",
|
||||
"@visx/tooltip": "^4.0.0",
|
||||
"@visx/xychart": "^4.0.0",
|
||||
"ag-grid-community": "36.0.2",
|
||||
"ag-grid-react": "36.0.2",
|
||||
"ag-grid-community": "36.0.1",
|
||||
"ag-grid-react": "36.0.1",
|
||||
"antd": "^6.5.1",
|
||||
"chrono-node": "^2.10.1",
|
||||
"chrono-node": "^2.10.0",
|
||||
"classnames": "^2.2.5",
|
||||
"content-disposition": "^2.0.1",
|
||||
"d3-scale": "^4.0.2",
|
||||
@@ -196,7 +196,7 @@
|
||||
"lodash": "^4.18.1",
|
||||
"lodash-es": "^4.18.1",
|
||||
"mapbox-gl": "^3.26.0",
|
||||
"markdown-to-jsx": "^9.9.0",
|
||||
"markdown-to-jsx": "^9.8.2",
|
||||
"match-sorter": "^8.3.0",
|
||||
"memoize-one": "^6.0.0",
|
||||
"mousetrap": "^1.6.5",
|
||||
@@ -206,7 +206,7 @@
|
||||
"query-string": "9.4.1",
|
||||
"re-resizable": "^6.11.2",
|
||||
"react": "^18.3.0",
|
||||
"react-arborist": "^3.15.1",
|
||||
"react-arborist": "^3.13.2",
|
||||
"react-checkbox-tree": "^1.8.0",
|
||||
"react-diff-viewer-continued": "^4.4.0",
|
||||
"react-dnd": "^11.1.3",
|
||||
@@ -267,12 +267,12 @@
|
||||
"@istanbuljs/nyc-config-typescript": "^1.0.1",
|
||||
"@playwright/test": "^1.61.1",
|
||||
"@pmmmwh/react-refresh-webpack-plugin": "^0.6.2",
|
||||
"@storybook/addon-docs": "10.5.3",
|
||||
"@storybook/addon-links": "10.5.3",
|
||||
"@storybook/react-webpack5": "10.5.3",
|
||||
"@storybook/addon-docs": "10.5.2",
|
||||
"@storybook/addon-links": "10.5.2",
|
||||
"@storybook/react-webpack5": "10.5.2",
|
||||
"@storybook/test-runner": "0.24.4",
|
||||
"@svgr/webpack": "^8.1.0",
|
||||
"@swc/core": "^1.15.46",
|
||||
"@swc/core": "^1.15.43",
|
||||
"@swc/plugin-emotion": "^14.15.0",
|
||||
"@swc/plugin-transform-imports": "^12.5.0",
|
||||
"@testing-library/dom": "^9.3.4",
|
||||
@@ -300,13 +300,13 @@
|
||||
"@types/rison": "0.1.0",
|
||||
"@types/tinycolor2": "^1.4.3",
|
||||
"@types/unzipper": "^0.10.11",
|
||||
"@typescript-eslint/eslint-plugin": "^8.65.0",
|
||||
"@typescript-eslint/eslint-plugin": "^8.64.0",
|
||||
"@typescript-eslint/parser": "^8.63.0",
|
||||
"babel-jest": "^30.4.1",
|
||||
"babel-loader": "^10.1.1",
|
||||
"babel-plugin-dynamic-import-node": "^2.3.3",
|
||||
"babel-plugin-jsx-remove-data-test-id": "^3.0.0",
|
||||
"baseline-browser-mapping": "^2.11.1",
|
||||
"baseline-browser-mapping": "^2.10.43",
|
||||
"cheerio": "1.2.0",
|
||||
"concurrently": "^10.0.3",
|
||||
"copy-webpack-plugin": "^14.0.0",
|
||||
@@ -325,7 +325,7 @@
|
||||
"eslint-plugin-prettier": "^5.5.6",
|
||||
"eslint-plugin-react-prefer-function-component": "^5.0.0",
|
||||
"eslint-plugin-react-you-might-not-need-an-effect": "^1.0.1",
|
||||
"eslint-plugin-storybook": "10.5.3",
|
||||
"eslint-plugin-storybook": "10.5.2",
|
||||
"eslint-plugin-testing-library": "^7.16.2",
|
||||
"eslint-plugin-theme-colors": "file:eslint-rules/eslint-plugin-theme-colors",
|
||||
"fetch-mock": "^12.6.0",
|
||||
@@ -340,33 +340,33 @@
|
||||
"js-yaml-loader": "^1.2.2",
|
||||
"jsdom": "^29.1.1",
|
||||
"lerna": "^9.0.4",
|
||||
"lightningcss": "^1.33.0",
|
||||
"lightningcss": "^1.32.0",
|
||||
"mini-css-extract-plugin": "^2.10.2",
|
||||
"minimizer-webpack-plugin": "^5.6.1",
|
||||
"open-cli": "^9.0.0",
|
||||
"oxlint": "^1.75.0",
|
||||
"oxlint": "^1.74.0",
|
||||
"po2json": "^0.4.5",
|
||||
"postcss-styled-syntax": "^0.7.2",
|
||||
"prettier": "3.9.6",
|
||||
"prettier": "3.9.5",
|
||||
"prettier-plugin-packagejson": "^3.0.2",
|
||||
"process": "^0.11.10",
|
||||
"react-dnd-test-backend": "^16.0.1",
|
||||
"react-refresh": "^0.18.0",
|
||||
"react-resizable": "^4.0.2",
|
||||
"redux-mock-store": "^1.5.4",
|
||||
"source-map": "^0.8.0",
|
||||
"source-map": "^0.7.6",
|
||||
"source-map-support": "^0.5.21",
|
||||
"speed-measure-webpack-plugin": "^1.6.0",
|
||||
"storybook": "10.5.3",
|
||||
"storybook": "10.5.2",
|
||||
"style-loader": "^4.0.0",
|
||||
"stylelint": "^17.14.1",
|
||||
"stylelint": "^17.14.0",
|
||||
"swc-loader": "^0.2.7",
|
||||
"ts-jest": "^29.4.12",
|
||||
"ts-jest": "^29.4.11",
|
||||
"tscw-config": "^1.1.2",
|
||||
"tsx": "^4.23.1",
|
||||
"typescript": "5.4.5",
|
||||
"unzipper": "^0.12.5",
|
||||
"wait-on": "^9.1.0",
|
||||
"wait-on": "^9.0.10",
|
||||
"webpack": "^5.108.4",
|
||||
"webpack-bundle-analyzer": "^5.3.1",
|
||||
"webpack-cli": "^7.0.3",
|
||||
|
||||
@@ -31,8 +31,8 @@
|
||||
"@types/json-bigint": "^1.0.4",
|
||||
"@visx/responsive": "^4.0.0",
|
||||
"ace-builds": "^1.44.0",
|
||||
"ag-grid-community": "36.0.2",
|
||||
"ag-grid-react": "36.0.2",
|
||||
"ag-grid-community": "36.0.1",
|
||||
"ag-grid-react": "36.0.1",
|
||||
"brace": "^0.11.1",
|
||||
"classnames": "^2.5.1",
|
||||
"core-js": "^3.49.0",
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
import { render, screen, userEvent } from '@superset-ui/core/spec';
|
||||
import { render, screen, userEvent, fireEvent } from '@superset-ui/core/spec';
|
||||
import { Icons } from '@superset-ui/core/components/Icons';
|
||||
import { ActionButton } from '.';
|
||||
|
||||
@@ -45,6 +45,18 @@ test('calls onClick when clicked', async () => {
|
||||
expect(onClick).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
|
||||
test('calls onClick when activated with the keyboard', () => {
|
||||
const onClick = jest.fn();
|
||||
render(<ActionButton {...defaultProps} onClick={onClick} />);
|
||||
|
||||
const button = screen.getByRole('button');
|
||||
fireEvent.keyDown(button, { key: 'Enter' });
|
||||
expect(onClick).toHaveBeenCalledTimes(1);
|
||||
|
||||
fireEvent.keyDown(button, { key: ' ' });
|
||||
expect(onClick).toHaveBeenCalledTimes(2);
|
||||
});
|
||||
|
||||
test('renders with tooltip when tooltip prop is provided', async () => {
|
||||
const tooltipText = 'This is a tooltip';
|
||||
render(<ActionButton {...defaultProps} tooltip={tooltipText} />);
|
||||
@@ -103,6 +115,6 @@ test('has proper accessibility attributes', () => {
|
||||
render(<ActionButton {...defaultProps} />);
|
||||
|
||||
const button = screen.getByRole('button');
|
||||
expect(button.tagName).toBe('BUTTON');
|
||||
expect(button).toHaveAttribute('type', 'button');
|
||||
expect(button).toHaveAttribute('tabIndex', '0');
|
||||
expect(button).toHaveAttribute('role', 'button');
|
||||
});
|
||||
|
||||
@@ -17,8 +17,8 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
import { handleKeyboardActivation } from '../../utils';
|
||||
import type { ReactElement, ReactNode } from 'react';
|
||||
import cx from 'classnames';
|
||||
import { Tooltip, type TooltipPlacement } from '@superset-ui/core/components';
|
||||
import { css, useTheme } from '@apache-superset/core/theme';
|
||||
|
||||
@@ -28,9 +28,6 @@ export interface ActionProps {
|
||||
placement?: TooltipPlacement;
|
||||
icon: ReactNode;
|
||||
onClick: () => void;
|
||||
className?: string;
|
||||
disabled?: boolean;
|
||||
dataTest?: string;
|
||||
}
|
||||
|
||||
export const ActionButton = ({
|
||||
@@ -39,45 +36,30 @@ export const ActionButton = ({
|
||||
placement,
|
||||
icon,
|
||||
onClick,
|
||||
className,
|
||||
disabled = false,
|
||||
dataTest,
|
||||
}: ActionProps) => {
|
||||
const theme = useTheme();
|
||||
const actionButton = (
|
||||
<button
|
||||
type="button"
|
||||
aria-disabled={disabled}
|
||||
<span
|
||||
role="button"
|
||||
tabIndex={0}
|
||||
aria-label={typeof tooltip === 'string' ? tooltip : label}
|
||||
css={css`
|
||||
appearance: none;
|
||||
border: none;
|
||||
background: none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
font: inherit;
|
||||
line-height: 1;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
cursor: pointer;
|
||||
color: ${theme.colorIcon};
|
||||
margin-right: ${theme.sizeUnit}px;
|
||||
&:not(.disabled):hover {
|
||||
&:hover {
|
||||
path {
|
||||
fill: ${theme.colorPrimary};
|
||||
}
|
||||
}
|
||||
&.disabled {
|
||||
color: ${theme.colorTextDisabled};
|
||||
cursor: not-allowed;
|
||||
}
|
||||
`}
|
||||
className={cx('action-button', className, { disabled })}
|
||||
data-test={dataTest ?? label}
|
||||
onClick={disabled ? undefined : onClick}
|
||||
className="action-button"
|
||||
data-test={label}
|
||||
onClick={onClick}
|
||||
onKeyDown={onClick ? handleKeyboardActivation(onClick) : undefined}
|
||||
>
|
||||
{icon}
|
||||
</button>
|
||||
</span>
|
||||
);
|
||||
|
||||
const tooltipId = `${label.replaceAll(' ', '-').toLowerCase()}-tooltip`;
|
||||
|
||||
@@ -18,11 +18,7 @@
|
||||
*/
|
||||
import { createRef } from 'react';
|
||||
import { render, screen, waitFor } from '@superset-ui/core/spec';
|
||||
import {
|
||||
supersetTheme,
|
||||
ThemeProvider,
|
||||
type SupersetTheme,
|
||||
} from '@apache-superset/core/theme';
|
||||
import { supersetTheme } from '@apache-superset/core/theme';
|
||||
import type AceEditor from 'react-ace';
|
||||
import {
|
||||
AsyncAceEditor,
|
||||
@@ -34,7 +30,6 @@ import {
|
||||
JsonEditor,
|
||||
ConfigEditor,
|
||||
aceCompletionHighlightStyles,
|
||||
aceSelectedWordStyles,
|
||||
} from '.';
|
||||
|
||||
import type { AceModule, AsyncAceEditorOptions } from './types';
|
||||
@@ -60,81 +55,6 @@ test('themes the autocomplete completion highlight from the theme', () => {
|
||||
expect(styles).toContain(supersetTheme.colorPrimaryText);
|
||||
});
|
||||
|
||||
test('themes the selected-word occurrence markers from the theme', () => {
|
||||
// The light `github` theme hardcodes a near-white box for the markers Ace
|
||||
// paints on every other occurrence of the selected token, which makes the
|
||||
// recolored token glyphs unreadable in dark mode. The shared editor overrides
|
||||
// the marker to reuse the dark-aware selection color so it stays legible.
|
||||
const { styles } = aceSelectedWordStyles(supersetTheme);
|
||||
|
||||
expect(styles).toContain('.ace_selected-word');
|
||||
// The default theme leaves `colorEditorSelection` unset, so the marker uses
|
||||
// the documented `colorPrimaryBgHover` fallback.
|
||||
expect(styles).toContain(supersetTheme.colorPrimaryBgHover);
|
||||
// The override also restyles the marker border from the theme...
|
||||
expect(styles).toContain(supersetTheme.colorBorder);
|
||||
// ...and carries `!important`, which is what lets it win over Ace's bundled
|
||||
// non-important `.ace-github .ace_marker-layer .ace_selected-word` near-white
|
||||
// rule regardless of stylesheet order (the effective-cascade guarantee that
|
||||
// jsdom cannot verify by computed style).
|
||||
expect(styles).toContain('!important');
|
||||
});
|
||||
|
||||
// Collect every CSS rule the render injected: emotion's Global styles land in
|
||||
// <style> tags (non-speedy in test) while Ace's bundled theme uses the CSSOM,
|
||||
// so read both to reliably observe what actually reached the document.
|
||||
function getInjectedCss(): string {
|
||||
const fromTags = Array.from(document.querySelectorAll('style'))
|
||||
.map(tag => tag.textContent ?? '')
|
||||
.join('\n');
|
||||
const fromSheets = Array.from(document.styleSheets)
|
||||
.map(sheet => {
|
||||
try {
|
||||
return Array.from(sheet.cssRules)
|
||||
.map(rule => rule.cssText)
|
||||
.join('\n');
|
||||
} catch {
|
||||
return '';
|
||||
}
|
||||
})
|
||||
.join('\n');
|
||||
return `${fromTags}\n${fromSheets}`;
|
||||
}
|
||||
|
||||
test('wires the dark-aware selected-word marker into the editor Global styles', async () => {
|
||||
// Guards the actual regression: Ace's bundled `github` theme already injects
|
||||
// a near-white `.ace-github ... .ace_selected-word` rule, so the fix is only
|
||||
// effective if the editor's own Global block also emits a `.ace_selected-word`
|
||||
// override driven by the theme. Render with a distinctive `colorEditorSelection`
|
||||
// and assert that value reaches the injected selected-word rule — this fails if
|
||||
// the `${aceSelectedWordStyles(token)}` interpolation is dropped from <Global>.
|
||||
const markerColor = '#010203';
|
||||
const darkTheme: SupersetTheme = {
|
||||
...supersetTheme,
|
||||
colorEditorSelection: markerColor,
|
||||
};
|
||||
|
||||
// The shared `render` helper injects its own default `SupersetThemeProvider`,
|
||||
// so nest the dark theme around the editor itself: the innermost emotion
|
||||
// `ThemeProvider` is what the editor's `useTheme()` resolves.
|
||||
const { container } = render(
|
||||
<ThemeProvider theme={darkTheme}>
|
||||
<SQLEditor />
|
||||
</ThemeProvider>,
|
||||
);
|
||||
|
||||
await waitFor(() => {
|
||||
expect(container.querySelector('[id="ace-editor"]')).toBeInTheDocument();
|
||||
});
|
||||
|
||||
const css = getInjectedCss();
|
||||
// The dark-aware color is tied specifically to the selected-word marker
|
||||
// (not just the plain `.ace_selection`), so the occurrence markers inherit it.
|
||||
expect(css).toMatch(
|
||||
new RegExp(`\\.ace_selected-word[^}]*${markerColor}`, 'i'),
|
||||
);
|
||||
});
|
||||
|
||||
test('SQLEditor uses fontFamilyCode from theme', async () => {
|
||||
const ref = createRef<AceEditor>();
|
||||
const { container } = render(<SQLEditor ref={ref as React.Ref<never>} />);
|
||||
|
||||
@@ -113,14 +113,6 @@ export type AsyncAceEditorOptions = {
|
||||
> | null;
|
||||
};
|
||||
|
||||
/**
|
||||
* Dark-aware color for text selection in the editor. Shared so the plain
|
||||
* selection and the "selected word" occurrence markers always match, falling
|
||||
* back to `colorPrimaryBgHover` on themes that don't define the token.
|
||||
*/
|
||||
export const editorSelectionColor = (token: SupersetTheme) =>
|
||||
token.colorEditorSelection ?? token.colorPrimaryBgHover;
|
||||
|
||||
/**
|
||||
* Theme-aware styling for the matched-prefix highlight in the autocomplete
|
||||
* popup. Ace ships a hardcoded `color: #000` that is invisible on the dark
|
||||
@@ -134,20 +126,6 @@ export const aceCompletionHighlightStyles = (token: SupersetTheme) => css`
|
||||
}
|
||||
`;
|
||||
|
||||
/**
|
||||
* Theme-aware styling for the "selected word" markers Ace paints on every other
|
||||
* occurrence of the currently selected token. The light `github` theme hardcodes
|
||||
* a near-white box (`rgb(250,250,255)`); in dark mode the recolored token glyphs
|
||||
* sit on it unreadably. Reuse the same dark-aware selection color as
|
||||
* `.ace_selection` so the markers stay legible in every theme.
|
||||
*/
|
||||
export const aceSelectedWordStyles = (token: SupersetTheme) => css`
|
||||
.ace_editor .ace_marker-layer .ace_selected-word {
|
||||
background-color: ${editorSelectionColor(token)} !important;
|
||||
border: 1px solid ${token.colorBorder} !important;
|
||||
}
|
||||
`;
|
||||
|
||||
/**
|
||||
* Get an async AceEditor with automatical loading of specified ace modules.
|
||||
*/
|
||||
@@ -411,11 +389,11 @@ export function AsyncAceEditor(
|
||||
}
|
||||
/* Adjust selection color */
|
||||
.ace_editor .ace_selection {
|
||||
background-color: ${editorSelectionColor(token)} !important;
|
||||
background-color: ${
|
||||
token.colorEditorSelection ?? token.colorPrimaryBgHover
|
||||
} !important;
|
||||
}
|
||||
|
||||
${aceSelectedWordStyles(token)}
|
||||
|
||||
/* Improve active line highlighting */
|
||||
.ace_editor .ace_active-line {
|
||||
background-color: ${token.colorPrimaryBg} !important;
|
||||
|
||||
@@ -21,11 +21,7 @@ import type { ButtonGroupProps } from './types';
|
||||
export function ButtonGroup(props: ButtonGroupProps) {
|
||||
const { className, children } = props;
|
||||
return (
|
||||
// role="group" is the correct ARIA pattern for a generic button toolbar;
|
||||
// the suggested native tags (fieldset, etc.) carry unrelated form
|
||||
// semantics and unwanted default browser styling.
|
||||
<div
|
||||
// eslint-disable-next-line jsx-a11y/prefer-tag-over-role
|
||||
role="group"
|
||||
className={className}
|
||||
css={{
|
||||
|
||||
@@ -134,10 +134,6 @@ const ImageContainer = ({
|
||||
? imageMap[image as keyof typeof imageMap]
|
||||
: image;
|
||||
return (
|
||||
// Groups Empty's SVG illustration + description into one accessible
|
||||
// image; can't be a literal <img> since it's a component tree, not an
|
||||
// image file reference.
|
||||
// eslint-disable-next-line jsx-a11y/prefer-tag-over-role
|
||||
<div role="img" aria-label="empty">
|
||||
<Empty
|
||||
description={false}
|
||||
|
||||
@@ -25,12 +25,8 @@ import { Icons } from '@superset-ui/core/components/Icons';
|
||||
import { Tooltip } from '../Tooltip';
|
||||
import type { FaveStarProps } from './types';
|
||||
|
||||
const StyledLink = styled.button`
|
||||
const StyledLink = styled.a`
|
||||
${({ theme }) => css`
|
||||
appearance: none;
|
||||
border: none;
|
||||
background: none;
|
||||
font: inherit;
|
||||
font-size: ${theme.fontSizeXL}px;
|
||||
display: flex;
|
||||
padding: 0 0 0 ${theme.sizeUnit * 2}px;
|
||||
@@ -59,10 +55,12 @@ export const FaveStar = ({
|
||||
|
||||
const content = (
|
||||
<StyledLink
|
||||
type="button"
|
||||
href="#"
|
||||
onClick={onClick}
|
||||
className="fave-unfave-icon"
|
||||
data-test="fave-unfave-icon"
|
||||
role="button"
|
||||
tabIndex={0}
|
||||
>
|
||||
{isStarred ? (
|
||||
<Icons.StarFilled
|
||||
|
||||
@@ -102,10 +102,6 @@ export const LabeledErrorBoundInput = ({
|
||||
</Tooltip>
|
||||
)
|
||||
}
|
||||
// input[type=password] doesn't get an implicit "textbox" role
|
||||
// (unlike other text inputs), so this explicit override is
|
||||
// needed for it to be discoverable via role-based queries/AT.
|
||||
// eslint-disable-next-line jsx-a11y/prefer-tag-over-role
|
||||
role="textbox"
|
||||
/>
|
||||
) : renderAsTextArea ? (
|
||||
|
||||
@@ -79,12 +79,8 @@ const IconButton: React.FC<IconButtonProps> = ({
|
||||
};
|
||||
|
||||
return (
|
||||
// antd's Card renders a fixed <div> (no polymorphic tag support) with
|
||||
// its own rich internal layout (cover/title/tooltip); that doesn't map
|
||||
// onto a native <button>, so role="button" is used instead.
|
||||
<Card
|
||||
hoverable
|
||||
// eslint-disable-next-line jsx-a11y/prefer-tag-over-role
|
||||
role="button"
|
||||
tabIndex={0}
|
||||
aria-label={buttonText}
|
||||
|
||||
@@ -99,10 +99,6 @@ export function Loading({
|
||||
$spinnerHeight="auto"
|
||||
$opacity={opacity}
|
||||
className={cls('loading', position, className)}
|
||||
// role="status" is the standard WAI-ARIA live-region pattern for a
|
||||
// loading spinner; <output> (the suggested tag) is for form
|
||||
// calculation results, not a fit here.
|
||||
// eslint-disable-next-line jsx-a11y/prefer-tag-over-role
|
||||
role="status"
|
||||
aria-live="polite"
|
||||
aria-label={t('Loading')}
|
||||
|
||||
@@ -89,7 +89,6 @@ const StyledItem = styled.div<{
|
||||
& .metadata-text {
|
||||
color: ${theme.colorTextSecondary};
|
||||
min-width: ${TEXT_MIN_WIDTH}px;
|
||||
max-width: ${TEXT_MAX_WIDTH}px;
|
||||
overflow: hidden;
|
||||
text-overflow: ${collapsed ? 'unset' : 'ellipsis'};
|
||||
white-space: nowrap;
|
||||
|
||||
@@ -127,15 +127,10 @@ export const ModalTrigger = forwardRef(
|
||||
</Button>
|
||||
)}
|
||||
{!isButton && (
|
||||
// Generic wrapper used by 19+ callers passing arbitrary
|
||||
// triggerNode content that relies on block-level <div> layout;
|
||||
// swapping to <button> risks a layout regression across callers
|
||||
// with no shared CSS to guide a safe reset.
|
||||
<div
|
||||
data-test="span-modal-trigger"
|
||||
onClick={open}
|
||||
onKeyDown={handleKeyboardActivation(open)}
|
||||
// eslint-disable-next-line jsx-a11y/prefer-tag-over-role
|
||||
role="button"
|
||||
tabIndex={0}
|
||||
>
|
||||
|
||||
@@ -103,18 +103,7 @@ const PopoverDropdown = (props: PopoverDropdownProps) => {
|
||||
})),
|
||||
}}
|
||||
>
|
||||
<button
|
||||
type="button"
|
||||
css={{
|
||||
appearance: 'none',
|
||||
border: 'none',
|
||||
background: 'none',
|
||||
padding: 0,
|
||||
font: 'inherit',
|
||||
display: 'flex',
|
||||
alignItems: 'center',
|
||||
}}
|
||||
>
|
||||
<div role="button" css={{ display: 'flex', alignItems: 'center' }}>
|
||||
{selected && renderButton(selected)}
|
||||
<Icons.DownOutlined
|
||||
iconSize="s"
|
||||
@@ -123,7 +112,7 @@ const PopoverDropdown = (props: PopoverDropdownProps) => {
|
||||
marginLeft: theme.sizeUnit * 0.5,
|
||||
}}
|
||||
/>
|
||||
</button>
|
||||
</div>
|
||||
</Dropdown>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -22,7 +22,7 @@ import PopoverSection from '.';
|
||||
test('renders with default props', async () => {
|
||||
render(
|
||||
<PopoverSection title="Title">
|
||||
<form aria-label="test-form" />
|
||||
<div role="form" />
|
||||
</PopoverSection>,
|
||||
);
|
||||
expect(await screen.findByRole('form')).toBeInTheDocument();
|
||||
@@ -32,7 +32,7 @@ test('renders with default props', async () => {
|
||||
test('renders tooltip icon', async () => {
|
||||
render(
|
||||
<PopoverSection title="Title" info="Tooltip">
|
||||
<form />
|
||||
<div role="form" />
|
||||
</PopoverSection>,
|
||||
);
|
||||
expect((await screen.findAllByRole('img')).length).toBe(2);
|
||||
@@ -41,7 +41,7 @@ test('renders tooltip icon', async () => {
|
||||
test('renders a tooltip when hovered', async () => {
|
||||
render(
|
||||
<PopoverSection title="Title" info="Tooltip">
|
||||
<form />
|
||||
<div role="form" />
|
||||
</PopoverSection>,
|
||||
);
|
||||
await userEvent.hover(screen.getAllByRole('img')[0]);
|
||||
@@ -52,7 +52,7 @@ test('calls onSelect when clicked', async () => {
|
||||
const onSelect = jest.fn();
|
||||
render(
|
||||
<PopoverSection title="Title" onSelect={onSelect}>
|
||||
<form />
|
||||
<div role="form" />
|
||||
</PopoverSection>,
|
||||
);
|
||||
await userEvent.click(await screen.findByRole('img'));
|
||||
|
||||
@@ -16,7 +16,8 @@
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
import { MouseEventHandler, ReactNode } from 'react';
|
||||
import { handleKeyboardActivation } from '../../utils';
|
||||
import { ReactNode, SyntheticEvent } from 'react';
|
||||
import { css, useTheme } from '@apache-superset/core/theme';
|
||||
import { Icons } from '@superset-ui/core/components/Icons';
|
||||
import { Tooltip } from '../Tooltip';
|
||||
@@ -24,7 +25,10 @@ import { Tooltip } from '../Tooltip';
|
||||
export interface PopoverSectionProps {
|
||||
title: string;
|
||||
isSelected?: boolean;
|
||||
onSelect?: MouseEventHandler<HTMLButtonElement>;
|
||||
// `SyntheticEvent` (rather than `MouseEventHandler`) so the same callback
|
||||
// can be reused as the keyboard-activation handler via
|
||||
// `handleKeyboardActivation`, which invokes it with a `KeyboardEvent`.
|
||||
onSelect?: (event: SyntheticEvent) => void;
|
||||
info?: string;
|
||||
children?: ReactNode;
|
||||
}
|
||||
@@ -44,17 +48,12 @@ export default function PopoverSection({
|
||||
opacity: isSelected ? 1 : 0.6,
|
||||
}}
|
||||
>
|
||||
<button
|
||||
type="button"
|
||||
<div
|
||||
role="button"
|
||||
tabIndex={0}
|
||||
onClick={onSelect}
|
||||
onKeyDown={onSelect ? handleKeyboardActivation(onSelect) : undefined}
|
||||
css={css`
|
||||
appearance: none;
|
||||
border: none;
|
||||
background: none;
|
||||
padding: 0;
|
||||
font: inherit;
|
||||
text-align: left;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
cursor: ${onSelect ? 'pointer' : 'default'};
|
||||
@@ -69,9 +68,8 @@ export default function PopoverSection({
|
||||
margin-right: ${theme.sizeUnit}px;
|
||||
`}
|
||||
>
|
||||
{/* role is auto-computed by BaseIconComponent as "img" since
|
||||
there's no onClick, so no explicit role needed here. */}
|
||||
<Icons.InfoCircleOutlined
|
||||
role="img"
|
||||
iconSize="s"
|
||||
iconColor={theme.colorIcon}
|
||||
/>
|
||||
@@ -79,9 +77,10 @@ export default function PopoverSection({
|
||||
)}
|
||||
<Icons.CheckOutlined
|
||||
iconSize="s"
|
||||
role="img"
|
||||
iconColor={isSelected ? theme.colorPrimary : theme.colorIcon}
|
||||
/>
|
||||
</button>
|
||||
</div>
|
||||
<div
|
||||
css={css`
|
||||
margin-left: ${theme.sizeUnit}px;
|
||||
|
||||
@@ -35,8 +35,7 @@ const RefreshLabel = ({
|
||||
<Tooltip title={tooltipContent}>
|
||||
<Icons.SyncOutlined
|
||||
iconSize="l"
|
||||
// role is auto-computed by BaseIconComponent as "button" whenever
|
||||
// onClick is present (and "img" otherwise), so no explicit role here.
|
||||
role="button"
|
||||
tabIndex={disabled ? -1 : 0}
|
||||
onClick={disabled ? undefined : onClick}
|
||||
css={(theme: SupersetTheme) => ({
|
||||
|
||||
@@ -870,14 +870,14 @@ test('Renders only an overflow tag if dropdown is open in oneLine mode', async (
|
||||
test('does not fire onChange when searching but no selection', async () => {
|
||||
const onChange = jest.fn();
|
||||
render(
|
||||
<main>
|
||||
<div role="main">
|
||||
<AsyncSelect
|
||||
{...defaultProps}
|
||||
onChange={onChange}
|
||||
mode="multiple"
|
||||
allowNewOptions
|
||||
/>
|
||||
</main>,
|
||||
</div>,
|
||||
);
|
||||
await open();
|
||||
await type('Joh');
|
||||
|
||||
@@ -338,46 +338,6 @@ AtEveryCorner.parameters = {
|
||||
},
|
||||
};
|
||||
|
||||
const manyPermissionLabels = [
|
||||
'can read SavedQuery',
|
||||
'can write SavedQuery',
|
||||
'can read Database',
|
||||
'can read Query',
|
||||
'can activate TabStateView',
|
||||
'can copy clipboard Superset',
|
||||
'can csv Superset',
|
||||
'can delete query TabStateView',
|
||||
'can delete TableSchemaView',
|
||||
'can delete TabStateView',
|
||||
'can estimate query cost SQLLab',
|
||||
'can execute sql query SQLLab',
|
||||
];
|
||||
const manyPermissionOptions = Array.from({ length: 32 }, (_, i) => ({
|
||||
label:
|
||||
manyPermissionLabels[i % manyPermissionLabels.length] +
|
||||
(i >= manyPermissionLabels.length ? ` ${i}` : ''),
|
||||
value: `perm_${i}`,
|
||||
}));
|
||||
|
||||
/**
|
||||
* Regression coverage for a narrow container where selected tags wrap to
|
||||
* multiple rows (e.g. the Role edit modal's Permissions field, which has no
|
||||
* `maxTagCount` override and defaults to wrapping at 4 tags per row). See
|
||||
* https://github.com/apache/superset/issues/39339.
|
||||
*/
|
||||
export const ManySelectedValuesWrapping = () => (
|
||||
<div style={{ width: 600 }}>
|
||||
<Select
|
||||
ariaLabel="many-selected-values-select"
|
||||
mode="multiple"
|
||||
showSearch
|
||||
options={manyPermissionOptions}
|
||||
value={manyPermissionOptions.map(o => o.value)}
|
||||
getPopupContainer={trigger => trigger.parentElement as HTMLElement}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
|
||||
export const PageScroll = () => (
|
||||
<div style={{ height: 2000, overflowY: 'auto' }}>
|
||||
<div
|
||||
|
||||
@@ -898,28 +898,6 @@ test('Renders only an overflow tag if dropdown is open in oneLine mode', async (
|
||||
expect(withinSelector.getByText('+ 2 ...')).toBeVisible();
|
||||
});
|
||||
|
||||
// Regression test for the bug described in: https://github.com/apache/superset/issues/39339
|
||||
// The AntD v6 upgrade renamed `.ant-select-selection-overflow` (the tag
|
||||
// container) to `.ant-select-content`, and a CSS rule meant only to cap the
|
||||
// height of individual tags/placeholder text was mistakenly widened to also
|
||||
// match the renamed container class. That capped the whole multi-row tag
|
||||
// container to a single line's height, so wrapped rows spilled outside the
|
||||
// select's border, the dropdown arrow mis-centered against the wrong height,
|
||||
// and the search input (rendered last in the wrapped row) became invisible
|
||||
// once the dropdown opened.
|
||||
test('does not cap the tag container to a single line when tags wrap to multiple rows', () => {
|
||||
render(
|
||||
<Select
|
||||
{...defaultProps}
|
||||
value={OPTIONS.slice(0, 8)}
|
||||
mode="multiple"
|
||||
maxTagCount={6}
|
||||
/>,
|
||||
);
|
||||
const content = getElementByClassName('.ant-select-content');
|
||||
expect(content).not.toHaveStyle({ maxHeight: '32px' });
|
||||
});
|
||||
|
||||
// Test for checking the issue described in: https://github.com/apache/superset/issues/35132
|
||||
test('Maintains stable maxTagCount to prevent click target disappearing in oneLine mode', async () => {
|
||||
render(
|
||||
@@ -1054,35 +1032,6 @@ test('do not count unselected disabled options in "Select all"', async () => {
|
||||
).toBeInTheDocument();
|
||||
});
|
||||
|
||||
test('"Select all" does not count null-valued options', async () => {
|
||||
// A falsy-valued option (e.g. <NULL>, value: null) is skipped by
|
||||
// handleSelectAll, so it must not be counted in the "Select all" badge or
|
||||
// the count overstates the selection. Regression test for #40228. Uses a
|
||||
// local options array to stay isolated from tests that mutate OPTIONS.
|
||||
const localOptions = [
|
||||
{ label: 'Alpha', value: 1 },
|
||||
{ label: 'Bravo', value: 2 },
|
||||
];
|
||||
render(
|
||||
<Select
|
||||
{...defaultProps}
|
||||
options={[...localOptions, NULL_OPTION]}
|
||||
mode="multiple"
|
||||
maxTagCount={0}
|
||||
/>,
|
||||
);
|
||||
await open();
|
||||
// Three options are visible, but the <NULL> option is not bulk-selectable,
|
||||
// so the badge must count only the two real options (would be 3 before fix).
|
||||
await userEvent.click(
|
||||
await screen.findByText(selectAllButtonText(localOptions.length)),
|
||||
);
|
||||
// And Select all selects exactly those two — the null option is skipped.
|
||||
const values = await findAllSelectValues();
|
||||
expect(values.length).toBe(1);
|
||||
expect(values[0]).toHaveTextContent(`+ ${localOptions.length} ...`);
|
||||
});
|
||||
|
||||
test('"Deselect all" counts all selected options', async () => {
|
||||
render(<Select {...defaultProps} allowNewOptions mode="multiple" />);
|
||||
await open();
|
||||
@@ -1185,14 +1134,14 @@ test('dropdown takes full width of the select input for single select', async ()
|
||||
test('does not fire onChange when searching but no selection', async () => {
|
||||
const onChange = jest.fn();
|
||||
render(
|
||||
<main>
|
||||
<div role="main">
|
||||
<Select
|
||||
{...defaultProps}
|
||||
onChange={onChange}
|
||||
mode="multiple"
|
||||
allowNewOptions
|
||||
/>
|
||||
</main>,
|
||||
</div>,
|
||||
);
|
||||
await open();
|
||||
await type('Joh');
|
||||
|
||||
@@ -332,12 +332,7 @@ const Select = forwardRef(
|
||||
const isDisabled = option.disabled;
|
||||
const isNew = option.isNewOption;
|
||||
|
||||
// Mirror handleSelectAll, which skips falsy-valued options (e.g. the
|
||||
// <NULL> option whose value is null): they are not bulk-selectable,
|
||||
// so counting them here makes the "Select all" badge overstate what
|
||||
// gets selected.
|
||||
if (
|
||||
option.value &&
|
||||
(!isDisabled || isSelected) &&
|
||||
((isNew && isSelected) || !isNew)
|
||||
) {
|
||||
|
||||
@@ -58,6 +58,7 @@ export const StyledSelect = styled(Select, {
|
||||
left: 0px;
|
||||
}
|
||||
|
||||
&& .ant-select-content,
|
||||
&& .ant-select-selection-item,
|
||||
&& .ant-select-placeholder {
|
||||
max-height: ${theme.sizeXL}px;
|
||||
|
||||
@@ -142,9 +142,7 @@ EditableTabs.defaultProps = {
|
||||
};
|
||||
|
||||
EditableTabs.TabPane.defaultProps = {
|
||||
// rc-tabs already wraps closeIcon in its own <button role="tab"
|
||||
// aria-label="remove">; this is just decorative content inside it.
|
||||
closeIcon: <StyledCloseOutlined iconSize="s" />,
|
||||
closeIcon: <StyledCloseOutlined iconSize="s" role="button" tabIndex={0} />,
|
||||
};
|
||||
|
||||
export const StyledLineEditableTabs = styled(EditableTabs)`
|
||||
|
||||
@@ -22,7 +22,7 @@ import type { FC, ReactElement } from 'react';
|
||||
|
||||
// Ant Design's default modal zIndex is 1000. Using a higher value ensures
|
||||
// this dialog always renders above other open modals (e.g. a draggable View SQL modal).
|
||||
const UNSAVED_CHANGES_MODAL_Z_INDEX = 1300;
|
||||
const UNSAVED_CHANGES_MODAL_Z_INDEX = 1100;
|
||||
|
||||
export type UnsavedChangesModalProps = {
|
||||
showModal: boolean;
|
||||
|
||||
@@ -66,30 +66,3 @@ test('falls back to localeCompare when strings have no match relationship to sea
|
||||
expect(rankedSearchCompare('abc', 'def', 'xyz')).toBeLessThan(0);
|
||||
expect(rankedSearchCompare('def', 'abc', 'xyz')).toBeGreaterThan(0);
|
||||
});
|
||||
|
||||
test('ranks a case-insensitive substring match above a non-match', () => {
|
||||
// `zzABCzz` contains the search term ignoring case, `aaaa` does not match at
|
||||
// all, so the match must win even though localeCompare would order it last.
|
||||
expect(rankedSearchCompare('zzABCzz', 'aaaa', 'abc')).toBeLessThan(0);
|
||||
expect(rankedSearchCompare('aaaa', 'zzABCzz', 'abc')).toBeGreaterThan(0);
|
||||
expect(['aaaa', 'zzABCzz'].sort(searchSort('abc'))).toEqual([
|
||||
'zzABCzz',
|
||||
'aaaa',
|
||||
]);
|
||||
});
|
||||
|
||||
test('is antisymmetric so Array.prototype.sort stays well defined', () => {
|
||||
const pairs: [string, string, string][] = [
|
||||
['zzABCzz', 'aaaa', 'abc'],
|
||||
['Total Revenue', 'ARR', 'revenue'],
|
||||
['My Country', 'zzz', 'country'],
|
||||
['%f %B', '%F %b', '%F'],
|
||||
['her', 'Cher', 'Her'],
|
||||
];
|
||||
pairs.forEach(([a, b, search]) => {
|
||||
expect(
|
||||
Math.sign(rankedSearchCompare(a, b, search)) +
|
||||
Math.sign(rankedSearchCompare(b, a, search)),
|
||||
).toBe(0);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -32,8 +32,7 @@ export function rankedSearchCompare(a: string, b: string, search: string) {
|
||||
Number(bLower.startsWith(searchLower)) -
|
||||
Number(aLower.startsWith(searchLower)) ||
|
||||
Number(b.includes(search)) - Number(a.includes(search)) ||
|
||||
Number(bLower.includes(searchLower)) -
|
||||
Number(aLower.includes(searchLower)) ||
|
||||
Number(bLower.includes(searchLower)) - Number(a.includes(searchLower)) ||
|
||||
a.localeCompare(b)
|
||||
);
|
||||
}
|
||||
|
||||
@@ -69,9 +69,8 @@ describe('ChartDataProvider', () => {
|
||||
formData: { ...bigNumberFormData },
|
||||
children: ({ loading, payload, error }) => (
|
||||
<div>
|
||||
{/* eslint-disable-next-line jsx-a11y/prefer-tag-over-role -- mirrors the real Loading component's role="status" pattern */}
|
||||
{loading && <span role="status">Loading...</span>}
|
||||
{payload && <footer>{JSON.stringify(payload)}</footer>}
|
||||
{payload && <pre role="contentinfo">{JSON.stringify(payload)}</pre>}
|
||||
{error && <div role="alert">{error.message}</div>}
|
||||
</div>
|
||||
),
|
||||
|
||||
@@ -1,122 +0,0 @@
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
import { Locator, Page } from '@playwright/test';
|
||||
import { Button, Select } from '../core';
|
||||
import { NativeFiltersConfigModal } from '../modals';
|
||||
|
||||
/**
|
||||
* Dashboard native-filter bar component.
|
||||
*/
|
||||
export class DashboardFilterBar {
|
||||
private static readonly SELECTORS = {
|
||||
ROOT: '[data-test="filter-bar"]',
|
||||
FILTER_VALUE: '[data-test="form-item-value"]',
|
||||
APPLY_BUTTON: '[data-test="filter-bar__apply-button"]',
|
||||
CLEAR_BUTTON: '[data-test="filter-bar__clear-button"]',
|
||||
SETTINGS_BUTTON: '[data-test="filterbar-orientation-icon"]',
|
||||
} as const;
|
||||
|
||||
constructor(private readonly page: Page) {}
|
||||
|
||||
/**
|
||||
* Waits for the filter bar controls to become interactive.
|
||||
*/
|
||||
async waitForReady(options?: { timeout?: number }): Promise<void> {
|
||||
await this.getApplyButton().element.waitFor({
|
||||
state: 'visible',
|
||||
...options,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Selects an option in a native filter.
|
||||
* @param optionText - The option text to select.
|
||||
* @param index - The zero-based position of the filter.
|
||||
*/
|
||||
async selectOption(optionText: string, index = 0): Promise<void> {
|
||||
const select = new Select(
|
||||
this.page,
|
||||
this.root
|
||||
.locator(DashboardFilterBar.SELECTORS.FILTER_VALUE)
|
||||
.nth(index)
|
||||
.getByRole('combobox'),
|
||||
);
|
||||
await select.open();
|
||||
await select.clickOption(optionText);
|
||||
await select.close();
|
||||
}
|
||||
|
||||
/**
|
||||
* Applies pending native-filter changes.
|
||||
*/
|
||||
async apply(): Promise<void> {
|
||||
await this.getApplyButton().click();
|
||||
}
|
||||
|
||||
/**
|
||||
* Applies pending native-filter changes when the Apply button is enabled.
|
||||
*/
|
||||
async applyIfEnabled(): Promise<void> {
|
||||
const applyButton = this.getApplyButton();
|
||||
await applyButton.element.waitFor({ state: 'visible' });
|
||||
if (await applyButton.isDisabled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
await applyButton.click();
|
||||
}
|
||||
|
||||
/**
|
||||
* Clears all native-filter values without applying the pending changes.
|
||||
*/
|
||||
async clearAll(): Promise<void> {
|
||||
await new Button(
|
||||
this.page,
|
||||
this.root.locator(DashboardFilterBar.SELECTORS.CLEAR_BUTTON),
|
||||
).click();
|
||||
}
|
||||
|
||||
/**
|
||||
* Opens the native filters and Display Controls configuration modal.
|
||||
*/
|
||||
async openNativeFiltersConfigModal(): Promise<NativeFiltersConfigModal> {
|
||||
await this.root
|
||||
.locator(DashboardFilterBar.SELECTORS.SETTINGS_BUTTON)
|
||||
.click();
|
||||
await this.page
|
||||
.getByText('Add or edit filters and controls', { exact: true })
|
||||
.click();
|
||||
|
||||
const modal = new NativeFiltersConfigModal(this.page);
|
||||
await modal.waitForVisible();
|
||||
return modal;
|
||||
}
|
||||
|
||||
private getApplyButton(): Button {
|
||||
return new Button(
|
||||
this.page,
|
||||
this.root.locator(DashboardFilterBar.SELECTORS.APPLY_BUTTON),
|
||||
);
|
||||
}
|
||||
|
||||
private get root(): Locator {
|
||||
return this.page.locator(DashboardFilterBar.SELECTORS.ROOT);
|
||||
}
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
export { DashboardFilterBar } from './DashboardFilterBar';
|
||||
@@ -19,7 +19,7 @@
|
||||
|
||||
import { Page, Download, Locator } from '@playwright/test';
|
||||
import { Menu } from '../components/core';
|
||||
import { DashboardFilterBar } from '../components/dashboard';
|
||||
import { NativeFiltersConfigModal } from '../components/modals';
|
||||
import { gotoWithRetry } from '../helpers/navigation';
|
||||
import { TIMEOUT } from '../utils/constants';
|
||||
|
||||
@@ -28,18 +28,19 @@ import { TIMEOUT } from '../utils/constants';
|
||||
*/
|
||||
export class DashboardPage {
|
||||
private readonly page: Page;
|
||||
private readonly filterBar: DashboardFilterBar;
|
||||
|
||||
private static readonly SELECTORS = {
|
||||
DASHBOARD_HEADER: '[data-test="dashboard-header-container"]',
|
||||
DASHBOARD_MENU_TRIGGER: '[data-test="actions-trigger"]',
|
||||
// The header-actions-menu is the data-test for the dropdown menu content
|
||||
HEADER_ACTIONS_MENU: '[data-test="header-actions-menu"]',
|
||||
FILTER_BAR_SETTINGS: '[data-test="filterbar-orientation-icon"]',
|
||||
APPLY_FILTERS_BUTTON:
|
||||
'[data-test="filter-bar__apply-button"], [data-test="filterbar-action-buttons"] button[type="submit"]',
|
||||
} as const;
|
||||
|
||||
constructor(page: Page) {
|
||||
this.page = page;
|
||||
this.filterBar = new DashboardFilterBar(page);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -125,11 +126,31 @@ export class DashboardPage {
|
||||
}
|
||||
|
||||
/**
|
||||
* Waits for and returns the dashboard native-filter bar component.
|
||||
* Opens the native filters and Display Controls configuration modal.
|
||||
*/
|
||||
async waitForFilterBar(): Promise<DashboardFilterBar> {
|
||||
await this.filterBar.waitForReady();
|
||||
return this.filterBar;
|
||||
async openNativeFiltersConfigModal(): Promise<NativeFiltersConfigModal> {
|
||||
await this.page.click(DashboardPage.SELECTORS.FILTER_BAR_SETTINGS);
|
||||
await this.page
|
||||
.getByText('Add or edit filters and controls', { exact: true })
|
||||
.click();
|
||||
|
||||
const modal = new NativeFiltersConfigModal(this.page);
|
||||
await modal.waitForVisible();
|
||||
return modal;
|
||||
}
|
||||
|
||||
/**
|
||||
* Applies pending native filter changes when the Apply button is enabled.
|
||||
*/
|
||||
async applyFiltersIfEnabled(): Promise<void> {
|
||||
const applyButton = this.page
|
||||
.locator(DashboardPage.SELECTORS.APPLY_FILTERS_BUTTON)
|
||||
.first();
|
||||
if (!(await applyButton.isEnabled().catch(() => false))) {
|
||||
return;
|
||||
}
|
||||
|
||||
await applyButton.click();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
import type { Request } from '@playwright/test';
|
||||
import { testWithAssets, expect } from '../../helpers/fixtures';
|
||||
import { apiPost, apiPut } from '../../helpers/api/requests';
|
||||
import {
|
||||
@@ -130,9 +129,23 @@ testWithAssets(
|
||||
await dashboardPage.gotoById(dashboardId);
|
||||
await dashboardPage.waitForLoad({ timeout: TIMEOUT.SLOW_TEST });
|
||||
await dashboardPage.waitForChartsToLoad();
|
||||
const filterBar = await dashboardPage.waitForFilterBar();
|
||||
|
||||
await filterBar.selectOption('boy');
|
||||
// The Gender select should be visible in the filter bar
|
||||
const filterCombobox = page
|
||||
.locator('[data-test="form-item-value"]')
|
||||
.first()
|
||||
.locator('[role="combobox"]');
|
||||
await filterCombobox.click();
|
||||
await page
|
||||
.locator('.ant-select-item-option', { hasText: /^boy$/ })
|
||||
.first()
|
||||
.click();
|
||||
// Close the dropdown
|
||||
await page.keyboard.press('Escape');
|
||||
|
||||
const applyBtn = page.locator(
|
||||
'[data-test="filter-bar__apply-button"], [data-test="filterbar-action-buttons"] button[type="submit"]',
|
||||
);
|
||||
|
||||
// Wait for chart data to come back after Apply
|
||||
const firstApplyResponse = page.waitForResponse(
|
||||
@@ -141,20 +154,21 @@ testWithAssets(
|
||||
r.request().method() === 'POST',
|
||||
{ timeout: 10_000 },
|
||||
);
|
||||
await filterBar.apply();
|
||||
await applyBtn.first().click();
|
||||
await firstApplyResponse;
|
||||
await dashboardPage.waitForChartsToLoad();
|
||||
|
||||
// Now track POST /api/v1/chart/data requests around Clear All
|
||||
const postsAfterClearAll: string[] = [];
|
||||
const handler = (req: Request) => {
|
||||
const handler = (req: any) => {
|
||||
if (req.url().includes('/api/v1/chart/data') && req.method() === 'POST') {
|
||||
postsAfterClearAll.push(req.url());
|
||||
}
|
||||
};
|
||||
page.on('request', handler);
|
||||
|
||||
await filterBar.clearAll();
|
||||
const clearBtn = page.locator('[data-test="filter-bar__clear-button"]');
|
||||
await clearBtn.click();
|
||||
|
||||
// Allow time for any debounced reload to fire if the bug is present
|
||||
await page.waitForTimeout(2000);
|
||||
@@ -176,7 +190,7 @@ testWithAssets(
|
||||
r.request().method() === 'POST',
|
||||
{ timeout: 10_000 },
|
||||
);
|
||||
await filterBar.apply();
|
||||
await applyBtn.first().click();
|
||||
await applyAfterClearPromise;
|
||||
},
|
||||
);
|
||||
|
||||
@@ -156,7 +156,6 @@ testWithAssets(
|
||||
await dashboardPage.gotoById(dashboardId);
|
||||
await dashboardPage.waitForLoad({ timeout: 30000 });
|
||||
await dashboardPage.waitForChartsToLoad({ timeout: 8000 }).catch(() => {});
|
||||
const filterBar = await dashboardPage.waitForFilterBar();
|
||||
|
||||
// Both the Gender filter and the Time grain Display Control should render.
|
||||
await expect(dashboardPage.getDisplayControlsHeader()).toBeVisible();
|
||||
@@ -166,7 +165,7 @@ testWithAssets(
|
||||
await shot('01-initial-bar');
|
||||
|
||||
// 4. Open the filters config modal via the settings gear.
|
||||
const modal = await filterBar.openNativeFiltersConfigModal();
|
||||
const modal = await dashboardPage.openNativeFiltersConfigModal();
|
||||
await shot('02-modal-open');
|
||||
|
||||
// 5. Delete the "Time grain" Display Control in the modal sidebar.
|
||||
@@ -192,7 +191,7 @@ testWithAssets(
|
||||
);
|
||||
|
||||
// 7. Click Apply Filters.
|
||||
await filterBar.applyIfEnabled();
|
||||
await dashboardPage.applyFiltersIfEnabled();
|
||||
await dashboardPage.waitForChartsToLoad({ timeout: 8000 }).catch(() => {});
|
||||
await page.waitForTimeout(1500);
|
||||
await shot('05-after-apply');
|
||||
|
||||
@@ -39,8 +39,8 @@ const downloads: { delete: () => Promise<void> }[] = [];
|
||||
|
||||
test.describe('Dashboard Export', () => {
|
||||
// Dashboard with multiple charts needs extra time for cold-cache CI runs:
|
||||
// waitForLoad (10s) + waitForChartsToLoad (30s) + menu + download + toast
|
||||
test.setTimeout(90_000);
|
||||
// waitForLoad (10s) + waitForChartsToLoad (15s) + menu + download + toast
|
||||
test.setTimeout(60_000);
|
||||
|
||||
test.beforeEach(async ({ page }) => {
|
||||
dashboardPage = new DashboardPage(page);
|
||||
@@ -49,7 +49,7 @@ test.describe('Dashboard Export', () => {
|
||||
await dashboardPage.gotoBySlug('world_health');
|
||||
await dashboardPage.waitForLoad({ timeout: TIMEOUT.PAGE_LOAD });
|
||||
// Wait for charts to finish loading - Download menu may be disabled while loading
|
||||
await dashboardPage.waitForChartsToLoad({ timeout: TIMEOUT.CHART_RENDER });
|
||||
await dashboardPage.waitForChartsToLoad();
|
||||
});
|
||||
|
||||
test.afterEach(async () => {
|
||||
|
||||
@@ -55,8 +55,6 @@ const COLOR_UNUSED_3: [number, number, number] = [90, 193, 137];
|
||||
testWithAssets(
|
||||
'Gauge renders configured interval colors on a dashboard (#28766)',
|
||||
async ({ page, testAssets }) => {
|
||||
testWithAssets.setTimeout(TIMEOUT.SLOW_TEST);
|
||||
|
||||
const dataset = await getDatasetByName(page, DATASET_NAME);
|
||||
if (!dataset) {
|
||||
throw new Error(`Dataset ${DATASET_NAME} not found`);
|
||||
|
||||
@@ -79,7 +79,7 @@ test('should navigate to Explore when dataset name is clicked', async ({
|
||||
await datasetListPage.clickDatasetName(datasetName);
|
||||
|
||||
// Wait for Explore page to load (validates URL + datasource control)
|
||||
await explorePage.waitForPageLoad({ timeout: TIMEOUT.EXPLORE_PAGE_LOAD });
|
||||
await explorePage.waitForPageLoad();
|
||||
|
||||
// Verify correct dataset is loaded in datasource control
|
||||
const loadedDatasetName = await explorePage.getDatasetName();
|
||||
|
||||
@@ -39,11 +39,6 @@ export const TIMEOUT = {
|
||||
*/
|
||||
PAGE_LOAD: 10000, // 10s for page transitions (login → welcome, dataset → explore)
|
||||
|
||||
/**
|
||||
* Dataset-to-Explore navigation on cold CI runners
|
||||
*/
|
||||
EXPLORE_PAGE_LOAD: 15000, // 15s for Explore to load its datasource control
|
||||
|
||||
/**
|
||||
* Form and UI element load timeouts
|
||||
*/
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -29,27 +29,27 @@
|
||||
{ "type": "Feature", "properties": { "ISO": "DZ-46", "NAME_1": "Aïn Témouchent" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -1.361975709870848, 35.319898656042554 ], [ -1.267730272999927, 35.390326239000046 ], [ -1.183338995999918, 35.57648346600007 ], [ -1.106353318999936, 35.623236395000049 ], [ -1.006728888227599, 35.524912014078154 ], [ -1.06920569458714, 35.454451199263417 ], [ -1.059025438273352, 35.411533922552451 ], [ -1.017787644584132, 35.455872300766032 ], [ -0.954122279819387, 35.437320462369428 ], [ -0.715428840368702, 35.482485662882993 ], [ -0.629490933259945, 35.409621893735391 ], [ -0.668868374076226, 35.332003892765442 ], [ -0.880845098622387, 35.254308377429652 ], [ -0.890456915953905, 35.159895535450573 ], [ -1.000527715581597, 35.087393499710231 ], [ -1.271622280443921, 35.195655626006328 ], [ -1.337664761119868, 35.190823879818197 ], [ -1.320663215435047, 35.283789780973564 ], [ -1.361975709870848, 35.319898656042554 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "DZ-19", "NAME_1": "Sétif" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 4.838444044756841, 36.304967760054069 ], [ 4.789919874602504, 36.333854885294727 ], [ 4.801081983746542, 36.379743557119468 ], [ 4.922573275835987, 36.38940705039505 ], [ 4.986807082281018, 36.462425849173599 ], [ 4.949858433320003, 36.502991848395084 ], [ 5.045304803174133, 36.524179186020604 ], [ 5.076517368381815, 36.574305324830846 ], [ 5.187621697683198, 36.53448863444288 ], [ 5.165555860914253, 36.494155178318806 ], [ 5.187776727314088, 36.408423976785059 ], [ 5.255421176645996, 36.378865057976043 ], [ 5.303221877287797, 36.389303696708225 ], [ 5.327871534643577, 36.449300035268379 ], [ 5.457889439346161, 36.499917101393066 ], [ 5.475459424912515, 36.590635076947194 ], [ 5.542793816781227, 36.523972480445593 ], [ 5.737200554861715, 36.555133367910571 ], [ 5.776164585427239, 36.439998277198697 ], [ 5.872386101637289, 36.401886909153518 ], [ 5.866029901158981, 36.255410061125417 ], [ 5.933519320859943, 36.224972643172919 ], [ 5.89936119985947, 36.16967886049099 ], [ 5.983335402207047, 36.058471178402158 ], [ 5.976669141567641, 35.915792547787817 ], [ 5.94018558060003, 35.862126573082833 ], [ 5.822880079552021, 35.914733181491101 ], [ 5.745623813787972, 35.89021271444517 ], [ 5.711620720619749, 35.849672552746085 ], [ 5.761901889960257, 35.810915229554155 ], [ 5.736425409405115, 35.771046861423486 ], [ 5.575091586707345, 35.818279120385057 ], [ 5.476854688892786, 35.736087754746052 ], [ 5.423472935027917, 35.635654609072901 ], [ 5.226223993042822, 35.664024970376033 ], [ 5.065768670387797, 35.762081000138039 ], [ 5.054916618706955, 35.820862941871269 ], [ 5.139976026672286, 35.856623033326287 ], [ 5.184056024266113, 36.115366929739992 ], [ 5.25356082467232, 36.197377428225707 ], [ 5.212426384669925, 36.196653957813908 ], [ 5.188086785676603, 36.245514023853104 ], [ 5.125558301574358, 36.232362372425541 ], [ 5.034762810755126, 36.310884710960636 ], [ 4.838444044756841, 36.304967760054069 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "DZ-34", "NAME_1": "Bordj Bou Arréridj" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 4.801081983746542, 36.379743557119468 ], [ 4.785217318724278, 36.346644802415653 ], [ 4.821235792597747, 36.306853950449408 ], [ 5.034762810755126, 36.310884710960636 ], [ 5.125558301574358, 36.232362372425541 ], [ 5.188086785676603, 36.245514023853104 ], [ 5.212426384669925, 36.196653957813908 ], [ 5.25356082467232, 36.197377428225707 ], [ 5.184056024266113, 36.115366929739992 ], [ 5.139976026672286, 35.856623033326287 ], [ 5.066543816743717, 35.840474148363228 ], [ 5.05445153161287, 35.777325548435272 ], [ 4.854928827403455, 35.873159491917022 ], [ 4.620782912401467, 35.823601792988313 ], [ 4.466683791124069, 35.832283434333021 ], [ 4.449268833389965, 35.869697171287385 ], [ 4.540839470565118, 35.942147529285023 ], [ 4.494123976440335, 36.02844717070036 ], [ 4.379143913560767, 35.991085109690061 ], [ 4.214812860025461, 36.016613267987907 ], [ 4.136316359012767, 35.995632635937397 ], [ 4.084329868228849, 36.029093125847055 ], [ 4.356354608178606, 36.340443631568348 ], [ 4.423378939886163, 36.22616119977954 ], [ 4.511383905442869, 36.225747789528839 ], [ 4.630084669571829, 36.253343004476051 ], [ 4.635820754224426, 36.338454088385447 ], [ 4.748010288244188, 36.420748805912638 ], [ 4.801081983746542, 36.379743557119468 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "DZ-10", "NAME_1": "Bouira" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 4.356354608178606, 36.340443631568348 ], [ 4.093631626298532, 36.046068834009475 ], [ 4.035133905405416, 35.870808214427541 ], [ 3.954156934794696, 35.890755316804416 ], [ 3.850804070851154, 35.861971544351263 ], [ 3.735513949609071, 35.929977728889071 ], [ 3.628440382617555, 35.922794705211459 ], [ 3.578934359632967, 35.999353338985372 ], [ 3.551752556735096, 36.298301500313983 ], [ 3.583120150674404, 36.338660793960457 ], [ 3.555524936626512, 36.422945055569812 ], [ 3.500127801157078, 36.438964749323702 ], [ 3.422664828918698, 36.407855536004149 ], [ 3.283035108683293, 36.49017609285238 ], [ 3.321792432774544, 36.550379136987544 ], [ 3.456357862825087, 36.576837470372936 ], [ 3.510049675951791, 36.623165391769419 ], [ 3.477441846763782, 36.688561917298614 ], [ 3.635726759082672, 36.694401352940076 ], [ 3.680736931763988, 36.666806138892184 ], [ 3.641927930829354, 36.600401923010338 ], [ 3.733653599434035, 36.607610785109614 ], [ 3.888786247687165, 36.488522447353034 ], [ 4.37092736200816, 36.47265778323009 ], [ 4.398729281631006, 36.373697415003676 ], [ 4.356354608178606, 36.340443631568348 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "DZ-10", "NAME_1": "Bouira" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 4.398729281631006, 36.373697415003676 ], [ 4.093631626298532, 36.046068834009475 ], [ 4.035133905405416, 35.870808214427541 ], [ 3.954156934794696, 35.890755316804416 ], [ 3.850804070851154, 35.861971544351263 ], [ 3.735513949609071, 35.929977728889071 ], [ 3.628440382617555, 35.922794705211459 ], [ 3.578934359632967, 35.999353338985372 ], [ 3.551752556735096, 36.298301500313983 ], [ 3.583120150674404, 36.338660793960457 ], [ 3.555524936626512, 36.422945055569812 ], [ 3.500127801157078, 36.438964749323702 ], [ 3.422664828918698, 36.407855536004149 ], [ 3.283035108683293, 36.49017609285238 ], [ 3.321792432774544, 36.550379136987544 ], [ 3.456357862825087, 36.576837470372936 ], [ 3.510049675951791, 36.623165391769419 ], [ 3.477441846763782, 36.688561917298614 ], [ 3.635726759082672, 36.694401352940076 ], [ 3.680736931763988, 36.666806138892184 ], [ 3.641927930829354, 36.600401923010338 ], [ 3.733653599434035, 36.607610785109614 ], [ 3.888786247687165, 36.488522447353034 ], [ 4.37092736200816, 36.47265778323009 ], [ 4.398729281631006, 36.373697415003676 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "DZ-09", "NAME_1": "Blida" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 3.477441846763782, 36.688561917298614 ], [ 3.510049675951791, 36.623165391769419 ], [ 3.467364943237556, 36.583167833328844 ], [ 3.321792432774544, 36.550379136987544 ], [ 3.283035108683293, 36.49017609285238 ], [ 3.203246698276473, 36.474905707032747 ], [ 3.008064812940745, 36.356437486001141 ], [ 2.909827915126186, 36.415245266156091 ], [ 2.824458448798339, 36.365170803289914 ], [ 2.661109246294643, 36.363103745741228 ], [ 2.64338423019808, 36.397261868540397 ], [ 2.52251305483361, 36.363982244884653 ], [ 2.476262647802969, 36.420619614703412 ], [ 2.499723747652808, 36.470384020106394 ], [ 2.602456495770639, 36.467438463414339 ], [ 2.837377557128548, 36.637867336808142 ], [ 3.02992394413468, 36.662232774223128 ], [ 3.025118036368269, 36.71005931238733 ], [ 3.097413363835642, 36.649933784416589 ], [ 3.323652784748219, 36.712307237089306 ], [ 3.477441846763782, 36.688561917298614 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "DZ-38", "NAME_1": "Tissemsilt" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 1.712691685372988, 35.92341482193649 ], [ 1.853561639058398, 35.860498766005207 ], [ 1.964510938728836, 35.879825750757789 ], [ 2.008745965054231, 35.917911282179887 ], [ 2.171681756407907, 35.917601222918108 ], [ 2.311776563737396, 35.86695832017034 ], [ 2.241961704069354, 35.744123440044689 ], [ 2.158194207296845, 35.698234768219947 ], [ 2.261030308202123, 35.605578925427039 ], [ 2.249713169427196, 35.559612739236513 ], [ 1.744937777556402, 35.551938788244456 ], [ 1.692021111684937, 35.580490016700878 ], [ 1.658069696259474, 35.547933865255629 ], [ 1.559057651189619, 35.606095689364565 ], [ 1.492343376945257, 35.594881904276463 ], [ 1.469192336357253, 35.648031114144601 ], [ 1.346460809019106, 35.68981151019301 ], [ 1.292458936630624, 35.617645372136167 ], [ 1.245588412874952, 35.647333482154465 ], [ 1.275715773364254, 35.775491033983997 ], [ 1.37720828623344, 35.788048408007626 ], [ 1.447953321888292, 35.914268093497697 ], [ 1.504900750069567, 35.935222887126542 ], [ 1.548360630039042, 36.003952542076149 ], [ 1.638484328189179, 35.934292711139676 ], [ 1.712691685372988, 35.92341482193649 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "DZ-38", "NAME_1": "Tissemsilt" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 1.638484328189179, 35.934292711139676 ], [ 1.853561639058398, 35.860498766005207 ], [ 1.964510938728836, 35.879825750757789 ], [ 2.008745965054231, 35.917911282179887 ], [ 2.171681756407907, 35.917601222918108 ], [ 2.311776563737396, 35.86695832017034 ], [ 2.241961704069354, 35.744123440044689 ], [ 2.158194207296845, 35.698234768219947 ], [ 2.261030308202123, 35.605578925427039 ], [ 2.249713169427196, 35.559612739236513 ], [ 1.744937777556402, 35.551938788244456 ], [ 1.692021111684937, 35.580490016700878 ], [ 1.658069696259474, 35.547933865255629 ], [ 1.559057651189619, 35.606095689364565 ], [ 1.492343376945257, 35.594881904276463 ], [ 1.469192336357253, 35.648031114144601 ], [ 1.346460809019106, 35.68981151019301 ], [ 1.292458936630624, 35.617645372136167 ], [ 1.245588412874952, 35.647333482154465 ], [ 1.275715773364254, 35.775491033983997 ], [ 1.37720828623344, 35.788048408007626 ], [ 1.447953321888292, 35.914268093497697 ], [ 1.504900750069567, 35.935222887126542 ], [ 1.548360630039042, 36.003952542076149 ], [ 1.638484328189179, 35.934292711139676 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "DZ-44", "NAME_1": "Aïn Defla" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 1.853561639058398, 35.860498766005207 ], [ 1.712691685372988, 35.92341482193649 ], [ 1.717187533877564, 35.973205063962496 ], [ 1.588513218110506, 36.143298041471439 ], [ 1.628717482126092, 36.2114850940618 ], [ 1.594921095432198, 36.234377753130786 ], [ 1.603292676615695, 36.279077867449587 ], [ 1.553166537805453, 36.367677110410284 ], [ 1.647786086258861, 36.443150540365139 ], [ 1.716722445884159, 36.36666942005769 ], [ 1.793048536560718, 36.43198843032178 ], [ 2.476262647802969, 36.420619614703412 ], [ 2.52251305483361, 36.363982244884653 ], [ 2.652685988267706, 36.39209422556803 ], [ 2.647880079601975, 36.33251129815784 ], [ 2.526853874606616, 36.300006821757393 ], [ 2.486494581859461, 36.241974188857682 ], [ 2.531659784171666, 36.189574286024481 ], [ 2.577445103208959, 36.211795152424315 ], [ 2.639043410425018, 36.181564439147508 ], [ 2.571553988925416, 36.099088853567707 ], [ 2.459364454905653, 36.036999619936466 ], [ 2.311776563737396, 35.86695832017034 ], [ 2.171681756407907, 35.917601222918108 ], [ 2.008745965054231, 35.917911282179887 ], [ 1.964510938728836, 35.879825750757789 ], [ 1.853561639058398, 35.860498766005207 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "DZ-48", "NAME_1": "Relizane" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 1.411624789652308, 35.841559353081664 ], [ 1.361808709204581, 35.776524562758368 ], [ 1.275715773364254, 35.775491033983997 ], [ 1.245588412874952, 35.647333482154465 ], [ 1.010977409879558, 35.575038153787773 ], [ 1.01795372888148, 35.544238999730055 ], [ 0.959456007988365, 35.54775299720302 ], [ 0.866076693884281, 35.436080227120783 ], [ 0.532298617986839, 35.5099775250427 ], [ 0.456851027353025, 35.558139959991138 ], [ 0.319081659091296, 35.557778224785238 ], [ 0.229371372091123, 35.695935167573907 ], [ 0.423984815746621, 35.817633165238362 ], [ 0.451735060324779, 35.951966051292231 ], [ 0.529043002932212, 35.968063259411849 ], [ 0.542840610405847, 36.048962713858145 ], [ 0.704071079416792, 36.186525377444184 ], [ 0.897392611879525, 36.197635809744781 ], [ 0.948138869213437, 36.032012844117446 ], [ 1.040949740737915, 36.025449937164865 ], [ 1.159340448303055, 35.94597158512056 ], [ 1.288893263213538, 35.965867011553314 ], [ 1.356227655082193, 35.868146878575544 ], [ 1.411624789652308, 35.841559353081664 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "DZ-32", "NAME_1": "El Bayadh" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 0.340785759755022, 34.234138088701798 ], [ 0.729495884027813, 34.435469468940823 ], [ 0.973718702556084, 34.382087714176635 ], [ 1.031958041930068, 34.339351305518335 ], [ 1.023689812634757, 34.191246650412552 ], [ 1.231480747038859, 34.191892605559303 ], [ 1.409144320953658, 33.961803290389526 ], [ 1.793978713446847, 33.816411647979123 ], [ 2.019287956573919, 33.499040839463134 ], [ 2.031380242604087, 33.392535712353208 ], [ 1.975207960778732, 33.292180081045899 ], [ 2.054221225728952, 33.108909613687729 ], [ 2.174937370563214, 32.97499013878388 ], [ 2.291467726154622, 32.695989080731465 ], [ 2.297513869169734, 32.377300523500367 ], [ 2.344849480918811, 32.172791043471875 ], [ 2.315652297315637, 32.062177638786977 ], [ 2.215296665109008, 31.923297227385092 ], [ 2.24211673280098, 31.791186428510855 ], [ 2.199432000086745, 31.735246689782912 ], [ 2.085382114093306, 31.658584703221436 ], [ 0.842460565302815, 31.096939399333792 ], [ 0.399128451916511, 30.708694363054406 ], [ -0.154016078679092, 31.123785305447484 ], [ -0.400822719592838, 31.390668239947274 ], [ -0.003585985404925, 32.443963120901287 ], [ -0.012887742575288, 32.500006212416736 ], [ -0.083942836592655, 32.524397488253442 ], [ -0.10156449990177, 32.567108059389398 ], [ -0.006686570828606, 32.804767970965088 ], [ -0.027047085254765, 33.02062042908949 ], [ 0.063490024045336, 33.308096422012227 ], [ 0.050622592558568, 33.803104966920671 ], [ 0.086020948807743, 34.048309638279136 ], [ 0.235417515106235, 34.225869859406487 ], [ 0.340785759755022, 34.234138088701798 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "DZ-20", "NAME_1": "Saïda" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 0.75760786291255, 34.438182480736884 ], [ 0.351482781804918, 34.238117174168224 ], [ 0.235417515106235, 34.225869859406487 ], [ 0.086020948807743, 34.048309638279136 ], [ -0.044100307782969, 33.987253933422267 ], [ -0.081772427155784, 34.08153758419212 ], [ -0.220213588985928, 34.059445909001454 ], [ -0.346614141629345, 33.955214545015224 ], [ -0.356122606173358, 33.915036119421359 ], [ -0.499679735031748, 34.193158678330292 ], [ -0.060895147892779, 34.550087795715172 ], [ -0.056502651276332, 34.609050605501011 ], [ -0.114380256343793, 34.682431139485459 ], [ -0.36805986167326, 34.869654852989072 ], [ -0.272716843707371, 34.904329738826391 ], [ -0.299278529880269, 34.98233531342396 ], [ -0.236284958683882, 35.023805650210591 ], [ -0.24687862794633, 35.098891506537768 ], [ -0.135567593069993, 35.12764944146852 ], [ -0.111693081170756, 35.160593167440709 ], [ -0.091022508382082, 35.107909043767336 ], [ -0.014334683398943, 35.06385488549455 ], [ 0.112220899774684, 35.096100979476603 ], [ 0.189993931274898, 35.023495591848075 ], [ 0.625057813567253, 35.095920112323313 ], [ 0.754197218227034, 35.007837633300142 ], [ 0.783032668422891, 34.948151353102446 ], [ 0.669757927886053, 34.855495510309538 ], [ 0.673478630934085, 34.789375515267807 ], [ 0.856878288602104, 34.499858303218105 ], [ 0.75760786291255, 34.438182480736884 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "DZ-20", "NAME_1": "Saïda" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 0.856878288602104, 34.499858303218105 ], [ 0.351482781804918, 34.238117174168224 ], [ 0.235417515106235, 34.225869859406487 ], [ 0.086020948807743, 34.048309638279136 ], [ -0.044100307782969, 33.987253933422267 ], [ -0.081772427155784, 34.08153758419212 ], [ -0.220213588985928, 34.059445909001454 ], [ -0.346614141629345, 33.955214545015224 ], [ -0.356122606173358, 33.915036119421359 ], [ -0.499679735031748, 34.193158678330292 ], [ -0.060895147892779, 34.550087795715172 ], [ -0.056502651276332, 34.609050605501011 ], [ -0.114380256343793, 34.682431139485459 ], [ -0.36805986167326, 34.869654852989072 ], [ -0.272716843707371, 34.904329738826391 ], [ -0.299278529880269, 34.98233531342396 ], [ -0.236284958683882, 35.023805650210591 ], [ -0.24687862794633, 35.098891506537768 ], [ -0.135567593069993, 35.12764944146852 ], [ -0.111693081170756, 35.160593167440709 ], [ -0.091022508382082, 35.107909043767336 ], [ -0.014334683398943, 35.06385488549455 ], [ 0.112220899774684, 35.096100979476603 ], [ 0.189993931274898, 35.023495591848075 ], [ 0.625057813567253, 35.095920112323313 ], [ 0.754197218227034, 35.007837633300142 ], [ 0.783032668422891, 34.948151353102446 ], [ 0.669757927886053, 34.855495510309538 ], [ 0.673478630934085, 34.789375515267807 ], [ 0.856878288602104, 34.499858303218105 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "DZ-22", "NAME_1": "Sidi Bel Abbès" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -0.16517818782313, 35.122921047168575 ], [ -0.250702683781867, 35.093568833934512 ], [ -0.236284958683882, 35.023805650210591 ], [ -0.299278529880269, 34.98233531342396 ], [ -0.272716843707371, 34.904329738826391 ], [ -0.36805986167326, 34.869654852989072 ], [ -0.114380256343793, 34.682431139485459 ], [ -0.055004035407933, 34.60403799126027 ], [ -0.071902228305191, 34.529701442867292 ], [ -0.485727097927224, 34.229332180036067 ], [ -0.523140834881644, 34.290362047370593 ], [ -0.578176235145122, 34.312944648077007 ], [ -0.836196662046348, 34.215121161412469 ], [ -1.120417039015138, 34.271293443237766 ], [ -0.880018276322403, 34.467612210135371 ], [ -0.903789435434135, 34.547193914967181 ], [ -0.829582078250326, 34.578380641753199 ], [ -0.758475308288837, 34.711912543029428 ], [ -0.775631882705227, 34.737440701327273 ], [ -0.886116095281579, 34.74302175634898 ], [ -0.89056026874141, 34.843609930753701 ], [ -0.941358201120067, 34.842576401979329 ], [ -0.924149949860293, 34.881514594123189 ], [ -0.96611121306205, 34.922726549390745 ], [ -0.929834356770186, 35.047163398172245 ], [ -1.000527715581597, 35.087393499710231 ], [ -0.890456915953905, 35.159895535450573 ], [ -0.880845098622387, 35.254308377429652 ], [ -0.753669398723787, 35.318257962135249 ], [ -0.668868374076226, 35.332003892765442 ], [ -0.632281460321167, 35.298155829228108 ], [ -0.569184536337275, 35.405229397118944 ], [ -0.464436408413519, 35.429388128958976 ], [ -0.463661261158279, 35.358048814101494 ], [ -0.361807013083194, 35.358772284513293 ], [ -0.189207729353257, 35.299318549211648 ], [ -0.216957973931358, 35.190927231706382 ], [ -0.16517818782313, 35.122921047168575 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "DZ-29", "NAME_1": "Mascara" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 0.229371372091123, 35.695935167573907 ], [ 0.319081659091296, 35.557778224785238 ], [ 0.456851027353025, 35.558139959991138 ], [ 0.532298617986839, 35.5099775250427 ], [ 0.827887810573998, 35.443469957272669 ], [ 0.878168979914506, 35.374740302323062 ], [ 0.778536818119676, 35.279371445935453 ], [ 0.684330681715551, 35.299551093208379 ], [ 0.617771437102135, 35.276038316515098 ], [ 0.448789503632668, 35.059074815250483 ], [ 0.209837680864268, 35.02148021114283 ], [ 0.112220899774684, 35.096100979476603 ], [ -0.014334683398943, 35.06385488549455 ], [ -0.091022508382082, 35.107909043767336 ], [ -0.105956997417479, 35.159740505819684 ], [ -0.16517818782313, 35.122921047168575 ], [ -0.216957973931358, 35.190927231706382 ], [ -0.189207729353257, 35.299318549211648 ], [ -0.361807013083194, 35.358772284513293 ], [ -0.463661261158279, 35.358048814101494 ], [ -0.464436408413519, 35.429388128958976 ], [ -0.545361701281479, 35.411973172124192 ], [ -0.302482468990775, 35.669399318923411 ], [ -0.220575324191884, 35.683558660703625 ], [ -0.114380256343793, 35.783759264178684 ], [ -0.043996954995464, 35.714461168448167 ], [ 0.104469435316162, 35.756732490012382 ], [ 0.152115106327074, 35.682628486515398 ], [ 0.229371372091123, 35.695935167573907 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "DZ-47", "NAME_1": "Ghardaïa" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 2.085382114093306, 31.658584703221436 ], [ 2.239326205739815, 31.77353892678002 ], [ 2.215296665109008, 31.923297227385092 ], [ 2.34329918820697, 32.132664292922755 ], [ 2.297513869169734, 32.377300523500367 ], [ 2.291467726154622, 32.695989080731465 ], [ 3.100668979789589, 32.830683701991234 ], [ 3.321327344781139, 32.780790107177666 ], [ 3.427470736685166, 32.87551300751926 ], [ 3.738614535932072, 33.000466620238285 ], [ 3.884445427914159, 32.981863104998297 ], [ 4.176210564665837, 33.029637966319058 ], [ 4.978280469667936, 32.840760606416836 ], [ 4.738863559805452, 32.531890571192889 ], [ 4.359145135239771, 32.255990099463475 ], [ 4.110839877558305, 31.791393134085865 ], [ 3.802538283115268, 29.989849352465626 ], [ 3.721509636560484, 29.863345445236064 ], [ 3.479612257999293, 29.636847642804469 ], [ 3.397550082670193, 29.364874578798776 ], [ 3.34447838716784, 29.306557725958271 ], [ 2.9859989761718, 29.123545641018495 ], [ 2.079335971977514, 29.036367499560413 ], [ 1.943426954790141, 30.094804185964392 ], [ 2.071739536250561, 30.859692898008802 ], [ 2.085382114093306, 31.658584703221436 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "DZ-03", "NAME_1": "Laghouat" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 2.291467726154622, 32.695989080731465 ], [ 2.174937370563214, 32.97499013878388 ], [ 2.054221225728952, 33.108909613687729 ], [ 1.975207960778732, 33.292180081045899 ], [ 2.031380242604087, 33.392535712353208 ], [ 2.019287956573919, 33.499040839463134 ], [ 1.776925490019323, 33.831346137014577 ], [ 1.428109572298922, 33.951183782705414 ], [ 1.336228874962615, 34.068928534224426 ], [ 1.64158491361286, 34.256152249526679 ], [ 1.691090935698128, 34.345810858784091 ], [ 1.806226027309322, 34.449086209261111 ], [ 1.981099074162955, 34.506989650951596 ], [ 2.220567660868824, 34.674679674127617 ], [ 2.357716912405579, 34.692869778217641 ], [ 2.295808546826947, 34.439035143257229 ], [ 2.360972528359468, 34.352735500942572 ], [ 2.393735386279047, 34.225301419524897 ], [ 2.48339399643578, 34.113576971699842 ], [ 2.458279250187218, 34.003247788754436 ], [ 2.474867383822698, 33.92371775986669 ], [ 2.639198439156644, 33.911005357111549 ], [ 2.650205518669736, 34.09797068909603 ], [ 2.817637160326683, 34.138846747579294 ], [ 2.949412062416741, 34.263619493145086 ], [ 3.093537632056041, 34.240029202085964 ], [ 3.14924482588799, 34.074767970765208 ], [ 3.232133822617811, 33.947411403713318 ], [ 3.640997755741807, 33.564334011305561 ], [ 4.059060093248718, 33.252518419389503 ], [ 4.176210564665837, 33.029637966319058 ], [ 3.884445427914159, 32.981863104998297 ], [ 3.738614535932072, 33.000466620238285 ], [ 3.427470736685166, 32.87551300751926 ], [ 3.321327344781139, 32.780790107177666 ], [ 3.100668979789589, 32.830683701991234 ], [ 2.291467726154622, 32.695989080731465 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "DZ-26", "NAME_1": "Médéa" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 2.249713169427196, 35.559612739236513 ], [ 2.261030308202123, 35.605578925427039 ], [ 2.169511346071772, 35.666815497437256 ], [ 2.16269005670074, 35.708983466213965 ], [ 2.241961704069354, 35.744123440044689 ], [ 2.459364454905653, 36.036999619936466 ], [ 2.571553988925416, 36.099088853567707 ], [ 2.643694288560539, 36.191537990785605 ], [ 2.526388786613211, 36.192778225134987 ], [ 2.486494581859461, 36.241974188857682 ], [ 2.526853874606616, 36.300006821757393 ], [ 2.614083692908082, 36.309670315032974 ], [ 2.661109246294643, 36.363103745741228 ], [ 2.845284051217959, 36.369227403122125 ], [ 2.909827915126186, 36.415245266156091 ], [ 2.996282586172413, 36.353285223734076 ], [ 3.203246698276473, 36.474905707032747 ], [ 3.283035108683293, 36.49017609285238 ], [ 3.422664828918698, 36.407855536004149 ], [ 3.500127801157078, 36.438964749323702 ], [ 3.555524936626512, 36.422945055569812 ], [ 3.583120150674404, 36.338660793960457 ], [ 3.552217644728501, 36.30827505105276 ], [ 3.56436160580347, 36.05097809546271 ], [ 3.633866408008316, 35.889540920876755 ], [ 3.60869998491637, 35.837373562040227 ], [ 3.540900505953573, 35.803938910552233 ], [ 3.543225945920653, 35.672396552458906 ], [ 3.411037631781255, 35.805928452835815 ], [ 3.379515008211058, 35.751203110934796 ], [ 3.336726921809998, 35.747534084730205 ], [ 3.255078159429502, 35.797401842021372 ], [ 3.196425408905498, 35.694462389227851 ], [ 3.081910434918598, 35.67187978852138 ], [ 2.960264113198264, 35.804739895329874 ], [ 2.88424808088422, 35.780503648224737 ], [ 2.893704867685472, 35.620823472825009 ], [ 2.671031121089356, 35.44657054269635 ], [ 2.527008905136825, 35.501192531809863 ], [ 2.285731642401345, 35.439077459756959 ], [ 2.249713169427196, 35.559612739236513 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "DZ-26", "NAME_1": "Médéa" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 2.285731642401345, 35.439077459756959 ], [ 2.261030308202123, 35.605578925427039 ], [ 2.169511346071772, 35.666815497437256 ], [ 2.16269005670074, 35.708983466213965 ], [ 2.241961704069354, 35.744123440044689 ], [ 2.459364454905653, 36.036999619936466 ], [ 2.571553988925416, 36.099088853567707 ], [ 2.643694288560539, 36.191537990785605 ], [ 2.526388786613211, 36.192778225134987 ], [ 2.486494581859461, 36.241974188857682 ], [ 2.526853874606616, 36.300006821757393 ], [ 2.614083692908082, 36.309670315032974 ], [ 2.661109246294643, 36.363103745741228 ], [ 2.845284051217959, 36.369227403122125 ], [ 2.909827915126186, 36.415245266156091 ], [ 2.996282586172413, 36.353285223734076 ], [ 3.203246698276473, 36.474905707032747 ], [ 3.283035108683293, 36.49017609285238 ], [ 3.422664828918698, 36.407855536004149 ], [ 3.500127801157078, 36.438964749323702 ], [ 3.555524936626512, 36.422945055569812 ], [ 3.583120150674404, 36.338660793960457 ], [ 3.552217644728501, 36.30827505105276 ], [ 3.56436160580347, 36.05097809546271 ], [ 3.633866408008316, 35.889540920876755 ], [ 3.60869998491637, 35.837373562040227 ], [ 3.540900505953573, 35.803938910552233 ], [ 3.543225945920653, 35.672396552458906 ], [ 3.411037631781255, 35.805928452835815 ], [ 3.379515008211058, 35.751203110934796 ], [ 3.336726921809998, 35.747534084730205 ], [ 3.255078159429502, 35.797401842021372 ], [ 3.196425408905498, 35.694462389227851 ], [ 3.081910434918598, 35.67187978852138 ], [ 2.960264113198264, 35.804739895329874 ], [ 2.88424808088422, 35.780503648224737 ], [ 2.893704867685472, 35.620823472825009 ], [ 2.671031121089356, 35.44657054269635 ], [ 2.527008905136825, 35.501192531809863 ], [ 2.285731642401345, 35.439077459756959 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "DZ-14", "NAME_1": "Tiaret" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 1.346460809019106, 35.68981151019301 ], [ 1.469192336357253, 35.648031114144601 ], [ 1.492343376945257, 35.594881904276463 ], [ 1.559057651189619, 35.606095689364565 ], [ 1.634608594610938, 35.5504660098984 ], [ 1.692021111684937, 35.580490016700878 ], [ 1.744937777556402, 35.551938788244456 ], [ 2.249713169427196, 35.559612739236513 ], [ 2.286816847119781, 35.329265042547661 ], [ 2.360042352372659, 35.287975572015 ], [ 2.379317661181119, 35.205009060020075 ], [ 2.620284864654764, 35.031143704418412 ], [ 2.523443230820419, 34.999104316011369 ], [ 2.460294630892463, 34.870171616926541 ], [ 2.369964227167316, 34.776301378206028 ], [ 2.357716912405579, 34.692869778217641 ], [ 2.220567660868824, 34.674679674127617 ], [ 1.981099074162955, 34.506989650951596 ], [ 1.806226027309322, 34.449086209261111 ], [ 1.691090935698128, 34.345810858784091 ], [ 1.64158491361286, 34.256152249526679 ], [ 1.336228874962615, 34.068928534224426 ], [ 1.231480747038859, 34.191892605559303 ], [ 1.023689812634757, 34.191246650412552 ], [ 1.031958041930068, 34.339351305518335 ], [ 0.973718702556084, 34.382087714176635 ], [ 0.75760786291255, 34.438182480736884 ], [ 0.856878288602104, 34.499858303218105 ], [ 0.693529086997728, 34.736329658187174 ], [ 0.667432488818292, 34.84221466677343 ], [ 0.781637404442677, 34.972697659469361 ], [ 0.652549675726959, 35.089796454043096 ], [ 0.492249382702823, 35.086334133413516 ], [ 0.617771437102135, 35.276038316515098 ], [ 0.684330681715551, 35.299551093208379 ], [ 0.778536818119676, 35.279371445935453 ], [ 0.819981317383906, 35.30611400016096 ], [ 0.880494418982266, 35.386367499460505 ], [ 0.827887810573998, 35.443469957272669 ], [ 0.881114535707241, 35.443702501269399 ], [ 0.959456007988365, 35.54775299720302 ], [ 1.01795372888148, 35.544238999730055 ], [ 1.010977409879558, 35.575038153787773 ], [ 1.206210972058727, 35.645679837554439 ], [ 1.292458936630624, 35.617645372136167 ], [ 1.346460809019106, 35.68981151019301 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "DZ-28", "NAME_1": "M'Sila" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 5.05445153161287, 35.777325548435272 ], [ 5.226223993042822, 35.664024970376033 ], [ 5.379702995796606, 35.632915757955857 ], [ 5.1737724142655, 35.510339260248657 ], [ 5.022980583986737, 35.520674547092653 ], [ 4.963242628744297, 35.4887901883165 ], [ 4.876477899335555, 35.519150091903214 ], [ 4.888880242828918, 35.299861152470214 ], [ 4.779016146977597, 35.172840481303126 ], [ 5.038638543434047, 35.083311062355619 ], [ 5.041119012132697, 34.918644111136814 ], [ 4.932805209892535, 34.838907375774738 ], [ 4.394646844276451, 34.746587428866746 ], [ 4.184427118017084, 34.508204046879257 ], [ 4.316460401626216, 34.251785590432632 ], [ 4.213727655307025, 34.232200222362337 ], [ 4.047691277630349, 34.354079088079459 ], [ 4.036374138855422, 34.441929023105899 ], [ 3.921084019411978, 34.672664293422372 ], [ 3.914417758772515, 34.758602200531129 ], [ 3.67112511623111, 34.790279852832896 ], [ 3.599243198115062, 34.886320501889656 ], [ 3.571803012798796, 35.005227973392209 ], [ 3.608079868191339, 35.0659736189873 ], [ 3.532838983132535, 35.054449775536682 ], [ 3.47356611498418, 35.157957669111113 ], [ 3.664872266741725, 35.294900214173538 ], [ 3.657585890276607, 35.374146023120431 ], [ 3.695929803217837, 35.472047024150811 ], [ 3.436927524385737, 35.671983141308885 ], [ 3.379515008211058, 35.751203110934796 ], [ 3.394294467615566, 35.793836167704967 ], [ 3.432276646250216, 35.796600857243732 ], [ 3.543225945920653, 35.672396552458906 ], [ 3.536714714912137, 35.792234199049005 ], [ 3.60869998491637, 35.837373562040227 ], [ 3.628440382617555, 35.922794705211459 ], [ 3.735513949609071, 35.929977728889071 ], [ 3.850804070851154, 35.861971544351263 ], [ 3.954156934794696, 35.890755316804416 ], [ 4.022266473019329, 35.866854967382835 ], [ 4.084329868228849, 36.029093125847055 ], [ 4.136316359012767, 35.995632635937397 ], [ 4.214812860025461, 36.016613267987907 ], [ 4.379143913560767, 35.991085109690061 ], [ 4.494123976440335, 36.02844717070036 ], [ 4.540839470565118, 35.942147529285023 ], [ 4.449268833389965, 35.869697171287385 ], [ 4.466683791124069, 35.832283434333021 ], [ 4.620782912401467, 35.823601792988313 ], [ 4.854928827403455, 35.873159491917022 ], [ 5.05445153161287, 35.777325548435272 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "DZ-28", "NAME_1": "M'Sila" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 4.854928827403455, 35.873159491917022 ], [ 5.226223993042822, 35.664024970376033 ], [ 5.379702995796606, 35.632915757955857 ], [ 5.1737724142655, 35.510339260248657 ], [ 5.022980583986737, 35.520674547092653 ], [ 4.963242628744297, 35.4887901883165 ], [ 4.876477899335555, 35.519150091903214 ], [ 4.888880242828918, 35.299861152470214 ], [ 4.779016146977597, 35.172840481303126 ], [ 5.038638543434047, 35.083311062355619 ], [ 5.041119012132697, 34.918644111136814 ], [ 4.932805209892535, 34.838907375774738 ], [ 4.394646844276451, 34.746587428866746 ], [ 4.184427118017084, 34.508204046879257 ], [ 4.316460401626216, 34.251785590432632 ], [ 4.213727655307025, 34.232200222362337 ], [ 4.047691277630349, 34.354079088079459 ], [ 4.036374138855422, 34.441929023105899 ], [ 3.921084019411978, 34.672664293422372 ], [ 3.914417758772515, 34.758602200531129 ], [ 3.67112511623111, 34.790279852832896 ], [ 3.599243198115062, 34.886320501889656 ], [ 3.571803012798796, 35.005227973392209 ], [ 3.608079868191339, 35.0659736189873 ], [ 3.532838983132535, 35.054449775536682 ], [ 3.47356611498418, 35.157957669111113 ], [ 3.664872266741725, 35.294900214173538 ], [ 3.657585890276607, 35.374146023120431 ], [ 3.695929803217837, 35.472047024150811 ], [ 3.436927524385737, 35.671983141308885 ], [ 3.379515008211058, 35.751203110934796 ], [ 3.394294467615566, 35.793836167704967 ], [ 3.432276646250216, 35.796600857243732 ], [ 3.543225945920653, 35.672396552458906 ], [ 3.536714714912137, 35.792234199049005 ], [ 3.60869998491637, 35.837373562040227 ], [ 3.628440382617555, 35.922794705211459 ], [ 3.735513949609071, 35.929977728889071 ], [ 3.850804070851154, 35.861971544351263 ], [ 3.954156934794696, 35.890755316804416 ], [ 4.022266473019329, 35.866854967382835 ], [ 4.084329868228849, 36.029093125847055 ], [ 4.136316359012767, 35.995632635937397 ], [ 4.214812860025461, 36.016613267987907 ], [ 4.379143913560767, 35.991085109690061 ], [ 4.494123976440335, 36.02844717070036 ], [ 4.540839470565118, 35.942147529285023 ], [ 4.449268833389965, 35.869697171287385 ], [ 4.466683791124069, 35.832283434333021 ], [ 4.620782912401467, 35.823601792988313 ], [ 4.854928827403455, 35.873159491917022 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "DZ-05", "NAME_1": "Batna" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 5.94018558060003, 35.862126573082833 ], [ 5.976669141567641, 35.915792547787817 ], [ 6.275513950108689, 35.866079820127595 ], [ 6.351064894429328, 35.884735012211024 ], [ 6.47694868313522, 35.840396633098123 ], [ 6.487025587560822, 35.781433824211604 ], [ 6.649496290921093, 35.796678372508836 ], [ 6.769127231036862, 35.683920395909524 ], [ 6.781684605060491, 35.562558295029248 ], [ 6.592703892370707, 35.436958727163528 ], [ 6.584022251026056, 35.34332103154037 ], [ 6.628360630138957, 35.316862698154978 ], [ 6.514930860870493, 35.119717108957389 ], [ 6.512140333809327, 35.052382717088676 ], [ 6.598595004855554, 34.900350654259285 ], [ 6.58102501838988, 34.769660955988286 ], [ 6.508729689123868, 34.775500393428388 ], [ 6.439845005442635, 34.838261419728724 ], [ 6.459533726300435, 35.016984360839558 ], [ 6.429303013023627, 35.064785061481359 ], [ 6.279079624425094, 35.049256293243332 ], [ 6.166580031143496, 34.992076321065326 ], [ 6.072218866007859, 35.058583888835358 ], [ 5.993102248270134, 34.989363308369946 ], [ 5.927008090750803, 35.061684475158359 ], [ 5.932279087409938, 35.143565782434905 ], [ 6.005349562132551, 35.226273912011436 ], [ 5.830631544909863, 35.288440660008405 ], [ 5.554886101912075, 35.191392319699787 ], [ 5.610748325374914, 35.126383367798155 ], [ 5.596640658639501, 35.091760158804277 ], [ 5.306012404348962, 35.021428534299389 ], [ 5.184831169722713, 35.031040350731587 ], [ 5.004325391903308, 35.08545563427009 ], [ 4.925053745434013, 35.142196356876354 ], [ 4.782426791663113, 35.166871853553175 ], [ 4.888880242828918, 35.299861152470214 ], [ 4.880198602383587, 35.525402940493279 ], [ 4.963242628744297, 35.4887901883165 ], [ 5.022980583986737, 35.520674547092653 ], [ 5.1737724142655, 35.510339260248657 ], [ 5.438200717589041, 35.641855780819583 ], [ 5.476854688892786, 35.736087754746052 ], [ 5.575091586707345, 35.818279120385057 ], [ 5.736425409405115, 35.771046861423486 ], [ 5.761901889960257, 35.810915229554155 ], [ 5.71379113095594, 35.860421250740103 ], [ 5.80009077327054, 35.913467108720056 ], [ 5.94018558060003, 35.862126573082833 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "DZ-40", "NAME_1": "Khenchela" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 6.599680209573989, 35.327818101724006 ], [ 6.592703892370707, 35.436958727163528 ], [ 6.781684605060491, 35.562558295029248 ], [ 6.769127231036862, 35.683920395909524 ], [ 6.82498945539902, 35.623562323942053 ], [ 7.00327314603885, 35.629815172532176 ], [ 7.051228875412278, 35.577182725702187 ], [ 7.141197543931469, 35.617464504982877 ], [ 7.267546420630822, 35.621236883974973 ], [ 7.30335818892928, 35.600695502395524 ], [ 7.315037062010788, 35.535247300922151 ], [ 7.385161980940666, 35.571756700311425 ], [ 7.462263217973145, 35.539123032701752 ], [ 7.544842157239771, 35.447810777045675 ], [ 7.413067254250393, 35.38662588097958 ], [ 7.411516960639233, 35.156097317137437 ], [ 7.222226189586991, 34.94629100202809 ], [ 7.26553103992552, 34.832344468822157 ], [ 7.264445835207141, 34.940632433539974 ], [ 7.30831912632658, 34.977193507973993 ], [ 7.365886672132206, 34.962465725412869 ], [ 7.402835321093164, 34.74604482740682 ], [ 7.274057650739962, 34.540734360802105 ], [ 7.135771519440084, 34.16057668756406 ], [ 6.960588413324615, 34.193933823786892 ], [ 6.714970329916753, 34.326613064341416 ], [ 6.696521844307654, 34.475828761687978 ], [ 6.748456659147507, 34.726097724130625 ], [ 6.714350213191778, 34.788522854546102 ], [ 6.587897982805657, 34.778549302908004 ], [ 6.570483025970873, 34.839010728562243 ], [ 6.598595004855554, 34.900350654259285 ], [ 6.512140333809327, 35.052382717088676 ], [ 6.569707878715633, 35.253455714909308 ], [ 6.628360630138957, 35.316862698154978 ], [ 6.599680209573989, 35.327818101724006 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "DZ-24", "NAME_1": "Guelma" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 7.010559523403288, 36.155157783504876 ], [ 7.04564782128989, 36.275770575551576 ], [ 6.93795413577476, 36.432866930364526 ], [ 7.075723504036489, 36.502552598823343 ], [ 7.077118768016703, 36.545263169959298 ], [ 7.123989291772375, 36.585829169180784 ], [ 7.314727003648272, 36.651613268337655 ], [ 7.3672819352131, 36.721376451162257 ], [ 7.456837191683064, 36.693057765803246 ], [ 7.475595736553998, 36.638849188739073 ], [ 7.533783399983918, 36.615388088889176 ], [ 7.697029249700108, 36.657736924819176 ], [ 7.771546665246376, 36.581643378139347 ], [ 7.98786421136424, 36.484388333155039 ], [ 7.871437208560337, 36.432582709524411 ], [ 7.795266148413987, 36.440980130028947 ], [ 7.835005324436167, 36.334862576546641 ], [ 7.813869662754712, 36.304916083210628 ], [ 7.410431755920797, 36.181254380785049 ], [ 7.357515090049333, 36.129758816416199 ], [ 7.223776483198151, 36.144099026249023 ], [ 7.194889357058173, 36.080743719846794 ], [ 7.133601108204573, 36.053148504899582 ], [ 7.066421745966807, 36.047283229937079 ], [ 7.010559523403288, 36.155157783504876 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "DZ-25", "NAME_1": "Constantine" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 6.93795413577476, 36.432866930364526 ], [ 7.048283318720166, 36.238408515440597 ], [ 7.010559523403288, 36.155157783504876 ], [ 6.898525018115095, 36.10689199486967 ], [ 6.87992150197573, 36.146424465316784 ], [ 6.772692905353267, 36.192442328350751 ], [ 6.577149285710959, 36.10919159641503 ], [ 6.468370396376656, 36.273806870790452 ], [ 6.317733594829519, 36.36783214004123 ], [ 6.47849897584706, 36.428965359263884 ], [ 6.465579868416171, 36.490641180845785 ], [ 6.504078810089027, 36.577715969516362 ], [ 6.599370151211474, 36.57399526646833 ], [ 6.652441846713828, 36.607895005949729 ], [ 6.777188754757219, 36.556270250371711 ], [ 6.920125766890635, 36.557148749515136 ], [ 6.904106073136745, 36.529036769731135 ], [ 6.845453321713421, 36.5314138865416 ], [ 6.818013136397099, 36.466818345789989 ], [ 6.93795413577476, 36.432866930364526 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "DZ-43", "NAME_1": "Mila" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 5.810167676796823, 36.431135768700756 ], [ 5.766242709733262, 36.45260732716639 ], [ 5.737200554861715, 36.555133367910571 ], [ 5.904322137256827, 36.545521552377693 ], [ 6.023229607860117, 36.605931301188605 ], [ 6.215310906872844, 36.582625230070278 ], [ 6.294582554241458, 36.624069729334508 ], [ 6.504078810089027, 36.577715969516362 ], [ 6.465579868416171, 36.490641180845785 ], [ 6.47849897584706, 36.428965359263884 ], [ 6.317733594829519, 36.36783214004123 ], [ 6.468370396376656, 36.273806870790452 ], [ 6.525007765296095, 36.204663804690824 ], [ 6.516326124850764, 36.16564809818118 ], [ 6.406151970636927, 36.11030263955513 ], [ 6.378556755689715, 36.013254299246512 ], [ 6.170300734191528, 35.951242580880375 ], [ 6.149216750252833, 35.900392970758958 ], [ 5.976669141567641, 35.915792547787817 ], [ 5.983335402207047, 36.058471178402158 ], [ 5.89936119985947, 36.16967886049099 ], [ 5.933519320859943, 36.224972643172919 ], [ 5.866029901158981, 36.255410061125417 ], [ 5.872386101637289, 36.401886909153518 ], [ 5.810167676796823, 36.431135768700756 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "DZ-43", "NAME_1": "Mila" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 5.872386101637289, 36.401886909153518 ], [ 5.766242709733262, 36.45260732716639 ], [ 5.737200554861715, 36.555133367910571 ], [ 5.904322137256827, 36.545521552377693 ], [ 6.023229607860117, 36.605931301188605 ], [ 6.215310906872844, 36.582625230070278 ], [ 6.294582554241458, 36.624069729334508 ], [ 6.504078810089027, 36.577715969516362 ], [ 6.465579868416171, 36.490641180845785 ], [ 6.47849897584706, 36.428965359263884 ], [ 6.317733594829519, 36.36783214004123 ], [ 6.468370396376656, 36.273806870790452 ], [ 6.525007765296095, 36.204663804690824 ], [ 6.516326124850764, 36.16564809818118 ], [ 6.406151970636927, 36.11030263955513 ], [ 6.378556755689715, 36.013254299246512 ], [ 6.170300734191528, 35.951242580880375 ], [ 6.149216750252833, 35.900392970758958 ], [ 5.976669141567641, 35.915792547787817 ], [ 5.983335402207047, 36.058471178402158 ], [ 5.89936119985947, 36.16967886049099 ], [ 5.933519320859943, 36.224972643172919 ], [ 5.866029901158981, 36.255410061125417 ], [ 5.872386101637289, 36.401886909153518 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "DZ-04", "NAME_1": "Oum el Bouaghi" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 6.275513950108689, 35.866079820127595 ], [ 6.149216750252833, 35.900392970758958 ], [ 6.151387159689648, 35.935274563070607 ], [ 6.378556755689715, 36.013254299246512 ], [ 6.406151970636927, 36.11030263955513 ], [ 6.477103712766109, 36.158620103235137 ], [ 6.516326124850764, 36.16564809818118 ], [ 6.584797397381976, 36.108700669999905 ], [ 6.772692905353267, 36.192442328350751 ], [ 6.87992150197573, 36.146424465316784 ], [ 6.898525018115095, 36.10689199486967 ], [ 7.010559523403288, 36.155157783504876 ], [ 7.078979119990379, 36.042503159693069 ], [ 7.194889357058173, 36.080743719846794 ], [ 7.223776483198151, 36.144099026249023 ], [ 7.290800814905651, 36.143323879893103 ], [ 7.325889112792311, 36.127407538027455 ], [ 7.324958936805501, 36.080020250334258 ], [ 7.398339470789949, 35.967003893115134 ], [ 7.577243279953393, 35.833497830260626 ], [ 7.660132276683214, 35.834195462250761 ], [ 7.734598016285418, 35.934499416714687 ], [ 7.865856154437949, 35.858715929296693 ], [ 7.823378127298724, 35.739007473016443 ], [ 7.840741408189444, 35.615164903437517 ], [ 7.544842157239771, 35.447810777045675 ], [ 7.462263217973145, 35.539123032701752 ], [ 7.385161980940666, 35.571756700311425 ], [ 7.315037062010788, 35.535247300922151 ], [ 7.30335818892928, 35.600695502395524 ], [ 7.267546420630822, 35.621236883974973 ], [ 7.141197543931469, 35.617464504982877 ], [ 7.083009881400869, 35.576872667339728 ], [ 6.992576124888217, 35.631985581968991 ], [ 6.82498945539902, 35.623562323942053 ], [ 6.649496290921093, 35.796678372508836 ], [ 6.487025587560822, 35.781433824211604 ], [ 6.466820102765496, 35.846391100169114 ], [ 6.339437697291885, 35.88680206975971 ], [ 6.275513950108689, 35.866079820127595 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "DZ-07", "NAME_1": "Biskra" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 4.83208784337927, 34.819244493338658 ], [ 4.932805209892535, 34.838907375774738 ], [ 5.028406610276818, 34.900195623729019 ], [ 5.038638543434047, 35.083311062355619 ], [ 5.272474399174143, 35.018431300763893 ], [ 5.536747673766115, 35.0663611917156 ], [ 5.613538853335399, 35.1064362663206 ], [ 5.554886101912075, 35.191392319699787 ], [ 5.830631544909863, 35.288440660008405 ], [ 6.005349562132551, 35.226273912011436 ], [ 5.932279087409938, 35.143565782434905 ], [ 5.927008090750803, 35.061684475158359 ], [ 5.993102248270134, 34.989363308369946 ], [ 6.072218866007859, 35.058583888835358 ], [ 6.166580031143496, 34.992076321065326 ], [ 6.279079624425094, 35.049256293243332 ], [ 6.429303013023627, 35.064785061481359 ], [ 6.459533726300435, 35.016984360839558 ], [ 6.439845005442635, 34.838261419728724 ], [ 6.540407342324954, 34.765681871421236 ], [ 6.714350213191778, 34.788522854546102 ], [ 6.749541863865886, 34.712222602291263 ], [ 6.695901726683303, 34.376093248004963 ], [ 6.558545769571595, 34.317027086330938 ], [ 6.211435174193923, 34.428415636472437 ], [ 5.998528272761575, 34.394955146562722 ], [ 5.477164748154564, 34.449835517195368 ], [ 5.311748488102239, 34.498256334562143 ], [ 5.29903608624636, 34.449060369940128 ], [ 5.217232293335655, 34.411956692247543 ], [ 5.185451287347007, 34.356662909565614 ], [ 5.359859246207236, 34.166209418529832 ], [ 5.37381188331176, 34.058386541805419 ], [ 5.334847852746179, 33.845996406109236 ], [ 5.121785922582262, 33.572679754966714 ], [ 4.406635775720474, 33.927645169389052 ], [ 4.335063917765581, 33.986039537494662 ], [ 4.298477004010522, 34.135797838099734 ], [ 4.210627068984024, 34.174606839034368 ], [ 4.213727655307025, 34.232200222362337 ], [ 4.316460401626216, 34.251785590432632 ], [ 4.184427118017084, 34.508204046879257 ], [ 4.273310580918576, 34.625845444711501 ], [ 4.434696078661091, 34.772658189523781 ], [ 4.83208784337927, 34.819244493338658 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "DZ-07", "NAME_1": "Biskra" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 4.434696078661091, 34.772658189523781 ], [ 4.932805209892535, 34.838907375774738 ], [ 5.028406610276818, 34.900195623729019 ], [ 5.038638543434047, 35.083311062355619 ], [ 5.272474399174143, 35.018431300763893 ], [ 5.536747673766115, 35.0663611917156 ], [ 5.613538853335399, 35.1064362663206 ], [ 5.554886101912075, 35.191392319699787 ], [ 5.830631544909863, 35.288440660008405 ], [ 6.005349562132551, 35.226273912011436 ], [ 5.932279087409938, 35.143565782434905 ], [ 5.927008090750803, 35.061684475158359 ], [ 5.993102248270134, 34.989363308369946 ], [ 6.072218866007859, 35.058583888835358 ], [ 6.166580031143496, 34.992076321065326 ], [ 6.279079624425094, 35.049256293243332 ], [ 6.429303013023627, 35.064785061481359 ], [ 6.459533726300435, 35.016984360839558 ], [ 6.439845005442635, 34.838261419728724 ], [ 6.540407342324954, 34.765681871421236 ], [ 6.714350213191778, 34.788522854546102 ], [ 6.749541863865886, 34.712222602291263 ], [ 6.695901726683303, 34.376093248004963 ], [ 6.558545769571595, 34.317027086330938 ], [ 6.211435174193923, 34.428415636472437 ], [ 5.998528272761575, 34.394955146562722 ], [ 5.477164748154564, 34.449835517195368 ], [ 5.311748488102239, 34.498256334562143 ], [ 5.29903608624636, 34.449060369940128 ], [ 5.217232293335655, 34.411956692247543 ], [ 5.185451287347007, 34.356662909565614 ], [ 5.359859246207236, 34.166209418529832 ], [ 5.37381188331176, 34.058386541805419 ], [ 5.334847852746179, 33.845996406109236 ], [ 5.121785922582262, 33.572679754966714 ], [ 4.406635775720474, 33.927645169389052 ], [ 4.335063917765581, 33.986039537494662 ], [ 4.298477004010522, 34.135797838099734 ], [ 4.210627068984024, 34.174606839034368 ], [ 4.213727655307025, 34.232200222362337 ], [ 4.316460401626216, 34.251785590432632 ], [ 4.184427118017084, 34.508204046879257 ], [ 4.273310580918576, 34.625845444711501 ], [ 4.434696078661091, 34.772658189523781 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "DZ-17", "NAME_1": "Djelfa" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 4.978280469667936, 32.840760606416836 ], [ 4.176210564665837, 33.029637966319058 ], [ 4.059060093248718, 33.252518419389503 ], [ 3.640997755741807, 33.564334011305561 ], [ 3.232133822617811, 33.947411403713318 ], [ 3.14924482588799, 34.074767970765208 ], [ 3.093537632056041, 34.240029202085964 ], [ 2.949412062416741, 34.263619493145086 ], [ 2.817637160326683, 34.138846747579294 ], [ 2.650205518669736, 34.09797068909603 ], [ 2.639198439156644, 33.911005357111549 ], [ 2.474867383822698, 33.92371775986669 ], [ 2.458279250187218, 34.003247788754436 ], [ 2.48339399643578, 34.113576971699842 ], [ 2.393735386279047, 34.225301419524897 ], [ 2.293483106859867, 34.474950263443873 ], [ 2.309451124669636, 34.563420315195344 ], [ 2.364383172145665, 34.639591376241015 ], [ 2.369964227167316, 34.776301378206028 ], [ 2.460294630892463, 34.870171616926541 ], [ 2.523443230820419, 34.999104316011369 ], [ 2.620284864654764, 35.031143704418412 ], [ 2.379317661181119, 35.205009060020075 ], [ 2.360042352372659, 35.287975572015 ], [ 2.286816847119781, 35.329265042547661 ], [ 2.285731642401345, 35.439077459756959 ], [ 2.527008905136825, 35.501192531809863 ], [ 2.619819776661359, 35.445692044452244 ], [ 2.687154167630695, 35.453701891329217 ], [ 2.893704867685472, 35.620823472825009 ], [ 2.88424808088422, 35.780503648224737 ], [ 2.960264113198264, 35.804739895329874 ], [ 3.081910434918598, 35.67187978852138 ], [ 3.196425408905498, 35.694462389227851 ], [ 3.255078159429502, 35.797401842021372 ], [ 3.305979444595664, 35.754587918097911 ], [ 3.379515008211058, 35.751203110934796 ], [ 3.449691603085, 35.659115708922798 ], [ 3.680426873401473, 35.495559800844092 ], [ 3.664872266741725, 35.294900214173538 ], [ 3.47356611498418, 35.157957669111113 ], [ 3.532838983132535, 35.054449775536682 ], [ 3.608079868191339, 35.0659736189873 ], [ 3.572113071161311, 35.001688137497524 ], [ 3.599243198115062, 34.886320501889656 ], [ 3.658826124625932, 34.805576077074249 ], [ 3.914417758772515, 34.758602200531129 ], [ 3.921084019411978, 34.672664293422372 ], [ 4.036374138855422, 34.441929023105899 ], [ 4.047691277630349, 34.354079088079459 ], [ 4.213727655307025, 34.232200222362337 ], [ 4.218068475080031, 34.166235256052232 ], [ 4.298477004010522, 34.135797838099734 ], [ 4.362400750294398, 33.957384955351415 ], [ 5.121785922582262, 33.572679754966714 ], [ 5.008046094951283, 33.441886704807587 ], [ 4.95311404837463, 33.24148550145469 ], [ 4.978280469667936, 32.840760606416836 ] ] ] } }
|
||||
]
|
||||
}
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -9,13 +9,13 @@
|
||||
{ "type": "Feature", "properties": { "ISO": "TD-MC", "NAME_1": "Moyen-Chari" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 19.932091369000148, 9.063330566000076 ], [ 19.914473917000066, 9.069266663000064 ], [ 19.889462525000056, 9.046374004000128 ], [ 19.784662720000085, 9.048751120000091 ], [ 19.640072062000087, 9.013998718000053 ], [ 19.613613729000122, 9.031672059000044 ], [ 19.521319621000117, 9.008831075000046 ], [ 19.420963989000057, 9.017435202000073 ], [ 19.36939091000005, 9.00038197800005 ], [ 19.253428996000139, 9.027951356000131 ], [ 19.192037394000067, 9.020174052000115 ], [ 19.168783000000133, 9.002216492000045 ], [ 19.100570109000103, 9.015264791000092 ], [ 19.021918579000044, 8.985214946000028 ], [ 18.971895793000044, 8.938215230000054 ], [ 18.922906535000038, 8.91821645100012 ], [ 18.917738892000045, 8.898811951000141 ], [ 18.892727498000056, 8.897933452000103 ], [ 18.869783162000118, 8.849409282000124 ], [ 18.88652632700007, 8.835844218000133 ], [ 18.902959432000017, 8.844810079000069 ], [ 18.929107707000128, 8.796544292000064 ], [ 19.048686971000109, 8.745668844000136 ], [ 19.124134562000108, 8.675078837000058 ], [ 19.061296021000146, 8.625624492000028 ], [ 19.02047163900005, 8.545577698000073 ], [ 18.813042440000089, 8.276421001000045 ], [ 18.638582804000094, 8.177641500000092 ], [ 18.618635702000063, 8.138651632000105 ], [ 18.617912231000076, 8.090127462000027 ], [ 18.589283488000092, 8.047881979000053 ], [ 18.508254842000071, 8.030673727000064 ], [ 18.175430591551454, 8.021952410863994 ], [ 18.126927773098259, 8.214065959676304 ], [ 18.128662000550889, 8.378817569475245 ], [ 18.090508995693597, 8.467263170458921 ], [ 18.088774768240967, 8.52102422238994 ], [ 18.031545262304007, 8.576519500874269 ], [ 18.012468759425701, 8.621609415542082 ], [ 18.014202986878331, 8.803703299867379 ], [ 17.937510613124289, 8.859727280789343 ], [ 17.961192253719503, 8.884466864054502 ], [ 17.967458529187752, 9.007391669190156 ], [ 17.98389733129676, 9.016628322638951 ], [ 18.004323764230321, 8.999457098266475 ], [ 18.091481966819288, 9.041205145700928 ], [ 18.165456576759595, 9.160101629286771 ], [ 18.141736600763522, 9.187974781510945 ], [ 17.995813352004575, 9.200135051791221 ], [ 17.795168885635576, 9.291337082040684 ], [ 17.73436753243567, 9.431180195209834 ], [ 17.713087058321094, 9.455500736669649 ], [ 17.624925096316133, 9.45246066932441 ], [ 17.579324080741742, 9.558863037199387 ], [ 17.536532016639228, 9.587063707224274 ], [ 17.561026646162759, 9.653622951837747 ], [ 17.543818394003665, 9.68395701700274 ], [ 17.427288039311577, 9.774804185564676 ], [ 17.329516228591046, 9.815835272779623 ], [ 17.533741488678743, 10.463702703716763 ], [ 17.827160271829086, 10.47388296092987 ], [ 17.931288283027811, 10.382415676542223 ], [ 18.038826938912109, 10.344691881225344 ], [ 18.145125360447025, 10.341487942114838 ], [ 18.156752556685149, 10.311257228838031 ], [ 18.218505894431473, 10.288571275344054 ], [ 18.264756300562794, 10.247798570547559 ], [ 18.349919061315632, 10.236378078985126 ], [ 18.381596713617398, 10.204803779470808 ], [ 18.453116895628227, 10.179120592441393 ], [ 18.500762566639139, 10.10791046789376 ], [ 18.607060988174055, 10.020784003279118 ], [ 18.600394728433969, 9.913090317763931 ], [ 18.653466423936322, 9.900171210333099 ], [ 18.697701450261718, 9.866684882001664 ], [ 18.762710402163293, 9.884513250885789 ], [ 18.795266553608542, 9.994842433831252 ], [ 18.998871697870527, 10.007038071749605 ], [ 19.049462924674231, 10.035666816370451 ], [ 19.111991407877156, 10.120312812286443 ], [ 19.164132928291963, 10.137521064445536 ], [ 19.19358849521285, 10.202995103441253 ], [ 19.302677442909669, 10.299940090063103 ], [ 19.281593458970917, 10.34923940747268 ], [ 19.316371697595741, 10.357404283081166 ], [ 19.336835564809462, 10.419622707921633 ], [ 19.378590122436208, 10.469128730006844 ], [ 19.442203810357569, 10.502046617557369 ], [ 19.464372999914019, 10.482357895800249 ], [ 19.5337227715886, 10.495380356917906 ], [ 19.557803989062847, 10.552741197148521 ], [ 19.580128208250187, 10.541165675955142 ], [ 19.61428633014998, 10.595374253918692 ], [ 19.658366326844487, 10.618473619461952 ], [ 19.605914748067164, 10.359161282267337 ], [ 19.640951369110383, 10.225215968941825 ], [ 19.604519484086893, 10.10868561424968 ], [ 19.572066685429149, 10.075612697967642 ], [ 19.651028272636665, 9.92812816048621 ], [ 19.932091369000148, 9.063330566000076 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "TD-MA", "NAME_1": "Mandoul" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 18.175430591551454, 8.021952410863994 ], [ 18.07045210800004, 8.019201558000049 ], [ 17.858785441000123, 7.960445455000084 ], [ 17.639884074000122, 7.985043437000073 ], [ 17.580766235000084, 7.940601706000095 ], [ 17.503664998000119, 7.926235657000092 ], [ 17.466354614000096, 7.884119364000057 ], [ 17.41912235500007, 7.898227030000086 ], [ 17.385739380000075, 7.870476787000129 ], [ 17.233790205553532, 7.810801425045724 ], [ 17.080177443034529, 8.136816311123823 ], [ 17.166735466868261, 8.158468735843485 ], [ 17.249469434866512, 8.290553697195378 ], [ 17.033461948010483, 8.632651679231572 ], [ 17.117384474413939, 8.783650214186025 ], [ 17.125911086127701, 8.995936997994022 ], [ 17.104827101289686, 9.069782619971932 ], [ 17.185649041370141, 9.156547349380673 ], [ 17.06322757329383, 9.263362534853115 ], [ 17.210040317206847, 9.3859907094037 ], [ 17.218256869658774, 9.507326971862256 ], [ 17.197637973713483, 9.555386054023188 ], [ 17.234224888367862, 9.592024643722311 ], [ 17.455193311721928, 9.641892401912799 ], [ 17.579324080741742, 9.558863037199387 ], [ 17.624925096316133, 9.45246066932441 ], [ 17.713087058321094, 9.455500736669649 ], [ 17.795168885635576, 9.291337082040684 ], [ 17.995813352004575, 9.200135051791221 ], [ 18.141736600763522, 9.187974781510945 ], [ 18.165456576759595, 9.160101629286771 ], [ 18.091481966819288, 9.041205145700928 ], [ 18.004323764230321, 8.999457098266475 ], [ 17.98389733129676, 9.016628322638951 ], [ 17.967458529187752, 9.007391669190156 ], [ 17.961192253719503, 8.884466864054502 ], [ 17.937510613124289, 8.859727280789343 ], [ 18.014202986878331, 8.803703299867379 ], [ 18.012468759425701, 8.621609415542082 ], [ 18.031545262304007, 8.576519500874269 ], [ 18.088774768240967, 8.52102422238994 ], [ 18.090508995693597, 8.467263170458921 ], [ 18.128662000550889, 8.378817569475245 ], [ 18.126927773098259, 8.214065959676304 ], [ 18.175430591551454, 8.021952410863994 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "TD-LR", "NAME_1": "Logone Oriental" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 17.233790205553532, 7.810801425045724 ], [ 17.211073038000023, 7.768312480000077 ], [ 17.188645467000129, 7.764126689000051 ], [ 17.101932414000061, 7.677723694000065 ], [ 17.059351033000098, 7.696533916000078 ], [ 17.038990519000066, 7.662479147000028 ], [ 16.997546020000101, 7.66671661400008 ], [ 16.981939738000079, 7.648733215000092 ], [ 16.880653930000051, 7.632868551000087 ], [ 16.854815715000115, 7.611474508000072 ], [ 16.853885539000089, 7.567497864000117 ], [ 16.805516398000123, 7.543675029000056 ], [ 16.768619425000111, 7.55023793600013 ], [ 16.709811646000048, 7.627752584000092 ], [ 16.614210245000066, 7.679584046000073 ], [ 16.613073364000059, 7.748210347000025 ], [ 16.54930464600011, 7.794719137000058 ], [ 16.54868453000006, 7.870011699000116 ], [ 16.491737101000069, 7.84923777300007 ], [ 16.450912720000076, 7.792083638000051 ], [ 16.407401164000078, 7.796062724000123 ], [ 16.392208292000134, 7.783608703000127 ], [ 16.38714400200007, 7.69467356400007 ], [ 16.370814249000119, 7.672504374000056 ], [ 16.2827576090001, 7.660102031000079 ], [ 16.207206665000058, 7.613541565000034 ], [ 16.042978964000042, 7.583930970000083 ], [ 15.975696248000077, 7.515201315000112 ], [ 15.925260050000077, 7.488174541000063 ], [ 15.758345174000112, 7.455566711000102 ], [ 15.720001262000096, 7.468640849000067 ], [ 15.668531535000113, 7.516286519000104 ], [ 15.515569295000148, 7.512204081000093 ], [ 15.48104943900006, 7.523262838000093 ], [ 15.548952271000104, 7.630801493000121 ], [ 15.562904907000103, 7.792445374000039 ], [ 15.487870727000114, 7.804951071000048 ], [ 15.440741821000103, 7.83941925100001 ], [ 15.345347127000082, 8.135990296000088 ], [ 15.210706216000091, 8.421822448000057 ], [ 15.273207635124265, 8.448631903939201 ], [ 15.431440870599658, 8.355149237047613 ], [ 15.481722039040847, 8.347914537425936 ], [ 15.520065951982076, 8.317012030580713 ], [ 15.519755893619561, 8.28362905503684 ], [ 15.558048129717406, 8.278358059277025 ], [ 15.570812209315989, 8.258152574481699 ], [ 15.664708285558902, 8.276394355415164 ], [ 15.728166944748693, 8.322696438389926 ], [ 15.813639763863989, 8.315823473074829 ], [ 15.85740970219598, 8.366466375822597 ], [ 15.867951693715668, 8.413543606052542 ], [ 16.004119093321492, 8.511005357511237 ], [ 16.145195754380552, 8.597511705400848 ], [ 16.365027297072061, 8.648568020197956 ], [ 16.409572380860652, 8.706548977153545 ], [ 16.513493687383743, 8.753161119390143 ], [ 16.5971061536261, 8.881111964745344 ], [ 16.596175977639234, 8.90266103847614 ], [ 16.569820997940667, 8.945345771190375 ], [ 16.549305453883562, 8.952167060561408 ], [ 16.542484165411906, 8.980124009815199 ], [ 16.520780063848861, 8.980124009815199 ], [ 16.489722528272068, 9.021465155392605 ], [ 16.435358920677629, 9.127608547296632 ], [ 16.568735793222288, 9.136083482166953 ], [ 16.91910200365453, 9.036141262009608 ], [ 16.998993767748175, 9.037484849146438 ], [ 17.104827101289686, 9.069782619971932 ], [ 17.125911086127701, 8.995936997994022 ], [ 17.117384474413939, 8.783650214186025 ], [ 17.033461948010483, 8.632651679231572 ], [ 17.249469434866512, 8.284559231023707 ], [ 17.166735466868261, 8.158468735843485 ], [ 17.080177443034529, 8.136816311123823 ], [ 17.233790205553532, 7.810801425045724 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "TD-HL", "NAME_1": "Hadjer-Lamis" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 14.560692179000085, 12.766224467000143 ], [ 14.54901330600012, 12.81821095800008 ], [ 14.49010217300011, 12.873608094000119 ], [ 14.507672159000094, 12.952440491000047 ], [ 14.481040720000067, 13.000507963000089 ], [ 15.01405032666122, 13.00334096901048 ], [ 15.043195835219592, 13.097960517463889 ], [ 15.002578159154723, 13.188239244345652 ], [ 14.996635369826436, 13.25965607356892 ], [ 15.17404056222216, 13.203742174162016 ], [ 15.185512729728657, 13.173769843303603 ], [ 15.269900343226254, 13.102042954818501 ], [ 15.286540154604438, 13.143694158758422 ], [ 15.327984652969349, 13.144159246751826 ], [ 15.383175082863772, 13.19878123586534 ], [ 15.372012973719734, 13.221828925464536 ], [ 15.305918817099723, 13.241052558328875 ], [ 15.21450320775682, 13.372414049268968 ], [ 15.356820103165205, 13.405125230345107 ], [ 15.441052687031856, 13.31867055929888 ], [ 15.743049757840026, 13.182141425386476 ], [ 15.847642857032213, 13.168757229062862 ], [ 15.883609653162921, 13.187877509139696 ], [ 15.965258416442737, 13.121990058094696 ], [ 15.986807489274213, 13.051503403958918 ], [ 15.999984979123496, 13.047575995335876 ], [ 16.246894971925371, 13.051968491952323 ], [ 16.324926384944717, 13.074447739871289 ], [ 16.447812941014377, 13.050986640021392 ], [ 16.489412469010233, 13.081630764448221 ], [ 16.719372592970785, 13.113050035230913 ], [ 16.818694696403099, 13.159507147836564 ], [ 16.880137973988269, 13.143177394820896 ], [ 16.974034051130559, 13.16291779252208 ], [ 16.997288446304765, 13.182089749442355 ], [ 17.059661898977424, 13.170565904193097 ], [ 17.131698845825042, 13.144004218020257 ], [ 17.072684360095138, 13.063957424295666 ], [ 16.969848260089123, 12.970578111090958 ], [ 16.941116163580091, 12.908411363093933 ], [ 17.038887974300565, 12.829914862980502 ], [ 17.125290969402727, 12.623105780507331 ], [ 17.156038445717684, 12.604192206005507 ], [ 17.197172885720079, 12.538459783692076 ], [ 17.257530958586869, 12.515515447779705 ], [ 17.289466994206407, 12.354698390818044 ], [ 17.347706332681071, 12.309791570924233 ], [ 17.380572544287475, 12.256151435540289 ], [ 17.384448276067076, 12.209074205310287 ], [ 17.412405226220187, 12.187576809322252 ], [ 17.476173943772494, 12.188920396459139 ], [ 17.560096470175949, 12.155640773702714 ], [ 17.567382846641067, 12.129079088429194 ], [ 17.517101678199879, 11.93281199837503 ], [ 17.625570510070986, 11.715099189176215 ], [ 17.459187968050287, 11.666790876098048 ], [ 17.265166674902105, 11.493192876350122 ], [ 17.122203616603599, 11.564674405499375 ], [ 16.989452205454882, 11.687214169498304 ], [ 16.836277500905908, 11.697425816648092 ], [ 16.785219266056288, 11.738272405247301 ], [ 16.7750076189065, 11.881235462646487 ], [ 16.672891148307826, 12.003775226645359 ], [ 16.672891148307826, 12.116103344393821 ], [ 16.642256207757782, 12.228431461242906 ], [ 16.519716443758853, 12.289701343242371 ], [ 16.060192328313292, 12.463299342090977 ], [ 15.978499152014251, 12.371394519541411 ], [ 15.876382682314897, 12.340759578092047 ], [ 15.712996329716816, 12.350971225241835 ], [ 15.549609978018054, 12.310124637542003 ], [ 15.498551743168377, 12.269278048942795 ], [ 15.406646919719549, 12.279489696092583 ], [ 15.365800332019717, 12.330547930942259 ], [ 15.304530450020252, 12.340759578092047 ], [ 15.263683861421043, 12.299912990392158 ], [ 15.069662568272918, 12.259066401793007 ], [ 14.90486270493879, 12.248664494924668 ], [ 14.908267863000049, 12.326897278000075 ], [ 14.877468709000084, 12.447044983000126 ], [ 14.849563436000096, 12.457018534000042 ], [ 14.863826131000053, 12.495465800000076 ], [ 14.819177694000132, 12.638816223000035 ], [ 14.768844849000061, 12.633235168000112 ], [ 14.734118286000125, 12.680415751000041 ], [ 14.713654419000051, 12.652510478000053 ], [ 14.70207889800011, 12.668995260000131 ], [ 14.709933716000137, 12.718242900000106 ], [ 14.664458455000101, 12.715969136000098 ], [ 14.618363078000073, 12.759196472000042 ], [ 14.575264933000142, 12.744907939000058 ], [ 14.560692179000085, 12.766224467000143 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "TD-HL", "NAME_1": "Hadjer-Lamis" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 14.575264933000142, 12.744907939000058 ], [ 14.54901330600012, 12.81821095800008 ], [ 14.49010217300011, 12.873608094000119 ], [ 14.507672159000094, 12.952440491000047 ], [ 14.481040720000067, 13.000507963000089 ], [ 15.01405032666122, 13.00334096901048 ], [ 15.043195835219592, 13.097960517463889 ], [ 15.002578159154723, 13.188239244345652 ], [ 14.996635369826436, 13.25965607356892 ], [ 15.17404056222216, 13.203742174162016 ], [ 15.185512729728657, 13.173769843303603 ], [ 15.269900343226254, 13.102042954818501 ], [ 15.286540154604438, 13.143694158758422 ], [ 15.327984652969349, 13.144159246751826 ], [ 15.383175082863772, 13.19878123586534 ], [ 15.372012973719734, 13.221828925464536 ], [ 15.305918817099723, 13.241052558328875 ], [ 15.21450320775682, 13.372414049268968 ], [ 15.356820103165205, 13.405125230345107 ], [ 15.441052687031856, 13.31867055929888 ], [ 15.743049757840026, 13.182141425386476 ], [ 15.847642857032213, 13.168757229062862 ], [ 15.883609653162921, 13.187877509139696 ], [ 15.965258416442737, 13.121990058094696 ], [ 15.986807489274213, 13.051503403958918 ], [ 15.999984979123496, 13.047575995335876 ], [ 16.246894971925371, 13.051968491952323 ], [ 16.324926384944717, 13.074447739871289 ], [ 16.447812941014377, 13.050986640021392 ], [ 16.489412469010233, 13.081630764448221 ], [ 16.719372592970785, 13.113050035230913 ], [ 16.818694696403099, 13.159507147836564 ], [ 16.880137973988269, 13.143177394820896 ], [ 16.974034051130559, 13.16291779252208 ], [ 16.997288446304765, 13.182089749442355 ], [ 17.059661898977424, 13.170565904193097 ], [ 17.131698845825042, 13.144004218020257 ], [ 17.072684360095138, 13.063957424295666 ], [ 16.969848260089123, 12.970578111090958 ], [ 16.941116163580091, 12.908411363093933 ], [ 17.038887974300565, 12.829914862980502 ], [ 17.125290969402727, 12.623105780507331 ], [ 17.156038445717684, 12.604192206005507 ], [ 17.197172885720079, 12.538459783692076 ], [ 17.257530958586869, 12.515515447779705 ], [ 17.289466994206407, 12.354698390818044 ], [ 17.347706332681071, 12.309791570924233 ], [ 17.380572544287475, 12.256151435540289 ], [ 17.384448276067076, 12.209074205310287 ], [ 17.412405226220187, 12.187576809322252 ], [ 17.476173943772494, 12.188920396459139 ], [ 17.560096470175949, 12.155640773702714 ], [ 17.567382846641067, 12.129079088429194 ], [ 17.517101678199879, 11.93281199837503 ], [ 17.625570510070986, 11.715099189176215 ], [ 17.459187968050287, 11.666790876098048 ], [ 17.265166674902105, 11.493192876350122 ], [ 17.122203616603599, 11.564674405499375 ], [ 16.989452205454882, 11.687214169498304 ], [ 16.836277500905908, 11.697425816648092 ], [ 16.785219266056288, 11.738272405247301 ], [ 16.7750076189065, 11.881235462646487 ], [ 16.672891148307826, 12.003775226645359 ], [ 16.672891148307826, 12.116103344393821 ], [ 16.642256207757782, 12.228431461242906 ], [ 16.519716443758853, 12.289701343242371 ], [ 16.060192328313292, 12.463299342090977 ], [ 15.978499152014251, 12.371394519541411 ], [ 15.876382682314897, 12.340759578092047 ], [ 15.712996329716816, 12.350971225241835 ], [ 15.549609978018054, 12.310124637542003 ], [ 15.498551743168377, 12.269278048942795 ], [ 15.406646919719549, 12.279489696092583 ], [ 15.365800332019717, 12.330547930942259 ], [ 15.304530450020252, 12.340759578092047 ], [ 15.263683861421043, 12.299912990392158 ], [ 15.069662568272918, 12.259066401793007 ], [ 14.90486270493879, 12.248664494924668 ], [ 14.908267863000049, 12.326897278000075 ], [ 14.877468709000084, 12.447044983000126 ], [ 14.849563436000096, 12.457018534000042 ], [ 14.863826131000053, 12.495465800000076 ], [ 14.819177694000132, 12.638816223000035 ], [ 14.768844849000061, 12.633235168000112 ], [ 14.734118286000125, 12.680415751000041 ], [ 14.713654419000051, 12.652510478000053 ], [ 14.70207889800011, 12.668995260000131 ], [ 14.709933716000137, 12.718242900000106 ], [ 14.664458455000101, 12.715969136000098 ], [ 14.618363078000073, 12.759196472000042 ], [ 14.575264933000142, 12.744907939000058 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "TD-CB", "NAME_1": "Chari-Baguirmi" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 14.964801879000106, 12.092441305000079 ], [ 14.898035929000059, 12.152799377000079 ], [ 14.911575154000047, 12.1801362100001 ], [ 14.898035929000059, 12.207473043000036 ], [ 14.90486270493879, 12.248664494924668 ], [ 15.069662568272918, 12.259066401793007 ], [ 15.263683861421043, 12.299912990392158 ], [ 15.304530450020252, 12.340759578092047 ], [ 15.365800332019717, 12.330547930942259 ], [ 15.406646919719549, 12.279489696092583 ], [ 15.498551743168377, 12.269278048942795 ], [ 15.549609978018054, 12.310124637542003 ], [ 15.712996329716816, 12.350971225241835 ], [ 15.876382682314897, 12.340759578092047 ], [ 15.978499152014251, 12.371394519541411 ], [ 16.060192328313292, 12.463299342090977 ], [ 16.519716443758853, 12.289701343242371 ], [ 16.642256207757782, 12.228431461242906 ], [ 16.672891148307826, 12.116103344393821 ], [ 16.672891148307826, 12.003775226645359 ], [ 16.7750076189065, 11.881235462646487 ], [ 16.785219266056288, 11.738272405247301 ], [ 16.836277500905908, 11.697425816648092 ], [ 16.989452205454882, 11.687214169498304 ], [ 17.122203616603599, 11.564674405499375 ], [ 17.265166674902105, 11.493192876350122 ], [ 17.254955027752317, 11.237901701202532 ], [ 17.316224909751782, 10.74774264520687 ], [ 17.295801616351525, 10.584356293508108 ], [ 17.533741488678743, 10.463702703716763 ], [ 17.329516228591046, 9.815835272779623 ], [ 17.227558627728456, 9.831854967432776 ], [ 17.156193475348573, 9.874332994572001 ], [ 17.130148553113202, 9.916966051342172 ], [ 17.028966098606531, 9.938980211267733 ], [ 16.936930373437974, 9.938515123274328 ], [ 16.879827914726491, 10.000113430490387 ], [ 16.73988813612857, 10.026468411088274 ], [ 16.632969597868623, 10.095611477187902 ], [ 16.607803175675997, 10.145427558535005 ], [ 16.605012647715512, 10.21312368381092 ], [ 16.568115675597937, 10.25167430322648 ], [ 16.500729607785161, 10.204131985003073 ], [ 16.4402165061868, 10.192866523071586 ], [ 16.219403109765665, 10.195863755707762 ], [ 16.196303745121725, 10.211935126305036 ], [ 16.177390170619844, 10.263043117945529 ], [ 16.129899530139198, 10.302627265236083 ], [ 16.108453810095227, 10.446029364463584 ], [ 16.13398196839313, 10.746476142559914 ], [ 16.07481245303228, 10.767301744080214 ], [ 16.063340284626406, 10.75123037438226 ], [ 16.001225212573502, 10.789419256793281 ], [ 15.921798537372581, 10.775776678950535 ], [ 15.745581903382117, 10.811226711143775 ], [ 15.665380080026637, 10.8888447130131 ], [ 15.591534458048784, 10.901298733349847 ], [ 15.548746371647724, 10.925948390705628 ], [ 15.513864780235394, 11.009974269896645 ], [ 15.438262159970691, 11.050281886699679 ], [ 15.432060988224009, 11.116272691431561 ], [ 15.342867466060682, 11.170377915708229 ], [ 15.23129804876595, 11.184537258387763 ], [ 15.150579460573624, 11.117926336930907 ], [ 15.028830280692887, 11.080218266259976 ], [ 15.021232544000043, 11.182548523000051 ], [ 15.033324829000037, 11.26026987700007 ], [ 15.063090454000104, 11.30993092900006 ], [ 15.049447876000102, 11.337267762000096 ], [ 15.060609985000042, 11.416125997000023 ], [ 15.135644165000116, 11.53082183800008 ], [ 15.069394979000037, 11.660788066000094 ], [ 15.076112915000039, 11.72145619700008 ], [ 15.097196899000068, 11.72765736900007 ], [ 15.083554321000065, 11.748172913000133 ], [ 15.110942831000102, 11.782899476000068 ], [ 15.079833618000066, 11.851215719000038 ], [ 15.044176880000066, 11.877312317000118 ], [ 15.042006469000086, 11.902375387000035 ], [ 15.063400512000101, 11.927283427000106 ], [ 15.048310995000094, 11.962785136000051 ], [ 15.081177205000103, 11.97167348300006 ], [ 15.049447876000102, 12.011929423000097 ], [ 15.040559529000092, 12.055647685000082 ], [ 15.104691864338065, 12.07118935600397 ], [ 15.125295796463831, 12.113568067412359 ], [ 15.1074616269525, 12.154100271010691 ], [ 15.050006169049425, 12.180917084955468 ], [ 15.021597762826502, 12.15508291524435 ], [ 15.011827432789801, 12.108616027907374 ], [ 14.964801879000106, 12.092441305000079 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "TD-ND", "NAME_1": "Ville de N'Djamena" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 15.040559529000092, 12.055647685000082 ], [ 15.049447876000102, 12.084586487000138 ], [ 15.011827432789801, 12.108616027907374 ], [ 15.013491321567244, 12.134006169049428 ], [ 15.036189355654244, 12.17453837264776 ], [ 15.07432549192788, 12.179295797063389 ], [ 15.118810643996028, 12.134644813607224 ], [ 15.12252603384934, 12.09064481340738 ], [ 15.088478983618188, 12.061461626852577 ], [ 15.040559529000092, 12.055647685000082 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "TD-ME", "NAME_1": "Mayo-Kebbi Est" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 15.382967570000119, 9.930196025000086 ], [ 15.681243937000147, 9.991277568000072 ], [ 15.476398560000092, 10.132741801000108 ], [ 15.439191528000094, 10.185245057000074 ], [ 15.301422160000072, 10.311748963000056 ], [ 15.278374471000092, 10.39427622500007 ], [ 15.241167440000083, 10.432904358000073 ], [ 15.218326457000074, 10.487216288000127 ], [ 15.138227986000118, 10.521658631000079 ], [ 15.132336873000014, 10.565402731000077 ], [ 15.149906860000101, 10.623125305000059 ], [ 15.065880981000078, 10.793114929000041 ], [ 15.079006795000026, 10.898147278000081 ], [ 15.035185181000116, 10.994627177000098 ], [ 15.028830280692887, 11.080218266259976 ], [ 15.150579460573624, 11.117926336930907 ], [ 15.236879102888281, 11.185777492737088 ], [ 15.342867466060682, 11.170377915708229 ], [ 15.421984083798407, 11.123972479945962 ], [ 15.438262159970691, 11.050281886699679 ], [ 15.513864780235394, 11.009974269896645 ], [ 15.548746371647724, 10.925948390705628 ], [ 15.591534458048784, 10.901298733349847 ], [ 15.665380080026637, 10.8888447130131 ], [ 15.745581903382117, 10.811226711143775 ], [ 15.921798537372581, 10.775776678950535 ], [ 16.001225212573502, 10.789419256793281 ], [ 16.063340284626406, 10.75123037438226 ], [ 16.07481245303228, 10.767301744080214 ], [ 16.13398196839313, 10.746476142559914 ], [ 16.108453810095227, 10.446029364463584 ], [ 16.126488884554362, 10.315029608729446 ], [ 16.177390170619844, 10.263043117945529 ], [ 16.196303745121725, 10.211935126305036 ], [ 16.246274855200397, 10.149716702363889 ], [ 16.234647658062954, 10.023781235915294 ], [ 16.1584249201739, 9.855729478432693 ], [ 15.973940056888125, 9.683233547490204 ], [ 15.912186720041063, 9.731189276863631 ], [ 15.830692987291513, 9.741317857233298 ], [ 15.71633304203624, 9.604065252909095 ], [ 15.67416507325953, 9.495906480299823 ], [ 15.523941684660997, 9.325839342111919 ], [ 15.438262159970691, 9.186829739500865 ], [ 15.29956135846993, 9.244814462817203 ], [ 15.08963651271489, 9.394434942318696 ], [ 15.071186992885373, 9.527896838568211 ], [ 15.022724939804107, 9.591270293289369 ], [ 15.026452789764448, 9.641596272250126 ], [ 14.994766062403869, 9.671419074630592 ], [ 14.94071223348277, 9.695650101171225 ], [ 14.792935054808936, 9.662967116539164 ], [ 14.737544393558892, 9.665827298790816 ], [ 14.722846171713456, 9.787266672119188 ], [ 14.732464640000074, 9.923813985000052 ], [ 14.77256555200006, 9.92174692800009 ], [ 14.898139282000074, 9.960478414000107 ], [ 15.033014770000136, 9.942856751000122 ], [ 15.109599244000037, 9.981536560000038 ], [ 15.214915812000072, 9.984094543000126 ], [ 15.382967570000119, 9.930196025000086 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "TD-MO", "NAME_1": "Mayo-Kebbi Ouest" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 14.440492798000037, 9.995308329000068 ], [ 14.732464640000074, 9.923813985000052 ], [ 14.722846171713456, 9.787266672119188 ], [ 14.737544393558892, 9.665827298790816 ], [ 14.792935054808936, 9.662967116539164 ], [ 14.94071223348277, 9.695650101171225 ], [ 14.994766062403869, 9.671419074630592 ], [ 15.026452789764448, 9.641596272250126 ], [ 15.022724939804107, 9.591270293289369 ], [ 15.071186992885373, 9.527896838568211 ], [ 15.08963651271489, 9.394434942318696 ], [ 15.220104139594355, 9.292488794322367 ], [ 15.442189568593676, 9.18269562440355 ], [ 15.463893670156722, 9.02673615205174 ], [ 15.41779829275697, 9.004308580076895 ], [ 15.37712894074798, 8.883282375980855 ], [ 15.37542361840525, 8.746236477231605 ], [ 15.305918817099723, 8.671770738528721 ], [ 15.264939405828898, 8.502117011490895 ], [ 15.273207635124265, 8.448631903939201 ], [ 15.210706216000091, 8.421822448000057 ], [ 15.183703247000068, 8.479147644000122 ], [ 15.051928345000078, 8.643788758000056 ], [ 14.955086710000074, 8.676215719000069 ], [ 14.940100545000092, 8.729649149000082 ], [ 14.899379516000124, 8.774323425000119 ], [ 14.846049438000136, 8.810987854000089 ], [ 14.793856242000061, 8.813623353000096 ], [ 14.349542277000126, 9.168356221000082 ], [ 14.321326945000067, 9.243157858000103 ], [ 14.036486450000069, 9.568771057000077 ], [ 13.947602987000039, 9.637759094000032 ], [ 14.006720825000087, 9.739277446000102 ], [ 14.119788859000096, 9.85200958300004 ], [ 14.173532348000094, 9.975025329000061 ], [ 14.440492798000037, 9.995308329000068 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "TD-X01~", "NAME_1": "Ennedi" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 20.893328898000107, 21.020940247000013 ], [ 23.981305786000036, 19.496123759000014 ], [ 23.98440637200008, 15.721160381000018 ], [ 23.972624146000072, 15.691084697000051 ], [ 23.707524048000067, 15.748858948000063 ], [ 23.592699016000068, 15.749013977000104 ], [ 23.395811808000076, 15.688345846000018 ], [ 23.320570923000105, 15.681317851000088 ], [ 23.166781860000128, 15.712943827000103 ], [ 23.119249041000103, 15.707223545000105 ], [ 23.066220330603755, 15.788442288081114 ], [ 22.997645705285038, 15.816502590122411 ], [ 22.957183057951738, 15.820946764481562 ], [ 22.875534294671922, 15.797485662833083 ], [ 22.75931399924167, 15.838413398159787 ], [ 22.56082482290725, 15.80957794796393 ], [ 22.470701124757113, 15.908900051396245 ], [ 22.370913934230657, 15.948432521843415 ], [ 22.311796094813928, 15.927606920323115 ], [ 22.270971714073312, 15.931430976158595 ], [ 22.1771273128752, 15.999798895902302 ], [ 22.144209426224052, 15.978921617538617 ], [ 22.018222283831335, 15.986001288428724 ], [ 21.915954623706909, 15.944453437276309 ], [ 21.731779818783593, 15.999850571846423 ], [ 21.388803337603917, 15.923782864487578 ], [ 21.312632276558304, 15.887919420245055 ], [ 21.096624789702275, 15.985174465229363 ], [ 20.9587003918096, 15.918718573403453 ], [ 20.896326939136941, 15.839446926034782 ], [ 20.832868279947149, 15.799449368493526 ], [ 20.660268996217212, 15.737024238078106 ], [ 20.567199741374964, 15.685451158444209 ], [ 20.483535597389903, 15.711599433467086 ], [ 20.637016046253507, 15.843719203078763 ], [ 20.30085033327623, 16.758654839649125 ], [ 20.399707767799214, 17.178798933224186 ], [ 20.4244221259803, 17.623657385879653 ], [ 20.4244221259803, 17.969658404012137 ], [ 20.152564183290394, 18.686374798458189 ], [ 20.004278032405239, 19.279519401099492 ], [ 20.893328898000107, 21.020940247000013 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "TD-BO", "NAME_1": "Borkou" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 19.185837029855008, 21.864177058924099 ], [ 20.893328898000107, 21.020940247000013 ], [ 20.004278032405239, 19.279519401099492 ], [ 20.152564183290394, 18.686374798458189 ], [ 20.4244221259803, 17.969658404012137 ], [ 20.4244221259803, 17.623657385879653 ], [ 20.399707767799214, 17.178798933224186 ], [ 20.30085033327623, 16.758654839649125 ], [ 20.637016046253507, 15.843719203078763 ], [ 20.483535597389903, 15.711599433467086 ], [ 20.291764356739634, 15.669018053540299 ], [ 20.11286054937483, 15.764102688188473 ], [ 19.863780145337444, 15.798674221238286 ], [ 19.555013462001682, 15.886369127533214 ], [ 19.409751010800505, 15.982590643743208 ], [ 19.369391717154031, 16.1334858259101 ], [ 19.342416619831113, 16.15281281246132 ], [ 19.260044386139498, 16.161132716801433 ], [ 19.220770298110779, 16.181803290489427 ], [ 19.207437777731229, 15.940060939760542 ], [ 19.130439894385574, 15.73071971354392 ], [ 19.046982455975524, 15.614654445945916 ], [ 18.935413038680792, 15.521998603153008 ], [ 18.791235793097371, 15.4505300970863 ], [ 18.592178175982042, 15.390482083481345 ], [ 18.479988641062903, 15.383867498786003 ], [ 18.270647413946961, 15.431461492953531 ], [ 18.084922316311861, 15.53166209642859 ], [ 17.84281823127634, 15.792524726335046 ], [ 15.468517057815973, 16.904909712513188 ], [ 15.490247843000077, 17.124537252000025 ], [ 17.359841679150179, 20.416379890019869 ], [ 17.409270395512351, 20.688237832709774 ], [ 17.705842697282662, 20.688237832709774 ], [ 17.829414489087412, 20.71295219089086 ], [ 17.952986281791482, 20.83652398359493 ], [ 18.150701149038809, 20.935381417218593 ], [ 18.743845751680055, 21.133096284465921 ], [ 18.768560109861141, 21.355525510793655 ], [ 18.719131393498969, 21.849812679811293 ], [ 18.917118774000073, 21.996849671000078 ], [ 19.185837029855008, 21.864177058924099 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "TD-BO", "NAME_1": "Borkou" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 18.917118774000073, 21.996849671000078 ], [ 20.893328898000107, 21.020940247000013 ], [ 20.004278032405239, 19.279519401099492 ], [ 20.152564183290394, 18.686374798458189 ], [ 20.4244221259803, 17.969658404012137 ], [ 20.4244221259803, 17.623657385879653 ], [ 20.399707767799214, 17.178798933224186 ], [ 20.30085033327623, 16.758654839649125 ], [ 20.637016046253507, 15.843719203078763 ], [ 20.483535597389903, 15.711599433467086 ], [ 20.291764356739634, 15.669018053540299 ], [ 20.11286054937483, 15.764102688188473 ], [ 19.863780145337444, 15.798674221238286 ], [ 19.555013462001682, 15.886369127533214 ], [ 19.409751010800505, 15.982590643743208 ], [ 19.369391717154031, 16.1334858259101 ], [ 19.342416619831113, 16.15281281246132 ], [ 19.260044386139498, 16.161132716801433 ], [ 19.220770298110779, 16.181803290489427 ], [ 19.207437777731229, 15.940060939760542 ], [ 19.130439894385574, 15.73071971354392 ], [ 19.046982455975524, 15.614654445945916 ], [ 18.935413038680792, 15.521998603153008 ], [ 18.791235793097371, 15.4505300970863 ], [ 18.592178175982042, 15.390482083481345 ], [ 18.479988641062903, 15.383867498786003 ], [ 18.270647413946961, 15.431461492953531 ], [ 18.084922316311861, 15.53166209642859 ], [ 17.84281823127634, 15.792524726335046 ], [ 15.468517057815973, 16.904909712513188 ], [ 15.490247843000077, 17.124537252000025 ], [ 17.359841679150179, 20.416379890019869 ], [ 17.409270395512351, 20.688237832709774 ], [ 17.705842697282662, 20.688237832709774 ], [ 17.829414489087412, 20.71295219089086 ], [ 17.952986281791482, 20.83652398359493 ], [ 18.150701149038809, 20.935381417218593 ], [ 18.743845751680055, 21.133096284465921 ], [ 18.768560109861141, 21.355525510793655 ], [ 18.719131393498969, 21.849812679811293 ], [ 18.917118774000073, 21.996849671000078 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "TD-TI", "NAME_1": "Tibesti" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 15.985101359000112, 23.444719951000067 ], [ 18.917118774000073, 21.996849671000078 ], [ 18.719131393498969, 21.849812679811293 ], [ 18.768560109861141, 21.355525510793655 ], [ 18.743845751680055, 21.133096284465921 ], [ 18.150701149038809, 20.935381417218593 ], [ 17.952986281791482, 20.83652398359493 ], [ 17.829414489087412, 20.71295219089086 ], [ 17.705842697282662, 20.688237832709774 ], [ 17.409270395512351, 20.688237832709774 ], [ 17.359841679150179, 20.416379890019869 ], [ 15.490247843000077, 17.124537252000025 ], [ 15.736020955000129, 19.903540751000023 ], [ 15.970321899000112, 20.336330871000101 ], [ 15.953992147000065, 20.374571432 ], [ 15.669461711000054, 20.671865946000068 ], [ 15.570242961000105, 20.751912740000122 ], [ 15.544198039000037, 20.798989970000022 ], [ 15.544301391000147, 20.890302226000117 ], [ 15.569002727000054, 20.928904521 ], [ 15.609310343000118, 20.950660299000035 ], [ 15.301008748000044, 21.401330465000072 ], [ 15.266592245000083, 21.440656230000045 ], [ 15.184530070000108, 21.491195780000069 ], [ 15.172024373000113, 21.993387350000134 ], [ 14.979909027000133, 22.995663760000085 ], [ 15.985101359000112, 23.444719951000067 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "TD-KA", "NAME_1": "Kanem" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.608052034873481, 14.518266228003995 ], [ 13.665604695000098, 14.566889751000105 ], [ 13.648344767000111, 14.649417013000033 ], [ 13.709994751000067, 14.705124207000068 ], [ 13.764358358000038, 14.719076843000053 ], [ 13.772006469000104, 14.762872620000053 ], [ 13.755159952000042, 14.847208558000062 ], [ 13.833914836000133, 15.019601136000105 ], [ 14.368972615000104, 15.749634095000076 ], [ 15.468517057815973, 16.904909712513188 ], [ 16.671386334311876, 16.341868536703601 ], [ 16.489081502309489, 16.037375794157583 ], [ 16.131673857462545, 14.811978153269138 ], [ 16.111250563162969, 14.577110272421123 ], [ 16.049980681163504, 14.474993802721826 ], [ 15.774266211716281, 14.148221098424926 ], [ 15.590456565717943, 14.076739569275674 ], [ 15.6007221766871, 13.753926464834478 ], [ 15.71617801330467, 13.754923000895758 ], [ 15.758242629293875, 13.790166327513987 ], [ 15.841751742748727, 13.765775050777961 ], [ 15.85740970219598, 13.74510447798923 ], [ 15.865006137922933, 13.700921129406595 ], [ 15.840201450036886, 13.642630113189171 ], [ 15.8581848485519, 13.581238512447385 ], [ 15.898389112567486, 13.521500556305625 ], [ 15.899939406178646, 13.250457669186062 ], [ 15.871672397663019, 13.171496080179963 ], [ 15.776226026909626, 13.171857815385863 ], [ 15.560136878913795, 13.264834071335315 ], [ 15.375818277791268, 13.751985246721745 ], [ 15.213262974306815, 13.750582180223432 ], [ 14.915813428846661, 13.678751938950825 ], [ 14.839642367800991, 13.685883287583636 ], [ 14.805174188438059, 13.663817449915371 ], [ 14.643788689796168, 13.908918769385707 ], [ 14.477442253756976, 14.104514064972079 ], [ 14.356571079291882, 14.134951483823897 ], [ 14.30737511556913, 14.198823554163653 ], [ 14.261744826162783, 14.213189602418197 ], [ 14.149400261612755, 14.308480943540701 ], [ 14.131881951990465, 14.378347480052128 ], [ 14.087336867302554, 14.416691392094037 ], [ 14.017366978003622, 14.428060207712406 ], [ 13.995817905172146, 14.452348130761607 ], [ 13.950497674128371, 14.466145738235241 ], [ 13.78492638534442, 14.476377672291733 ], [ 13.735575391990722, 14.515703437163893 ], [ 13.608052034873481, 14.518266228003995 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "TD-OD", "NAME_1": "Ouaddaï" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 22.180762493000145, 13.920554946000053 ], [ 22.073721964000129, 13.771356913000147 ], [ 22.112892700000089, 13.729834900000071 ], [ 22.132116333000113, 13.63865183500009 ], [ 22.195885050000129, 13.580464173000081 ], [ 22.215625448000083, 13.464993184000022 ], [ 22.275983521000086, 13.376316427000106 ], [ 22.267611939000119, 13.334561869000069 ], [ 22.139971151000054, 13.193511048000047 ], [ 22.016051066000074, 13.140232646000072 ], [ 21.964064575000037, 13.098348898000083 ], [ 21.852960246000066, 12.90572499600006 ], [ 21.809448689905082, 12.793664652701523 ], [ 21.574481710962175, 12.881976869836649 ], [ 21.482576888412666, 12.851341928387285 ], [ 21.380460417813993, 12.79007204638782 ], [ 21.288555595264484, 12.698167222938991 ], [ 21.237497360414807, 12.677743929538678 ], [ 21.094534302116358, 12.698167222938991 ], [ 20.982206185267216, 12.667532282388891 ], [ 20.849454774118499, 12.718590517238567 ], [ 20.839243126968711, 12.881976869836649 ], [ 20.686068421520417, 12.91261181038675 ], [ 20.675856774370629, 13.045363221535411 ], [ 20.410353952972514, 13.045363221535411 ], [ 20.294554884700176, 13.092327786498117 ], [ 20.304786817857348, 13.22322418944475 ], [ 20.281532423582462, 13.402748114433905 ], [ 20.283237745925192, 13.563151760245546 ], [ 20.231716343134735, 13.669760240142978 ], [ 20.238537631606391, 13.886232814992411 ], [ 20.000050896831397, 14.010617987829846 ], [ 20.000050896831397, 14.155983791818528 ], [ 20.288043653691659, 14.441392727192579 ], [ 20.434959751291444, 14.437878729719614 ], [ 20.492113885047729, 14.464130357529939 ], [ 20.551541781927654, 14.470228176489115 ], [ 20.7355615581194, 14.411678778752616 ], [ 20.844185417822757, 14.355041408933857 ], [ 20.89896243656716, 14.264762682052094 ], [ 20.958080275084626, 14.204146225867589 ], [ 21.000299919805457, 14.196859849402529 ], [ 21.168196648556489, 14.101465155492519 ], [ 21.232275425370574, 14.093403631772162 ], [ 21.333096143772025, 14.142651272338355 ], [ 21.421721226053705, 14.151901353564597 ], [ 21.702272576817961, 14.110870266349707 ], [ 22.042251825361461, 13.999455877786488 ], [ 22.084626498813861, 13.973462633293877 ], [ 22.124520705366251, 13.920494290579029 ], [ 22.180762493000145, 13.920554946000053 ] ] ] } },
|
||||
@@ -24,6 +24,6 @@
|
||||
{ "type": "Feature", "properties": { "ISO": "TD-TA", "NAME_1": "Tandjilé" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 16.435358920677629, 9.127608547296632 ], [ 16.420527785329, 9.180835273329194 ], [ 16.357430861345165, 9.238712877497278 ], [ 16.304307488999427, 9.192410792723877 ], [ 16.204210239211136, 9.155927231756323 ], [ 16.146952751768083, 9.088541164842866 ], [ 16.042359652575897, 9.117118231721008 ], [ 16.001431919047832, 9.113965969453886 ], [ 15.818135614167261, 9.025082506552394 ], [ 15.7552970717025, 9.032213853386622 ], [ 15.569727003698233, 8.991389471746686 ], [ 15.489008416405284, 9.007719223863091 ], [ 15.452421501750905, 9.049990546326626 ], [ 15.438262159970691, 9.186829739500865 ], [ 15.523941684660997, 9.325839342111919 ], [ 15.67416507325953, 9.495906480299823 ], [ 15.71633304203624, 9.604065252909095 ], [ 15.830692987291513, 9.741317857233298 ], [ 15.912186720041063, 9.731189276863631 ], [ 15.973940056888125, 9.683233547490204 ], [ 16.166486443894257, 9.866788234789169 ], [ 16.211496615676253, 9.955206611495896 ], [ 16.243329299407606, 10.071581936557095 ], [ 16.246274855200397, 10.149716702363889 ], [ 16.219403109765665, 10.195863755707762 ], [ 16.4402165061868, 10.192866523071586 ], [ 16.500729607785161, 10.204131985003073 ], [ 16.568115675597937, 10.25167430322648 ], [ 16.605012647715512, 10.21312368381092 ], [ 16.607803175675997, 10.145427558535005 ], [ 16.632969597868623, 10.095611477187902 ], [ 16.73988813612857, 10.026468411088274 ], [ 16.879827914726491, 10.000113430490387 ], [ 16.936930373437974, 9.938515123274328 ], [ 17.028966098606531, 9.938980211267733 ], [ 17.130148553113202, 9.916966051342172 ], [ 17.156193475348573, 9.874332994572001 ], [ 17.227558627728456, 9.831854967432776 ], [ 17.347499627106117, 9.813974920805947 ], [ 17.427288039311577, 9.774804185564676 ], [ 17.558391147833163, 9.663183092325824 ], [ 17.536532016639228, 9.587063707224274 ], [ 17.443721144215431, 9.643752752987155 ], [ 17.306881951940511, 9.600137844286053 ], [ 17.254585401894758, 9.601481432322203 ], [ 17.204459263084516, 9.568201809565835 ], [ 17.197637973713483, 9.549701646213975 ], [ 17.218256869658774, 9.507326971862256 ], [ 17.210040317206847, 9.3859907094037 ], [ 17.06322757329383, 9.263362534853115 ], [ 17.185649041370141, 9.156547349380673 ], [ 17.104827101289686, 9.069782619971932 ], [ 16.998993767748175, 9.037484849146438 ], [ 16.91910200365453, 9.036141262009608 ], [ 16.568735793222288, 9.136083482166953 ], [ 16.435358920677629, 9.127608547296632 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "TD-LO", "NAME_1": "Logone Occidental" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 16.357430861345165, 9.238712877497278 ], [ 16.420527785329, 9.180835273329194 ], [ 16.489722528272068, 9.021465155392605 ], [ 16.592455274591259, 8.917492173824769 ], [ 16.5971061536261, 8.881111964745344 ], [ 16.490497673728669, 8.732438869758028 ], [ 16.409572380860652, 8.706548977153545 ], [ 16.365027297072061, 8.648568020197956 ], [ 16.145195754380552, 8.597511705400848 ], [ 16.004119093321492, 8.511005357511237 ], [ 15.867951693715668, 8.413543606052542 ], [ 15.85740970219598, 8.366466375822597 ], [ 15.813639763863989, 8.315823473074829 ], [ 15.728166944748693, 8.322696438389926 ], [ 15.664708285558902, 8.276394355415164 ], [ 15.614065382811134, 8.26202830716062 ], [ 15.570812209315989, 8.258152574481699 ], [ 15.558048129717406, 8.278358059277025 ], [ 15.524251743023513, 8.279908351988865 ], [ 15.520065951982076, 8.317012030580713 ], [ 15.481722039040847, 8.347914537425936 ], [ 15.431440870599658, 8.355149237047613 ], [ 15.273207635124265, 8.448631903939201 ], [ 15.264939405828898, 8.502117011490895 ], [ 15.305918817099723, 8.671770738528721 ], [ 15.37542361840525, 8.746236477231605 ], [ 15.372943148807281, 8.86426544779215 ], [ 15.428185256444408, 9.013455308515688 ], [ 15.463893670156722, 9.02673615205174 ], [ 15.518515659270236, 8.994851793275643 ], [ 15.569727003698233, 8.991389471746686 ], [ 15.7552970717025, 9.032213853386622 ], [ 15.818135614167261, 9.025082506552394 ], [ 16.022050815892442, 9.117273261351897 ], [ 16.146952751768083, 9.088541164842866 ], [ 16.204210239211136, 9.155927231756323 ], [ 16.304307488999427, 9.192410792723877 ], [ 16.357430861345165, 9.238712877497278 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "TD-GR", "NAME_1": "Guéra" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 17.265166674902105, 11.493192876350122 ], [ 17.459187968050287, 11.666790876098048 ], [ 17.625570510070986, 11.715099189176215 ], [ 17.517101678199879, 11.93281199837503 ], [ 17.567382846641067, 12.129079088429194 ], [ 17.545368686715506, 12.208867498836014 ], [ 17.564747349210791, 12.236256008208215 ], [ 17.825920038379024, 12.45717275651748 ], [ 17.986685417597926, 12.482442532396931 ], [ 18.075258823036222, 12.569672348899758 ], [ 18.435288526744102, 12.763769029517107 ], [ 19.112611524602187, 12.751728420330323 ], [ 19.470882427781817, 12.953458398086582 ], [ 19.705750309529151, 13.055574868685255 ], [ 19.990284050768309, 12.970578111090958 ], [ 20.136425002012231, 12.860455633720505 ], [ 20.170738152643594, 12.854409490705393 ], [ 20.169497918294269, 12.787850246991297 ], [ 20.122472364907708, 12.767903143715102 ], [ 20.048626742929798, 12.668477688394603 ], [ 20.094050326761135, 12.594838771991704 ], [ 20.043355747169983, 12.558871974961676 ], [ 19.926308627641049, 12.423117988304512 ], [ 19.885535922844554, 12.343381252043116 ], [ 19.821457146929788, 12.163185533485546 ], [ 19.820010207005453, 12.087014472439932 ], [ 19.642036573828818, 12.097659816747125 ], [ 19.3895972019493, 12.158948066500045 ], [ 19.219220005398938, 11.999371242988445 ], [ 19.293685744101765, 11.87286733575894 ], [ 19.190797967252365, 11.673654689911984 ], [ 19.061400181073509, 11.61572540890046 ], [ 19.012204217350757, 11.703213608721057 ], [ 18.886527134219875, 11.706365871887442 ], [ 18.867613559717995, 11.692361557939535 ], [ 18.84632287020429, 11.389485988887259 ], [ 18.860430536040383, 11.345354316248688 ], [ 19.136020949407282, 11.184175523181864 ], [ 19.255496859892162, 11.142575995186007 ], [ 19.315441521608932, 11.103611965519804 ], [ 19.360089959084348, 11.102578436745432 ], [ 19.392697788272301, 11.064234523804203 ], [ 19.460807325597557, 11.062580878304857 ], [ 19.628549024717699, 10.991680813019116 ], [ 19.6929378598943, 10.917731838253701 ], [ 19.666892937658929, 10.896027736690655 ], [ 19.677124871715421, 10.705083320139124 ], [ 19.658366326844487, 10.618473619461952 ], [ 19.61428633014998, 10.595374253918692 ], [ 19.580128208250187, 10.541165675955142 ], [ 19.557803989062847, 10.552741197148521 ], [ 19.5337227715886, 10.495380356917906 ], [ 19.464372999914019, 10.482357895800249 ], [ 19.442203810357569, 10.502046617557369 ], [ 19.378590122436208, 10.469128730006844 ], [ 19.336835564809462, 10.419622707921633 ], [ 19.316371697595741, 10.357404283081166 ], [ 19.281593458970917, 10.34923940747268 ], [ 19.302677442909669, 10.299940090063103 ], [ 19.19358849521285, 10.202995103441253 ], [ 19.164132928291963, 10.137521064445536 ], [ 19.111991407877156, 10.120312812286443 ], [ 19.049462924674231, 10.035666816370451 ], [ 18.998871697870527, 10.007038071749605 ], [ 18.795266553608542, 9.994842433831252 ], [ 18.756974318410073, 9.881774399768744 ], [ 18.69020836822159, 9.867304998726695 ], [ 18.653466423936322, 9.900171210333099 ], [ 18.602410109139214, 9.9109715851705 ], [ 18.607060988174055, 10.020784003279118 ], [ 18.500762566639139, 10.10791046789376 ], [ 18.453116895628227, 10.179120592441393 ], [ 18.381596713617398, 10.204803779470808 ], [ 18.349919061315632, 10.236378078985126 ], [ 18.264756300562794, 10.247798570547559 ], [ 18.218505894431473, 10.288571275344054 ], [ 18.156752556685149, 10.311257228838031 ], [ 18.145125360447025, 10.341487942114838 ], [ 18.038826938912109, 10.344691881225344 ], [ 17.931288283027811, 10.382415676542223 ], [ 17.827160271829086, 10.47388296092987 ], [ 17.533741488678743, 10.463702703716763 ], [ 17.295801616351525, 10.584356293508108 ], [ 17.316224909751782, 10.74774264520687 ], [ 17.254955027752317, 11.237901701202532 ], [ 17.265166674902105, 11.493192876350122 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "TD-BA", "NAME_1": "Batha" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 17.131698845825042, 13.144004218020257 ], [ 17.202133823117435, 13.250974433123588 ], [ 17.197017856988509, 13.500623277042564 ], [ 17.238152296990904, 13.720609849365019 ], [ 17.551414828831298, 13.820086982428279 ], [ 17.992886590243927, 15.616411445132087 ], [ 18.084922316311861, 15.53166209642859 ], [ 18.209049106730902, 15.457248032770508 ], [ 18.479988641062903, 15.383867498786003 ], [ 18.592178175982042, 15.390482083481345 ], [ 18.892418246704722, 15.495075181774212 ], [ 19.046982455975524, 15.614654445945916 ], [ 19.130439894385574, 15.73071971354392 ], [ 19.207437777731229, 15.940060939760542 ], [ 19.220770298110779, 16.181803290489427 ], [ 19.260044386139498, 16.161132716801433 ], [ 19.342416619831113, 16.15281281246132 ], [ 19.369391717154031, 16.1334858259101 ], [ 19.409751010800505, 15.982590643743208 ], [ 19.555013462001682, 15.886369127533214 ], [ 19.863780145337444, 15.798674221238286 ], [ 20.000050896831397, 15.783843084990338 ], [ 20.000050896831397, 14.010617987829846 ], [ 20.238537631606391, 13.886232814992411 ], [ 20.231716343134735, 13.669760240142978 ], [ 20.283237745925192, 13.563151760245546 ], [ 20.281532423582462, 13.402748114433905 ], [ 20.304786817857348, 13.22322418944475 ], [ 20.304321729863943, 13.118321030990785 ], [ 20.260396762800326, 13.043545233925386 ], [ 19.987648553338033, 12.986029364063882 ], [ 19.990284050768309, 12.970578111090958 ], [ 19.705750309529151, 13.055574868685255 ], [ 19.470882427781817, 12.953458398086582 ], [ 19.096178419698276, 12.748679510850707 ], [ 18.435288526744102, 12.763769029517107 ], [ 18.075258823036222, 12.569672348899758 ], [ 17.986685417597926, 12.482442532396931 ], [ 17.825920038379024, 12.45717275651748 ], [ 17.564747349210791, 12.236256008208215 ], [ 17.545368686715506, 12.208867498836014 ], [ 17.560096470175949, 12.155640773702714 ], [ 17.476173943772494, 12.188920396459139 ], [ 17.412405226220187, 12.187576809322252 ], [ 17.384448276067076, 12.209074205310287 ], [ 17.380572544287475, 12.256151435540289 ], [ 17.347706332681071, 12.309791570924233 ], [ 17.289466994206407, 12.354698390818044 ], [ 17.257530958586869, 12.515515447779705 ], [ 17.197172885720079, 12.538459783692076 ], [ 17.156038445717684, 12.604192206005507 ], [ 17.125290969402727, 12.623105780507331 ], [ 17.038887974300565, 12.829914862980502 ], [ 16.941116163580091, 12.908411363093933 ], [ 16.969848260089123, 12.970578111090958 ], [ 17.072684360095138, 13.063957424295666 ], [ 17.131698845825042, 13.144004218020257 ] ] ] } }
|
||||
{ "type": "Feature", "properties": { "ISO": "TD-BA", "NAME_1": "Batha" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 17.072684360095138, 13.063957424295666 ], [ 17.202133823117435, 13.250974433123588 ], [ 17.197017856988509, 13.500623277042564 ], [ 17.238152296990904, 13.720609849365019 ], [ 17.551414828831298, 13.820086982428279 ], [ 17.992886590243927, 15.616411445132087 ], [ 18.084922316311861, 15.53166209642859 ], [ 18.209049106730902, 15.457248032770508 ], [ 18.479988641062903, 15.383867498786003 ], [ 18.592178175982042, 15.390482083481345 ], [ 18.892418246704722, 15.495075181774212 ], [ 19.046982455975524, 15.614654445945916 ], [ 19.130439894385574, 15.73071971354392 ], [ 19.207437777731229, 15.940060939760542 ], [ 19.220770298110779, 16.181803290489427 ], [ 19.260044386139498, 16.161132716801433 ], [ 19.342416619831113, 16.15281281246132 ], [ 19.369391717154031, 16.1334858259101 ], [ 19.409751010800505, 15.982590643743208 ], [ 19.555013462001682, 15.886369127533214 ], [ 19.863780145337444, 15.798674221238286 ], [ 20.000050896831397, 15.783843084990338 ], [ 20.000050896831397, 14.010617987829846 ], [ 20.238537631606391, 13.886232814992411 ], [ 20.231716343134735, 13.669760240142978 ], [ 20.283237745925192, 13.563151760245546 ], [ 20.281532423582462, 13.402748114433905 ], [ 20.304786817857348, 13.22322418944475 ], [ 20.304321729863943, 13.118321030990785 ], [ 20.260396762800326, 13.043545233925386 ], [ 19.987648553338033, 12.986029364063882 ], [ 19.990284050768309, 12.970578111090958 ], [ 19.705750309529151, 13.055574868685255 ], [ 19.470882427781817, 12.953458398086582 ], [ 19.096178419698276, 12.748679510850707 ], [ 18.435288526744102, 12.763769029517107 ], [ 18.075258823036222, 12.569672348899758 ], [ 17.986685417597926, 12.482442532396931 ], [ 17.825920038379024, 12.45717275651748 ], [ 17.564747349210791, 12.236256008208215 ], [ 17.545368686715506, 12.208867498836014 ], [ 17.560096470175949, 12.155640773702714 ], [ 17.476173943772494, 12.188920396459139 ], [ 17.412405226220187, 12.187576809322252 ], [ 17.384448276067076, 12.209074205310287 ], [ 17.380572544287475, 12.256151435540289 ], [ 17.347706332681071, 12.309791570924233 ], [ 17.289466994206407, 12.354698390818044 ], [ 17.257530958586869, 12.515515447779705 ], [ 17.197172885720079, 12.538459783692076 ], [ 17.156038445717684, 12.604192206005507 ], [ 17.125290969402727, 12.623105780507331 ], [ 17.038887974300565, 12.829914862980502 ], [ 16.941116163580091, 12.908411363093933 ], [ 16.969848260089123, 12.970578111090958 ], [ 17.072684360095138, 13.063957424295666 ] ] ] } }
|
||||
]
|
||||
}
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -8,11 +8,11 @@
|
||||
{ "type": "Feature", "properties": { "ISO": "CK-X11~", "NAME_1": "Penrhyn" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -157.940744594999927, -8.980726820999905 ], [ -157.978627081999917, -8.976006768999923 ], [ -158.008290167999917, -8.952894789999959 ], [ -158.002878383999928, -8.946709893999923 ], [ -157.940744594999927, -8.980726820999905 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "CK-X04~", "NAME_1": "Rarotonga" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -159.797840949999909, -21.186130466999941 ], [ -159.742746548999918, -21.201592705999929 ], [ -159.743234829999921, -21.254327080999929 ], [ -159.846262173999918, -21.233819268999923 ], [ -159.831410285999908, -21.195570570999905 ], [ -159.797840949999909, -21.186130466999941 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "CK-X06~", "NAME_1": "Mauke" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -157.312814907999922, -20.155205987999921 ], [ -157.317982550999915, -20.171807549999926 ], [ -157.340321417999917, -20.175713799999926 ], [ -157.348988410999908, -20.143324476999908 ], [ -157.312814907999922, -20.155205987999921 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "CK-X01~", "NAME_1": "Atiu" }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -158.078317837999919, -19.994235934999949 ], [ -158.081776495999918, -20.012790622999944 ], [ -158.115101691999911, -20.015720309999949 ], [ -158.135202602999925, -19.976495049999926 ], [ -158.078317837999919, -19.994235934999949 ] ] ], [ [ [ -158.268299933999913, -19.832614841999941 ], [ -158.281076626999919, -19.82195403399993 ], [ -158.276356574999909, -19.82350025799991 ], [ -158.268299933999913, -19.832614841999941 ] ] ], [ [ [ -158.287668423999918, -19.810642184999949 ], [ -158.293771938999924, -19.816582940999922 ], [ -158.297352667999917, -19.817315362999921 ], [ -158.295969204999921, -19.814548434999949 ], [ -158.287668423999918, -19.810642184999949 ] ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "CK-X02~", "NAME_1": "Aitutaki" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -158.925160285999908, -19.26921965899993 ], [ -158.950184699999909, -19.254489841999941 ], [ -158.955555792999917, -19.245293877999927 ], [ -158.918080206999917, -19.261163018999923 ], [ -158.925160285999908, -19.26921965899993 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "CK-X01~", "NAME_1": "Atiu" }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -158.078317837999919, -19.994235934999949 ], [ -158.081776495999918, -20.012790622999944 ], [ -158.115101691999911, -20.015720309999949 ], [ -158.135202602999925, -19.976495049999926 ], [ -158.078317837999919, -19.994235934999949 ] ] ], [ [ [ -158.268299933999913, -19.832614841999941 ], [ -158.281076626999919, -19.82195403399993 ], [ -158.276356574999909, -19.82350025799991 ], [ -158.268299933999913, -19.832614841999941 ] ] ], [ [ [ -158.295969204999921, -19.814548434999949 ], [ -158.293771938999924, -19.816582940999922 ], [ -158.297352667999917, -19.817315362999921 ], [ -158.295969204999921, -19.814548434999949 ] ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "CK-X02~", "NAME_1": "Aitutaki" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -158.918080206999917, -19.261163018999923 ], [ -158.950184699999909, -19.254489841999941 ], [ -158.955555792999917, -19.245293877999927 ], [ -158.918080206999917, -19.261163018999923 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "CK-X08~", "NAME_1": "Pukapuka" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -165.824533657999922, -10.881768487999921 ], [ -165.811756964999915, -10.88014088299991 ], [ -165.807687954999921, -10.881280205999929 ], [ -165.818714972999913, -10.891534112999921 ], [ -165.824533657999922, -10.881768487999921 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "CK-X10~", "NAME_1": "Manihiki" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -160.986236131999902, -10.38209400799991 ], [ -160.996408657999922, -10.371514580999929 ], [ -160.93809973899991, -10.422784112999921 ], [ -160.986236131999902, -10.38209400799991 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "CK-X09~", "NAME_1": "Rakahanga" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -161.088002081999917, -10.035088799999926 ], [ -161.070057745999918, -10.027439059999949 ], [ -161.087269660999908, -10.04461028399993 ], [ -161.088002081999917, -10.035088799999926 ] ] ] } },
|
||||
{ "type": "Feature", "properties": { "ISO": "CK-X07~", "NAME_1": "Palmerston" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -159.785104946999923, -18.830824476999908 ], [ -159.772613084999904, -18.828952731999948 ], [ -159.761992967999902, -18.83725351399994 ], [ -159.761382615999906, -18.84539153399993 ], [ -159.769683397999927, -18.834323825999945 ], [ -159.776478644999912, -18.87818775799991 ], [ -159.793609178999901, -18.887465101999908 ], [ -159.802316860999923, -18.865817966999941 ], [ -159.785104946999923, -18.830824476999908 ] ] ] } }
|
||||
{ "type": "Feature", "properties": { "ISO": "CK-X07~", "NAME_1": "Palmerston" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -159.802316860999923, -18.865817966999941 ], [ -159.772613084999904, -18.828952731999948 ], [ -159.761992967999902, -18.83725351399994 ], [ -159.761382615999906, -18.84539153399993 ], [ -159.769683397999927, -18.834323825999945 ], [ -159.776478644999912, -18.87818775799991 ], [ -159.793609178999901, -18.887465101999908 ], [ -159.802316860999923, -18.865817966999941 ] ] ] } }
|
||||
]
|
||||
}
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user