From 6702300883359247b813a2baa16ec30c4e4a172b Mon Sep 17 00:00:00 2001 From: isaac hershenson Date: Tue, 27 Aug 2024 17:20:45 -0700 Subject: [PATCH 01/21] wip --- .github/workflows/link_check.yml | 87 ++++++++++++++++++++++++++++++++ docs/docs/concepts/low_level.md | 6 +-- 2 files changed, 90 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/link_check.yml diff --git a/.github/workflows/link_check.yml b/.github/workflows/link_check.yml new file mode 100644 index 00000000..f8b1f91c --- /dev/null +++ b/.github/workflows/link_check.yml @@ -0,0 +1,87 @@ +name: Check Docs & Links + +on: + pull_request: + branches: + - main + push: + branches: + - main + schedule: + - cron: "0 5 * * *" + workflow_dispatch: + +env: + POETRY_VERSION: "1.7.1" + +jobs: + markdown-link-check: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Check links in Markdown files + uses: gaurav-nelson/github-action-markdown-link-check@v1 + with: + folder-path: "examples/,docs/" + check-modified-files-only: ${{ github.event_name != 'schedule' }} + file-path: "./README.md" + config-file: "./.markdown-link-check.config.json" + + notebook-link-check: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: Set up Python 3.x + Poetry ${{ env.POETRY_VERSION }} + uses: "./.github/actions/poetry_setup" + with: + python-version: "3.11" + poetry-version: ${{ env.POETRY_VERSION }} + cache-key: core + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + poetry install --with docs + poetry run pip install -U pytest pytest-check-links langsmith langchain GitPython + + - name: Check links in notebooks + env: + LANGCHAIN_API_KEY: test + run: | + if [ "${{ github.event_name }}" == "schedule" ] || [ "${{ github.event_name }}" == "workflow_dispatch" ] || ([ "${{ github.event_name }}" == "push" ] && [ "${{ github.ref }}" == "refs/heads/main" ]); then + echo "Running link check on all notebooks in examples directory..." + poetry run pytest -v --check-links-ignore "https://(api|web)\.smith\.langchain\.com/.*" --check-links-ignore "https://x.com/.*" --check-links examples + else + echo "Fetching changes from origin/main..." + git fetch origin main + echo "Checking for changed notebook files..." + CHANGED_FILES=$(git diff --name-only --diff-filter=d origin/main | grep '\.ipynb$' || true) + echo "Changed files: ${CHANGED_FILES}" + if [ -n "${CHANGED_FILES}" ]; then + echo "Running link check on changed notebook files..." + poetry run pytest -v --check-links-ignore "https://(api|web)\.smith\.langchain\.com/.*" --check-links-ignore "https://x.com/.*" --check-links ${CHANGED_FILES} || ([ $? = 5 ] && exit 0 || exit $?) + else + echo "No notebook files changed." + fi + fi + check-readmes-synced: + # This checks that the repo README.md is identical to the libs/langgraph/README.md + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + fetch-depth: 1 + + - name: Check README.md is in sync + run: | + if ! diff -q README.md libs/langgraph/README.md >/dev/null; then + echo "README.md is out of sync with libs/langgraph/README.md" + diff -C 3 README.md libs/langgraph/README.md + exit 1 + fi \ No newline at end of file diff --git a/docs/docs/concepts/low_level.md b/docs/docs/concepts/low_level.md index 29461270..340946b3 100644 --- a/docs/docs/concepts/low_level.md +++ b/docs/docs/concepts/low_level.md @@ -4,7 +4,7 @@ At its core, LangGraph models agent workflows as graphs. You define the behavior of your agents using three key components: -1. [`State`](#state): A shared data structure that represents the current snapshot of your application. It is represented by an [`annotations`](/langgraphjs/reference/functions/langgraph.Annotation-1.html) object. +1. [`State`](#state): A shared data structure that represents the current snapshot of your application. It is represented by an [`annotations`](/langgraphjs/reference/modules/langgraph.Annotation.html) object. 2. [`Nodes`](#nodes): JavaScript/TypeScript functions that encode the logic of your agents. They receive the current `State` as input, perform some computation or side-effect, and return an updated `State`. @@ -40,11 +40,11 @@ You **MUST** compile your graph before you can use it. ## State -The first thing you do when you define a graph is define the `State` of the graph. The `State` consists of the [schema of the graph](#schema) as well as [`reducer` functions](#reducers) which specify how to apply updates to the state. The schema of the `State` will be the input schema to all `Nodes` and `Edges` in the graph, and should be defined using an [`Annotation`](/langgraphjs/reference/functions/langgraph.Annotation-1.html) object. All `Nodes` will emit updates to the `State` which are then applied using the specified `reducer` function. +The first thing you do when you define a graph is define the `State` of the graph. The `State` consists of the [schema of the graph](#schema) as well as [`reducer` functions](#reducers) which specify how to apply updates to the state. The schema of the `State` will be the input schema to all `Nodes` and `Edges` in the graph, and should be defined using an [`Annotation`](/langgraphjs/reference/modules/langgraph.Annotation.html) object. All `Nodes` will emit updates to the `State` which are then applied using the specified `reducer` function. ### Schema -The way to specify the schema of a graph is by defining an [`Annotation`](/langgraphjs/reference/functions/langgraph.Annotation-1.html) object, where each key is an item in the state. +The way to specify the schema of a graph is by defining an [`Annotation`](/anggraphjs/reference/modules/langgraph.Annotation.html) object, where each key is an item in the state. ### Reducers From 54dd6c657c8d7af5685336ebe0f47dfc42e0baad Mon Sep 17 00:00:00 2001 From: isaac hershenson Date: Tue, 27 Aug 2024 17:25:07 -0700 Subject: [PATCH 02/21] edits --- .markdown-link-check.config.json | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 .markdown-link-check.config.json diff --git a/.markdown-link-check.config.json b/.markdown-link-check.config.json new file mode 100644 index 00000000..030951e4 --- /dev/null +++ b/.markdown-link-check.config.json @@ -0,0 +1,4 @@ +{ + "aliveStatusCodes": [200, 206, 402], + "ignorePatterns": ["*dcbadge.vercel.app*"] +} From 29821fd29c442d8b2b56139d8743f3455ba21422 Mon Sep 17 00:00:00 2001 From: isaac hershenson Date: Tue, 27 Aug 2024 17:27:49 -0700 Subject: [PATCH 03/21] changes! --- .github/actions/poetry_setup/action.yml | 88 +++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 .github/actions/poetry_setup/action.yml diff --git a/.github/actions/poetry_setup/action.yml b/.github/actions/poetry_setup/action.yml new file mode 100644 index 00000000..df04e1e7 --- /dev/null +++ b/.github/actions/poetry_setup/action.yml @@ -0,0 +1,88 @@ +# An action for setting up poetry install with caching. +# Using a custom action since the default action does not +# take poetry install groups into account. +# Action code from: +# https://github.com/actions/setup-python/issues/505#issuecomment-1273013236 +name: poetry-install-with-caching +description: Poetry install with support for caching of dependency groups. + +inputs: + python-version: + description: Python version, supporting MAJOR.MINOR only + required: true + + poetry-version: + description: Poetry version + required: true + + cache-key: + description: Cache key to use for manual handling of caching + required: true + +runs: + using: composite + steps: + - uses: actions/setup-python@v5 + name: Setup python ${{ inputs.python-version }} + id: setup-python + with: + python-version: ${{ inputs.python-version }} + + - uses: actions/cache@v3 + id: cache-bin-poetry + name: Cache Poetry binary - Python ${{ inputs.python-version }} + env: + SEGMENT_DOWNLOAD_TIMEOUT_MIN: "1" + with: + path: | + /opt/pipx/venvs/poetry + # This step caches the poetry installation, so make sure it's keyed on the poetry version as well. + key: bin-poetry-${{ runner.os }}-${{ runner.arch }}-py-${{ inputs.python-version }}-${{ inputs.poetry-version }} + + - name: Refresh shell hashtable and fixup softlinks + if: steps.cache-bin-poetry.outputs.cache-hit == 'true' + shell: bash + env: + POETRY_VERSION: ${{ inputs.poetry-version }} + PYTHON_VERSION: ${{ inputs.python-version }} + run: | + set -eux + + # Refresh the shell hashtable, to ensure correct `which` output. + hash -r + + # `actions/cache@v3` doesn't always seem able to correctly unpack softlinks. + # Delete and recreate the softlinks pipx expects to have. + rm /opt/pipx/venvs/poetry/bin/python + cd /opt/pipx/venvs/poetry/bin + ln -s "$(which "python$PYTHON_VERSION")" python + chmod +x python + cd /opt/pipx_bin/ + ln -s /opt/pipx/venvs/poetry/bin/poetry poetry + chmod +x poetry + + # Ensure everything got set up correctly. + /opt/pipx/venvs/poetry/bin/python --version + /opt/pipx_bin/poetry --version + + - name: Install poetry + if: steps.cache-bin-poetry.outputs.cache-hit != 'true' + shell: bash + env: + POETRY_VERSION: ${{ inputs.poetry-version }} + PYTHON_VERSION: ${{ inputs.python-version }} + # Install poetry using the python version installed by setup-python step. + run: pipx install "poetry==$POETRY_VERSION" --python '${{ steps.setup-python.outputs.python-path }}' --verbose + + - name: Restore pip and poetry cached dependencies + uses: actions/cache@v3 + env: + SEGMENT_DOWNLOAD_TIMEOUT_MIN: "4" + with: + path: | + ~/.cache/pip + ~/.cache/pypoetry/virtualenvs + ~/.cache/pypoetry/cache + ~/.cache/pypoetry/artifacts + ./.venv + key: py-deps-${{ runner.os }}-${{ runner.arch }}-py-${{ inputs.python-version }}-poetry-${{ inputs.poetry-version }}-${{ inputs.cache-key }}-${{ hashFiles('./poetry.lock') }} From ce3b2700eaab8dcc7f86ec0c360453ef3929534d Mon Sep 17 00:00:00 2001 From: isaac hershenson Date: Tue, 27 Aug 2024 17:34:19 -0700 Subject: [PATCH 04/21] x --- .github/actions/poetry_setup/action.yml | 88 ------------------------- .github/workflows/link_check.yml | 20 +++--- 2 files changed, 9 insertions(+), 99 deletions(-) delete mode 100644 .github/actions/poetry_setup/action.yml diff --git a/.github/actions/poetry_setup/action.yml b/.github/actions/poetry_setup/action.yml deleted file mode 100644 index df04e1e7..00000000 --- a/.github/actions/poetry_setup/action.yml +++ /dev/null @@ -1,88 +0,0 @@ -# An action for setting up poetry install with caching. -# Using a custom action since the default action does not -# take poetry install groups into account. -# Action code from: -# https://github.com/actions/setup-python/issues/505#issuecomment-1273013236 -name: poetry-install-with-caching -description: Poetry install with support for caching of dependency groups. - -inputs: - python-version: - description: Python version, supporting MAJOR.MINOR only - required: true - - poetry-version: - description: Poetry version - required: true - - cache-key: - description: Cache key to use for manual handling of caching - required: true - -runs: - using: composite - steps: - - uses: actions/setup-python@v5 - name: Setup python ${{ inputs.python-version }} - id: setup-python - with: - python-version: ${{ inputs.python-version }} - - - uses: actions/cache@v3 - id: cache-bin-poetry - name: Cache Poetry binary - Python ${{ inputs.python-version }} - env: - SEGMENT_DOWNLOAD_TIMEOUT_MIN: "1" - with: - path: | - /opt/pipx/venvs/poetry - # This step caches the poetry installation, so make sure it's keyed on the poetry version as well. - key: bin-poetry-${{ runner.os }}-${{ runner.arch }}-py-${{ inputs.python-version }}-${{ inputs.poetry-version }} - - - name: Refresh shell hashtable and fixup softlinks - if: steps.cache-bin-poetry.outputs.cache-hit == 'true' - shell: bash - env: - POETRY_VERSION: ${{ inputs.poetry-version }} - PYTHON_VERSION: ${{ inputs.python-version }} - run: | - set -eux - - # Refresh the shell hashtable, to ensure correct `which` output. - hash -r - - # `actions/cache@v3` doesn't always seem able to correctly unpack softlinks. - # Delete and recreate the softlinks pipx expects to have. - rm /opt/pipx/venvs/poetry/bin/python - cd /opt/pipx/venvs/poetry/bin - ln -s "$(which "python$PYTHON_VERSION")" python - chmod +x python - cd /opt/pipx_bin/ - ln -s /opt/pipx/venvs/poetry/bin/poetry poetry - chmod +x poetry - - # Ensure everything got set up correctly. - /opt/pipx/venvs/poetry/bin/python --version - /opt/pipx_bin/poetry --version - - - name: Install poetry - if: steps.cache-bin-poetry.outputs.cache-hit != 'true' - shell: bash - env: - POETRY_VERSION: ${{ inputs.poetry-version }} - PYTHON_VERSION: ${{ inputs.python-version }} - # Install poetry using the python version installed by setup-python step. - run: pipx install "poetry==$POETRY_VERSION" --python '${{ steps.setup-python.outputs.python-path }}' --verbose - - - name: Restore pip and poetry cached dependencies - uses: actions/cache@v3 - env: - SEGMENT_DOWNLOAD_TIMEOUT_MIN: "4" - with: - path: | - ~/.cache/pip - ~/.cache/pypoetry/virtualenvs - ~/.cache/pypoetry/cache - ~/.cache/pypoetry/artifacts - ./.venv - key: py-deps-${{ runner.os }}-${{ runner.arch }}-py-${{ inputs.python-version }}-poetry-${{ inputs.poetry-version }}-${{ inputs.cache-key }}-${{ hashFiles('./poetry.lock') }} diff --git a/.github/workflows/link_check.yml b/.github/workflows/link_check.yml index f8b1f91c..2b828522 100644 --- a/.github/workflows/link_check.yml +++ b/.github/workflows/link_check.yml @@ -36,18 +36,16 @@ jobs: steps: - name: Checkout code uses: actions/checkout@v4 - - name: Set up Python 3.x + Poetry ${{ env.POETRY_VERSION }} - uses: "./.github/actions/poetry_setup" - with: - python-version: "3.11" - poetry-version: ${{ env.POETRY_VERSION }} - cache-key: core + - name: Set up Node.js + uses: actions/setup-node@v3 + with: + node-version: '16.x' + cache: 'yarn' + - name: Install dependencies run: | - python -m pip install --upgrade pip - poetry install --with docs - poetry run pip install -U pytest pytest-check-links langsmith langchain GitPython + yarn install --frozen-lockfile - name: Check links in notebooks env: @@ -55,7 +53,7 @@ jobs: run: | if [ "${{ github.event_name }}" == "schedule" ] || [ "${{ github.event_name }}" == "workflow_dispatch" ] || ([ "${{ github.event_name }}" == "push" ] && [ "${{ github.ref }}" == "refs/heads/main" ]); then echo "Running link check on all notebooks in examples directory..." - poetry run pytest -v --check-links-ignore "https://(api|web)\.smith\.langchain\.com/.*" --check-links-ignore "https://x.com/.*" --check-links examples + yarn run pytest -v --check-links-ignore "https://(api|web)\.smith\.langchain\.com/.*" --check-links-ignore "https://x.com/.*" --check-links examples else echo "Fetching changes from origin/main..." git fetch origin main @@ -64,7 +62,7 @@ jobs: echo "Changed files: ${CHANGED_FILES}" if [ -n "${CHANGED_FILES}" ]; then echo "Running link check on changed notebook files..." - poetry run pytest -v --check-links-ignore "https://(api|web)\.smith\.langchain\.com/.*" --check-links-ignore "https://x.com/.*" --check-links ${CHANGED_FILES} || ([ $? = 5 ] && exit 0 || exit $?) + yarn run pytest -v --check-links-ignore "https://(api|web)\.smith\.langchain\.com/.*" --check-links-ignore "https://x.com/.*" --check-links ${CHANGED_FILES} || ([ $? = 5 ] && exit 0 || exit $?) else echo "No notebook files changed." fi From 15ba5767940e663f2cd1e09f5ac1306a756b7ab3 Mon Sep 17 00:00:00 2001 From: isaac hershenson Date: Tue, 27 Aug 2024 17:57:04 -0700 Subject: [PATCH 05/21] link --- docs/docs/concepts/low_level.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/concepts/low_level.md b/docs/docs/concepts/low_level.md index 340946b3..296151eb 100644 --- a/docs/docs/concepts/low_level.md +++ b/docs/docs/concepts/low_level.md @@ -44,7 +44,7 @@ The first thing you do when you define a graph is define the `State` of the grap ### Schema -The way to specify the schema of a graph is by defining an [`Annotation`](/anggraphjs/reference/modules/langgraph.Annotation.html) object, where each key is an item in the state. +The way to specify the schema of a graph is by defining an [`Annotation`](/langgraphjs/reference/modules/langgraph.Annotation.html) object, where each key is an item in the state. ### Reducers From cdeb61e675a8a340b870f2af0283020d8ce7505f Mon Sep 17 00:00:00 2001 From: isaac hershenson Date: Wed, 28 Aug 2024 10:27:01 -0700 Subject: [PATCH 06/21] x --- docs/docs/concepts/low_level.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/docs/concepts/low_level.md b/docs/docs/concepts/low_level.md index 296151eb..29461270 100644 --- a/docs/docs/concepts/low_level.md +++ b/docs/docs/concepts/low_level.md @@ -4,7 +4,7 @@ At its core, LangGraph models agent workflows as graphs. You define the behavior of your agents using three key components: -1. [`State`](#state): A shared data structure that represents the current snapshot of your application. It is represented by an [`annotations`](/langgraphjs/reference/modules/langgraph.Annotation.html) object. +1. [`State`](#state): A shared data structure that represents the current snapshot of your application. It is represented by an [`annotations`](/langgraphjs/reference/functions/langgraph.Annotation-1.html) object. 2. [`Nodes`](#nodes): JavaScript/TypeScript functions that encode the logic of your agents. They receive the current `State` as input, perform some computation or side-effect, and return an updated `State`. @@ -40,11 +40,11 @@ You **MUST** compile your graph before you can use it. ## State -The first thing you do when you define a graph is define the `State` of the graph. The `State` consists of the [schema of the graph](#schema) as well as [`reducer` functions](#reducers) which specify how to apply updates to the state. The schema of the `State` will be the input schema to all `Nodes` and `Edges` in the graph, and should be defined using an [`Annotation`](/langgraphjs/reference/modules/langgraph.Annotation.html) object. All `Nodes` will emit updates to the `State` which are then applied using the specified `reducer` function. +The first thing you do when you define a graph is define the `State` of the graph. The `State` consists of the [schema of the graph](#schema) as well as [`reducer` functions](#reducers) which specify how to apply updates to the state. The schema of the `State` will be the input schema to all `Nodes` and `Edges` in the graph, and should be defined using an [`Annotation`](/langgraphjs/reference/functions/langgraph.Annotation-1.html) object. All `Nodes` will emit updates to the `State` which are then applied using the specified `reducer` function. ### Schema -The way to specify the schema of a graph is by defining an [`Annotation`](/langgraphjs/reference/modules/langgraph.Annotation.html) object, where each key is an item in the state. +The way to specify the schema of a graph is by defining an [`Annotation`](/langgraphjs/reference/functions/langgraph.Annotation-1.html) object, where each key is an item in the state. ### Reducers From fc9155ee6789b86e7f324fcc3fc51450462de0f2 Mon Sep 17 00:00:00 2001 From: isaac hershenson Date: Wed, 28 Aug 2024 20:19:47 -0700 Subject: [PATCH 07/21] x --- .github/workflows/link_check.yml | 50 +++++++++----------------------- package.json | 3 +- 2 files changed, 16 insertions(+), 37 deletions(-) diff --git a/.github/workflows/link_check.yml b/.github/workflows/link_check.yml index 2b828522..a88612d4 100644 --- a/.github/workflows/link_check.yml +++ b/.github/workflows/link_check.yml @@ -1,12 +1,11 @@ name: Check Docs & Links on: - pull_request: - branches: - - main push: - branches: - - main + branches: ["main"] + pull_request: + paths: + - '**.ipynb' schedule: - cron: "0 5 * * *" workflow_dispatch: @@ -51,35 +50,14 @@ jobs: env: LANGCHAIN_API_KEY: test run: | - if [ "${{ github.event_name }}" == "schedule" ] || [ "${{ github.event_name }}" == "workflow_dispatch" ] || ([ "${{ github.event_name }}" == "push" ] && [ "${{ github.ref }}" == "refs/heads/main" ]); then - echo "Running link check on all notebooks in examples directory..." - yarn run pytest -v --check-links-ignore "https://(api|web)\.smith\.langchain\.com/.*" --check-links-ignore "https://x.com/.*" --check-links examples + echo "Fetching changes from origin/main..." + git fetch origin main + echo "Checking for changed notebook files..." + CHANGED_FILES=$(git diff --name-only --diff-filter=d origin/main | grep '\.ipynb$' || true) + echo "Changed files: ${CHANGED_FILES}" + if [ -n "${CHANGED_FILES}" ]; then + echo "Running link check on changed notebook files..." + yarn run pytest -v --check-links-ignore "https://(api|web)\.smith\.langchain\.com/.*" --check-links-ignore "https://x.com/.*" --check-links ${CHANGED_FILES} || ([ $? = 5 ] && exit 0 || exit $?) else - echo "Fetching changes from origin/main..." - git fetch origin main - echo "Checking for changed notebook files..." - CHANGED_FILES=$(git diff --name-only --diff-filter=d origin/main | grep '\.ipynb$' || true) - echo "Changed files: ${CHANGED_FILES}" - if [ -n "${CHANGED_FILES}" ]; then - echo "Running link check on changed notebook files..." - yarn run pytest -v --check-links-ignore "https://(api|web)\.smith\.langchain\.com/.*" --check-links-ignore "https://x.com/.*" --check-links ${CHANGED_FILES} || ([ $? = 5 ] && exit 0 || exit $?) - else - echo "No notebook files changed." - fi - fi - check-readmes-synced: - # This checks that the repo README.md is identical to the libs/langgraph/README.md - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v4 - with: - fetch-depth: 1 - - - name: Check README.md is in sync - run: | - if ! diff -q README.md libs/langgraph/README.md >/dev/null; then - echo "README.md is out of sync with libs/langgraph/README.md" - diff -C 3 README.md libs/langgraph/README.md - exit 1 - fi \ No newline at end of file + echo "No notebook files changed." + fi \ No newline at end of file diff --git a/package.json b/package.json index 99a3ca72..da23814c 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,8 @@ "test:exports:docker": "docker compose -f environment_tests/docker-compose.yml up --force-recreate", "format": "turbo run format", "format:check": "turbo run format:check", - "release": "node scripts/release_workspace.cjs --workspace" + "release": "node scripts/release_workspace.cjs --workspace", + "pytest": "pytest" }, "author": "LangChain", "license": "MIT", From e226b7fc801806785d368df30eca3243fa6f9d1c Mon Sep 17 00:00:00 2001 From: isaac hershenson Date: Wed, 28 Aug 2024 20:22:58 -0700 Subject: [PATCH 08/21] messing with notebook --- examples/how-tos/breakpoints.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/how-tos/breakpoints.ipynb b/examples/how-tos/breakpoints.ipynb index a41177d4..57641686 100644 --- a/examples/how-tos/breakpoints.ipynb +++ b/examples/how-tos/breakpoints.ipynb @@ -58,7 +58,7 @@ "\n", "Below, we do two things:\n", "\n", - "1) We specify the [breakpoint](https://langchain-ai.github.io/langgraph/concepts/low_level/#breakpoints) using `interruptBefore` the specified step.\n", + "1) We specify the [breakpoint](https://langchain-ai.github.io/langgraph/concepts/low_level/#breakpoints2) using `interruptBefore` the specified step.\n", "\n", "2) We set up a [checkpointer](https://langchain-ai.github.io/langgraphjs/concepts/#checkpoints) to save the state of the graph." ] From c1a7ac83c772891ed19826cedee2caa3803f8fc3 Mon Sep 17 00:00:00 2001 From: isaac hershenson Date: Wed, 28 Aug 2024 21:09:13 -0700 Subject: [PATCH 09/21] x --- .github/workflows/link_check.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/link_check.yml b/.github/workflows/link_check.yml index a88612d4..03affab0 100644 --- a/.github/workflows/link_check.yml +++ b/.github/workflows/link_check.yml @@ -57,6 +57,7 @@ jobs: echo "Changed files: ${CHANGED_FILES}" if [ -n "${CHANGED_FILES}" ]; then echo "Running link check on changed notebook files..." + yarn add pytest yarn run pytest -v --check-links-ignore "https://(api|web)\.smith\.langchain\.com/.*" --check-links-ignore "https://x.com/.*" --check-links ${CHANGED_FILES} || ([ $? = 5 ] && exit 0 || exit $?) else echo "No notebook files changed." From cc8ec4c15b0a29a0d4158ecb276ad352b19c2822 Mon Sep 17 00:00:00 2001 From: isaac hershenson Date: Wed, 28 Aug 2024 21:38:36 -0700 Subject: [PATCH 10/21] x --- .github/workflows/link_check.yml | 19 +++----- package.json | 5 ++- scripts/check-link.js | 75 ++++++++++++++++++++++++++++++++ 3 files changed, 84 insertions(+), 15 deletions(-) create mode 100644 scripts/check-link.js diff --git a/.github/workflows/link_check.yml b/.github/workflows/link_check.yml index 03affab0..4a910fff 100644 --- a/.github/workflows/link_check.yml +++ b/.github/workflows/link_check.yml @@ -46,19 +46,12 @@ jobs: run: | yarn install --frozen-lockfile + - name: Get changed files + id: changed-files + uses: tj-actions/changed-files@v35 + - name: Check links in notebooks env: - LANGCHAIN_API_KEY: test + CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }} run: | - echo "Fetching changes from origin/main..." - git fetch origin main - echo "Checking for changed notebook files..." - CHANGED_FILES=$(git diff --name-only --diff-filter=d origin/main | grep '\.ipynb$' || true) - echo "Changed files: ${CHANGED_FILES}" - if [ -n "${CHANGED_FILES}" ]; then - echo "Running link check on changed notebook files..." - yarn add pytest - yarn run pytest -v --check-links-ignore "https://(api|web)\.smith\.langchain\.com/.*" --check-links-ignore "https://x.com/.*" --check-links ${CHANGED_FILES} || ([ $? = 5 ] && exit 0 || exit $?) - else - echo "No notebook files changed." - fi \ No newline at end of file + yarn check-links \ No newline at end of file diff --git a/package.json b/package.json index da23814c..8467f7e5 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "format": "turbo run format", "format:check": "turbo run format:check", "release": "node scripts/release_workspace.cjs --workspace", - "pytest": "pytest" + "check-links": "node scripts/check-links.js" }, "author": "LangChain", "license": "MIT", @@ -49,7 +49,8 @@ "tsx": "^4.7.0", "turbo": "canary", "typedoc": "^0.25.13", - "typescript": "^4.9.5 || ^5.4.5" + "typescript": "^4.9.5 || ^5.4.5", + "markdown-link-check": "^3.10.3" }, "resolutions": { "cheerio": "^1.0.0-rc.12", diff --git a/scripts/check-link.js b/scripts/check-link.js new file mode 100644 index 00000000..f3312da1 --- /dev/null +++ b/scripts/check-link.js @@ -0,0 +1,75 @@ +const { exec } = require('child_process'); +const fs = require('fs'); +const path = require('path'); +const markdownLinkCheck = require('markdown-link-check'); + +const ignoredUrls = [ + 'https://(api|web)\\.smith\\.langchain\\.com/.*', + 'https://x\\.com/.*' +]; + +function convertNotebookToMarkdown(filePath) { + return new Promise((resolve, reject) => { + const outputPath = filePath.replace('.ipynb', '.md'); + exec(`jupyter nbconvert --to markdown "${filePath}" --output "${outputPath}"`, (error) => { + if (error) { + reject(error); + } else { + resolve(outputPath); + } + }); + }); +} + +function checkLinks(filePath) { + return new Promise((resolve, reject) => { + const markdown = fs.readFileSync(filePath, 'utf8'); + markdownLinkCheck(markdown, { + ignorePatterns: ignoredUrls, + baseUrl: 'https://github.com', // Adjust this if needed + httpHeaders: [ + { + urls: ['https://github.com'], + headers: { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36' + } + } + ] + }, (err, results) => { + if (err) { + reject(err); + } else { + const brokenLinks = results.filter(result => result.status === 'dead'); + resolve(brokenLinks); + } + }); + }); +} + +async function main() { + const changedFiles = process.env.CHANGED_FILES.split(' '); + const notebookFiles = changedFiles.filter(file => path.extname(file) === '.ipynb'); + + for (const file of notebookFiles) { + try { + const markdownFile = await convertNotebookToMarkdown(file); + const brokenLinks = await checkLinks(markdownFile); + + if (brokenLinks.length > 0) { + console.error(`Broken links found in ${file}:`); + brokenLinks.forEach(link => console.error(`- ${link.link}: ${link.statusCode}`)); + process.exit(1); + } else { + console.log(`No broken links found in ${file}`); + } + + // Clean up the temporary markdown file + fs.unlinkSync(markdownFile); + } catch (error) { + console.error(`Error processing ${file}:`, error); + process.exit(1); + } + } +} + +main(); \ No newline at end of file From 3030bfe7e768a4a5987538f2dbe535635c70690d Mon Sep 17 00:00:00 2001 From: isaac hershenson Date: Wed, 28 Aug 2024 21:41:57 -0700 Subject: [PATCH 11/21] x --- package.json | 4 +- yarn.lock | 134 +++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 132 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 8467f7e5..12cac103 100644 --- a/package.json +++ b/package.json @@ -42,6 +42,7 @@ "cheminfo-types": "^1.4.0", "d3": "^7.9.0", "esm-hook": "^0.1.4", + "markdown-link-check": "^3.10.3", "readline": "^1.3.0", "release-it": "^17.6.0", "semver": "^7.6.3", @@ -49,8 +50,7 @@ "tsx": "^4.7.0", "turbo": "canary", "typedoc": "^0.25.13", - "typescript": "^4.9.5 || ^5.4.5", - "markdown-link-check": "^3.10.3" + "typescript": "^4.9.5 || ^5.4.5" }, "resolutions": { "cheerio": "^1.0.0-rc.12", diff --git a/yarn.lock b/yarn.lock index df20aa0a..0790876e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4022,6 +4022,13 @@ __metadata: languageName: node linkType: hard +"async@npm:^3.2.5": + version: 3.2.6 + resolution: "async@npm:3.2.6" + checksum: ee6eb8cd8a0ab1b58bd2a3ed6c415e93e773573a91d31df9d5ef559baafa9dab37d3b096fa7993e84585cac3697b2af6ddb9086f45d3ac8cae821bb2aab65682 + languageName: node + linkType: hard + "asynckit@npm:^0.4.0": version: 0.4.0 resolution: "asynckit@npm:0.4.0" @@ -4755,6 +4762,13 @@ __metadata: languageName: node linkType: hard +"commander@npm:^12.1.0": + version: 12.1.0 + resolution: "commander@npm:12.1.0" + checksum: 68e9818b00fc1ed9cdab9eb16905551c2b768a317ae69a5e3c43924c2b20ac9bb65b27e1cab36aeda7b6496376d4da908996ba2c0b5d79463e0fb1e77935d514 + languageName: node + linkType: hard + "commondir@npm:^1.0.1": version: 1.0.1 resolution: "commondir@npm:1.0.1" @@ -7273,6 +7287,15 @@ __metadata: languageName: node linkType: hard +"html-link-extractor@npm:^1.0.5": + version: 1.0.5 + resolution: "html-link-extractor@npm:1.0.5" + dependencies: + cheerio: ^1.0.0-rc.10 + checksum: 8974e15fb2cbe451274ab1704a984b75bdb66e56ac69fa0d14b100280de9782f0248deef200dafa92021f3313a25933ce86b06f218c7098414553a70bda93560 + languageName: node + linkType: hard + "htmlparser2@npm:^8.0.1": version: 8.0.2 resolution: "htmlparser2@npm:8.0.2" @@ -7355,7 +7378,7 @@ __metadata: languageName: node linkType: hard -"iconv-lite@npm:0.6, iconv-lite@npm:^0.6.2": +"iconv-lite@npm:0.6, iconv-lite@npm:^0.6.2, iconv-lite@npm:^0.6.3": version: 0.6.3 resolution: "iconv-lite@npm:0.6.3" dependencies: @@ -7516,6 +7539,13 @@ __metadata: languageName: node linkType: hard +"is-absolute-url@npm:^4.0.1": + version: 4.0.1 + resolution: "is-absolute-url@npm:4.0.1" + checksum: de172a718439982a54477fdae55f21be69ec0e6a4b205db5484975d2f4ee749851fd46c28f3790dfc51a274c2ed1d0f8457b6d1fff02ab829069fd9cc761e48c + languageName: node + linkType: hard + "is-any-array@npm:^2.0.0": version: 2.0.1 resolution: "is-any-array@npm:2.0.1" @@ -7778,6 +7808,15 @@ __metadata: languageName: node linkType: hard +"is-relative-url@npm:^4.0.0": + version: 4.0.0 + resolution: "is-relative-url@npm:4.0.0" + dependencies: + is-absolute-url: ^4.0.1 + checksum: 9556fc1d7d88b147428f237408a02ecab2a9bf45e2b93cf17069ada5207ff4050dcd5c3a1cf9bbc8c9133a858de9228a0c6c9c45a6a84eb0b98e210cacbe99ea + languageName: node + linkType: hard + "is-shared-array-buffer@npm:^1.0.2, is-shared-array-buffer@npm:^1.0.3": version: 1.0.3 resolution: "is-shared-array-buffer@npm:1.0.3" @@ -7890,6 +7929,15 @@ __metadata: languageName: node linkType: hard +"isemail@npm:^3.2.0": + version: 3.2.0 + resolution: "isemail@npm:3.2.0" + dependencies: + punycode: 2.x.x + checksum: 77adfbe8d6b3f9970c37516e008fd1c2e33be186f4cd09b31daf37a9fa8f82adc0dd8ce4bd12818f0c0e63018f9ec0c22490793d704ed635770c98a9d48b21c4 + languageName: node + linkType: hard + "isexe@npm:^2.0.0": version: 2.0.0 resolution: "isexe@npm:2.0.0" @@ -9204,6 +9252,7 @@ __metadata: cheminfo-types: ^1.4.0 d3: ^7.9.0 esm-hook: ^0.1.4 + markdown-link-check: ^3.10.3 readline: ^1.3.0 release-it: ^17.6.0 semver: ^7.6.3 @@ -9322,6 +9371,19 @@ __metadata: languageName: node linkType: hard +"link-check@npm:^5.3.0": + version: 5.3.0 + resolution: "link-check@npm:5.3.0" + dependencies: + is-relative-url: ^4.0.0 + isemail: ^3.2.0 + ms: ^2.1.3 + needle: ^3.3.1 + proxy-agent: ^6.4.0 + checksum: e4a19314bee54eda5f55ca8a53750b0177a45ff11c5df58d71e251ae8fdebbdd24ef28c84a26be5cda51967d394ed57c0d7413a6aa0a4d11a83d87cb2498b7b2 + languageName: node + linkType: hard + "locate-path@npm:^5.0.0": version: 5.0.0 resolution: "locate-path@npm:5.0.0" @@ -9520,6 +9582,44 @@ __metadata: languageName: node linkType: hard +"markdown-link-check@npm:^3.10.3": + version: 3.12.2 + resolution: "markdown-link-check@npm:3.12.2" + dependencies: + async: ^3.2.5 + chalk: ^5.3.0 + commander: ^12.1.0 + link-check: ^5.3.0 + lodash: ^4.17.21 + markdown-link-extractor: ^4.0.2 + needle: ^3.3.1 + progress: ^2.0.3 + proxy-agent: ^6.4.0 + bin: + markdown-link-check: markdown-link-check + checksum: da67cf618cafe432b546e51990985fdffd5bb399d884c9bd4f9418aa51f4d7ab12d876b9418b3f4bb17992e6fe8ec9f91cc739a586482dff3b5078ef94a8c949 + languageName: node + linkType: hard + +"markdown-link-extractor@npm:^4.0.2": + version: 4.0.2 + resolution: "markdown-link-extractor@npm:4.0.2" + dependencies: + html-link-extractor: ^1.0.5 + marked: ^12.0.1 + checksum: c3e0f2f6dca39a91bd074b44c51026ad59c1704a67fc9e0b6df12a559d3c7b7722ba9db78fcc0f6860d74b56f1dfc811daccd891d75228da93b3eff407a248a5 + languageName: node + linkType: hard + +"marked@npm:^12.0.1": + version: 12.0.2 + resolution: "marked@npm:12.0.2" + bin: + marked: bin/marked.js + checksum: 966422e2ba519294aa657bacb2e51784e4b641c1c8f15bdf9315878993c4ea09fe0d00ba2da761e443a3c52cc285c452644fd107ab0f356669bd5aac08d5c0bd + languageName: node + linkType: hard + "marked@npm:^4.3.0": version: 4.3.0 resolution: "marked@npm:4.3.0" @@ -9860,7 +9960,7 @@ __metadata: languageName: node linkType: hard -"ms@npm:^2.0.0, ms@npm:^2.1.1": +"ms@npm:^2.0.0, ms@npm:^2.1.1, ms@npm:^2.1.3": version: 2.1.3 resolution: "ms@npm:2.1.3" checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d @@ -9897,6 +9997,18 @@ __metadata: languageName: node linkType: hard +"needle@npm:^3.3.1": + version: 3.3.1 + resolution: "needle@npm:3.3.1" + dependencies: + iconv-lite: ^0.6.3 + sax: ^1.2.4 + bin: + needle: bin/needle + checksum: ed4864d7ee85f1037ac803154868bf7151fa59399c1e55e5d93ca26a9d16e1c8ccbe9552d846ce7e2519b4bce1de3e81a501f0dc33244e02902e27cf5a9bc11d + languageName: node + linkType: hard + "negotiator@npm:^0.6.3": version: 0.6.3 resolution: "negotiator@npm:0.6.3" @@ -10836,6 +10948,13 @@ __metadata: languageName: node linkType: hard +"progress@npm:^2.0.3": + version: 2.0.3 + resolution: "progress@npm:2.0.3" + checksum: f67403fe7b34912148d9252cb7481266a354bd99ce82c835f79070643bb3c6583d10dbcfda4d41e04bbc1d8437e9af0fb1e1f2135727878f5308682a579429b7 + languageName: node + linkType: hard + "promise-retry@npm:^2.0.1": version: 2.0.1 resolution: "promise-retry@npm:2.0.1" @@ -10894,7 +11013,7 @@ __metadata: languageName: node linkType: hard -"proxy-agent@npm:6.4.0": +"proxy-agent@npm:6.4.0, proxy-agent@npm:^6.4.0": version: 6.4.0 resolution: "proxy-agent@npm:6.4.0" dependencies: @@ -10927,7 +11046,7 @@ __metadata: languageName: node linkType: hard -"punycode@npm:^2.1.0, punycode@npm:^2.3.0": +"punycode@npm:2.x.x, punycode@npm:^2.1.0, punycode@npm:^2.3.0": version: 2.3.1 resolution: "punycode@npm:2.3.1" checksum: bb0a0ceedca4c3c57a9b981b90601579058903c62be23c5e8e843d2c2d4148a3ecf029d5133486fb0e1822b098ba8bba09e89d6b21742d02fa26bda6441a6fb2 @@ -11394,6 +11513,13 @@ __metadata: languageName: node linkType: hard +"sax@npm:^1.2.4": + version: 1.4.1 + resolution: "sax@npm:1.4.1" + checksum: 3ad64df16b743f0f2eb7c38ced9692a6d924f1cd07bbe45c39576c2cf50de8290d9d04e7b2228f924c7d05fecc4ec5cf651423278e0c7b63d260c387ef3af84a + languageName: node + linkType: hard + "semver-diff@npm:^4.0.0": version: 4.0.0 resolution: "semver-diff@npm:4.0.0" From 13341496429b3c7fc74674a78192e99ac1f3ca3f Mon Sep 17 00:00:00 2001 From: isaac hershenson Date: Wed, 28 Aug 2024 22:14:16 -0700 Subject: [PATCH 12/21] wip --- scripts/check-link.js | 94 +++++++++++++++---------------------------- 1 file changed, 32 insertions(+), 62 deletions(-) diff --git a/scripts/check-link.js b/scripts/check-link.js index f3312da1..b525704e 100644 --- a/scripts/check-link.js +++ b/scripts/check-link.js @@ -1,75 +1,45 @@ -const { exec } = require('child_process'); const fs = require('fs'); const path = require('path'); -const markdownLinkCheck = require('markdown-link-check'); - -const ignoredUrls = [ - 'https://(api|web)\\.smith\\.langchain\\.com/.*', - 'https://x\\.com/.*' -]; - -function convertNotebookToMarkdown(filePath) { - return new Promise((resolve, reject) => { - const outputPath = filePath.replace('.ipynb', '.md'); - exec(`jupyter nbconvert --to markdown "${filePath}" --output "${outputPath}"`, (error) => { - if (error) { - reject(error); - } else { - resolve(outputPath); - } - }); - }); +const { execSync } = require('child_process'); + +// Function to find all .ipynb files in the given directory +function findIpynbFiles(dir) { + let results = []; + const files = fs.readdirSync(dir); + for (const file of files) { + const filePath = path.join(dir, file); + const stat = fs.statSync(filePath); + if (stat.isDirectory()) { + results = results.concat(findIpynbFiles(filePath)); + } else if (path.extname(file) === '.ipynb') { + results.push(filePath); + } + } + return results; } -function checkLinks(filePath) { - return new Promise((resolve, reject) => { - const markdown = fs.readFileSync(filePath, 'utf8'); - markdownLinkCheck(markdown, { - ignorePatterns: ignoredUrls, - baseUrl: 'https://github.com', // Adjust this if needed - httpHeaders: [ - { - urls: ['https://github.com'], - headers: { - 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36' - } - } - ] - }, (err, results) => { - if (err) { - reject(err); - } else { - const brokenLinks = results.filter(result => result.status === 'dead'); - resolve(brokenLinks); - } - }); - }); -} +// Main function to check links +function checkLinks() { + const ignorePatterns = [ + 'https://(api|web)\\.smith\\.langchain\\.com/.*', + 'https://x\\.com/.*' + ]; -async function main() { - const changedFiles = process.env.CHANGED_FILES.split(' '); - const notebookFiles = changedFiles.filter(file => path.extname(file) === '.ipynb'); + const ipynbFiles = findIpynbFiles('.'); + console.log('Found .ipynb files:', ipynbFiles); - for (const file of notebookFiles) { + for (const file of ipynbFiles) { + console.log(`Checking links in ${file}`); try { - const markdownFile = await convertNotebookToMarkdown(file); - const brokenLinks = await checkLinks(markdownFile); - - if (brokenLinks.length > 0) { - console.error(`Broken links found in ${file}:`); - brokenLinks.forEach(link => console.error(`- ${link.link}: ${link.statusCode}`)); - process.exit(1); + execSync(`yarn run linkinator ${file} ${ignorePatterns.map(pattern => `--skip "${pattern}"`).join(' ')}`, { stdio: 'inherit' }); + } catch (error) { + if (error.status === 5) { + console.log('Broken links found, but continuing...'); } else { - console.log(`No broken links found in ${file}`); + throw error; } - - // Clean up the temporary markdown file - fs.unlinkSync(markdownFile); - } catch (error) { - console.error(`Error processing ${file}:`, error); - process.exit(1); } } } -main(); \ No newline at end of file +checkLinks(); \ No newline at end of file From fa0c8f567ebdde7444b4af7138f88d3f5ab1f825 Mon Sep 17 00:00:00 2001 From: isaac hershenson Date: Wed, 28 Aug 2024 22:15:15 -0700 Subject: [PATCH 13/21] x --- .github/workflows/link_check.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/link_check.yml b/.github/workflows/link_check.yml index 4a910fff..00d78a80 100644 --- a/.github/workflows/link_check.yml +++ b/.github/workflows/link_check.yml @@ -54,4 +54,5 @@ jobs: env: CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }} run: | + pwd yarn check-links \ No newline at end of file From d4a00b5a020634d074c4dc11225776f58fce605a Mon Sep 17 00:00:00 2001 From: isaac hershenson Date: Wed, 28 Aug 2024 22:21:18 -0700 Subject: [PATCH 14/21] x --- .github/workflows/link_check.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/.github/workflows/link_check.yml b/.github/workflows/link_check.yml index 00d78a80..ee6444b2 100644 --- a/.github/workflows/link_check.yml +++ b/.github/workflows/link_check.yml @@ -54,5 +54,19 @@ jobs: env: CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }} run: | + echo "Current directory:" pwd + echo "\nDirectory contents:" + ls -la + echo "\nScripts directory contents:" + ls -la scripts/ + echo "\nNode.js version:" + node --version + echo "\nYarn version:" + yarn --version + echo "\nRepository structure:" + tree -L 3 + echo "\nFile permissions of scripts directory:" + ls -l scripts/ + echo "\nContent of check-links.js:" yarn check-links \ No newline at end of file From b7ce2e88014100b7dbcb08384227a6d2731e9856 Mon Sep 17 00:00:00 2001 From: isaac hershenson Date: Wed, 28 Aug 2024 22:28:00 -0700 Subject: [PATCH 15/21] z --- .github/workflows/link_check.yml | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/.github/workflows/link_check.yml b/.github/workflows/link_check.yml index ee6444b2..5d184372 100644 --- a/.github/workflows/link_check.yml +++ b/.github/workflows/link_check.yml @@ -54,19 +54,5 @@ jobs: env: CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }} run: | - echo "Current directory:" - pwd - echo "\nDirectory contents:" - ls -la - echo "\nScripts directory contents:" - ls -la scripts/ - echo "\nNode.js version:" - node --version - echo "\nYarn version:" - yarn --version - echo "\nRepository structure:" - tree -L 3 - echo "\nFile permissions of scripts directory:" - ls -l scripts/ - echo "\nContent of check-links.js:" + chmod +x scripts/check-links.js yarn check-links \ No newline at end of file From 8d867f59b99fca7679a951c62bd4f669c938f7bc Mon Sep 17 00:00:00 2001 From: isaac hershenson Date: Wed, 28 Aug 2024 22:31:47 -0700 Subject: [PATCH 16/21] z --- scripts/{check-link.js => check-links.js} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename scripts/{check-link.js => check-links.js} (100%) diff --git a/scripts/check-link.js b/scripts/check-links.js similarity index 100% rename from scripts/check-link.js rename to scripts/check-links.js From 0b89c62364bd35a7dab8044d451935a878906380 Mon Sep 17 00:00:00 2001 From: isaac hershenson Date: Wed, 28 Aug 2024 22:34:17 -0700 Subject: [PATCH 17/21] x --- .github/workflows/link_check.yml | 1 - package.json | 2 +- scripts/{check-links.js => check-links.cjs} | 0 3 files changed, 1 insertion(+), 2 deletions(-) rename scripts/{check-links.js => check-links.cjs} (100%) diff --git a/.github/workflows/link_check.yml b/.github/workflows/link_check.yml index 5d184372..4a910fff 100644 --- a/.github/workflows/link_check.yml +++ b/.github/workflows/link_check.yml @@ -54,5 +54,4 @@ jobs: env: CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }} run: | - chmod +x scripts/check-links.js yarn check-links \ No newline at end of file diff --git a/package.json b/package.json index 12cac103..76591446 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "format": "turbo run format", "format:check": "turbo run format:check", "release": "node scripts/release_workspace.cjs --workspace", - "check-links": "node scripts/check-links.js" + "check-links": "node scripts/check-links.cjs" }, "author": "LangChain", "license": "MIT", diff --git a/scripts/check-links.js b/scripts/check-links.cjs similarity index 100% rename from scripts/check-links.js rename to scripts/check-links.cjs From c1a468c3adbdb81feb5100e86c20c864c8535282 Mon Sep 17 00:00:00 2001 From: isaac hershenson Date: Wed, 28 Aug 2024 22:39:54 -0700 Subject: [PATCH 18/21] x --- package.json | 1 + scripts/check-links.cjs | 55 +++-- yarn.lock | 497 +++++++++++++++++++++++++++++++++++++++- 3 files changed, 523 insertions(+), 30 deletions(-) diff --git a/package.json b/package.json index 76591446..4f8e73a4 100644 --- a/package.json +++ b/package.json @@ -42,6 +42,7 @@ "cheminfo-types": "^1.4.0", "d3": "^7.9.0", "esm-hook": "^0.1.4", + "linkinator": "^4.0.5", "markdown-link-check": "^3.10.3", "readline": "^1.3.0", "release-it": "^17.6.0", diff --git a/scripts/check-links.cjs b/scripts/check-links.cjs index b525704e..f4f8e06c 100644 --- a/scripts/check-links.cjs +++ b/scripts/check-links.cjs @@ -1,16 +1,20 @@ const fs = require('fs'); const path = require('path'); -const { execSync } = require('child_process'); +const { LinkChecker } = require('linkinator'); -// Function to find all .ipynb files in the given directory -function findIpynbFiles(dir) { +const ignorePatterns = [ + 'https://(api|web)\\.smith\\.langchain\\.com/.*', + 'https://x\\.com/.*' +]; + +async function findIpynbFiles(dir) { + const files = await fs.promises.readdir(dir); let results = []; - const files = fs.readdirSync(dir); for (const file of files) { const filePath = path.join(dir, file); - const stat = fs.statSync(filePath); + const stat = await fs.promises.stat(filePath); if (stat.isDirectory()) { - results = results.concat(findIpynbFiles(filePath)); + results = results.concat(await findIpynbFiles(filePath)); } else if (path.extname(file) === '.ipynb') { results.push(filePath); } @@ -18,28 +22,39 @@ function findIpynbFiles(dir) { return results; } -// Main function to check links -function checkLinks() { - const ignorePatterns = [ - 'https://(api|web)\\.smith\\.langchain\\.com/.*', - 'https://x\\.com/.*' - ]; - - const ipynbFiles = findIpynbFiles('.'); +async function checkLinks() { + const ipynbFiles = await findIpynbFiles('.'); console.log('Found .ipynb files:', ipynbFiles); + const checker = new LinkChecker(); + + checker.on('link', (result) => { + console.log(`${result.status} ${result.url}`); + }); + for (const file of ipynbFiles) { console.log(`Checking links in ${file}`); try { - execSync(`yarn run linkinator ${file} ${ignorePatterns.map(pattern => `--skip "${pattern}"`).join(' ')}`, { stdio: 'inherit' }); - } catch (error) { - if (error.status === 5) { - console.log('Broken links found, but continuing...'); + const result = await checker.check({ + path: file, + recurse: false, + linksToSkip: ignorePatterns, + }); + + if (result.passed) { + console.log(`All links in ${file} are valid.`); } else { - throw error; + console.error(`Broken links found in ${file}.`); + process.exitCode = 1; } + } catch (error) { + console.error(`Error checking links in ${file}:`, error); + process.exitCode = 1; } } } -checkLinks(); \ No newline at end of file +checkLinks().catch(error => { + console.error('An error occurred:', error); + process.exitCode = 1; +}); \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 0790876e..216276de 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3421,6 +3421,13 @@ __metadata: languageName: node linkType: hard +"@types/minimist@npm:^1.2.2": + version: 1.2.5 + resolution: "@types/minimist@npm:1.2.5" + checksum: 477047b606005058ab0263c4f58097136268007f320003c348794f74adedc3166ffc47c80ec3e94687787f2ab7f4e72c468223946e79892cf0fd9e25e9970a90 + languageName: node + linkType: hard + "@types/node-fetch@npm:^2.6.4": version: 2.6.11 resolution: "@types/node-fetch@npm:2.6.11" @@ -3467,6 +3474,13 @@ __metadata: languageName: node linkType: hard +"@types/normalize-package-data@npm:^2.4.1": + version: 2.4.4 + resolution: "@types/normalize-package-data@npm:2.4.4" + checksum: 65dff72b543997b7be8b0265eca7ace0e34b75c3e5fee31de11179d08fa7124a7a5587265d53d0409532ecb7f7fba662c2012807963e1f9b059653ec2c83ee05 + languageName: node + linkType: hard + "@types/resolve@npm:1.17.1": version: 1.17.1 resolution: "@types/resolve@npm:1.17.1" @@ -3782,6 +3796,15 @@ __metadata: languageName: node linkType: hard +"agent-base@npm:6": + version: 6.0.2 + resolution: "agent-base@npm:6.0.2" + dependencies: + debug: 4 + checksum: f52b6872cc96fd5f622071b71ef200e01c7c4c454ee68bc9accca90c98cfb39f2810e3e9aa330435835eedc8c23f4f8a15267f67c6e245d2b33757575bdac49d + languageName: node + linkType: hard + "agent-base@npm:^7.0.2, agent-base@npm:^7.1.0, agent-base@npm:^7.1.1": version: 7.1.1 resolution: "agent-base@npm:7.1.1" @@ -4004,6 +4027,13 @@ __metadata: languageName: node linkType: hard +"arrify@npm:^1.0.1": + version: 1.0.1 + resolution: "arrify@npm:1.0.1" + checksum: 745075dd4a4624ff0225c331dacb99be501a515d39bcb7c84d24660314a6ec28e68131b137e6f7e16318170842ce97538cd298fc4cd6b2cc798e0b957f2747e7 + languageName: node + linkType: hard + "ast-types@npm:^0.13.4": version: 0.13.4 resolution: "ast-types@npm:0.13.4" @@ -4440,6 +4470,18 @@ __metadata: languageName: node linkType: hard +"camelcase-keys@npm:^8.0.2": + version: 8.0.2 + resolution: "camelcase-keys@npm:8.0.2" + dependencies: + camelcase: ^7.0.0 + map-obj: ^4.3.0 + quick-lru: ^6.1.1 + type-fest: ^2.13.0 + checksum: 878fdaffa55737486101845232b2bc017fec95e06711d8a4133461cabf2432b55a59b20ff6afafce9b48a5629f25181bac3ecb10023032d3eb7cf3247c6e34f6 + languageName: node + linkType: hard + "camelcase@npm:6, camelcase@npm:^6.2.0": version: 6.3.0 resolution: "camelcase@npm:6.3.0" @@ -4454,7 +4496,7 @@ __metadata: languageName: node linkType: hard -"camelcase@npm:^7.0.1": +"camelcase@npm:^7.0.0, camelcase@npm:^7.0.1": version: 7.0.1 resolution: "camelcase@npm:7.0.1" checksum: 86ab8f3ebf08bcdbe605a211a242f00ed30d8bfb77dab4ebb744dd36efbc84432d1c4adb28975ba87a1b8be40a80fbd1e60e2f06565315918fa7350011a26d3d @@ -4468,7 +4510,7 @@ __metadata: languageName: node linkType: hard -"chalk@npm:5.3.0, chalk@npm:^5.2.0, chalk@npm:^5.3.0": +"chalk@npm:5.3.0, chalk@npm:^5.0.0, chalk@npm:^5.2.0, chalk@npm:^5.3.0": version: 5.3.0 resolution: "chalk@npm:5.3.0" checksum: 623922e077b7d1e9dedaea6f8b9e9352921f8ae3afe739132e0e00c275971bdd331268183b2628cf4ab1727c45ea1f28d7e24ac23ce1db1eb653c414ca8a5a80 @@ -5292,13 +5334,30 @@ __metadata: languageName: node linkType: hard -"decamelize@npm:1.2.0": +"decamelize-keys@npm:^1.1.0": + version: 1.1.1 + resolution: "decamelize-keys@npm:1.1.1" + dependencies: + decamelize: ^1.1.0 + map-obj: ^1.0.0 + checksum: fc645fe20b7bda2680bbf9481a3477257a7f9304b1691036092b97ab04c0ab53e3bf9fcc2d2ae382536568e402ec41fb11e1d4c3836a9abe2d813dd9ef4311e0 + languageName: node + linkType: hard + +"decamelize@npm:1.2.0, decamelize@npm:^1.1.0": version: 1.2.0 resolution: "decamelize@npm:1.2.0" checksum: ad8c51a7e7e0720c70ec2eeb1163b66da03e7616d7b98c9ef43cce2416395e84c1e9548dd94f5f6ffecfee9f8b94251fc57121a8b021f2ff2469b2bae247b8aa languageName: node linkType: hard +"decamelize@npm:^6.0.0": + version: 6.0.0 + resolution: "decamelize@npm:6.0.0" + checksum: 0066bc30798ec11e01adf0c19ad975caef86545d4bb6f70cfb90b7eb8e3cbf7974cf774ac2e6ea2586e4e07b1f654bfecc4e772c42128a79a89f8584fc546753 + languageName: node + linkType: hard + "decompress-response@npm:^6.0.0": version: 6.0.0 resolution: "decompress-response@npm:6.0.0" @@ -5512,7 +5571,7 @@ __metadata: languageName: node linkType: hard -"domutils@npm:^3.0.1": +"domutils@npm:^3.0.1, domutils@npm:^3.1.0": version: 3.1.0 resolution: "domutils@npm:3.1.0" dependencies: @@ -5623,7 +5682,7 @@ __metadata: languageName: node linkType: hard -"entities@npm:^4.2.0, entities@npm:^4.4.0": +"entities@npm:^4.2.0, entities@npm:^4.4.0, entities@npm:^4.5.0": version: 4.5.0 resolution: "entities@npm:4.5.0" checksum: 853f8ebd5b425d350bffa97dd6958143179a5938352ccae092c62d1267c4e392a039be1bae7d51b6e4ffad25f51f9617531fedf5237f15df302ccfb452cbf2d7 @@ -6154,6 +6213,13 @@ __metadata: languageName: node linkType: hard +"escape-html@npm:^1.0.3": + version: 1.0.3 + resolution: "escape-html@npm:1.0.3" + checksum: 6213ca9ae00d0ab8bccb6d8d4e0a98e76237b2410302cf7df70aaa6591d509a2a37ce8998008cbecae8fc8ffaadf3fb0229535e6a145f3ce0b211d060decbb24 + languageName: node + linkType: hard + "escape-string-regexp@npm:^1.0.5": version: 1.0.5 resolution: "escape-string-regexp@npm:1.0.5" @@ -6561,6 +6627,13 @@ __metadata: languageName: node linkType: hard +"extend@npm:^3.0.2": + version: 3.0.2 + resolution: "extend@npm:3.0.2" + checksum: a50a8309ca65ea5d426382ff09f33586527882cf532931cb08ca786ea3146c0553310bda688710ff61d7668eba9f96b923fe1420cdf56a2c3eaf30fcab87b515 + languageName: node + linkType: hard + "external-editor@npm:^3.1.0": version: 3.1.0 resolution: "external-editor@npm:3.1.0" @@ -6704,6 +6777,16 @@ __metadata: languageName: node linkType: hard +"find-up@npm:^6.3.0": + version: 6.3.0 + resolution: "find-up@npm:6.3.0" + dependencies: + locate-path: ^7.1.0 + path-exists: ^5.0.0 + checksum: 9a21b7f9244a420e54c6df95b4f6fc3941efd3c3e5476f8274eb452f6a85706e7a6a90de71353ee4f091fcb4593271a6f92810a324ec542650398f928783c280 + languageName: node + linkType: hard + "flat-cache@npm:^3.0.4": version: 3.2.0 resolution: "flat-cache@npm:3.2.0" @@ -6899,6 +6982,18 @@ __metadata: languageName: node linkType: hard +"gaxios@npm:^5.0.0": + version: 5.1.3 + resolution: "gaxios@npm:5.1.3" + dependencies: + extend: ^3.0.2 + https-proxy-agent: ^5.0.0 + is-stream: ^2.0.0 + node-fetch: ^2.6.9 + checksum: 1cf72697715c64f6db1d6fa6e9243bb57ee14b0c758338a33790ecac2675d819a1fc0c51b2fab312d9bfe8201cc981c171b70ff60adcaaec881c5bc5610c42f1 + languageName: node + linkType: hard + "gensync@npm:^1.0.0-beta.2": version: 1.0.0-beta.2 resolution: "gensync@npm:1.0.0-beta.2" @@ -7084,6 +7179,18 @@ __metadata: languageName: node linkType: hard +"glob@npm:^9.3.2": + version: 9.3.5 + resolution: "glob@npm:9.3.5" + dependencies: + fs.realpath: ^1.0.0 + minimatch: ^8.0.2 + minipass: ^4.2.4 + path-scurry: ^1.6.1 + checksum: 94b093adbc591bc36b582f77927d1fb0dbf3ccc231828512b017601408be98d1fe798fc8c0b19c6f2d1a7660339c3502ce698de475e9d938ccbb69b47b647c84 + languageName: node + linkType: hard + "global-directory@npm:^4.0.1": version: 4.0.1 resolution: "global-directory@npm:4.0.1" @@ -7218,6 +7325,13 @@ __metadata: languageName: node linkType: hard +"hard-rejection@npm:^2.1.0": + version: 2.1.0 + resolution: "hard-rejection@npm:2.1.0" + checksum: 7baaf80a0c7fff4ca79687b4060113f1529589852152fa935e6787a2bc96211e784ad4588fb3048136ff8ffc9dfcf3ae385314a5b24db32de20bea0d1597f9dc + languageName: node + linkType: hard + "has-bigints@npm:^1.0.1, has-bigints@npm:^1.0.2": version: 1.0.2 resolution: "has-bigints@npm:1.0.2" @@ -7280,6 +7394,24 @@ __metadata: languageName: node linkType: hard +"hosted-git-info@npm:^4.0.1": + version: 4.1.0 + resolution: "hosted-git-info@npm:4.1.0" + dependencies: + lru-cache: ^6.0.0 + checksum: c3f87b3c2f7eb8c2748c8f49c0c2517c9a95f35d26f4bf54b2a8cba05d2e668f3753548b6ea366b18ec8dadb4e12066e19fa382a01496b0ffa0497eb23cbe461 + languageName: node + linkType: hard + +"hosted-git-info@npm:^5.0.0": + version: 5.2.1 + resolution: "hosted-git-info@npm:5.2.1" + dependencies: + lru-cache: ^7.5.1 + checksum: fa35df185224adfd69141f3b2f8cc31f50e705a5ebb415ccfbfd055c5b94bd08d3e658edf1edad9e2ac7d81831ac7cf261f5d219b3adc8d744fb8cdacaaf2ead + languageName: node + linkType: hard + "html-escaper@npm:^2.0.0": version: 2.0.2 resolution: "html-escaper@npm:2.0.2" @@ -7308,6 +7440,18 @@ __metadata: languageName: node linkType: hard +"htmlparser2@npm:^9.0.0": + version: 9.1.0 + resolution: "htmlparser2@npm:9.1.0" + dependencies: + domelementtype: ^2.3.0 + domhandler: ^5.0.3 + domutils: ^3.1.0 + entities: ^4.5.0 + checksum: e5f8d5193967e4a500226f37bdf2c0f858cecb39dde14d0439f24bf2c461a4342778740d988fbaba652b0e4cb6052f7f2e99e69fc1a329a86c629032bb76e7c8 + languageName: node + linkType: hard + "http-cache-semantics@npm:^4.1.1": version: 4.1.1 resolution: "http-cache-semantics@npm:4.1.1" @@ -7335,6 +7479,16 @@ __metadata: languageName: node linkType: hard +"https-proxy-agent@npm:^5.0.0": + version: 5.0.1 + resolution: "https-proxy-agent@npm:5.0.1" + dependencies: + agent-base: 6 + debug: 4 + checksum: 571fccdf38184f05943e12d37d6ce38197becdd69e58d03f43637f7fa1269cf303a7d228aa27e5b27bbd3af8f09fd938e1c91dcfefff2df7ba77c20ed8dfc765 + languageName: node + linkType: hard + "https-proxy-agent@npm:^7.0.1": version: 7.0.4 resolution: "https-proxy-agent@npm:7.0.4" @@ -7453,6 +7607,13 @@ __metadata: languageName: node linkType: hard +"indent-string@npm:^5.0.0": + version: 5.0.0 + resolution: "indent-string@npm:5.0.0" + checksum: e466c27b6373440e6d84fbc19e750219ce25865cb82d578e41a6053d727e5520dc5725217d6eb1cc76005a1bb1696a0f106d84ce7ebda3033b963a38583fb3b3 + languageName: node + linkType: hard + "inflight@npm:^1.0.4": version: 1.0.6 resolution: "inflight@npm:1.0.6" @@ -7623,6 +7784,15 @@ __metadata: languageName: node linkType: hard +"is-core-module@npm:^2.5.0, is-core-module@npm:^2.8.1": + version: 2.15.1 + resolution: "is-core-module@npm:2.15.1" + dependencies: + hasown: ^2.0.2 + checksum: df134c168115690724b62018c37b2f5bba0d5745fa16960b329c5a00883a8bea6a5632fdb1e3efcce237c201826ba09f93197b7cd95577ea56b0df335be23633 + languageName: node + linkType: hard + "is-data-view@npm:^1.0.1": version: 1.0.1 resolution: "is-data-view@npm:1.0.1" @@ -7789,6 +7959,13 @@ __metadata: languageName: node linkType: hard +"is-plain-obj@npm:^1.1.0": + version: 1.1.0 + resolution: "is-plain-obj@npm:1.1.0" + checksum: 0ee04807797aad50859652a7467481816cbb57e5cc97d813a7dcd8915da8195dc68c436010bf39d195226cde6a2d352f4b815f16f26b7bf486a5754290629931 + languageName: node + linkType: hard + "is-reference@npm:^1.1.2": version: 1.2.1 resolution: "is-reference@npm:1.2.1" @@ -8644,6 +8821,13 @@ __metadata: languageName: node linkType: hard +"kind-of@npm:^6.0.3": + version: 6.0.3 + resolution: "kind-of@npm:6.0.3" + checksum: 3ab01e7b1d440b22fe4c31f23d8d38b4d9b91d9f291df683476576493d5dfd2e03848a8b05813dd0c3f0e835bc63f433007ddeceb71f05cb25c45ae1b19c6d3b + languageName: node + linkType: hard + "kleur@npm:^3.0.3": version: 3.0.3 resolution: "kleur@npm:3.0.3" @@ -9252,6 +9436,7 @@ __metadata: cheminfo-types: ^1.4.0 d3: ^7.9.0 esm-hook: ^0.1.4 + linkinator: ^4.0.5 markdown-link-check: ^3.10.3 readline: ^1.3.0 release-it: ^17.6.0 @@ -9384,6 +9569,26 @@ __metadata: languageName: node linkType: hard +"linkinator@npm:^4.0.5": + version: 4.1.3 + resolution: "linkinator@npm:4.1.3" + dependencies: + chalk: ^5.0.0 + escape-html: ^1.0.3 + gaxios: ^5.0.0 + glob: ^9.3.2 + htmlparser2: ^9.0.0 + marked: ^4.0.3 + meow: ^11.0.0 + mime: ^3.0.0 + server-destroy: ^1.0.1 + srcset: ^5.0.0 + bin: + linkinator: build/src/cli.js + checksum: 4450e12a1d304aa11cf43c2b64ccd8e761b6b794e0e0d8f9f438d42f0dcec66b8a5935dbe12ac07715a46934de1a7d9aff34c36bc21ab9afd865ed4a64e7ff47 + languageName: node + linkType: hard + "locate-path@npm:^5.0.0": version: 5.0.0 resolution: "locate-path@npm:5.0.0" @@ -9402,6 +9607,15 @@ __metadata: languageName: node linkType: hard +"locate-path@npm:^7.1.0": + version: 7.2.0 + resolution: "locate-path@npm:7.2.0" + dependencies: + p-locate: ^6.0.0 + checksum: c1b653bdf29beaecb3d307dfb7c44d98a2a98a02ebe353c9ad055d1ac45d6ed4e1142563d222df9b9efebc2bcb7d4c792b507fad9e7150a04c29530b7db570f8 + languageName: node + linkType: hard + "lodash.capitalize@npm:^4.2.1": version: 4.2.1 resolution: "lodash.capitalize@npm:4.2.1" @@ -9508,7 +9722,16 @@ __metadata: languageName: node linkType: hard -"lru-cache@npm:^7.14.1": +"lru-cache@npm:^6.0.0": + version: 6.0.0 + resolution: "lru-cache@npm:6.0.0" + dependencies: + yallist: ^4.0.0 + checksum: f97f499f898f23e4585742138a22f22526254fdba6d75d41a1c2526b3b6cc5747ef59c5612ba7375f42aca4f8461950e925ba08c991ead0651b4918b7c978297 + languageName: node + linkType: hard + +"lru-cache@npm:^7.14.1, lru-cache@npm:^7.5.1": version: 7.18.3 resolution: "lru-cache@npm:7.18.3" checksum: e550d772384709deea3f141af34b6d4fa392e2e418c1498c078de0ee63670f1f46f5eee746e8ef7e69e1c895af0d4224e62ee33e66a543a14763b0f2e74c1356 @@ -9582,6 +9805,20 @@ __metadata: languageName: node linkType: hard +"map-obj@npm:^1.0.0": + version: 1.0.1 + resolution: "map-obj@npm:1.0.1" + checksum: 9949e7baec2a336e63b8d4dc71018c117c3ce6e39d2451ccbfd3b8350c547c4f6af331a4cbe1c83193d7c6b786082b6256bde843db90cb7da2a21e8fcc28afed + languageName: node + linkType: hard + +"map-obj@npm:^4.3.0": + version: 4.3.0 + resolution: "map-obj@npm:4.3.0" + checksum: fbc554934d1a27a1910e842bc87b177b1a556609dd803747c85ece420692380827c6ae94a95cce4407c054fa0964be3bf8226f7f2cb2e9eeee432c7c1985684e + languageName: node + linkType: hard + "markdown-link-check@npm:^3.10.3": version: 3.12.2 resolution: "markdown-link-check@npm:3.12.2" @@ -9620,7 +9857,7 @@ __metadata: languageName: node linkType: hard -"marked@npm:^4.3.0": +"marked@npm:^4.0.3, marked@npm:^4.3.0": version: 4.3.0 resolution: "marked@npm:4.3.0" bin: @@ -9636,6 +9873,26 @@ __metadata: languageName: node linkType: hard +"meow@npm:^11.0.0": + version: 11.0.0 + resolution: "meow@npm:11.0.0" + dependencies: + "@types/minimist": ^1.2.2 + camelcase-keys: ^8.0.2 + decamelize: ^6.0.0 + decamelize-keys: ^1.1.0 + hard-rejection: ^2.1.0 + minimist-options: 4.1.0 + normalize-package-data: ^4.0.1 + read-pkg-up: ^9.1.0 + redent: ^4.0.0 + trim-newlines: ^4.0.2 + type-fest: ^3.1.0 + yargs-parser: ^21.1.1 + checksum: 2e815b8d2acc6cda0ea10e0a6dcd6fbdcc2fb8b24412c3c70acd77220642ca0dc727c6fccd79d64b7ca811d099e8a9ad62ea261a8f39d4b61fcdcaf551c5c788 + languageName: node + linkType: hard + "merge-stream@npm:^2.0.0": version: 2.0.0 resolution: "merge-stream@npm:2.0.0" @@ -9676,6 +9933,15 @@ __metadata: languageName: node linkType: hard +"mime@npm:^3.0.0": + version: 3.0.0 + resolution: "mime@npm:3.0.0" + bin: + mime: cli.js + checksum: f43f9b7bfa64534e6b05bd6062961681aeb406a5b53673b53b683f27fcc4e739989941836a355eef831f4478923651ecc739f4a5f6e20a76487b432bfd4db928 + languageName: node + linkType: hard + "mimic-fn@npm:^2.1.0": version: 2.1.0 resolution: "mimic-fn@npm:2.1.0" @@ -9704,6 +9970,13 @@ __metadata: languageName: node linkType: hard +"min-indent@npm:^1.0.1": + version: 1.0.1 + resolution: "min-indent@npm:1.0.1" + checksum: bfc6dd03c5eaf623a4963ebd94d087f6f4bbbfd8c41329a7f09706b0cb66969c4ddd336abeb587bc44bc6f08e13bf90f0b374f9d71f9f01e04adc2cd6f083ef1 + languageName: node + linkType: hard + "minimatch@npm:9.0.3": version: 9.0.3 resolution: "minimatch@npm:9.0.3" @@ -9722,6 +9995,15 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:^8.0.2": + version: 8.0.4 + resolution: "minimatch@npm:8.0.4" + dependencies: + brace-expansion: ^2.0.1 + checksum: 2e46cffb86bacbc524ad45a6426f338920c529dd13f3a732cc2cf7618988ee1aae88df4ca28983285aca9e0f45222019ac2d14ebd17c1edadd2ee12221ab801a + languageName: node + linkType: hard + "minimatch@npm:^9.0.1, minimatch@npm:^9.0.3": version: 9.0.4 resolution: "minimatch@npm:9.0.4" @@ -9740,6 +10022,17 @@ __metadata: languageName: node linkType: hard +"minimist-options@npm:4.1.0": + version: 4.1.0 + resolution: "minimist-options@npm:4.1.0" + dependencies: + arrify: ^1.0.1 + is-plain-obj: ^1.1.0 + kind-of: ^6.0.3 + checksum: 8c040b3068811e79de1140ca2b708d3e203c8003eb9a414c1ab3cd467fc5f17c9ca02a5aef23bedc51a7f8bfbe77f87e9a7e31ec81fba304cda675b019496f4e + languageName: node + linkType: hard + "minimist@npm:^1.2.0, minimist@npm:^1.2.3, minimist@npm:^1.2.6": version: 1.2.8 resolution: "minimist@npm:1.2.8" @@ -9807,6 +10100,13 @@ __metadata: languageName: node linkType: hard +"minipass@npm:^4.2.4": + version: 4.2.8 + resolution: "minipass@npm:4.2.8" + checksum: 7f4914d5295a9a30807cae5227a37a926e6d910c03f315930fde52332cf0575dfbc20295318f91f0baf0e6bb11a6f668e30cde8027dea7a11b9d159867a3c830 + languageName: node + linkType: hard + "minipass@npm:^5.0.0": version: 5.0.0 resolution: "minipass@npm:5.0.0" @@ -10077,7 +10377,7 @@ __metadata: languageName: node linkType: hard -"node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.7": +"node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.7, node-fetch@npm:^2.6.9": version: 2.7.0 resolution: "node-fetch@npm:2.7.0" dependencies: @@ -10136,6 +10436,30 @@ __metadata: languageName: node linkType: hard +"normalize-package-data@npm:^3.0.2": + version: 3.0.3 + resolution: "normalize-package-data@npm:3.0.3" + dependencies: + hosted-git-info: ^4.0.1 + is-core-module: ^2.5.0 + semver: ^7.3.4 + validate-npm-package-license: ^3.0.1 + checksum: bbcee00339e7c26fdbc760f9b66d429258e2ceca41a5df41f5df06cc7652de8d82e8679ff188ca095cad8eff2b6118d7d866af2b68400f74602fbcbce39c160a + languageName: node + linkType: hard + +"normalize-package-data@npm:^4.0.1": + version: 4.0.1 + resolution: "normalize-package-data@npm:4.0.1" + dependencies: + hosted-git-info: ^5.0.0 + is-core-module: ^2.8.1 + semver: ^7.3.5 + validate-npm-package-license: ^3.0.4 + checksum: 292e0aa740e73d62f84bbd9d55d4bfc078155f32d5d7572c32c9807f96d543af0f43ff7e5c80bfa6238667123fd68bd83cd412eae9b27b85b271fb041f624528 + languageName: node + linkType: hard + "normalize-path@npm:^3.0.0": version: 3.0.0 resolution: "normalize-path@npm:3.0.0" @@ -10486,6 +10810,15 @@ __metadata: languageName: node linkType: hard +"p-limit@npm:^4.0.0": + version: 4.0.0 + resolution: "p-limit@npm:4.0.0" + dependencies: + yocto-queue: ^1.0.0 + checksum: 01d9d70695187788f984226e16c903475ec6a947ee7b21948d6f597bed788e3112cc7ec2e171c1d37125057a5f45f3da21d8653e04a3a793589e12e9e80e756b + languageName: node + linkType: hard + "p-locate@npm:^4.1.0": version: 4.1.0 resolution: "p-locate@npm:4.1.0" @@ -10504,6 +10837,15 @@ __metadata: languageName: node linkType: hard +"p-locate@npm:^6.0.0": + version: 6.0.0 + resolution: "p-locate@npm:6.0.0" + dependencies: + p-limit: ^4.0.0 + checksum: 2bfe5234efa5e7a4e74b30a5479a193fdd9236f8f6b4d2f3f69e3d286d9a7d7ab0c118a2a50142efcf4e41625def635bd9332d6cbf9cc65d85eb0718c579ab38 + languageName: node + linkType: hard + "p-map@npm:^4.0.0": version: 4.0.0 resolution: "p-map@npm:4.0.0" @@ -10666,6 +11008,13 @@ __metadata: languageName: node linkType: hard +"path-exists@npm:^5.0.0": + version: 5.0.0 + resolution: "path-exists@npm:5.0.0" + checksum: 8ca842868cab09423994596eb2c5ec2a971c17d1a3cb36dbf060592c730c725cd524b9067d7d2a1e031fef9ba7bd2ac6dc5ec9fb92aa693265f7be3987045254 + languageName: node + linkType: hard + "path-is-absolute@npm:^1.0.0": version: 1.0.1 resolution: "path-is-absolute@npm:1.0.1" @@ -10704,7 +11053,7 @@ __metadata: languageName: node linkType: hard -"path-scurry@npm:^1.11.1": +"path-scurry@npm:^1.11.1, path-scurry@npm:^1.6.1": version: 1.11.1 resolution: "path-scurry@npm:1.11.1" dependencies: @@ -11090,6 +11439,13 @@ __metadata: languageName: node linkType: hard +"quick-lru@npm:^6.1.1": + version: 6.1.2 + resolution: "quick-lru@npm:6.1.2" + checksum: 0491a24dcd39b8a325e9d3ae719fad7690a1da7a0dbfa8f16613663dc7d262d08b565005ce16a04497ed4700f1f477b8e06cd46e10a7a112a481a18d056c38f7 + languageName: node + linkType: hard + "rc@npm:1.2.8, rc@npm:^1.2.7": version: 1.2.8 resolution: "rc@npm:1.2.8" @@ -11111,6 +11467,29 @@ __metadata: languageName: node linkType: hard +"read-pkg-up@npm:^9.1.0": + version: 9.1.0 + resolution: "read-pkg-up@npm:9.1.0" + dependencies: + find-up: ^6.3.0 + read-pkg: ^7.1.0 + type-fest: ^2.5.0 + checksum: 41b8ba4bdb7c1e914aa6ce2d36a7c1651e9086938977fa12f058f6fca51ee15315634af648ca4ef70dd074e575e854616b39032ad0b376e9e97d61a9d0867afe + languageName: node + linkType: hard + +"read-pkg@npm:^7.1.0": + version: 7.1.0 + resolution: "read-pkg@npm:7.1.0" + dependencies: + "@types/normalize-package-data": ^2.4.1 + normalize-package-data: ^3.0.2 + parse-json: ^5.2.0 + type-fest: ^2.0.0 + checksum: 20d11c59be3ae1fc79d4b9c8594dabeaec58105f9dfd710570ef9690ec2ac929247006e79ca114257683228663199735d60f149948dbc5f34fcd2d28883ab5f7 + languageName: node + linkType: hard + "readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0": version: 3.6.2 resolution: "readable-stream@npm:3.6.2" @@ -11138,6 +11517,16 @@ __metadata: languageName: node linkType: hard +"redent@npm:^4.0.0": + version: 4.0.0 + resolution: "redent@npm:4.0.0" + dependencies: + indent-string: ^5.0.0 + strip-indent: ^4.0.0 + checksum: 6944e7b1d8f3fd28c2515f5c605b9f7f0ea0f4edddf41890bbbdd4d9ee35abb7540c3b278f03ff827bd278bb6ff4a5bd8692ca406b748c5c1c3ce7355e9fbf8f + languageName: node + linkType: hard + "regexp.prototype.flags@npm:^1.5.2": version: 1.5.2 resolution: "regexp.prototype.flags@npm:1.5.2" @@ -11538,6 +11927,13 @@ __metadata: languageName: node linkType: hard +"server-destroy@npm:^1.0.1": + version: 1.0.1 + resolution: "server-destroy@npm:1.0.1" + checksum: cbc19d4f92d25a0a34430c6a09faccbea77d1a69563560eefe883feb67c14c3fb3a1c5af1affae0e82d537886ea0f91d317e39e46b5d6425de3acf57a3ab13e3 + languageName: node + linkType: hard + "set-function-length@npm:^1.2.1": version: 1.2.2 resolution: "set-function-length@npm:1.2.2" @@ -11780,6 +12176,40 @@ __metadata: languageName: node linkType: hard +"spdx-correct@npm:^3.0.0": + version: 3.2.0 + resolution: "spdx-correct@npm:3.2.0" + dependencies: + spdx-expression-parse: ^3.0.0 + spdx-license-ids: ^3.0.0 + checksum: e9ae98d22f69c88e7aff5b8778dc01c361ef635580e82d29e5c60a6533cc8f4d820803e67d7432581af0cc4fb49973125076ee3b90df191d153e223c004193b2 + languageName: node + linkType: hard + +"spdx-exceptions@npm:^2.1.0": + version: 2.5.0 + resolution: "spdx-exceptions@npm:2.5.0" + checksum: bb127d6e2532de65b912f7c99fc66097cdea7d64c10d3ec9b5e96524dbbd7d20e01cba818a6ddb2ae75e62bb0c63d5e277a7e555a85cbc8ab40044984fa4ae15 + languageName: node + linkType: hard + +"spdx-expression-parse@npm:^3.0.0": + version: 3.0.1 + resolution: "spdx-expression-parse@npm:3.0.1" + dependencies: + spdx-exceptions: ^2.1.0 + spdx-license-ids: ^3.0.0 + checksum: a1c6e104a2cbada7a593eaa9f430bd5e148ef5290d4c0409899855ce8b1c39652bcc88a725259491a82601159d6dc790bedefc9016c7472f7de8de7361f8ccde + languageName: node + linkType: hard + +"spdx-license-ids@npm:^3.0.0": + version: 3.0.20 + resolution: "spdx-license-ids@npm:3.0.20" + checksum: 0c57750bedbcff48f3d0e266fbbdaf0aab54217e182f669542ffe0b5a902dce69e8cdfa126a131e1ddd39a9bef4662e357b2b41315d7240b4a28c0a7e782bb40 + languageName: node + linkType: hard + "split2@npm:^4.1.0": version: 4.2.0 resolution: "split2@npm:4.2.0" @@ -11801,6 +12231,13 @@ __metadata: languageName: node linkType: hard +"srcset@npm:^5.0.0": + version: 5.0.1 + resolution: "srcset@npm:5.0.1" + checksum: 6f58b4b680382ecf2fb8aa82f3d067c1380d621e65ce085c9f27d80323629c1b74f291b52b1cc3997e345b7f77137558e48bb48244ef6f2b698d77ac1f4ef3ff + languageName: node + linkType: hard + "ssri@npm:^10.0.0": version: 10.0.5 resolution: "ssri@npm:10.0.5" @@ -11973,6 +12410,15 @@ __metadata: languageName: node linkType: hard +"strip-indent@npm:^4.0.0": + version: 4.0.0 + resolution: "strip-indent@npm:4.0.0" + dependencies: + min-indent: ^1.0.1 + checksum: 06cbcd93da721c46bc13caeb1c00af93a9b18146a1c95927672d2decab6a25ad83662772417cea9317a2507fb143253ecc23c4415b64f5828cef9b638a744598 + languageName: node + linkType: hard + "strip-json-comments@npm:^3.1.1": version: 3.1.1 resolution: "strip-json-comments@npm:3.1.1" @@ -12170,6 +12616,13 @@ __metadata: languageName: node linkType: hard +"trim-newlines@npm:^4.0.2": + version: 4.1.1 + resolution: "trim-newlines@npm:4.1.1" + checksum: 5b09f8e329e8f33c1111ef26906332ba7ba7248cde3e26fc054bb3d69f2858bf5feedca9559c572ff91f33e52977c28e0d41c387df6a02a633cbb8c2d8238627 + languageName: node + linkType: hard + "ts-api-utils@npm:^1.0.1, ts-api-utils@npm:^1.3.0": version: 1.3.0 resolution: "ts-api-utils@npm:1.3.0" @@ -12428,13 +12881,20 @@ __metadata: languageName: node linkType: hard -"type-fest@npm:^2.13.0, type-fest@npm:^2.5.1": +"type-fest@npm:^2.0.0, type-fest@npm:^2.13.0, type-fest@npm:^2.5.0, type-fest@npm:^2.5.1": version: 2.19.0 resolution: "type-fest@npm:2.19.0" checksum: a4ef07ece297c9fba78fc1bd6d85dff4472fe043ede98bd4710d2615d15776902b595abf62bd78339ed6278f021235fb28a96361f8be86ed754f778973a0d278 languageName: node linkType: hard +"type-fest@npm:^3.1.0": + version: 3.13.1 + resolution: "type-fest@npm:3.13.1" + checksum: c06b0901d54391dc46de3802375f5579868949d71f93b425ce564e19a428a0d411ae8d8cb0e300d330071d86152c3ea86e744c3f2860a42a79585b6ec2fdae8e + languageName: node + linkType: hard + "typed-array-buffer@npm:^1.0.2": version: 1.0.2 resolution: "typed-array-buffer@npm:1.0.2" @@ -12685,6 +13145,16 @@ __metadata: languageName: node linkType: hard +"validate-npm-package-license@npm:^3.0.1, validate-npm-package-license@npm:^3.0.4": + version: 3.0.4 + resolution: "validate-npm-package-license@npm:3.0.4" + dependencies: + spdx-correct: ^3.0.0 + spdx-expression-parse: ^3.0.0 + checksum: 35703ac889d419cf2aceef63daeadbe4e77227c39ab6287eeb6c1b36a746b364f50ba22e88591f5d017bc54685d8137bc2d328d0a896e4d3fd22093c0f32a9ad + languageName: node + linkType: hard + "vscode-oniguruma@npm:^1.7.0": version: 1.7.0 resolution: "vscode-oniguruma@npm:1.7.0" @@ -12980,6 +13450,13 @@ __metadata: languageName: node linkType: hard +"yocto-queue@npm:^1.0.0": + version: 1.1.1 + resolution: "yocto-queue@npm:1.1.1" + checksum: f2e05b767ed3141e6372a80af9caa4715d60969227f38b1a4370d60bffe153c9c5b33a862905609afc9b375ec57cd40999810d20e5e10229a204e8bde7ef255c + languageName: node + linkType: hard + "yoctocolors-cjs@npm:^2.1.1": version: 2.1.2 resolution: "yoctocolors-cjs@npm:2.1.2" From 4ec62abb4fec461bef63fb1c3aaafe57889d5d33 Mon Sep 17 00:00:00 2001 From: isaac hershenson Date: Thu, 29 Aug 2024 08:31:13 -0700 Subject: [PATCH 19/21] x --- .github/workflows/link_check.yml | 1 + scripts/check-links.cjs | 54 +++++++------------------------- 2 files changed, 13 insertions(+), 42 deletions(-) diff --git a/.github/workflows/link_check.yml b/.github/workflows/link_check.yml index 4a910fff..c42b5a6e 100644 --- a/.github/workflows/link_check.yml +++ b/.github/workflows/link_check.yml @@ -45,6 +45,7 @@ jobs: - name: Install dependencies run: | yarn install --frozen-lockfile + npm install linkinator - name: Get changed files id: changed-files diff --git a/scripts/check-links.cjs b/scripts/check-links.cjs index f4f8e06c..1a6f9d69 100644 --- a/scripts/check-links.cjs +++ b/scripts/check-links.cjs @@ -1,60 +1,30 @@ -const fs = require('fs'); -const path = require('path'); -const { LinkChecker } = require('linkinator'); +const { execSync } = require('child_process'); const ignorePatterns = [ 'https://(api|web)\\.smith\\.langchain\\.com/.*', 'https://x\\.com/.*' ]; -async function findIpynbFiles(dir) { - const files = await fs.promises.readdir(dir); - let results = []; - for (const file of files) { - const filePath = path.join(dir, file); - const stat = await fs.promises.stat(filePath); - if (stat.isDirectory()) { - results = results.concat(await findIpynbFiles(filePath)); - } else if (path.extname(file) === '.ipynb') { - results.push(filePath); - } - } - return results; -} +function checkLinks() { + const changedFiles = process.env.CHANGED_FILES ? process.env.CHANGED_FILES.split(' ') : []; + const ipynbFiles = changedFiles.filter(file => file.endsWith('.ipynb')); -async function checkLinks() { - const ipynbFiles = await findIpynbFiles('.'); - console.log('Found .ipynb files:', ipynbFiles); + console.log('Changed .ipynb files:', ipynbFiles); - const checker = new LinkChecker(); - - checker.on('link', (result) => { - console.log(`${result.status} ${result.url}`); - }); + if (ipynbFiles.length === 0) { + console.log('No .ipynb files were changed. Skipping link check.'); + return; + } for (const file of ipynbFiles) { console.log(`Checking links in ${file}`); try { - const result = await checker.check({ - path: file, - recurse: false, - linksToSkip: ignorePatterns, - }); - - if (result.passed) { - console.log(`All links in ${file} are valid.`); - } else { - console.error(`Broken links found in ${file}.`); - process.exitCode = 1; - } + execSync(`npx linkinator ${file} ${ignorePatterns.map(pattern => `--skip "${pattern}"`).join(' ')}`, { stdio: 'inherit' }); } catch (error) { console.error(`Error checking links in ${file}:`, error); - process.exitCode = 1; + process.exit(1); } } } -checkLinks().catch(error => { - console.error('An error occurred:', error); - process.exitCode = 1; -}); \ No newline at end of file +checkLinks(); \ No newline at end of file From 0175008c666ba03a4a9510253195fbc965bde801 Mon Sep 17 00:00:00 2001 From: isaac hershenson Date: Thu, 29 Aug 2024 08:31:30 -0700 Subject: [PATCH 20/21] x --- package.json | 1 - yarn.lock | 497 ++------------------------------------------------- 2 files changed, 10 insertions(+), 488 deletions(-) diff --git a/package.json b/package.json index 4f8e73a4..76591446 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,6 @@ "cheminfo-types": "^1.4.0", "d3": "^7.9.0", "esm-hook": "^0.1.4", - "linkinator": "^4.0.5", "markdown-link-check": "^3.10.3", "readline": "^1.3.0", "release-it": "^17.6.0", diff --git a/yarn.lock b/yarn.lock index 216276de..0790876e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3421,13 +3421,6 @@ __metadata: languageName: node linkType: hard -"@types/minimist@npm:^1.2.2": - version: 1.2.5 - resolution: "@types/minimist@npm:1.2.5" - checksum: 477047b606005058ab0263c4f58097136268007f320003c348794f74adedc3166ffc47c80ec3e94687787f2ab7f4e72c468223946e79892cf0fd9e25e9970a90 - languageName: node - linkType: hard - "@types/node-fetch@npm:^2.6.4": version: 2.6.11 resolution: "@types/node-fetch@npm:2.6.11" @@ -3474,13 +3467,6 @@ __metadata: languageName: node linkType: hard -"@types/normalize-package-data@npm:^2.4.1": - version: 2.4.4 - resolution: "@types/normalize-package-data@npm:2.4.4" - checksum: 65dff72b543997b7be8b0265eca7ace0e34b75c3e5fee31de11179d08fa7124a7a5587265d53d0409532ecb7f7fba662c2012807963e1f9b059653ec2c83ee05 - languageName: node - linkType: hard - "@types/resolve@npm:1.17.1": version: 1.17.1 resolution: "@types/resolve@npm:1.17.1" @@ -3796,15 +3782,6 @@ __metadata: languageName: node linkType: hard -"agent-base@npm:6": - version: 6.0.2 - resolution: "agent-base@npm:6.0.2" - dependencies: - debug: 4 - checksum: f52b6872cc96fd5f622071b71ef200e01c7c4c454ee68bc9accca90c98cfb39f2810e3e9aa330435835eedc8c23f4f8a15267f67c6e245d2b33757575bdac49d - languageName: node - linkType: hard - "agent-base@npm:^7.0.2, agent-base@npm:^7.1.0, agent-base@npm:^7.1.1": version: 7.1.1 resolution: "agent-base@npm:7.1.1" @@ -4027,13 +4004,6 @@ __metadata: languageName: node linkType: hard -"arrify@npm:^1.0.1": - version: 1.0.1 - resolution: "arrify@npm:1.0.1" - checksum: 745075dd4a4624ff0225c331dacb99be501a515d39bcb7c84d24660314a6ec28e68131b137e6f7e16318170842ce97538cd298fc4cd6b2cc798e0b957f2747e7 - languageName: node - linkType: hard - "ast-types@npm:^0.13.4": version: 0.13.4 resolution: "ast-types@npm:0.13.4" @@ -4470,18 +4440,6 @@ __metadata: languageName: node linkType: hard -"camelcase-keys@npm:^8.0.2": - version: 8.0.2 - resolution: "camelcase-keys@npm:8.0.2" - dependencies: - camelcase: ^7.0.0 - map-obj: ^4.3.0 - quick-lru: ^6.1.1 - type-fest: ^2.13.0 - checksum: 878fdaffa55737486101845232b2bc017fec95e06711d8a4133461cabf2432b55a59b20ff6afafce9b48a5629f25181bac3ecb10023032d3eb7cf3247c6e34f6 - languageName: node - linkType: hard - "camelcase@npm:6, camelcase@npm:^6.2.0": version: 6.3.0 resolution: "camelcase@npm:6.3.0" @@ -4496,7 +4454,7 @@ __metadata: languageName: node linkType: hard -"camelcase@npm:^7.0.0, camelcase@npm:^7.0.1": +"camelcase@npm:^7.0.1": version: 7.0.1 resolution: "camelcase@npm:7.0.1" checksum: 86ab8f3ebf08bcdbe605a211a242f00ed30d8bfb77dab4ebb744dd36efbc84432d1c4adb28975ba87a1b8be40a80fbd1e60e2f06565315918fa7350011a26d3d @@ -4510,7 +4468,7 @@ __metadata: languageName: node linkType: hard -"chalk@npm:5.3.0, chalk@npm:^5.0.0, chalk@npm:^5.2.0, chalk@npm:^5.3.0": +"chalk@npm:5.3.0, chalk@npm:^5.2.0, chalk@npm:^5.3.0": version: 5.3.0 resolution: "chalk@npm:5.3.0" checksum: 623922e077b7d1e9dedaea6f8b9e9352921f8ae3afe739132e0e00c275971bdd331268183b2628cf4ab1727c45ea1f28d7e24ac23ce1db1eb653c414ca8a5a80 @@ -5334,30 +5292,13 @@ __metadata: languageName: node linkType: hard -"decamelize-keys@npm:^1.1.0": - version: 1.1.1 - resolution: "decamelize-keys@npm:1.1.1" - dependencies: - decamelize: ^1.1.0 - map-obj: ^1.0.0 - checksum: fc645fe20b7bda2680bbf9481a3477257a7f9304b1691036092b97ab04c0ab53e3bf9fcc2d2ae382536568e402ec41fb11e1d4c3836a9abe2d813dd9ef4311e0 - languageName: node - linkType: hard - -"decamelize@npm:1.2.0, decamelize@npm:^1.1.0": +"decamelize@npm:1.2.0": version: 1.2.0 resolution: "decamelize@npm:1.2.0" checksum: ad8c51a7e7e0720c70ec2eeb1163b66da03e7616d7b98c9ef43cce2416395e84c1e9548dd94f5f6ffecfee9f8b94251fc57121a8b021f2ff2469b2bae247b8aa languageName: node linkType: hard -"decamelize@npm:^6.0.0": - version: 6.0.0 - resolution: "decamelize@npm:6.0.0" - checksum: 0066bc30798ec11e01adf0c19ad975caef86545d4bb6f70cfb90b7eb8e3cbf7974cf774ac2e6ea2586e4e07b1f654bfecc4e772c42128a79a89f8584fc546753 - languageName: node - linkType: hard - "decompress-response@npm:^6.0.0": version: 6.0.0 resolution: "decompress-response@npm:6.0.0" @@ -5571,7 +5512,7 @@ __metadata: languageName: node linkType: hard -"domutils@npm:^3.0.1, domutils@npm:^3.1.0": +"domutils@npm:^3.0.1": version: 3.1.0 resolution: "domutils@npm:3.1.0" dependencies: @@ -5682,7 +5623,7 @@ __metadata: languageName: node linkType: hard -"entities@npm:^4.2.0, entities@npm:^4.4.0, entities@npm:^4.5.0": +"entities@npm:^4.2.0, entities@npm:^4.4.0": version: 4.5.0 resolution: "entities@npm:4.5.0" checksum: 853f8ebd5b425d350bffa97dd6958143179a5938352ccae092c62d1267c4e392a039be1bae7d51b6e4ffad25f51f9617531fedf5237f15df302ccfb452cbf2d7 @@ -6213,13 +6154,6 @@ __metadata: languageName: node linkType: hard -"escape-html@npm:^1.0.3": - version: 1.0.3 - resolution: "escape-html@npm:1.0.3" - checksum: 6213ca9ae00d0ab8bccb6d8d4e0a98e76237b2410302cf7df70aaa6591d509a2a37ce8998008cbecae8fc8ffaadf3fb0229535e6a145f3ce0b211d060decbb24 - languageName: node - linkType: hard - "escape-string-regexp@npm:^1.0.5": version: 1.0.5 resolution: "escape-string-regexp@npm:1.0.5" @@ -6627,13 +6561,6 @@ __metadata: languageName: node linkType: hard -"extend@npm:^3.0.2": - version: 3.0.2 - resolution: "extend@npm:3.0.2" - checksum: a50a8309ca65ea5d426382ff09f33586527882cf532931cb08ca786ea3146c0553310bda688710ff61d7668eba9f96b923fe1420cdf56a2c3eaf30fcab87b515 - languageName: node - linkType: hard - "external-editor@npm:^3.1.0": version: 3.1.0 resolution: "external-editor@npm:3.1.0" @@ -6777,16 +6704,6 @@ __metadata: languageName: node linkType: hard -"find-up@npm:^6.3.0": - version: 6.3.0 - resolution: "find-up@npm:6.3.0" - dependencies: - locate-path: ^7.1.0 - path-exists: ^5.0.0 - checksum: 9a21b7f9244a420e54c6df95b4f6fc3941efd3c3e5476f8274eb452f6a85706e7a6a90de71353ee4f091fcb4593271a6f92810a324ec542650398f928783c280 - languageName: node - linkType: hard - "flat-cache@npm:^3.0.4": version: 3.2.0 resolution: "flat-cache@npm:3.2.0" @@ -6982,18 +6899,6 @@ __metadata: languageName: node linkType: hard -"gaxios@npm:^5.0.0": - version: 5.1.3 - resolution: "gaxios@npm:5.1.3" - dependencies: - extend: ^3.0.2 - https-proxy-agent: ^5.0.0 - is-stream: ^2.0.0 - node-fetch: ^2.6.9 - checksum: 1cf72697715c64f6db1d6fa6e9243bb57ee14b0c758338a33790ecac2675d819a1fc0c51b2fab312d9bfe8201cc981c171b70ff60adcaaec881c5bc5610c42f1 - languageName: node - linkType: hard - "gensync@npm:^1.0.0-beta.2": version: 1.0.0-beta.2 resolution: "gensync@npm:1.0.0-beta.2" @@ -7179,18 +7084,6 @@ __metadata: languageName: node linkType: hard -"glob@npm:^9.3.2": - version: 9.3.5 - resolution: "glob@npm:9.3.5" - dependencies: - fs.realpath: ^1.0.0 - minimatch: ^8.0.2 - minipass: ^4.2.4 - path-scurry: ^1.6.1 - checksum: 94b093adbc591bc36b582f77927d1fb0dbf3ccc231828512b017601408be98d1fe798fc8c0b19c6f2d1a7660339c3502ce698de475e9d938ccbb69b47b647c84 - languageName: node - linkType: hard - "global-directory@npm:^4.0.1": version: 4.0.1 resolution: "global-directory@npm:4.0.1" @@ -7325,13 +7218,6 @@ __metadata: languageName: node linkType: hard -"hard-rejection@npm:^2.1.0": - version: 2.1.0 - resolution: "hard-rejection@npm:2.1.0" - checksum: 7baaf80a0c7fff4ca79687b4060113f1529589852152fa935e6787a2bc96211e784ad4588fb3048136ff8ffc9dfcf3ae385314a5b24db32de20bea0d1597f9dc - languageName: node - linkType: hard - "has-bigints@npm:^1.0.1, has-bigints@npm:^1.0.2": version: 1.0.2 resolution: "has-bigints@npm:1.0.2" @@ -7394,24 +7280,6 @@ __metadata: languageName: node linkType: hard -"hosted-git-info@npm:^4.0.1": - version: 4.1.0 - resolution: "hosted-git-info@npm:4.1.0" - dependencies: - lru-cache: ^6.0.0 - checksum: c3f87b3c2f7eb8c2748c8f49c0c2517c9a95f35d26f4bf54b2a8cba05d2e668f3753548b6ea366b18ec8dadb4e12066e19fa382a01496b0ffa0497eb23cbe461 - languageName: node - linkType: hard - -"hosted-git-info@npm:^5.0.0": - version: 5.2.1 - resolution: "hosted-git-info@npm:5.2.1" - dependencies: - lru-cache: ^7.5.1 - checksum: fa35df185224adfd69141f3b2f8cc31f50e705a5ebb415ccfbfd055c5b94bd08d3e658edf1edad9e2ac7d81831ac7cf261f5d219b3adc8d744fb8cdacaaf2ead - languageName: node - linkType: hard - "html-escaper@npm:^2.0.0": version: 2.0.2 resolution: "html-escaper@npm:2.0.2" @@ -7440,18 +7308,6 @@ __metadata: languageName: node linkType: hard -"htmlparser2@npm:^9.0.0": - version: 9.1.0 - resolution: "htmlparser2@npm:9.1.0" - dependencies: - domelementtype: ^2.3.0 - domhandler: ^5.0.3 - domutils: ^3.1.0 - entities: ^4.5.0 - checksum: e5f8d5193967e4a500226f37bdf2c0f858cecb39dde14d0439f24bf2c461a4342778740d988fbaba652b0e4cb6052f7f2e99e69fc1a329a86c629032bb76e7c8 - languageName: node - linkType: hard - "http-cache-semantics@npm:^4.1.1": version: 4.1.1 resolution: "http-cache-semantics@npm:4.1.1" @@ -7479,16 +7335,6 @@ __metadata: languageName: node linkType: hard -"https-proxy-agent@npm:^5.0.0": - version: 5.0.1 - resolution: "https-proxy-agent@npm:5.0.1" - dependencies: - agent-base: 6 - debug: 4 - checksum: 571fccdf38184f05943e12d37d6ce38197becdd69e58d03f43637f7fa1269cf303a7d228aa27e5b27bbd3af8f09fd938e1c91dcfefff2df7ba77c20ed8dfc765 - languageName: node - linkType: hard - "https-proxy-agent@npm:^7.0.1": version: 7.0.4 resolution: "https-proxy-agent@npm:7.0.4" @@ -7607,13 +7453,6 @@ __metadata: languageName: node linkType: hard -"indent-string@npm:^5.0.0": - version: 5.0.0 - resolution: "indent-string@npm:5.0.0" - checksum: e466c27b6373440e6d84fbc19e750219ce25865cb82d578e41a6053d727e5520dc5725217d6eb1cc76005a1bb1696a0f106d84ce7ebda3033b963a38583fb3b3 - languageName: node - linkType: hard - "inflight@npm:^1.0.4": version: 1.0.6 resolution: "inflight@npm:1.0.6" @@ -7784,15 +7623,6 @@ __metadata: languageName: node linkType: hard -"is-core-module@npm:^2.5.0, is-core-module@npm:^2.8.1": - version: 2.15.1 - resolution: "is-core-module@npm:2.15.1" - dependencies: - hasown: ^2.0.2 - checksum: df134c168115690724b62018c37b2f5bba0d5745fa16960b329c5a00883a8bea6a5632fdb1e3efcce237c201826ba09f93197b7cd95577ea56b0df335be23633 - languageName: node - linkType: hard - "is-data-view@npm:^1.0.1": version: 1.0.1 resolution: "is-data-view@npm:1.0.1" @@ -7959,13 +7789,6 @@ __metadata: languageName: node linkType: hard -"is-plain-obj@npm:^1.1.0": - version: 1.1.0 - resolution: "is-plain-obj@npm:1.1.0" - checksum: 0ee04807797aad50859652a7467481816cbb57e5cc97d813a7dcd8915da8195dc68c436010bf39d195226cde6a2d352f4b815f16f26b7bf486a5754290629931 - languageName: node - linkType: hard - "is-reference@npm:^1.1.2": version: 1.2.1 resolution: "is-reference@npm:1.2.1" @@ -8821,13 +8644,6 @@ __metadata: languageName: node linkType: hard -"kind-of@npm:^6.0.3": - version: 6.0.3 - resolution: "kind-of@npm:6.0.3" - checksum: 3ab01e7b1d440b22fe4c31f23d8d38b4d9b91d9f291df683476576493d5dfd2e03848a8b05813dd0c3f0e835bc63f433007ddeceb71f05cb25c45ae1b19c6d3b - languageName: node - linkType: hard - "kleur@npm:^3.0.3": version: 3.0.3 resolution: "kleur@npm:3.0.3" @@ -9436,7 +9252,6 @@ __metadata: cheminfo-types: ^1.4.0 d3: ^7.9.0 esm-hook: ^0.1.4 - linkinator: ^4.0.5 markdown-link-check: ^3.10.3 readline: ^1.3.0 release-it: ^17.6.0 @@ -9569,26 +9384,6 @@ __metadata: languageName: node linkType: hard -"linkinator@npm:^4.0.5": - version: 4.1.3 - resolution: "linkinator@npm:4.1.3" - dependencies: - chalk: ^5.0.0 - escape-html: ^1.0.3 - gaxios: ^5.0.0 - glob: ^9.3.2 - htmlparser2: ^9.0.0 - marked: ^4.0.3 - meow: ^11.0.0 - mime: ^3.0.0 - server-destroy: ^1.0.1 - srcset: ^5.0.0 - bin: - linkinator: build/src/cli.js - checksum: 4450e12a1d304aa11cf43c2b64ccd8e761b6b794e0e0d8f9f438d42f0dcec66b8a5935dbe12ac07715a46934de1a7d9aff34c36bc21ab9afd865ed4a64e7ff47 - languageName: node - linkType: hard - "locate-path@npm:^5.0.0": version: 5.0.0 resolution: "locate-path@npm:5.0.0" @@ -9607,15 +9402,6 @@ __metadata: languageName: node linkType: hard -"locate-path@npm:^7.1.0": - version: 7.2.0 - resolution: "locate-path@npm:7.2.0" - dependencies: - p-locate: ^6.0.0 - checksum: c1b653bdf29beaecb3d307dfb7c44d98a2a98a02ebe353c9ad055d1ac45d6ed4e1142563d222df9b9efebc2bcb7d4c792b507fad9e7150a04c29530b7db570f8 - languageName: node - linkType: hard - "lodash.capitalize@npm:^4.2.1": version: 4.2.1 resolution: "lodash.capitalize@npm:4.2.1" @@ -9722,16 +9508,7 @@ __metadata: languageName: node linkType: hard -"lru-cache@npm:^6.0.0": - version: 6.0.0 - resolution: "lru-cache@npm:6.0.0" - dependencies: - yallist: ^4.0.0 - checksum: f97f499f898f23e4585742138a22f22526254fdba6d75d41a1c2526b3b6cc5747ef59c5612ba7375f42aca4f8461950e925ba08c991ead0651b4918b7c978297 - languageName: node - linkType: hard - -"lru-cache@npm:^7.14.1, lru-cache@npm:^7.5.1": +"lru-cache@npm:^7.14.1": version: 7.18.3 resolution: "lru-cache@npm:7.18.3" checksum: e550d772384709deea3f141af34b6d4fa392e2e418c1498c078de0ee63670f1f46f5eee746e8ef7e69e1c895af0d4224e62ee33e66a543a14763b0f2e74c1356 @@ -9805,20 +9582,6 @@ __metadata: languageName: node linkType: hard -"map-obj@npm:^1.0.0": - version: 1.0.1 - resolution: "map-obj@npm:1.0.1" - checksum: 9949e7baec2a336e63b8d4dc71018c117c3ce6e39d2451ccbfd3b8350c547c4f6af331a4cbe1c83193d7c6b786082b6256bde843db90cb7da2a21e8fcc28afed - languageName: node - linkType: hard - -"map-obj@npm:^4.3.0": - version: 4.3.0 - resolution: "map-obj@npm:4.3.0" - checksum: fbc554934d1a27a1910e842bc87b177b1a556609dd803747c85ece420692380827c6ae94a95cce4407c054fa0964be3bf8226f7f2cb2e9eeee432c7c1985684e - languageName: node - linkType: hard - "markdown-link-check@npm:^3.10.3": version: 3.12.2 resolution: "markdown-link-check@npm:3.12.2" @@ -9857,7 +9620,7 @@ __metadata: languageName: node linkType: hard -"marked@npm:^4.0.3, marked@npm:^4.3.0": +"marked@npm:^4.3.0": version: 4.3.0 resolution: "marked@npm:4.3.0" bin: @@ -9873,26 +9636,6 @@ __metadata: languageName: node linkType: hard -"meow@npm:^11.0.0": - version: 11.0.0 - resolution: "meow@npm:11.0.0" - dependencies: - "@types/minimist": ^1.2.2 - camelcase-keys: ^8.0.2 - decamelize: ^6.0.0 - decamelize-keys: ^1.1.0 - hard-rejection: ^2.1.0 - minimist-options: 4.1.0 - normalize-package-data: ^4.0.1 - read-pkg-up: ^9.1.0 - redent: ^4.0.0 - trim-newlines: ^4.0.2 - type-fest: ^3.1.0 - yargs-parser: ^21.1.1 - checksum: 2e815b8d2acc6cda0ea10e0a6dcd6fbdcc2fb8b24412c3c70acd77220642ca0dc727c6fccd79d64b7ca811d099e8a9ad62ea261a8f39d4b61fcdcaf551c5c788 - languageName: node - linkType: hard - "merge-stream@npm:^2.0.0": version: 2.0.0 resolution: "merge-stream@npm:2.0.0" @@ -9933,15 +9676,6 @@ __metadata: languageName: node linkType: hard -"mime@npm:^3.0.0": - version: 3.0.0 - resolution: "mime@npm:3.0.0" - bin: - mime: cli.js - checksum: f43f9b7bfa64534e6b05bd6062961681aeb406a5b53673b53b683f27fcc4e739989941836a355eef831f4478923651ecc739f4a5f6e20a76487b432bfd4db928 - languageName: node - linkType: hard - "mimic-fn@npm:^2.1.0": version: 2.1.0 resolution: "mimic-fn@npm:2.1.0" @@ -9970,13 +9704,6 @@ __metadata: languageName: node linkType: hard -"min-indent@npm:^1.0.1": - version: 1.0.1 - resolution: "min-indent@npm:1.0.1" - checksum: bfc6dd03c5eaf623a4963ebd94d087f6f4bbbfd8c41329a7f09706b0cb66969c4ddd336abeb587bc44bc6f08e13bf90f0b374f9d71f9f01e04adc2cd6f083ef1 - languageName: node - linkType: hard - "minimatch@npm:9.0.3": version: 9.0.3 resolution: "minimatch@npm:9.0.3" @@ -9995,15 +9722,6 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^8.0.2": - version: 8.0.4 - resolution: "minimatch@npm:8.0.4" - dependencies: - brace-expansion: ^2.0.1 - checksum: 2e46cffb86bacbc524ad45a6426f338920c529dd13f3a732cc2cf7618988ee1aae88df4ca28983285aca9e0f45222019ac2d14ebd17c1edadd2ee12221ab801a - languageName: node - linkType: hard - "minimatch@npm:^9.0.1, minimatch@npm:^9.0.3": version: 9.0.4 resolution: "minimatch@npm:9.0.4" @@ -10022,17 +9740,6 @@ __metadata: languageName: node linkType: hard -"minimist-options@npm:4.1.0": - version: 4.1.0 - resolution: "minimist-options@npm:4.1.0" - dependencies: - arrify: ^1.0.1 - is-plain-obj: ^1.1.0 - kind-of: ^6.0.3 - checksum: 8c040b3068811e79de1140ca2b708d3e203c8003eb9a414c1ab3cd467fc5f17c9ca02a5aef23bedc51a7f8bfbe77f87e9a7e31ec81fba304cda675b019496f4e - languageName: node - linkType: hard - "minimist@npm:^1.2.0, minimist@npm:^1.2.3, minimist@npm:^1.2.6": version: 1.2.8 resolution: "minimist@npm:1.2.8" @@ -10100,13 +9807,6 @@ __metadata: languageName: node linkType: hard -"minipass@npm:^4.2.4": - version: 4.2.8 - resolution: "minipass@npm:4.2.8" - checksum: 7f4914d5295a9a30807cae5227a37a926e6d910c03f315930fde52332cf0575dfbc20295318f91f0baf0e6bb11a6f668e30cde8027dea7a11b9d159867a3c830 - languageName: node - linkType: hard - "minipass@npm:^5.0.0": version: 5.0.0 resolution: "minipass@npm:5.0.0" @@ -10377,7 +10077,7 @@ __metadata: languageName: node linkType: hard -"node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.7, node-fetch@npm:^2.6.9": +"node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.7": version: 2.7.0 resolution: "node-fetch@npm:2.7.0" dependencies: @@ -10436,30 +10136,6 @@ __metadata: languageName: node linkType: hard -"normalize-package-data@npm:^3.0.2": - version: 3.0.3 - resolution: "normalize-package-data@npm:3.0.3" - dependencies: - hosted-git-info: ^4.0.1 - is-core-module: ^2.5.0 - semver: ^7.3.4 - validate-npm-package-license: ^3.0.1 - checksum: bbcee00339e7c26fdbc760f9b66d429258e2ceca41a5df41f5df06cc7652de8d82e8679ff188ca095cad8eff2b6118d7d866af2b68400f74602fbcbce39c160a - languageName: node - linkType: hard - -"normalize-package-data@npm:^4.0.1": - version: 4.0.1 - resolution: "normalize-package-data@npm:4.0.1" - dependencies: - hosted-git-info: ^5.0.0 - is-core-module: ^2.8.1 - semver: ^7.3.5 - validate-npm-package-license: ^3.0.4 - checksum: 292e0aa740e73d62f84bbd9d55d4bfc078155f32d5d7572c32c9807f96d543af0f43ff7e5c80bfa6238667123fd68bd83cd412eae9b27b85b271fb041f624528 - languageName: node - linkType: hard - "normalize-path@npm:^3.0.0": version: 3.0.0 resolution: "normalize-path@npm:3.0.0" @@ -10810,15 +10486,6 @@ __metadata: languageName: node linkType: hard -"p-limit@npm:^4.0.0": - version: 4.0.0 - resolution: "p-limit@npm:4.0.0" - dependencies: - yocto-queue: ^1.0.0 - checksum: 01d9d70695187788f984226e16c903475ec6a947ee7b21948d6f597bed788e3112cc7ec2e171c1d37125057a5f45f3da21d8653e04a3a793589e12e9e80e756b - languageName: node - linkType: hard - "p-locate@npm:^4.1.0": version: 4.1.0 resolution: "p-locate@npm:4.1.0" @@ -10837,15 +10504,6 @@ __metadata: languageName: node linkType: hard -"p-locate@npm:^6.0.0": - version: 6.0.0 - resolution: "p-locate@npm:6.0.0" - dependencies: - p-limit: ^4.0.0 - checksum: 2bfe5234efa5e7a4e74b30a5479a193fdd9236f8f6b4d2f3f69e3d286d9a7d7ab0c118a2a50142efcf4e41625def635bd9332d6cbf9cc65d85eb0718c579ab38 - languageName: node - linkType: hard - "p-map@npm:^4.0.0": version: 4.0.0 resolution: "p-map@npm:4.0.0" @@ -11008,13 +10666,6 @@ __metadata: languageName: node linkType: hard -"path-exists@npm:^5.0.0": - version: 5.0.0 - resolution: "path-exists@npm:5.0.0" - checksum: 8ca842868cab09423994596eb2c5ec2a971c17d1a3cb36dbf060592c730c725cd524b9067d7d2a1e031fef9ba7bd2ac6dc5ec9fb92aa693265f7be3987045254 - languageName: node - linkType: hard - "path-is-absolute@npm:^1.0.0": version: 1.0.1 resolution: "path-is-absolute@npm:1.0.1" @@ -11053,7 +10704,7 @@ __metadata: languageName: node linkType: hard -"path-scurry@npm:^1.11.1, path-scurry@npm:^1.6.1": +"path-scurry@npm:^1.11.1": version: 1.11.1 resolution: "path-scurry@npm:1.11.1" dependencies: @@ -11439,13 +11090,6 @@ __metadata: languageName: node linkType: hard -"quick-lru@npm:^6.1.1": - version: 6.1.2 - resolution: "quick-lru@npm:6.1.2" - checksum: 0491a24dcd39b8a325e9d3ae719fad7690a1da7a0dbfa8f16613663dc7d262d08b565005ce16a04497ed4700f1f477b8e06cd46e10a7a112a481a18d056c38f7 - languageName: node - linkType: hard - "rc@npm:1.2.8, rc@npm:^1.2.7": version: 1.2.8 resolution: "rc@npm:1.2.8" @@ -11467,29 +11111,6 @@ __metadata: languageName: node linkType: hard -"read-pkg-up@npm:^9.1.0": - version: 9.1.0 - resolution: "read-pkg-up@npm:9.1.0" - dependencies: - find-up: ^6.3.0 - read-pkg: ^7.1.0 - type-fest: ^2.5.0 - checksum: 41b8ba4bdb7c1e914aa6ce2d36a7c1651e9086938977fa12f058f6fca51ee15315634af648ca4ef70dd074e575e854616b39032ad0b376e9e97d61a9d0867afe - languageName: node - linkType: hard - -"read-pkg@npm:^7.1.0": - version: 7.1.0 - resolution: "read-pkg@npm:7.1.0" - dependencies: - "@types/normalize-package-data": ^2.4.1 - normalize-package-data: ^3.0.2 - parse-json: ^5.2.0 - type-fest: ^2.0.0 - checksum: 20d11c59be3ae1fc79d4b9c8594dabeaec58105f9dfd710570ef9690ec2ac929247006e79ca114257683228663199735d60f149948dbc5f34fcd2d28883ab5f7 - languageName: node - linkType: hard - "readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0": version: 3.6.2 resolution: "readable-stream@npm:3.6.2" @@ -11517,16 +11138,6 @@ __metadata: languageName: node linkType: hard -"redent@npm:^4.0.0": - version: 4.0.0 - resolution: "redent@npm:4.0.0" - dependencies: - indent-string: ^5.0.0 - strip-indent: ^4.0.0 - checksum: 6944e7b1d8f3fd28c2515f5c605b9f7f0ea0f4edddf41890bbbdd4d9ee35abb7540c3b278f03ff827bd278bb6ff4a5bd8692ca406b748c5c1c3ce7355e9fbf8f - languageName: node - linkType: hard - "regexp.prototype.flags@npm:^1.5.2": version: 1.5.2 resolution: "regexp.prototype.flags@npm:1.5.2" @@ -11927,13 +11538,6 @@ __metadata: languageName: node linkType: hard -"server-destroy@npm:^1.0.1": - version: 1.0.1 - resolution: "server-destroy@npm:1.0.1" - checksum: cbc19d4f92d25a0a34430c6a09faccbea77d1a69563560eefe883feb67c14c3fb3a1c5af1affae0e82d537886ea0f91d317e39e46b5d6425de3acf57a3ab13e3 - languageName: node - linkType: hard - "set-function-length@npm:^1.2.1": version: 1.2.2 resolution: "set-function-length@npm:1.2.2" @@ -12176,40 +11780,6 @@ __metadata: languageName: node linkType: hard -"spdx-correct@npm:^3.0.0": - version: 3.2.0 - resolution: "spdx-correct@npm:3.2.0" - dependencies: - spdx-expression-parse: ^3.0.0 - spdx-license-ids: ^3.0.0 - checksum: e9ae98d22f69c88e7aff5b8778dc01c361ef635580e82d29e5c60a6533cc8f4d820803e67d7432581af0cc4fb49973125076ee3b90df191d153e223c004193b2 - languageName: node - linkType: hard - -"spdx-exceptions@npm:^2.1.0": - version: 2.5.0 - resolution: "spdx-exceptions@npm:2.5.0" - checksum: bb127d6e2532de65b912f7c99fc66097cdea7d64c10d3ec9b5e96524dbbd7d20e01cba818a6ddb2ae75e62bb0c63d5e277a7e555a85cbc8ab40044984fa4ae15 - languageName: node - linkType: hard - -"spdx-expression-parse@npm:^3.0.0": - version: 3.0.1 - resolution: "spdx-expression-parse@npm:3.0.1" - dependencies: - spdx-exceptions: ^2.1.0 - spdx-license-ids: ^3.0.0 - checksum: a1c6e104a2cbada7a593eaa9f430bd5e148ef5290d4c0409899855ce8b1c39652bcc88a725259491a82601159d6dc790bedefc9016c7472f7de8de7361f8ccde - languageName: node - linkType: hard - -"spdx-license-ids@npm:^3.0.0": - version: 3.0.20 - resolution: "spdx-license-ids@npm:3.0.20" - checksum: 0c57750bedbcff48f3d0e266fbbdaf0aab54217e182f669542ffe0b5a902dce69e8cdfa126a131e1ddd39a9bef4662e357b2b41315d7240b4a28c0a7e782bb40 - languageName: node - linkType: hard - "split2@npm:^4.1.0": version: 4.2.0 resolution: "split2@npm:4.2.0" @@ -12231,13 +11801,6 @@ __metadata: languageName: node linkType: hard -"srcset@npm:^5.0.0": - version: 5.0.1 - resolution: "srcset@npm:5.0.1" - checksum: 6f58b4b680382ecf2fb8aa82f3d067c1380d621e65ce085c9f27d80323629c1b74f291b52b1cc3997e345b7f77137558e48bb48244ef6f2b698d77ac1f4ef3ff - languageName: node - linkType: hard - "ssri@npm:^10.0.0": version: 10.0.5 resolution: "ssri@npm:10.0.5" @@ -12410,15 +11973,6 @@ __metadata: languageName: node linkType: hard -"strip-indent@npm:^4.0.0": - version: 4.0.0 - resolution: "strip-indent@npm:4.0.0" - dependencies: - min-indent: ^1.0.1 - checksum: 06cbcd93da721c46bc13caeb1c00af93a9b18146a1c95927672d2decab6a25ad83662772417cea9317a2507fb143253ecc23c4415b64f5828cef9b638a744598 - languageName: node - linkType: hard - "strip-json-comments@npm:^3.1.1": version: 3.1.1 resolution: "strip-json-comments@npm:3.1.1" @@ -12616,13 +12170,6 @@ __metadata: languageName: node linkType: hard -"trim-newlines@npm:^4.0.2": - version: 4.1.1 - resolution: "trim-newlines@npm:4.1.1" - checksum: 5b09f8e329e8f33c1111ef26906332ba7ba7248cde3e26fc054bb3d69f2858bf5feedca9559c572ff91f33e52977c28e0d41c387df6a02a633cbb8c2d8238627 - languageName: node - linkType: hard - "ts-api-utils@npm:^1.0.1, ts-api-utils@npm:^1.3.0": version: 1.3.0 resolution: "ts-api-utils@npm:1.3.0" @@ -12881,20 +12428,13 @@ __metadata: languageName: node linkType: hard -"type-fest@npm:^2.0.0, type-fest@npm:^2.13.0, type-fest@npm:^2.5.0, type-fest@npm:^2.5.1": +"type-fest@npm:^2.13.0, type-fest@npm:^2.5.1": version: 2.19.0 resolution: "type-fest@npm:2.19.0" checksum: a4ef07ece297c9fba78fc1bd6d85dff4472fe043ede98bd4710d2615d15776902b595abf62bd78339ed6278f021235fb28a96361f8be86ed754f778973a0d278 languageName: node linkType: hard -"type-fest@npm:^3.1.0": - version: 3.13.1 - resolution: "type-fest@npm:3.13.1" - checksum: c06b0901d54391dc46de3802375f5579868949d71f93b425ce564e19a428a0d411ae8d8cb0e300d330071d86152c3ea86e744c3f2860a42a79585b6ec2fdae8e - languageName: node - linkType: hard - "typed-array-buffer@npm:^1.0.2": version: 1.0.2 resolution: "typed-array-buffer@npm:1.0.2" @@ -13145,16 +12685,6 @@ __metadata: languageName: node linkType: hard -"validate-npm-package-license@npm:^3.0.1, validate-npm-package-license@npm:^3.0.4": - version: 3.0.4 - resolution: "validate-npm-package-license@npm:3.0.4" - dependencies: - spdx-correct: ^3.0.0 - spdx-expression-parse: ^3.0.0 - checksum: 35703ac889d419cf2aceef63daeadbe4e77227c39ab6287eeb6c1b36a746b364f50ba22e88591f5d017bc54685d8137bc2d328d0a896e4d3fd22093c0f32a9ad - languageName: node - linkType: hard - "vscode-oniguruma@npm:^1.7.0": version: 1.7.0 resolution: "vscode-oniguruma@npm:1.7.0" @@ -13450,13 +12980,6 @@ __metadata: languageName: node linkType: hard -"yocto-queue@npm:^1.0.0": - version: 1.1.1 - resolution: "yocto-queue@npm:1.1.1" - checksum: f2e05b767ed3141e6372a80af9caa4715d60969227f38b1a4370d60bffe153c9c5b33a862905609afc9b375ec57cd40999810d20e5e10229a204e8bde7ef255c - languageName: node - linkType: hard - "yoctocolors-cjs@npm:^2.1.1": version: 2.1.2 resolution: "yoctocolors-cjs@npm:2.1.2" From aada9b5b6f28bbfd42fd91d79a4da2f7c81a0003 Mon Sep 17 00:00:00 2001 From: isaac hershenson Date: Thu, 29 Aug 2024 08:37:28 -0700 Subject: [PATCH 21/21] x --- .github/workflows/link_check.yml | 1 - package.json | 4 + scripts/check-links.cjs | 2 +- yarn.lock | 497 ++++++++++++++++++++++++++++++- 4 files changed, 492 insertions(+), 12 deletions(-) diff --git a/.github/workflows/link_check.yml b/.github/workflows/link_check.yml index c42b5a6e..4a910fff 100644 --- a/.github/workflows/link_check.yml +++ b/.github/workflows/link_check.yml @@ -45,7 +45,6 @@ jobs: - name: Install dependencies run: | yarn install --frozen-lockfile - npm install linkinator - name: Get changed files id: changed-files diff --git a/package.json b/package.json index 76591446..551fd0da 100644 --- a/package.json +++ b/package.json @@ -42,6 +42,7 @@ "cheminfo-types": "^1.4.0", "d3": "^7.9.0", "esm-hook": "^0.1.4", + "linkinator": "^4.0.5", "markdown-link-check": "^3.10.3", "readline": "^1.3.0", "release-it": "^17.6.0", @@ -61,5 +62,8 @@ "publishConfig": { "access": "public", "registry": "https://registry.npmjs.org/" + }, + "dependencies": { + "linkinator": "^6.1.1" } } diff --git a/scripts/check-links.cjs b/scripts/check-links.cjs index 1a6f9d69..de4f158c 100644 --- a/scripts/check-links.cjs +++ b/scripts/check-links.cjs @@ -19,7 +19,7 @@ function checkLinks() { for (const file of ipynbFiles) { console.log(`Checking links in ${file}`); try { - execSync(`npx linkinator ${file} ${ignorePatterns.map(pattern => `--skip "${pattern}"`).join(' ')}`, { stdio: 'inherit' }); + execSync(`yarn linkinator ${file} ${ignorePatterns.map(pattern => `--skip "${pattern}"`).join(' ')}`, { stdio: 'inherit' }); } catch (error) { console.error(`Error checking links in ${file}:`, error); process.exit(1); diff --git a/yarn.lock b/yarn.lock index 0790876e..216276de 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3421,6 +3421,13 @@ __metadata: languageName: node linkType: hard +"@types/minimist@npm:^1.2.2": + version: 1.2.5 + resolution: "@types/minimist@npm:1.2.5" + checksum: 477047b606005058ab0263c4f58097136268007f320003c348794f74adedc3166ffc47c80ec3e94687787f2ab7f4e72c468223946e79892cf0fd9e25e9970a90 + languageName: node + linkType: hard + "@types/node-fetch@npm:^2.6.4": version: 2.6.11 resolution: "@types/node-fetch@npm:2.6.11" @@ -3467,6 +3474,13 @@ __metadata: languageName: node linkType: hard +"@types/normalize-package-data@npm:^2.4.1": + version: 2.4.4 + resolution: "@types/normalize-package-data@npm:2.4.4" + checksum: 65dff72b543997b7be8b0265eca7ace0e34b75c3e5fee31de11179d08fa7124a7a5587265d53d0409532ecb7f7fba662c2012807963e1f9b059653ec2c83ee05 + languageName: node + linkType: hard + "@types/resolve@npm:1.17.1": version: 1.17.1 resolution: "@types/resolve@npm:1.17.1" @@ -3782,6 +3796,15 @@ __metadata: languageName: node linkType: hard +"agent-base@npm:6": + version: 6.0.2 + resolution: "agent-base@npm:6.0.2" + dependencies: + debug: 4 + checksum: f52b6872cc96fd5f622071b71ef200e01c7c4c454ee68bc9accca90c98cfb39f2810e3e9aa330435835eedc8c23f4f8a15267f67c6e245d2b33757575bdac49d + languageName: node + linkType: hard + "agent-base@npm:^7.0.2, agent-base@npm:^7.1.0, agent-base@npm:^7.1.1": version: 7.1.1 resolution: "agent-base@npm:7.1.1" @@ -4004,6 +4027,13 @@ __metadata: languageName: node linkType: hard +"arrify@npm:^1.0.1": + version: 1.0.1 + resolution: "arrify@npm:1.0.1" + checksum: 745075dd4a4624ff0225c331dacb99be501a515d39bcb7c84d24660314a6ec28e68131b137e6f7e16318170842ce97538cd298fc4cd6b2cc798e0b957f2747e7 + languageName: node + linkType: hard + "ast-types@npm:^0.13.4": version: 0.13.4 resolution: "ast-types@npm:0.13.4" @@ -4440,6 +4470,18 @@ __metadata: languageName: node linkType: hard +"camelcase-keys@npm:^8.0.2": + version: 8.0.2 + resolution: "camelcase-keys@npm:8.0.2" + dependencies: + camelcase: ^7.0.0 + map-obj: ^4.3.0 + quick-lru: ^6.1.1 + type-fest: ^2.13.0 + checksum: 878fdaffa55737486101845232b2bc017fec95e06711d8a4133461cabf2432b55a59b20ff6afafce9b48a5629f25181bac3ecb10023032d3eb7cf3247c6e34f6 + languageName: node + linkType: hard + "camelcase@npm:6, camelcase@npm:^6.2.0": version: 6.3.0 resolution: "camelcase@npm:6.3.0" @@ -4454,7 +4496,7 @@ __metadata: languageName: node linkType: hard -"camelcase@npm:^7.0.1": +"camelcase@npm:^7.0.0, camelcase@npm:^7.0.1": version: 7.0.1 resolution: "camelcase@npm:7.0.1" checksum: 86ab8f3ebf08bcdbe605a211a242f00ed30d8bfb77dab4ebb744dd36efbc84432d1c4adb28975ba87a1b8be40a80fbd1e60e2f06565315918fa7350011a26d3d @@ -4468,7 +4510,7 @@ __metadata: languageName: node linkType: hard -"chalk@npm:5.3.0, chalk@npm:^5.2.0, chalk@npm:^5.3.0": +"chalk@npm:5.3.0, chalk@npm:^5.0.0, chalk@npm:^5.2.0, chalk@npm:^5.3.0": version: 5.3.0 resolution: "chalk@npm:5.3.0" checksum: 623922e077b7d1e9dedaea6f8b9e9352921f8ae3afe739132e0e00c275971bdd331268183b2628cf4ab1727c45ea1f28d7e24ac23ce1db1eb653c414ca8a5a80 @@ -5292,13 +5334,30 @@ __metadata: languageName: node linkType: hard -"decamelize@npm:1.2.0": +"decamelize-keys@npm:^1.1.0": + version: 1.1.1 + resolution: "decamelize-keys@npm:1.1.1" + dependencies: + decamelize: ^1.1.0 + map-obj: ^1.0.0 + checksum: fc645fe20b7bda2680bbf9481a3477257a7f9304b1691036092b97ab04c0ab53e3bf9fcc2d2ae382536568e402ec41fb11e1d4c3836a9abe2d813dd9ef4311e0 + languageName: node + linkType: hard + +"decamelize@npm:1.2.0, decamelize@npm:^1.1.0": version: 1.2.0 resolution: "decamelize@npm:1.2.0" checksum: ad8c51a7e7e0720c70ec2eeb1163b66da03e7616d7b98c9ef43cce2416395e84c1e9548dd94f5f6ffecfee9f8b94251fc57121a8b021f2ff2469b2bae247b8aa languageName: node linkType: hard +"decamelize@npm:^6.0.0": + version: 6.0.0 + resolution: "decamelize@npm:6.0.0" + checksum: 0066bc30798ec11e01adf0c19ad975caef86545d4bb6f70cfb90b7eb8e3cbf7974cf774ac2e6ea2586e4e07b1f654bfecc4e772c42128a79a89f8584fc546753 + languageName: node + linkType: hard + "decompress-response@npm:^6.0.0": version: 6.0.0 resolution: "decompress-response@npm:6.0.0" @@ -5512,7 +5571,7 @@ __metadata: languageName: node linkType: hard -"domutils@npm:^3.0.1": +"domutils@npm:^3.0.1, domutils@npm:^3.1.0": version: 3.1.0 resolution: "domutils@npm:3.1.0" dependencies: @@ -5623,7 +5682,7 @@ __metadata: languageName: node linkType: hard -"entities@npm:^4.2.0, entities@npm:^4.4.0": +"entities@npm:^4.2.0, entities@npm:^4.4.0, entities@npm:^4.5.0": version: 4.5.0 resolution: "entities@npm:4.5.0" checksum: 853f8ebd5b425d350bffa97dd6958143179a5938352ccae092c62d1267c4e392a039be1bae7d51b6e4ffad25f51f9617531fedf5237f15df302ccfb452cbf2d7 @@ -6154,6 +6213,13 @@ __metadata: languageName: node linkType: hard +"escape-html@npm:^1.0.3": + version: 1.0.3 + resolution: "escape-html@npm:1.0.3" + checksum: 6213ca9ae00d0ab8bccb6d8d4e0a98e76237b2410302cf7df70aaa6591d509a2a37ce8998008cbecae8fc8ffaadf3fb0229535e6a145f3ce0b211d060decbb24 + languageName: node + linkType: hard + "escape-string-regexp@npm:^1.0.5": version: 1.0.5 resolution: "escape-string-regexp@npm:1.0.5" @@ -6561,6 +6627,13 @@ __metadata: languageName: node linkType: hard +"extend@npm:^3.0.2": + version: 3.0.2 + resolution: "extend@npm:3.0.2" + checksum: a50a8309ca65ea5d426382ff09f33586527882cf532931cb08ca786ea3146c0553310bda688710ff61d7668eba9f96b923fe1420cdf56a2c3eaf30fcab87b515 + languageName: node + linkType: hard + "external-editor@npm:^3.1.0": version: 3.1.0 resolution: "external-editor@npm:3.1.0" @@ -6704,6 +6777,16 @@ __metadata: languageName: node linkType: hard +"find-up@npm:^6.3.0": + version: 6.3.0 + resolution: "find-up@npm:6.3.0" + dependencies: + locate-path: ^7.1.0 + path-exists: ^5.0.0 + checksum: 9a21b7f9244a420e54c6df95b4f6fc3941efd3c3e5476f8274eb452f6a85706e7a6a90de71353ee4f091fcb4593271a6f92810a324ec542650398f928783c280 + languageName: node + linkType: hard + "flat-cache@npm:^3.0.4": version: 3.2.0 resolution: "flat-cache@npm:3.2.0" @@ -6899,6 +6982,18 @@ __metadata: languageName: node linkType: hard +"gaxios@npm:^5.0.0": + version: 5.1.3 + resolution: "gaxios@npm:5.1.3" + dependencies: + extend: ^3.0.2 + https-proxy-agent: ^5.0.0 + is-stream: ^2.0.0 + node-fetch: ^2.6.9 + checksum: 1cf72697715c64f6db1d6fa6e9243bb57ee14b0c758338a33790ecac2675d819a1fc0c51b2fab312d9bfe8201cc981c171b70ff60adcaaec881c5bc5610c42f1 + languageName: node + linkType: hard + "gensync@npm:^1.0.0-beta.2": version: 1.0.0-beta.2 resolution: "gensync@npm:1.0.0-beta.2" @@ -7084,6 +7179,18 @@ __metadata: languageName: node linkType: hard +"glob@npm:^9.3.2": + version: 9.3.5 + resolution: "glob@npm:9.3.5" + dependencies: + fs.realpath: ^1.0.0 + minimatch: ^8.0.2 + minipass: ^4.2.4 + path-scurry: ^1.6.1 + checksum: 94b093adbc591bc36b582f77927d1fb0dbf3ccc231828512b017601408be98d1fe798fc8c0b19c6f2d1a7660339c3502ce698de475e9d938ccbb69b47b647c84 + languageName: node + linkType: hard + "global-directory@npm:^4.0.1": version: 4.0.1 resolution: "global-directory@npm:4.0.1" @@ -7218,6 +7325,13 @@ __metadata: languageName: node linkType: hard +"hard-rejection@npm:^2.1.0": + version: 2.1.0 + resolution: "hard-rejection@npm:2.1.0" + checksum: 7baaf80a0c7fff4ca79687b4060113f1529589852152fa935e6787a2bc96211e784ad4588fb3048136ff8ffc9dfcf3ae385314a5b24db32de20bea0d1597f9dc + languageName: node + linkType: hard + "has-bigints@npm:^1.0.1, has-bigints@npm:^1.0.2": version: 1.0.2 resolution: "has-bigints@npm:1.0.2" @@ -7280,6 +7394,24 @@ __metadata: languageName: node linkType: hard +"hosted-git-info@npm:^4.0.1": + version: 4.1.0 + resolution: "hosted-git-info@npm:4.1.0" + dependencies: + lru-cache: ^6.0.0 + checksum: c3f87b3c2f7eb8c2748c8f49c0c2517c9a95f35d26f4bf54b2a8cba05d2e668f3753548b6ea366b18ec8dadb4e12066e19fa382a01496b0ffa0497eb23cbe461 + languageName: node + linkType: hard + +"hosted-git-info@npm:^5.0.0": + version: 5.2.1 + resolution: "hosted-git-info@npm:5.2.1" + dependencies: + lru-cache: ^7.5.1 + checksum: fa35df185224adfd69141f3b2f8cc31f50e705a5ebb415ccfbfd055c5b94bd08d3e658edf1edad9e2ac7d81831ac7cf261f5d219b3adc8d744fb8cdacaaf2ead + languageName: node + linkType: hard + "html-escaper@npm:^2.0.0": version: 2.0.2 resolution: "html-escaper@npm:2.0.2" @@ -7308,6 +7440,18 @@ __metadata: languageName: node linkType: hard +"htmlparser2@npm:^9.0.0": + version: 9.1.0 + resolution: "htmlparser2@npm:9.1.0" + dependencies: + domelementtype: ^2.3.0 + domhandler: ^5.0.3 + domutils: ^3.1.0 + entities: ^4.5.0 + checksum: e5f8d5193967e4a500226f37bdf2c0f858cecb39dde14d0439f24bf2c461a4342778740d988fbaba652b0e4cb6052f7f2e99e69fc1a329a86c629032bb76e7c8 + languageName: node + linkType: hard + "http-cache-semantics@npm:^4.1.1": version: 4.1.1 resolution: "http-cache-semantics@npm:4.1.1" @@ -7335,6 +7479,16 @@ __metadata: languageName: node linkType: hard +"https-proxy-agent@npm:^5.0.0": + version: 5.0.1 + resolution: "https-proxy-agent@npm:5.0.1" + dependencies: + agent-base: 6 + debug: 4 + checksum: 571fccdf38184f05943e12d37d6ce38197becdd69e58d03f43637f7fa1269cf303a7d228aa27e5b27bbd3af8f09fd938e1c91dcfefff2df7ba77c20ed8dfc765 + languageName: node + linkType: hard + "https-proxy-agent@npm:^7.0.1": version: 7.0.4 resolution: "https-proxy-agent@npm:7.0.4" @@ -7453,6 +7607,13 @@ __metadata: languageName: node linkType: hard +"indent-string@npm:^5.0.0": + version: 5.0.0 + resolution: "indent-string@npm:5.0.0" + checksum: e466c27b6373440e6d84fbc19e750219ce25865cb82d578e41a6053d727e5520dc5725217d6eb1cc76005a1bb1696a0f106d84ce7ebda3033b963a38583fb3b3 + languageName: node + linkType: hard + "inflight@npm:^1.0.4": version: 1.0.6 resolution: "inflight@npm:1.0.6" @@ -7623,6 +7784,15 @@ __metadata: languageName: node linkType: hard +"is-core-module@npm:^2.5.0, is-core-module@npm:^2.8.1": + version: 2.15.1 + resolution: "is-core-module@npm:2.15.1" + dependencies: + hasown: ^2.0.2 + checksum: df134c168115690724b62018c37b2f5bba0d5745fa16960b329c5a00883a8bea6a5632fdb1e3efcce237c201826ba09f93197b7cd95577ea56b0df335be23633 + languageName: node + linkType: hard + "is-data-view@npm:^1.0.1": version: 1.0.1 resolution: "is-data-view@npm:1.0.1" @@ -7789,6 +7959,13 @@ __metadata: languageName: node linkType: hard +"is-plain-obj@npm:^1.1.0": + version: 1.1.0 + resolution: "is-plain-obj@npm:1.1.0" + checksum: 0ee04807797aad50859652a7467481816cbb57e5cc97d813a7dcd8915da8195dc68c436010bf39d195226cde6a2d352f4b815f16f26b7bf486a5754290629931 + languageName: node + linkType: hard + "is-reference@npm:^1.1.2": version: 1.2.1 resolution: "is-reference@npm:1.2.1" @@ -8644,6 +8821,13 @@ __metadata: languageName: node linkType: hard +"kind-of@npm:^6.0.3": + version: 6.0.3 + resolution: "kind-of@npm:6.0.3" + checksum: 3ab01e7b1d440b22fe4c31f23d8d38b4d9b91d9f291df683476576493d5dfd2e03848a8b05813dd0c3f0e835bc63f433007ddeceb71f05cb25c45ae1b19c6d3b + languageName: node + linkType: hard + "kleur@npm:^3.0.3": version: 3.0.3 resolution: "kleur@npm:3.0.3" @@ -9252,6 +9436,7 @@ __metadata: cheminfo-types: ^1.4.0 d3: ^7.9.0 esm-hook: ^0.1.4 + linkinator: ^4.0.5 markdown-link-check: ^3.10.3 readline: ^1.3.0 release-it: ^17.6.0 @@ -9384,6 +9569,26 @@ __metadata: languageName: node linkType: hard +"linkinator@npm:^4.0.5": + version: 4.1.3 + resolution: "linkinator@npm:4.1.3" + dependencies: + chalk: ^5.0.0 + escape-html: ^1.0.3 + gaxios: ^5.0.0 + glob: ^9.3.2 + htmlparser2: ^9.0.0 + marked: ^4.0.3 + meow: ^11.0.0 + mime: ^3.0.0 + server-destroy: ^1.0.1 + srcset: ^5.0.0 + bin: + linkinator: build/src/cli.js + checksum: 4450e12a1d304aa11cf43c2b64ccd8e761b6b794e0e0d8f9f438d42f0dcec66b8a5935dbe12ac07715a46934de1a7d9aff34c36bc21ab9afd865ed4a64e7ff47 + languageName: node + linkType: hard + "locate-path@npm:^5.0.0": version: 5.0.0 resolution: "locate-path@npm:5.0.0" @@ -9402,6 +9607,15 @@ __metadata: languageName: node linkType: hard +"locate-path@npm:^7.1.0": + version: 7.2.0 + resolution: "locate-path@npm:7.2.0" + dependencies: + p-locate: ^6.0.0 + checksum: c1b653bdf29beaecb3d307dfb7c44d98a2a98a02ebe353c9ad055d1ac45d6ed4e1142563d222df9b9efebc2bcb7d4c792b507fad9e7150a04c29530b7db570f8 + languageName: node + linkType: hard + "lodash.capitalize@npm:^4.2.1": version: 4.2.1 resolution: "lodash.capitalize@npm:4.2.1" @@ -9508,7 +9722,16 @@ __metadata: languageName: node linkType: hard -"lru-cache@npm:^7.14.1": +"lru-cache@npm:^6.0.0": + version: 6.0.0 + resolution: "lru-cache@npm:6.0.0" + dependencies: + yallist: ^4.0.0 + checksum: f97f499f898f23e4585742138a22f22526254fdba6d75d41a1c2526b3b6cc5747ef59c5612ba7375f42aca4f8461950e925ba08c991ead0651b4918b7c978297 + languageName: node + linkType: hard + +"lru-cache@npm:^7.14.1, lru-cache@npm:^7.5.1": version: 7.18.3 resolution: "lru-cache@npm:7.18.3" checksum: e550d772384709deea3f141af34b6d4fa392e2e418c1498c078de0ee63670f1f46f5eee746e8ef7e69e1c895af0d4224e62ee33e66a543a14763b0f2e74c1356 @@ -9582,6 +9805,20 @@ __metadata: languageName: node linkType: hard +"map-obj@npm:^1.0.0": + version: 1.0.1 + resolution: "map-obj@npm:1.0.1" + checksum: 9949e7baec2a336e63b8d4dc71018c117c3ce6e39d2451ccbfd3b8350c547c4f6af331a4cbe1c83193d7c6b786082b6256bde843db90cb7da2a21e8fcc28afed + languageName: node + linkType: hard + +"map-obj@npm:^4.3.0": + version: 4.3.0 + resolution: "map-obj@npm:4.3.0" + checksum: fbc554934d1a27a1910e842bc87b177b1a556609dd803747c85ece420692380827c6ae94a95cce4407c054fa0964be3bf8226f7f2cb2e9eeee432c7c1985684e + languageName: node + linkType: hard + "markdown-link-check@npm:^3.10.3": version: 3.12.2 resolution: "markdown-link-check@npm:3.12.2" @@ -9620,7 +9857,7 @@ __metadata: languageName: node linkType: hard -"marked@npm:^4.3.0": +"marked@npm:^4.0.3, marked@npm:^4.3.0": version: 4.3.0 resolution: "marked@npm:4.3.0" bin: @@ -9636,6 +9873,26 @@ __metadata: languageName: node linkType: hard +"meow@npm:^11.0.0": + version: 11.0.0 + resolution: "meow@npm:11.0.0" + dependencies: + "@types/minimist": ^1.2.2 + camelcase-keys: ^8.0.2 + decamelize: ^6.0.0 + decamelize-keys: ^1.1.0 + hard-rejection: ^2.1.0 + minimist-options: 4.1.0 + normalize-package-data: ^4.0.1 + read-pkg-up: ^9.1.0 + redent: ^4.0.0 + trim-newlines: ^4.0.2 + type-fest: ^3.1.0 + yargs-parser: ^21.1.1 + checksum: 2e815b8d2acc6cda0ea10e0a6dcd6fbdcc2fb8b24412c3c70acd77220642ca0dc727c6fccd79d64b7ca811d099e8a9ad62ea261a8f39d4b61fcdcaf551c5c788 + languageName: node + linkType: hard + "merge-stream@npm:^2.0.0": version: 2.0.0 resolution: "merge-stream@npm:2.0.0" @@ -9676,6 +9933,15 @@ __metadata: languageName: node linkType: hard +"mime@npm:^3.0.0": + version: 3.0.0 + resolution: "mime@npm:3.0.0" + bin: + mime: cli.js + checksum: f43f9b7bfa64534e6b05bd6062961681aeb406a5b53673b53b683f27fcc4e739989941836a355eef831f4478923651ecc739f4a5f6e20a76487b432bfd4db928 + languageName: node + linkType: hard + "mimic-fn@npm:^2.1.0": version: 2.1.0 resolution: "mimic-fn@npm:2.1.0" @@ -9704,6 +9970,13 @@ __metadata: languageName: node linkType: hard +"min-indent@npm:^1.0.1": + version: 1.0.1 + resolution: "min-indent@npm:1.0.1" + checksum: bfc6dd03c5eaf623a4963ebd94d087f6f4bbbfd8c41329a7f09706b0cb66969c4ddd336abeb587bc44bc6f08e13bf90f0b374f9d71f9f01e04adc2cd6f083ef1 + languageName: node + linkType: hard + "minimatch@npm:9.0.3": version: 9.0.3 resolution: "minimatch@npm:9.0.3" @@ -9722,6 +9995,15 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:^8.0.2": + version: 8.0.4 + resolution: "minimatch@npm:8.0.4" + dependencies: + brace-expansion: ^2.0.1 + checksum: 2e46cffb86bacbc524ad45a6426f338920c529dd13f3a732cc2cf7618988ee1aae88df4ca28983285aca9e0f45222019ac2d14ebd17c1edadd2ee12221ab801a + languageName: node + linkType: hard + "minimatch@npm:^9.0.1, minimatch@npm:^9.0.3": version: 9.0.4 resolution: "minimatch@npm:9.0.4" @@ -9740,6 +10022,17 @@ __metadata: languageName: node linkType: hard +"minimist-options@npm:4.1.0": + version: 4.1.0 + resolution: "minimist-options@npm:4.1.0" + dependencies: + arrify: ^1.0.1 + is-plain-obj: ^1.1.0 + kind-of: ^6.0.3 + checksum: 8c040b3068811e79de1140ca2b708d3e203c8003eb9a414c1ab3cd467fc5f17c9ca02a5aef23bedc51a7f8bfbe77f87e9a7e31ec81fba304cda675b019496f4e + languageName: node + linkType: hard + "minimist@npm:^1.2.0, minimist@npm:^1.2.3, minimist@npm:^1.2.6": version: 1.2.8 resolution: "minimist@npm:1.2.8" @@ -9807,6 +10100,13 @@ __metadata: languageName: node linkType: hard +"minipass@npm:^4.2.4": + version: 4.2.8 + resolution: "minipass@npm:4.2.8" + checksum: 7f4914d5295a9a30807cae5227a37a926e6d910c03f315930fde52332cf0575dfbc20295318f91f0baf0e6bb11a6f668e30cde8027dea7a11b9d159867a3c830 + languageName: node + linkType: hard + "minipass@npm:^5.0.0": version: 5.0.0 resolution: "minipass@npm:5.0.0" @@ -10077,7 +10377,7 @@ __metadata: languageName: node linkType: hard -"node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.7": +"node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.7, node-fetch@npm:^2.6.9": version: 2.7.0 resolution: "node-fetch@npm:2.7.0" dependencies: @@ -10136,6 +10436,30 @@ __metadata: languageName: node linkType: hard +"normalize-package-data@npm:^3.0.2": + version: 3.0.3 + resolution: "normalize-package-data@npm:3.0.3" + dependencies: + hosted-git-info: ^4.0.1 + is-core-module: ^2.5.0 + semver: ^7.3.4 + validate-npm-package-license: ^3.0.1 + checksum: bbcee00339e7c26fdbc760f9b66d429258e2ceca41a5df41f5df06cc7652de8d82e8679ff188ca095cad8eff2b6118d7d866af2b68400f74602fbcbce39c160a + languageName: node + linkType: hard + +"normalize-package-data@npm:^4.0.1": + version: 4.0.1 + resolution: "normalize-package-data@npm:4.0.1" + dependencies: + hosted-git-info: ^5.0.0 + is-core-module: ^2.8.1 + semver: ^7.3.5 + validate-npm-package-license: ^3.0.4 + checksum: 292e0aa740e73d62f84bbd9d55d4bfc078155f32d5d7572c32c9807f96d543af0f43ff7e5c80bfa6238667123fd68bd83cd412eae9b27b85b271fb041f624528 + languageName: node + linkType: hard + "normalize-path@npm:^3.0.0": version: 3.0.0 resolution: "normalize-path@npm:3.0.0" @@ -10486,6 +10810,15 @@ __metadata: languageName: node linkType: hard +"p-limit@npm:^4.0.0": + version: 4.0.0 + resolution: "p-limit@npm:4.0.0" + dependencies: + yocto-queue: ^1.0.0 + checksum: 01d9d70695187788f984226e16c903475ec6a947ee7b21948d6f597bed788e3112cc7ec2e171c1d37125057a5f45f3da21d8653e04a3a793589e12e9e80e756b + languageName: node + linkType: hard + "p-locate@npm:^4.1.0": version: 4.1.0 resolution: "p-locate@npm:4.1.0" @@ -10504,6 +10837,15 @@ __metadata: languageName: node linkType: hard +"p-locate@npm:^6.0.0": + version: 6.0.0 + resolution: "p-locate@npm:6.0.0" + dependencies: + p-limit: ^4.0.0 + checksum: 2bfe5234efa5e7a4e74b30a5479a193fdd9236f8f6b4d2f3f69e3d286d9a7d7ab0c118a2a50142efcf4e41625def635bd9332d6cbf9cc65d85eb0718c579ab38 + languageName: node + linkType: hard + "p-map@npm:^4.0.0": version: 4.0.0 resolution: "p-map@npm:4.0.0" @@ -10666,6 +11008,13 @@ __metadata: languageName: node linkType: hard +"path-exists@npm:^5.0.0": + version: 5.0.0 + resolution: "path-exists@npm:5.0.0" + checksum: 8ca842868cab09423994596eb2c5ec2a971c17d1a3cb36dbf060592c730c725cd524b9067d7d2a1e031fef9ba7bd2ac6dc5ec9fb92aa693265f7be3987045254 + languageName: node + linkType: hard + "path-is-absolute@npm:^1.0.0": version: 1.0.1 resolution: "path-is-absolute@npm:1.0.1" @@ -10704,7 +11053,7 @@ __metadata: languageName: node linkType: hard -"path-scurry@npm:^1.11.1": +"path-scurry@npm:^1.11.1, path-scurry@npm:^1.6.1": version: 1.11.1 resolution: "path-scurry@npm:1.11.1" dependencies: @@ -11090,6 +11439,13 @@ __metadata: languageName: node linkType: hard +"quick-lru@npm:^6.1.1": + version: 6.1.2 + resolution: "quick-lru@npm:6.1.2" + checksum: 0491a24dcd39b8a325e9d3ae719fad7690a1da7a0dbfa8f16613663dc7d262d08b565005ce16a04497ed4700f1f477b8e06cd46e10a7a112a481a18d056c38f7 + languageName: node + linkType: hard + "rc@npm:1.2.8, rc@npm:^1.2.7": version: 1.2.8 resolution: "rc@npm:1.2.8" @@ -11111,6 +11467,29 @@ __metadata: languageName: node linkType: hard +"read-pkg-up@npm:^9.1.0": + version: 9.1.0 + resolution: "read-pkg-up@npm:9.1.0" + dependencies: + find-up: ^6.3.0 + read-pkg: ^7.1.0 + type-fest: ^2.5.0 + checksum: 41b8ba4bdb7c1e914aa6ce2d36a7c1651e9086938977fa12f058f6fca51ee15315634af648ca4ef70dd074e575e854616b39032ad0b376e9e97d61a9d0867afe + languageName: node + linkType: hard + +"read-pkg@npm:^7.1.0": + version: 7.1.0 + resolution: "read-pkg@npm:7.1.0" + dependencies: + "@types/normalize-package-data": ^2.4.1 + normalize-package-data: ^3.0.2 + parse-json: ^5.2.0 + type-fest: ^2.0.0 + checksum: 20d11c59be3ae1fc79d4b9c8594dabeaec58105f9dfd710570ef9690ec2ac929247006e79ca114257683228663199735d60f149948dbc5f34fcd2d28883ab5f7 + languageName: node + linkType: hard + "readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0": version: 3.6.2 resolution: "readable-stream@npm:3.6.2" @@ -11138,6 +11517,16 @@ __metadata: languageName: node linkType: hard +"redent@npm:^4.0.0": + version: 4.0.0 + resolution: "redent@npm:4.0.0" + dependencies: + indent-string: ^5.0.0 + strip-indent: ^4.0.0 + checksum: 6944e7b1d8f3fd28c2515f5c605b9f7f0ea0f4edddf41890bbbdd4d9ee35abb7540c3b278f03ff827bd278bb6ff4a5bd8692ca406b748c5c1c3ce7355e9fbf8f + languageName: node + linkType: hard + "regexp.prototype.flags@npm:^1.5.2": version: 1.5.2 resolution: "regexp.prototype.flags@npm:1.5.2" @@ -11538,6 +11927,13 @@ __metadata: languageName: node linkType: hard +"server-destroy@npm:^1.0.1": + version: 1.0.1 + resolution: "server-destroy@npm:1.0.1" + checksum: cbc19d4f92d25a0a34430c6a09faccbea77d1a69563560eefe883feb67c14c3fb3a1c5af1affae0e82d537886ea0f91d317e39e46b5d6425de3acf57a3ab13e3 + languageName: node + linkType: hard + "set-function-length@npm:^1.2.1": version: 1.2.2 resolution: "set-function-length@npm:1.2.2" @@ -11780,6 +12176,40 @@ __metadata: languageName: node linkType: hard +"spdx-correct@npm:^3.0.0": + version: 3.2.0 + resolution: "spdx-correct@npm:3.2.0" + dependencies: + spdx-expression-parse: ^3.0.0 + spdx-license-ids: ^3.0.0 + checksum: e9ae98d22f69c88e7aff5b8778dc01c361ef635580e82d29e5c60a6533cc8f4d820803e67d7432581af0cc4fb49973125076ee3b90df191d153e223c004193b2 + languageName: node + linkType: hard + +"spdx-exceptions@npm:^2.1.0": + version: 2.5.0 + resolution: "spdx-exceptions@npm:2.5.0" + checksum: bb127d6e2532de65b912f7c99fc66097cdea7d64c10d3ec9b5e96524dbbd7d20e01cba818a6ddb2ae75e62bb0c63d5e277a7e555a85cbc8ab40044984fa4ae15 + languageName: node + linkType: hard + +"spdx-expression-parse@npm:^3.0.0": + version: 3.0.1 + resolution: "spdx-expression-parse@npm:3.0.1" + dependencies: + spdx-exceptions: ^2.1.0 + spdx-license-ids: ^3.0.0 + checksum: a1c6e104a2cbada7a593eaa9f430bd5e148ef5290d4c0409899855ce8b1c39652bcc88a725259491a82601159d6dc790bedefc9016c7472f7de8de7361f8ccde + languageName: node + linkType: hard + +"spdx-license-ids@npm:^3.0.0": + version: 3.0.20 + resolution: "spdx-license-ids@npm:3.0.20" + checksum: 0c57750bedbcff48f3d0e266fbbdaf0aab54217e182f669542ffe0b5a902dce69e8cdfa126a131e1ddd39a9bef4662e357b2b41315d7240b4a28c0a7e782bb40 + languageName: node + linkType: hard + "split2@npm:^4.1.0": version: 4.2.0 resolution: "split2@npm:4.2.0" @@ -11801,6 +12231,13 @@ __metadata: languageName: node linkType: hard +"srcset@npm:^5.0.0": + version: 5.0.1 + resolution: "srcset@npm:5.0.1" + checksum: 6f58b4b680382ecf2fb8aa82f3d067c1380d621e65ce085c9f27d80323629c1b74f291b52b1cc3997e345b7f77137558e48bb48244ef6f2b698d77ac1f4ef3ff + languageName: node + linkType: hard + "ssri@npm:^10.0.0": version: 10.0.5 resolution: "ssri@npm:10.0.5" @@ -11973,6 +12410,15 @@ __metadata: languageName: node linkType: hard +"strip-indent@npm:^4.0.0": + version: 4.0.0 + resolution: "strip-indent@npm:4.0.0" + dependencies: + min-indent: ^1.0.1 + checksum: 06cbcd93da721c46bc13caeb1c00af93a9b18146a1c95927672d2decab6a25ad83662772417cea9317a2507fb143253ecc23c4415b64f5828cef9b638a744598 + languageName: node + linkType: hard + "strip-json-comments@npm:^3.1.1": version: 3.1.1 resolution: "strip-json-comments@npm:3.1.1" @@ -12170,6 +12616,13 @@ __metadata: languageName: node linkType: hard +"trim-newlines@npm:^4.0.2": + version: 4.1.1 + resolution: "trim-newlines@npm:4.1.1" + checksum: 5b09f8e329e8f33c1111ef26906332ba7ba7248cde3e26fc054bb3d69f2858bf5feedca9559c572ff91f33e52977c28e0d41c387df6a02a633cbb8c2d8238627 + languageName: node + linkType: hard + "ts-api-utils@npm:^1.0.1, ts-api-utils@npm:^1.3.0": version: 1.3.0 resolution: "ts-api-utils@npm:1.3.0" @@ -12428,13 +12881,20 @@ __metadata: languageName: node linkType: hard -"type-fest@npm:^2.13.0, type-fest@npm:^2.5.1": +"type-fest@npm:^2.0.0, type-fest@npm:^2.13.0, type-fest@npm:^2.5.0, type-fest@npm:^2.5.1": version: 2.19.0 resolution: "type-fest@npm:2.19.0" checksum: a4ef07ece297c9fba78fc1bd6d85dff4472fe043ede98bd4710d2615d15776902b595abf62bd78339ed6278f021235fb28a96361f8be86ed754f778973a0d278 languageName: node linkType: hard +"type-fest@npm:^3.1.0": + version: 3.13.1 + resolution: "type-fest@npm:3.13.1" + checksum: c06b0901d54391dc46de3802375f5579868949d71f93b425ce564e19a428a0d411ae8d8cb0e300d330071d86152c3ea86e744c3f2860a42a79585b6ec2fdae8e + languageName: node + linkType: hard + "typed-array-buffer@npm:^1.0.2": version: 1.0.2 resolution: "typed-array-buffer@npm:1.0.2" @@ -12685,6 +13145,16 @@ __metadata: languageName: node linkType: hard +"validate-npm-package-license@npm:^3.0.1, validate-npm-package-license@npm:^3.0.4": + version: 3.0.4 + resolution: "validate-npm-package-license@npm:3.0.4" + dependencies: + spdx-correct: ^3.0.0 + spdx-expression-parse: ^3.0.0 + checksum: 35703ac889d419cf2aceef63daeadbe4e77227c39ab6287eeb6c1b36a746b364f50ba22e88591f5d017bc54685d8137bc2d328d0a896e4d3fd22093c0f32a9ad + languageName: node + linkType: hard + "vscode-oniguruma@npm:^1.7.0": version: 1.7.0 resolution: "vscode-oniguruma@npm:1.7.0" @@ -12980,6 +13450,13 @@ __metadata: languageName: node linkType: hard +"yocto-queue@npm:^1.0.0": + version: 1.1.1 + resolution: "yocto-queue@npm:1.1.1" + checksum: f2e05b767ed3141e6372a80af9caa4715d60969227f38b1a4370d60bffe153c9c5b33a862905609afc9b375ec57cd40999810d20e5e10229a204e8bde7ef255c + languageName: node + linkType: hard + "yoctocolors-cjs@npm:^2.1.1": version: 2.1.2 resolution: "yoctocolors-cjs@npm:2.1.2"