diff --git a/.env.example b/.env.example index 06febbd612..5f74c6e465 100644 --- a/.env.example +++ b/.env.example @@ -1,13 +1,3 @@ -PCC_SITE_ID= -PCC_TOKEN= - -PCC_MANAGEMENT_TOKEN= -SERVE_LOCAL= - -CONTENT_PCC_SITE_ID= -CONTENT_PCC_TOKEN= - - # Either of the following # NEXT_PUBLIC_GA_ID= # NEXT_PUBLIC_GTM_ID= diff --git a/.github/workflows/send-content-to-ingest-api.yml b/.github/workflows/send-content-to-ingest-api.yml deleted file mode 100644 index 2838a20818..0000000000 --- a/.github/workflows/send-content-to-ingest-api.yml +++ /dev/null @@ -1,56 +0,0 @@ -name: on main push - -on: - push: - branches: - - multi-content-publisher-ingest-testing - -jobs: - get-changed-files: - runs-on: ubuntu-latest - - steps: - - name: Checkout repo - uses: actions/checkout@v4 - with: - fetch-depth: 0 # Required to get full history - - - name: Get last successful commit SHA - id: last_success - run: | - last_success_sha=$(gh run list --branch=main --workflow="${{ github.workflow }}" --status=success --limit=1 --json=headSha --jq='.[0].headSha') - echo "Last successful SHA: $last_success_sha" - echo "last_success_sha=$last_success_sha" >> $GITHUB_OUTPUT - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - name: Get changed files since last successful run - run: | - mkdir -p /tmp - if [ -z "${{ steps.last_success.outputs.last_success_sha }}" ]; then - echo "No previous successful build found, listing all files" - git diff --name-only HEAD > /tmp/changed_files.txt - else - echo "Comparing ${{ steps.last_success.outputs.last_success_sha }}..HEAD" - git diff --name-only ${{ steps.last_success.outputs.last_success_sha }} HEAD > /tmp/changed_files.txt - fi - echo "Files changed:" - cat /tmp/changed_files.txt - - - name: Set up Node.js - uses: actions/setup-node@v4 - with: - node-version: "20" - - - name: Install pnpm - run: npm install -g pnpm - - - name: Install dependencies - run: pnpm install - - - name: Run your Node.js script - run: pnpm run update - env: - PCC_SITE_ID: ${{ secrets.PCC_SITE_ID }} - PCC_TOKEN: ${{ secrets.PCC_TOKEN }} - PCC_MANAGEMENT_TOKEN: ${{ secrets.PCC_MANAGEMENT_TOKEN }} diff --git a/.gitignore b/.gitignore index 490a46a826..e3fc4e5aa4 100644 --- a/.gitignore +++ b/.gitignore @@ -61,4 +61,7 @@ out /public/current-sha.txt pnpm-lock.yaml -.idea \ No newline at end of file +.idea + + +pds-toolkit-react diff --git a/active.json b/active.json deleted file mode 100644 index 5b9f0fbbab..0000000000 --- a/active.json +++ /dev/null @@ -1,4915 +0,0 @@ -[ - { - "children": [ - { - "children": [], - "id": "6ZNZhynGInWy0qSW6p6f", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "AIBwNFbzSIuVWnc8QBYS", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "HyFYdWkrVPqHSjSubqT7", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "EFdsdk1IJUNHJIEbwWtH", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "BHrphmzguy90hd5XwMXj", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "TEllQtLbYrTmBZax8Dnc", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "dwdlKFnGZFBsF6mbHzhm", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "wUMtx37Za6YRfUl4zJcr", - "isHidden": false, - "type": "article" - } - ], - "id": "AIBwNFbzSIuVWnc8QBYS", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "U2YobtqzynhZcv44ktVo", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "3wdzgyS4upDFnmaJ31PG", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "5QqyLQWP7a8ZTtXuR9TM", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "rilALmurrj5iQwcswoHc", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "0fw6ZktVybJfOp8f9NEy", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "Gx2rgxFKLw0Gmebtlry9", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "zeFioPczTIpjG3WViEES", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "7TRmkUSFF15veixT25Xc", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "QGnWOQ3AKs9eENQibQm2", - "isHidden": false, - "type": "article" - } - ], - "id": "rilALmurrj5iQwcswoHc", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [ - { - "children": [], - "id": "BlMKA3V9N0c29MHKW2SE", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "tDP97MN14pSZd0NZjoDR", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "NgiBCs4ht5POFaVR2iid", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "BhP9BbJK3GJcoRW8IUUL", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "vvCLsP4YsjOfHT3o9Z03", - "isHidden": false, - "type": "article" - } - ], - "id": "BlMKA3V9N0c29MHKW2SE", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "d2NG198DrCEa8FkAfCsM", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "NtlmaiadfolUE7AyNKiC", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "A36Kpmd3MNsPYvYffz1W", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "bdYyVFNBLuh8qhxyDZrh", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "bvOyVlwyDhq8fqVeguUV", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "VjrjqIcPZKe7o8LCZjXy", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "QAfX4fYvPI0fry7u0UWY", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "M9qh5O36xf0Ga4lU9DBH", - "isHidden": false, - "type": "article" - } - ], - "id": "bdYyVFNBLuh8qhxyDZrh", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "dsSOUsNpCbHiwrQdDkZK", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "lPLUyJcog4edU2tOPMqm", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "ft4vrOOu1zh1XTdkk9Qf", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "ywJcA3NtJoRKRqGh01Dw", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "UCTAZmC2Bg9h8qdAsIEE", - "isHidden": false, - "type": "article" - } - ], - "id": "dsSOUsNpCbHiwrQdDkZK", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "a3Rk2zX0E8x8aOCzaLoj", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "xPD0YgKLoyI1XYsCdTIv", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "WzpzXEJ2YCzHxWgKeZm4", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "tDy0YJ6zkVjsh9M0HJc8", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "PtFD9836rmVDGu6xnOT3", - "isHidden": false, - "type": "article" - } - ], - "id": "a3Rk2zX0E8x8aOCzaLoj", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "wx7m0wwWt6wVOQ8VcecZ", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "lhgTCZ7OQDsR3NECsEqN", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "1EBYAmv3dz2QGLmjFphJ", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "B77vBZOKWlkLTlX3YO6W", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "6erZowBA5kopRW11ssUU", - "isHidden": false, - "type": "article" - } - ], - "id": "wx7m0wwWt6wVOQ8VcecZ", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "5C3I14cuuiHGSXnXT95D", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "vdSJpOiGZOqkgmixhCaC", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "EdvpWw31wTpK3h1Sgr1Q", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "dBEtiLhZI7LLPV4dIZCb", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "GlSR4ko44JtMKglUh23t", - "isHidden": false, - "type": "article" - } - ], - "id": "5C3I14cuuiHGSXnXT95D", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "7AxScnrlpKqLa64dtcAc", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "ZxL7y5zYALp86xV4pzve", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "0gcZeppMKrCpCU65fBKC", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "PI19YRDRVLhrsWNPOKuq", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "fGszPgId5pty5DvO0YrM", - "isHidden": false, - "type": "article" - } - ], - "id": "7AxScnrlpKqLa64dtcAc", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "SmdmxUrae9iNU5Xaa1qS", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "e02neCSqZ22vrBTV4EFQ", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "Jugdp8G1XApYVirC2Yow", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "XeU74StRXIJIWMl2Mo2M", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "tric82GAK0hEHgOkW616", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "tuE1aXqowXiZhQPsfLkv", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "wHBuBmf3076u0WTSi644", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "jeoxuIklyNB0yXHh1TQL", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "X6IZafufWBXTkDl1qXjk", - "isHidden": false, - "type": "article" - } - ], - "id": "e02neCSqZ22vrBTV4EFQ", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "rwEjH4zutPgIZaF9qwhO", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "Mug1lsoMcZ4Uqf7f4E9h", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "qzBMUJwreFtUYrWF7sUJ", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "iH0otdeNQvho6G4IbZiE", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "ozHGXPJayPamCqCGCSd8", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "3tYXxszQvl5wkPRughrK", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "MNYjV6A0hcMWZ6U5OMpN", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "haoaoGhu8jJOebk22Obb", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "WlQcNmaquuWdUoKYSeWP", - "isHidden": false, - "type": "article" - } - ], - "id": "rwEjH4zutPgIZaF9qwhO", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "VkhN1RFAhSotKxQpZ4iY", - "isHidden": false, - "type": "article" - } - ], - "id": "BlMKA3V9N0c29MHKW2SE", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "UdJxon19E6WmFUMFhIT3", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "Hb00q7KxUwJeyBUOAQ0Y", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "7gEbadwM5DUHUsqRiKDS", - "isHidden": false, - "type": "article" - } - ], - "id": "J1siGOY1OsoWHWwvJvsu", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "lPiebQLW4VW9NvtQNdXM", - "isHidden": false, - "type": "article" - } - ], - "id": "6ZNZhynGInWy0qSW6p6f", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "guDgyyUMUI9ui1JZvLKL", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "DVtvsqAhnI9tHBEZmeFJ", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "7SKOCDsWUpbm5r8FXtB9", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "v6ww4x1JDuiwgyI51hpe", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "oCnZFr4nnwFOuxmlmz8h", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "jm5HqM04EPn1Jmaim8Ck", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "lE9UGGZtuGqOCbw2B3GY", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "CYxiGNkgyeTKFxOT7jtb", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "fBkxDDGUVrzQWqzO1R9d", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "4TixnEbAS0yXwBGiGUYI", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "81TILGaCLbu0gTYvaZvf", - "isHidden": false, - "type": "article" - } - ], - "id": "v6ww4x1JDuiwgyI51hpe", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "WaS0y82MTytRBjjQIROb", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "IPmu44eTMVUo4DbDPAER", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "OSCdtULPHKbv4HOuH6ta", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "q6yOi5mgs9Tx8xAQ56cs", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "EkMpQUnNV5gJimSJVfuQ", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "WV1ntHb74A65mEx7onLJ", - "isHidden": false, - "type": "article" - } - ], - "id": "WaS0y82MTytRBjjQIROb", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "BruJO5NfFTgnO644wsMi", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "RYudpNR9hZLKtKv7idgC", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "gJL7tiPJ3GVw3WUp2PlL", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "ubCcP6aUJVWhnCxYOnlu", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "17hJCDot1jdHbzqyJFgU", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "OlBooLB5ekNRJ1Ol7NLP", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "8QdI0uG44gpuCTQTZRns", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "s4cb4ogD0Ibot7cEWoS7", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "TuFkHaXsk2oUe8qb5o0V", - "isHidden": false, - "type": "article" - } - ], - "id": "RYudpNR9hZLKtKv7idgC", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "Nu9VCvruPTLMQLwaQNM7", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "nXVX78DtEc7UqnODQw8i", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "xJq0H2qnxCd71Fd6crh8", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "qtkmGPKJVpCbEgelBkeD", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "LaWCnwRAqQNl36JWvWkY", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "m7vQjX5djlIsCtv6wbMV", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "yZmgtqOCe6m3sao3TeYE", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "kLdlnORuRLt7QAT0t4kg", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "cQrxRCHkdfgsVTlqFMA5", - "isHidden": false, - "type": "article" - } - ], - "id": "Nu9VCvruPTLMQLwaQNM7", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "iQJtTxdLtSCH8EfSm21n", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "P665R4ZCUPiXZiZd81By", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "ZVTXjagzQRFGTIK3bMtu", - "isHidden": false, - "type": "article" - } - ], - "id": "DVtvsqAhnI9tHBEZmeFJ", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [ - { - "children": [], - "id": "OnxXdVVZukzFOv6R0TYU", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "Cxs9FvD1d1hf55p9egcT", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "TL3FYeVp16ashrDm8a5U", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "Itbdx734EVgwlOpNU2Hw", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "hiyqMQEBGQiSgVk2nd5w", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "bBLjVbyFIJOxokEvwarT", - "isHidden": false, - "type": "article" - } - ], - "id": "OnxXdVVZukzFOv6R0TYU", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "1e6NySEwZEmQZzJkvbrN", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "SCcDbe4vYUUjAkKA4nIL", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "ZMqdYOtpIrHq9kb4LCAg", - "isHidden": false, - "type": "article" - } - ], - "id": "OnxXdVVZukzFOv6R0TYU", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "V4aoLX0AduQkx3fbFcmY", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "Utfo2ME1h6Ggcvw3zOaa", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "3Tlq1kvtVWiyIIBYchf2", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "KCa7hXPfjGEZewysSj91", - "isHidden": false, - "type": "article" - } - ], - "id": "3Tlq1kvtVWiyIIBYchf2", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "mpKk3nEdai2ilUXCrbG7", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "ERphB3HGCptIl378DyUs", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "W2z7D03FAX3wazNcoi2E", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "cxZftdbG6LPOo18bAbLM", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "GmXp0eoQhkXol8gkqmGu", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "k5qp4zDXVQXAyaOwTs0U", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "1JHCklnB2GsTckaz34X9", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "MXCIIv9NmGydwGBkHw7G", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "UiQyUVNcy8wazvUF9hRo", - "isHidden": false, - "type": "article" - } - ], - "id": "mpKk3nEdai2ilUXCrbG7", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "G82NR8IWZk44K2T0EIan", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "06HmlVdD0VXBITds5Kqw", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "qbwoKAhOxD4CzZChHt0U", - "isHidden": false, - "type": "article" - } - ], - "id": "V4aoLX0AduQkx3fbFcmY", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "kYNU1oeAJzb5fHCH5bix", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "WRfakB8G6HtlUyznTFIn", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "lH3kgcyboqqNLLvgP1eJ", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "2gjjuYdm9Zj23uOVaMLl", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "MjGMwwB07umMt8mwEyXY", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "GeNNnOKderttdj8TMzY9", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "mul3DSElanPHfJCb2Cmz", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "QH4MSeg1s758QgUOWmBw", - "isHidden": false, - "type": "article" - } - ], - "id": "kYNU1oeAJzb5fHCH5bix", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "K8RvKer2YW3VRevNSmoC", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "nYrjKYgPGeT5KuL8exeA", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "R7Yyi48v7M7fXjAPrBZW", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "JWHwPqNmHfWMC5KsuIh8", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "y9g2g7o1D1HIRWJ4UNPC", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "WesnXM8zjG0FXvTuxzWy", - "isHidden": false, - "type": "article" - } - ], - "id": "K8RvKer2YW3VRevNSmoC", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "LrjCNfl7KuzmoCSaeOTQ", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "bU21UeCVbpVoGl0Q4wpI", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "q95x5D3GFEkz7yr9hQAs", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "oLMvMlHjtDzG335vbRko", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "c7HtdfOX4TFX89SG27mG", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "XevUacHCG9MVRWYhSAGW", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "VLbNCgY1a2syul8Xciai", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "ujzJNEOJSAJQLaddMgiN", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "JfkkxsnmcxaRL2tLhIMc", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "vLWpQfPBsHbn5nfKA9Tk", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "s0X5EulFemxYEkr2H6iz", - "isHidden": false, - "type": "article" - } - ], - "id": "LrjCNfl7KuzmoCSaeOTQ", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "iCTZyut1OgpeN6TyRRxd", - "isHidden": false, - "type": "article" - } - ], - "id": "guDgyyUMUI9ui1JZvLKL", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "xiwCReJt65PYQ7mzRhSa", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "Fihmgxs1pU8Ko1GGtF73", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "8DPpVQTUGmC0ltHUX5ew", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "SM3QWUH646ia7Jd9QOTI", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "R7Vro2fnt8qDH4m6baIS", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "djJLh4o3eRdopNjgTCET", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "DCCGSo4jv8rhZLbuENI1", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "gsuo4wMb1UOAMPaOozqF", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "DqHylHcPh1bMW2pec6eL", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "FV2q4tl0M0FKtAnLFAGK", - "isHidden": false, - "type": "article" - } - ], - "id": "Fihmgxs1pU8Ko1GGtF73", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "vRivS3VhmlSjxzL7WNy3", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "tGIgFWHdGYQEsZaXR7SG", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "pDzu992cUkyRW6gTWqZa", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "y14LY56HunTngbz2lZIs", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "Qk30ZciTuXiAfTenLOUO", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "m118Cx65yTtVaLBKnAy5", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "fPcp2LFCz8V0VzPYTiX2", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "iPxiCJpqMxG9nOpof8HW", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "t5padjIH5ILNkNA4TbNu", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "Onu7mO00LuiaynaoBQjN", - "isHidden": false, - "type": "article" - } - ], - "id": "vRivS3VhmlSjxzL7WNy3", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "IHsUqEYLTv31q6fw7yOO", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "KQxOTDmrKbmifVb3g6h7", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "e3z8vGL5qiEOB6NZhDAI", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "4h5sfvoNj6NlkvJGlIxg", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "IgLfJWPmj5Hr8aXa8z39", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "ywh55kE9Qy8l1gcqCnWe", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "Hf4KGAZDFXzhmFRoc2iX", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "swPDqH0yKj9luoLLXvWt", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "HMoYfnswxu3CtmAVXYyO", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "eXV3f1M1nrS0q1H73a1V", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "OAVl3gYild1G3Hzsqv4v", - "isHidden": false, - "type": "article" - } - ], - "id": "A8gGSjZug5IcGt2aSjyY", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "kUBEIHBdWpjLQmgwjsit", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "V7QiHoCKfsIQGa5PacGo", - "isHidden": false, - "type": "article" - } - ], - "id": "xiwCReJt65PYQ7mzRhSa", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "Lcd51nP0JAUR4SJZQNbN", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "y5aBD10BRA7S7xdSC5qE", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "Gb3rgJ62aciV5is6kFsL", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "9QU57KYVNCXj2EnMAToq", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "EXN8TcINRTQG73bsgLNI", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "kNaZ9drkUU6ptjUrTj5H", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "crwnuwGjmm6FUkZ9SXsR", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "EJtIM8Do5vYVRXLUFryz", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "ssO7v8VprvxkNZuzsBoH", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "zy35US8pKtMgoNIBqSwv", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "b1WsF0xLklUd59rUqXmK", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "bnX5d2zkmfbB91xVuYxj", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "LXGzn0AZlbL6nytPBRvd", - "isHidden": false, - "type": "article" - } - ], - "id": "kNaZ9drkUU6ptjUrTj5H", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "qWSDliyAHIhNUTEUY2aS", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "4nKAAiDbDecErzPvNMde", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "PeenNg91ITNxRS0CCBdo", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "PmXtAY03e3X4YHNBGI1L", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "62QAJGuTsq4t9mmAxFqn", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "QGSYfjG1MaLNxwH5ZtAd", - "isHidden": false, - "type": "article" - } - ], - "id": "qWSDliyAHIhNUTEUY2aS", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "wE8jgqu3IVeg67BZgFLZ", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "H5sbaj9tojafgeyrS9xL", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "0ycqTs4KrrnzvfMD6znO", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "S17gc4yEtPHZkW7ukYQf", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "0HEg6E52bFA52nTMOHYY", - "isHidden": false, - "type": "article" - } - ], - "id": "wE8jgqu3IVeg67BZgFLZ", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "WN6eKvPiwg1DowkEUEiV", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "aBFeRz8MREp5lyeLjxoP", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "fRepyjXWfp9Jl6jdLTSd", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "U1l4GKcnnw0OYOitsF51", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "ngzpK8nuE4uDyB0Fl2KN", - "isHidden": false, - "type": "article" - } - ], - "id": "Ps4pE3gZlUbgCuQbeMjp", - "isHidden": false, - "type": "article" - } - ], - "id": "y5aBD10BRA7S7xdSC5qE", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [ - { - "children": [], - "id": "cgYsxNJLnznUeQhTKoib", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "G0x9LrIeJiRrPvrmp0rG", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "xFnn2HB08UkH8de9Tteu", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "YKo4oobXjgl81fQedz2v", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "nEeMl2wD7dgOv06s9Xpu", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "9DTTnVPLgWn1A0jWbKJH", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "y41b3D24ud7fcQvkuesu", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "KDbuGJX62Gh2xNofnWRe", - "isHidden": false, - "type": "article" - } - ], - "id": "Z1UZH4KrKhcHbd0s43YP", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "fGk9j4Qm0eSwLfRIjsbf", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "nc4qXQB2quVPB703xSRB", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "DzgVi7fLVzx9VsM5E3Bc", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "cX1fT0GLX1lgOtwmsBvD", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "d1c1tEownw9K7XnbJwKf", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "Dgm3OinhPwOJsbeBzoqG", - "isHidden": false, - "type": "article" - } - ], - "id": "fGk9j4Qm0eSwLfRIjsbf", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "7x5CARfJ50NnRGmtH1OF", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "i0LRvFf7tX0byHiqzt6c", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "kp9AVlkWCpIyzGA9bgv5", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "xU4zOQlIc74rnY9dtuJ3", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "UEpmXc58lKJ7Ze26O2Nw", - "isHidden": false, - "type": "article" - } - ], - "id": "7x5CARfJ50NnRGmtH1OF", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "0uVhjxCDrSd4wDdg5ABG", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "M5xGQgfbYpra9dH6YCeX", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "NhwKkMK8Dm5O0R6FNIc0", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "TKDIpobATuuZ3ZQQOWLK", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "D2ALKaL1SYGJ3AGnVj3p", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "K4IEkCBG7H1OIKqgDKdg", - "isHidden": false, - "type": "article" - } - ], - "id": "0uVhjxCDrSd4wDdg5ABG", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "qTR8DnM0n9jautcUjV9d", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "VY8dLNp9Cw1fqn7beEl2", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "kua41nd4OjjeeMioNbZo", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "m92xKFpppYfmKl3qCRXH", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "6OrM3phLsYDzx2ZhnTTY", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "2UPMEBrpaHy0HyMz8TtP", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "WwK84eMDFX1H8aikUdc6", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "ERvRbAndqXvoYydR3IFz", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "iEMKEDOX2r5lzbmK4obM", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "ib0u3Q3cYCsvRxgmsyc2", - "isHidden": false, - "type": "article" - } - ], - "id": "VY8dLNp9Cw1fqn7beEl2", - "isHidden": false, - "type": "article" - } - ], - "id": "qTR8DnM0n9jautcUjV9d", - "isHidden": false, - "type": "article" - } - ], - "id": "MqxzRGsa84iJqLSgfCww", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "CCq8RqnJgScqXoLZ32X5", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "BHCsGKZOgYkR7RkCcOLi", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "Vi4rrvSo4EHmuE3DvzQa", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "uky4dKGVjU6vw4vf8xmf", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "IKSMC5XkwYPMWJN8svx8", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "DZm93YPVyd0iTcdYZju7", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "90TDSnTZefZMIoAiPxlx", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "Dnl9zA75PICfLW8w4UzG", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "Ha3lLKUYkV8z2KlfDgPQ", - "isHidden": false, - "type": "article" - } - ], - "id": "CCq8RqnJgScqXoLZ32X5", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [ - { - "children": [], - "id": "oj65tj5ooZoYBZ7LOCxR", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "9Bslg2dvTvBMvlZxazK8", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "EMpevYGtzSiQd6tArYbE", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "DZYPh7TkUK6AakSgPijv", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "EJgkyRjP8sawMcwI3iL0", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "s4D0xD3XOYeIJWZUDi5J", - "isHidden": false, - "type": "article" - } - ], - "id": "oj65tj5ooZoYBZ7LOCxR", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "MUk3u2ANonFboe9RWraj", - "isHidden": false, - "type": "article" - } - ], - "id": "oj65tj5ooZoYBZ7LOCxR", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "QrZWeXm5pewYJbI9SWJJ", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "APorvE18sh5M0iW7OiOi", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "z3XRlBmSrSfpticSuGvE", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "ouKlDnJKcibz9tJSnISc", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "zeOkTTaBSIcRtAC3uOLr", - "isHidden": false, - "type": "article" - } - ], - "id": "APorvE18sh5M0iW7OiOi", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "qu81HU71NtvtrTJBRdVD", - "isHidden": false, - "type": "article" - } - ], - "id": "QrZWeXm5pewYJbI9SWJJ", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "zvUe1sLhP62w1WwhMly8", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "QPWzxcNgmNQIMKMHax2b", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "GuxR84Lx9zTjrXTxIgAg", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "0DQhKP006V2An5abza3Q", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "nMDhv7DNWofxYuALRaww", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "9oVPuSz2TAYTZiK6bayU", - "isHidden": false, - "type": "article" - } - ], - "id": "zvUe1sLhP62w1WwhMly8", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "ktUKcDGk656fDVjZF1YW", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "ulKBVt0GjhUSG7qBAG1p", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "zY55fmhRQT8sUuZybak0", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "lE5L8f4QE50jjgjs1V60", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "J7RiN52vrOsHil8N5FMs", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "ZTZzUJCKJwXlM3wHubkB", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "9dGFZVQcmaAXYB7jeGbZ", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "swCnZditTPwUu5tFnnyM", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "Bon5iKI2sU0QSuwV76dN", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "owj8jx3RCtR41oLeSbGi", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "Png15Ph299d9gyk5aHcr", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "AISRmQd10YXu0Uah6fnT", - "isHidden": false, - "type": "article" - } - ], - "id": "ulKBVt0GjhUSG7qBAG1p", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "OUvzajNW2astOdMjnARx", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "de6PiDkJ3AEOQkXYs5dl", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "SSpOQWyx9ETRfji9Nv6p", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "Jfkk1FcCzhGLV9CogqjD", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "3mbIhRrytPkj8nJTHfm7", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "R2afxHCdXkJjQTvONtJG", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "CvbYQR8QclxC1YBSBFDm", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "eDFbrJOSRrIpVWKeVNUd", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "4XBcIJYWNIbrbNI1dK5v", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "DMvSmoxNf3RspIG7Alf8", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "v4EkvsaaDOoaSlsHgCC2", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "8hYT2CTQxBHA0fGKppaJ", - "isHidden": false, - "type": "article" - } - ], - "id": "de6PiDkJ3AEOQkXYs5dl", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "jLDDw3rErZvrpHk8dwKB", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "kALnML6J5JpyCcqxEYek", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "yNYjs4toj4liQebAcASo", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "vCAqm1MTfBcfl3OgcUmv", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "i9opvZvxxduVx2mRfQvd", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "SGPsZzTtc5Oy3O7JMElD", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "WDchVD7i6NmB1HzmlpKq", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "S8OUD6cYgJBvDle0BJe5", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "pcguPoxrczaAsHKSMgK0", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "G9MqGK7UrH5gFQXVUwra", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "98j7upKWW5400IiEudM9", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "uwsHyvJMdXcstJICsv7K", - "isHidden": false, - "type": "article" - } - ], - "id": "jLDDw3rErZvrpHk8dwKB", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "Ds0qGWak7ACDcyUYm02Z", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "D5ezorw2fRP4yRpwqTgU", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "rPwq6NvsrqeVEOxWMGwZ", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "PmYLn5oKeCne8Syqyz8x", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "ep3kyTgjULzojvQsBWwa", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "1cZAhuxN2vpoZjU93LRI", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "5ocvffETEhTXUZQ2zUd2", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "NkwEmEODLtp6o3MVFjed", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "t8fO2sVIsv8ycpLexOmN", - "isHidden": false, - "type": "article" - } - ], - "id": "Ds0qGWak7ACDcyUYm02Z", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "5UsEtmuhCR0SwLBFgs0S", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "sdOn5ngtwayoRZjXvhr5", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "3O5UWMMyVwxqVbOpsKKU", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "u2sSO36QVlpfWd80kD1S", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "vot1dJVwDErY1mdvjd1M", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "Ll53rHTHcV7p3XDMChoq", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "YeTmopP3cDFOCJaNsg1x", - "isHidden": false, - "type": "article" - } - ], - "id": "5UsEtmuhCR0SwLBFgs0S", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "BQhATioccNUuzLrWiUv2", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "fKHKQnwvOrDcIEAqDiBr", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "B5jiwPas0lEusCgRNggj", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "KgkJPo8TZOnf4rGveWqw", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "DEuztGcX4ldXc50a8ilj", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "6nn7J7qftJLadMbb0ZA3", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "xUYwoJq6yvTQn5DGasZb", - "isHidden": false, - "type": "article" - } - ], - "id": "BQhATioccNUuzLrWiUv2", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "v3FwQAlcn693pAjEYOg8", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "PidAkz167o59PF3dRsGu", - "isHidden": false, - "type": "article" - } - ], - "id": "OUvzajNW2astOdMjnARx", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [ - { - "children": [], - "id": "ooQSbVBgmegu2sUrFNnM", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "BuLov9oQGD7Hy1gCKXOk", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "QhsezyqFmdXWIMYsY7PD", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "DuIC2WTlpGf1BoXawfZU", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "G3p1oJM4rbN8KcBdigSS", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "iTVz29UttIRjTZUt3Xhv", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "9ZKdGxqAO4oGqC2CAaTR", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "v8xUEpBzh6yrqZbG83r8", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "UDyKHy16zEN1gUQgPFMx", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "xmFSyTYir95iy4q7JWiv", - "isHidden": false, - "type": "article" - } - ], - "id": "ooQSbVBgmegu2sUrFNnM", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "QwS029jVrUsoB3haWqRj", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "jYWoKrPwoLca4k6gZmcw", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "aAWtDs7Qx19xnfLdiHav", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "bQ0RMv9ocsMcE6fsxBY7", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "FhFSFZDDUtrgH47dKUj0", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "17aKtDZVtbRzI7DqVUR0", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "1cDi0LfVATRcExo77epZ", - "isHidden": false, - "type": "article" - } - ], - "id": "QwS029jVrUsoB3haWqRj", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "OGXX9EAKiTNx3SWJANOV", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "V0BKETipMIIgIEUWjJQh", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "ZiYOdISco6oVkIx8r5dD", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "pMIUipt7ohuSD3aH9lRm", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "iDtEZ8nfwRoo52Kbelaa", - "isHidden": false, - "type": "article" - } - ], - "id": "OGXX9EAKiTNx3SWJANOV", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "8xsLhJGvBxzA7zZuW8jd", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "hFg4oTmfJattcLvUdeqM", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "Rbch6iM9uWq9y8EVEIdI", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "5qGZWSkpUl27nu54kJww", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "WZHJwm54gDoMN4t07aLz", - "isHidden": false, - "type": "article" - } - ], - "id": "8xsLhJGvBxzA7zZuW8jd", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "uPGYdMLwfMicOD5Y5zNi", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "JId7Mp8yPkD44hgMIm1A", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "n7sQpmFskzyvHgCR6LPr", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "l6Z9i5P3fwSXJkYcAjzb", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "1UnDOzJ8PRxb8dWyafEk", - "isHidden": false, - "type": "article" - } - ], - "id": "uPGYdMLwfMicOD5Y5zNi", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "TWYIanrQ9eH6ndpmXHjj", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "2e18RY2YrjVPWvAQ0ABe", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "OthPOBvNbJhLSakIEG0b", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "Wf30iAd4wJ3IBYgmEX89", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "IOXNYML8sgTIZ8KC1tSr", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "5q9x8VMtuVsxkU2R8Riw", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "uqRsb2XTa1zyssB16fwY", - "isHidden": false, - "type": "article" - } - ], - "id": "TWYIanrQ9eH6ndpmXHjj", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "0kPuGOCRouag86sY6S5K", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "VMlgTruQoNokQbjgSpBL", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "amjHh01L81TGDviYvhWF", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "UEttiivoP80S8Rbnw0WJ", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "UTnogQHKP04Aq8q49NLl", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "YhmTkKcrEwLV9uhWAKjM", - "isHidden": false, - "type": "article" - } - ], - "id": "0kPuGOCRouag86sY6S5K", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "xIr7CvUxzIjxT7m3YRnK", - "isHidden": false, - "type": "article" - } - ], - "id": "ILA5WvOpjLoRp8xYYnad", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "ZsFhTBEZ3cpk77qN8OtD", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "h7ZggrHuwkNL89c9rpeK", - "isHidden": false, - "type": "article" - } - ], - "id": "Lcd51nP0JAUR4SJZQNbN", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [ - { - "children": [ - { - "children": [], - "id": "sn0WClL2i4bRhscx2fVb", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "RmL12MrgCYYclH2jnBsJ", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "kcWUGLEBRbtM0ALtMoQ6", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "ul5D4b5noS4DWjGfyJoH", - "isHidden": false, - "type": "article" - } - ], - "id": "sn0WClL2i4bRhscx2fVb", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "Nl3nJQzHlPUGbxWiR3LU", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "kEgBQKJhqdSAQuEFhevG", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "NpmJ7i3PEptUXS8qOcGz", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "oe4SgUAqiBG5pzKIb1MV", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "VqyL372mgvIcwxOXiZ2l", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "QLZoq2smerrzlgLeMcXe", - "isHidden": false, - "type": "article" - } - ], - "id": "Nl3nJQzHlPUGbxWiR3LU", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "S1QOqRUq19u1sLmvKVbg", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "0cYJ2Ivb9anCANbjhrh3", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "d7wzuMK7HFdlnQZQMIcb", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "5aK7wpp1yShRiPB2ppWQ", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "KeBrEFQU6M3UDW2o2tAV", - "isHidden": false, - "type": "article" - } - ], - "id": "S1QOqRUq19u1sLmvKVbg", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "MiIBxGUy4D5WuAYZt4m5", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "JRxRxs42MLGb2TdJeWx2", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "Pv7Z5MzMPFaIqMM19EUl", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "HtMqMn1oEkJAxdT4bAda", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "LovFYwXOQTXwe8KkhYIn", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "Q4wWvMxuaVHZKRbjucTT", - "isHidden": false, - "type": "article" - } - ], - "id": "MiIBxGUy4D5WuAYZt4m5", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "zLGMEoaqWjePckB505Ir", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "rIo7YwHyPVWVn5mcanq6", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "R2Us9gj90N2n146RbSIZ", - "isHidden": false, - "type": "article" - } - ], - "id": "zLGMEoaqWjePckB505Ir", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "CAa5oLlv2Jxx5rZrJhu6", - "isHidden": false, - "type": "article" - } - ], - "id": "DyD7lPsK8piP1nNjvNJw", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [ - { - "children": [], - "id": "3slWwbXnLPFEhqPvuqoZ", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "JPKwDoPAUvuPdgD0mj3E", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "gsUuXRkUgCxG0QrnB5Tq", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "qUg9PkL39Vv516mIiCvs", - "isHidden": false, - "type": "article" - } - ], - "id": "3slWwbXnLPFEhqPvuqoZ", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "yeDyCKEuwwtTX9qYf6Yz", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "YvT2MT5VfDaQUQocspDp", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "rkD92GTX6HsGcu8HnX63", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "lgASdNGLl3AP4dTF27yI", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "kjIu3ythel3AusZPKwDA", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "YzDgxr8QTfAcM1x86ke4", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "vBU4k9G0neuMXWMwZf9h", - "isHidden": false, - "type": "article" - } - ], - "id": "YvT2MT5VfDaQUQocspDp", - "isHidden": false, - "type": "article" - } - ], - "id": "3slWwbXnLPFEhqPvuqoZ", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [ - { - "children": [], - "id": "sWKRZDw4EyrL8O35btZT", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "h1FMrZQHC8Gldzq7R3Wq", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "vIqniQLtAQwc3C6I7tuq", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "W2zIgCqJVb5afYqB0wK5", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "Wn3UsXVCAIudSmzGRqg4", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "ISAFC8CZwTwsNhXp3XzM", - "isHidden": false, - "type": "article" - } - ], - "id": "sWKRZDw4EyrL8O35btZT", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "jMIWRYBN2SBI9Qt1WyjE", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "wagt4XnpIw9bcM24orgT", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "GJEJ8QTPGeFz1zBJmSTn", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "Qn5reeYowdmzAlNKrYw6", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "6DDAi0orhmmZiwZpMQLD", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "KajZjyMUSvCRzv5M3g8S", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "83JmIQYQ3vCogYeA52H4", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "6eswpfgIDZS7qEZoQhdc", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "lUhF2ay13kGdTLaJ3koo", - "isHidden": false, - "type": "article" - } - ], - "id": "jMIWRYBN2SBI9Qt1WyjE", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "5x2Dz1NjhzXbQkoZqujl", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "MWdFfAKz1x9nvwSkzYJu", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "LORkqr8UBsEJ5W6g6xwH", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "TcmaHrXgbvZp0jFG7RV7", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "NX8yWtaXsD1aJqQX5ovG", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "dIwuZo5DNZy4jCMScrBe", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "zRhaudbeiL4uu2gFEIsa", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "qnbx9djEurh2V9avZibp", - "isHidden": false, - "type": "article" - } - ], - "id": "5x2Dz1NjhzXbQkoZqujl", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "noFzQNvJMQXYXQuc8udY", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "zh3cnJ6zugYhI5cC41D0", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "OlhhxDZ383kRu2EikBZr", - "isHidden": false, - "type": "article" - } - ], - "id": "noFzQNvJMQXYXQuc8udY", - "isHidden": false, - "type": "article" - } - ], - "id": "sWKRZDw4EyrL8O35btZT", - "isHidden": false, - "type": "article" - } - ], - "id": "DyD7lPsK8piP1nNjvNJw", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [ - { - "children": [], - "id": "dkNaDbo7hbW2rhq6UhH8", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "FspD8ai0HbUvjggdZiD3", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "tVvsPiw7wFAkR6nB68HD", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "Vm6ewKsUoi9Ao5w5lU2t", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "EEVrSEtFSXQCUpWztBwH", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "Fva58i72VNpYWNeVr3bR", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "hZRDo74ezacHRigKGxat", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "6vvnuneJwVgx769v1uRK", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "cvnS9yELQ7s0aKELaFVZ", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "U5hlcD42G33YlUKhXoOS", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "Ocy7KJ1P96bN4CxWyJbD", - "isHidden": false, - "type": "article" - } - ], - "id": "uARdIeyprtD8ZqVSyvPt", - "isHidden": false, - "type": "article" - } - ], - "id": "dkNaDbo7hbW2rhq6UhH8", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "ZkxOnOpqZiRV8IzoxFv8", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "t5lOENbYNPXCArnqzNCo", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "itvIz6JTaF7fL1cY6t07", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "ItgcqUUsqmT4XlF76i5A", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "C0BsKx7aKqSYOUWLo054", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "lhxikNQdv40ll38Xsyw5", - "isHidden": false, - "type": "article" - } - ], - "id": "ZkxOnOpqZiRV8IzoxFv8", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "Rq7ksyQoyKhLGjRa7BC0", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "xSRJpiizw3soXlhuFW6E", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "VXnnflW9nmk7oxs7OXy8", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "SrgWGvaduhLeBaqm7UH8", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "yAVDsBA9Mg3a60cWKycl", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "yGeG0hcVhneH5lWr7dvW", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "s4i2rJFdKlryy8PBR8KM", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "9joU4OAcP1WjD1ehPyuQ", - "isHidden": false, - "type": "article" - } - ], - "id": "xSRJpiizw3soXlhuFW6E", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "SsugrxjnMPxlokghkK5k", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "2QeYURqoDXrIPOwhJCed", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "ZoHU1zBJQ247afxpdGfz", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "WtIp6DJhDyr3nRHxccHz", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "DR4BmKH8oSick2XIpI8M", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "9XY7rpKAGXvnxXfDQmI1", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "HftLDwd2Fi3Tsh7LcpLM", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "ICMkhqin7eaHsTbE7QSj", - "isHidden": false, - "type": "article" - } - ], - "id": "SsugrxjnMPxlokghkK5k", - "isHidden": false, - "type": "article" - } - ], - "id": "dkNaDbo7hbW2rhq6UhH8", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "FwxPRSdcTDETx9TwjFgc", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "lHncJVyS8TBP9qPVtNfy", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "XQ3D4NEYfsKYzLn6eZav", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "HohiRIxO2cPKCaZjDc2k", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "azZwoe6uJnrdNHm0eeBJ", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "Dt6X90KvmhkcIdl6x7wL", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "dXQcoNTTenM57phJFXIY", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "OvcwtxqGA3pBrogiTanu", - "isHidden": false, - "type": "article" - } - ], - "id": "lHncJVyS8TBP9qPVtNfy", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "wmNoBcHehYKkUhU7kfOZ", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "uIS8lwOzndtedMmAa7pI", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "hBGdBrNuNoS26VVwhcE7", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "wFOLhzxBGzQa5biqwa91", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "WjopIUMqzA470YHe3e8l", - "isHidden": false, - "type": "article" - } - ], - "id": "uIS8lwOzndtedMmAa7pI", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "BudMuzldV7t5hc76eHfS", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "YKIMRJosAtJIOs6fCLEB", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "OZPWnRPHbETJ63d8ivfp", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "xgnkec0rGSYPEBSogPgD", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "GulGxhMa3laY9WE1jiNC", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "pB6tN8Q3UlGOl3TRLNCc", - "isHidden": false, - "type": "article" - } - ], - "id": "BudMuzldV7t5hc76eHfS", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "ZCgqQgTQfUHPaa9Yz9CK", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "yyBYadEoyFoQjR1ViFCB", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "FkdnXEUK1gzpPOUmpC3c", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "8jfYXhTmT2ybX7NyvBmv", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "E3GhwFMgoIUk5JNV9chk", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "5a3VQ5hUMsEsc4AQ6qKu", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "bwTDERfX1VijVddM1xJx", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "PWflCvywC06Mvet2n86B", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "fxzFMhWTwNk5Jr4zpXB0", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "hcVGaxQ4tvYPeNkYSm5v", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "qvjYGaWZcgOX2lpDqR0n", - "isHidden": false, - "type": "article" - } - ], - "id": "E3GhwFMgoIUk5JNV9chk", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "KPvHZeyFgmZ5Ol0x5feh", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "dmAcalxXTaVY5WOLQAdL", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "CV7G2mQeGfiDwYhJ48a6", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "ZKAvncNvuRWHi5XEzvAv", - "isHidden": false, - "type": "article" - } - ], - "id": "ZCgqQgTQfUHPaa9Yz9CK", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "BWHM8rRssV6evz5AlTiB", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "tKqsxmUYSGOxbyhPLkGs", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "RqY5NYAeE2oS2zfuxR3z", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "HYpCKM5zqBXPs3LrjSKZ", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "5PtrMfLX6ZJj8tDnI5p3", - "isHidden": false, - "type": "article" - } - ], - "id": "HYpCKM5zqBXPs3LrjSKZ", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "BhFm7uJsbEPlvT2iCJYd", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "fgzQOLvG7mXdBgustZnd", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "2CiiQ4JwsaY2u04kXln1", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "x6J1r9xziBT4py8iVh6z", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "bCc5s5LQ6VbKcP4yHcQR", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "zsRs9adOr2p7PM7VQ9Xz", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "hUmfOa2jpsi3rr0QzLzs", - "isHidden": false, - "type": "article" - } - ], - "id": "BhFm7uJsbEPlvT2iCJYd", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "DUrwsO7pisFiszhISfn0", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "Zd4ljumJnxsXJ8qg42X0", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "nPXXO2hawi8eVtqJmUpJ", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "1HvcW5D5qncdV86nDEPS", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "RixgswqDajhM7xhADARx", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "9GADFIg16B1gFxQcBn64", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "FQH4hXn6a7JmiqeM5Ows", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "qAxZf3ohlFTjI6B4gjY5", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "qIaxgy7dCJR1hkbPA9YR", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "e3fi0oRCbY0EMROfhC63", - "isHidden": false, - "type": "article" - } - ], - "id": "DUrwsO7pisFiszhISfn0", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "jUwQXLLI1nAwj3jMlIcP", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "gcpDo7HZKuplGOLjWT5Y", - "isHidden": false, - "type": "article" - } - ], - "id": "jUwQXLLI1nAwj3jMlIcP", - "isHidden": false, - "type": "article" - } - ], - "id": "BWHM8rRssV6evz5AlTiB", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "1FEgWCpRIvYkhOkx58TN", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "xR1AhNgh352BlKA3oeuB", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "8kKhI1f4LCrPzBgF91OE", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "N9fb6OarVlFSMOUrrltF", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "eO8nBjEnMMkq02PDDfta", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "2gXE6eNGmXUCdzaNhtsr", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "yP6rRvNZslbgSKB4m8el", - "isHidden": false, - "type": "article" - } - ], - "id": "xR1AhNgh352BlKA3oeuB", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "PUSWXTEHMfURmpc7z5fA", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "KoEf4uxKA7s6O9cp3LKD", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "k4kSNTF6u5VqjgqgWV75", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "qD3wgzVRwkxLzazh1rk3", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "mA4cr66Hok2cPqIvntyU", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "n6oVegyk1nNJ9bxR3js8", - "isHidden": false, - "type": "article" - } - ], - "id": "PUSWXTEHMfURmpc7z5fA", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "cSMzWQnkDH4c7dQHNeQg", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "Bbn6Qynif0MHPrd5zhMx", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "JfxxXyB7zwJkW2kbXjJY", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "rLZuoYaJYbFEJZc01RFg", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "F8JKxTfad0h0Q0QpAdQK", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "2KLmaTaYYC2ZKp1mxOii", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "XnbMdey4Gq7hoAWfSVSN", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "t3qwuT0zwJ2JTIZbJwFh", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "3qjsO9mwnKwDTXbKrEQM", - "isHidden": false, - "type": "article" - } - ], - "id": "cSMzWQnkDH4c7dQHNeQg", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "uudH25ji3xVMJ9SnYxRh", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "YG6neFfh5laFnZ0GMRsp", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "mpEXDI21xLwF062JqET4", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "ANwuqrAGCpyW7qWOUgI6", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "zhyzhhQ1W29tttJl7JUx", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "0EpsGtaEb1oCcxnfizjA", - "isHidden": false, - "type": "article" - } - ], - "id": "uudH25ji3xVMJ9SnYxRh", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "sG1zrZxJLB5V39GmmQV4", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "qZivOqw0GsEVy64PQaO3", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "UeIiGh1aixdeR6mBhjBM", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "CcYnicJZUJCpEEdbzVSE", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "HdWqKoE16h4upD5pYBZt", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "VdWDD2E2vsUPsOuztJMx", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "E4ZirjQ1fz59wMmmd5ZN", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "VXCuXleYajKsI5rL3D6f", - "isHidden": false, - "type": "article" - } - ], - "id": "sG1zrZxJLB5V39GmmQV4", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "boQV3pmCAkAcUtGaFen9", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "5Zs3SqpqsuxjB4isxnK2", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "xQudRJinxXCLdvJ4lMZ8", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "ujQQo8KjkKYIpqwEX3EH", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "q7Hz1aEkXOzgLNajMc0h", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "m9OFL8CvH5qmgvkYTFnm", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "uvzkHAsQDCldswYN8K53", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "5TeiKoPtm1YvQ0ahgho6", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "xEZgDoP3Am3kAsOfpM1j", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "HLSp2ZsTnvTW6UsC6khg", - "isHidden": false, - "type": "article" - } - ], - "id": "boQV3pmCAkAcUtGaFen9", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "QGD4o0d4sqGH93zsSd5Z", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "hGSkeuZ3a9B9rgN6PmsU", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "CjRstf46XoYuP5k2ic6L", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "lP9U8qB6vI0a0JHzT8Jn", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "UMFbPKAPa2EJ2ZXGeab6", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "0tZ2WTdQg3v3Jx1jdRlo", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "QqpN4D1ubpDTqvj1Wwkb", - "isHidden": false, - "type": "article" - } - ], - "id": "QGD4o0d4sqGH93zsSd5Z", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "goOfYBSHWcyZHpbuDRuv", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "iJY2yHzQI8GawEBVUok6", - "isHidden": false, - "type": "article" - } - ], - "id": "1FEgWCpRIvYkhOkx58TN", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "9bIGnLRFRl3m3E6Fo5by", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "GzncGURL6yc5JrEmvGwu", - "isHidden": false, - "type": "article" - } - ], - "id": "FwxPRSdcTDETx9TwjFgc", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "OUoOb4VajmcsSpfG53sh", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "Rzisbds4MqCrq9LieSMM", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "MdAiUTaRujaiHGyl9hNm", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "8nU25nA2qoFNb0peKSYY", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "5pJcs9hmSk8cbB2mFbdM", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "66rhdBwOEeqpOdz42JPj", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "veopB625eP1W1zP9CzJq", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "zDMCV2IUs4HtyfeSrTQh", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "c7N1NAkHQhuG043PaqB5", - "isHidden": false, - "type": "article" - } - ], - "id": "Rzisbds4MqCrq9LieSMM", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "IBzv3Ipy8JG2n8bSfKCY", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "oA8EuN3sfh80d1KdbJsT", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "pqYbwcluO9VsulnOwa1p", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "DVIdA3236Zu2T0BqoQ2D", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "B5nz4opGV06Uk3bKj5bu", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "stBRnH74DdeDbqmZu49a", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "Sj6GOKJcCKYY4IFIxJ0l", - "isHidden": false, - "type": "article" - } - ], - "id": "IBzv3Ipy8JG2n8bSfKCY", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "XAlkgIxGOz2G5RMoVe8k", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "WBzDn4br5chhlxJWfK9z", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "LY75gBHWH9gs884pEm9S", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "pp6A0CqAzu9KUh4ihHtH", - "isHidden": false, - "type": "article" - } - ], - "id": "OUoOb4VajmcsSpfG53sh", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "vgrGM4ov0tJfd8oUUmPL", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "ctvTsZL2HkafhfKhcNgc", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "4ocRcv1zea6syLpp4eXC", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "dbobTWqv6FMhoJ2pXr5I", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "vAN1dutO101H88dcoPXX", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "RroEPKZsc32NpmZQuovE", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "RYU9DFp7ykO5WSfBfLRY", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "ABqOkzniaQbJ5JMGF12z", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "yBaVjofESltNCHwu4Tof", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "0lIvi1jZMQDxwJSJjEsz", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "NGOmuuFEh3MiJJwcKuQ0", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "tFsIbrFd2GwUOsrE29zp", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "FLALDzrBbNpMnriqtKVJ", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "ErNhZuS2EAogmaVI5eas", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "pTa53QRU7eQSkpjuRbVC", - "isHidden": false, - "type": "article" - } - ], - "id": "vAN1dutO101H88dcoPXX", - "isHidden": false, - "type": "article" - } - ], - "id": "ctvTsZL2HkafhfKhcNgc", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [ - { - "children": [], - "id": "0aINPpzFuvsQnjqAHURR", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "YNPl7942L5RoZKTHabmn", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "gwW1vgkZ9kB9S0gFXHCQ", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "MbW0lD6O3cPV4t5Hs4j1", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "kT5jCFsudbDfqItpRzZK", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "mEwJ0SvcaXSnlNQkzL09", - "isHidden": false, - "type": "article" - } - ], - "id": "0aINPpzFuvsQnjqAHURR", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "ma1bCwMkgbRV4YGRKMse", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "4Jn1lORYUSTgz2ODuR26", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "gVuBhG0JweeISF0vJO4E", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "XxJ8NLffsev1KXE2Pwma", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "TN5RUI0uJRv1LqzcePGE", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "3P7sABkvezDb531oJAJP", - "isHidden": false, - "type": "article" - } - ], - "id": "ma1bCwMkgbRV4YGRKMse", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "AikYYA314fegLSjk9uby", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "q9n3d1Wp7B8DnV47LXzc", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "n4tHuk7tZVF0S5HpE48B", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "i4bOYlhQH0IDrKd8vkKw", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "Ie1KPlIXbrOOKwjznJGp", - "isHidden": false, - "type": "article" - } - ], - "id": "AikYYA314fegLSjk9uby", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "MWP568zORdT4Y0IAaqAc", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "s63OuqRXizYZE11TZqMD", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "5IBXdSSGUrpN4QY0verZ", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "7X0msVDcl8h9dgeKY1pT", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "AJYsPArMX3ScnFOR13xN", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "Djc66hOQTLgX0zJqouaY", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "wUteyTbZoJyeWxguTsLF", - "isHidden": false, - "type": "article" - } - ], - "id": "0aINPpzFuvsQnjqAHURR", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "mYNJbLBooj1rCfSCBBZU", - "isHidden": false, - "type": "article" - } - ], - "id": "vgrGM4ov0tJfd8oUUmPL", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "f88guAbjBmFiMSyEABTs", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "f3hTyTLVGgqTukWYu71f", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "GEWSHfows5rgJDj8WlcM", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "Xml0uocVx8nXZ6k97GQy", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "Vfm06YSV4SQrTZKOwwmq", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "SC8OR09fTdra5Tn58oyR", - "isHidden": false, - "type": "article" - } - ], - "id": "f3hTyTLVGgqTukWYu71f", - "isHidden": false, - "type": "article" - }, - { - "children": [ - { - "children": [], - "id": "qs8rFxfhlZsPT5WMyXHD", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "bdFkvtQ956qUC1yD1sR6", - "isHidden": false, - "type": "article" - }, - { - "children": [], - "id": "rvQsgSdnSzfa7ivwJ9QL", - "isHidden": false, - "type": "article" - } - ], - "id": "jzFQtvgiyhWYxH90xE4S", - "isHidden": false, - "type": "article" - } - ], - "id": "f88guAbjBmFiMSyEABTs", - "isHidden": false, - "type": "article" - } -] diff --git a/next-env.d.ts b/next-env.d.ts index 1b3be0840f..c4b7818fbb 100644 --- a/next-env.d.ts +++ b/next-env.d.ts @@ -1,5 +1,6 @@ /// /// +import "./.next/dev/types/routes.d.ts"; // NOTE: This file should not be edited // see https://nextjs.org/docs/app/api-reference/config/typescript for more information. diff --git a/next.config.js b/next.config.js index 87e244cb68..64c6e4ccf6 100644 --- a/next.config.js +++ b/next.config.js @@ -6,33 +6,11 @@ require("dotenv").config({ path: path.resolve(process.cwd(), ".env.development.local"), }); -function ensureEnvVariable(name) { - if (process.env[name] == null) { - if (process.env.NODE_ENV === "development") { - console.error( - `No ${name} found.\nSee the README.md for information on setting this variable locally.` - ); - } else if (process.env.NODE_ENV === "production") { - console.warn( - `No ${name} environment variable found.\nLink to your PCC Instance or set the ${name} environment variable in the settings tab in the dashboard\nIf your site does not require a backend to build, remove this check from the next.config.js.` - ); - } - } -} - -if (process.env.IS_CICD !== "true") { - ensureEnvVariable("PCC_SITE_ID"); - ensureEnvVariable("PCC_TOKEN"); -} - /** @type {import('next').NextConfig} */ const nextConfig = { reactStrictMode: true, + turbopack: {}, // Allow Turbopack builds (Next.js 16 default) output: "standalone", - env: { - NEXT_PUBLIC_PCC_SITE_ID: process.env.PCC_SITE_ID, - NEXT_PUBLIC_PCC_HOST: process.env.PCC_HOST, - }, images: { remotePatterns: [ { diff --git a/package-lock.json b/package-lock.json index 345417dbdd..952da6ef7d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,10 +10,8 @@ "dependencies": { "@adobe/mdast-util-gridtables": "^4.0.13", "@adobe/remark-gridtables": "^3.0.14", - "@next/bundle-analyzer": "^15.4.5", - "@pantheon-systems/pcc-react-sdk": "3.13.0-beta.2", - "@pantheon-systems/pcc-sdk-core": "3.13.0-beta.2", - "@pantheon-systems/pds-toolkit-react": "1.0.0-dev.256", + "@next/bundle-analyzer": "^16.1.6", + "@pantheon-systems/pds-toolkit-react": "^1.10.0", "@radix-ui/react-popover": "^1.1.14", "@radix-ui/react-slot": "^1.2.3", "@segment/analytics-next": "^1.81.1", @@ -38,11 +36,11 @@ "lodash": "^4.17.21", "lodash.debounce": "^4.0.8", "lodash.trimend": "^4.5.1", - "next": "15.3.9", + "next": "16.1.6", "prismjs": "^1.30.0", "query-string": "^8.2.0", - "react": "19.1.5", - "react-dom": "19.1.5", + "react": "19.2.4", + "react-dom": "19.2.4", "react-icons": "^5.5.0", "react-infinite-scroll-component": "^6.1.0", "react-loading-skeleton": "^3.5.0", @@ -78,8 +76,8 @@ "@vitejs/plugin-react": "^4.7.0", "autoprefixer": "^10.4.21", "c8": "^7.14.0", - "eslint": "^8.57.1", - "eslint-config-next": "15.3.4", + "eslint": "^9.0.0", + "eslint-config-next": "16.1.6", "js-yaml": "^4.1.0", "jsdom": "^22.1.0", "postcss": "^8.5.6", @@ -156,48 +154,6 @@ "node": ">=6.0.0" } }, - "node_modules/@apollo/client": { - "version": "3.13.9", - "resolved": "https://registry.npmjs.org/@apollo/client/-/client-3.13.9.tgz", - "integrity": "sha512-RStSzQfL1XwL6/NWd7W8avhGQYTgPCtJ+qHkkTTSj9Upp3VVm6Oppv81YWdXG1FgEpDPW4hvCrTUELdcC4inCQ==", - "license": "MIT", - "dependencies": { - "@graphql-typed-document-node/core": "^3.1.1", - "@wry/caches": "^1.0.0", - "@wry/equality": "^0.5.6", - "@wry/trie": "^0.5.0", - "graphql-tag": "^2.12.6", - "hoist-non-react-statics": "^3.3.2", - "optimism": "^0.18.0", - "prop-types": "^15.7.2", - "rehackt": "^0.1.0", - "symbol-observable": "^4.0.0", - "ts-invariant": "^0.10.3", - "tslib": "^2.3.0", - "zen-observable-ts": "^1.2.5" - }, - "peerDependencies": { - "graphql": "^15.0.0 || ^16.0.0", - "graphql-ws": "^5.5.5 || ^6.0.3", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc", - "subscriptions-transport-ws": "^0.9.0 || ^0.11.0" - }, - "peerDependenciesMeta": { - "graphql-ws": { - "optional": true - }, - "react": { - "optional": true - }, - "react-dom": { - "optional": true - }, - "subscriptions-transport-ws": { - "optional": true - } - } - }, "node_modules/@babel/code-frame": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", @@ -496,6 +452,12 @@ "dev": true, "license": "MIT" }, + "node_modules/@date-fns/tz": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@date-fns/tz/-/tz-1.4.1.tgz", + "integrity": "sha512-P5LUNhtbj6YfI3iJjw5EL9eUAG6OitD0W3fWQcpQjDRc/QIsL0tRNuO1PcDvPccWL1fSTXXdE1ds+l95DV/OFA==", + "license": "MIT" + }, "node_modules/@discoveryjs/json-ext": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", @@ -518,9 +480,9 @@ } }, "node_modules/@emnapi/runtime": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.5.tgz", - "integrity": "sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.0.tgz", + "integrity": "sha512-QN75eB0IH2ywSpRpNddCRfQIhmJYBCJ1x5Lb3IscKAL8bMnVAKnRg8dCoXbHzVLLH7P38N2Z3mtulB7W0J0FKw==", "license": "MIT", "optional": true, "dependencies": { @@ -1005,9 +967,9 @@ } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", - "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1023,48 +985,136 @@ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", "dev": true, "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, + "node_modules/@eslint/config-array": { + "version": "0.21.2", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.2.tgz", + "integrity": "sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.7", + "debug": "^4.3.1", + "minimatch": "^3.1.5" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core/node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.5.tgz", + "integrity": "sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==", "dev": true, "license": "MIT", "dependencies": { - "ajv": "^6.12.4", + "ajv": "^6.14.0", "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", + "espree": "^10.0.1", + "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", + "js-yaml": "^4.1.1", + "minimatch": "^3.1.5", "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/@eslint/js": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", - "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "version": "9.39.4", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.4.tgz", + "integrity": "sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==", "dev": true, "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@exodus/schemasafe": { @@ -1180,29 +1230,28 @@ "react": "^16.3 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, - "node_modules/@graphql-typed-document-node/core": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", - "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", - "license": "MIT", - "peerDependencies": { - "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", - "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", - "deprecated": "Use @eslint/config-array instead", + "node_modules/@humanfs/node": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.3", - "debug": "^4.3.1", - "minimatch": "^3.0.5" + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" }, "engines": { - "node": ">=10.10.0" + "node": ">=18.18.0" } }, "node_modules/@humanwhocodes/module-importer": { @@ -1219,18 +1268,34 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", "dev": true, - "license": "BSD-3-Clause" + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@img/colour": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", + "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + } }, "node_modules/@img/sharp-darwin-arm64": { - "version": "0.34.3", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.3.tgz", - "integrity": "sha512-ryFMfvxxpQRsgZJqBd4wsttYQbCxsJksrv9Lw/v798JcQ8+w84mBWuXwl+TT0WJ/WrYOLaYpwQXi3sA9nTIaIg==", + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", + "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", "cpu": [ "arm64" ], @@ -1246,13 +1311,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-darwin-arm64": "1.2.0" + "@img/sharp-libvips-darwin-arm64": "1.2.4" } }, "node_modules/@img/sharp-darwin-x64": { - "version": "0.34.3", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.3.tgz", - "integrity": "sha512-yHpJYynROAj12TA6qil58hmPmAwxKKC7reUqtGLzsOHfP7/rniNGTL8tjWX6L3CTV4+5P4ypcS7Pp+7OB+8ihA==", + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", + "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", "cpu": [ "x64" ], @@ -1268,13 +1333,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-darwin-x64": "1.2.0" + "@img/sharp-libvips-darwin-x64": "1.2.4" } }, "node_modules/@img/sharp-libvips-darwin-arm64": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.0.tgz", - "integrity": "sha512-sBZmpwmxqwlqG9ueWFXtockhsxefaV6O84BMOrhtg/YqbTaRdqDE7hxraVE3y6gVM4eExmfzW4a8el9ArLeEiQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz", + "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", "cpu": [ "arm64" ], @@ -1288,9 +1353,9 @@ } }, "node_modules/@img/sharp-libvips-darwin-x64": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.0.tgz", - "integrity": "sha512-M64XVuL94OgiNHa5/m2YvEQI5q2cl9d/wk0qFTDVXcYzi43lxuiFTftMR1tOnFQovVXNZJ5TURSDK2pNe9Yzqg==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz", + "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", "cpu": [ "x64" ], @@ -1304,9 +1369,9 @@ } }, "node_modules/@img/sharp-libvips-linux-arm": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.0.tgz", - "integrity": "sha512-mWd2uWvDtL/nvIzThLq3fr2nnGfyr/XMXlq8ZJ9WMR6PXijHlC3ksp0IpuhK6bougvQrchUAfzRLnbsen0Cqvw==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz", + "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", "cpu": [ "arm" ], @@ -1320,9 +1385,9 @@ } }, "node_modules/@img/sharp-libvips-linux-arm64": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.0.tgz", - "integrity": "sha512-RXwd0CgG+uPRX5YYrkzKyalt2OJYRiJQ8ED/fi1tq9WQW2jsQIn0tqrlR5l5dr/rjqq6AHAxURhj2DVjyQWSOA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz", + "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", "cpu": [ "arm64" ], @@ -1336,9 +1401,9 @@ } }, "node_modules/@img/sharp-libvips-linux-ppc64": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.0.tgz", - "integrity": "sha512-Xod/7KaDDHkYu2phxxfeEPXfVXFKx70EAFZ0qyUdOjCcxbjqyJOEUpDe6RIyaunGxT34Anf9ue/wuWOqBW2WcQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz", + "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==", "cpu": [ "ppc64" ], @@ -1351,10 +1416,26 @@ "url": "https://opencollective.com/libvips" } }, + "node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz", + "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==", + "cpu": [ + "riscv64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, "node_modules/@img/sharp-libvips-linux-s390x": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.0.tgz", - "integrity": "sha512-eMKfzDxLGT8mnmPJTNMcjfO33fLiTDsrMlUVcp6b96ETbnJmd4uvZxVJSKPQfS+odwfVaGifhsB07J1LynFehw==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz", + "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==", "cpu": [ "s390x" ], @@ -1368,9 +1449,9 @@ } }, "node_modules/@img/sharp-libvips-linux-x64": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.0.tgz", - "integrity": "sha512-ZW3FPWIc7K1sH9E3nxIGB3y3dZkpJlMnkk7z5tu1nSkBoCgw2nSRTFHI5pB/3CQaJM0pdzMF3paf9ckKMSE9Tg==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz", + "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", "cpu": [ "x64" ], @@ -1384,9 +1465,9 @@ } }, "node_modules/@img/sharp-libvips-linuxmusl-arm64": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.0.tgz", - "integrity": "sha512-UG+LqQJbf5VJ8NWJ5Z3tdIe/HXjuIdo4JeVNADXBFuG7z9zjoegpzzGIyV5zQKi4zaJjnAd2+g2nna8TZvuW9Q==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz", + "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", "cpu": [ "arm64" ], @@ -1400,9 +1481,9 @@ } }, "node_modules/@img/sharp-libvips-linuxmusl-x64": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.0.tgz", - "integrity": "sha512-SRYOLR7CXPgNze8akZwjoGBoN1ThNZoqpOgfnOxmWsklTGVfJiGJoC/Lod7aNMGA1jSsKWM1+HRX43OP6p9+6Q==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz", + "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", "cpu": [ "x64" ], @@ -1416,9 +1497,9 @@ } }, "node_modules/@img/sharp-linux-arm": { - "version": "0.34.3", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.3.tgz", - "integrity": "sha512-oBK9l+h6KBN0i3dC8rYntLiVfW8D8wH+NPNT3O/WBHeW0OQWCjfWksLUaPidsrDKpJgXp3G3/hkmhptAW0I3+A==", + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz", + "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", "cpu": [ "arm" ], @@ -1434,13 +1515,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-arm": "1.2.0" + "@img/sharp-libvips-linux-arm": "1.2.4" } }, "node_modules/@img/sharp-linux-arm64": { - "version": "0.34.3", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.3.tgz", - "integrity": "sha512-QdrKe3EvQrqwkDrtuTIjI0bu6YEJHTgEeqdzI3uWJOH6G1O8Nl1iEeVYRGdj1h5I21CqxSvQp1Yv7xeU3ZewbA==", + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz", + "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", "cpu": [ "arm64" ], @@ -1456,13 +1537,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-arm64": "1.2.0" + "@img/sharp-libvips-linux-arm64": "1.2.4" } }, "node_modules/@img/sharp-linux-ppc64": { - "version": "0.34.3", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.3.tgz", - "integrity": "sha512-GLtbLQMCNC5nxuImPR2+RgrviwKwVql28FWZIW1zWruy6zLgA5/x2ZXk3mxj58X/tszVF69KK0Is83V8YgWhLA==", + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz", + "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==", "cpu": [ "ppc64" ], @@ -1478,13 +1559,35 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-ppc64": "1.2.0" + "@img/sharp-libvips-linux-ppc64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-riscv64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz", + "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==", + "cpu": [ + "riscv64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-riscv64": "1.2.4" } }, "node_modules/@img/sharp-linux-s390x": { - "version": "0.34.3", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.3.tgz", - "integrity": "sha512-3gahT+A6c4cdc2edhsLHmIOXMb17ltffJlxR0aC2VPZfwKoTGZec6u5GrFgdR7ciJSsHT27BD3TIuGcuRT0KmQ==", + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz", + "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==", "cpu": [ "s390x" ], @@ -1500,13 +1603,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-s390x": "1.2.0" + "@img/sharp-libvips-linux-s390x": "1.2.4" } }, "node_modules/@img/sharp-linux-x64": { - "version": "0.34.3", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.3.tgz", - "integrity": "sha512-8kYso8d806ypnSq3/Ly0QEw90V5ZoHh10yH0HnrzOCr6DKAPI6QVHvwleqMkVQ0m+fc7EH8ah0BB0QPuWY6zJQ==", + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz", + "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", "cpu": [ "x64" ], @@ -1522,13 +1625,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-x64": "1.2.0" + "@img/sharp-libvips-linux-x64": "1.2.4" } }, "node_modules/@img/sharp-linuxmusl-arm64": { - "version": "0.34.3", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.3.tgz", - "integrity": "sha512-vAjbHDlr4izEiXM1OTggpCcPg9tn4YriK5vAjowJsHwdBIdx0fYRsURkxLG2RLm9gyBq66gwtWI8Gx0/ov+JKQ==", + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz", + "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", "cpu": [ "arm64" ], @@ -1544,13 +1647,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-arm64": "1.2.0" + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" } }, "node_modules/@img/sharp-linuxmusl-x64": { - "version": "0.34.3", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.3.tgz", - "integrity": "sha512-gCWUn9547K5bwvOn9l5XGAEjVTTRji4aPTqLzGXHvIr6bIDZKNTA34seMPgM0WmSf+RYBH411VavCejp3PkOeQ==", + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz", + "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", "cpu": [ "x64" ], @@ -1566,20 +1669,20 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-x64": "1.2.0" + "@img/sharp-libvips-linuxmusl-x64": "1.2.4" } }, "node_modules/@img/sharp-wasm32": { - "version": "0.34.3", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.3.tgz", - "integrity": "sha512-+CyRcpagHMGteySaWos8IbnXcHgfDn7pO2fiC2slJxvNq9gDipYBN42/RagzctVRKgxATmfqOSulgZv5e1RdMg==", + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz", + "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==", "cpu": [ "wasm32" ], "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", "optional": true, "dependencies": { - "@emnapi/runtime": "^1.4.4" + "@emnapi/runtime": "^1.7.0" }, "engines": { "node": "^18.17.0 || ^20.3.0 || >=21.0.0" @@ -1589,9 +1692,9 @@ } }, "node_modules/@img/sharp-win32-arm64": { - "version": "0.34.3", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.3.tgz", - "integrity": "sha512-MjnHPnbqMXNC2UgeLJtX4XqoVHHlZNd+nPt1kRPmj63wURegwBhZlApELdtxM2OIZDRv/DFtLcNhVbd1z8GYXQ==", + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz", + "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", "cpu": [ "arm64" ], @@ -1608,9 +1711,9 @@ } }, "node_modules/@img/sharp-win32-ia32": { - "version": "0.34.3", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.3.tgz", - "integrity": "sha512-xuCdhH44WxuXgOM714hn4amodJMZl3OEvf0GVTm0BEyMeA2to+8HEdRPShH0SLYptJY1uBw+SCFP9WVQi1Q/cw==", + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz", + "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==", "cpu": [ "ia32" ], @@ -1627,9 +1730,9 @@ } }, "node_modules/@img/sharp-win32-x64": { - "version": "0.34.3", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.3.tgz", - "integrity": "sha512-OWwz05d++TxzLEv4VnsTz5CmZ6mI6S05sfQGEMrNrQcOEERbX46332IvE7pO/EUiw7jUrrS40z/M7kPyjfl04g==", + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz", + "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", "cpu": [ "x64" ], @@ -1846,24 +1949,24 @@ } }, "node_modules/@next/bundle-analyzer": { - "version": "15.4.6", - "resolved": "https://registry.npmjs.org/@next/bundle-analyzer/-/bundle-analyzer-15.4.6.tgz", - "integrity": "sha512-LZWqTQgIpfhblT77VVc1r4qtHJY1pfZOAIx8zNtliU7L3pMjpNrG4rYWikJ7AyAI/RgYyt2sCVWqkeOZmFp7Zg==", + "version": "16.1.6", + "resolved": "https://registry.npmjs.org/@next/bundle-analyzer/-/bundle-analyzer-16.1.6.tgz", + "integrity": "sha512-ee2kagdTaeEWPlotgdTOqFHYcD3e2m2bbE3I9Rq2i6ABYi5OgopmtEUe8NM23viaYxLV2tDH/2nd5+qKoEr6cw==", "license": "MIT", "dependencies": { "webpack-bundle-analyzer": "4.10.1" } }, "node_modules/@next/env": { - "version": "15.3.9", - "resolved": "https://registry.npmjs.org/@next/env/-/env-15.3.9.tgz", - "integrity": "sha512-I7wMCjlHc85EvAebNYJCRBZ+shdrGhcIXBviWmDzGYXwTQ+WrYpfg1LBOnTK1Bn3b+ud5apesNObXKEGqi/C3g==", + "version": "16.1.6", + "resolved": "https://registry.npmjs.org/@next/env/-/env-16.1.6.tgz", + "integrity": "sha512-N1ySLuZjnAtN3kFnwhAwPvZah8RJxKasD7x1f8shFqhncnWZn4JMfg37diLNuoHsLAlrDfM3g4mawVdtAG8XLQ==", "license": "MIT" }, "node_modules/@next/eslint-plugin-next": { - "version": "15.3.4", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.3.4.tgz", - "integrity": "sha512-lBxYdj7TI8phbJcLSAqDt57nIcobEign5NYIKCiy0hXQhrUbTqLqOaSDi568U6vFg4hJfBdZYsG4iP/uKhCqgg==", + "version": "16.1.6", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-16.1.6.tgz", + "integrity": "sha512-/Qq3PTagA6+nYVfryAtQ7/9FEr/6YVyvOtl6rZnGsbReGLf0jZU6gkpr1FuChAQpvV46a78p4cmHOVP8mbfSMQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1871,9 +1974,9 @@ } }, "node_modules/@next/swc-darwin-arm64": { - "version": "15.3.5", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.3.5.tgz", - "integrity": "sha512-lM/8tilIsqBq+2nq9kbTW19vfwFve0NR7MxfkuSUbRSgXlMQoJYg+31+++XwKVSXk4uT23G2eF/7BRIKdn8t8w==", + "version": "16.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.1.6.tgz", + "integrity": "sha512-wTzYulosJr/6nFnqGW7FrG3jfUUlEf8UjGA0/pyypJl42ExdVgC6xJgcXQ+V8QFn6niSG2Pb8+MIG1mZr2vczw==", "cpu": [ "arm64" ], @@ -1887,981 +1990,196 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "15.3.5", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.3.5.tgz", - "integrity": "sha512-WhwegPQJ5IfoUNZUVsI9TRAlKpjGVK0tpJTL6KeiC4cux9774NYE9Wu/iCfIkL/5J8rPAkqZpG7n+EfiAfidXA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-gnu": { - "version": "15.3.5", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.3.5.tgz", - "integrity": "sha512-LVD6uMOZ7XePg3KWYdGuzuvVboxujGjbcuP2jsPAN3MnLdLoZUXKRc6ixxfs03RH7qBdEHCZjyLP/jBdCJVRJQ==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-musl": { - "version": "15.3.5", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.3.5.tgz", - "integrity": "sha512-k8aVScYZ++BnS2P69ClK7v4nOu702jcF9AIHKu6llhHEtBSmM2zkPGl9yoqbSU/657IIIb0QHpdxEr0iW9z53A==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-gnu": { - "version": "15.3.5", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.3.5.tgz", - "integrity": "sha512-2xYU0DI9DGN/bAHzVwADid22ba5d/xrbrQlr2U+/Q5WkFUzeL0TDR963BdrtLS/4bMmKZGptLeg6282H/S2i8A==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-musl": { - "version": "15.3.5", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.3.5.tgz", - "integrity": "sha512-TRYIqAGf1KCbuAB0gjhdn5Ytd8fV+wJSM2Nh2is/xEqR8PZHxfQuaiNhoF50XfY90sNpaRMaGhF6E+qjV1b9Tg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-arm64-msvc": { - "version": "15.3.5", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.3.5.tgz", - "integrity": "sha512-h04/7iMEUSMY6fDGCvdanKqlO1qYvzNxntZlCzfE8i5P0uqzVQWQquU1TIhlz0VqGQGXLrFDuTJVONpqGqjGKQ==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-x64-msvc": { - "version": "15.3.5", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.3.5.tgz", - "integrity": "sha512-5fhH6fccXxnX2KhllnGhkYMndhOiLOLEiVGYjP2nizqeGWkN10sA9taATlXwake2E2XMvYZjjz0Uj7T0y+z1yw==", + "version": "16.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-16.1.6.tgz", + "integrity": "sha512-BLFPYPDO+MNJsiDWbeVzqvYd4NyuRrEYVB5k2N3JfWncuHAy2IVwMAOlVQDFjj+krkWzhY2apvmekMkfQR0CUQ==", "cpu": [ "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nolyfill/is-core-module": { - "version": "1.0.39", - "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", - "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.4.0" - } - }, - "node_modules/@pantheon-systems/pcc-react-sdk": { - "version": "3.13.0-beta.2", - "resolved": "https://registry.npmjs.org/@pantheon-systems/pcc-react-sdk/-/pcc-react-sdk-3.13.0-beta.2.tgz", - "integrity": "sha512-GgviGq5gxysaGcHW+0v3jmR+Q6Gkc89MkbLIrS5YW0X78pNix+JdT4TVAJ+wTa7xPpiBMjdW3Lis9hxgpVRHkA==", - "license": "MIT", - "dependencies": { - "@apollo/client": "^3.10.3", - "@pantheon-systems/pcc-sdk-core": "3.13.0-beta.2", - "graphql": "^16.8.1", - "lodash": "^4.17.21", - "markdown-to-txt": "^2.0.1", - "react-markdown": "^8.0.7", - "rehype-raw": "^6.1.1", - "remark-heading-id": "^1.0.1", - "unist-util-visit": "^5.0.0" - }, - "engines": { - "node": ">=18.10.0" - }, - "peerDependencies": { - "@types/react": ">=18", - "@types/react-dom": ">=18", - "react": ">=18", - "react-dom": ">=18" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@pantheon-systems/pcc-react-sdk/node_modules/@types/hast": { - "version": "2.3.10", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.10.tgz", - "integrity": "sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/@pantheon-systems/pcc-react-sdk/node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/@pantheon-systems/pcc-react-sdk/node_modules/@types/unist": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", - "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", - "license": "MIT" - }, - "node_modules/@pantheon-systems/pcc-react-sdk/node_modules/hast-util-raw": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-7.2.3.tgz", - "integrity": "sha512-RujVQfVsOrxzPOPSzZFiwofMArbQke6DJjnFfceiEbFh7S05CbPt0cYN+A5YeD3pso0JQk6O1aHBnx9+Pm2uqg==", - "license": "MIT", - "dependencies": { - "@types/hast": "^2.0.0", - "@types/parse5": "^6.0.0", - "hast-util-from-parse5": "^7.0.0", - "hast-util-to-parse5": "^7.0.0", - "html-void-elements": "^2.0.0", - "parse5": "^6.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0", - "vfile": "^5.0.0", - "web-namespaces": "^2.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@pantheon-systems/pcc-react-sdk/node_modules/hast-util-raw/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@pantheon-systems/pcc-react-sdk/node_modules/mdast-util-from-markdown": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", - "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@pantheon-systems/pcc-react-sdk/node_modules/mdast-util-to-hast": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-12.3.0.tgz", - "integrity": "sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==", - "license": "MIT", - "dependencies": { - "@types/hast": "^2.0.0", - "@types/mdast": "^3.0.0", - "mdast-util-definitions": "^5.0.0", - "micromark-util-sanitize-uri": "^1.1.0", - "trim-lines": "^3.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@pantheon-systems/pcc-react-sdk/node_modules/mdast-util-to-hast/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@pantheon-systems/pcc-react-sdk/node_modules/micromark": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", - "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "node_modules/@pantheon-systems/pcc-react-sdk/node_modules/micromark-core-commonmark": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz", - "integrity": "sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-factory-destination": "^1.0.0", - "micromark-factory-label": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-factory-title": "^1.0.0", - "micromark-factory-whitespace": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-classify-character": "^1.0.0", - "micromark-util-html-tag-name": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" - } - }, - "node_modules/@pantheon-systems/pcc-react-sdk/node_modules/micromark-factory-destination": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz", - "integrity": "sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/@pantheon-systems/pcc-react-sdk/node_modules/micromark-factory-label": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz", - "integrity": "sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "node_modules/@pantheon-systems/pcc-react-sdk/node_modules/micromark-factory-space": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", - "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/@pantheon-systems/pcc-react-sdk/node_modules/micromark-factory-title": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz", - "integrity": "sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/@pantheon-systems/pcc-react-sdk/node_modules/micromark-factory-whitespace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz", - "integrity": "sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/@pantheon-systems/pcc-react-sdk/node_modules/micromark-util-character": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", - "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/@pantheon-systems/pcc-react-sdk/node_modules/micromark-util-chunked": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz", - "integrity": "sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/@pantheon-systems/pcc-react-sdk/node_modules/micromark-util-classify-character": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz", - "integrity": "sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/@pantheon-systems/pcc-react-sdk/node_modules/micromark-util-combine-extensions": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz", - "integrity": "sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/@pantheon-systems/pcc-react-sdk/node_modules/micromark-util-decode-numeric-character-reference": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz", - "integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/@pantheon-systems/pcc-react-sdk/node_modules/micromark-util-decode-string": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz", - "integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/@pantheon-systems/pcc-react-sdk/node_modules/micromark-util-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz", - "integrity": "sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/@pantheon-systems/pcc-react-sdk/node_modules/micromark-util-html-tag-name": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz", - "integrity": "sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/@pantheon-systems/pcc-react-sdk/node_modules/micromark-util-normalize-identifier": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz", - "integrity": "sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/@pantheon-systems/pcc-react-sdk/node_modules/micromark-util-resolve-all": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz", - "integrity": "sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/@pantheon-systems/pcc-react-sdk/node_modules/micromark-util-sanitize-uri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz", - "integrity": "sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/@pantheon-systems/pcc-react-sdk/node_modules/micromark-util-subtokenize": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz", - "integrity": "sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "node_modules/@pantheon-systems/pcc-react-sdk/node_modules/micromark-util-symbol": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", - "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/@pantheon-systems/pcc-react-sdk/node_modules/micromark-util-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", - "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/@pantheon-systems/pcc-react-sdk/node_modules/react-markdown": { - "version": "8.0.7", - "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-8.0.7.tgz", - "integrity": "sha512-bvWbzG4MtOU62XqBx3Xx+zB2raaFFsq4mYiAzfjXJMEz2sixgeAfraA3tvzULF02ZdOMUOKTBFFaZJDDrq+BJQ==", - "license": "MIT", - "dependencies": { - "@types/hast": "^2.0.0", - "@types/prop-types": "^15.0.0", - "@types/unist": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-whitespace": "^2.0.0", - "prop-types": "^15.0.0", - "property-information": "^6.0.0", - "react-is": "^18.0.0", - "remark-parse": "^10.0.0", - "remark-rehype": "^10.0.0", - "space-separated-tokens": "^2.0.0", - "style-to-object": "^0.4.0", - "unified": "^10.0.0", - "unist-util-visit": "^4.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "@types/react": ">=16", - "react": ">=16" - } - }, - "node_modules/@pantheon-systems/pcc-react-sdk/node_modules/react-markdown/node_modules/unist-util-visit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", - "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/@pantheon-systems/pcc-react-sdk/node_modules/rehype-raw": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-6.1.1.tgz", - "integrity": "sha512-d6AKtisSRtDRX4aSPsJGTfnzrX2ZkHQLE5kiUuGOeEoLpbEulFF4hj0mLPbsa+7vmguDKOVVEQdHKDSwoaIDsQ==", + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "16.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.1.6.tgz", + "integrity": "sha512-OJYkCd5pj/QloBvoEcJ2XiMnlJkRv9idWA/j0ugSuA34gMT6f5b7vOiCQHVRpvStoZUknhl6/UxOXL4OwtdaBw==", + "cpu": [ + "arm64" + ], "license": "MIT", - "dependencies": { - "@types/hast": "^2.0.0", - "hast-util-raw": "^7.2.0", - "unified": "^10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/@pantheon-systems/pcc-react-sdk/node_modules/remark-parse": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.2.tgz", - "integrity": "sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==", + "node_modules/@next/swc-linux-arm64-musl": { + "version": "16.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.1.6.tgz", + "integrity": "sha512-S4J2v+8tT3NIO9u2q+S0G5KdvNDjXfAv06OhfOzNDaBn5rw84DGXWndOEB7d5/x852A20sW1M56vhC/tRVbccQ==", + "cpu": [ + "arm64" + ], "license": "MIT", - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "unified": "^10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/@pantheon-systems/pcc-react-sdk/node_modules/remark-rehype": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-10.1.0.tgz", - "integrity": "sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==", + "node_modules/@next/swc-linux-x64-gnu": { + "version": "16.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.1.6.tgz", + "integrity": "sha512-2eEBDkFlMMNQnkTyPBhQOAyn2qMxyG2eE7GPH2WIDGEpEILcBPI/jdSv4t6xupSP+ot/jkfrCShLAa7+ZUPcJQ==", + "cpu": [ + "x64" + ], "license": "MIT", - "dependencies": { - "@types/hast": "^2.0.0", - "@types/mdast": "^3.0.0", - "mdast-util-to-hast": "^12.1.0", - "unified": "^10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/@pantheon-systems/pcc-react-sdk/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "node_modules/@next/swc-linux-x64-musl": { + "version": "16.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.1.6.tgz", + "integrity": "sha512-oicJwRlyOoZXVlxmIMaTq7f8pN9QNbdes0q2FXfRsPhfCi8n8JmOZJm5oo1pwDaFbnnD421rVU409M3evFbIqg==", + "cpu": [ + "x64" + ], "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/@pantheon-systems/pcc-react-sdk/node_modules/unist-util-is": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", - "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "16.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.1.6.tgz", + "integrity": "sha512-gQmm8izDTPgs+DCWH22kcDmuUp7NyiJgEl18bcr8irXA5N2m2O+JQIr6f3ct42GOs9c0h8QF3L5SzIxcYAAXXw==", + "cpu": [ + "arm64" + ], "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/@pantheon-systems/pcc-react-sdk/node_modules/unist-util-stringify-position": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", - "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "node_modules/@next/swc-win32-x64-msvc": { + "version": "16.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.1.6.tgz", + "integrity": "sha512-NRfO39AIrzBnixKbjuo2YiYhB6o9d8v/ymU9m/Xk8cyVk+k7XylniXkHwjs4s70wedVffc6bQNbufk5v0xEm0A==", + "cpu": [ + "x64" + ], "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/@pantheon-systems/pcc-react-sdk/node_modules/unist-util-visit-parents": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", - "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">= 8" } }, - "node_modules/@pantheon-systems/pcc-react-sdk/node_modules/vfile": { - "version": "5.3.7", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz", - "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==", + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">= 8" } }, - "node_modules/@pantheon-systems/pcc-react-sdk/node_modules/vfile-message": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz", - "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==", + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "license": "MIT", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">= 8" } }, - "node_modules/@pantheon-systems/pcc-sdk-core": { - "version": "3.13.0-beta.2", - "resolved": "https://registry.npmjs.org/@pantheon-systems/pcc-sdk-core/-/pcc-sdk-core-3.13.0-beta.2.tgz", - "integrity": "sha512-jK+rpab9MOz2KixzTf6QNDotzDh/Q+wmCv1TQKP+V8jCx43PqrxNSYqHvauDmuiIOe+D7OwUNefata3tJiSSNg==", + "node_modules/@nolyfill/is-core-module": { + "version": "1.0.39", + "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", + "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", + "dev": true, "license": "MIT", - "dependencies": { - "@apollo/client": "^3.10.3", - "graphql": "^16.8.1", - "graphql-tag": "^2.12.6", - "graphql-ws": "^5.15.0", - "query-string": "^8.2.0", - "typescript": "^5.5.4", - "zod": "^3.22.4", - "zod-validation-error": "^1.5.0" + "engines": { + "node": ">=12.4.0" } }, "node_modules/@pantheon-systems/pds-design-tokens": { - "version": "1.0.0-dev.161", - "resolved": "https://registry.npmjs.org/@pantheon-systems/pds-design-tokens/-/pds-design-tokens-1.0.0-dev.161.tgz", - "integrity": "sha512-kroYNF1LGc3zTymKM1s6P8hXc3jTSyD1SBozzV7gB09cU1oWpPIGGXlhCBjyqJLfbiUbNteITc23McogfKGJUA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@pantheon-systems/pds-design-tokens/-/pds-design-tokens-1.2.0.tgz", + "integrity": "sha512-VX716QO3uNOwdpBeMjeU6d+rvZ9ioVK64ayAIaVUKJlDXNc7N66C7pajFpSvBlTzIcdYJXxJ/sLlLtTfr01FWg==", "license": "GPL-3.0-or-later" }, "node_modules/@pantheon-systems/pds-toolkit-react": { - "version": "1.0.0-dev.256", - "resolved": "https://registry.npmjs.org/@pantheon-systems/pds-toolkit-react/-/pds-toolkit-react-1.0.0-dev.256.tgz", - "integrity": "sha512-2VsT41YRG9QVIEaekrjvQTwhLgELnzn39aQyylo8DAuJz1rQenyeesPtmaGMBCf72o2Ovw/yujeZF7NMHh4fuw==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@pantheon-systems/pds-toolkit-react/-/pds-toolkit-react-1.10.0.tgz", + "integrity": "sha512-o6by/1UShyg9k185fztu5yvoqQ/S4FM6+V83Yv8lfCOZZIcvVFXmsOQia6/1c9B9qQvQUFU0aZZn8oUPri9BjA==", "dependencies": { "@floating-ui/react": "^0.24.3", "@floating-ui/react-dom": "~1.3.0", - "@pantheon-systems/pds-design-tokens": "^1.0.0-dev.158", + "@pantheon-systems/pds-design-tokens": "^1.0.0", "@reactuses/core": "^5.0.15", + "date-fns": "^4.1.0", "downshift": "^9.0.8", + "express": "^4.22.1", + "express-rate-limit": "^8.2.1", "focus-trap-react": "^10.2.1", "hash-sum": "^2.0.0", + "pino": "^10.3.1", + "pino-http": "^11.0.0", "prism-react-renderer": "^2.4.1", "prismjs": "^1.29.0", "react-code-block": "^1.1.1", + "react-day-picker": "^9.11.1", "react-device-detect": "^2.2.3", "react-hotkeys-hook": "^4.5.1", "react-router-dom": "^6.13.0", "react-toastify": "^9.0.3" }, "engines": { - "node": ">=18.0.0 <=22.x" + "node": ">=18.0.0 <=24.x" }, "peerDependencies": { "react": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", @@ -2890,6 +2208,12 @@ } } }, + "node_modules/@pinojs/redact": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@pinojs/redact/-/redact-0.4.0.tgz", + "integrity": "sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==", + "license": "MIT" + }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -2917,6 +2241,40 @@ "node": ">=18" } }, + "node_modules/@playwright/test/node_modules/playwright": { + "version": "1.54.2", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.54.2.tgz", + "integrity": "sha512-Hu/BMoA1NAdRUuulyvQC0pEqZ4vQbGfn8f7wPXcnqQmM+zct9UliKxsIkLNmz/ku7LElUNqmaiv1TG/aL5ACsw==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "playwright-core": "1.54.2" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/@playwright/test/node_modules/playwright-core": { + "version": "1.54.2", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.54.2.tgz", + "integrity": "sha512-n5r4HFbMmWsB4twG7tJLDN9gmBUeSPcsBZiWSE4DnYz9mJMAFqr2ID7+eGC9kpEnxExJ1epttwR59LEWCk8mtA==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/@polka/url": { "version": "1.0.0-next.29", "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", @@ -3931,13 +3289,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@rushstack/eslint-patch": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.12.0.tgz", - "integrity": "sha512-5EwMtOqvJMMa3HbmxLlF74e+3/HhwBTMcvt3nqVJgGCozO6hzIPOBlwm8mGVNR9SN2IJpxSnlxczyDjcn7qIyw==", - "dev": true, - "license": "MIT" - }, "node_modules/@segment/analytics-core": { "version": "1.8.2", "resolved": "https://registry.npmjs.org/@segment/analytics-core/-/analytics-core-1.8.2.tgz", @@ -6020,12 +5371,6 @@ "integrity": "sha512-Pb6M8TDO9DtSVla9yXSTAxmo9GVEouq5P40DWXdOie69bXogZTkgvopCq+yEvTMA0F6PEvdJmbtTV3ccIp11VQ==", "license": "Apache-2.0" }, - "node_modules/@swc/counter": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", - "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", - "license": "Apache-2.0" - }, "node_modules/@swc/helpers": { "version": "0.5.15", "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", @@ -6035,6 +5380,15 @@ "tslib": "^2.8.0" } }, + "node_modules/@tabby_ai/hijri-converter": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@tabby_ai/hijri-converter/-/hijri-converter-1.0.5.tgz", + "integrity": "sha512-r5bClKrcIusDoo049dSL8CawnHR6mRdDwhlQuIgZRNty68q0x8k3Lf1BtPAMxRf/GgnHBnIO4ujd3+GQdLWzxQ==", + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/@tailwindcss/typography": { "version": "0.5.10", "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.10.tgz", @@ -6378,21 +5732,20 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.39.0.tgz", - "integrity": "sha512-bhEz6OZeUR+O/6yx9Jk6ohX6H9JSFTaiY0v9/PuKT3oGK0rn0jNplLmyFUGV+a9gfYnVNwGDwS/UkLIuXNb2Rw==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.57.0.tgz", + "integrity": "sha512-qeu4rTHR3/IaFORbD16gmjq9+rEs9fGKdX0kF6BKSfi+gCuG3RCKLlSBYzn/bGsY9Tj7KE/DAQStbp8AHJGHEQ==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.39.0", - "@typescript-eslint/type-utils": "8.39.0", - "@typescript-eslint/utils": "8.39.0", - "@typescript-eslint/visitor-keys": "8.39.0", - "graphemer": "^1.4.0", - "ignore": "^7.0.0", + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.57.0", + "@typescript-eslint/type-utils": "8.57.0", + "@typescript-eslint/utils": "8.57.0", + "@typescript-eslint/visitor-keys": "8.57.0", + "ignore": "^7.0.5", "natural-compare": "^1.4.0", - "ts-api-utils": "^2.1.0" + "ts-api-utils": "^2.4.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -6402,8 +5755,8 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.39.0", - "eslint": "^8.57.0 || ^9.0.0", + "@typescript-eslint/parser": "^8.57.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, @@ -6418,17 +5771,17 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.39.0.tgz", - "integrity": "sha512-g3WpVQHngx0aLXn6kfIYCZxM6rRJlWzEkVpqEFLT3SgEDsp9cpCbxxgwnE504q4H+ruSDh/VGS6nqZIDynP+vg==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.57.0.tgz", + "integrity": "sha512-XZzOmihLIr8AD1b9hL9ccNMzEMWt/dE2u7NyTY9jJG6YNiNthaD5XtUHVF2uCXZ15ng+z2hT3MVuxnUYhq6k1g==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.39.0", - "@typescript-eslint/types": "8.39.0", - "@typescript-eslint/typescript-estree": "8.39.0", - "@typescript-eslint/visitor-keys": "8.39.0", - "debug": "^4.3.4" + "@typescript-eslint/scope-manager": "8.57.0", + "@typescript-eslint/types": "8.57.0", + "@typescript-eslint/typescript-estree": "8.57.0", + "@typescript-eslint/visitor-keys": "8.57.0", + "debug": "^4.4.3" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -6438,20 +5791,20 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.39.0.tgz", - "integrity": "sha512-CTzJqaSq30V/Z2Og9jogzZt8lJRR5TKlAdXmWgdu4hgcC9Kww5flQ+xFvMxIBWVNdxJO7OifgdOK4PokMIWPew==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.57.0.tgz", + "integrity": "sha512-pR+dK0BlxCLxtWfaKQWtYr7MhKmzqZxuii+ZjuFlZlIGRZm22HnXFqa2eY+90MUz8/i80YJmzFGDUsi8dMOV5w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.39.0", - "@typescript-eslint/types": "^8.39.0", - "debug": "^4.3.4" + "@typescript-eslint/tsconfig-utils": "^8.57.0", + "@typescript-eslint/types": "^8.57.0", + "debug": "^4.4.3" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -6465,14 +5818,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.39.0.tgz", - "integrity": "sha512-8QOzff9UKxOh6npZQ/4FQu4mjdOCGSdO3p44ww0hk8Vu+IGbg0tB/H1LcTARRDzGCC8pDGbh2rissBuuoPgH8A==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.57.0.tgz", + "integrity": "sha512-nvExQqAHF01lUM66MskSaZulpPL5pgy5hI5RfrxviLgzZVffB5yYzw27uK/ft8QnKXI2X0LBrHJFr1TaZtAibw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.39.0", - "@typescript-eslint/visitor-keys": "8.39.0" + "@typescript-eslint/types": "8.57.0", + "@typescript-eslint/visitor-keys": "8.57.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -6483,9 +5836,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.39.0.tgz", - "integrity": "sha512-Fd3/QjmFV2sKmvv3Mrj8r6N8CryYiCS8Wdb/6/rgOXAWGcFuc+VkQuG28uk/4kVNVZBQuuDHEDUpo/pQ32zsIQ==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.57.0.tgz", + "integrity": "sha512-LtXRihc5ytjJIQEH+xqjB0+YgsV4/tW35XKX3GTZHpWtcC8SPkT/d4tqdf1cKtesryHm2bgp6l555NYcT2NLvA==", "dev": true, "license": "MIT", "engines": { @@ -6500,17 +5853,17 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.39.0.tgz", - "integrity": "sha512-6B3z0c1DXVT2vYA9+z9axjtc09rqKUPRmijD5m9iv8iQpHBRYRMBcgxSiKTZKm6FwWw1/cI4v6em35OsKCiN5Q==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.57.0.tgz", + "integrity": "sha512-yjgh7gmDcJ1+TcEg8x3uWQmn8ifvSupnPfjP21twPKrDP/pTHlEQgmKcitzF/rzPSmv7QjJ90vRpN4U+zoUjwQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.39.0", - "@typescript-eslint/typescript-estree": "8.39.0", - "@typescript-eslint/utils": "8.39.0", - "debug": "^4.3.4", - "ts-api-utils": "^2.1.0" + "@typescript-eslint/types": "8.57.0", + "@typescript-eslint/typescript-estree": "8.57.0", + "@typescript-eslint/utils": "8.57.0", + "debug": "^4.4.3", + "ts-api-utils": "^2.4.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -6520,14 +5873,14 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/types": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.39.0.tgz", - "integrity": "sha512-ArDdaOllnCj3yn/lzKn9s0pBQYmmyme/v1HbGIGB0GB/knFI3fWMHloC+oYTJW46tVbYnGKTMDK4ah1sC2v0Kg==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.57.0.tgz", + "integrity": "sha512-dTLI8PEXhjUC7B9Kre+u0XznO696BhXcTlOn0/6kf1fHaQW8+VjJAVHJ3eTI14ZapTxdkOmc80HblPQLaEeJdg==", "dev": true, "license": "MIT", "engines": { @@ -6539,22 +5892,21 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.39.0.tgz", - "integrity": "sha512-ndWdiflRMvfIgQRpckQQLiB5qAKQ7w++V4LlCHwp62eym1HLB/kw7D9f2e8ytONls/jt89TEasgvb+VwnRprsw==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.57.0.tgz", + "integrity": "sha512-m7faHcyVg0BT3VdYTlX8GdJEM7COexXxS6KqGopxdtkQRvBanK377QDHr4W/vIPAR+ah9+B/RclSW5ldVniO1Q==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.39.0", - "@typescript-eslint/tsconfig-utils": "8.39.0", - "@typescript-eslint/types": "8.39.0", - "@typescript-eslint/visitor-keys": "8.39.0", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^2.1.0" + "@typescript-eslint/project-service": "8.57.0", + "@typescript-eslint/tsconfig-utils": "8.57.0", + "@typescript-eslint/types": "8.57.0", + "@typescript-eslint/visitor-keys": "8.57.0", + "debug": "^4.4.3", + "minimatch": "^10.2.2", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.4.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -6563,44 +5915,14 @@ "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { @@ -6611,16 +5933,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.39.0.tgz", - "integrity": "sha512-4GVSvNA0Vx1Ktwvf4sFE+exxJ3QGUorQG1/A5mRfRNZtkBT2xrA/BCO2H0eALx/PnvCS6/vmYwRdDA41EoffkQ==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.57.0.tgz", + "integrity": "sha512-5iIHvpD3CZe06riAsbNxxreP+MuYgVUsV0n4bwLH//VJmgtt54sQeY2GszntJ4BjYCpMzrfVh2SBnUQTtys2lQ==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.39.0", - "@typescript-eslint/types": "8.39.0", - "@typescript-eslint/typescript-estree": "8.39.0" + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.57.0", + "@typescript-eslint/types": "8.57.0", + "@typescript-eslint/typescript-estree": "8.57.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -6630,19 +5952,19 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.39.0.tgz", - "integrity": "sha512-ldgiJ+VAhQCfIjeOgu8Kj5nSxds0ktPOSO9p4+0VDH2R2pLvQraaM5Oen2d7NxzMCm+Sn/vJT+mv2H5u6b/3fA==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.57.0.tgz", + "integrity": "sha512-zm6xx8UT/Xy2oSr2ZXD0pZo7Jx2XsCoID2IUh9YSTFRu7z+WdwYTRk6LhUftm1crwqbuoF6I8zAFeCMw0YjwDg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.39.0", - "eslint-visitor-keys": "^4.2.1" + "@typescript-eslint/types": "8.57.0", + "eslint-visitor-keys": "^5.0.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -6653,13 +5975,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", "dev": true, "license": "Apache-2.0", "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": "^20.19.0 || ^22.13.0 || >=24" }, "funding": { "url": "https://opencollective.com/eslint" @@ -7120,54 +6442,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@wry/caches": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@wry/caches/-/caches-1.0.1.tgz", - "integrity": "sha512-bXuaUNLVVkD20wcGBWRyo7j9N3TxePEWFZj2Y+r9OoUzfqmavM84+mFykRicNsBqatba5JLay1t48wxaXaWnlA==", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@wry/context": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/@wry/context/-/context-0.7.4.tgz", - "integrity": "sha512-jmT7Sb4ZQWI5iyu3lobQxICu2nC/vbUhP0vIdd6tHC9PTfenmRmuIFqktc6GH9cgi+ZHnsLWPvfSvc4DrYmKiQ==", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@wry/equality": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@wry/equality/-/equality-0.5.7.tgz", - "integrity": "sha512-BRFORjsTuQv5gxcXsuDXx6oGRhuVsEGwZy6LOzRRfgu+eSfxbhUQ9L9YtSEIuIjY/o7g3iWFjrc5eSY1GXP2Dw==", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@wry/trie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@wry/trie/-/trie-0.5.0.tgz", - "integrity": "sha512-FNoYzHawTMk/6KMQoEG5O4PuioX19UbwdQKF44yw0nLfOypfQdjtfZzo/UIJWAJ23sNIFbD1Ug9lbaDGMwbqQA==", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@xobotyi/scrollbar-width": { "version": "1.9.5", "resolved": "https://registry.npmjs.org/@xobotyi/scrollbar-width/-/scrollbar-width-1.9.5.tgz", @@ -7182,6 +6456,19 @@ "dev": true, "license": "BSD-3-Clause" }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/acorn": { "version": "8.15.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", @@ -7229,9 +6516,9 @@ } }, "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", "dev": true, "license": "MIT", "dependencies": { @@ -7339,6 +6626,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "license": "MIT" + }, "node_modules/array-includes": { "version": "3.1.9", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", @@ -7516,6 +6809,15 @@ "dev": true, "license": "MIT" }, + "node_modules/atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/autoprefixer": { "version": "10.4.21", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", @@ -7608,6 +6910,18 @@ "node": "18 || 20 || >=22" } }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.8", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.8.tgz", + "integrity": "sha512-PCLz/LXGBsNTErbtB6i5u4eLpHeMfi93aUv5duMmj6caNu6IphS4q6UevDnL36sZQv9lrP11dbPKGMaXPwMKfQ==", + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/big-integer": { "version": "1.6.52", "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", @@ -7635,6 +6949,57 @@ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", "license": "MIT" }, + "node_modules/body-parser": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", + "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "~1.2.0", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.14.0", + "raw-body": "~2.5.3", + "type-is": "~1.6.18", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", @@ -7714,15 +7079,13 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dependencies": { - "streamsearch": "^1.1.0" - }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", "engines": { - "node": ">=10.16.0" + "node": ">= 0.8" } }, "node_modules/c8": { @@ -8075,20 +7438,6 @@ "node": ">=6" } }, - "node_modules/color": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", - "license": "MIT", - "optional": true, - "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" - }, - "engines": { - "node": ">=12.5.0" - } - }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -8107,17 +7456,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "license": "MIT" }, - "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "license": "MIT", - "optional": true, - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, "node_modules/colorette": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", @@ -8190,6 +7528,27 @@ "dev": true, "license": "MIT" }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", @@ -8197,6 +7556,21 @@ "devOptional": true, "license": "MIT" }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", + "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", + "license": "MIT" + }, "node_modules/copy-to-clipboard": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz", @@ -8414,6 +7788,12 @@ "url": "https://github.com/sponsors/kossnocorp" } }, + "node_modules/date-fns-jalali": { + "version": "4.1.0-0", + "resolved": "https://registry.npmjs.org/date-fns-jalali/-/date-fns-jalali-4.1.0-0.tgz", + "integrity": "sha512-hTIP/z+t+qKwBDcmmsnmjWTduxCg+5KfdqWQvb2X/8C9+knYY6epN/pfxdDuyVlSVeFz0sM5eEfwIUQ70U4ckg==", + "license": "MIT" + }, "node_modules/debounce": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", @@ -8421,9 +7801,9 @@ "license": "MIT" }, "node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -8545,6 +7925,15 @@ "node": ">=0.4.0" } }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/dequal": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", @@ -8554,10 +7943,20 @@ "node": ">=6" } }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, "node_modules/detect-libc": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", - "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", "license": "Apache-2.0", "optional": true, "engines": { @@ -8595,15 +7994,6 @@ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", "license": "Apache-2.0" }, - "node_modules/diff": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, "node_modules/diff-sequences": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", @@ -8620,19 +8010,6 @@ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", "license": "MIT" }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/dom-accessibility-api": { "version": "0.5.16", "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", @@ -8735,6 +8112,12 @@ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "license": "MIT" }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, "node_modules/electron-to-chromium": { "version": "1.5.199", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.199.tgz", @@ -8748,6 +8131,15 @@ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "license": "MIT" }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/entities": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", @@ -9000,6 +8392,12 @@ "node": ">=6" } }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -9013,82 +8411,84 @@ } }, "node_modules/eslint": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", - "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", - "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "version": "9.39.4", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.4.tgz", + "integrity": "sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.1", - "@humanwhocodes/config-array": "^0.13.0", + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.2", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.5", + "@eslint/js": "9.39.4", + "@eslint/plugin-kit": "^0.4.1", + "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.14.0", "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "cross-spawn": "^7.0.6", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", + "minimatch": "^3.1.5", "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, "node_modules/eslint-config-next": { - "version": "15.3.4", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.3.4.tgz", - "integrity": "sha512-WqeumCq57QcTP2lYlV6BRUySfGiBYEXlQ1L0mQ+u4N4X4ZhUVSSQ52WtjqHv60pJ6dD7jn+YZc0d1/ZSsxccvg==", + "version": "16.1.6", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-16.1.6.tgz", + "integrity": "sha512-vKq40io2B0XtkkNDYyleATwblNt8xuh3FWp8SpSz3pt7P01OkBFlKsJZ2mWt5WsCySlDQLckb1zMY9yE9Qy0LA==", "dev": true, "license": "MIT", "dependencies": { - "@next/eslint-plugin-next": "15.3.4", - "@rushstack/eslint-patch": "^1.10.3", - "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", - "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "@next/eslint-plugin-next": "16.1.6", "eslint-import-resolver-node": "^0.3.6", "eslint-import-resolver-typescript": "^3.5.2", - "eslint-plugin-import": "^2.31.0", + "eslint-plugin-import": "^2.32.0", "eslint-plugin-jsx-a11y": "^6.10.0", "eslint-plugin-react": "^7.37.0", - "eslint-plugin-react-hooks": "^5.0.0" + "eslint-plugin-react-hooks": "^7.0.0", + "globals": "16.4.0", + "typescript-eslint": "^8.46.0" }, "peerDependencies": { - "eslint": "^7.23.0 || ^8.0.0 || ^9.0.0", + "eslint": ">=9.0.0", "typescript": ">=3.3.1" }, "peerDependenciesMeta": { @@ -9097,6 +8497,19 @@ } } }, + "node_modules/eslint-config-next/node_modules/globals": { + "version": "16.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.4.0.tgz", + "integrity": "sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/eslint-import-resolver-node": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", @@ -9313,13 +8726,20 @@ } }, "node_modules/eslint-plugin-react-hooks": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", - "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.0.1.tgz", + "integrity": "sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==", "dev": true, "license": "MIT", + "dependencies": { + "@babel/core": "^7.24.4", + "@babel/parser": "^7.24.4", + "hermes-parser": "^0.25.1", + "zod": "^3.25.0 || ^4.0.0", + "zod-validation-error": "^3.5.0 || ^4.0.0" + }, "engines": { - "node": ">=10" + "node": ">=18" }, "peerDependencies": { "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" @@ -9357,9 +8777,9 @@ } }, "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -9367,38 +8787,38 @@ "estraverse": "^5.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, "license": "Apache-2.0", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.9.0", + "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "eslint-visitor-keys": "^4.2.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -9497,6 +8917,15 @@ "node": ">=0.10.0" } }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/eventemitter3": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", @@ -9540,6 +8969,85 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/express": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", + "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "~1.20.3", + "content-disposition": "~0.5.4", + "content-type": "~1.0.4", + "cookie": "~0.7.1", + "cookie-signature": "~1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.3.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "~0.1.12", + "proxy-addr": "~2.0.7", + "qs": "~6.14.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "~0.19.0", + "serve-static": "~1.16.2", + "setprototypeof": "1.2.0", + "statuses": "~2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express-rate-limit": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.3.1.tgz", + "integrity": "sha512-D1dKN+cmyPWuvB+G2SREQDzPY1agpBIcTa9sJxOPMCNeH3gwzhqJRDWCXW3gg0y//+LQ/8j52JbMROWyrKdMdw==", + "license": "MIT", + "dependencies": { + "ip-address": "10.1.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/express-rate-limit" + }, + "peerDependencies": { + "express": ">= 4.11" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -9672,16 +9180,16 @@ } }, "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, "license": "MIT", "dependencies": { - "flat-cache": "^3.0.4" + "flat-cache": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16.0.0" } }, "node_modules/file-saver": { @@ -9723,6 +9231,39 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/finalhandler": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", + "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "statuses": "~2.0.2", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -9741,24 +9282,23 @@ } }, "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, "license": "MIT", "dependencies": { "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "keyv": "^4.5.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16" } }, "node_modules/flatted": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.1.tgz", + "integrity": "sha512-IxfVbRFVlV8V/yRaGzk0UVIcsKKHMSfYw66T/u4nTwlWteQePsxe//LjudR1AMX4tZW3WFCh3Zqa/sjlqpbURQ==", "dev": true, "license": "ISC" }, @@ -9865,6 +9405,15 @@ "node": ">= 12.20" } }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/fraction.js": { "version": "4.3.7", "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", @@ -9879,6 +9428,15 @@ "url": "https://github.com/sponsors/rawify" } }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", @@ -10137,16 +9695,13 @@ } }, "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "dev": true, "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -10187,49 +9742,6 @@ "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", "license": "MIT" }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true, - "license": "MIT" - }, - "node_modules/graphql": { - "version": "16.11.0", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.11.0.tgz", - "integrity": "sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==", - "license": "MIT", - "engines": { - "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" - } - }, - "node_modules/graphql-tag": { - "version": "2.12.6", - "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz", - "integrity": "sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==", - "license": "MIT", - "dependencies": { - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "graphql": "^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" - } - }, - "node_modules/graphql-ws": { - "version": "5.16.2", - "resolved": "https://registry.npmjs.org/graphql-ws/-/graphql-ws-5.16.2.tgz", - "integrity": "sha512-E1uccsZxt/96jH/OwmLPuXMACILs76pKF2i3W861LpKBCYtGIyPQGtWLuBLkND4ox1KHns70e83PS4te50nvPQ==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "graphql": ">=0.11 <=16" - } - }, "node_modules/gray-matter": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", @@ -11093,6 +10605,23 @@ "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", "license": "MIT" }, + "node_modules/hermes-estree": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", + "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==", + "dev": true, + "license": "MIT" + }, + "node_modules/hermes-parser": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", + "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hermes-estree": "0.25.1" + } + }, "node_modules/hoist-non-react-statics": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", @@ -11157,6 +10686,26 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/http-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", @@ -11313,6 +10862,24 @@ "node": ">= 0.4" } }, + "node_modules/ip-address": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", + "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, "node_modules/is-alphabetical": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", @@ -11371,13 +10938,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "license": "MIT", - "optional": true - }, "node_modules/is-async-function": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", @@ -11705,16 +11265,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/is-plain-obj": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", @@ -12043,9 +11593,9 @@ "license": "MIT" }, "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -12231,15 +11781,6 @@ "node": ">=0.10.0" } }, - "node_modules/kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/language-subtag-registry": { "version": "0.3.23", "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", @@ -12358,12 +11899,6 @@ "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "license": "MIT" }, - "node_modules/lodash.escape": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", - "integrity": "sha512-nXEOnb/jK9g0DYMr1/Xvq6l5xMD7GDG55+GSYIYmS0G4tBk/hURD4JR9WCavs04t33WmJx9kCyp9vJ+mr4BOUw==", - "license": "MIT" - }, "node_modules/lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", @@ -12389,12 +11924,6 @@ "integrity": "sha512-lsD+k73XztDsMBKPKvzHXRKFNMohTjoTKIIo4ADLn5dA65LZ1BqlAvSXhR2rPEC3BgAUQnzMnorqDtqn2z4IHA==", "license": "MIT" }, - "node_modules/lodash.unescape": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", - "integrity": "sha512-DhhGRshNS1aX6s5YdBE3njCCouPgnG29ebyHvImlZzXZf2SHgt+J08DHgytTPnpywNbO1Y8mNUFyQuIDBq2JZg==", - "license": "MIT" - }, "node_modules/longest-streak": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", @@ -12517,17 +12046,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/markdown-to-txt": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/markdown-to-txt/-/markdown-to-txt-2.0.1.tgz", - "integrity": "sha512-Hsj7KTN8k1gutlLum3vosHwVZGnv8/cbYKWVkUyo/D1rzOYddbDesILebRfOsaVfjIBJank/AVOySBlHAYqfZw==", - "license": "MIT", - "dependencies": { - "lodash.escape": "^4.0.1", - "lodash.unescape": "^4.0.1", - "marked": "^4.0.14" - } - }, "node_modules/marked": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", @@ -13041,6 +12559,15 @@ "node": ">= 0.6" } }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -13057,6 +12584,15 @@ "node": ">= 8" } }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/micromark": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", @@ -13806,6 +13342,18 @@ "integrity": "sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA==", "license": "MIT" }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -13972,15 +13520,6 @@ } } }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/mrmime": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", @@ -14083,6 +13622,15 @@ "dev": true, "license": "MIT" }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/new-date": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/new-date/-/new-date-1.0.3.tgz", @@ -14093,15 +13641,14 @@ } }, "node_modules/next": { - "version": "15.3.9", - "resolved": "https://registry.npmjs.org/next/-/next-15.3.9.tgz", - "integrity": "sha512-bat50ogkh2esjfkbqmVocL5QunR9RGCSO2oQKFjKeDcEylIgw3JY6CMfGnzoVfXJ9SDLHI546sHmsk90D2ivwQ==", + "version": "16.1.6", + "resolved": "https://registry.npmjs.org/next/-/next-16.1.6.tgz", + "integrity": "sha512-hkyRkcu5x/41KoqnROkfTm2pZVbKxvbZRuNvKXLRXxs3VfyO0WhY50TQS40EuKO9SW3rBj/sF3WbVwDACeMZyw==", "license": "MIT", "dependencies": { - "@next/env": "15.3.9", - "@swc/counter": "0.1.3", + "@next/env": "16.1.6", "@swc/helpers": "0.5.15", - "busboy": "1.6.0", + "baseline-browser-mapping": "^2.8.3", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", "styled-jsx": "5.1.6" @@ -14110,22 +13657,22 @@ "next": "dist/bin/next" }, "engines": { - "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" + "node": ">=20.9.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "15.3.5", - "@next/swc-darwin-x64": "15.3.5", - "@next/swc-linux-arm64-gnu": "15.3.5", - "@next/swc-linux-arm64-musl": "15.3.5", - "@next/swc-linux-x64-gnu": "15.3.5", - "@next/swc-linux-x64-musl": "15.3.5", - "@next/swc-win32-arm64-msvc": "15.3.5", - "@next/swc-win32-x64-msvc": "15.3.5", - "sharp": "^0.34.1" + "@next/swc-darwin-arm64": "16.1.6", + "@next/swc-darwin-x64": "16.1.6", + "@next/swc-linux-arm64-gnu": "16.1.6", + "@next/swc-linux-arm64-musl": "16.1.6", + "@next/swc-linux-x64-gnu": "16.1.6", + "@next/swc-linux-x64-musl": "16.1.6", + "@next/swc-win32-arm64-msvc": "16.1.6", + "@next/swc-win32-x64-msvc": "16.1.6", + "sharp": "^0.34.4" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", - "@playwright/test": "^1.41.2", + "@playwright/test": "^1.51.1", "babel-plugin-react-compiler": "*", "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", @@ -14523,7 +14070,6 @@ "version": "1.13.4", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -14638,6 +14184,27 @@ "integrity": "sha512-z+pI07qxo4c2CulUHCDf9lcqDlMSo72N/4rLUpRXf6fu+q8vjt8y0xS+Tlf8NTJDdTXHbdeO1n3MlbctwEoXZw==", "license": "MIT" }, + "node_modules/on-exit-leak-free": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", + "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/onetime": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", @@ -14692,18 +14259,6 @@ "opener": "bin/opener-bin.js" } }, - "node_modules/optimism": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/optimism/-/optimism-0.18.1.tgz", - "integrity": "sha512-mLXNwWPa9dgFyDqkNi54sjDyNJ9/fTI6WGBLgnXku1vdKY/jovHfZT5r+aiVeFFLOz+foPNOm5YJ4mqgld2GBQ==", - "license": "MIT", - "dependencies": { - "@wry/caches": "^1.0.0", - "@wry/context": "^0.7.0", - "@wry/trie": "^0.5.0", - "tslib": "^2.3.0" - } - }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -14828,6 +14383,15 @@ "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "license": "MIT" }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/path-browserify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", @@ -14881,6 +14445,12 @@ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "license": "ISC" }, + "node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "license": "MIT" + }, "node_modules/pathe": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", @@ -14931,6 +14501,64 @@ "node": ">=0.10.0" } }, + "node_modules/pino": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/pino/-/pino-10.3.1.tgz", + "integrity": "sha512-r34yH/GlQpKZbU1BvFFqOjhISRo1MNx1tWYsYvmj6KIRHSPMT2+yHOEb1SG6NMvRoHRF0a07kCOox/9yakl1vg==", + "license": "MIT", + "dependencies": { + "@pinojs/redact": "^0.4.0", + "atomic-sleep": "^1.0.0", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^3.0.0", + "pino-std-serializers": "^7.0.0", + "process-warning": "^5.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.2.0", + "safe-stable-stringify": "^2.3.1", + "sonic-boom": "^4.0.1", + "thread-stream": "^4.0.0" + }, + "bin": { + "pino": "bin.js" + } + }, + "node_modules/pino-abstract-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-3.0.0.tgz", + "integrity": "sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg==", + "license": "MIT", + "dependencies": { + "split2": "^4.0.0" + } + }, + "node_modules/pino-http": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/pino-http/-/pino-http-11.0.0.tgz", + "integrity": "sha512-wqg5XIAGRRIWtTk8qPGxkbrfiwEWz1lgedVLvhLALudKXvg1/L2lTFgTGPJ4Z2e3qcRmxoFxDuSdMdMGNM6I1g==", + "license": "MIT", + "dependencies": { + "get-caller-file": "^2.0.5", + "pino": "^10.0.0", + "pino-std-serializers": "^7.0.0", + "process-warning": "^5.0.0" + } + }, + "node_modules/pino-std-serializers": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.1.0.tgz", + "integrity": "sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==", + "license": "MIT" + }, + "node_modules/pino/node_modules/safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, "node_modules/pirates": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", @@ -14959,40 +14587,6 @@ "dev": true, "license": "MIT" }, - "node_modules/playwright": { - "version": "1.57.0", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.57.0.tgz", - "integrity": "sha512-ilYQj1s8sr2ppEJ2YVadYBN0Mb3mdo9J0wQ+UuDhzYqURwSoW4n1Xs5vs7ORwgDGmyEh33tRMeS8KhdkMoLXQw==", - "license": "Apache-2.0", - "optional": true, - "peer": true, - "dependencies": { - "playwright-core": "1.57.0" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "fsevents": "2.3.2" - } - }, - "node_modules/playwright-core": { - "version": "1.57.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.57.0.tgz", - "integrity": "sha512-agTcKlMw/mjBWOnD6kFZttAAGHgi/Nw0CZ2o6JqWSbMlI219lAFLZZCyqByTsvVAJq5XA5H8cA6PrvBRpBWEuQ==", - "license": "Apache-2.0", - "optional": true, - "peer": true, - "bin": { - "playwright-core": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, "node_modules/pluralize": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", @@ -15291,6 +14885,22 @@ "node": ">=6" } }, + "node_modules/process-warning": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-5.0.0.tgz", + "integrity": "sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT" + }, "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", @@ -15318,6 +14928,19 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/psl": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", @@ -15340,6 +14963,21 @@ "node": ">=6" } }, + "node_modules/qs": { + "version": "6.14.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz", + "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/query-string": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/query-string/-/query-string-8.2.0.tgz", @@ -15384,10 +15022,52 @@ ], "license": "MIT" }, + "node_modules/quick-format-unescaped": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", + "license": "MIT" + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/react": { - "version": "19.1.5", - "resolved": "https://registry.npmjs.org/react/-/react-19.1.5.tgz", - "integrity": "sha512-lCX00zqONdNfcnJYEL91LuNYzyWFU70vKhApUR08Y1Fi/Y5FGw6l6hAWtlkq+k/vnx463XLm/5dyQp5HAJCw6Q==", + "version": "19.2.4", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", + "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -15404,6 +15084,28 @@ "react-dom": ">=18.0.0" } }, + "node_modules/react-day-picker": { + "version": "9.14.0", + "resolved": "https://registry.npmjs.org/react-day-picker/-/react-day-picker-9.14.0.tgz", + "integrity": "sha512-tBaoDWjPwe0M5pGrum4H0SR6Lyk+BO9oHnp9JbKpGKW2mlraNPgP9BMfsg5pWpwrssARmeqk7YBl2oXutZTaHA==", + "license": "MIT", + "dependencies": { + "@date-fns/tz": "^1.4.1", + "@tabby_ai/hijri-converter": "1.0.5", + "date-fns": "^4.1.0", + "date-fns-jalali": "4.1.0-0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/gpbl" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, "node_modules/react-device-detect": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/react-device-detect/-/react-device-detect-2.2.3.tgz", @@ -15418,15 +15120,15 @@ } }, "node_modules/react-dom": { - "version": "19.1.5", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.5.tgz", - "integrity": "sha512-tvMijysf97vcHla1PNI/aU2apv7f4r0ct0OBk3i3QOBfsVhZzHEuPBLemClkfuw8LroE4FH6kXcQOftf2ntPHQ==", + "version": "19.2.4", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", + "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", "license": "MIT", "dependencies": { - "scheduler": "^0.26.0" + "scheduler": "^0.27.0" }, "peerDependencies": { - "react": "^19.1.5" + "react": "^19.2.4" } }, "node_modules/react-fast-compare": { @@ -15772,6 +15474,15 @@ "node": ">=8.10.0" } }, + "node_modules/real-require": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", + "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + } + }, "node_modules/redoc": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/redoc/-/redoc-2.5.0.tgz", @@ -15896,24 +15607,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/rehackt": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/rehackt/-/rehackt-0.1.0.tgz", - "integrity": "sha512-7kRDOuLHB87D/JESKxQoRwv4DzbIdwkAGQ7p6QKGdVlY1IZheUnVhlk/4UZlNUVxdAXpyxikE3URsG067ybVzw==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "*" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "react": { - "optional": true - } - } - }, "node_modules/rehype-autolink-headings": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/rehype-autolink-headings/-/rehype-autolink-headings-7.1.0.tgz", @@ -16252,43 +15945,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-heading-id": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/remark-heading-id/-/remark-heading-id-1.0.1.tgz", - "integrity": "sha512-GmJjuCeEkYvwFlvn/Skjc/1Qafj71412gbQnrwUmP/tKskmAf1cMRlZRNoovV+aIvsSRkTb2rCmGv2b9RdoJbQ==", - "license": "MIT", - "dependencies": { - "lodash": "^4.17.21", - "unist-util-visit": "^1.4.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/remark-heading-id/node_modules/unist-util-is": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", - "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", - "license": "MIT" - }, - "node_modules/remark-heading-id/node_modules/unist-util-visit": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", - "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", - "license": "MIT", - "dependencies": { - "unist-util-visit-parents": "^2.0.0" - } - }, - "node_modules/remark-heading-id/node_modules/unist-util-visit-parents": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", - "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", - "license": "MIT", - "dependencies": { - "unist-util-is": "^3.0.0" - } - }, "node_modules/remark-mdx": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.1.0.tgz", @@ -16736,18 +16392,6 @@ "queue-microtask": "^1.2.2" } }, - "node_modules/sade": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", - "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", - "license": "MIT", - "dependencies": { - "mri": "^1.1.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/safe-array-concat": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", @@ -16768,6 +16412,26 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/safe-push-apply": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", @@ -16828,9 +16492,9 @@ } }, "node_modules/scheduler": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", - "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", "license": "MIT" }, "node_modules/screenfull": { @@ -16868,6 +16532,60 @@ "semver": "bin/semver.js" } }, + "node_modules/send": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", + "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.4.1", + "range-parser": "~1.2.1", + "statuses": "~2.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/serve-static": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", + "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "~0.19.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", @@ -16925,6 +16643,12 @@ "node": ">= 0.4" } }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, "node_modules/shallow-equal": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/shallow-equal/-/shallow-equal-3.1.0.tgz", @@ -16939,16 +16663,16 @@ "peer": true }, "node_modules/sharp": { - "version": "0.34.3", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.3.tgz", - "integrity": "sha512-eX2IQ6nFohW4DbvHIOLRB3MHFpYqaqvXd3Tp5e/T/dSH83fxaNJQRvDMhASmkNTsNTVF2/OOopzRCt7xokgPfg==", + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", + "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", "hasInstallScript": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "color": "^4.2.3", - "detect-libc": "^2.0.4", - "semver": "^7.7.2" + "@img/colour": "^1.0.0", + "detect-libc": "^2.1.2", + "semver": "^7.7.3" }, "engines": { "node": "^18.17.0 || ^20.3.0 || >=21.0.0" @@ -16957,34 +16681,36 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-darwin-arm64": "0.34.3", - "@img/sharp-darwin-x64": "0.34.3", - "@img/sharp-libvips-darwin-arm64": "1.2.0", - "@img/sharp-libvips-darwin-x64": "1.2.0", - "@img/sharp-libvips-linux-arm": "1.2.0", - "@img/sharp-libvips-linux-arm64": "1.2.0", - "@img/sharp-libvips-linux-ppc64": "1.2.0", - "@img/sharp-libvips-linux-s390x": "1.2.0", - "@img/sharp-libvips-linux-x64": "1.2.0", - "@img/sharp-libvips-linuxmusl-arm64": "1.2.0", - "@img/sharp-libvips-linuxmusl-x64": "1.2.0", - "@img/sharp-linux-arm": "0.34.3", - "@img/sharp-linux-arm64": "0.34.3", - "@img/sharp-linux-ppc64": "0.34.3", - "@img/sharp-linux-s390x": "0.34.3", - "@img/sharp-linux-x64": "0.34.3", - "@img/sharp-linuxmusl-arm64": "0.34.3", - "@img/sharp-linuxmusl-x64": "0.34.3", - "@img/sharp-wasm32": "0.34.3", - "@img/sharp-win32-arm64": "0.34.3", - "@img/sharp-win32-ia32": "0.34.3", - "@img/sharp-win32-x64": "0.34.3" + "@img/sharp-darwin-arm64": "0.34.5", + "@img/sharp-darwin-x64": "0.34.5", + "@img/sharp-libvips-darwin-arm64": "1.2.4", + "@img/sharp-libvips-darwin-x64": "1.2.4", + "@img/sharp-libvips-linux-arm": "1.2.4", + "@img/sharp-libvips-linux-arm64": "1.2.4", + "@img/sharp-libvips-linux-ppc64": "1.2.4", + "@img/sharp-libvips-linux-riscv64": "1.2.4", + "@img/sharp-libvips-linux-s390x": "1.2.4", + "@img/sharp-libvips-linux-x64": "1.2.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", + "@img/sharp-libvips-linuxmusl-x64": "1.2.4", + "@img/sharp-linux-arm": "0.34.5", + "@img/sharp-linux-arm64": "0.34.5", + "@img/sharp-linux-ppc64": "0.34.5", + "@img/sharp-linux-riscv64": "0.34.5", + "@img/sharp-linux-s390x": "0.34.5", + "@img/sharp-linux-x64": "0.34.5", + "@img/sharp-linuxmusl-arm64": "0.34.5", + "@img/sharp-linuxmusl-x64": "0.34.5", + "@img/sharp-wasm32": "0.34.5", + "@img/sharp-win32-arm64": "0.34.5", + "@img/sharp-win32-ia32": "0.34.5", + "@img/sharp-win32-x64": "0.34.5" } }, "node_modules/sharp/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "license": "ISC", "optional": true, "bin": { @@ -17089,7 +16815,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -17109,7 +16834,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -17126,7 +16850,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -17145,7 +16868,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -17175,16 +16897,6 @@ "dev": true, "license": "ISC" }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "license": "MIT", - "optional": true, - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, "node_modules/sirv": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", @@ -17208,6 +16920,15 @@ "node": ">=8.0.0" } }, + "node_modules/sonic-boom": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.1.tgz", + "integrity": "sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==", + "license": "MIT", + "dependencies": { + "atomic-sleep": "^1.0.0" + } + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -17248,6 +16969,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "license": "ISC", + "engines": { + "node": ">= 10.x" + } + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -17313,6 +17043,15 @@ "stacktrace-gps": "^3.0.4" } }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/std-env": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz", @@ -17339,14 +17078,6 @@ "node": ">= 0.4" } }, - "node_modules/streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/string-width": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", @@ -17961,15 +17692,6 @@ "react": "^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, - "node_modules/symbol-observable": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", - "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, "node_modules/symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", @@ -18131,13 +17853,6 @@ "node": ">=8" } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true, - "license": "MIT" - }, "node_modules/thenify": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", @@ -18159,6 +17874,18 @@ "node": ">=0.8" } }, + "node_modules/thread-stream": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-4.0.0.tgz", + "integrity": "sha512-4iMVL6HAINXWf1ZKZjIPcz5wYaOdPhtO8ATvZ+Xqp3BTdaqtAwQkNmKORqcIo5YkQqGXq5cwfswDwMqqQNrpJA==", + "license": "MIT", + "dependencies": { + "real-require": "^0.2.0" + }, + "engines": { + "node": ">=20" + } + }, "node_modules/throttle-debounce": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-2.3.0.tgz", @@ -18176,14 +17903,14 @@ "license": "MIT" }, "node_modules/tinyglobby": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", - "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", "dev": true, "license": "MIT", "dependencies": { - "fdir": "^6.4.4", - "picomatch": "^4.0.2" + "fdir": "^6.5.0", + "picomatch": "^4.0.3" }, "engines": { "node": ">=12.0.0" @@ -18193,11 +17920,14 @@ } }, "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.4.6", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", - "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dev": true, "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, "peerDependencies": { "picomatch": "^3 || ^4" }, @@ -18264,6 +17994,15 @@ "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==", "license": "MIT" }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, "node_modules/totalist": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", @@ -18323,9 +18062,9 @@ } }, "node_modules/ts-api-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", - "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz", + "integrity": "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==", "dev": true, "license": "MIT", "engines": { @@ -18347,18 +18086,6 @@ "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", "license": "Apache-2.0" }, - "node_modules/ts-invariant": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.10.3.tgz", - "integrity": "sha512-uivwYcQaxAucv1CzRp2n/QdYPo4ILf9VXgH19zEIjFx2EJufV16P0JtJVpYHy89DItG6Kwj2oIUjrcK5au+4tQ==", - "license": "MIT", - "dependencies": { - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/ts-keycode-enum": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/ts-keycode-enum/-/ts-keycode-enum-1.0.6.tgz", @@ -18455,19 +18182,6 @@ "node": ">=4" } }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -18563,6 +18277,7 @@ "version": "5.9.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", + "dev": true, "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", @@ -18572,6 +18287,30 @@ "node": ">=14.17" } }, + "node_modules/typescript-eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.57.0.tgz", + "integrity": "sha512-W8GcigEMEeB07xEZol8oJ26rigm3+bfPHxHvwbYUlu1fUDsGuQ7Hiskx5xGW/xM4USc9Ephe3jtv7ZYPQntHeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.57.0", + "@typescript-eslint/parser": "8.57.0", + "@typescript-eslint/typescript-estree": "8.57.0", + "@typescript-eslint/utils": "8.57.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, "node_modules/ua-parser-js": { "version": "1.0.40", "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.40.tgz", @@ -18838,6 +18577,15 @@ "detect-node": "^2.0.4" } }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/unrs-resolver": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz", @@ -19023,6 +18771,15 @@ "node": ">= 4" } }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/uuid": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", @@ -19036,24 +18793,6 @@ "uuid": "dist/esm/bin/uuid" } }, - "node_modules/uvu": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", - "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", - "license": "MIT", - "dependencies": { - "dequal": "^2.0.0", - "diff": "^5.0.0", - "kleur": "^4.0.3", - "sade": "^1.7.3" - }, - "bin": { - "uvu": "bin.js" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/v8-to-istanbul": { "version": "9.3.0", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", @@ -19102,6 +18841,15 @@ "resolved": "https://registry.npmjs.org/validate.io-number/-/validate.io-number-1.0.3.tgz", "integrity": "sha512-kRAyotcbNaSYoDnXvb4MHg/0a1egJdLwS6oJ38TJY7aw9n93Fl/3blIXdyYvPOp55CNxywooG/3BcrwNrBpcSg==" }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/vfile": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", @@ -20978,40 +20726,27 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/zen-observable": { - "version": "0.8.15", - "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.15.tgz", - "integrity": "sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==", - "license": "MIT" - }, - "node_modules/zen-observable-ts": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-1.2.5.tgz", - "integrity": "sha512-QZWQekv6iB72Naeake9hS1KxHlotfRpe+WGNbNx5/ta+R3DNjVO2bswf63gXlWDcs+EMd7XY8HfVQyP1X6T4Zg==", - "license": "MIT", - "dependencies": { - "zen-observable": "0.8.15" - } - }, "node_modules/zod": { - "version": "3.25.76", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", - "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", + "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", + "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" } }, "node_modules/zod-validation-error": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-1.5.0.tgz", - "integrity": "sha512-/7eFkAI4qV0tcxMBB/3+d2c1P6jzzZYdYSlBuAklzMuCrJu5bzJfHS0yVAS87dRHVlhftd6RFJDIvv03JgkSbw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz", + "integrity": "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==", + "dev": true, "license": "MIT", "engines": { - "node": ">=16.0.0" + "node": ">=18.0.0" }, "peerDependencies": { - "zod": "^3.18.0" + "zod": "^3.25.0 || ^4.0.0" } }, "node_modules/zustand": { diff --git a/package.json b/package.json index cea9e65372..794794f3e1 100644 --- a/package.json +++ b/package.json @@ -6,11 +6,10 @@ "homepage": "https://docs.pantheon.io", "author": "@pantheon-systems", "scripts": { - "update": "tsx seed/update.ts", "build": "next build", "coverage": "vitest run --coverage", "dev": "next dev -p 3002", - "lint": "next lint", + "lint": "eslint . --ext .js,.jsx,.ts,.tsx", "prettier": "prettier \"**/*.{js,jsx,md}\" --check --ignore-path .prettierignore", "prettier:fix": "prettier \"**/*.{js,jsx,,md}\" --write --ignore-path .prettierignore", "start": "next start", @@ -21,10 +20,8 @@ "dependencies": { "@adobe/mdast-util-gridtables": "^4.0.13", "@adobe/remark-gridtables": "^3.0.14", - "@next/bundle-analyzer": "^15.4.5", - "@pantheon-systems/pcc-react-sdk": "3.13.0-beta.2", - "@pantheon-systems/pcc-sdk-core": "3.13.0-beta.2", - "@pantheon-systems/pds-toolkit-react": "1.0.0-dev.256", + "@next/bundle-analyzer": "^16.1.6", + "@pantheon-systems/pds-toolkit-react": "^1.10.0", "@radix-ui/react-popover": "^1.1.14", "@radix-ui/react-slot": "^1.2.3", "@segment/analytics-next": "^1.81.1", @@ -49,11 +46,11 @@ "lodash": "^4.17.21", "lodash.debounce": "^4.0.8", "lodash.trimend": "^4.5.1", - "next": "15.3.9", + "next": "16.1.6", "prismjs": "^1.30.0", "query-string": "^8.2.0", - "react": "19.1.5", - "react-dom": "19.1.5", + "react": "19.2.4", + "react-dom": "19.2.4", "react-icons": "^5.5.0", "react-infinite-scroll-component": "^6.1.0", "react-loading-skeleton": "^3.5.0", @@ -89,8 +86,8 @@ "@vitejs/plugin-react": "^4.7.0", "autoprefixer": "^10.4.21", "c8": "^7.14.0", - "eslint": "^8.57.1", - "eslint-config-next": "15.3.4", + "eslint": "^9.0.0", + "eslint-config-next": "16.1.6", "js-yaml": "^4.1.0", "jsdom": "^22.1.0", "postcss": "^8.5.6", @@ -107,10 +104,9 @@ "node": "22.x" }, "overrides": { - "react": "19.1.5", - "react-dom": "19.1.5", + "react": "19.2.4", + "react-dom": "19.2.4", "glob": "10.5.0", - "playwright": "1.57.0", "fast-xml-parser": "4.5.4", "@remix-run/router": "1.23.2", "rollup": "4.59.0", diff --git a/playwright-tests/render-all-omni-paths-batched.spec.ts b/playwright-tests/render-all-omni-paths-batched.spec.ts deleted file mode 100644 index 3a0115208c..0000000000 --- a/playwright-tests/render-all-omni-paths-batched.spec.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { test, expect } from "@playwright/test"; -import urls from "./urls.json"; - -test.describe.parallel("Page render checks", () => { - test.setTimeout(60_000); - for (const url of urls) { - test(`Page loads without error: ${url}`, async ({ page }) => { - console.log(`Testing ${url}`); - const consoleErrors: string[] = []; - - page.on("pageerror", (error) => { - consoleErrors.push(error.message); - }); - - page.on("console", (msg) => { - if (msg.type() === "error") { - consoleErrors.push(msg.text()); - } - }); - - const response = await page.goto(url, { waitUntil: "networkidle" }); - expect(response?.ok()).toBeTruthy(); // HTTP status check - - // Optional: check for a body or main wrapper - await expect(page.locator("body")).toBeVisible(); - - // Optional: Fail test if JS errors are found - expect(consoleErrors).toEqual([]); - }); - } -}); diff --git a/playwright-tests/render-all-omni-paths.spec.ts b/playwright-tests/render-all-omni-paths.spec.ts deleted file mode 100644 index e6dc64580d..0000000000 --- a/playwright-tests/render-all-omni-paths.spec.ts +++ /dev/null @@ -1,99 +0,0 @@ -import { test, expect } from "@playwright/test"; -import { getOmniItems } from "@/components/omni-components"; -import { OmniItem } from "@/components/omni-components/helpers"; - -const visitOmniItemRecursively = async ( - page: any, - item: OmniItem, - depth = 0 -) => { - console.log(`Visiting at depth ${depth}`, `${item.link}`); - - let slug = item.link; - if (slug.startsWith("/")) { - slug = slug.slice(1); - } - - if (slug.endsWith("/")) { - slug = slug.slice(0, -1); - } - - try { - await page.goto(`/${slug}`, { - waitUntil: "networkidle", - timeout: 30000, - }); - - // Wait for the page to be fully loaded - await page.waitForLoadState("domcontentloaded"); - - // Check if the page loaded successfully (not a 404 or error page) - const title = await page.title(); - console.log(`Successfully visited ${item.link} - Title: ${title}`); - - // For example, check if the page has some expected content - const bodyText = await page.textContent("body"); - if (bodyText && bodyText.length > 0) { - console.log( - `Page ${item.link} has content (${bodyText.length} characters)` - ); - } else { - console.warn(`Page ${item.link} appears to have no content`); - } - } catch (error) { - console.error(`Failed to visit ${item.link}: ${error}`); - // Don't throw the error to continue with other pages - } - - // Recursively visit children - if (item.children) { - for (const child of item.children) { - await visitOmniItemRecursively(page, child, depth + 1); - } - } -}; - -// Helper function to flatten all omni items into a single array -const flattenOmniItems = (items: OmniItem[]): OmniItem[] => { - const flattened: OmniItem[] = []; - - const flatten = (item: OmniItem) => { - flattened.push(item); - if (item.children) { - item.children.forEach(flatten); - } - }; - - items.forEach(flatten); - return flattened; -}; - -// Create individual tests for each omni item to enable parallelization -test.describe("render all omni paths in parallel", () => { - let allItems: OmniItem[] = []; - - test.beforeAll(async () => { - const items = await getOmniItems(); - allItems = flattenOmniItems(items); - console.log( - `Found ${allItems.length} total omni items to test in parallel` - ); - }); - - // Create a test for each item - this enables parallel execution - for (let i = 0; i < allItems.length; i++) { - const item = allItems[i]; - - test(`render ${item.link}`, async ({ page }) => { - test.setTimeout(60000); // 1 minute per item - - try { - await visitOmniItemRecursively(page, item); - console.log(`Completed testing ${item.link}`); - } catch (error) { - console.error(`Failed to test ${item.link}: ${error}`); - throw error; // Re-throw to mark test as failed - } - }); - } -}); diff --git a/playwright-tests/urls.json b/playwright-tests/urls.json deleted file mode 100644 index 7e59729395..0000000000 --- a/playwright-tests/urls.json +++ /dev/null @@ -1,698 +0,0 @@ -[ - "/", - "/get-started", - "/guides/getstarted", - "/guides/getstarted/signup", - "/guides/getstarted/team", - "/guides/getstarted/addsite", - "/guides/getstarted/purchase", - "/guides/getstarted/launch", - "/guides/getstarted/nextsteps", - "/products", - "/required-reading", - "/tldr", - "/guides/platform-considerations", - "/guides/platform-considerations/platform-site-info", - "/guides/platform-considerations/platform-security", - "/guides/platform-considerations/media-email-support", - "/guides/platform-considerations/php-platform", - "/guides/platform-considerations/terminus-platform", - "/guides/guided", - "/guides/guided/prepare", - "/guides/guided/migrate", - "/guides/guided/troubleshooting", - "/guides/guided/faq", - "/migrate-manual", - "/migrate-wordpress-multisite", - "/unwind-drupal-multisite", - "/guides/kinsta", - "/guides/kinsta/prepare", - "/guides/kinsta/migrate", - "/guides/kinsta/troubleshooting", - "/guides/kinsta/faq", - "/guides/pagely", - "/guides/pagely/prepare", - "/guides/pagely/migrate", - "/guides/pagely/troubleshooting", - "/guides/pagely/faq", - "/guides/wordpressvip", - "/guides/wordpressvip/prepare", - "/guides/wordpressvip/migrate", - "/guides/wordpressvip/troubleshooting", - "/guides/wordpressvip/faq", - "/guides/wpengine", - "/guides/wpengine/prepare", - "/guides/wpengine/migrate", - "/guides/wpengine/troubleshooting", - "/guides/wpengine/faq", - "/guides/platformsh", - "/guides/platformsh/prepare", - "/guides/platformsh/migrate", - "/guides/platformsh/troubleshooting", - "/guides/platformsh/faq", - "/guides/acquia", - "/guides/acquia/prepare", - "/guides/acquia/migrate", - "/guides/acquia/troubleshooting", - "/guides/acquia/faq", - "/migrate-cpanel", - "/guides/drupal-unhosted-composer", - "/guides/drupal-unhosted-composer/prepare", - "/guides/drupal-unhosted-composer/contrib-custom", - "/guides/drupal-unhosted-composer/deploy-dev", - "/guides/drupal-unhosted-composer/database", - "/guides/drupal-unhosted-composer/files", - "/guides/drupal-unhosted-composer/deploy-live", - "/guides/drupal-unhosted-composer/troubleshooting", - "/guides/drupal-unhosted", - "/guides/drupal-unhosted/prepare", - "/guides/drupal-unhosted/copy-config", - "/guides/drupal-unhosted/contrib-custom", - "/guides/drupal-unhosted/deploy-dev", - "/guides/drupal-unhosted/add-database", - "/guides/drupal-unhosted/upload-files", - "/guides/drupal-unhosted/deploy", - "/guides/drupal-unhosted/troubleshooting", - "/add-site-clone", - "/dashboard", - "/site-dashboard", - "/personal-settings", - "/add-site-custom-upstream", - "/faq", - "/develop", - "/pantheon-workflow", - "/start-state", - "/guides/multidev", - "/guides/multidev/create-multidev", - "/guides/multidev/access-branch", - "/guides/multidev/clone-content", - "/guides/multidev/edit-multidev", - "/guides/multidev/compare-environments", - "/guides/multidev/delete-multidev", - "/guides/multidev/multidev-faq", - "/guides/environment-configuration", - "/guides/environment-configuration/read-environment-config", - "/guides/environment-configuration/environment-indicator", - "/guides/environment-configuration/environment-specific-config", - "/guides/environment-configuration/environment-specific-config-drupal", - "/guides/environment-configuration/restore-environment-backup", - "/connection-modes", - "/guides/sftp", - "/guides/sftp/sftp-connection-info", - "/guides/sftp/sftp-development", - "/guides/sftp/rsync-and-sftp", - "/guides/sftp/vscode-sftp", - "/guides/sftp/winscp", - "/guides/sftp/port-2222", - "/guides/sftp/troubleshooting-sftp", - "/guides/git", - "/guides/git/git-config", - "/guides/git/collaborative-development", - "/guides/git/useful-commands", - "/guides/git/undo-commits", - "/guides/git/resolve-merge-conflicts", - "/guides/git/faq-git", - "/guides/git/troubleshooting", - "/guides/git/hotfixes", - "/core-updates", - "/workflow-logs", - "/content-staging", - "/guides/integrated-composer", - "/guides/integrated-composer/create", - "/guides/integrated-composer/dependencies", - "/guides/integrated-composer/ic-upstreams", - "/guides/integrated-composer/ic-support", - "/guides/integrated-composer/ic-troubleshooting", - "/composer-convert", - "/composer-convert-from-empty", - "/upgrade-drupal-with-ic-to-latest", - "/automate", - "/continuous-integration", - "/github-application", - "/github-actions", - "/guides/build-tools", - "/guides/build-tools/create-project", - "/guides/build-tools/pr-workflow", - "/guides/build-tools/configure", - "/guides/build-tools/extend", - "/guides/build-tools/tests", - "/guides/build-tools/merge", - "/guides/build-tools/custom-theme", - "/guides/build-tools/update", - "/deploybot", - "/jenkins", - "/behat", - "/guides/quicksilver", - "/guides/quicksilver/install-script", - "/guides/quicksilver/hooks", - "/guides/quicksilver/variables", - "/guides/quicksilver/asana", - "/guides/quicksilver/jira", - "/guides/quicksilver/trello", - "/guides/quicksilver/troubleshoot-quicksilver", - "/guides/backups", - "/guides/backups/access-backups", - "/guides/backups/create-backups", - "/guides/backups/restore-from-backup", - "/guides/backups/code-archives-backups-log", - "/guides/backups/faqs-backups", - "/guides/local-development", - "/guides/local-development/configuration", - "/guides/local-development/lando-wordpress", - "/guides/local-development/ddev", - "/guides/local-development/wordpress-phpstorm", - "/guides/local-development/drupal-phpstorm", - "/guides/local-development/visual-studio-code", - "/guides/local-development/graphql-requests", - "/guides/local-development/cygwin-windows", - "/guides/local-development/continuous-integration", - "/guides/local-development/jenkins", - "/content-publisher", - "/go-live", - "/guides/launch", - "/guides/launch/create-site-launch", - "/guides/launch/plans", - "/guides/launch/domains", - "/guides/launch/advanced-curls", - "/guides/launch/configure-dns", - "/guides/launch/redirects", - "/guides/launch/launch-check", - "/guides/launch/next-steps", - "/guides/domains", - "/guides/domains/dns", - "/guides/domains/platform-domains", - "/guides/domains/primary-domain", - "/guides/domains/custom-domains", - "/guides/domains/vanity-domains", - "/guides/domains/hosts-file", - "/guides/domains/domain-hijacking", - "/guides/domains/domains-faq", - "/guides/domains/troubleshooting", - "/dns-providers", - "/1-and-1", - "/route53", - "/cloudflare", - "/dreamhost", - "/dns-made-easy", - "/dyn", - "/enom", - "/gandi", - "/godaddy", - "/namecheap", - "/network-solutions", - "/relaunch", - "/http-to-https", - "/platform", - "/application-containers", - "/php-runtime-generation-2", - "/horizontal-scalability", - "/single-application-sites", - "/guides/php", - "/guides/php/php-versions", - "/guides/php/settings-php", - "/guides/php/wp-config-php", - "/guides/php/wordpress-sessions", - "/guides/php/php-errors", - "/guides/php/php-slow-log", - "/guides/php/deprecated-constructor-notices", - "/pantheon-yml", - "/nested-docroot", - "/server_name-and-server_port", - "/date-and-time", - "/outgoing-ips", - "/client-ip", - "/guides/logs-pantheon", - "/guides/logs-pantheon/access-logs", - "/guides/logs-pantheon/automate-log-downloads", - "/guides/logs-pantheon/nginx-access-logs", - "/guides/logs-pantheon/faq-logs", - "/multizone-failover", - "/regions", - "/external-libraries", - "/email", - "/sendgrid", - "/rerouting-outbound-email", - "/cache", - "/object-cache", - "/object-cache/cli", - "/object-cache/drupal", - "/object-cache/errors", - "/object-cache/faq", - "/object-cache/remove", - "/object-cache/wordpress", - "/object-cache/wordpress-deprecated", - "/apcu", - "/guides/global-cdn", - "/guides/global-cdn/experience-protection", - "/guides/global-cdn/global-cdn-caching", - "/guides/global-cdn/test-global-cdn-caching", - "/guides/global-cdn/https", - "/guides/global-cdn/global-cdn-faq", - "/guides/agcdn", - "/guides/agcdn/agcdn-features", - "/guides/agcdn/agcdn-wafio", - "/guides/agcdn/submit-request", - "/guides/agcdn/agcdn-faq", - "/clear-caches", - "/drupal-cache", - "/caching-advanced-topics", - "/cookies", - "/pantheon_stripped", - "/cache-control", - "/drupal-cloudfront", - "/guides/fastly-pantheon", - "/guides/fastly-pantheon/connect-fastly", - "/guides/fastly-pantheon/fastly-amazon-s3", - "/guides/fastly-pantheon/fastly-datadog", - "/guides/fastly-pantheon/fastly-new-relic", - "/guides/fastly-pantheon/fastly-sftp", - "/guides/fastly-pantheon/fastly-splunk", - "/guides/fastly-pantheon/fastly-syslog", - "/guides/fastly-pantheon/fastly-faq", - "/guides/mariadb-mysql", - "/guides/mariadb-mysql/mysql-access", - "/guides/mariadb-mysql/mysql-workbench", - "/guides/mariadb-mysql/database-workflow-tool", - "/guides/mariadb-mysql/myisam-to-innodb", - "/guides/mariadb-mysql/kill-mysql-queries", - "/guides/mariadb-mysql/mysql-slow-log", - "/guides/mariadb-mysql/database-connection-errors", - "/guides/mariadb-mysql/mariadb-mysql-faq", - "/guides/filesystem", - "/guides/filesystem/batch-files", - "/guides/filesystem/large-files", - "/guides/filesystem/files-directories", - "/guides/filesystem/tmp", - "/guides/filesystem/troubleshooting", - "/drupal-s3", - "/guides/wordpress-developer/wordpress-s3?double-menu", - "/pantheon-search/solr", - "/guides/pantheon-search/solr-drupal", - "/guides/pantheon-search/solr-drupal/solr-drupal", - "/guides/pantheon-search/solr-drupal/custom-config", - "/guides/pantheon-search/solr-drupal/solr-drupal-7", - "/opensolr", - "/guides/redirect", - "/guides/redirect/https", - "/guides/redirect/primary-domain", - "/guides/redirect/php", - "/guides/redirect/advanced", - "/guides/redirect/mobile", - "/develop-drupal", - "/drupal-cms", - "/supported-drupal", - "/modules", - "/drupal-launch-check", - "/drupal-configuration-management", - "/services-yml", - "/drupal-cron", - "/drupal-caching-views", - "/drupal-from-dist", - "/drupal-broken-links", - "/cloud-optimization", - "/develop-wordpress", - "/guides/wordpress-pantheon", - "/guides/wordpress-pantheon/create-wp-site", - "/guides/wordpress-pantheon/migrate-existing-wp-site", - "/guides/wordpress-pantheon/wordpress-launch-check", - "/guides/wordpress-pantheon/plugins-recommended", - "/guides/wordpress-pantheon/plugins", - "/guides/wordpress-pantheon/wp-optimization", - "/guides/wordpress-pantheon/wordpress-developers", - "/guides/wordpress-pantheon/wp-security", - "/guides/wordpress-pantheon/wp-content-management", - "/guides/wordpress-pantheon/troubleshooting", - "/guides/wordpress-developer", - "/guides/wordpress-developer/wordpress-best-practices", - "/guides/wordpress-developer/wordpress-development-versions", - "/guides/wordpress-developer/xml-rpc-attacks", - "/guides/wordpress-developer/wordpress-login-attacks", - "/guides/wordpress-developer/wordpress-cron", - "/guides/wordpress-developer/wordpress-s3", - "/guides/wordpress-developer/wordpress-gcs", - "/guides/wordpress-developer/wordpress-broken-links", - "/guides/pantheon-search/solr/wordpress-solr", - "/guides/wordpress-developer/wordpress-secrets-management", - "/guides/wordpress-developer/performant-translations", - "/guides/wordpress-configurations", - "/guides/wordpress-configurations/plugins", - "/guides/wordpress-configurations/mu-plugin", - "/guides/wordpress-configurations/wp-cfm", - "/guides/wordpress-configurations/wordpress-cache-plugin", - "/guides/wordpress-configurations/wordpress-custom-code", - "/guides/wordpress-configurations/wordpress-font-library", - "/guides/wordpress-configurations/installing-updating-from-third-party-sources", - "/guides/wordpress-configurations/sendgrid-wordpress-wp-mail-smtp", - "/guides/multisite", - "/guides/multisite/considerations", - "/guides/multisite/config", - "/guides/multisite/multisite-governance", - "/guides/multisite/workflows", - "/guides/multisite/search-replace", - "/guides/multisite/debug", - "/guides/woocommerce", - "/guides/woocommerce/store-setup", - "/guides/woocommerce/configure", - "/guides/woocommerce/commit", - "/guides/woocommerce/initialize-prod", - "/guides/woocommerce/develop", - "/guides/woocommerce/launch", - "/supported-wp", - "/optimize-wp-options-table-autoloaded-data", - "/guides/decoupled", - "/guides/decoupled/overview", - "/guides/decoupled/overview/considerations", - "/guides/decoupled/overview/site-options", - "/guides/decoupled/overview/site", - "/guides/decoupled/overview/manage-settings", - "/guides/decoupled/overview/fes-multidev", - "/guides/decoupled/overview/support", - "/guides/decoupled/overview/faq", - "/guides/decoupled/overview/troubleshooting", - "/guides/decoupled/overview/v1-pipeline", - "/guides/decoupled/wp-nextjs-frontend-starters", - "/guides/decoupled/wp-nextjs-frontend-starters/create", - "/guides/decoupled/wp-nextjs-frontend-starters/build-details", - "/guides/decoupled/wp-nextjs-frontend-starters/caching", - "/guides/decoupled/wp-nextjs-frontend-starters/manage-settings", - "/guides/decoupled/wp-nextjs-frontend-starters/content-preview", - "/guides/decoupled/wp-nextjs-frontend-starters/robots-indexing", - "/guides/decoupled/wp-backend-starters", - "/guides/decoupled/wp-backend-starters/create", - "/guides/decoupled/wp-backend-starters/caching", - "/guides/decoupled/wp-backend-starters/manage-settings", - "/guides/decoupled/wp-backend-starters/build-hooks", - "/guides/decoupled/wp-gatsby-frontend-starters", - "/guides/decoupled/wp-gatsby-frontend-starters/create", - "/guides/decoupled/wp-gatsby-frontend-starters/build-details", - "/guides/decoupled/wp-gatsby-frontend-starters/manage-settings", - "/guides/decoupled/wp-gatsby-frontend-starters/robots-indexing", - "/guides/decoupled/drupal-backend-starters", - "/guides/decoupled/drupal-backend-starters/create", - "/guides/decoupled/drupal-backend-starters/caching", - "/guides/decoupled/drupal-backend-starters/manage-settings", - "/guides/decoupled/drupal-backend-starters/build-hooks", - "/guides/decoupled/drupal-nextjs-frontend-starters", - "/guides/decoupled/drupal-nextjs-frontend-starters/create", - "/guides/decoupled/drupal-nextjs-frontend-starters/build-details", - "/guides/decoupled/drupal-nextjs-frontend-starters/caching", - "/guides/decoupled/drupal-nextjs-frontend-starters/manage-settings", - "/guides/decoupled/drupal-nextjs-frontend-starters/content-preview", - "/guides/decoupled/drupal-nextjs-frontend-starters/robots-indexing", - "/guides/decoupled/no-starter-kit", - "/guides/decoupled/no-starter-kit/create", - "/guides/decoupled/no-starter-kit/import-repo", - "/guides/decoupled/no-starter-kit/any-framework", - "/guides/decoupled/no-starter-kit/build-details", - "/guides/decoupled/no-starter-kit/manage-settings", - "/static-site-empty-upstream", - "/addons", - "/integrations", - "/guides/account-mgmt", - "/guides/account-mgmt/account", - "/guides/account-mgmt/account/types", - "/guides/account-mgmt/account/recover", - "/guides/account-mgmt/account/delete", - "/guides/account-mgmt/billing", - "/guides/account-mgmt/billing/periods", - "/guides/account-mgmt/billing/methods", - "/guides/account-mgmt/billing/invoices", - "/guides/account-mgmt/billing/transfer", - "/guides/account-mgmt/billing/troubleshooting", - "/guides/enterprise-billing-center", - "/guides/enterprise-billing-center/invoices", - "/guides/enterprise-billing-center/site-portfolio-report", - "/guides/enterprise-billing-center/interacting", - "/guides/enterprise-billing-center/faq", - "/guides/account-mgmt/plans", - "/guides/account-mgmt/plans/resources", - "/guides/account-mgmt/plans/pricing", - "/guides/account-mgmt/plans/site-plans", - "/guides/account-mgmt/plans/workspace-plans", - "/guides/account-mgmt/plans/faq", - "/guides/account-mgmt/traffic", - "/guides/account-mgmt/traffic/overages", - "/guides/account-mgmt/traffic/remedy", - "/tax-exempt-status", - "/guides/sso", - "/guides/sso/sso", - "/guides/sso/sso-organizations", - "/guides/sso/shibboleth-sso", - "/ldap-and-ldaps", - "/guides/wordpress-google-sso", - "/guides/wordpress-google-sso/install", - "/guides/wordpress-google-sso/saml-app", - "/guides/wordpress-google-sso/access-and-mappings", - "/guides/wordpress-google-sso/going-live", - "/guides/wordpress-google-sso/advanced-configuration", - "/guides/account-mgmt/workspace-sites-teams", - "/guides/account-mgmt/workspace-sites-teams/workspaces", - "/guides/account-mgmt/workspace-sites-teams/sites", - "/guides/account-mgmt/workspace-sites-teams/teams", - "/guides/account-mgmt/workspace-sites-teams/offboard", - "/guides/account-mgmt/workspace-sites-teams/tools", - "/guides/custom-upstream", - "/guides/custom-upstream/create-custom-upstream", - "/guides/custom-upstream/manage-dependencies-custom-upstream", - "/guides/custom-upstream/edit-custom-upstream", - "/guides/custom-upstream/delete-custom-upstream", - "/guides/custom-upstream/maintain-custom-upstream", - "/guides/custom-upstream/switch-custom-upstream", - "/guides/custom-upstream/test-custom-upstream", - "/guides/custom-upstream/troubleshooting", - "/guides/autopilot", - "/guides/autopilot/autopilot-preconfiguration", - "/guides/autopilot/enable-autopilot", - "/guides/autopilot/tests-results", - "/guides/autopilot/apply-updates", - "/guides/autopilot/autopilot-deactivate", - "/guides/autopilot/troubleshoot-autopilot", - "/guides/autopilot/autopilot-faq", - "/guides/autopilot-custom-upstream", - "/guides/autopilot-custom-upstream/autopilot-custom-upstream-config", - "/guides/autopilot-custom-upstream/wp-autopilot-custom-upstream", - "/terminus", - "/terminus/install", - "/terminus/examples", - "/terminus/commands", - "/terminus/scripting", - "/terminus/plugins", - "/terminus/directory", - "/terminus/create", - "/terminus/configuration", - "/terminus/supported-terminus", - "/terminus/updates", - "/terminus/terminus-4-0", - "/terminus/terminus-3-0", - "/machine-tokens", - "/ssh-keys", - "/terminus/ci/bitbucket", - "/terminus/ci/circleci", - "/terminus/ci/github-actions", - "/terminus/ci/gitlab", - "/customer-scheduled-cron-jobs", - "/guides/wp-cli", - "/guides/create-wp-site", - "/guides/wp-cli/wp-cli-global-parameters", - "/guides/wp-cli/install-wp-plugins-themes", - "/guides/wp-cli/wp-cli-sql-php-subcommands", - "/guides/wp-cli/wp-cli-pantheon-commands", - "/guides/wp-cli/wp-cli-troubleshoot", - "/guides/drush", - "/guides/drush/drush-versions", - "/guides/drush/drush-commands", - "/guides/drush/drush-import", - "/guides/drush/drush-aliases", - "/guides/drush/drush-sql-queries", - "/guides/drush/drush-known-limitations", - "/guides/drush/troubleshoot-drush", - "/support", - "/guides/support", - "/guides/support/contact-support", - "/guides/support/support-ticket", - "/guides/support/early-access", - "/guides/support/har", - "/guides/support/curl", - "/guides/support/faq", - "/oss-support-levels", - "/guides/disaster-recovery", - "/guides/disaster-recovery/planning-ahead", - "/guides/disaster-recovery/site-goes-down", - "/guides/disaster-recovery/incident-remediation", - "/guides/professional-services", - "/guides/professional-services/website-migration-service", - "/guides/professional-services/onboarding", - "/guides/professional-services/application-performance", - "/guides/professional-services/advanced-global-cdn", - "/guides/professional-services/managed-updates", - "/troubleshoot", - "/basic-troubleshooting", - "/wordpress-known-issues", - "/modules-known-issues", - "/symlinks-assumed-write-access", - "/timeouts", - "/debug-connections", - "/guides/errors-and-server-responses", - "/guides/errors-and-server-responses/4xx-errors", - "/guides/errors-and-server-responses/5xx-errors", - "/guides/errors-and-server-responses/retries-server-containers", - "/guides/errors-and-server-responses/external-web-service-calls", - "/guides/errors-and-server-responses/overloaded-workers", - "/guides/errors-and-server-responses/slow-and-high-queries", - "/mime-types", - "/resetting-passwords", - "/local-dns-cache", - "/tls-compatibility", - "/performance", - "/debug-slow-performance", - "/debug-cache", - "/bots-and-indexing", - "/spider-traps", - "/guides/new-relic", - "/guides/new-relic/activate-new-relic", - "/guides/new-relic/monitor-new-relic", - "/guides/new-relic/new-relic-quicksilver", - "/guides/new-relic/debug-mysql-new-relic", - "/guides/new-relic/troubleshoot-new-relic", - "/guides/new-relic/new-relic-faq", - "/guides/frontend-performance", - "/guides/frontend-performance/metrics", - "/guides/frontend-performance/diagnostics", - "/guides/frontend-performance/caching", - "/guides/frontend-performance/media", - "/guides/frontend-performance/code-css", - "/guides/frontend-performance/queries", - "/guides/frontend-performance/static", - "/guides/frontend-performance/redirects", - "/guides/frontend-performance/additional-resources", - "/load-and-performance-testing", - "/load-testing-with-blazemeter", - "/drupal-migration", - "/guides/drupal-hosted-md", - "/guides/drupal-hosted-md/prepare", - "/guides/drupal-hosted-md/drupal-core-version", - "/guides/drupal-hosted-md/core-updates", - "/guides/drupal-hosted-md/deploy", - "/guides/drupal-hosted-md/troubleshooting", - "/guides/drupal-hosted", - "/guides/drupal-hosted/prepare", - "/guides/drupal-hosted/create-site", - "/guides/drupal-hosted/code", - "/guides/drupal-hosted/deploy", - "/guides/drupal-hosted/troubleshooting", - "/guides/drupal-hosted-createempty-md", - "/guides/drupal-hosted-createempty-md/prepare", - "/guides/drupal-hosted-createempty-md/composer-upstream", - "/guides/drupal-hosted-createempty-md/contrib-custom", - "/guides/drupal-hosted-createempty-md/deploy-dev", - "/guides/drupal-hosted-createempty-md/change-upstream", - "/guides/drupal-hosted-createempty-md/dependency-versions", - "/guides/drupal-hosted-createempty-md/deploy-live", - "/guides/drupal-hosted-createempty-md/troubleshooting", - "/guides/drupal-hosted-createdashboard-set8", - "/guides/drupal-hosted-createdashboard-set8/prepare", - "/guides/drupal-hosted-createdashboard-set8/drupal-core-version", - "/guides/drupal-hosted-createdashboard-set8/core-updates", - "/guides/drupal-hosted-createdashboard-set8/deploy", - "/guides/drupal-hosted-createdashboard-set8/troubleshooting", - "/guides/drupal-hosted-createcustom", - "/guides/drupal-hosted-createcustom/new-branch", - "/guides/drupal-hosted-createcustom/dependencies", - "/guides/drupal-hosted-createcustom/contrib-custom", - "/guides/drupal-hosted-createcustom/site-customizations", - "/guides/drupal-hosted-createcustom/deploy-dev", - "/guides/drupal-hosted-createcustom/deploy-live", - "/guides/drupal-hosted-createcustom/troubleshooting", - "/guides/drupal-hosted-btworkflow", - "/guides/drupal-hosted-btworkflow/prepare", - "/guides/drupal-hosted-btworkflow/copy-config", - "/guides/drupal-hosted-btworkflow/contrib-custom", - "/guides/drupal-hosted-btworkflow/database", - "/guides/drupal-hosted-btworkflow/backup-token", - "/guides/drupal-hosted-btworkflow/upload-files", - "/guides/drupal-hosted-btworkflow/restore-token", - "/guides/drupal-hosted-btworkflow/deploy", - "/guides/drupal-hosted-btworkflow/troubleshooting", - "/guides/drupal-hosted-createbt", - "/guides/drupal-hosted-createbt/prepare", - "/guides/drupal-hosted-createbt/upgrade", - "/guides/drupal-hosted-createbt/core", - "/guides/drupal-hosted-createbt/mariadb", - "/guides/drupal-hosted-createbt/deploy", - "/guides/drupal-hosted-createbt/troubleshooting", - "/switch-drupal-recommended-upstream", - "/drupal-to-build-tools", - "/monthly-maintenance", - "/platform-notifications", - "/guides/security", - "/guides/secure-development", - "/guides/secure-development/secure-integration", - "/guides/secure-development/security-tool", - "/guides/secure-development/private-paths", - "/guides/secure-development/two-factor-authentication", - "/guides/secure-development/ssh-tunnels", - "/guides/secure-development/secure-runtime-access", - "/guides/secure-development/phpinfo", - "/guides/secrets", - "/guides/secrets/overview", - "/guides/secrets/php", - "/guides/secrets/drupal", - "/guides/secrets/composer", - "/guides/secrets/local", - "/guides/secrets/troubleshooting", - "/custom-certificates", - "/certificate-bundles", - "/clamav", - "/drupal-security-patches", - "/learning", - "/certification", - "/certification/about", - "/certification/exam", - "/certification/study-guide", - "/certification/study-guide/webops", - "/certification/study-guide/platform", - "/certification/study-guide/create", - "/certification/study-guide/cdn", - "/certification/study-guide/cms", - "/certification/study-guide/deploy", - "/certification/study-guide/people", - "/certification/study-guide/extend", - "/certification/study-guide/automate", - "/certification/study-guide/custom-upstreams", - "/https://certification.pantheon.io", - "/guides/wordpress-git", - "/guides/wordpress-git/plugins", - "/guides/wordpress-git/themes", - "/guides/wordpress-git/media", - "/guides/wordpress-git/remove-editor", - "/guides/wordpress-git/next-steps", - "/guides/pagerduty", - "/guides/pagerduty/monitor", - "/guides/pagerduty/schedule", - "/guides/pagerduty/notify", - "/guides/pagerduty/slack", - "/guides/pagerduty/next-steps", - "/guides/accessibility", - "/guides/accessibility/get-started", - "/guides/accessibility/best-practices", - "/guides/accessibility/tools", - "/guides/accessibility/resources", - "/drupal-commandline", - "/pingdom-uptime-check", - "/drupal-advanced-page-cache", - "/partial-composer", - "/drupal-commerce", - "/guides", - "/agency-tips", - "/contribute", - "/community", - "/pantheon-community", - "/roadmap", - "/code-of-conduct", - "/trainers", - "/style-guide", - "/glossary", - "/inclusive-language", - "/doc-template", - "/release-notes" -] \ No newline at end of file diff --git a/playwright.config.ts b/playwright.config.ts deleted file mode 100644 index ad348e4f47..0000000000 --- a/playwright.config.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { defineConfig, devices } from "@playwright/test"; - -/** - * Read environment variables from file. - * https://github.com/motdotla/dotenv - */ -// import dotenv from 'dotenv'; -// import path from 'path'; -// dotenv.config({ path: path.resolve(__dirname, '.env') }); - -/** - * See https://playwright.dev/docs/test-configuration. - */ -export default defineConfig({ - testDir: "./playwright-tests", - /* Run tests in files in parallel */ - fullyParallel: true, - /* Fail the build on CI if you accidentally left test.only in the source code. */ - forbidOnly: !!process.env.CI, - /* Retry on CI only */ - retries: 2, - /* Use multiple workers for parallel execution */ - workers: 4, - /* Reporter to use. See https://playwright.dev/docs/test-reporters */ - reporter: "html", - /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ - use: { - /* Base URL to use in actions like `await page.goto('/')`. */ - baseURL: "http://localhost:3002", - - /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ - trace: "on-first-retry", - }, - - /* Configure projects for major browsers */ - projects: [ - { - name: "chromium", - use: { ...devices["Desktop Chrome"] }, - }, - - /* Test against mobile viewports. */ - // { - // name: 'Mobile Chrome', - // use: { ...devices['Pixel 5'] }, - // }, - // { - // name: 'Mobile Safari', - // use: { ...devices['iPhone 12'] }, - // }, - - /* Test against branded browsers. */ - // { - // name: 'Microsoft Edge', - // use: { ...devices['Desktop Edge'], channel: 'msedge' }, - // }, - // { - // name: 'Google Chrome', - // use: { ...devices['Desktop Chrome'], channel: 'chrome' }, - // }, - ], - /* Run your local dev server before starting the tests */ - webServer: { - command: "npm run dev", - url: "http://localhost:3002", - reuseExistingServer: process.env.CI === "true", - timeout: 120000, - }, -}); diff --git a/release-notes-listing.json b/release-notes-listing.json deleted file mode 100644 index e5495ca1bf..0000000000 --- a/release-notes-listing.json +++ /dev/null @@ -1 +0,0 @@ -{"releaseNotes":[{"slug":"release-notes/2025/07/pantheon-advanced-page-cache-2-3-3"},{"slug":"release-notes/2025/07/tls-10-11-eol"},{"slug":"release-notes/2025/07/php-81-82-83-patch-updates"},{"slug":"release-notes/2025/07/wordpress-composer-managed-1-33-0"},{"slug":"release-notes/2025/06/wpcli-2-12"},{"slug":"release-notes/2025/06/push-to-pantheon-action-0-6-1"},{"slug":"release-notes/2025/06/php-8-3-22"},{"slug":"release-notes/2025/06/wp-saml-auth-2-2-0"},{"slug":"release-notes/2025/06/drush-5-7-eol"},{"slug":"release-notes/2025/06/php-53-55-pantheon-yml"},{"slug":"release-notes/2025/05/pantheon-apachesolr-1-1-1"},{"slug":"release-notes/2025/05/terminus-401"},{"slug":"release-notes/2025/05/github-action"},{"slug":"release-notes/2025/05/github-application"},{"slug":"release-notes/2025/05/drops-7-solr-update"},{"slug":"release-notes/2025/05/php-8-3-21"},{"slug":"release-notes/2025/05/workspace-traffic-insights"},{"slug":"release-notes/2025/05/terminus-4-0-0"},{"slug":"release-notes/2025/05/new-relic-agent"},{"slug":"release-notes/2025/05/interstitial-pages"},{"slug":"release-notes/2025/04/wordpress-6-8-1"},{"slug":"release-notes/2025/04/introducing-pantheon-trust-center"},{"slug":"release-notes/2025/04/cp-drupal-contrib"},{"slug":"release-notes/2025/04/wordpress-6-8"},{"slug":"release-notes/2025/04/php-8-3-20"},{"slug":"release-notes/2025/04/drush-5-7-eol"},{"slug":"release-notes/2025/03/new-relic-ip-ranges"},{"slug":"release-notes/2025/03/content-publisher-update"},{"slug":"release-notes/2025/03/php-81-82-83"},{"slug":"release-notes/2025/03/php-eol-53-55"},{"slug":"release-notes/2025/03/pantheon-mu-plugin-1-5-3"},{"slug":"release-notes/2025/03/drupal-module-d11-compatibility"},{"slug":"release-notes/2025/03/terminus-4-0-0-alpha1"},{"slug":"release-notes/2025/03/terminus-362"},{"slug":"release-notes/2025/02/rest-api-v2"},{"slug":"release-notes/2025/02/papc-2.1.1"},{"slug":"release-notes/2025/02/product-roadmap"},{"slug":"release-notes/2025/02/pcc-side-by-side"},{"slug":"release-notes/2025/02/wordpress-composer-managed-1-32-5"},{"slug":"release-notes/2025/02/wordpress-6-7-2"},{"slug":"release-notes/2025/02/wordpress-composer-managed-1-32-4"},{"slug":"release-notes/2025/01/composer-2-8-3"},{"slug":"release-notes/2025/01/new-invoice-status-tags"},{"slug":"release-notes/2025/01/php-53-55-eol"},{"slug":"release-notes/2025/01/drupal-cms-upstream"},{"slug":"release-notes/2025/01/agcdn-change-requests"},{"slug":"release-notes/2025/01/Solr8-version-upgrade"},{"slug":"release-notes/2024/12/drupal-7-d7es"},{"slug":"release-notes/2024/12/solr-plugin-update"},{"slug":"release-notes/2024/12/pantheon-hud-plugin-update"},{"slug":"release-notes/2024/12/drupal-7-103"},{"slug":"release-notes/2024/12/terminus-361"},{"slug":"release-notes/2024/11/php-81-82-83"},{"slug":"release-notes/2024/11/wordpress-6-7-1"},{"slug":"release-notes/2024/11/drupal-7-102"},{"slug":"release-notes/2024/11/content-publisher-beta"},{"slug":"release-notes/2024/11/solr-module-8-2-0"},{"slug":"release-notes/2024/11/new-dashboard-nav"},{"slug":"release-notes/2024/11/wordpress-6.7"},{"slug":"release-notes/2024/10/software-version-status"},{"slug":"release-notes/2024/10/php-82-83"},{"slug":"release-notes/2024/10/gravityforms-bug-fix"},{"slug":"release-notes/2024/10/new-relic-agent"},{"slug":"release-notes/2024/10/drupal-7-lts"},{"slug":"release-notes/2024/10/drupal-11-site-creation"},{"slug":"release-notes/2024/10/php-81-82-83"},{"slug":"release-notes/2024/09/terminus-360"},{"slug":"release-notes/2024/09/rss-bug-fix"},{"slug":"release-notes/2024/09/domain-verification"},{"slug":"release-notes/2024/09/wp-cli-2-11"},{"slug":"release-notes/2024/09/wordpress-composer-managed-1-32-3"},{"slug":"release-notes/2024/09/wordpress-662"},{"slug":"release-notes/2024/09/emergency-ticket-workspace-phase1"},{"slug":"release-notes/2024/09/pantheon-mu-plugin-1-5-1"},{"slug":"release-notes/2024/09/php-82-83"},{"slug":"release-notes/2024/09/wordpress-composer-managed-1-32-2"},{"slug":"release-notes/2024/08/launchcheck-0-8-0"},{"slug":"release-notes/2024/08/pantheon-secrets-limited-availability"},{"slug":"release-notes/2024/08/prevent-filesystem-overload"},{"slug":"release-notes/2024/08/wordpress-composer-managed-1-32-1"},{"slug":"release-notes/2024/08/overage-charges-updates"},{"slug":"release-notes/2024/08/pantheon-advanced-page-cache-2-1-0"},{"slug":"release-notes/2024/08/site-plan-checkout-experience"},{"slug":"release-notes/2024/08/wordpress-composer-managed-1-32-0"},{"slug":"release-notes/2024/07/wordpress-composer-managed-1-31-1-update"},{"slug":"release-notes/2024/07/pantheon-mu-plugin-1-5-0"},{"slug":"release-notes/2024/07/workflow-logs"},{"slug":"release-notes/2024/07/wordpress-6-6-1"},{"slug":"release-notes/2024/07/new-relic-v2-api-migration"},{"slug":"release-notes/2024/07/pantheon-mu-plugin-1-4-5"},{"slug":"release-notes/2024/07/php-defaults"},{"slug":"release-notes/2024/07/wordpress-6-6"},{"slug":"release-notes/2024/07/new-relic-agent-update-released"},{"slug":"release-notes/2024/07/php-82-83"},{"slug":"release-notes/2024/07/rss-feed"},{"slug":"release-notes/2024/07/wordpress-composer-managed-1-31-0-update"},{"slug":"release-notes/2024/07/platform-robots-txt-now-supports-pope-tech"},{"slug":"release-notes/2024/07/domain-validation"},{"slug":"release-notes/2024/06/wordpress-6-5-5"},{"slug":"release-notes/2024/06/quicksilver-examples-new-relic"},{"slug":"release-notes/2024/06/login-update"},{"slug":"release-notes/2024/06/php-81-82-83-updates"},{"slug":"release-notes/2024/06/wordpress-6-5-4"},{"slug":"release-notes/2024/06/drupal-7-101"},{"slug":"release-notes/2024/06/release-note-multi-select-filter"},{"slug":"release-notes/2024/06/pantheon-mu-plugin-1-4-4-wordpress-composer-managed-update"},{"slug":"release-notes/2024/05/pantheon-advanced-page-cache-2-0"},{"slug":"release-notes/2024/05/pantheon-mu-plugin-1-4-3-update"},{"slug":"release-notes/2024/05/5xx-error-messages"},{"slug":"release-notes/2024/05/pantheon-mu-plugin-1-4-2-update"},{"slug":"release-notes/2024/05/load-balancing"},{"slug":"release-notes/2024/05/php-82-83"},{"slug":"release-notes/2024/05/sendgrid-transactional-emails"},{"slug":"release-notes/2024/05/wordpress-6-5-3-update"},{"slug":"release-notes/2024/05/new-relic-agent-update-released"},{"slug":"release-notes/2024/05/Synthetics-Check-Limits"},{"slug":"release-notes/2024/04/wordpress-pantheon-mu-plugin-1-4-1-update"},{"slug":"release-notes/2024/04/ea-workflow-logs"},{"slug":"release-notes/2024/04/pantheon-mu-plugin-1-4-0-update"},{"slug":"release-notes/2024/04/solr-power-2-5-3"},{"slug":"release-notes/2024/04/php-8-3-recommended"},{"slug":"release-notes/2024/04/sftp-authentication-changes"},{"slug":"release-notes/2024/04/enhanced-support-ticket-search-functionality"},{"slug":"release-notes/2024/04/community-slack"},{"slug":"release-notes/2024/04/wordpress-composer-managed-update"},{"slug":"release-notes/2024/04/php-81-82-82"},{"slug":"release-notes/2024/04/wordpress-6-5-2"},{"slug":"release-notes/2024/04/new-relic-agent"},{"slug":"release-notes/2024/04/wordpress-6-5"},{"slug":"release-notes/2024/03/overages-policy-change"},{"slug":"release-notes/2024/03/pantheon-mu-plugin-1-3-2"},{"slug":"release-notes/2024/03/terminus-github-action-sessions-cache"},{"slug":"release-notes/2024/03/papc-drupal-file-cache"},{"slug":"release-notes/2024/03/PHP-7-1-EOS"},{"slug":"release-notes/2024/03/php-8-2-8-3"},{"slug":"release-notes/2024/03/pantheon-advanced-page-cache-1.5.0"},{"slug":"release-notes/2024/03/drupal-7-100"},{"slug":"release-notes/2024/03/pantheon-mu-plugin-1-3-3"},{"slug":"release-notes/2024/02/wp-cli-changes"},{"slug":"release-notes/2024/02/php-8.3.3-8.2.16-8.1.27"},{"slug":"release-notes/2024/02/wp-cli-2-10"},{"slug":"release-notes/2024/01/wordpress-6-4-3"},{"slug":"release-notes/2024/01/pantheon-release-notes-a-new-year-a-new-chapter"},{"slug":"release-notes/2024/01/wp-cli-v2-9-0-release-now-available-on-pantheon"},{"slug":"release-notes/2024/01/wordpress-6-4-2-security-update"},{"slug":"release-notes/2024/01/drupal-7-99-release-bug fixes-and-feature-enhancements"},{"slug":"release-notes/2023/12/upgraded-security-measures-for-uninterrupted-webops-experience"},{"slug":"release-notes/2023/12/optimized-monitoring-for-high-volume-directories"},{"slug":"release-notes/2023/12/elevated-experience-with-front-end-sites-drupal-starter-kit"},{"slug":"release-notes/2023/12/delete-front-end-sites-multidevs-directly-from-dashboard-for-streamlined-management"},{"slug":"release-notes/2023/11/wordpress-native-php-sessions-1-4-update"},{"slug":"release-notes/2023/11/vpat-issued-for-product-accessibility"},{"slug":"release-notes/2023/11/streamlined-user-offboarding"},{"slug":"release-notes/2023/11/front-end-sites-build-caching-and-node-js-versions"},{"slug":"release-notes/2023/11/faster-backups"},{"slug":"release-notes/2023/11/composer-logs-visibility"},{"slug":"release-notes/2023/10/wpml-improved-edge-caching-compatibility-cache-hit-ratio-increased-24-percent"},{"slug":"release-notes/2023/10/php-memory-limits-updates"},{"slug":"release-notes/2023/10/php-8-1-and-8-2-updated-to-their-latest-patch-releases"},{"slug":"release-notes/2023/10/front-end-sites-settings"},{"slug":"release-notes/2023/10/drupal-security-update"},{"slug":"release-notes/2023/10/design-system-integration-docs"},{"slug":"release-notes/2023/09/drupal-sa-core-2023-006"},{"slug":"release-notes/2023/09/wordpress-multisite-search-and-replace"},{"slug":"release-notes/2023/09/solr-search-for-wordpress-2-5-0-update"},{"slug":"release-notes/2023/09/php-security-updates"},{"slug":"release-notes/2023/09/pantheon-advanced-page-cache-wordpress-plugin-updates"},{"slug":"release-notes/2023/09/object-cache-pro"},{"slug":"release-notes/2023/09/new-php-defaults"},{"slug":"release-notes/2023/09/front-end-sites-enhancements"},{"slug":"release-notes/2023/09/early-access-streamlined-user-offboarding"},{"slug":"release-notes/2023/09/early-access-customer-scheduled-jobs"},{"slug":"release-notes/2023/07/wp-cli-2-8-1"},{"slug":"release-notes/2023/07/integrated-composer"},{"slug":"release-notes/2023/07/drupal-7-98"},{"slug":"release-notes/2023/07/deprecation-of-obsolete-tls-1-2-cipher-suites"},{"slug":"release-notes/2023/06/wp-cli-2-8-0"},{"slug":"release-notes/2023/06/wordpress-6-2-1"},{"slug":"release-notes/2023/06/launch-check-updates"},{"slug":"release-notes/2023/05/wordpress-6-2"},{"slug":"release-notes/2023/05/cache-hit-ratio-metrics"},{"slug":"release-notes/2023/02/wordpress-multisite"},{"slug":"release-notes/2023/02/wordpress-6-1-1"},{"slug":"release-notes/2023/02/roles-and-permissions"},{"slug":"release-notes/2023/02/pantheon-object-cache"},{"slug":"release-notes/2023/02/pantheon-learning"},{"slug":"release-notes/2023/02/localdev"},{"slug":"release-notes/2023/02/front-end-sites"},{"slug":"release-notes/2023/02/enterprise-billing-center"},{"slug":"release-notes/2023/02/drupal-9-5-3"},{"slug":"release-notes/2023/02/drupal-9-4-11"},{"slug":"release-notes/2023/02/drupal-10-0-3"},{"slug":"release-notes/2023/02/documentation"},{"slug":"release-notes/2023/01/drupal-9-5-2"},{"slug":"release-notes/2023/01/drupal-9-4-9"},{"slug":"release-notes/2023/01/drupal-10-0-2"},{"slug":"release-notes/2022/12/wordpress-6-1-1"},{"slug":"release-notes/2022/12/drupal-9-5-0"},{"slug":"release-notes/2022/12/drupal-9-4-8"},{"slug":"release-notes/2022/12/drupal-10"},{"slug":"release-notes/2022/11/wordpress-6-1"},{"slug":"release-notes/2022/11/new-dashboard"},{"slug":"release-notes/2022/11/drupal-9-4-8"},{"slug":"release-notes/2022/11/drupal-9-3-22"},{"slug":"release-notes/2022/11/documentation"},{"slug":"release-notes/2022/11/autopilot"},{"slug":"release-notes/2022/10/new-dashboard"},{"slug":"release-notes/2022/10/drupal-9-4-5"},{"slug":"release-notes/2022/10/drupal-9-3-22"},{"slug":"release-notes/2022/10/documentation"},{"slug":"release-notes/2022/09/wordpress-composer-managed-upstream-in-early-access"},{"slug":"release-notes/2022/09/wordpress-6-0-2"},{"slug":"release-notes/2022/09/php-8-1"},{"slug":"release-notes/2022/09/drupal-9-4-5"},{"slug":"release-notes/2022/09/documentation"},{"slug":"release-notes/2022/08/wordpress-6-0-1"},{"slug":"release-notes/2022/08/drupal-9-4-5"},{"slug":"release-notes/2022/08/drupal-9-3-21"},{"slug":"release-notes/2022/08/documentation"},{"slug":"release-notes/2022/07/wordpress-6-0-1"},{"slug":"release-notes/2022/07/drupal-9-4-1"},{"slug":"release-notes/2022/07/drupal-9-3-17"},{"slug":"release-notes/2022/07/drupal-9-2-20"},{"slug":"release-notes/2022/07/documentation"},{"slug":"release-notes/2022/06/wordpress-6-0"},{"slug":"release-notes/2022/06/drupal-9-3-14"},{"slug":"release-notes/2022/06/drupal-9-2-20"},{"slug":"release-notes/2022/06/documentation"},{"slug":"release-notes/2022/05/drupal-9-3-12"},{"slug":"release-notes/2022/05/drupal-9-2-18"},{"slug":"release-notes/2022/05/documentation"},{"slug":"release-notes/2022/04/drupal-9-3-9"},{"slug":"release-notes/2022/04/drupal-9-2-16"},{"slug":"release-notes/2022/04/documentation"},{"slug":"release-notes/2022/03/wordpress-5-9-1"},{"slug":"release-notes/2022/03/drupal-9-3-6"},{"slug":"release-notes/2022/03/drupal-9-2-13"},{"slug":"release-notes/2022/03/documentation"},{"slug":"release-notes/2022/02/wordpress-5-9"},{"slug":"release-notes/2022/02/email-preferences-in-the-new-dashboard"},{"slug":"release-notes/2022/02/drupal-9-3-3"},{"slug":"release-notes/2022/02/drupal-9-2-11"},{"slug":"release-notes/2022/02/documentation"},{"slug":"release-notes/2022/01/terminus"},{"slug":"release-notes/2022/01/one-click-database-and-php-upgrades"},{"slug":"release-notes/2022/01/new-and-improved-workspace-switcher"},{"slug":"release-notes/2022/01/legacy-edge-shutdown-update"},{"slug":"release-notes/2022/01/drupal-9"},{"slug":"release-notes/2022/01/documentation"},{"slug":"release-notes/2021/12/wordpress-5-8-2"},{"slug":"release-notes/2021/12/drupal-9-2-8"},{"slug":"release-notes/2021/12/drupal-8-9-20"},{"slug":"release-notes/2021/12/documentation"},{"slug":"release-notes/2021/11/drupal-9-2-7"},{"slug":"release-notes/2021/11/documentation"},{"slug":"release-notes/2021/10/wordpress-5-8-1"},{"slug":"release-notes/2021/10/drupal-9-2-6"},{"slug":"release-notes/2021/10/drupal-8-9-19"},{"slug":"release-notes/2021/10/documentation"},{"slug":"release-notes/2021/09/drupal-9-2-3"},{"slug":"release-notes/2021/09/drupal-8-9-18"},{"slug":"release-notes/2021/09/drupal-7-82"},{"slug":"release-notes/2021/09/documentation"},{"slug":"release-notes/2021/08/wordpress-5-8"},{"slug":"release-notes/2021/08/drupal-9-2-0"},{"slug":"release-notes/2021/08/drupal-8-9-17"},{"slug":"release-notes/2021/08/drupal-7-82"},{"slug":"release-notes/2021/08/documentation"},{"slug":"release-notes/2021/07/wordpress-5-7-2"},{"slug":"release-notes/2021/07/drupal-9-2-0"},{"slug":"release-notes/2021/07/drupal-8-9-16"},{"slug":"release-notes/2021/07/drupal-7-81"},{"slug":"release-notes/2021/07/documentation"},{"slug":"release-notes/2021/06/wp-cli-2-5-0"},{"slug":"release-notes/2021/06/wordpress-5-7-2"},{"slug":"release-notes/2021/06/drupal-9-1-8"},{"slug":"release-notes/2021/06/drupal-8-9-15"},{"slug":"release-notes/2021/06/documentation"},{"slug":"release-notes/2021/05/wordpress-5-7-1"},{"slug":"release-notes/2021/05/drupal-9-1-7"},{"slug":"release-notes/2021/05/drupal-8-9-14"},{"slug":"release-notes/2021/05/drupal-7-80"},{"slug":"release-notes/2021/05/documentation"},{"slug":"release-notes/2021/04/wordpress-5-7"},{"slug":"release-notes/2021/04/documentation"},{"slug":"release-notes/2021/04/convert-your-drupal-8-pantheon-site-to-drupal-9-with-integrated-composer"},{"slug":"release-notes/2021/03/wordpress-5-6-1"},{"slug":"release-notes/2021/03/drupal-9-with-one-click-composer-updates"},{"slug":"release-notes/2021/03/documentation"},{"slug":"release-notes/2021/02/localdev-1-0-1"},{"slug":"release-notes/2021/02/drupal-9-with-one-click-composer-updates"},{"slug":"release-notes/2021/02/drupal-8-9-13"},{"slug":"release-notes/2021/02/drupal-7-78"},{"slug":"release-notes/2021/02/documentation"},{"slug":"release-notes/2021/01/wordpress-5-6"},{"slug":"release-notes/2021/01/drupal-9-with-one-click-composer-updates"},{"slug":"release-notes/2021/01/drupal-8-9-11"},{"slug":"release-notes/2021/01/documentation"},{"slug":"release-notes/2020/12/wordpress-5-5-3"},{"slug":"release-notes/2020/12/drupal-9-with-one-click-composer-updates"},{"slug":"release-notes/2020/12/drupal-8-9-9"},{"slug":"release-notes/2020/12/drupal-7-74"},{"slug":"release-notes/2020/12/documentation"},{"slug":"release-notes/2020/11/drupal-9"},{"slug":"release-notes/2020/11/drupal-8-9-7"},{"slug":"release-notes/2020/11/documentation"},{"slug":"release-notes/2020/10/wordpress-5-5-1"},{"slug":"release-notes/2020/10/php-7-3-22-and-7-4-10-updated"},{"slug":"release-notes/2020/10/drupal-9-preview-multidev-script"},{"slug":"release-notes/2020/10/drupal-8-9-6"},{"slug":"release-notes/2020/10/drupal-8-8-10"},{"slug":"release-notes/2020/10/drupal-7-73"},{"slug":"release-notes/2020/10/documentation"},{"slug":"release-notes/2020/09/wordpress-5-5"},{"slug":"release-notes/2020/09/drupal-9-0"},{"slug":"release-notes/2020/09/drupal-8-9-3"},{"slug":"release-notes/2020/08/multidev-and-covid-response-site-offers"},{"slug":"release-notes/2020/08/drupal-9-0"},{"slug":"release-notes/2020/08/drupal-8-9-2"},{"slug":"release-notes/2020/08/dedicated-certificates-&-updated-go-live"},{"slug":"release-notes/2020/07/wordpress-5-4-2"},{"slug":"release-notes/2020/07/traffic-metrics"},{"slug":"release-notes/2020/07/terminus-2-4-0"},{"slug":"release-notes/2020/07/multidev-and-covid-response-site-offers"},{"slug":"release-notes/2020/07/localdev-0-10-1"},{"slug":"release-notes/2020/07/drupal-9-0"},{"slug":"release-notes/2020/07/drupal-8-9-1,-8-8-8,-and-7-72"},{"slug":"release-notes/2020/07/documentation"},{"slug":"release-notes/2020/06/resources-to-navigate-covid-19"},{"slug":"release-notes/2020/06/localdev-0-10-0"},{"slug":"release-notes/2020/06/go-live-enhancements"},{"slug":"release-notes/2020/06/global-cdn"},{"slug":"release-notes/2020/06/drupal-9-0"},{"slug":"release-notes/2020/06/drupal-8-8-6"},{"slug":"release-notes/2020/06/drupal-7-70"},{"slug":"release-notes/2020/06/documentation"},{"slug":"release-notes/2020/05/wordpress-5-4-1"},{"slug":"release-notes/2020/05/multidev-cloud-environments-offer"},{"slug":"release-notes/2020/05/localdev-0-10-0"},{"slug":"release-notes/2020/05/early-access-to-drupal-9-with-integrated-composer"},{"slug":"release-notes/2020/05/drupal-8-8-5"},{"slug":"release-notes/2020/05/documentation"},{"slug":"release-notes/2020/04/wp-cli-2-4-0"},{"slug":"release-notes/2020/04/new-relic-agent-9-7-0-258"},{"slug":"release-notes/2020/04/localdev-0-9-3"},{"slug":"release-notes/2020/04/drupal-8-8-4"},{"slug":"release-notes/2020/04/documentation"},{"slug":"release-notes/2020/03/global-cdn-network-expansion"},{"slug":"release-notes/2020/03/drush-10"},{"slug":"release-notes/2020/03/drupal-8-8-2-released"},{"slug":"release-notes/2020/03/documentation"},{"slug":"release-notes/2020/03/advanced-global-cdn"},{"slug":"release-notes/2020/02/terminus-2-3-0-released"},{"slug":"release-notes/2020/02/php-7-3-14-and-7-2-27-updated"},{"slug":"release-notes/2020/02/localdev-0-7-0-released"},{"slug":"release-notes/2020/02/drush-8-3-2-released"},{"slug":"release-notes/2020/01/wordpress-5-3-2"},{"slug":"release-notes/2020/01/terminus-now-runs-site-local-drush-&-wp-cli"},{"slug":"release-notes/2020/01/security-enhancement-outgoing-udp-traffic-blocked"},{"slug":"release-notes/2020/01/php-7-2-and-7-3-updated"},{"slug":"release-notes/2020/01/localdev-0-6-0-beta-9-released"},{"slug":"release-notes/2020/01/drupal-8-8-1-and-7-69"},{"slug":"release-notes/2019/12/wordpress-5-3"},{"slug":"release-notes/2019/12/php-7-2,-and-7-3-updated"},{"slug":"release-notes/2019/12/drupal-8-7-10"},{"slug":"release-notes/2019/12/documentation"},{"slug":"release-notes/2019/11/wordpress-5-2-4"},{"slug":"release-notes/2019/11/php-7-1,-7-2,-and-7-3-updated"},{"slug":"release-notes/2019/11/pantheon-localdev-0-5-6"},{"slug":"release-notes/2019/11/drupal-8-7-8"},{"slug":"release-notes/2019/11/documentation"},{"slug":"release-notes/2019/10/wordpress-5-2-3"},{"slug":"release-notes/2019/10/platform-robots-txt-now-allows-swiftbot"},{"slug":"release-notes/2019/10/pantheon-now-enforces-https-by-default"},{"slug":"release-notes/2019/10/drupal-core-updates-available"},{"slug":"release-notes/2019/10/documentation"},{"slug":"release-notes/2019/09/php-7-1,-7-2-and-7-3-updated"},{"slug":"release-notes/2019/09/drupal-core-updates-available"},{"slug":"release-notes/2019/08/new-relic-php-agent-upgrade"},{"slug":"release-notes/2019/08/drupal-core-updates-available"},{"slug":"release-notes/2019/07/wordpress-5-2-2-update-available"},{"slug":"release-notes/2019/07/more-consistent-cron-runs"},{"slug":"release-notes/2019/07/general-availability-for-new-regions"},{"slug":"release-notes/2019/07/drupal-core-updates-available"},{"slug":"release-notes/2019/07/dns-recommendations-update"},{"slug":"release-notes/2019/06/wordpress-5-2-1"},{"slug":"release-notes/2019/06/php-7-1,-7-2,-and-7-3-updated"},{"slug":"release-notes/2019/06/drupal-core-updates-available"},{"slug":"release-notes/2019/06/australia-and-canada-regions-in-limited-availability"},{"slug":"release-notes/2019/05/terminus-2-0-1-release"},{"slug":"release-notes/2019/05/site-files-and-backups-moved-to-google-cloud"},{"slug":"release-notes/2019/05/php-7-3-default-for-drupal-8-and-wordpress-sites"},{"slug":"release-notes/2019/05/pantheon-heroes"},{"slug":"release-notes/2019/05/new-relic-agent-upgraded"},{"slug":"release-notes/2019/05/european-union-region-in-limited-availability"},{"slug":"release-notes/2019/05/drupal-core-updates-available"},{"slug":"release-notes/2019/05/disaster-recovery-now-supports-redis-cache"},{"slug":"release-notes/2019/04/wordpress-5-1-1"},{"slug":"release-notes/2019/04/pantheon-heroes"},{"slug":"release-notes/2019/04/drupal-core-upgrades"},{"slug":"release-notes/2019/04/documentation"},{"slug":"release-notes/2019/04/community-updates"},{"slug":"release-notes/2019/03/wordpress-launch-check-shows-vulnerability-info"},{"slug":"release-notes/2019/03/terminus-2-0-released!"},{"slug":"release-notes/2019/03/php-7-2-updated"},{"slug":"release-notes/2019/03/eu-region-early-access"},{"slug":"release-notes/2019/03/drupal-8-6-10,-7-64,-and-wordpress-5-1-now-available-as-1-click-updates"},{"slug":"release-notes/2019/03/documentation"},{"slug":"release-notes/2019/02/php-intl-extension-now-available"},{"slug":"release-notes/2019/02/php-7-2-and-7-1-updated"},{"slug":"release-notes/2019/02/new-relic-php-agent-upgraded"},{"slug":"release-notes/2019/02/drupal-8-6-7,-7-63,-and-wordpress-5-0-3-now-available-as-1-click-updates"},{"slug":"release-notes/2019/01/drupal-8-6-5-and-wordpress-5-0-1-now-available-as-1-click-updates"},{"slug":"release-notes/2019/01/documentation"},{"slug":"release-notes/2019/01/disaster-recovery"},{"slug":"release-notes/2018/12/php-updates"},{"slug":"release-notes/2018/12/partner-program"},{"slug":"release-notes/2018/12/multidev-access"},{"slug":"release-notes/2018/12/drupal-8-6-3-and-7-61-now-available-as-1-click-updates"},{"slug":"release-notes/2018/12/documentation"},{"slug":"release-notes/2018/11/php-7-2-11-and-7-1-23"},{"slug":"release-notes/2018/11/drupal-8-6-2"},{"slug":"release-notes/2018/11/drupal-7-60"},{"slug":"release-notes/2018/10/php-version-updates"},{"slug":"release-notes/2018/10/improve-email-deliverability-with-spf-records"},{"slug":"release-notes/2018/10/drupal-maintenance-mode-imagecache-fix"},{"slug":"release-notes/2018/10/drupal-8-6-1"},{"slug":"release-notes/2018/10/documentation"},{"slug":"release-notes/2018/09/wordpress-4-9-8"},{"slug":"release-notes/2018/09/php-upgrades"},{"slug":"release-notes/2018/09/new-php-default-versions-for-pantheon-maintained-upstreams"},{"slug":"release-notes/2018/09/drupal-8-5-6"},{"slug":"release-notes/2018/09/drupal-7-59"},{"slug":"release-notes/2018/08/php-upgrades"},{"slug":"release-notes/2018/08/https-provisioning-accelerated"},{"slug":"release-notes/2018/08/documentation"},{"slug":"release-notes/2018/08/apache-tika-update"},{"slug":"release-notes/2018/07/wordpress-4-9-7"},{"slug":"release-notes/2018/07/terminus-1-8-1"},{"slug":"release-notes/2018/07/drupal-8-5-5"},{"slug":"release-notes/2018/07/documentation"},{"slug":"release-notes/2018/07/crawler-access-to-platform-domains"},{"slug":"release-notes/2018/05/wordpress-core-upgrade"},{"slug":"release-notes/2018/05/upgrade-to-php-7-1-or-7-2-before-december"},{"slug":"release-notes/2018/05/php-updates"},{"slug":"release-notes/2018/05/php-7-2-ms-sql-support"},{"slug":"release-notes/2018/05/filemount-configuration"},{"slug":"release-notes/2018/05/duplicate-pantheon-sites-with-terminus-site-clone"},{"slug":"release-notes/2018/05/documentation"},{"slug":"release-notes/2018/04/wordpress-core-upgrade"},{"slug":"release-notes/2018/04/testing-seo-now-supported-on-platform-domains"},{"slug":"release-notes/2018/04/ocsp-stapling-enabled-on-global-cdn"},{"slug":"release-notes/2018/04/drupal-core-upgrades"},{"slug":"release-notes/2018/04/documentation"},{"slug":"release-notes/2018/03/wordpress-core-upgrade"},{"slug":"release-notes/2018/03/terminus-1-8"},{"slug":"release-notes/2018/03/php-security-upgrades"},{"slug":"release-notes/2018/03/global-cdn-surrogate-key-raw-disabled-by-default"},{"slug":"release-notes/2018/03/drupal-core-upgrades"},{"slug":"release-notes/2018/02/wordpress-core-upgrade"},{"slug":"release-notes/2018/02/php-updates"},{"slug":"release-notes/2018/02/legacy-ssl-add-on-price-increase"},{"slug":"release-notes/2018/02/drupal-core-upgrades"},{"slug":"release-notes/2018/02/custom-upstream-quicksilver-enhancement"},{"slug":"release-notes/2018/01/wp-cli-upgrades"},{"slug":"release-notes/2018/01/wordpress-core-upgrade"},{"slug":"release-notes/2018/01/registry-rebuild-upgrade"},{"slug":"release-notes/2018/01/php-upgrades"},{"slug":"release-notes/2018/01/pantheon-moves-to-google-cloud-platform"},{"slug":"release-notes/2018/01/new-relic-php-7-2-support"},{"slug":"release-notes/2018/01/launch-check-now-supports-drupal-8"},{"slug":"release-notes/2018/01/drupal-core-upgrades"},{"slug":"release-notes/2018/01/documentation"},{"slug":"release-notes/2017/12/php-upgrades"},{"slug":"release-notes/2017/12/drupal-core-upgrades"},{"slug":"release-notes/2017/12/documentation"},{"slug":"release-notes/2017/12/bug-fixes-and-improvements"},{"slug":"release-notes/2017/11/wordpress-core-upgrades"},{"slug":"release-notes/2017/11/sites-requiring-upgrade-to-global-cdn-now-shown-on-user-&-org-dashboards"},{"slug":"release-notes/2017/11/site-dashboard-update"},{"slug":"release-notes/2017/11/drupal-core-upgrades"},{"slug":"release-notes/2017/11/documentation"},{"slug":"release-notes/2017/10/wordpress-core-upgrades"},{"slug":"release-notes/2017/10/webp-image-support"},{"slug":"release-notes/2017/10/terminus-1-6"},{"slug":"release-notes/2017/10/php-7-1-&-ioncube-decoder"},{"slug":"release-notes/2017/10/documentation"},{"slug":"release-notes/2017/10/custom-upstreams"},{"slug":"release-notes/2017/09/wp-native-php-sessions"},{"slug":"release-notes/2017/09/wp-cli"},{"slug":"release-notes/2017/09/new-relic"},{"slug":"release-notes/2017/09/documentation"},{"slug":"release-notes/2017/08/wordpress-core-upgrades"},{"slug":"release-notes/2017/08/terminus-1-5"},{"slug":"release-notes/2017/08/php-upgrades"},{"slug":"release-notes/2017/08/global-cdn-surrogate-key-cache-clearing-api-improvement"},{"slug":"release-notes/2017/08/drupal-core-upgrades"},{"slug":"release-notes/2017/08/documentation"},{"slug":"release-notes/2017/07/terminus-1-4-1"},{"slug":"release-notes/2017/07/nginx-web-server-integer-overflow-vulnerability-mitigated"},{"slug":"release-notes/2017/07/drupal-core-upgrades"},{"slug":"release-notes/2017/07/drupal-8-with-redirect-and-simple-xml-sitemap-modules-now-supported"},{"slug":"release-notes/2017/07/documentation"},{"slug":"release-notes/2017/07/custom-upstreams-self-serve-github-and-bitbucket"},{"slug":"release-notes/2017/06/wp-cli"},{"slug":"release-notes/2017/06/terminus-1-4-0"},{"slug":"release-notes/2017/06/pantheon-upstream-configuration"},{"slug":"release-notes/2017/06/new-relic"},{"slug":"release-notes/2017/06/documentation"},{"slug":"release-notes/2017/06/default-php-versions"},{"slug":"release-notes/2017/06/core-upgrades"},{"slug":"release-notes/2017/05/platform-security"},{"slug":"release-notes/2017/05/php-upgrade"},{"slug":"release-notes/2017/05/drupal-core-upgrades"},{"slug":"release-notes/2017/05/documentation"},{"slug":"release-notes/2017/04/wordpress-upgrades"},{"slug":"release-notes/2017/04/terminus-1-3-0"},{"slug":"release-notes/2017/04/drupal-core-upgrades"},{"slug":"release-notes/2017/04/documentation"},{"slug":"release-notes/2017/04/bug-fixes"},{"slug":"release-notes/2017/03/wp-cli-upgrade"},{"slug":"release-notes/2017/03/drupal-core-upgrades"},{"slug":"release-notes/2017/03/documentation"},{"slug":"release-notes/2017/02/php-upgrade"},{"slug":"release-notes/2017/02/patched-for-linux-kernel-vulnerability"},{"slug":"release-notes/2017/02/drupal-core-upgrade"},{"slug":"release-notes/2017/02/documentation"},{"slug":"release-notes/2017/01/wordpress-4-7-2-upgrade"},{"slug":"release-notes/2017/01/terminus-plugins"},{"slug":"release-notes/2017/01/terminus-1-0"},{"slug":"release-notes/2017/01/drupal-8-2-5-upgrade"},{"slug":"release-notes/2016/12/wordpress-4-7-security-patches"},{"slug":"release-notes/2016/12/wordpress-4-7-core-update"},{"slug":"release-notes/2016/12/upgraded-wp-cli"},{"slug":"release-notes/2016/12/terminus-manual-and-terminus-1-0-beta-releases"},{"slug":"release-notes/2016/12/supported-mime-types"},{"slug":"release-notes/2016/12/privacy-shield-framework-compliance"},{"slug":"release-notes/2016/12/drupal-core-updates"},{"slug":"release-notes/2016/12/documentation"},{"slug":"release-notes/2016/11/terminus-0-13-4-and-terminus-1-0-alpha"},{"slug":"release-notes/2016/11/platform-security-update"},{"slug":"release-notes/2016/11/php-upgrade"},{"slug":"release-notes/2016/11/new-relic-agent-upgrade"},{"slug":"release-notes/2016/11/early-release-pantheon-advanced-page-cache-plugin"},{"slug":"release-notes/2016/11/drupal-core-updates"},{"slug":"release-notes/2016/11/drupal-6-long-term-support-(lts)-partners"},{"slug":"release-notes/2016/11/chat-support"},{"slug":"release-notes/2016/10/terminus-1-0-alpha-release"},{"slug":"release-notes/2016/10/solr-power-for-wordpress-0-6-update"},{"slug":"release-notes/2016/10/documentation"},{"slug":"release-notes/2016/10/custom-domains-in-multidev-environments"},{"slug":"release-notes/2016/09/terminus-0-13-2"},{"slug":"release-notes/2016/09/kalabox-2-0-is-available"},{"slug":"release-notes/2016/09/drush_version-is-now-managed-in-pantheon-yml"},{"slug":"release-notes/2016/09/documentation"},{"slug":"release-notes/2016/09/dashboard-design-updates"},{"slug":"release-notes/2016/09/bug-fixes"},{"slug":"release-notes/2016/08/terminus-0-12-0"},{"slug":"release-notes/2016/08/solr-power-for-wordpress-0-5-update"},{"slug":"release-notes/2016/08/php-5-6-7-0-released"},{"slug":"release-notes/2016/08/new-hooks-for-quicksilver-platform-integration"},{"slug":"release-notes/2016/08/documentation"},{"slug":"release-notes/2016/08/advanced-site-configurations-available"},{"slug":"release-notes/2016/07/tls-1-0-deprecated"},{"slug":"release-notes/2016/07/terminus-0-11-2"},{"slug":"release-notes/2016/07/migrating-wordpress-sites-to-pantheon-just-got-easier"},{"slug":"release-notes/2016/07/drupal-contrib-module-security-updates"},{"slug":"release-notes/2016/07/documentation"},{"slug":"release-notes/2016/06/new-relic-pro"},{"slug":"release-notes/2016/06/new-reliable-screenshots-microservice-&-user-dashboard-design-update"},{"slug":"release-notes/2016/06/new-migration-button-on-the-dashboard"},{"slug":"release-notes/2016/06/drupal-8-site-imports-now-supported"},{"slug":"release-notes/2016/05/terminus-0-11-1"},{"slug":"release-notes/2016/05/pantheon-enterprise-support-now-available"},{"slug":"release-notes/2016/04/workflow-tab-renamed-to-databases-files"},{"slug":"release-notes/2016/04/terminus-0-11-1-released"},{"slug":"release-notes/2016/04/new-terminus-plugins-for-quicksilver-integrations"},{"slug":"release-notes/2016/04/documentation"},{"slug":"release-notes/2016/03/terminus-0-11-0-released"},{"slug":"release-notes/2016/03/freezing-inactive-sites"},{"slug":"release-notes/2016/03/documentation"},{"slug":"release-notes/2016/02/wordpress-core-updates"},{"slug":"release-notes/2016/02/wordpress-at-scale"},{"slug":"release-notes/2016/02/terminus-0-10-2-released"},{"slug":"release-notes/2016/02/platform-domains"},{"slug":"release-notes/2016/02/end-of-life-for-drupal-6"},{"slug":"release-notes/2016/02/documentation"},{"slug":"release-notes/2016/02/code-archives"},{"slug":"release-notes/2016/02/cloud-integration-tools"},{"slug":"release-notes/2016/01/terminus-0-10-2-released"},{"slug":"release-notes/2016/01/quicksilver-platform-hooks-are-now-available"},{"slug":"release-notes/2016/01/pantheon-hud-plugin"},{"slug":"release-notes/2016/01/machine-token-authentication"},{"slug":"release-notes/2016/01/documentation"},{"slug":"release-notes/2015/12/documentation"},{"slug":"release-notes/2015/10/wp-cli-search-replace"},{"slug":"release-notes/2015/10/terminus-commands-updated"},{"slug":"release-notes/2015/10/terminus-0-9-2-released"},{"slug":"release-notes/2015/10/organization-renaming"},{"slug":"release-notes/2015/10/edge-cache-upgraded-to-varnish-4"},{"slug":"release-notes/2015/10/drupal-8-rc2-released-and-available"},{"slug":"release-notes/2015/10/drupal-7-defaults-to-php-5-5"},{"slug":"release-notes/2015/10/documentation"},{"slug":"release-notes/2015/09/terminus-0-8-0"},{"slug":"release-notes/2015/09/pantheon-enterprise-is-now-available"},{"slug":"release-notes/2015/09/login-destination"},{"slug":"release-notes/2015/09/documentation"},{"slug":"release-notes/2015/08/terminus-cli-version-0-7-1"},{"slug":"release-notes/2015/08/saint-mode-saves-your-images"},{"slug":"release-notes/2015/08/php-default-arg-separator"},{"slug":"release-notes/2015/08/php-5-5-opcache-revalidate-freq-value-is-now-set-to-zero"},{"slug":"release-notes/2015/08/nginx-conf-update-for-photon"},{"slug":"release-notes/2015/08/documentation"},{"slug":"release-notes/2015/07/wordpress-4-2-3-is-live"},{"slug":"release-notes/2015/07/scripts-to-quickly-make-a-drupal-7-project-using-composer"},{"slug":"release-notes/2015/07/multidev-ui-updated"},{"slug":"release-notes/2015/07/kalabox-2-pantheon"},{"slug":"release-notes/2015/07/documentation"},{"slug":"release-notes/2015/06/walkme-tours"},{"slug":"release-notes/2015/06/single-sign-on-sso-release"},{"slug":"release-notes/2015/06/improved-workflows-notifications"},{"slug":"release-notes/2015/06/documentation"},{"slug":"release-notes/2015/05/webinars"},{"slug":"release-notes/2015/05/free-backups"},{"slug":"release-notes/2015/05/dashboard-load-times"},{"slug":"release-notes/2015/05/barrel-roll-reboots"},{"slug":"release-notes/2015/04/wordpress-launch-check"},{"slug":"release-notes/2015/04/wordpress-core-updates-to-4-2-1"},{"slug":"release-notes/2015/04/styx-to-appserver-encryption"},{"slug":"release-notes/2015/04/saml-users"},{"slug":"release-notes/2015/04/fedora-update"},{"slug":"release-notes/2015/04/edge-cache-configuration-update"},{"slug":"release-notes/2015/04/documentation"},{"slug":"release-notes/2015/03/terminus-improvement"},{"slug":"release-notes/2015/03/drupal-7-35-update"},{"slug":"release-notes/2015/03/documentation"},{"slug":"release-notes/2015/03/dashboard-optimization"},{"slug":"release-notes/2015/02/varnish-testing-harness"},{"slug":"release-notes/2015/02/try-drupal-8-beta"},{"slug":"release-notes/2015/02/terminus-0-5-released"},{"slug":"release-notes/2015/02/new-wordpress-upstream"},{"slug":"release-notes/2015/02/documentation"},{"slug":"release-notes/2015/01/supporting-orgs-multi-org"},{"slug":"release-notes/2015/01/php-upgrade"},{"slug":"release-notes/2015/01/concerned-about-cve-2015-0235-aka-ghost"}],"categories":["drupal","modules","action-required","infrastructure","security","wordpress","tools-apis","new-feature","user-interface","performance","content-publisher","plugins","deprecated","general","billing","account-management","documentation","policy","front-end-sites"]} \ No newline at end of file diff --git a/seed/create-content-structure.ts b/seed/create-content-structure.ts deleted file mode 100644 index 4e514151f0..0000000000 --- a/seed/create-content-structure.ts +++ /dev/null @@ -1,112 +0,0 @@ -import { getOmniItems } from "@/components/omni-components"; -import { OmniItem } from "@/components/omni-components/helpers"; -import { ContentStructureItem, updateContentStructure } from "@/lib/ingestion"; -import { fetchArticleBySlug, singleSlugForFetch } from "@/lib/page-utils"; -import { writeFileSync } from "fs"; -import { join } from "path"; - -let processed = 0; -const token = process.env.PCC_TOKEN || ""; -const siteId = process.env.PCC_SITE_ID || ""; -const managementToken = process.env.PCC_MANAGEMENT_TOKEN || ""; - -const processOmniItems = async ( - omniItem: OmniItem -): Promise => { - processed++; - console.log(`Processed: ${processed}`); - let { link, title, children } = omniItem; - - console.log(`Processing link:`, link); - - if (link.startsWith("/")) { - link = link.slice(1); - } - if (link.endsWith("/")) { - link = link.slice(0, -1); - } - - let slug = singleSlugForFetch(link); - - console.log(`Processing slug:`, slug); - - const article = await fetchArticleBySlug(slug, siteId, token, { - withContent: false, - withMetadata: false, - }); - - if (!article) { - return null; - } - - let updatedChildren: ContentStructureItem[] = []; - - if (children && children.length > 0) { - // process in batches of 20 - const batchSize = 20; - const batches = []; - for (let i = 0; i < children.length; i += batchSize) { - batches.push(children.slice(i, i + batchSize)); - } - - for (const batch of batches) { - let innerChilren: ContentStructureItem[] = []; - for (const child of batch) { - try { - const result = await processOmniItems(child); - if (result) { - innerChilren.push(result); - } - } catch (error) { - console.error(`Error processing child:`, error); - } - } - updatedChildren.push(...innerChilren); - // wait for 500ms - await new Promise((resolve) => setTimeout(resolve, 1_000)); - } - } - - console.log(`Updated children:`, updatedChildren); - - return { - children: updatedChildren, - id: article.id, - isHidden: false, - type: "article", - name: omniItem.title, - slug: singleSlugForFetch(omniItem.link), - published: true, - }; -}; - -const main = async () => { - const omniItems = await getOmniItems(); - - const active: ContentStructureItem[] = []; - - for (const omniItem of omniItems) { - const contentStructureItem = await processOmniItems(omniItem); - if (contentStructureItem) { - active.push(contentStructureItem); - } - } - - writeFileSync( - join(process.cwd(), "active.json"), - JSON.stringify(active, null, 2) - ); - - await updateContentStructure( - siteId, - { - contentStructure: { - active, - uncategorized: [], - }, - }, - managementToken - ); -}; - -main().then(console.log).catch(console.error); diff --git a/seed/helper.ts b/seed/helper.ts deleted file mode 100644 index 91406137ba..0000000000 --- a/seed/helper.ts +++ /dev/null @@ -1,648 +0,0 @@ -import { getGlossaryPageData } from "@/lib/glossary"; -import { - createArticle, - disconnectArticle, - ingestMarkdown, - updateMetadata, -} from "@/lib/ingestion"; -import { - BasePageDataWithoutComponent, - fetchArticleBySlug, - PageDataWithoutComponent, - singleSlugForFetch as normalizeSlug, - getAllReleaseNotes, -} from "@/lib/page-utils"; -import { getFilesByExtension } from "@/server/processor/helper"; -import { ProcessedJsonFile, processFile } from "@/server/processor/json"; -import { processDirectoryForMarkDown } from "@/server/processor/mdx"; -import { ProcessedYamlFile, processYamlFile } from "@/server/processor/yaml"; -import { writeFileSync } from "fs"; -import path, { join } from "path"; - -const getDateFromFilename = (filename: string): Date | null => { - // Extract date from filename like "2024-01-22-drupal-7-99-release-bug fixes-and-feature-enhancements.md" - const dateMatch = filename.match(/^(\d{4}-\d{2}-\d{2})-/); - - if (dateMatch) { - const dateString = dateMatch[1]; - const date = new Date(dateString); - - // Check if the date is valid - if (!isNaN(date.getTime())) { - return date; - } - } - - return null; -}; - -async function saveDataAfterPreProcessing( - content: string, - page: Omit, - article: { id: string }, - ingestDate: Date = new Date() -) { - const lines = content - .replaceAll("![", "__IMAGE_REPLACEMENT_MARKER__") - .split("\n"); - const batches: string[] = []; - for (let i = 0; i < lines.length; i += 10000) { - batches.push(lines.slice(i, i + 10000).join("\n")); - } - - let i = 0; - console.log("Processing. Ingest Markdown", page.uri); - - for (const batch of batches) { - i++; - if (i > 1) { - console.error("Breaking"); - break; - } - try { - await ingestMarkdown(article.id, { - content: JSON.stringify({ content: batch }), - publishLevel: "prod", - contentType: "markdown", - docName: page.title, - docRevisionDate: ingestDate.getTime(), - }); - console.log(i); - } catch (err) { - console.error(err); - throw err; - } - } -} - -export const processPage = async ( - page: PageDataWithoutComponent, - allowFetch: boolean = true, - siteId: string = process.env.PCC_SITE_ID || "", - token: string = process.env.PCC_TOKEN || "" -) => { - if (page.uri.startsWith("wordpress-known-issues")) { - return; - } - - if (page.uri.startsWith("terminus/commands")) { - return; - } - - if (!allowFetch) { - console.log({ - uri: page.uri, - type: page.type, - title: page.title, - normalized: normalizeSlug(page.uri), - }); - - if (page.type !== "doc") { - return; - } - - let article = await fetchArticleBySlug( - normalizeSlug(page.uri), - siteId, - token, - { - withContent: false, - withMetadata: true, - } - ); - - if (!article) { - return; - } - - if (article.title !== page.title) { - console.log("Updating metadata", article.id, page.title); - await updateMetadata(article.id, { - title: page.title, - metadataFields: { - ...article.metadata, - title: page.title, - description: page.description, - }, - }); - console.log("Updated metadata", article.id, page.title); - } - - return; - } - - console.log("processing", page.type, page.uri, page.relativeFilePath); - - if (page.type === "release-note") { - let article: { id: string } = await fetchArticleBySlug( - normalizeSlug(page.uri) - ); - - const { content, internal, ...doc } = page.data.node; - const date = getDateFromFilename( - doc.relativePath.split("releasenotes/")[1] - ); - - if (!date) { - console.log("No date found for release note", doc.relativePath); - throw new Error("No date found for release note" + page.uri); - } - - if (article) { - return; - } - - if (!article) { - console.log("article not found", page.uri); - article = await createArticle({ - title: page.title, - siteId: process.env.PCC_SITE_ID || "", - metadataFields: { - slug: page.uri, - type: page.type, - relativePath: doc.relativePath, - description: page.description, - title: page.title, - prev: page.data.prev, - next: page.data.next, - }, - tags: doc.frontmatter.tags ?? [], - contentType: "TEXT_MARKDOWN", - }); - console.log("Created article", article); - } - - console.log("saving data", page.uri); - - await saveDataAfterPreProcessing( - page.rawFileData, - page, - article, - getDateFromFilename(doc.relativePath) ?? new Date() - ); - } - - if (page.type === "guide") { - let article: { id: string } = await fetchArticleBySlug( - normalizeSlug(page.uri) - ); - - if (article) { - return; - } - const { content, frontmatter, internal, ...doc } = page.data.guide; - - if (!article) { - console.log("article not found", page.uri); - article = await createArticle({ - title: page.title, - siteId: process.env.PCC_SITE_ID || "", - metadataFields: { - slug: page.uri, - type: page.type, - relativePath: doc.relativePath, - description: page.description, - title: page.title, - prev: page.data.prev, - next: page.data.next, - }, - tags: frontmatter.tags ?? [], - contentType: "TEXT_MARKDOWN", - }); - console.log("Created article", article); - } - - console.log("saving data", page.uri); - - await saveDataAfterPreProcessing(page.rawFileData, page, article); - } - - if (page.type === "doc") { - let article: { id: string } = await fetchArticleBySlug( - normalizeSlug(page.uri) - ); - if (article) { - return; - } - - const { content, frontmatter, internal, ...doc } = page.data.doc; - - if (!article) { - console.log("article not found", page.uri); - article = await createArticle({ - title: page.title, - siteId: process.env.PCC_SITE_ID || "", - metadataFields: { - slug: page.uri, - type: page.type, - relativePath: doc.relativePath, - description: page.description, - title: page.title, - }, - tags: frontmatter.tags ?? [], - contentType: "TEXT_MARKDOWN", - }); - console.log("Created article", article); - } - - await saveDataAfterPreProcessing(page.rawFileData, page, article); - } - - if (page.type === "landing") { - let article: { id: string } = await fetchArticleBySlug( - normalizeSlug(page.uri) - ); - console.log(page); - - if (article) { - return; - } - - console.log(article); - - const landing = page.data.landing; - - if (!article) { - console.log("article not found", page.uri); - article = await createArticle({ - title: page.title, - siteId: process.env.PCC_SITE_ID || "", - metadataFields: { - slug: page.uri, - type: page.type, - description: page.description, - }, - tags: [], - contentType: "TEXT_MARKDOWN", - }); - console.log("Created article", article); - } - - await saveDataAfterPreProcessing(JSON.stringify(landing), page, article); - } - - if (page.type === "iframe-embed") { - let article: { id: string } = await fetchArticleBySlug( - normalizeSlug(page.uri) - ); - - if (article) { - return; - } - const { content, frontmatter, internal, ...doc } = page.data.iframeEmbed; - - if (!article) { - console.log("article not found", page.uri); - article = await createArticle({ - title: page.title, - siteId: process.env.PCC_SITE_ID || "", - metadataFields: { - slug: page.uri, - type: page.type, - relativePath: doc.relativePath, - description: page.description, - title: page.title, - }, - tags: frontmatter.tags ?? [], - contentType: "TEXT_MARKDOWN", - }); - console.log("Created article", article); - } - - console.log("saving data", page.uri); - - await saveDataAfterPreProcessing(page.rawFileData, page, article); - } -}; - -export const updatePartials = async ( - allowFetch: boolean = true, - filter: (filePath: string) => boolean = (filePath) => { - return filePath.endsWith(".md") || filePath.endsWith(".mdx"); - } -) => { - if (!allowFetch) { - return; - } - - const files = processDirectoryForMarkDown("source/content/partials", { - filter, - }); - - for (const file of files) { - const slug = normalizeSlug( - file.relativePath.split("source/content/partials/")[1] - ); - console.log({ slug }); - let article = await fetchArticleBySlug(slug); - if (article) { - continue; - } - - if (!article) { - article = await createArticle({ - title: file.frontmatter.title ?? "partial-file", - contentType: "TEXT_MARKDOWN", - siteId: process.env.PCC_SITE_ID || "", - metadataFields: { - slug: slug, - type: "partial", - relativePath: file.relativePath, - }, - tags: [], - }); - console.log("Created article", article); - } - - await saveDataAfterPreProcessing( - file.internal.content, - { - uri: slug, - title: file.frontmatter.title ?? "partial-file", - description: file.frontmatter.description ?? "partial-file", - rawFileData: file.content, - }, - article - ); - - console.log("Updated article", article); - } -}; - -export const updateGlossary = async (allowFetch: boolean = true) => { - if (!allowFetch) { - return; - } - - const { allDefs, letters } = await getGlossaryPageData(); - - const slug = "glossary"; - let article = await fetchArticleBySlug(slug); - - if (!article) { - article = await createArticle({ - title: "Glossary", - siteId: process.env.PCC_SITE_ID || "", - metadataFields: { - slug: slug, - type: "glossary", - relativePath: "glossary.md", - }, - tags: [], - contentType: "TEXT_MARKDOWN", - }); - console.log("Created article", article); - } - - await saveDataAfterPreProcessing( - JSON.stringify({ allDefs, letters }), - { - uri: slug, - title: "Glossary", - description: "Glossary", - rawFileData: JSON.stringify({ allDefs, letters }), - }, - article - ); -}; -export const updateJSONFiles = async ( - allowFetch = true, - filter: (filePath: string) => boolean = (filePath) => { - return filePath.endsWith(".json"); - } -) => { - if (!allowFetch) { - return; - } - - const files = getFilesByExtension( - join(path.resolve(process.cwd(), "src"), "source"), - [".json"] - ); - - const filteredFiles = files.filter(filter); - - const jsonFiles = filteredFiles - .map(processFile) - .filter((file): file is ProcessedJsonFile => file !== null); - - for (const file of jsonFiles) { - if (file.fileName.startsWith(".")) { - continue; - } - - console.log("fetching", normalizeSlug(`${file.fileName}-json-file`)); - let article = await fetchArticleBySlug( - normalizeSlug(`${file.fileName}-json-file`) - ); - if (article) { - continue; - } - - if (!article) { - console.log("article not found", file.fileName); - article = await createArticle({ - title: `${file.fileName}-json-file`, - siteId: process.env.PCC_SITE_ID || "", - metadataFields: { - title: file.fileName, - slug: `${file.fileName}-json-file`, - type: "json", - relativePath: file.relativePath, - }, - tags: [], - contentType: "TEXT_MARKDOWN", - }); - } - - try { - await saveDataAfterPreProcessing( - JSON.stringify({ content: file.content }), - { - uri: file.fileName, - title: file.fileName, - description: file.fileName, - rawFileData: JSON.stringify({ content: file.content }), - }, - article - ); - } catch (err) { - try { - await disconnectArticle(article.id); - } catch {} - console.log("disconnected article", article.id); - continue; - } - } -}; - -export const updateYamlFiles = async ( - allowFetch = true, - filter: (filePath: string) => boolean = (filePath) => { - return filePath.endsWith(".yaml"); - } -) => { - if (!allowFetch) { - return; - } - - const files = getFilesByExtension( - join(path.resolve(process.cwd(), "src"), "source"), - [".yaml", ".yml"] - ); - - const filteredFiles = files.filter(filter); - - const yamlFiles = filteredFiles - .map(processYamlFile) - .filter((file): file is ProcessedYamlFile => file !== null); - - for (const file of yamlFiles) { - if (file.fileName.startsWith(".")) { - continue; - } - - console.log("fetching", normalizeSlug(`${file.fileName}-yaml-file`)); - let article = await fetchArticleBySlug( - normalizeSlug(`${file.fileName}-yaml-file`) - ); - if (article) { - continue; - } - - if (!article) { - console.log("article not found", file.fileName); - article = await createArticle({ - title: `${file.fileName}-yaml-file`, - siteId: process.env.PCC_SITE_ID || "", - metadataFields: { - title: file.fileName, - slug: `${file.fileName}-yaml-file`, - type: "yaml", - relativePath: file.relativePath, - }, - tags: [], - contentType: "TEXT_MARKDOWN", - }); - } - - try { - await saveDataAfterPreProcessing( - JSON.stringify({ content: file.content }), - { - uri: file.fileName, - title: file.fileName, - description: file.fileName, - rawFileData: JSON.stringify({ content: file.content }), - }, - article - ); - } catch (err) { - try { - await disconnectArticle(article.id); - } catch {} - console.log("disconnected article", article.id); - continue; - } - } -}; - -export const updateReleaseNotesListing = async (allowFetch = true) => { - if (!allowFetch) { - return; - } - - const allReleaseNotes = getAllReleaseNotes(); - const categories = allReleaseNotes.map((releaseNote) => { - return { - node: { - frontmatter: { - categories: releaseNote.frontmatter.categories ?? [], - }, - }, - }; - }); - const releaseNotes = getAllReleaseNotes().map((releaseNote) => { - const { content, internal, ...doc } = releaseNote; - return { slug: doc.fields.slug }; - }); - const allCategories = Array.from( - new Set(categories.map((c) => c.node.frontmatter.categories).flat()) - ); - - const slug = "release-notes-listing"; - - let article = await fetchArticleBySlug(slug); - - if (!article) { - article = await createArticle({ - title: "Release Notes Listing", - siteId: process.env.PCC_SITE_ID || "", - metadataFields: { - slug: slug, - }, - tags: [], - contentType: "TEXT_MARKDOWN", - }); - console.log("Created article", article); - } - - console.log(article); - - const content = JSON.stringify({ releaseNotes, categories: allCategories }); - - console.log(content); - - writeFileSync("release-notes-listing.json", content); - - await saveDataAfterPreProcessing( - content, - { - uri: slug, - title: "Release Notes Listing", - description: "Release Notes Listing", - rawFileData: content, - }, - article - ); - - // map categories to release note slugs - { - const categoryToReleaseNoteSlugs: Record = {}; - allReleaseNotes.map((e) => { - e.frontmatter.categories?.map((category) => { - if (!categoryToReleaseNoteSlugs[category]) { - categoryToReleaseNoteSlugs[category] = []; - } - categoryToReleaseNoteSlugs[category].push(e.fields.slug); - }); - }); - - const slug = "release-notes-listing-with-categories"; - - let article = await fetchArticleBySlug(slug); - - if (!article) { - article = await createArticle({ - title: "Release Notes Listing with Categories", - siteId: process.env.PCC_SITE_ID || "", - metadataFields: { - slug: slug, - }, - tags: [], - contentType: "TEXT_MARKDOWN", - }); - } - - await saveDataAfterPreProcessing( - JSON.stringify({ categoryToReleaseNoteSlugs }), - { - uri: slug, - title: "Release Notes Listing with Categories", - description: "Release Notes Listing with Categories", - rawFileData: JSON.stringify({ categoryToReleaseNoteSlugs }), - }, - article - ); - } -}; diff --git a/seed/initial-without-stringify.ts b/seed/initial-without-stringify.ts deleted file mode 100644 index 584f7792e9..0000000000 --- a/seed/initial-without-stringify.ts +++ /dev/null @@ -1,616 +0,0 @@ -import { - BasePageDataWithoutComponent, - fetchArticleBySlug, - getAllPages, - getAllReleaseNotes, - PageDataWithoutComponent, - singleSlugForFetch as normalizeSlug, -} from "@/lib/page-utils"; -import { - createArticle, - disconnectArticle, - ingestMarkdown, - updateMetadata, -} from "../src/lib/ingestion"; -import { ProcessedJsonFile, processFile } from "@/server/processor/json"; -import { getFilesByExtension } from "@/server/processor/helper"; -import path from "path"; -import { join } from "path"; -import { getGlossaryPageData } from "@/lib/glossary"; -import { processDirectoryForMarkDown } from "@/server/processor/mdx"; - -const allowFetch = true; -process.env.SERVE_LOCAL = "true"; - -const token = process.env.PCC_TOKEN || ""; -const siteId = process.env.PCC_SITE_ID || ""; -const managementToken = process.env.PCC_MANAGEMENT_TOKEN || ""; - -const getDateFromFilename = (filename: string): Date | null => { - // Extract date from filename like "2024-01-22-drupal-7-99-release-bug fixes-and-feature-enhancements.md" - const dateMatch = filename.match(/^(\d{4}-\d{2}-\d{2})-/); - - if (dateMatch) { - const dateString = dateMatch[1]; - const date = new Date(dateString); - - // Check if the date is valid - if (!isNaN(date.getTime())) { - return date; - } - } - - return null; -}; - -const processPage = async (page: PageDataWithoutComponent) => { - if (page.uri.startsWith("wordpress-known-issues")) { - return; - } - - if (page.uri.startsWith("terminus/commands")) { - return; - } - - if (!allowFetch) { - console.log({ - uri: page.uri, - type: page.type, - title: page.title, - normalized: normalizeSlug(page.uri), - }); - - if (page.type === "doc") { - console.log("Skipping doc", page.uri); - return; - } - - let article = await fetchArticleBySlug( - normalizeSlug(page.uri), - siteId, - token, - { - withContent: false, - withMetadata: true, - } - ); - - if (!article) { - return; - } - - if (article.title !== page.title) { - console.log("Updating metadata", article.id, page.title); - await updateMetadata( - article.id, - { - title: page.title, - metadataFields: { - ...article.metadata, - title: page.title, - description: page.description, - }, - }, - managementToken - ); - console.log("Updated metadata", article.id, page.title); - } - - return; - } - - if (page.type === "release-note") { - let article: { id: string } = await fetchArticleBySlug( - normalizeSlug(page.uri) - ); - - const { content, internal, ...doc } = page.data.node; - const date = getDateFromFilename( - doc.relativePath.split("releasenotes/")[1] - ); - - if (!date) { - console.log("No date found for release note", doc.relativePath); - throw new Error("No date found for release note" + page.uri); - } - - if (article) { - return; - } - - if (!article) { - console.log("article not found", page.uri); - article = await createArticle( - { - title: page.title, - siteId: siteId, - metadataFields: { - slug: page.uri, - type: page.type, - relativePath: doc.relativePath, - description: page.description, - title: page.title, - prev: page.data.prev, - next: page.data.next, - }, - tags: doc.frontmatter.tags ?? [], - contentType: "TEXT_MARKDOWN", - }, - managementToken - ); - console.log("Created article", article); - } - - console.log("saving data", page.uri); - - await saveDataAfterPreProcessing( - page.rawFileData, - page, - article, - getDateFromFilename(doc.relativePath) ?? new Date() - ); - } - - if (page.type === "guide") { - let article: { id: string } = await fetchArticleBySlug( - normalizeSlug(page.uri) - ); - - if (article) { - return; - } - const { content, frontmatter, internal, ...doc } = page.data.guide; - - if (!article) { - console.log("article not found", page.uri); - article = await createArticle( - { - title: page.title, - siteId: siteId, - metadataFields: { - slug: page.uri, - type: page.type, - relativePath: doc.relativePath, - description: page.description, - title: page.title, - prev: page.data.prev, - next: page.data.next, - }, - tags: frontmatter.tags ?? [], - contentType: "TEXT_MARKDOWN", - }, - managementToken - ); - console.log("Created article", article); - } - - console.log("saving data", page.uri); - - await saveDataAfterPreProcessing(page.rawFileData, page, article); - } - - if (page.type === "doc") { - let article: { id: string } = await fetchArticleBySlug( - normalizeSlug(page.uri) - ); - if (article) { - return; - } - - const { content, frontmatter, internal, ...doc } = page.data.doc; - - if (!article) { - console.log("article not found", page.uri); - article = await createArticle( - { - title: page.title, - siteId: siteId, - metadataFields: { - slug: page.uri, - type: page.type, - relativePath: doc.relativePath, - description: page.description, - title: page.title, - }, - tags: frontmatter.tags ?? [], - contentType: "TEXT_MARKDOWN", - }, - managementToken - ); - console.log("Created article", article); - } - - await saveDataAfterPreProcessing(page.rawFileData, page, article); - } - - if (page.type === "landing") { - let article: { id: string } = await fetchArticleBySlug( - normalizeSlug(page.uri) - ); - console.log(page); - - if (article) { - return; - } - - console.log(article); - - const landing = page.data.landing; - - if (!article) { - console.log("article not found", page.uri); - article = await createArticle( - { - title: page.title, - siteId: siteId, - metadataFields: { - slug: page.uri, - type: page.type, - description: page.description, - }, - tags: [], - contentType: "TEXT_MARKDOWN", - }, - managementToken - ); - console.log("Created article", article); - } - - await saveDataAfterPreProcessing(JSON.stringify(landing), page, article); - } - - if (page.type === "iframe-embed") { - let article: { id: string } = await fetchArticleBySlug( - normalizeSlug(page.uri) - ); - - if (article) { - return; - } - const { content, frontmatter, internal, ...doc } = page.data.iframeEmbed; - - if (!article) { - console.log("article not found", page.uri); - article = await createArticle( - { - title: page.title, - siteId: siteId, - metadataFields: { - slug: page.uri, - type: page.type, - relativePath: doc.relativePath, - description: page.description, - title: page.title, - }, - tags: frontmatter.tags ?? [], - contentType: "TEXT_MARKDOWN", - }, - managementToken - ); - console.log("Created article", article); - } - - console.log("saving data", page.uri); - - await saveDataAfterPreProcessing(page.rawFileData, page, article); - } -}; - -const updateReleaseNotesListing = async () => { - if (!allowFetch) { - return; - } - - const allReleaseNotes = getAllReleaseNotes(); - const categories = allReleaseNotes.map((releaseNote) => { - return { - node: { - frontmatter: { - categories: releaseNote.frontmatter.categories ?? [], - }, - }, - }; - }); - const releaseNotes = getAllReleaseNotes().map((releaseNote) => { - const { content, internal, ...doc } = releaseNote; - return { slug: doc.fields.slug }; - }); - const allCategories = Array.from( - new Set(categories.map((c) => c.node.frontmatter.categories).flat()) - ); - - const slug = "release-notes-listing"; - let article = await fetchArticleBySlug(slug); - - if (!article) { - article = await createArticle( - { - title: "Release Notes Listing", - siteId: siteId, - metadataFields: { - slug: slug, - }, - tags: [], - contentType: "TEXT_MARKDOWN", - }, - managementToken - ); - console.log("Created article", article); - } - - console.log(article); - - const content = JSON.stringify({ releaseNotes, categories: allCategories }); - - console.log(content); - - // writeFileSync("release-notes-listing.json", content); - - await saveDataAfterPreProcessing( - content, - { - uri: slug, - title: "Release Notes Listing", - description: "Release Notes Listing", - rawFileData: content, - }, - article - ); -}; - -const updateAllJSON = async () => { - if (!allowFetch) { - return; - } - - const files = getFilesByExtension( - join(path.resolve(process.cwd(), "src"), "source"), - [".json"] - ); - - const jsonFiles = files - .map(processFile) - .filter((file): file is ProcessedJsonFile => file !== null); - - for (const file of jsonFiles) { - if (file.fileName.startsWith(".")) { - continue; - } - - console.log("fetching", normalizeSlug(`${file.fileName}-json-file`)); - let article = await fetchArticleBySlug( - normalizeSlug(`${file.fileName}-json-file`) - ); - if (article) { - continue; - } - - if (!article) { - console.log("article not found", file.fileName); - article = await createArticle( - { - title: `${file.fileName}-json-file`, - siteId: siteId, - metadataFields: { - title: file.fileName, - slug: `${file.fileName}-json-file`, - type: "json", - relativePath: file.relativePath, - }, - tags: [], - contentType: "TEXT_MARKDOWN", - }, - managementToken - ); - } - - try { - await saveDataAfterPreProcessing( - JSON.stringify({ content: file.content }), - { - uri: file.fileName, - title: file.fileName, - description: file.fileName, - rawFileData: JSON.stringify({ content: file.content }), - }, - article - ); - } catch (err) { - try { - await disconnectArticle(article.id, managementToken); - } catch {} - console.log("disconnected article", article.id); - continue; - } - } -}; - -const updateGlossary = async () => { - if (!allowFetch) { - return; - } - - const { allDefs, letters } = await getGlossaryPageData(); - - const slug = "glossary"; - let article = await fetchArticleBySlug(slug); - - if (!article) { - article = await createArticle( - { - title: "Glossary", - siteId: siteId, - metadataFields: { - slug: slug, - type: "glossary", - relativePath: "glossary.md", - }, - tags: [], - contentType: "TEXT_MARKDOWN", - }, - managementToken - ); - console.log("Created article", article); - } - - await saveDataAfterPreProcessing( - JSON.stringify({ allDefs, letters }), - { - uri: slug, - title: "Glossary", - description: "Glossary", - rawFileData: JSON.stringify({ allDefs, letters }), - }, - article - ); -}; - -const updatePartials = async () => { - if (!allowFetch) { - return; - } - - const files = processDirectoryForMarkDown("source/content/partials", {}); - - if (files.length > 0) { - // Process files in batches of 25 - const batchSize = 25; - for (let i = 0; i < files.length; i += batchSize) { - const batch = files.slice(i, i + batchSize); - if (allowFetch) { - console.log( - `Processing partials batch ${Math.floor(i / batchSize) + 1} of ${Math.ceil(files.length / batchSize)}` - ); - } - - // Process batch in parallel - await Promise.all( - batch.map(async (file) => { - const slug = normalizeSlug( - file.relativePath.split("source/content/partials/")[1] - ); - console.log(slug); - let article = await fetchArticleBySlug(slug); - if (article) { - return; - } - - if (!article) { - article = await createArticle( - { - title: file.frontmatter.title ?? "partial-file", - contentType: "TEXT_MARKDOWN", - siteId: siteId, - metadataFields: { - slug: slug, - type: "partial", - relativePath: file.relativePath, - }, - tags: [], - }, - managementToken - ); - console.log("Created article", article); - } - - await saveDataAfterPreProcessing( - file.internal.content, - { - uri: slug, - title: file.frontmatter.title ?? "partial-file", - description: file.frontmatter.description ?? "partial-file", - rawFileData: file.content, - }, - article - ); - }) - ); - } - } -}; - -const main = async () => { - await updatePartials(); - await updateGlossary(); - await updateAllJSON(); - await updateReleaseNotesListing(); - - let pages: PageDataWithoutComponent[] = await getAllPages(); - pages = pages.slice(60); - if (pages.length > 0) { - // Process pages in batches of 8 - const batchSize = 8; - for (let i = 0; i < pages.length; i += batchSize) { - const batch = pages.slice(i, i + batchSize); - if (allowFetch) { - console.log( - `Processing batch ${Math.floor(i / batchSize) + 1} of ${Math.ceil(pages.length / batchSize)}` - ); - } - - // Process batch in parallel - await Promise.all(batch.map((page) => processPage(page))); - } - } - - // store JSON and YAML files -}; - -main().catch(console.error); - -async function saveDataAfterPreProcessing( - content: string, - page: Omit, - article: { id: string }, - ingestDate: Date = new Date() -) { - const lines = content - .replaceAll("![", "__IMAGE_REPLACEMENT_MARKER__") - .split("\n"); - const batches: string[] = []; - for (let i = 0; i < lines.length; i += 10000) { - batches.push(lines.slice(i, i + 10000).join("\n")); - } - - let i = 0; - console.log("Processing. Ingest Markdown", page.uri); - - for (const batch of batches) { - i++; - if (i > 1) { - console.error("Breaking"); - break; - } - try { - const processedContent = (() => { - let stringContent = JSON.stringify({ - __PATHEON_SEPARATOR_CONTENT__: batch, - }); - // remove {"__PATHEON_SEPARATOR_CONTENT__": - stringContent = stringContent.replace( - `{"__PATHEON_SEPARATOR_CONTENT__":"`, - "" - ); - //remove last "}" - stringContent = stringContent.replace(`"}`, ""); - return stringContent; - })(); - - await ingestMarkdown( - article.id, - { - content: processedContent, - publishLevel: "prod", - contentType: "markdown", - docName: page.title, - docRevisionDate: ingestDate.getTime(), - }, - managementToken - ); - console.log(i); - } catch (err) { - console.error(err); - throw err; - } - } -} diff --git a/seed/initial.ts b/seed/initial.ts deleted file mode 100644 index 9140c1cd80..0000000000 --- a/seed/initial.ts +++ /dev/null @@ -1,341 +0,0 @@ -import { - BasePageDataWithoutComponent, - fetchArticleBySlug, - getAllPages, - PageDataWithoutComponent, - singleSlugForFetch as normalizeSlug, -} from "@/lib/page-utils"; -import { - createArticle, - ingestMarkdown, - updateMetadata, -} from "../src/lib/ingestion"; -import { - updateGlossary, - updateJSONFiles, - updatePartials, - updateReleaseNotesListing, -} from "./helper"; - -const allowFetch = false; -process.env.SERVE_LOCAL = "true"; - -const token = process.env.PCC_TOKEN || ""; -const siteId = process.env.PCC_SITE_ID || ""; - -const getDateFromFilename = (filename: string): Date | null => { - // Extract date from filename like "2024-01-22-drupal-7-99-release-bug fixes-and-feature-enhancements.md" - const dateMatch = filename.match(/^(\d{4}-\d{2}-\d{2})-/); - - if (dateMatch) { - const dateString = dateMatch[1]; - const date = new Date(dateString); - - // Check if the date is valid - if (!isNaN(date.getTime())) { - return date; - } - } - - return null; -}; - -const processPage = async (page: PageDataWithoutComponent) => { - if (page.uri.startsWith("wordpress-known-issues")) { - return; - } - - if (page.uri.startsWith("terminus/commands")) { - return; - } - - if (!allowFetch) { - console.log({ - uri: page.uri, - type: page.type, - title: page.title, - normalized: normalizeSlug(page.uri), - }); - - if (page.type !== "doc") { - return; - } - - let article = await fetchArticleBySlug( - normalizeSlug(page.uri), - siteId, - token, - { - withContent: false, - withMetadata: true, - } - ); - - if (!article) { - return; - } - - if (article.title !== page.title) { - console.log("Updating metadata", article.id, page.title); - await updateMetadata(article.id, { - title: page.title, - metadataFields: { - ...article.metadata, - title: page.title, - description: page.description, - }, - }); - console.log("Updated metadata", article.id, page.title); - } - - return; - } - - if (page.type === "release-note") { - let article: { id: string } = await fetchArticleBySlug( - normalizeSlug(page.uri) - ); - - const { content, internal, ...doc } = page.data.node; - const date = getDateFromFilename( - doc.relativePath.split("releasenotes/")[1] - ); - - if (!date) { - console.log("No date found for release note", doc.relativePath); - throw new Error("No date found for release note" + page.uri); - } - - if (article) { - return; - } - - if (!article) { - console.log("article not found", page.uri); - article = await createArticle({ - title: page.title, - siteId: process.env.PCC_SITE_ID || "", - metadataFields: { - slug: page.uri, - type: page.type, - relativePath: doc.relativePath, - description: page.description, - title: page.title, - prev: page.data.prev, - next: page.data.next, - }, - tags: doc.frontmatter.tags ?? [], - contentType: "TEXT_MARKDOWN", - }); - console.log("Created article", article); - } - - console.log("saving data", page.uri); - - await saveDataAfterPreProcessing( - page.rawFileData, - page, - article, - getDateFromFilename(doc.relativePath) ?? new Date() - ); - } - - if (page.type === "guide") { - let article: { id: string } = await fetchArticleBySlug( - normalizeSlug(page.uri) - ); - - if (article) { - return; - } - const { content, frontmatter, internal, ...doc } = page.data.guide; - - if (!article) { - console.log("article not found", page.uri); - article = await createArticle({ - title: page.title, - siteId: process.env.PCC_SITE_ID || "", - metadataFields: { - slug: page.uri, - type: page.type, - relativePath: doc.relativePath, - description: page.description, - title: page.title, - prev: page.data.prev, - next: page.data.next, - }, - tags: frontmatter.tags ?? [], - contentType: "TEXT_MARKDOWN", - }); - console.log("Created article", article); - } - - console.log("saving data", page.uri); - - await saveDataAfterPreProcessing(page.rawFileData, page, article); - } - - if (page.type === "doc") { - let article: { id: string } = await fetchArticleBySlug( - normalizeSlug(page.uri) - ); - if (article) { - return; - } - - const { content, frontmatter, internal, ...doc } = page.data.doc; - - if (!article) { - console.log("article not found", page.uri); - article = await createArticle({ - title: page.title, - siteId: process.env.PCC_SITE_ID || "", - metadataFields: { - slug: page.uri, - type: page.type, - relativePath: doc.relativePath, - description: page.description, - title: page.title, - }, - tags: frontmatter.tags ?? [], - contentType: "TEXT_MARKDOWN", - }); - console.log("Created article", article); - } - - await saveDataAfterPreProcessing(page.rawFileData, page, article); - } - - if (page.type === "landing") { - let article: { id: string } = await fetchArticleBySlug( - normalizeSlug(page.uri) - ); - console.log(page); - - if (article) { - return; - } - - console.log(article); - - const landing = page.data.landing; - - if (!article) { - console.log("article not found", page.uri); - article = await createArticle({ - title: page.title, - siteId: process.env.PCC_SITE_ID || "", - metadataFields: { - slug: page.uri, - type: page.type, - description: page.description, - }, - tags: [], - contentType: "TEXT_MARKDOWN", - }); - console.log("Created article", article); - } - - await saveDataAfterPreProcessing(JSON.stringify(landing), page, article); - } - - if (page.type === "iframe-embed") { - let article: { id: string } = await fetchArticleBySlug( - normalizeSlug(page.uri) - ); - - if (article) { - return; - } - const { content, frontmatter, internal, ...doc } = page.data.iframeEmbed; - - if (!article) { - console.log("article not found", page.uri); - article = await createArticle({ - title: page.title, - siteId: process.env.PCC_SITE_ID || "", - metadataFields: { - slug: page.uri, - type: page.type, - relativePath: doc.relativePath, - description: page.description, - title: page.title, - }, - tags: frontmatter.tags ?? [], - contentType: "TEXT_MARKDOWN", - }); - console.log("Created article", article); - } - - console.log("saving data", page.uri); - - await saveDataAfterPreProcessing(page.rawFileData, page, article); - } -}; - -const main = async () => { - await updatePartials(allowFetch); - await updateGlossary(allowFetch); - await updateJSONFiles(allowFetch); - await updateReleaseNotesListing(allowFetch); - - const pages: PageDataWithoutComponent[] = await getAllPages(); - if (pages.length > 0) { - // Process pages in batches of 8 - const batchSize = 8; - for (let i = 0; i < pages.length; i += batchSize) { - const batch = pages.slice(i, i + batchSize); - if (allowFetch) { - console.log( - `Processing batch ${Math.floor(i / batchSize) + 1} of ${Math.ceil(pages.length / batchSize)}` - ); - } - - // Process batch in parallel - await Promise.all(batch.map((page) => processPage(page))); - } - } - - // store JSON and YAML files -}; - -main().catch(console.error); - -async function saveDataAfterPreProcessing( - content: string, - page: Omit, - article: { id: string }, - ingestDate: Date = new Date() -) { - const lines = content - .replaceAll("![", "__IMAGE_REPLACEMENT_MARKER__") - .split("\n"); - const batches: string[] = []; - for (let i = 0; i < lines.length; i += 10000) { - batches.push(lines.slice(i, i + 10000).join("\n")); - } - - let i = 0; - console.log("Processing. Ingest Markdown", page.uri); - - for (const batch of batches) { - i++; - if (i > 1) { - console.error("Breaking"); - break; - } - try { - await ingestMarkdown(article.id, { - content: JSON.stringify({ content: batch }), - publishLevel: "prod", - contentType: "markdown", - docName: page.title, - docRevisionDate: ingestDate.getTime(), - }); - console.log(i); - } catch (err) { - console.error(err); - throw err; - } - } -} diff --git a/seed/update.ts b/seed/update.ts deleted file mode 100644 index 32fb6801e3..0000000000 --- a/seed/update.ts +++ /dev/null @@ -1,91 +0,0 @@ -import { getAllPages } from "@/lib/page-utils"; -import { readFileSync } from "node:fs"; -import { - processPage, - updateGlossary, - updateJSONFiles, - updatePartials, - updateReleaseNotesListing, - updateYamlFiles, -} from "./helper"; - -process.env.SERVE_LOCAL = "true"; - -if (!process.env.PCC_SITE_ID) { - throw new Error("PCC_SITE_ID is not set"); -} - -if (!process.env.PCC_TOKEN) { - throw new Error("PCC_TOKEN is not set"); -} - -if (!process.env.PCC_MANAGEMENT_TOKEN) { - throw new Error("PCC_MANAGEMENT_TOKEN is not set"); -} - -const files = readFileSync("/tmp/changed_files.txt", "utf-8") - .toString() - .split("\n"); - -const filteredFiles = files.filter((e) => e.startsWith("src/source")); - -const main = async () => { - const mdxFiles = filteredFiles.filter( - (e) => e.endsWith(".md") || e.endsWith(".mdx") - ); - - console.log({ mdxFiles }); - // if mdx, then we need to update the page - const pages = await getAllPages(); - const pagesToUpdate = pages.filter((page) => - mdxFiles.includes(page.relativeFilePath) - ); - - console.log({ pagesToUpdate: pagesToUpdate.map((e) => e.relativeFilePath) }); - - const batchSize = 8; - - for (let i = 0; i < pagesToUpdate.length / batchSize; i++) { - const batch = pagesToUpdate.slice(i * batchSize, (i + 1) * batchSize); - await Promise.all(batch.map((page) => processPage(page))); - console.log( - `Processed batch ${i + 1} of ${pagesToUpdate.length / batchSize}` - ); - } - - // if partials encountered, then we need to update the partials - await updatePartials(true, (page) => { - const splitPage = page.split("/src/source/"); - return mdxFiles.includes(`src/source/${splitPage[1]}`); - }); - - // if glossary encountered, then we need to update the glossary - // always update glossary - await updateGlossary(true); - - // if .json encountered, then we need to update the .json - const jsonFiles = filteredFiles.filter((e) => e.endsWith(".json")); - await updateJSONFiles(true, (page) => { - const splitPage = page.split("/src/source"); - - return jsonFiles.includes(`src/source${splitPage[1]}`); - }); - - // if .yaml encountered, then we need to update the .yaml - const yamlFiles = filteredFiles.filter( - (e) => e.endsWith(".yaml") || e.endsWith(".yml") - ); - - await updateYamlFiles(true, (page) => { - const splitPage = page.split("/src/source"); - const result = yamlFiles.includes(`src/source${splitPage[1]}`); - return result; - }); - - // if release-notes/ updated, then we need to update release-notes listing - if (mdxFiles.some((e) => e.includes("src/source/releasenotes/"))) { - await updateReleaseNotesListing(true); - } -}; - -main().catch(console.error); diff --git a/src/app/[...uri]/page.tsx b/src/app/[...uri]/page.tsx index 6e753a9337..5174dd5211 100644 --- a/src/app/[...uri]/page.tsx +++ b/src/app/[...uri]/page.tsx @@ -1,14 +1,7 @@ "use server"; import { notFound } from "next/navigation"; -import { - fetchArticleBySlug, - getAllPages, - singleSlugForFetch, -} from "@/lib/page-utils"; -import { resolveComponent, serveLocalAsync } from "@/lib/resolve-component"; -import { LandingTemplate } from "@/templates/landing"; -import { getMdxProcessed } from "@/server/processor/mdx"; -import { basename, join } from "path"; +import { getAllPages } from "@/lib/page-utils"; +import { resolveComponent } from "@/lib/resolve-component"; import { generateMetadataFromUri, GenerateMetadataParams, @@ -16,11 +9,6 @@ import { export interface DynamicViewProps { params: { uri: string[] }; - searchParams: { - publishingLevel: "PRODUCTION" | "REALTIME"; - pccGrant: string | undefined; - local: "true" | "false" | undefined; - }; } const getPages = async ( @@ -90,7 +78,6 @@ const getPages = async ( export default async function Page(props: { params: Promise; - searchParams: Promise; }) { // create landing pages for each of the pages in the data/landings.yaml file @@ -100,10 +87,7 @@ export default async function Page(props: { return notFound(); } - const { Component } = await getPages( - uri, - // await serveLocalAsync(props.searchParams) - ); + const { Component } = await getPages(uri); if (Component === null) { return notFound(); @@ -114,7 +98,6 @@ export default async function Page(props: { export async function generateMetadata(props: { params: Promise; - searchParams: Promise; }) { const { uri } = await props.params; @@ -125,10 +108,7 @@ export async function generateMetadata(props: { }; } - const { seoMetadata } = await getPages( - uri, - // await serveLocalAsync(props.searchParams) - ); + const { seoMetadata } = await getPages(uri); const { authors, ...returnData } = generateMetadataFromUri({ ...seoMetadata, diff --git a/src/app/glossary/page.tsx b/src/app/glossary/page.tsx index e1c0838393..b47f6ae8c6 100644 --- a/src/app/glossary/page.tsx +++ b/src/app/glossary/page.tsx @@ -8,41 +8,13 @@ import { DocsSidebarLayout } from "@/components/pds-middleware/docs-sidebar-layo import { MOBILE_MENU_BREAKPOINT } from "@/constants"; import HeaderBody from "@/components/common/header-body"; import { TOC } from "@/components/common/toc"; -import { AllDefs, getGlossaryPageData } from "@/lib/glossary"; -import { serveLocalAsync } from "@/lib/resolve-component"; -import { fetchArticleBySlug } from "@/lib/page-utils"; +import { getGlossaryPageData } from "@/lib/glossary"; import { generateMetadataFromUri } from "@/lib/site-metadata"; const converter = new showdown.Converter(); -const getPageData = async (useLocal: boolean) => { - if (!useLocal) { - try { - const article = await fetchArticleBySlug("glossary"); - const parsedContent = JSON.parse(JSON.parse(article.content).content); - - const { allDefs, letters } = parsedContent; - return { allDefs, letters } as { allDefs: AllDefs; letters: string[] }; - } catch (error) { - console.error("Error fetching glossary page data", error); - return { allDefs: [], letters: [] }; - } - } +export default async function GlossaryPage() { const { allDefs, letters } = await getGlossaryPageData(); - return { allDefs, letters }; -}; - -export default async function GlossaryPage(props: { - searchParams: Promise<{ - local: "true" | "false" | undefined; - }>; -}) { - // @todo, consider un-hardcoding this value. - // See https://github.com/pantheon-systems/documentation-in-nextjs/issues/32 - //const useLocal = await serveLocalAsync(props.searchParams); - const useLocal = true; - - const { allDefs, letters } = await getPageData(useLocal); return ( diff --git a/src/app/page.tsx b/src/app/page.tsx index 2d87dfb934..bc38fcc295 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -10,14 +10,6 @@ import { generateMetadataFromUri } from "@/lib/site-metadata"; const containerWidth = "standard"; export default async function Home() { - // Fetch the articles and site in parallel - // const [{ data: articles }, site] = await Promise.all([ - // PCCConvenienceFunctions.getPaginatedArticles({ - // pageSize: 3, - // }), - // PCCConvenienceFunctions.getSite(), - // ]); - const homeYaml = processDirectoryForYaml("source/data", { filter: (filePath) => filePath.includes("home.yaml"), })[0].content[0]; diff --git a/src/app/release-notes/[...uri]/page.tsx b/src/app/release-notes/[...uri]/page.tsx index 152450ba64..af4ed6f457 100644 --- a/src/app/release-notes/[...uri]/page.tsx +++ b/src/app/release-notes/[...uri]/page.tsx @@ -1,35 +1,19 @@ "use server"; -import { - fetchArticleBySlug, - getAllPages, - singleSlugForFetch, -} from "@/lib/page-utils"; -import { serveLocalAsync } from "@/lib/resolve-component"; +import { getAllPages } from "@/lib/page-utils"; import { generateMetadataFromUri } from "@/lib/site-metadata"; -import { getMdxProcessed } from "@/server/processor/mdx"; import { ReleaseNoteTemplate } from "@/templates/release-note"; import { ReleaseNoteListingTemplate } from "@/templates/release-note-listing"; -import { - getArticleBySlugOrId, - PCCConvenienceFunctions, -} from "@pantheon-systems/pcc-react-sdk/server"; import { notFound } from "next/navigation"; -import { basename, join } from "path"; export interface DynamicViewProps { params: Promise<{ uri: string[] }>; searchParams: Promise<{ - local: "true" | "false" | undefined; category?: string[]; }>; } -const getPage = async ( - uri: string[], - useLocal: boolean, - category?: string[] -) => { +const getPage = async (uri: string[], category?: string[]) => { if (uri.length === 1 && !Number.isNaN(parseInt(uri[0]))) { // list of articles @@ -80,7 +64,7 @@ export default async function Page(props: DynamicViewProps) { const { category } = await props.searchParams; - const { Component } = await getPage(uri, false, category); + const { Component } = await getPage(uri, category); if (Component === null) { return notFound(); diff --git a/src/components/grid.tsx b/src/components/grid.tsx deleted file mode 100644 index 2d8a7dffbe..0000000000 --- a/src/components/grid.tsx +++ /dev/null @@ -1,154 +0,0 @@ -"use client"; - -import type { - ArticleWithoutContent, - Site, -} from "@pantheon-systems/pcc-react-sdk"; -import { getArticleURLFromSite } from "@pantheon-systems/pcc-react-sdk/server"; -import Link from "next/link"; -import { useState } from "react"; -import { cn } from "@/lib/utils"; -import { Button } from "./ui/button"; - -export function HomepageArticleGrid({ - articles, - site, -}: { - articles: ArticleWithoutContent[]; - site: Site; -}) { - return ( -
- {articles.map((article, index) => ( - 2 && index === 2)} - site={site} - /> - ))} -
- ); -} - -export function ArticleGrid({ - articles, - basePath = "/articles", - site, -}: { - articles: ArticleWithoutContent[]; - basePath?: string; - site: Site; -}) { - return ( -
- {articles.map((article) => ( - - ))} -
- ); -} - -interface ArticleGridCardProps { - article: ArticleWithoutContent; - basePath?: string; - imageAltText?: string; - isWide?: boolean; - site: Site; -} - -export function ArticleGridCard({ - article, - basePath = "/articles", - imageAltText, - isWide = false, - site, -}: ArticleGridCardProps) { - const targetHref = getArticleURLFromSite(article, site, basePath); - const imageSrc = (article.metadata?.["image"] as string) || null; - - return ( -
-
- -
-
-
-

- {article.title} -

- {article.metadata?.["Description"] ? ( -

- {article.metadata?.["Description"]?.toString() || ""} -

- ) : null} -
- - - -
-
- ); -} - -function GridItemCoverImage({ - imageSrc, - imageAltText, -}: { - imageSrc: string | null; - imageAltText?: string | null | undefined; -}) { - const [hasLoaded, setHasLoaded] = useState(false); - - return ( - <> - {imageSrc != null ? ( - // eslint-disable-next-line @next/next/no-img-element - {imageAltText setHasLoaded(true)} - className={cn("h-full w-full object-cover", { - block: hasLoaded, - hidden: !hasLoaded, - })} - /> - ) : null} - - {imageSrc == null || !hasLoaded ? ( -
- ) : null} - - ); -} diff --git a/src/components/header/client-header.tsx b/src/components/header/client-header.tsx index 24aa400c84..deed235f56 100644 --- a/src/components/header/client-header.tsx +++ b/src/components/header/client-header.tsx @@ -2,7 +2,7 @@ import { MOBILE_MENU_BREAKPOINT } from "@/constants"; import { - MenuItem, + NavMenuItem, NavMenu as PDSNavMenu, } from "@pantheon-systems/pds-toolkit-react"; import { createElement, useState } from "react"; @@ -15,9 +15,10 @@ export const ClientHeader: React.FC<{ title: string; }[]; }> = ({ omniLinks }) => { - const OmniLinks = omniLinks.map((item) => { + const OmniLinks: NavMenuItem[] = omniLinks.map((item) => { const theLink = createElement(Link, { href: item.link }, item.title); return { + label: item.title, linkContent: theLink, }; }); @@ -37,7 +38,7 @@ export const ClientHeader: React.FC<{ menuItems={[ { label: "Documentation", - links: OmniLinks as MenuItem[], + links: OmniLinks, }, { label: "Support", diff --git a/src/components/omni-components/SideNavClient.tsx b/src/components/omni-components/SideNavClient.tsx new file mode 100644 index 0000000000..cf420fd76e --- /dev/null +++ b/src/components/omni-components/SideNavClient.tsx @@ -0,0 +1,58 @@ +"use client"; +import React from "react"; +import Link from "next/link"; +import { SideNavCompact, Icon } from "@/components/ui/pds-re-export"; +import { MOBILE_MENU_BREAKPOINT } from "@/constants"; + +// Plain data structure (no React elements) +export interface NavItemData { + link: string; + title: string; + isActive: boolean; + children?: NavItemData[]; +} + +// Convert plain data to the format SideNavCompact expects (with React elements) +const convertToMenuItems = (items: NavItemData[]): any[] => { + return items.map((item) => { + let linkText: React.ReactNode = item.title; + + // If the link is external, add an icon + if (item.link.startsWith("http")) { + linkText = ( + <> + {item.title}{" "} + + + ); + } + + return { + isActive: item.isActive, + links: item.children && item.children.length > 0 + ? convertToMenuItems(item.children) + : undefined, + linkContent: {linkText}, + }; + }); +}; + +export const SideNavClient = ({ + headingText, + menuItemsData, +}: { + headingText: string; + menuItemsData: NavItemData[]; +}) => { + const menuItems = convertToMenuItems(menuItemsData); + + return ( + + ); +}; diff --git a/src/components/omni-components/client-helper.ts b/src/components/omni-components/client-helper.ts index 19e6c0e69a..620f107c55 100644 --- a/src/components/omni-components/client-helper.ts +++ b/src/components/omni-components/client-helper.ts @@ -24,11 +24,15 @@ export const turnItemsIntoLinks = ( ); } + const links = item.children && item.children.length > 0 + ? item.children + .filter((child: any) => child && child.link) // Filter out invalid children + .map((child: any) => turnItemsIntoLinks(child, activePage)) + : undefined; + return { isActive: item.link === activePage || item.link === "/" + activePage, - links: item.children - ? item.children.map((child: any) => turnItemsIntoLinks(child, activePage)) - : false, + links: links && links.length > 0 ? links : undefined, linkContent: React.createElement(Link, { href: item.link }, linkText), }; }; diff --git a/src/components/omniSideBarNav.tsx b/src/components/omniSideBarNav.tsx index 7d4f8e35fc..9d56db6a6c 100644 --- a/src/components/omniSideBarNav.tsx +++ b/src/components/omniSideBarNav.tsx @@ -1,78 +1,37 @@ -"use server"; -import { - findSubMenuItemsToUse, - getOmniSidebarActiveSection, -} from "./omni-components/helpers"; - -import { SideNavCompact } from "./ui/pds-re-export"; -import { Navbar } from "./common/navbar"; -import { MOBILE_MENU_BREAKPOINT } from "@/constants"; +import { getOmniSidebarActiveSection, OmniItem } from "./omni-components/helpers"; import { getOmniItems } from "./omni-components"; -import { turnItemsIntoLinks } from "./omni-components/client-helper"; +import { SideNavClient, NavItemData } from "./omni-components/SideNavClient"; + +// Convert OmniItem to plain NavItemData +const convertToNavData = (item: OmniItem, activePage: string): NavItemData => { + return { + link: item.link, + title: item.title, + isActive: item.link === activePage || item.link === "/" + activePage, + children: item.children && item.children.length > 0 + ? item.children + .filter((child) => child && child.link) + .map((child) => convertToNavData(child, activePage)) + : undefined, + }; +}; export const OmniSidebarNav = async ({ activePage, - fallbackItems = null, - fallbackTitle = "", - submenuPathToUse = "", - slot = "", }: { activePage: string; - fallbackItems?: any[] | null; - fallbackTitle: string; - submenuPathToUse: string; - slot?: string; }) => { const OmniItems = await getOmniItems(); - - /* Reporting debug code - const flattenedOmniItems = flattenOmniItems(OmniItems); - const results = CalculateFilteredPathsInMenu( - filteredWrittenPaths, - flattenedOmniItems, -); - console.log(results); - */ - const menuItems = getOmniSidebarActiveSection(activePage, OmniItems); - // If the caller is asking for a specific submenu, use that directly. - if (submenuPathToUse.length > 0) { - const submenuItems = findSubMenuItemsToUse(submenuPathToUse, OmniItems); - if (!submenuItems) { - return null; - } - const submenuLinks = turnItemsIntoLinks(submenuItems, activePage); + if (menuItems) { + const navData = convertToNavData(menuItems, activePage); return ( - ); - } else if (menuItems) { - const OmniLinks = turnItemsIntoLinks(menuItems, activePage); - return ( - - ); - } else if (fallbackItems && fallbackItems.length > 0) { - return ( - <> - - - ); } else { return
; } diff --git a/src/components/ui/mdx-wrapper/default-components.tsx b/src/components/ui/mdx-wrapper/default-components.tsx index 66cddf1f3c..84a517d02b 100644 --- a/src/components/ui/mdx-wrapper/default-components.tsx +++ b/src/components/ui/mdx-wrapper/default-components.tsx @@ -1,5 +1,4 @@ -import { ComponentProps } from "react"; -import { ArticleRenderer } from "../pds-re-export"; +import { ReactNode } from "react"; import { Alert } from "@/components/common/alert"; import { Callout } from "@/components/common/callout"; import { Accordion } from "@/components/common/accordion"; @@ -29,7 +28,14 @@ import { Popover } from "@/components/common/popover"; import { Wistia } from "@/components/common/wistia"; import Enablement from "@/components/common/enablement"; -export type MdxWrapperProps = ComponentProps; +export interface MdxWrapperArticle { + content?: string; +} + +export interface MdxWrapperProps { + article: MdxWrapperArticle; + componentMap?: Record>; +} const ImageRenderer = async ({ src = "", alt }: any) => { let resolvedSrc = path.join(process.cwd(), "src", "source", "images", src); diff --git a/src/components/ui/pds-re-export.ts b/src/components/ui/pds-re-export.ts index f28b0ce980..3f468d8cdd 100644 --- a/src/components/ui/pds-re-export.ts +++ b/src/components/ui/pds-re-export.ts @@ -1,3 +1,2 @@ "use client"; export * from "@pantheon-systems/pds-toolkit-react"; -export * from "@pantheon-systems/pcc-react-sdk/components"; diff --git a/src/hooks/usePagination.ts b/src/hooks/usePagination.ts deleted file mode 100644 index 84b5c1f12a..0000000000 --- a/src/hooks/usePagination.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { - ArticleWithoutContent, - PaginatedArticle, -} from "@pantheon-systems/pcc-react-sdk"; -import { useEffect, useState } from "react"; - -interface Props { - cursor?: string; - initialArticles?: PaginatedArticle[] | ArticleWithoutContent[]; - fetcher: (cursor: string | null | undefined) => Promise<{ - data: PaginatedArticle[] | ArticleWithoutContent[]; - newCursor: string; - }>; -} - -export function usePagination({ cursor, initialArticles, fetcher }: Props) { - const [currentCursor, setCurrentCursor] = useState(cursor); - const [articlePages, setArticlePages] = useState( - initialArticles ? [initialArticles] : [], - ); - const [fetching, setFetching] = useState(false); - const [currentPage, setCurrentPage] = useState(0); - - useEffect(() => { - (async () => { - if (articlePages[currentPage]) return; - - setFetching(true); - const { data, newCursor } = await fetcher(currentCursor); - setFetching(false); - setArticlePages((prev) => { - const result = [...prev]; - result[currentPage] = data; - return result; - }); - setCurrentCursor(newCursor); - })(); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [currentPage]); - - return { - // Return last page if current page doesn't exist - data: articlePages[currentPage] || articlePages[articlePages.length - 1], - fetching, - onPageChange: setCurrentPage, - currentPage, - }; -} diff --git a/src/lib/ingestion.ts b/src/lib/ingestion.ts deleted file mode 100644 index 150c67b976..0000000000 --- a/src/lib/ingestion.ts +++ /dev/null @@ -1,242 +0,0 @@ -// Types for article creation -export type CreateArticleRequest = { - title: string; - siteId: string; - metadataFields: { - slug: string; - [key: string]: any; - }; - tags: string[]; - contentType: string; -}; - -export type CreateArticleResponse = { - id: string; -}; - -// Types for markdown ingestion -export type IngestMarkdownRequest = { - content: string; - publishLevel: "prod" | "realtime"; - contentType: "html" | "markdown"; - docName: string; - docRevisionDate: number; -}; - -export type IngestMarkdownResponse = { - success: boolean; - message?: string; -}; - -/** - * Creates an article using the Pantheon Content Cloud API - * @param articleData - The article data to create - * @returns Promise - The response containing the created article ID - */ -export const createArticle = async ( - articleData: CreateArticleRequest, - bearerToken: string = process.env.PCC_MANAGEMENT_TOKEN || "" -): Promise => { - const url = "https://addonapi-gfttxsojwq-uc.a.run.app/articles/create"; - - console.log( - "Creating article", - articleData.title, - articleData.metadataFields?.slug, - articleData.metadataFields?.uri - ); - try { - const response = await fetch(url, { - method: "POST", - headers: { - Authorization: `Bearer ${bearerToken}`, - "Content-Type": "application/json", - }, - body: JSON.stringify(articleData), - }); - - if (!response.ok) { - console.error(await response.text()); - - throw new Error( - `HTTP error! status: ${response.status} ${JSON.stringify( - articleData.metadataFields - )}` - ); - } - - const data: CreateArticleResponse = await response.json(); - return data; - } catch (error) { - console.error("Error creating article:", error); - throw error; - } -}; - -/** - * Ingests markdown content using the Pantheon Content Cloud API - * @param articleId - The ID of the article to ingest content into - * @param ingestData - The markdown content and metadata to ingest - * @returns Promise - The response from the ingestion API - */ -export const ingestMarkdown = async ( - articleId: string, - ingestData: IngestMarkdownRequest, - token: string = process.env.PCC_MANAGEMENT_TOKEN || "" -): Promise => { - const url = `https://addonapi-gfttxsojwq-uc.a.run.app/articles/${articleId}/ingest`; - - try { - const response = await fetch(url, { - method: "POST", - headers: { - Authorization: `Bearer ${token}`, - "Content-Type": "application/json", - }, - body: JSON.stringify(ingestData), - }); - - if (!response.ok) { - console.error("Error ingesting markdown:", await response.text()); - throw new Error( - `HTTP failed to ingest markdown: ${response.status} ${response.statusText}` - ); - } - - const data: IngestMarkdownResponse = await response.json(); - return data; - } catch (error) { - console.error("Error ingesting markdown:", error); - throw error; - } -}; - -/** - * Disconnects an article from the content structure - * @param articleId - The ID of the article to disconnect - * @param bearerToken - The bearer token for the API - * @returns Promise - The response from the disconnect API - */ -export async function disconnectArticle( - articleId: string, - bearerToken: string = process.env.PCC_MANAGEMENT_TOKEN || "" -): Promise { - const baseUrl = "https://addonapi-gfttxsojwq-uc.a.run.app"; - - try { - const response = await fetch( - `${baseUrl}/articles/${articleId}/disconnect`, - { - method: "POST", - headers: { - Authorization: `Bearer ${bearerToken}`, - "Content-Type": "application/json", - }, - } - ); - - if (!response.ok) { - console.log(await response.text()); - throw new Error(`HTTP error! status: ${response.status}`); - } - - console.log(`Successfully disconnected article: ${articleId}`); - } catch (error) { - console.error(`Error disconnecting article ${articleId}:`, error); - throw error; - } -} - -export type ContentStructureItem = { - id: string; - hidden?: boolean; - isHidden?: boolean; - children: ContentStructureItem[]; -} & ( - | { - type: "article"; - name: string; - published: boolean; - slug: string; - } - | { - type: "category"; - name: string; - } -); - -export interface PantheonSite { - contentStructure: { - active: ContentStructureItem[]; - uncategorized: ContentStructureItem[]; - }; -} - -/** - * Updates the content structure for a site - * @param siteId - The ID of the site to update - * @param contentStructure - The content structure to update - * @param bearerToken - The bearer token for the API - * @returns Promise - The response from the update API - */ -export async function updateContentStructure( - siteId: string, - contentStructure: PantheonSite, - bearerToken: string = process.env.PCC_MANAGEMENT_TOKEN || "" -) { - const url = `https://addonapi-gfttxsojwq-uc.a.run.app/sites/${siteId}/contentStructure`; - - try { - const response = await fetch(url, { - method: "PATCH", - headers: { - Authorization: `Bearer ${bearerToken}`, - "Content-Type": "application/json", - }, - body: JSON.stringify(contentStructure), - }); - - if (!response.ok) { - console.error("Error updating content structure:", await response.text()); - throw new Error(`HTTP error! status: ${response.status}`); - } - - console.log(`Successfully updated content structure for site: ${siteId}`); - - return response.text(); - } catch (error) { - console.error("Error updating content structure:", error); - throw error; - } -} - -export async function updateMetadata( - articleId: string, - metadata: any, - bearerToken: string = process.env.PCC_MANAGEMENT_TOKEN || "" -) { - const url = `https://addonapi-gfttxsojwq-uc.a.run.app/articles/${articleId}`; - - try { - const response = await fetch(url, { - method: "PATCH", - headers: { - Authorization: `Bearer ${bearerToken}`, - "Content-Type": "application/json", - }, - body: JSON.stringify(metadata), - }); - - if (!response.ok) { - console.error("Error updating metadata:", await response.text()); - throw new Error(`HTTP error! status: ${response.status}`); - } - - console.log(`Successfully updated metadata for article: ${articleId}`); - - return response.text(); - } catch (error) { - console.error("Error updating metadata:", error); - throw error; - } -} diff --git a/src/lib/page-utils.ts b/src/lib/page-utils.ts index 7e02fed419..cd6f576925 100644 --- a/src/lib/page-utils.ts +++ b/src/lib/page-utils.ts @@ -143,21 +143,6 @@ export type PageData = PageDataWithoutComponent & { Component: React.ReactNode; }; -/* This helper function helps determine which template should be applied to a piece of content */ -export const calculateTemplate = ( - node: ProcessedFile, - defaultTemplate: "doc" | "terminuspage" | "certificationpage" | "video" -) => { - if ( - node.frontmatter && - node.frontmatter.layout && - node.frontmatter.layout !== null - ) { - return node.frontmatter.layout; - } - return defaultTemplate; -}; - export const normalizeSlug = (slug: string): string => { let normalizedSlug = slug; if (normalizedSlug.startsWith("/")) { @@ -622,154 +607,3 @@ export const getAllPages = async ( ...landingPages, ]; }; - -export const fetchArticleById = async (id: string) => { - const query = ` - query GetArticle($id: String, $contentType: ContentType, $publishingLevel: PublishingLevel) { - article(id: $id, contentType: $contentType, publishingLevel: $publishingLevel) { - id - title - content - slug - tags - siteId - metadata - publishedDate - publishingLevel - contentType - updatedAt - previewActiveUntil - } - } - `; - - const variables = { - id: id, - contentType: "TEXT_MARKDOWN", - publishingLevel: "PRODUCTION", - }; - - try { - const response = await fetch( - `${process.env.PCC_HOST || "https://gql.prod.pcc.pantheon.io"}/sites/${process.env.PCC_SITE_ID}/query`, - { - method: "POST", - headers: { - "Content-Type": "application/json", - "PCC-TOKEN": process.env.PCC_TOKEN || "", - }, - body: JSON.stringify({ - query, - variables, - }), - } - ); - - if (!response.ok) { - const error = await response.text(); - throw new Error(`HTTP error! status: ${response.status} ${error} ${id}`); - } - - const data = await response.json(); - return data.data.article; - } catch (error) { - console.error("Fetch error:", error); - throw error; - } -}; - -// Using fetch with the same GraphQL query -export const fetchArticleBySlug = async ( - slug: string, - siteId: string = process.env.PCC_SITE_ID || "", - token: string = process.env.PCC_TOKEN || "", - options: { withContent: boolean; withMetadata: boolean } = { - withContent: true, - withMetadata: true, - }, - tries: number = 2 -) => { - console.debug("fetching article by slug", slug); - - const query = ` - query GetArticle($slug: String, $contentType: ContentType, $publishingLevel: PublishingLevel) { - article(slug: $slug, contentType: $contentType, publishingLevel: $publishingLevel) { - id - title - ${options.withContent === true ? "content" : ""} - slug - tags - siteId - ${options.withMetadata === true ? "metadata" : ""} - publishedDate - publishingLevel - contentType - updatedAt - previewActiveUntil - } - } - `; - - const variables = { - slug: slug, - contentType: "TEXT_MARKDOWN", - publishingLevel: "PRODUCTION", - }; - - while (tries > 0) { - tries -= 1; - try { - const response = await fetch( - `${process.env.PCC_HOST || "https://gql.prod.pcc.pantheon.io"}/sites/${siteId}/query`, - { - method: "POST", - headers: { - "Content-Type": "application/json", - "PCC-TOKEN": token, - }, - body: JSON.stringify({ - query, - variables, - }), - } - ); - - if (!response.ok) { - if (response.status === 404) { - return null; - } - - const error = await response.text(); - throw new Error( - `HTTP error! status: ${response.status} ${error} ${slug}` - ); - } - - const data = await response.json(); - return data.data.article; - } catch (error) { - console.error("Fetch error:", error, { tries }); - if (tries === 0) { - throw error; - } - } - } -}; - -export const singleSlugForFetch = (slug: string) => { - if (slug.startsWith("_")) { - slug = slug.slice(1); - } - - return slug - .replaceAll("/", "-") - .replaceAll("_", "-") - .replaceAll(".", "-") - .replaceAll(" ", "-") - .replaceAll("-&-", "-") - .replaceAll(",-", "-") - .replaceAll("!", "") - .replaceAll("(", "") - .replaceAll(")", "") - .toLowerCase(); -}; diff --git a/src/lib/resolve-component.tsx b/src/lib/resolve-component.tsx index a3c49ec160..6751fe2587 100644 --- a/src/lib/resolve-component.tsx +++ b/src/lib/resolve-component.tsx @@ -1,96 +1,26 @@ -import { PageDataWithoutComponent, calculateTemplate } from "./page-utils"; - -export const serveLocal = (search?: { local?: "true" | "false" }) => { - let useLocal = false; - if (process.env.SERVE_LOCAL === "false") { - return false; - } - - if (process.env.SERVE_LOCAL === "true") { - return true; - } - - if (process.env.NODE_ENV === "development") { - useLocal = true; - if (search?.local === "false") { - useLocal = false; - } - } - - return useLocal; -}; - -export const serveLocalAsync = async ( - searchParams?: Promise<{ - local?: "true" | "false"; - }> -) => { - const search = await searchParams; - - // @todo, don't hard code this to true - // https://github.com/pantheon-systems/documentation-in-nextjs/issues/84 - return true; - // return serveLocal(search); -}; +import { PageDataWithoutComponent } from "./page-utils"; export const resolveComponent = async ( pageData: PageDataWithoutComponent & { relativeFilePath?: string } ): Promise<{ Component: React.ReactNode; template: string }> => { switch (pageData.type) { case "doc": { - const template = calculateTemplate(pageData.data.doc, "doc"); - - if (template === "doc") { - const Doc = await import(`@/templates/doc`); - return { - Component: , - template: "doc", - }; - } else if (template === "terminuspage") { - const Terminus = await import(`@/templates/terminus`); - return { - Component: , - template: "terminuspage", - }; - } else if (template === "certificationpage") { - const Certification = await import(`@/templates/certification`); - return { - Component: ( - - ), - template: "certification", - }; - } else if (template === "video") { - const Video = await import(`@/templates/guide`); - return { - Component: ( - - ), - template: "video", - }; - } else { - const Doc = await import(`@/templates/doc`); - return { - Component: , - template: "doc", - }; - } + const Doc = await import(`@/templates/doc`); + return { + Component: , + template: "doc", + }; } case "guide": { - const Guide = await import(`@/templates/guide`); + const Doc = await import(`@/templates/doc`); return { Component: ( - ), template: "guide", diff --git a/src/lib/utils.ts b/src/lib/utils.ts index b4dfcf451c..74ddcabd5f 100644 --- a/src/lib/utils.ts +++ b/src/lib/utils.ts @@ -1,9 +1,4 @@ -import { - Article, - ArticleWithoutContent, -} from "@pantheon-systems/pcc-react-sdk"; import { clsx, type ClassValue } from "clsx"; -import { Metadata } from "next"; import { twMerge } from "tailwind-merge"; export function cn(...inputs: ClassValue[]) { @@ -19,70 +14,6 @@ export function formatDate(input: string | number): string { }); } -export function getSeoMetadata( - article: ArticleWithoutContent | null -): Metadata { - if (article == null) { - return { - openGraph: { - type: "website", - }, - }; - } - - const tags: string[] = - article.tags && article.tags.length > 0 ? article.tags : []; - const imageProperties = [ - article.metadata?.image, - article.metadata?.["image"], - // Extend as needed - ] - .filter((url): url is string => typeof url === "string") - .map((url) => ({ url })); - const description = article.metadata?.description - ? String(article.metadata?.description) - : "Article hosted using Pantheon Content Cloud"; - - const authors: Metadata["authors"] = []; - - // Collecting data from metadata fields - Object.entries(article.metadata || {}).forEach(([k, v]) => { - const key = k.toLowerCase().trim(); - - switch (key) { - case "author": { - if (typeof v === "string") { - authors.push({ name: v }); - } - break; - } - case "complex-author": { - if (typeof v === "string") { - const authorName = undefined; - - if (authorName) { - authors.push({ name: v }); - } - } - break; - } - } - }); - - return { - title: article.title, - description, - keywords: tags, - authors, - openGraph: { - type: "website", - title: article.title || undefined, - images: imageProperties, - description, - }, - }; -} - export const isExternalLink = (url: string) => { // Empty URLs if (!url) { diff --git a/src/server/processor/json.tsx b/src/server/processor/json.tsx index ff5912f357..3bdc2ed08e 100644 --- a/src/server/processor/json.tsx +++ b/src/server/processor/json.tsx @@ -1,5 +1,5 @@ import fs from "fs"; -import path, { join } from "path"; +import path from "path"; import { BaseFields, BaseInternal, @@ -19,8 +19,6 @@ import { safeProcessFile, getFileInfo, } from "./helper"; -import { serveLocal, serveLocalAsync } from "@/lib/resolve-component"; -import { fetchArticleBySlug, singleSlugForFetch } from "@/lib/page-utils"; export type JsonFileContent = Record; @@ -75,47 +73,6 @@ export const processDirectoryForJson = async ( fileName: string | null, baseDirectory = path.resolve(process.cwd(), "src") ): Promise => { - const useLocal = serveLocal(); - - if (useLocal === false && fileName) { - fileName = fileName.split(".")[0]; - - const article = await fetchArticleBySlug( - singleSlugForFetch(`${fileName}-json-file`), - undefined, - undefined, - undefined, - 1 - ); - - if (article) { - const content = JSON.parse(article.content); - const parsedContent = JSON.parse(content.content).content; - - const relativePath = article.metadata.relativePath; - - return [ - { - id: generateId(join(process.cwd(), relativePath)), - fileAbsolutePath: join(process.cwd(), relativePath), - relativePath: relativePath, - fileName: article.fileName, - content: parsedContent, - fields: generateBaseFields( - join(process.cwd(), relativePath), - article.fileName, - parsedContent - ), - internal: { - type: "Json", - content: parsedContent, - contentDigest: generateContentDigest(content.content), - }, - }, - ]; - } - } - const options = { extensions: [".json"], filter: (filePath: string) => { diff --git a/src/source/content/cache.md b/src/source/content/cache.md index 3a0b73f668..bdf4ce7c01 100644 --- a/src/source/content/cache.md +++ b/src/source/content/cache.md @@ -4,9 +4,7 @@ description: Understand frontend and backend caching on our platform. contributors: [dwayne] permalink: docs/cache tags: [cache] -layout: video searchboost: 50 -type: video contenttype: [doc] innav: [true] categories: [cache] diff --git a/src/source/content/certification/about.md b/src/source/content/certification/about.md index f79249e3d0..2398aeb280 100644 --- a/src/source/content/certification/about.md +++ b/src/source/content/certification/about.md @@ -1,9 +1,6 @@ --- title: "Benefits of Becoming WebOps Certified" subtitle: "Learn about the Pantheon WebOps Certification program" -showtoc: true -contributors: [] -layout: certificationpage permalink: docs/certification/about --- diff --git a/src/source/content/certification/exam.md b/src/source/content/certification/exam.md index 9181270e34..b5639e7a9a 100644 --- a/src/source/content/certification/exam.md +++ b/src/source/content/certification/exam.md @@ -1,9 +1,6 @@ --- title: "WebOps Certification: Exam Overview" subtitle: "Pantheon WebOps Certification Exam Overview" -contributors: [] -showtoc: true -layout: certificationpage permalink: docs/certification/exam --- ## Exam Instructions diff --git a/src/source/content/certification/study-guide-cms/00-intro.md b/src/source/content/certification/study-guide-cms/00-intro.md index 437ca3b87a..47792cbbf1 100644 --- a/src/source/content/certification/study-guide-cms/00-intro.md +++ b/src/source/content/certification/study-guide-cms/00-intro.md @@ -2,19 +2,8 @@ title: WebOps Certification subtitle: Study Guide Introduction description: Learn about the three failure modes of website operations. -certificationpage: true -type: certificationpage -layout: certificationpage -showtoc: true -tags: [] permalink: docs/certification/study-guide -contenttype: [guide] -innav: [false] -categories: [] cms: [drupal, wordpress] -audience: [] -product: [] -integration: [--] nexturl: /certification/study-guide/webops --- diff --git a/src/source/content/certification/study-guide-cms/01-webops.md b/src/source/content/certification/study-guide-cms/01-webops.md index 186a20f423..9caf7ad08b 100644 --- a/src/source/content/certification/study-guide-cms/01-webops.md +++ b/src/source/content/certification/study-guide-cms/01-webops.md @@ -2,19 +2,8 @@ title: WebOps Certification subtitle: "Chapter 1: WebOps" description: Learn about the principles and benefits of WebOps. -certificationpage: true -showtoc: true -type: certificationpage -layout: certificationpage -tags: [] permalink: docs/certification/study-guide/webops -contenttype: [guide] -innav: [false] -categories: [] cms: [drupal, wordpress] -audience: [] -product: [] -integration: [--] previousurl: /certification/study-guide nexturl: /certification/study-guide/platform --- diff --git a/src/source/content/certification/study-guide-cms/02-platform.md b/src/source/content/certification/study-guide-cms/02-platform.md index 4fefe124a0..2bbfce97dc 100644 --- a/src/source/content/certification/study-guide-cms/02-platform.md +++ b/src/source/content/certification/study-guide-cms/02-platform.md @@ -2,19 +2,8 @@ title: WebOps Certification subtitle: "Chapter 2: Pantheon Platform" description: Understand the layers of Pantheon's platform and how it can be used to solve problems using WebOps best practicies. -certificationpage: true -showtoc: true -type: certificationpage -layout: certificationpage -tags: [] permalink: docs/certification/study-guide/platform -contenttype: [guide] -innav: [false] -categories: [] cms: [drupal, wordpress] -audience: [] -product: [] -integration: [--] previousurl: /certification/study-guide/webops nexturl: /certification/study-guide/create --- diff --git a/src/source/content/certification/study-guide-cms/03-create.md b/src/source/content/certification/study-guide-cms/03-create.md index 882a5fe414..be311c875e 100644 --- a/src/source/content/certification/study-guide-cms/03-create.md +++ b/src/source/content/certification/study-guide-cms/03-create.md @@ -2,19 +2,8 @@ title: WebOps Certification subtitle: "Chapter 3: Site Creation" description: Learn how to create a site on Pantheon. -certificationpage: true -showtoc: true -type: certificationpage -layout: certificationpage -tags: [] permalink: docs/certification/study-guide/create -contenttype: [guide] -innav: [false] -categories: [] cms: [drupal, wordpress] -audience: [] -product: [] -integration: [--] previousurl: /certification/study-guide/platform nexturl: /certification/study-guide/cdn --- diff --git a/src/source/content/certification/study-guide-cms/04-cdn.md b/src/source/content/certification/study-guide-cms/04-cdn.md index 0659fb2083..978c534b78 100644 --- a/src/source/content/certification/study-guide-cms/04-cdn.md +++ b/src/source/content/certification/study-guide-cms/04-cdn.md @@ -2,19 +2,8 @@ title: WebOps Certification subtitle: "Chapter 4: Content Delivery Network" description: Pantheon's edge layer increases the speed and scalability of all sites on the platform. The Advanced Global CDN can be customized for tailored usage. -certificationpage: true -type: certificationpage -layout: certificationpage -showtoc: true -tags: [] permalink: docs/certification/study-guide/cdn -contenttype: [guide] -innav: [false] -categories: [] cms: [drupal, wordpress] -audience: [] -product: [] -integration: [--] previousurl: /certification/study-guide/create nexturl: /certification/study-guide/cms --- diff --git a/src/source/content/certification/study-guide-cms/05-cms.md b/src/source/content/certification/study-guide-cms/05-cms.md index af2cee8cde..71256688b9 100644 --- a/src/source/content/certification/study-guide-cms/05-cms.md +++ b/src/source/content/certification/study-guide-cms/05-cms.md @@ -2,19 +2,8 @@ title: WebOps Certification subtitle: "Chapter 5: CMS Infrastructure" description: Pantheon's containerized infrastructure makes CMS applications faster, more scalable, and more secure. -certificationpage: true -type: certificationpage -layout: certificationpage -showtoc: true -tags: [] permalink: docs/certification/study-guide/cms -contenttype: [guide] -innav: [false] -categories: [] cms: [drupal, wordpress] -audience: [] -product: [] -integration: [--] previousurl: /certification/study-guide/cdn nexturl: /certification/study-guide/deploy --- diff --git a/src/source/content/certification/study-guide-cms/06-deploy.md b/src/source/content/certification/study-guide-cms/06-deploy.md index ecf2268a48..55b84533a9 100644 --- a/src/source/content/certification/study-guide-cms/06-deploy.md +++ b/src/source/content/certification/study-guide-cms/06-deploy.md @@ -2,19 +2,8 @@ title: WebOps Certification subtitle: "Chapter 6: The Deployment Pipeline" description: Learn about the deployment pipeline for CMS Sites on Pantheon as it relates to code, files, and databases. -certificationpage: true -type: certificationpage -layout: certificationpage -showtoc: true -tags: [] permalink: docs/certification/study-guide/deploy -contenttype: [guide] -innav: [false] -categories: [] cms: [drupal, wordpress] -audience: [] -product: [] -integration: [--] previousurl: /certification/study-guide/cms nexturl: /certification/study-guide/people --- diff --git a/src/source/content/certification/study-guide-cms/07-people.md b/src/source/content/certification/study-guide-cms/07-people.md index 900f8fcd3b..08474300c4 100644 --- a/src/source/content/certification/study-guide-cms/07-people.md +++ b/src/source/content/certification/study-guide-cms/07-people.md @@ -2,19 +2,8 @@ title: WebOps Certification subtitle: "Chapter 7: Connecting People" description: Learn how to manage teams, workspaces and permissions before connecting DNS. -certificationpage: true -type: certificationpage -layout: certificationpage -showtoc: true -tags: [] permalink: docs/certification/study-guide/people -contenttype: [guide] -innav: [false] -categories: [] cms: [drupal, wordpress] -audience: [] -product: [] -integration: [--] previousurl: /certification/study-guide/deploy nexturl: /certification/study-guide/extend --- diff --git a/src/source/content/certification/study-guide-cms/08-extend.md b/src/source/content/certification/study-guide-cms/08-extend.md index b62a124b48..ecffee8436 100644 --- a/src/source/content/certification/study-guide-cms/08-extend.md +++ b/src/source/content/certification/study-guide-cms/08-extend.md @@ -2,19 +2,8 @@ title: WebOps Certification subtitle: "Chapter 8: Extend with CLI and Hooks" description: "Terminus and Quicksilver can work together to help facilitate complex WebOps workflows" -certificationpage: true -type: certificationpage -layout: certificationpage -showtoc: true -tags: [] permalink: docs/certification/study-guide/extend -contenttype: [guide] -innav: [false] -categories: [] cms: [drupal, wordpress] -audience: [] -product: [] -integration: [--] previousurl: /certification/study-guide/people nexturl: /certification/study-guide/automate --- diff --git a/src/source/content/certification/study-guide-cms/09-automate.md b/src/source/content/certification/study-guide-cms/09-automate.md index 7e7dc30773..1052c8bc90 100644 --- a/src/source/content/certification/study-guide-cms/09-automate.md +++ b/src/source/content/certification/study-guide-cms/09-automate.md @@ -2,19 +2,8 @@ title: WebOps Certification subtitle: "Chapter 9: Additional Automation" description: "Learn how to leverage Integrated Composer and Autopilot" -certificationpage: true -type: certificationpage -layout: certificationpage -showtoc: true -tags: [] permalink: docs/certification/study-guide/automate -contenttype: [guide] -innav: [false] -categories: [] cms: [drupal, wordpress] -audience: [] -product: [] -integration: [--] previousurl: /certification/study-guide/extend nexturl: /certification/study-guide/custom-upstreams --- diff --git a/src/source/content/certification/study-guide-cms/10-custom-upstreams.md b/src/source/content/certification/study-guide-cms/10-custom-upstreams.md index a9591517f8..acaeadba66 100644 --- a/src/source/content/certification/study-guide-cms/10-custom-upstreams.md +++ b/src/source/content/certification/study-guide-cms/10-custom-upstreams.md @@ -1,20 +1,9 @@ --- title: WebOps Certification subtitle: "Chapter 10: Custom Upstreams" -description: "Understand the relationship between Pantheon’s Core Upstreams, Custom Upstreams, and individual site repositories." -certificationpage: true -type: certificationpage -layout: certificationpage -showtoc: true -tags: [] +description: "Understand the relationship between Pantheon's Core Upstreams, Custom Upstreams, and individual site repositories." permalink: docs/certification/study-guide/custom-upstreams -contenttype: [guide] -innav: [false] -categories: [] cms: [drupal, wordpress] -audience: [] -product: [] -integration: [--] previousurl: /certification/study-guide/automate --- diff --git a/src/source/content/guides/launch/02-create-site-launch.md b/src/source/content/guides/launch/02-create-site-launch.md index 8be48f69e6..75434bfe42 100644 --- a/src/source/content/guides/launch/02-create-site-launch.md +++ b/src/source/content/guides/launch/02-create-site-launch.md @@ -4,7 +4,6 @@ subtitle: Create Your Site on Pantheon description: Learn how to create your site on Pantheon. tags: [cms,] contributors: [whitneymeredith] -showtoc: true permalink: docs/guides/launch/create-site-launch contenttype: [guide] innav: [false] @@ -16,7 +15,7 @@ integration: [--] image: launchGuide-twitterLarge.png --- -This section provides information on how to create your Live environment. +This section provides information on how to create your Live environment. 1. [Create a New Site](/guides/getstarted/addsite/). diff --git a/src/source/content/terminus/01-introduction.md b/src/source/content/terminus/01-introduction.md index 6f33a4773a..b2d5578016 100644 --- a/src/source/content/terminus/01-introduction.md +++ b/src/source/content/terminus/01-introduction.md @@ -2,20 +2,15 @@ title: Terminus Guide subtitle: Introduction description: Learn about Terminus, the command line interface for advanced interaction with the Pantheon platform. -terminuspage: true -type: terminuspage -layout: terminuspage contributors: [whitneymeredith] -contenttype: [guide] -innav: [true] categories: [cli] cms: [drupal, wordpress] audience: [development] product: [terminus] -integration: [--] tags: [reference, cli, local, terminus, workflow] permalink: docs/terminus reviewed: "2020-02-05" +showtoc: false --- Terminus is a command line interface that provides advanced interaction with Pantheon. Terminus enables you to do almost everything in a terminal that you can do in the Dashboard, as well as scripting and much more. diff --git a/src/source/content/terminus/02-install.md b/src/source/content/terminus/02-install.md index 8a6397e416..ea411e37ce 100644 --- a/src/source/content/terminus/02-install.md +++ b/src/source/content/terminus/02-install.md @@ -2,19 +2,13 @@ title: Terminus Guide subtitle: Install and Update Terminus description: Learn how to install and update Terminus to your local computer. -terminuspage: true -type: terminuspage -layout: terminuspage contributors: [whitneymeredith,jazzsequence] tags: [reference, cli, local, terminus, workflow] permalink: docs/terminus/install -contenttype: [guide] -innav: [false] categories: [cli] cms: [drupal, wordpress] audience: [development] product: [terminus] -integration: [--] showtoc: true reviewed: "2025-07-22" --- diff --git a/src/source/content/terminus/03-examples.md b/src/source/content/terminus/03-examples.md index 935a179d42..5e25894789 100644 --- a/src/source/content/terminus/03-examples.md +++ b/src/source/content/terminus/03-examples.md @@ -2,19 +2,14 @@ title: Terminus Guide subtitle: Get Started description: Learn how to apply updates, deploy code, switch upstreams, and install Drush and WP-CLI with Terminus. -terminuspage: true -type: terminuspage -layout: terminuspage tags: [reference, cli, local, terminus, workflow] permalink: docs/terminus/examples -contenttype: [guide] -innav: [false] categories: [cli] cms: [drupal, wordpress] audience: [development] product: [terminus] -integration: [--] reviewed: "2025-01-23" +showtoc: false --- This section provides information on how to apply updates, deploy code, switch upstreams, and install Drush and WP-CLI with Terminus, as well as information on command structure and automatic site and environment detection. diff --git a/src/source/content/terminus/04-commands.md b/src/source/content/terminus/04-commands.md index ca751d68f3..dad5cfe41c 100644 --- a/src/source/content/terminus/04-commands.md +++ b/src/source/content/terminus/04-commands.md @@ -2,18 +2,13 @@ title: Terminus Guide subtitle: Command Directory description: Review a complete list of Terminus commands. -terminuspage: true -type: terminuspage -layout: terminuspage tags: [reference, cli, local, terminus, workflow] permalink: docs/terminus/commands -contenttype: [guide] -innav: [false] categories: [cli] cms: [drupal, wordpress] audience: [development] product: [terminus] -integration: [--] +showtoc: false --- This section provides a comprehensive list of Terminus commands. diff --git a/src/source/content/terminus/05-scripting.md b/src/source/content/terminus/05-scripting.md index b319df9470..22cb2f6aa7 100644 --- a/src/source/content/terminus/05-scripting.md +++ b/src/source/content/terminus/05-scripting.md @@ -2,18 +2,13 @@ title: Terminus Guide subtitle: Scripting with Terminus description: Automate your workflow with scripting via Terminus. -terminuspage: true -type: terminuspage -layout: terminuspage tags: [reference, cli, local, terminus, workflow] permalink: docs/terminus/scripting -contenttype: [guide] -innav: [false] categories: [cli] cms: [drupal, wordpress] audience: [development] product: [terminus] -integration: [--] +showtoc: false --- This section provides information on how to automate your workflow with Terminus scripting. diff --git a/src/source/content/terminus/06-plugins.md b/src/source/content/terminus/06-plugins.md index b219337936..82671c1506 100644 --- a/src/source/content/terminus/06-plugins.md +++ b/src/source/content/terminus/06-plugins.md @@ -2,18 +2,13 @@ title: Terminus Guide subtitle: Install Plugins description: Learn how to install plugins with Terminus. -terminuspage: true -type: terminuspage -layout: terminuspage -contenttype: [guide] -innav: [false] categories: [cli] cms: [drupal, wordpress] audience: [development] product: [terminus] -integration: [--] tags: [reference, cli, local, terminus, workflow] permalink: docs/terminus/plugins +showtoc: false --- This section provides information on how to install plugins with Terminus, and how to add new commands through third-party plugins. diff --git a/src/source/content/terminus/07-create.md b/src/source/content/terminus/07-create.md index 410f75bc9d..8612c809f6 100644 --- a/src/source/content/terminus/07-create.md +++ b/src/source/content/terminus/07-create.md @@ -2,18 +2,13 @@ title: Terminus Guide subtitle: Create Terminus Plugins description: Learn how to create your own Terminus plugins. -terminuspage: true -type: terminuspage -layout: terminuspage tags: [reference, cli, local, terminus, workflow] permalink: docs/terminus/create -contenttype: [guide] -innav: [false] categories: [cli] cms: [drupal, wordpress] audience: [development] product: [terminus] -integration: [--] +showtoc: false --- This section provides information on how to create Terminus plugins. diff --git a/src/source/content/terminus/08-directory.md b/src/source/content/terminus/08-directory.md index 1fc26c3a1c..0b97e9fd91 100644 --- a/src/source/content/terminus/08-directory.md +++ b/src/source/content/terminus/08-directory.md @@ -2,18 +2,13 @@ title: Terminus Guide subtitle: Plugin Directory description: A non-exclusive directory of plugins to extend Terminus features. -terminuspage: true -type: terminuspage -layout: terminuspage tags: [reference, cli, local, terminus, workflow] permalink: docs/terminus/directory -contenttype: [guide] -innav: [false] categories: [cli] cms: [drupal, wordpress] audience: [development] product: [terminus] -integration: [--] +showtoc: false --- You can extend Terminus functionality and add commands by installing [third-party plugins](https://github.com/terminus-plugin-project) or by [creating your own plugins](/terminus/create). diff --git a/src/source/content/terminus/09-configuration.md b/src/source/content/terminus/09-configuration.md index f44bc1ac9f..89f27263e5 100644 --- a/src/source/content/terminus/09-configuration.md +++ b/src/source/content/terminus/09-configuration.md @@ -2,18 +2,13 @@ title: Terminus Guide subtitle: Terminus Configuration File description: Learn how to configure your local Terminus configuration file. -terminuspage: true -type: terminuspage -layout: terminuspage tags: [reference, cli, local, terminus, workflow] permalink: docs/terminus/configuration -contenttype: [guide] -innav: [false] categories: [cli] cms: [drupal, wordpress] audience: [development] product: [terminus] -integration: [--] +showtoc: false --- This section provides information on how to configure your local Terminus configuration file. diff --git a/src/source/content/terminus/10-supported-terminus.md b/src/source/content/terminus/10-supported-terminus.md index 87da7efe3e..81d00a991b 100644 --- a/src/source/content/terminus/10-supported-terminus.md +++ b/src/source/content/terminus/10-supported-terminus.md @@ -2,19 +2,14 @@ title: Terminus Guide subtitle: Supported Terminus and PHP Versions description: Learn which versions of Terminus and PHP are currently supported. -terminuspage: true -type: terminuspage -layout: terminuspage contributors: [wordsmither] tags: [reference, cli, local, terminus, workflow] permalink: docs/terminus/supported-terminus -contenttype: [guide] -innav: [false] categories: [git] cms: [drupal, wordpress] audience: [development] product: [terminus] -integration: [--] +showtoc: false --- Each major and minor version of Terminus is fully supported for one year from the release of the subsequent version. During the supported period, serious bugs and security issues that have been reported are fixed in patch releases. Refer to the documentation on [Semantic Versioning](https://semver.org/) for more information on versioning. diff --git a/src/source/content/terminus/11-updates.md b/src/source/content/terminus/11-updates.md index 52f74a1607..2139e771f3 100644 --- a/src/source/content/terminus/11-updates.md +++ b/src/source/content/terminus/11-updates.md @@ -2,18 +2,13 @@ title: Terminus Guide subtitle: Terminus Changelog description: Stay up to date on the latest Terminus version. -terminuspage: true -type: terminuspage -layout: terminuspage tags: [reference, cli, local, terminus, workflow] permalink: docs/terminus/updates -contenttype: [guide] -innav: [false] categories: [cli] cms: [drupal, wordpress] audience: [development] product: [terminus] -integration: [--] +showtoc: false --- ## Changelog diff --git a/src/source/content/terminus/12-terminus-3-0.md b/src/source/content/terminus/12-terminus-3-0.md index ac039bb701..88a35ece52 100644 --- a/src/source/content/terminus/12-terminus-3-0.md +++ b/src/source/content/terminus/12-terminus-3-0.md @@ -2,19 +2,14 @@ title: Terminus Guide subtitle: Terminus 3 description: Learn what's new with the latest Terminus major version upgrade. -terminuspage: true -type: terminuspage -layout: terminuspage contributors: [greg-1-anderson] tags: [reference, cli, local, terminus, workflow] permalink: docs/terminus/terminus-3-0 -contenttype: [guide] -innav: [false] categories: [cli] cms: [drupal, wordpress] audience: [development] product: [terminus] -integration: [--] +showtoc: false --- This section provides information about Terminus 3.0. Terminus 3.0 is the most recent major version of Terminus and is recommended in place of Terminus 2.0. diff --git a/src/source/content/terminus/13-terminus-4-0.md b/src/source/content/terminus/13-terminus-4-0.md index 94b6a034a8..5412508d17 100644 --- a/src/source/content/terminus/13-terminus-4-0.md +++ b/src/source/content/terminus/13-terminus-4-0.md @@ -2,19 +2,14 @@ title: Terminus Guide subtitle: Terminus 4 description: Learn what's new with the latest Terminus major version upgrade. -terminuspage: true -type: terminuspage -layout: terminuspage contributors: [kporras07] tags: [reference, cli, local, terminus, workflow] permalink: docs/terminus/terminus-4-0 -contenttype: [guide] -innav: [false] categories: [cli] cms: [drupal, wordpress] audience: [development] product: [terminus] -integration: [--] +showtoc: false --- This section provides information about Terminus 4.0. Terminus 4.0 is the most recent major version of Terminus and is recommended in place of Terminus 3.x. diff --git a/src/source/content/terminus/ci/bitbucket.md b/src/source/content/terminus/ci/bitbucket.md index ea087b8690..95f3f448d4 100644 --- a/src/source/content/terminus/ci/bitbucket.md +++ b/src/source/content/terminus/ci/bitbucket.md @@ -4,18 +4,13 @@ subtitle: Authenticate Terminus in a Bitbucket CI Pipeline description: Learn how to authenticate Terminus in a Bitbucket CI pipeline without receiving errors. permalink: docs/terminus/ci/bitbucket contributors: [stovak] -terminuspage: true -type: terminuspage -layout: terminuspage tags: [reference, cli, local, terminus, workflow] -contenttype: [guide] -innav: [false] categories: [automate] cms: [drupal, wordpress] audience: [development] product: [terminus] -integration: [--] reviewed: "2023-06-08" +showtoc: false --- This section provides information on how to to authenticate Terminus in a Bitbucket CI pipeline without receiving errors and avoiding authentication rate limits. diff --git a/src/source/content/terminus/ci/circleci.md b/src/source/content/terminus/ci/circleci.md index 9e429d815b..cc8e110cda 100644 --- a/src/source/content/terminus/ci/circleci.md +++ b/src/source/content/terminus/ci/circleci.md @@ -3,19 +3,14 @@ title: Terminus Guide subtitle: Authenticate Terminus in a CircleCI Pipeline description: Learn how to authenticate Terminus in a CircleCI pipeline without errors. contributors: [stovak] -terminuspage: true -type: terminuspage -layout: terminuspage tags: [reference, cli, local, terminus, workflow] permalink: docs/terminus/ci/circleci -contenttype: [guide] -innav: [false] categories: [automate] cms: [drupal, wordpress] audience: [development] product: [terminus] -integration: [--] reviewed: "2023-06-08" +showtoc: false --- This section provides information on how to authenticate Terminus in a CircleCI pipeline without receiving errors and avoiding authentication rate limits. diff --git a/src/source/content/terminus/ci/github-actions.md b/src/source/content/terminus/ci/github-actions.md index 0420fac3ea..89378d524f 100644 --- a/src/source/content/terminus/ci/github-actions.md +++ b/src/source/content/terminus/ci/github-actions.md @@ -4,18 +4,13 @@ subtitle: Authenticate Terminus in a GitHub Actions Pipeline description: Learn how to authenticate Terminus in a GitHub Actions CI pipeline without receiving errors. permalink: docs/terminus/ci/github-actions contributors: [stovak] -terminuspage: true -type: terminuspage -layout: terminuspage tags: [reference, cli, local, terminus, workflow] -contenttype: [guide] -innav: [false] categories: [automate] cms: [drupal, wordpress] audience: [development] product: [terminus] -integration: [--] reviewed: "2025-12-10" +showtoc: false --- This section provides information on how to to authenticate Terminus in a GitHub Actions CI pipeline without receiving errors and avoiding authentication rate limits. diff --git a/src/source/content/terminus/ci/gitlab.md b/src/source/content/terminus/ci/gitlab.md index d1499798e9..84c0374340 100644 --- a/src/source/content/terminus/ci/gitlab.md +++ b/src/source/content/terminus/ci/gitlab.md @@ -4,18 +4,13 @@ subtitle: Authenticate Terminus in a GitLab Pipeline description: Learn how to authenticate Terminus in a GitLab CI pipeline without receiving errors. permalink: docs/terminus/ci/gitlab contributors: [stovak] -terminuspage: true -type: terminuspage -layout: terminuspage tags: [reference, cli, local, terminus, workflow] -contenttype: [guide] -innav: [false] categories: [automate] cms: [drupal, wordpress] audience: [development] product: [terminus] -integration: [--] reviewed: "2023-06-08" +showtoc: false --- This section provides information on how to to authenticate Terminus in a GitLab CI pipeline without receiving errors and avoiding authentication rate limits. diff --git a/src/source/images/pantheon-logo-symbol.svg b/src/source/images/pantheon-logo-symbol.svg index d6b0794a26..57675f67cf 100644 --- a/src/source/images/pantheon-logo-symbol.svg +++ b/src/source/images/pantheon-logo-symbol.svg @@ -1,7 +1,7 @@ + viewBox="0 0 38 80" width="38" height="80" style="enable-background:new 0 0 38 80;" xml:space="preserve">
{children}
-); - -const ContentLayoutType = ({ - children, - hasTOC, -}: { - children: React.ReactNode; - hasTOC: boolean; -}) => { - if (hasTOC) { - return ( - - {children} - - ); - } - - return {children}; -}; - -export const CertificationTemplate = ({ - certification, -}: { - certification: ProcessedFile; -}) => { - const items: any[] = []; // todo: add items @aniketbiprojit - - const hasTOC = certification.frontmatter.showtoc ?? false; - - let image = "/images/" + certification.frontmatter.image; - if (image === "/images/null") { - image = "/images/default-thumb-guides.png"; - } - - return ( - - -
- -
- -
- -
- -
-
-
-
- - - -
-
-
- {hasTOC && ( -
- -
- )} -
-
-
-
- ); -}; diff --git a/src/templates/doc.tsx b/src/templates/doc.tsx index c79fd0c31c..7858013144 100644 --- a/src/templates/doc.tsx +++ b/src/templates/doc.tsx @@ -5,20 +5,55 @@ import { ProcessedFile } from "@/server/processor/mdx"; import SearchBar from "@/components/header/search-bar"; import { MdxWrapper } from "@/components/ui/mdx-wrapper"; import HeaderBody from "@/components/common/header-body"; +import NavButtons from "@/components/common/nav-buttons"; import { TOC } from "@/components/common/toc"; const ContainerDiv = ({ children }: { children: React.ReactNode }) => (
{children}
); -export const DocTemplate = ({ doc }: { doc: ProcessedFile }) => { - const items: any[] = []; // todo: add items @aniketbiprojit - - let image = "/images/" + doc.frontmatter.image; - if (image === "/images/null") { - image = "/images/default-thumb-guides.png"; +const ContentLayoutType = ({ + children, + hasTOC, +}: { + children: React.ReactNode; + hasTOC: boolean; +}) => { + if (hasTOC) { + return ( + + {children} + + ); } + return {children}; +}; + +export const DocTemplate = ({ + doc, + prev, + next, + tocDefault = true, +}: { + doc: ProcessedFile; + prev?: { fields: { slug: string } } | null; + next?: { fields: { slug: string } } | null; + tocDefault?: boolean; +}) => { + // Use props if provided, otherwise fall back to frontmatter + const prevUrl = prev?.fields.slug ?? doc.frontmatter.previousurl ?? ""; + const nextUrl = next?.fields.slug ?? doc.frontmatter.nexturl ?? ""; + + // Use frontmatter if set, otherwise use the default for this content type + const hasTOC = doc.frontmatter.showtoc ?? tocDefault; + return ( { >
- +
@@ -64,27 +89,21 @@ export const DocTemplate = ({ doc }: { doc: ProcessedFile }) => { // isoDate={guide.frontmatter.reviewed} /> + {(prevUrl || nextUrl) && ( + + )}
-
- -
-
+ {hasTOC && ( +
+ +
+ )} +
diff --git a/src/templates/guide.tsx b/src/templates/guide.tsx deleted file mode 100644 index 9e0df04cbd..0000000000 --- a/src/templates/guide.tsx +++ /dev/null @@ -1,127 +0,0 @@ -import Layout from "@/components/layout"; -import { OmniSidebarNav } from "@/components/omniSideBarNav"; -import { DocsSidebarLayout } from "@/components/pds-middleware/docs-sidebar-layout"; -import { ProcessedFile } from "@/server/processor/mdx"; -import SearchBar from "@/components/header/search-bar"; -import { MdxWrapper } from "@/components/ui/mdx-wrapper"; -import HeaderBody from "@/components/common/header-body"; -import NavButtons from "@/components/common/nav-buttons"; -import { TOC } from "@/components/common/toc"; - -const ContainerDiv = ({ children }: { children: React.ReactNode }) => ( -
{children}
-); - -const ContentLayoutType = ({ - children, - hasTOC, -}: { - children: React.ReactNode; - hasTOC: boolean; -}) => { - if (hasTOC) { - return ( - - {children} - - ); - } - - return {children}; -}; - -export const GuideTemplate = ({ - guide, - prev, - next, -}: { - prev: null | { fields: { slug: string; guide_directory: string } }; - guide: ProcessedFile; - next: null | { fields: { slug: string; guide_directory: string } }; -}) => { - const items: any[] = []; // todo: add items @aniketbiprojit - - const hasTOC = guide.frontmatter.showtoc ?? false; - - let image = "/images/" + guide.frontmatter.image; - if (image === "/images/null") { - image = "/images/default-thumb-guides.png"; - } - - return ( - - -
- -
- -
- -
- -
-
-
-
- - - -
-
-
- {hasTOC && ( -
- -
- )} -
-
-
-
- ); -}; diff --git a/src/templates/landing.tsx b/src/templates/landing.tsx index 439083869d..8391da060c 100644 --- a/src/templates/landing.tsx +++ b/src/templates/landing.tsx @@ -90,11 +90,7 @@ export const LandingTemplate = ({ topic }: { topic: Landing }) => { >
@@ -117,7 +113,7 @@ export const LandingTemplate = ({ topic }: { topic: Landing }) => { {topic.video_id && (
diff --git a/src/templates/release-note-listing/index.tsx b/src/templates/release-note-listing/index.tsx index e20fc6ba41..6348732357 100644 --- a/src/templates/release-note-listing/index.tsx +++ b/src/templates/release-note-listing/index.tsx @@ -147,18 +147,7 @@ export const ReleaseNoteListingTemplate = async ({ /> */} (
{children}
@@ -37,75 +37,6 @@ const ContentLayoutType = ({ return {children}; }; -// @TODO relocate this list -// - To a YAML file and use GraphQL to pull data. -// - To a GraphQL query order by frontmatter weight/order/index field. -const items = [ - { - id: "docs-terminus", - link: "/terminus", - title: "Introduction", - }, - { - id: "docs-terminus-install", - link: "/terminus/install", - title: "Install Terminus", - }, - { - id: "docs-terminus-examples", - link: "/terminus/examples", - title: "Get Started", - }, - { - id: "docs-terminus-commands", - link: "/terminus/commands", - title: "Command Directory", - }, - { - id: "docs-terminus-scripting", - link: "/terminus/scripting", - title: "Scripting with Terminus", - }, - { - id: "docs-terminus-plugins", - link: "/terminus/plugins", - title: "Install Plugins", - }, - { - id: "docs-terminus-directory", - link: "/terminus/directory", - title: "Plugin Directory", - }, - { - id: "docs-terminus-create", - link: "/terminus/create", - title: "Create Terminus Plugins", - }, - { - id: "docs-terminus-configuration", - link: "/terminus/configuration", - title: "Terminus Configuration File", - }, - - { - id: "docs-supported-terminus", - link: "/terminus/supported-terminus", - title: "Supported Terminus and PHP Versions", - }, - - { - id: "docs-terminus-updates", - link: "/terminus/updates", - title: "Terminus Changelog", - }, - - { - id: "docs-terminus-terminus-4-0", - link: "/terminus/terminus-4-0", - title: "Terminus 4", - }, -]; - export const TerminusCommandTemplate = ({ command, slug, @@ -137,9 +68,7 @@ export const TerminusCommandTemplate = ({ className="pds-container pds-container--x-wide" >
-
diff --git a/src/templates/terminus.tsx b/src/templates/terminus.tsx deleted file mode 100644 index 7d8fde5698..0000000000 --- a/src/templates/terminus.tsx +++ /dev/null @@ -1,114 +0,0 @@ -import Layout from "@/components/layout"; -import { OmniSidebarNav } from "@/components/omniSideBarNav"; -import { DocsSidebarLayout } from "@/components/pds-middleware/docs-sidebar-layout"; -import { ProcessedFile } from "@/server/processor/mdx"; -import SearchBar from "@/components/header/search-bar"; -import { MdxWrapper } from "@/components/ui/mdx-wrapper"; -import HeaderBody from "@/components/common/header-body"; -import { TOC } from "@/components/common/toc"; - -const ContainerDiv = ({ children }: { children: React.ReactNode }) => ( -
{children}
-); - -const ContentLayoutType = ({ - children, - hasTOC, -}: { - children: React.ReactNode; - hasTOC: boolean; -}) => { - if (hasTOC) { - return ( - - {children} - - ); - } - - return {children}; -}; - -export const TerminusTemplate = ({ terminus }: { terminus: ProcessedFile }) => { - const items: any[] = []; // todo: add items @aniketbiprojit - - const hasTOC = terminus.frontmatter.showtoc ?? false; - - let image = "/images/" + terminus.frontmatter.image; - if (image === "/images/null") { - image = "/images/default-thumb-guides.png"; - } - - return ( - - -
- -
- -
- -
- -
-
-
-
- - -
-
-
- {hasTOC && ( -
- -
- )} -
-
-
-
- ); -}; diff --git a/tsconfig.json b/tsconfig.json index 9ec7aa6928..51df10f9e5 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,7 +1,11 @@ { "compilerOptions": { "target": "es5", - "lib": ["dom", "dom.iterable", "esnext"], + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], "allowJs": true, "skipLibCheck": true, "strict": true, @@ -14,14 +18,16 @@ "moduleResolution": "node", "resolveJsonModule": true, "isolatedModules": true, - "jsx": "preserve", + "jsx": "react-jsx", "plugins": [ { "name": "next" } ], "paths": { - "@/*": ["./src/*"] + "@/*": [ + "./src/*" + ] } }, "include": [ @@ -29,8 +35,14 @@ "**/*.ts", "**/*.tsx", ".next/types/**/*.ts", - "src/components/common/marketo-form.jsx" + "src/components/common/marketo-form.jsx", + ".next/dev/types/**/*.ts" + ], + "exclude": [ + "node_modules", ], - "exclude": ["node_modules"], - "types": ["react", "react-dom"] + "types": [ + "react", + "react-dom" + ] }