open-index/open-npm huggingface dataset:
npm package: @keplr/eslint-config-backend-node
Description: ## Use the rules in your project
Latest version: 2.9.100-581761a6eca714b085ad94787663f1802ba4fe1c.0

# Keplr ESLint configuration

## Use the rules in your project

1. In the project's `devDependencies` in `package.json`:

   - remove `prettier`
   - remove all the eslint rules packages
   - remove `eslint`
   - run `npm install @keplr/eslint-config-backend-node`

2. Add `"prettier": "@keplr/eslint-config-backend-node/prettierrc.json"` to package.json

3. Remove the prettierrc

4. Replace the .eslintrc file by :

   ```json
   {
     "root": true,
     "parserOptions": { "project": "./tsconfig.json" },
     "extends": ["@keplr/eslint-config-backend-node"],
     "rules": {},
     "reportUnusedDisableDirectives": true
   }
   ```

## Fix the problems

This package will likely highlight many problems in your project that may take a long time to fix.

We recommend that you proceed in steps:

1. Fix the auto-fixable problems and check that the fixes are right
2. Ignore all the remaining errors with `// eslint-disable-next-line` (see below for an automated way)
3. As the code is changed, fix the remaining errors

Note: you can run these commands to ignore all the errors:

```sh
npm run lint -- -f json -o warnings.json
node fix.js
```

fix.js (very strongly inspired from https://stackoverflow.com/a/23930212):

```js
const json = require('./warnings.json');
const fs = require('fs');

json.forEach(({ filePath, messages, source }) => {
  // if there is no source we have nothing that needs to be eslint-ignore'd
  if (!source) {
    return;
  }

  const data = source.split('\n');

  // if the source has multiple lines which need to be eslint-ignored our offset changes per addition
  // offset is 1 because line numbers start at 1 but index numbers in an array start at 0
  let offset = 1;

  // group errors/warnings by line because we want to have one eslint disable comment with all the rules to disable
  const groupedMessages = messages.reduce((acc, next) => {
    const prevMessages = acc[next.line] ? acc[next.line] : [];
    // some lines may have the same rule twice
    const duplicateRuleForLine = prevMessages.find(
      message => message.ruleId === next.ruleId,
    );
    // ignore jsx and graphql lint rules
    const applicableRule =
      next.ruleId &&
      !next.ruleId.includes('jsx') &&
      !next.ruleId.includes('graphql');

    // ignore the eslint-ignore addition for duplicates and non applicable rules
    if (duplicateRuleForLine || !applicableRule) {
      return acc;
    }

    return {
      ...acc,
      [next.line]: [...prevMessages, next],
    };
  }, {});

  Object.entries(groupedMessages).forEach(([line, messages]) => {
    // grouped ignores
    const ignore = `// eslint-disable-next-line ${messages
      .map(({ ruleId }) => ruleId)
      .join(', ')}  -- auto-ignored when updating eslint`;
    data.splice(line - offset, 0, ignore);
    offset--;
  });

  const updated = data.join('\n');

  fs.writeFile(filePath, updated, function (err) {
    if (err) return console.log(err);
  });
});
```
npm package: @keplr/graphql-changes-slack-notifier
Description: Notify changes to a GraphQL schema on slack in a format similar to the GraphQL Inspector GitHub app's
Latest version: 1.1.0

# graphql-changes-slack-notifier

Notify changes to a GraphQL schema on slack in a format similar to the
[GraphQL Inspector GitHub app's](https://graphql-inspector.com/docs/essentials/notifications#notifications-on-slack)

## Syntax

`npx @keplr/graphql-changes-slack-notifier slack_webhook_url message schema_before schema_after`

Where :

- `slack_webhook_url`: An URL for a slack app
- `schema_before` and `schema_after`: An URL to a graphql endpoint or a local file ending in .graphql
npm package: @kepoai/cli
Description: Kepo CLI - A tool for building TypeScript code into platform-specific plugins
Author: Kepo Team
Latest version: 0.0.15

# @kepo/cli

Kepo CLI - A tool for building TypeScript code into platform-specific plugins.

## Installation

```bash
npm install -g @kepo/cli
# or
yarn global add @kepo/cli
```

## Usage

You can use the CLI in the following ways:

```bash
# After global installation
kp [command] [options]

# Or using npx
npx @kepo/cli [command] [options]
```

## System Requirements

- Node.js >= 14.0.0
- Supported OS: macOS, Windows, Linux
- Supported architectures: x86_64 (Intel/AMD), arm64 (Apple Silicon/ARM)

## Auto-Download

The CLI binary will be automatically downloaded from our release server during installation or first use, matching your system's architecture.

## Publish Flow

`npm publish` 会自动触发 `prepublishOnly`：

1. 构建多平台二进制到 `../dist`
2. 同步上传二进制到 R1/R2（使用 Wrangler）

发布前请设置：

- `R1_BUCKET`（或 `R2_BUCKET`）
- `CLOUDFLARE_API_TOKEN`
- （可选）`R1_PREFIX`（默认 `kepo-cli`）

如需仅发布 npm、跳过上传，可临时设置 `SKIP_R1_UPLOAD=1`。

## One-Shot Release

仓库根目录提供了一键发布脚本 `release.sh`，会串行执行：

1. 可选写入 `npm/package.json` 版本号
2. 可选执行 `go test ./...`
3. 执行 `npm publish`（自动触发 prepublish 构建与上传）
4. 发布后校验 npm 最新版本

常用命令：

```bash
# 正式发布（会执行测试）
./release.sh --version 0.0.12

# 正式发布但跳过 R1 上传
./release.sh --version 0.0.12 --skip-upload

# 仅演练，不实际发布
./release.sh --dry-run --skip-upload
```