open-index/open-npm huggingface dataset:
npm package: @jtex/common
Description: Contains common interfaces of @jtex tools:
Latest version: 1.0.0

# @jtex/common

Contains common interfaces of @jtex tools:

- [`@jtex/karma-json2html`](https://www.npmjs.com/package/@jtex/karma-json2html)
- [`@jtex/karma-plugin`](https://www.npmjs.com/package/@jtex/karma-plugin)
npm package: @jtex/karma-json2html
Description: > TODO: description
Author: y1j2x34
Latest version: 1.0.0

# `@jtex/karma-json2html`

This is a tool for converting the JSON report of karma results(generated by [`karma-structured-json-reporter`](https://www.npmjs.com/package/karma-structured-json-reporter) or [`@jtex/karma-plugin`](https://www.npmjs.com/package/@jtex/karma-plugin)) to HTML report.

## Usage

### convertion API

```ts
import { html } from '@jtex/karma-json2html';
import fs from 'fs';

const jsonReportData = {
    summary: {
        // ...
    },
    browsers: {
        // ...
    }
};
const options = {
    reportTitle: 'jtex html report title',
    focusOnFailures: true,
    collapsed: true,
    logoFile: '/path/to/logo.png',
    data: jsonReportData
};

const htmlContent = html(options);

fs.writeFile('/path/to/jtex-report.html', htmlContent);
```

### Integration into karmajs

Refer to [`@jtex/karma-plugin`](https://www.npmjs.com/package/@jtex/karma-plugin).
npm package: @jtfmumm/automerge-deps
Description: CLI tool to fetch automerge module dependencies at build time
Latest version: 0.1.6

# automerge-deps

CLI tool that fetches automerge-based module dependencies from a sync server and writes them to `node_modules/` for use in a normal build.

## Install

```
pnpm add -D @jtfmumm/automerge-deps
```

## Setup

1. Add an `automerge-deps.json` to your project root:

```json
{
  "syncServers": [
    "wss://your-sync-server.example.com",
    "wss://fallback.example.com"
  ],
  "dependencies": [
    {
      "name": "@patchwork/contact",
      "url": "automerge:abc123"
    }
  ]
}
```

## Usage

```
npx automerge-deps install
```

This connects to the first available sync server, fetches each dependency's folder document, and writes its files to `node_modules/<name>/`. Run it before `pnpm build`.

Sync servers are tried in order; if the first is unreachable, it falls back to the next.

## Troubleshooting

If you see an error like `Error: Document automerge:<url> is unavailable`, try running the command again. The sync server may not have had time to deliver all sub-documents on the first attempt.

## Preparing a dependency for publishing

Before pushing a dependency to a sync server, make sure it's ready to be consumed as a Node module. The fetched files are written directly to `node_modules/<name>/`, so the dependency must include:

- A `package.json` with a `main` (or `exports`) field pointing to the compiled entry point
- Compiled JavaScript output (e.g. run `tsc` before pushing if the source is TypeScript)

If a dependency was pushed without compiled output, you can work around it locally after fetching:

```
cd node_modules/<name>
npx tsc
```

You may also need to add a `package.json` with a `main` field pointing to the compiled entry point (e.g. `dist/index.js`).

## Build from source

```
pnpm install
pnpm build
node dist/cli.js install
```
npm package: @jtfmumm/patchwork-standalone-vite
Description: Vite plugin for building standalone patchwork tool apps
Latest version: 0.5.1

# @jtfmumm/patchwork-standalone-vite

Vite plugin for building standalone patchwork tool apps. Handles all the Vite configuration needed to use a patchwork tool module (fetched via `@jtfmumm/automerge-deps`) with `@jtfmumm/patchwork-standalone-frame`.

## What it does

- **WASM support**: configures `vite-plugin-wasm` for automerge
- **Solid.js JSX**: configures `vite-plugin-solid`
- **Patchwork external stubbing**: patchwork tools are built with `@inkandswitch/patchwork-*` and `@automerge/automerge-repo-keyhive` as externals (provided at runtime by the patchwork import map). This plugin stubs them out since they're unused in standalone mode. If a stubbed package is actually installed (e.g. keyhive in keyhive mode), the real package is used instead.
- **Shared dependency deduplication**: ensures `solid-js`, `@automerge/automerge`, and `@automerge/automerge-repo` are shared between your app and the fetched tool module
- **Tool chunk serving**: patchwork tools have code-split chunks (lazy-loaded via dynamic `import()`). During dev, Vite pre-bundles the tool entry but the chunk files still need to be served from `node_modules/`. This plugin handles that automatically.
- **Build target**: sets `esnext` for top-level await support

## Install

```
pnpm add -D @jtfmumm/patchwork-standalone-vite
```

## Usage

```ts
// vite.config.ts
import { defineConfig } from "vite";
import { patchworkStandalone } from "@jtfmumm/patchwork-standalone-vite";

export default defineConfig({
  plugins: [patchworkStandalone({ tools: ["my-tool"] })],
});
```

The `tools` option lists tool packages fetched by `automerge-deps`. This enables chunk serving for their code-split dynamic imports during dev.

## Full example

A minimal standalone app that loads a patchwork tool from an automerge FolderDoc:

**`automerge-deps.json`**
```json
{
  "syncServers": ["wss://sync-server.example.com"],
  "dependencies": [
    { "name": "my-tool", "url": "automerge:<automergeURL>" }
  ]
}
```

**`src/main.ts`**
```ts
import { mountStandaloneApp } from "@jtfmumm/patchwork-standalone-frame";
import { plugins } from "my-tool";

const root = document.getElementById("root");
if (root) {
  mountStandaloneApp(root, plugins);
}
```

**`package.json`** dependencies:
```json
{
  "dependencies": {
    "@automerge/automerge": "^3.2.4",
    "@automerge/automerge-repo": "2.5.3",
    "@automerge/automerge-repo-network-websocket": "2.5.3",
    "@automerge/automerge-repo-storage-indexeddb": "2.5.3",
    "@jtfmumm/patchwork-standalone-frame": "0.4.0",
    "solid-js": "^1.9.9"
  },
  "devDependencies": {
    "@jtfmumm/automerge-deps": "^0.1.4",
    "@jtfmumm/patchwork-standalone-vite": "^0.4.0",
    "vite": "^6.0.3"
  }
}
```

Run `pnpm fetch-deps` to pull the tool, then `pnpm dev` to start.
npm package: @jthinking/hashes-node-win32-x64-msvc
Description: Hashes utils for node.js based on napi-rs.
Latest version: 0.0.7

# `@jthinking/hashes-node-win32-x64-msvc`

This is the **x86_64-pc-windows-msvc** binary for `@jthinking/hashes-node`
npm package: @jthrilly/dead-link-checker
Description: A simple tool to check for dead links in a website
Author: Joshua Melville
Latest version: 1.0.6


# Dead Link Checker

A simple and efficient Node.js script to recursively check for dead links on a webpage. This script validates both internal and external links, with configurable concurrency and delay to control the load on servers.

## Features

- **Recursive Link Checking**: Crawls and checks all links on the given webpage, including internal and external links.
- **Concurrency Control**: Configure the number of simultaneous requests for faster or slower processing.
- **Delay Between Requests**: Add delays between requests to avoid overwhelming servers.
- **Verbose Output**: View detailed information about each link checked.
- **Excludes Non-HTTP Links**: Skips invalid URLs like `mailto:`, `javascript:`, and fragment links (`#section`).

## Requirements

- Node.js 20.x or later

## Installation

No need to install - just call directly from your github action or CLI using npx:

```bash
npx dead-link-checker <URL> [options]
```

### Options

- `-v`: Enable verbose mode. Displays all checked links and their status codes.
- `--concurrent=<number>`: Set the number of concurrent requests (default: 20).
- `--delay=<milliseconds>`: Set the delay between requests in milliseconds (default: 10).

## Excluded Links

The script skips the following types of links:
- `mailto:` email links
- `javascript:` links
- Empty links (`<a href=""></a>`)
- Fragment-only links (`<a href="#section"></a>`)

## How It Works

1. The script fetches the provided URL and parses all links using the `JSDOM` library.
2. Each link is validated using the Node.js `fetch` API.
3. Internal links are recursively added to the queue for further checking.
4. External links are checked only once and not followed recursively.
5. Links with errors (e.g., `404 Not Found`) are reported in the summary.

## License

This script is released under the MIT License. Feel free to modify and use it as you see fit.

## Author

Developed by Joshua Melville (jthrilly) using Claude and ChatGPT.
npm package: @jti/antora-extension-detect_assembler
Description: An Antora extension that detects when the Antora Assembler is enabled so your UI can include links to the generated PDF.
Author: Ewan Edwards
Latest version: 1.0.0

# jti-antora-extension-repeated_words
An Antora extension that checks Asciidoc source files for repeated words in prose.

When the extension executes and detects Assembler, it adds the `assemblerEnabled` attribute. The attribute definition is equivalent to:

```yml
asciidoc:
  attributes:
    assemblerEnabled: "yes"
```

Your Antora UI can find that attribute and compose a URL to an Assembler-generated PDF.

Here is a sample helper file:

```js
'use strict'

const util = require('util')

let output = false

module.exports = (ctx) => {
  if (output) {
    output = false
    console.log(
      'ctx:',
      util.inspect(ctx.data.root.page, {
        showHidden: false,
        depth: null,
        maxArrayLength: null,
      })
    )
  }

  const { componentVersion } = ctx.data.root.page
  if (
    !componentVersion?.asciidoc?.attributes?.assemblerEnabled
  ) {
    return false
  }

  const component = componentVersion.name
  const version = componentVersion.version
  const filename = componentVersion.title
    .replace(/[&:]/g, '')
    .replace(/[ ,/"']/g, '-')
    .replace(/--/g, '-')
    .toLowerCase() +
    '.pdf'

  const url = `${component}/${version}/${filename}`
  return url
}
```

When the helper is called `pdfLink.js`, a Handlebars template can do:

```html
{{#if (pdfLink)}}
<div class="navbar-item hide-for-print">
  <span class="control">
    <a class="button is-primary" href="{{{siteRootPath}}}/{{{pdfLink}}}">Download PDF</a>
  </span>
</div>
{{/if}}
```
npm package: @jti/antora-extension-images
Description: An Antora extension that checks Asciidoc source for image availability and size specifications.
Author: Ewan Edwards
Latest version: 1.1.0

# jti-antora-extension-repeated_words
An Antora extension that checks Asciidoc source files for repeated words in prose.

The extension detects:

- image macros in Asciidoc source where there is no image file at the specified path.
- image macros that have specified sizes that differ from the image.
  "Retina"-resolution images are accepted (x and y are 2x visible size).
- images that exist in the Antora module hierarchy but are not referenced in Asciidoc.
npm package: @jti/antora-extension-ventilated_prose
Description: An Antora extension that checks Asciidoc source files for one-sentence-per-line formatting.
Author: Ewan Edwards
Latest version: 1.0.29

# jti-antora-extension-ventilated_prose

An Antora extension that checks Asciidoc source files for one-sentence-per-line formatting.
npm package: @jti/vale
Description: This package installs errata-ai/vale in the `bin` folder.
Author: Ewan Edwards
Latest version: 1.2.1

# jti-vale

This repo implements an NPM package that installs a platform/arch-appropriate binary for [Vale](https://github.com/errata-ai/vale) in the project root's `bin` folder.

The target Vale version is 2.27.0.

> NOTE: This project is not maintained or endorsed by [errata-ai](https://github.com/errata-ai/).
npm package: @jtis/wordcloudtunnel
Description: Word cloud in tunnel.
Author: Jackie Tang
Latest version: 0.0.8

# WorldCloudTunnel

Word cloud in tunnel.

## Install

```sh
npm i @jtis/wordcloudtunnel
pnpm i @jtis/wordcloudtunnel
```

## Usage

```html
const el = ref<InstanceType<typeof WordCloudTunnel>>()

let id = 0;
onMounted(() => {
  timer = window.setInterval(() => {
    el.value?.append({
      id: (id++).toString(),
      text: 'text',
    })
  }, 1000)
})

<WordCloudTunnel
  ref="el"
  :color="['#ffd077', '#3bc4c7', '#3a9eea', '#ff4e69', '#461e47']"
  :axisCount="6"
  :randomAngleRangePerAxis="60"
  :randomAxis="false"
  :scaleStep="0.15"
  :animation-duration="1000"
></WordCloudTunnel>
```

```html
const el = ref<InstanceType<typeof WordCloudTunnel>>()

let id = 0;
onMounted(() => {
  timer = window.setInterval(() => {
    el.value?.append({
      id: (id++).toString(),
      text: 'text',
    })
  }, 1000)
})

<WordCloudTunnel
  ref="el"
  :color="['#ffd077', '#3bc4c7', '#3a9eea', '#ff4e69', '#461e47']"
  :axisCount="6"
  :randomAngleRangePerAxis="60"
  :randomAxis="false"
  :scaleStep="0"
  :opacityStep="0"
  :animation-duration="1000"
>
  <template #default="{id, level, text, color}">
    <div :style="{backgroundColor: level > 1 ? 'green' : 'gray',}">{{ text }}</div>
  </template>
</WordCloudTunnel>
```
npm package: @jtjs/event
Description: A simple and powerful object-oriented event implementation for Node and browser.
Latest version: 2.0.3

Our documentation got a glow-up! You can now find documentation on other JTJS modules at [jtjs.dev](https://jtjs.dev).

## A simple, object-oriented event implementation for Node and browser.

Fully typed for beautiful TS development.

### How to Use

1. Create your event:
    ```ts
    import { Event } from '@jtjs/event';

    type ThemeChangeHandler = (themeName: string) => void;

    const onThemeChange = new Event<ThemeChangeHandler>();
    ```

1. Subscribe to your event...
    - Until you unsubscribe:
        ```ts
        onThemeChange.subscribe((themeName) => {
          console.log(`Theme changed to ${themeName}!`);
        });
        ```

    - For just one trigger:
        ```ts
        onThemeChange.once((themeName) => {
          console.log('Just once!');
        });
        ```

1. Trigger your event:
    ```ts
    onThemeChange.trigger('light');
    ```

1. Unsubscribe from your event...
    - With the return from `subscribe`:
        ```ts
        const unsub = onThemeChange.subscribe((themeName) => {
          console.log('beep boop');
        });

        unsub();
        ```

    - With the reference to your handler:
        ```ts
        const handler = (themeName: string) => {
          console.log('beep boop');
        };

        onThemeChange.subscribe(handler);

        onThemeChange.unsubscribe(handler);
        ```