open-index/open-npm huggingface dataset:
npm package: @kachanovski/fsdnew
Description: A utility for adding new components using feature-sliced methodology
Author: kachanovski
Latest version: 1.0.0

# fsdnew

`fsdnew` is a command-line utility designed to simplify the creation of new components in your feature-sliced architecture.

This tool supports the generation of various component types such as pages, widgets, features, entities, and shared. It also takes care of correctly updating paths in your `tsconfig.json` file.

## Installation

```bash
yarn add -D @kachanovski/fsdnew
```

For easier access, you can add it to the scripts section of your `package.json`:

```json
"scripts": {
  "fsdnew": "npx @kachanovski/fsdnew"
}
```

## Usage

To create a new component, use the following syntax:

```bash
npx @kachanovski/fsdnew <component_type> <component_name>
```

`<component_type>` should be one of the following:

- page
- widget
- feature
- entity
- shared

`<component_name>` is the name of your new component.

For example, to create a new feature named ThemeToggle, you would run:

```bash
npx @kachanovski/fsdnew feature ThemeToggle
```

or

```bash
yarn addnew feature themeToggle
```

This will create a new directory in your `src/4_features` directory named ThemeToggle, with a React component file (ThemeToggle.tsx) and an index.ts file.

### Note

For `shared` type, it just creates a single `.ts` file instead of a full component structure. For example:

```bash
npx @kachanovski/fsdnew shared router
```

This will create a new router.ts file in your `src/6_shared` directory.

## License

MIT
npm package: @kachit/angular-api-query-builder
Description: Angular API query filter builder
Author: Kachit
Latest version: 1.2.7
Deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.

# Angular API query builder module
[![Npm badge](https://img.shields.io/npm/v/@kachit/angular-api-query-builder.svg)][npm]
[![NPM downloads][npm-download]][npm]
[![npm License](https://img.shields.io/npm/l/ng-packagr.svg?style=flat-square)](https://github.com/kachit/angular-api-query-builder/blob/master/LICENSE)
![angular](https://img.shields.io/badge/angular-^11.0-lightgrey.svg?style=flat-square)  

[npm]: https://www.npmjs.com/package/@kachit/angular-api-query-builder
[npm-download]: https://img.shields.io/npm/dm/@kachit/angular-api-query-builder.svg?style=flat-square

Angular API query filter builder

```bash
npm i @kachit/angular-api-query-builder
```

```js
//app.module.ts
import { ApiQueryBuilderModule } from '@kachit/angular-api-query-builder';

@NgModule({
  imports: [
    ...
    ApiQueryBuilderModule,
  ],
})
export class AppModule { }


//your-service-class.ts
import { QueryBuilderService } from '@kachit/angular-api-query-builder';
import { HttpClient } from '@angular/common/http';
import { map } from 'rxjs/operators';

let qb = new QueryBuilderService();
let http = new HttpClient();
let params = qb.eq('active', true).build();

let url = 'http://api.your-domain.com/foo';
let data = http.get(url, {params: params}).pipe(
    map((response) => { return response.data})
);
```

```http request
GET http://api.your-domain.com/foo?filter[$eq][active]=true
```
npm package: @kachit/angular-api-utils
Description: Angular API utils
Author: Kachit
Latest version: 1.2.0
Deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.

# Angular API utils

[![Npm badge](https://img.shields.io/npm/v/@kachit/angular-api-utils.svg)][npm]
[![NPM downloads][npm-download]][npm]
[![npm License](https://img.shields.io/npm/l/ng-packagr.svg?style=flat-square)](https://github.com/ng-packagr/ng-packagr/blob/master/LICENSE)
![angular](https://img.shields.io/badge/angular-^11.0-lightgrey.svg?style=flat-square)  

[npm]: https://www.npmjs.com/package/@kachit/angular-api-utils
[npm-download]: https://img.shields.io/npm/dm/@kachit/angular-api-utils.svg?style=flat-square

Angular API utils classes

```bash
npm i @kachit/angular-api-utils
```
npm package: @kachit/ngx-api-query-builder
Description: Angular API query filter builder
Author: Kachit
Latest version: 1.3.9

# Angular API query filter builder
[![Npm badge](https://img.shields.io/npm/v/@kachit/ngx-api-query-builder.svg)][npm]
[![NPM downloads][npm-download]][npm]
[![npm License](https://img.shields.io/npm/l/ng-packagr.svg?style=flat-square)](https://github.com/kachit/ngx-api-query-builder/blob/master/LICENSE)
![angular](https://img.shields.io/badge/angular-^13.0-lightgrey.svg?style=flat-square)  

[npm]: https://www.npmjs.com/package/@kachit/ngx-api-query-builder
[npm-download]: https://img.shields.io/npm/dm/@kachit/ngx-api-query-builder.svg?style=flat-square

Angular API query filter builder

```bash
npm i @kachit/ngx-api-query-builder
```

```js
//your-service-class.ts
import { QueryBuilderService } from '@kachit/angular-api-query-builder';
import { HttpClient } from '@angular/common/http';
import { map } from 'rxjs/operators';

let qb = new QueryBuilderService();
let http = new HttpClient();
let params = qb.eq('active', true).build();

let url = 'http://api.your-domain.com/foo';
let data = http.get(url, {params: params}).pipe(
    map((response) => { return response.data})
);
```

```http request
GET http://api.your-domain.com/foo?filter[$eq][active]=true
```
npm package: @kachkaev/commands
Description: A small utility library that helps running Node.js commands in Next.js apps.
Author: Alexander Kachkaev
Latest version: 0.1.1
Deprecated: If you use this package, here is how you can migrate away from it: https://github.com/kachkaev/tooling-for-how-old-is-this-house/commit/35bee582fbdcfff7f97bd785e57f5f3ddbc9fc3e

# [@kachkaev](https://github.com/kachkaev) → commands

A small utility library that helps running Node.js commands in Next.js apps.

See example usage in <https://github.com/kachkaev/video-easter-eggs> (`scripts` in `package.json` + `src/commands` + instructions in `README`).
npm package: @kachkaev/eslint-config-base
Description: A collection of carefully picked ESLint rules and plugins for TypeScript projects.
Author: Alexander Kachkaev
Latest version: 1.1.1

# [@kachkaev](https://github.com/kachkaev) → eslint config (base)

A collection of carefully picked ESLint rules and plugins for TypeScript projects.

Compatible with [ESLint](https://www.npmjs.com/package/eslint) v9+ (Flat config).
Requires [TypeScript](https://www.npmjs.com/package/typescript) to be present as a dependency.

See also [@kachkaev/eslint-config-next](https://www.npmjs.com/package/@kachkaev/eslint-config-next).

## Principles

This configuration uses warnings for rules that are related to code style (the ones that are not likely to prevent runtime errors), and errors otherwise.
This looks less noisy than using errors for all rules.
Both severity levels fail CI when `eslint` is called with `--max-warnings=0`.

It is assumed that all files are written in TypeScript and use ESM (not CommonJS).

## Adding to project

1.  Ensure your `package.json` contains `"type": "module"`.

1.  Ensure your project has a `tsconfig.json` file.

1.  Install these packages as dev dependencies:

    ```sh
    ## If you use NPM
    npm install -D eslint @kachkaev/eslint-config-base
    
    ## If you use PNPM
    pnpm add -D eslint @kachkaev/eslint-config-base
    
    ## If you use Yarn
    yarn add -D eslint @kachkaev/eslint-config-base
    ```

    > If you don't keep your Node.js runtime up-to-date, you might need to install `jiti` to enable `*.ts` files -- see [ESLint docs](https://eslint.org/docs/latest/use/configure/configuration-files#typescript-configuration-files) for details.

1.  Create `eslint.config.ts` with the following contents:

    ```js
    import { defineConfig } from "eslint/config";
    import { generateBaseConfigs } from "@kachkaev/eslint-config-base";

    export default defineConfig([
      ...generateBaseConfigs(),

      // ... Place additional configs here if needed ...
    ]);
    ```

    > If you work in a monorepo, you may need to specify [`tsconfigRootDir`](https://typescript-eslint.io/packages/parser/#tsconfigrootdir) for some rules to work correctly:
    >
    > ```diff
    > - generateBaseConfigs();
    > + generateBaseConfigs({ tsconfigRootDir: import.meta.dirname });
    > ```

1.  Add `package.json` scripts:

    ```json
    {
      "...": "...",
      "scripts": {
        "...": "...",
        "fix:eslint": "eslint --max-warnings=0 --fix",
        "...": "...",
        "lint:eslint": "eslint --max-warnings=0",
        "...": "..."
      }
    }
    ```

You can now run `[npm/pnpm/yarn] run fix:eslint` to lint your code and `[npm/pnpm/yarn] run lint:eslint` to fix linting errors.
npm package: @kachkaev/eslint-config-react
Description: Compatible with [ESLint](https://www.npmjs.com/package/eslint) v8. Requires [TypeScript](https://www.npmjs.com/package/typescript) and [React](https://www.npmjs.com/package/react) to be present as a dependency.
Author: Alexander Kachkaev
Latest version: 0.7.0-alpha.0
Deprecated: This package has been replaced with https://www.npmjs.com/package/@kachkaev/eslint-config-next

# [@kachkaev](https://github.com/kachkaev) → eslint config (react)

Compatible with [ESLint](https://www.npmjs.com/package/eslint) v8.
Requires [TypeScript](https://www.npmjs.com/package/typescript) and [React](https://www.npmjs.com/package/react) to be present as a dependency.

See also [@kachkaev/eslint-config-base](https://www.npmjs.com/package/@kachkaev/eslint-config-react).

## Adding to project

1.  Install the package:

    ```sh
    npm install -D @kachkaev/eslint-config-react
    ## or
    yarn add -D @kachkaev/eslint-config-react
    ```

    If you use Next.js:

    ```sh
    npm install -D @kachkaev/eslint-config-react @next/eslint-plugin-next
    ## or
    yarn add -D @kachkaev/eslint-config-react @next/eslint-plugin-next
    ```

1.  Create `.eslintrc.js` with the following contents:

    ```js
    module.exports = {
      extends: ["@kachkaev/eslint-config-react"],
    };
    ```

    If you use Next.js:

    ```js
    module.exports = {
      extends: [
        "@kachkaev/eslint-config-react",
        "plugin:@next/next/recommended",
      ],
    };
    ```

    If you want extra typechecking (`tsconfig.json` needs to exist in repo dir):

    ```js
    module.exports = {
      extends: [
        "@kachkaev/eslint-config-react",
        "@kachkaev/eslint-config-react/extra-type-checking",
      ],
    };
    ```

1.  Create `.eslintignore`.
    For example,

    ```ini
    #####################
    ## Specific to ESLint
    #####################

    ## Ignore all files (but still allow sub-folder scanning)
    *
    !*/

    ## Allow certain file types
    !*.cjs
    !*.cts
    !*.js
    !*.json
    !*.jsx
    !*.mjs
    !*.mts
    !*.ts
    !*.tsx

    ########################
    ## Same as in .gitignore
    ########################

    # (paste lines from .gitignore here)
    ```

1.  Optionally, configure package scripts and a [pre-commit hook](https://prettier.io/docs/en/precommit.html#__docusaurus) to make sure that all project files are always formatted.
    See example in [`njt` → `package.json`](https://github.com/kachkaev/njt/blob/master/package.json).
npm package: @kachkaev/markdownlint-config
Description: Compatible with [markdownlint-cli](https://www.npmjs.com/package/markdownlint-cli) v0.30+. To be used together with [`@kachkaev/prettier-config`](https://www.npmjs.com/package/@kachkaev/prettier-config). See `main.json` for rule details.
Author: Alexander Kachkaev
Latest version: 1.0.1

# [@kachkaev](https://github.com/kachkaev) → markdownlint config

Compatible with [markdownlint-cli](https://www.npmjs.com/package/markdownlint-cli) v0.30+.
To be used together with [`@kachkaev/prettier-config`](https://www.npmjs.com/package/@kachkaev/prettier-config).
See `main.json` for rule details.

## Adding to project

1.  Install the package:

    ```sh
    npm install -D @kachkaev/markdownlint-config
    ## or
    yarn add -D @kachkaev/markdownlint-config
    ```

1.  Create `.markdownlint.json` with the following contents:

    ```js
    {
      "extends": "@kachkaev/markdownlint-config"
    }
    ```

1.  Create `.markdownlintignore`.
    For example,

    ```ini
    ###########################
    ## Specific to Markdownlint
    ###########################

    ## Ignore all files (but still allow sub-folder scanning)
    *
    !*/

    ## Allow certain file types
    !*.md
    !*.mdx

    ########################
    ## Same as in .gitignore
    ########################

    # (paste lines from .gitignore here)
    ```

1.  Optionally, configure package scripts and a [pre-commit hook](https://prettier.io/docs/en/precommit.html#__docusaurus) to make sure that all project files are always formatted.
    See example in [`njt` → `package.json`](https://github.com/kachkaev/njt/blob/master/package.json).
npm package: @kachkaev/prettier-config
Description: Works with [Prettier](https://www.npmjs.com/package/prettier) v3, Compatible with PNPM, Yarn and NPM. Uses default options. Includes:
Author: Alexander Kachkaev
Latest version: 2.2.1

# [@kachkaev](https://github.com/kachkaev) → prettier config

Works with [Prettier](https://www.npmjs.com/package/prettier) v3, Compatible with PNPM, Yarn and NPM.
Uses default options.
Includes:

- [prettier-plugin-packagejson](https://www.npmjs.com/package/prettier-plugin-packagejson)
- [prettier-plugin-sh](https://www.npmjs.com/package/prettier-plugin-sh)

## Adding to project

1.  Install the package:

    ```sh
    ## If you use NPM
    npm install -D @kachkaev/prettier-config
    
    ## If you use PNPM
    pnpm add -D @kachkaev/prettier-config
    
    ## If you use Yarn
    yarn add -D @kachkaev/prettier-config
    ```

1.  Open `package.json` and add the following line:

    ```json
    {
      "...": "...",

      "prettier": "@kachkaev/prettier-config"
    }
    ```

1.  Create `.prettierignore`.
    For example,

    ```ini
    ## Ignore all files (but still allow sub-folder scanning)
    *
    !*/

    ## Allow certain file types
    !*.css
    !*.js
    !*.json
    !*.jsx
    !*.md
    !*.mdx
    !*.ts
    !*.tsx
    !*.yaml
    !*.yml

    ## Allow certain files without extensions
    !.husky/*

    ## Disallow autogenerated files that are not mentioned in root .gitignore
    .husky/_/
    pnpm-lock.yaml
    ```

1.  Optionally, configure package scripts and a [pre-commit hook](https://prettier.io/docs/en/precommit.html#__docusaurus) to make sure that all project files are always formatted.
    See example in [`njt` → `package.json`](https://github.com/kachkaev/njt/blob/master/package.json).
npm package: @kachkaev/react-inline-js
Description: This package exports a React component you can use in your [Custom Next.js Document](https://nextjs.org/docs/advanced-features/custom-document). It accepts a string with the JavaScript code and minifies it with [`terser`](https://www.npmjs.com/package/ter
Author: Alexander Kachkaev
Latest version: 0.4.1
Deprecated: Unable to update `terser` dependency as it has become async. You can use `next/script` instead of this package inside Next.js apps: https://nextjs.org/docs/pages/api-reference/components/script

# React Inline JS

This package exports a React component you can use in your [Custom Next.js Document](https://nextjs.org/docs/advanced-features/custom-document).
It accepts a string with the JavaScript code and minifies it with [`terser`](https://www.npmjs.com/package/terser).
The result is memoised.

A common use case for the component would be the Google Analytics initialisation script the dark mode enabler – see [example repo](https://github.com/kachkaev/njt).

## Usage

```tsx
// pages/_document.js

import Document, { Html, Head, Main, NextScript } from "next/document";
import { InlineJs } from "@kachkaev/react-inline-js";

class MyDocument extends Document {
  static async getInitialProps(ctx) {
    const initialProps = await Document.getInitialProps(ctx);
    return { ...initialProps };
  }

  render() {
    return (
      <Html>
        <Head />
        <body>
          <InlineJs
            code={`
              // This code will be minified

              const message = "Hello world"
              console.log(message);
          `}
          />
          <Main />
          <NextScript />
        </body>
      </Html>
    );
  }
}

export default MyDocument;
```

Output for `InlineJs` component:

<!-- prettier-ignore -->
```html
<script>const message="Hello world";console.log(message);</script>
```

Note that using `<InlineJS />` is not allowed on the client, i.e. anywhere except `_document.js`.
To prevent accidental inclusion of `terser` in the client bundle, an error will be thrown.

It is not allowed to include `</script` in any part of your code as this may result a corrupt page.
If this string is
npm package: @kachurovskiy/generatorid
Description: --- ``` npm install @kachurovskiy/generatorid ``` * import package ``` const randomID = require('@kachurovskiy/generatorid'); or import randomID from '@kachurovskiy/generatorid' ```
Latest version: 1.0.3

# Unique ID generator

# Usage
---
```
npm install @kachurovskiy/generatorid
```
* import package
```
const randomID = require('@kachurovskiy/generatorid');
or
import randomID from '@kachurovskiy/generatorid'
```

```
randomID( _`number`_ - charsAmount ) returb _`string`_
```
npm package: @kachurun/storybook-solid
Description: Storybook SolidJS renderer
Latest version: 9.0.2
Deprecated: This package is deprecated. Use storybook-solidjs-vite instead: https://www.npmjs.com/package/storybook-solidjs-vite

# @kachurun/storybook-solid

SolidJS renderer for [Storybook](https://storybook.js.org/), used under the hood by [`@kachurun/storybook-solid-vite`](https://www.npmjs.com/package/@kachurun/storybook-solid-vite).

DEPRECATED: Use [`@kachurun/storybook-solid-vite`](https://www.npmjs.com/package/@kachurun/storybook-solid-vite) directly.

---

## 📖 License

MIT

Maintained by [@kachurun](https://github.com/kachurun)
npm package: @kachurun/storybook-solid-template
Description: **Note:** _This is a template used by the [`create-solid-storybook`](https://github.com/kachurun/create-solid-storybook) CLI to scaffold Storybook in your SolidJS project. It is not intended for direct use._
Author: kachurun
Latest version: 10.0.3

# SolidJS Storybook Template

**Note:** _This is a template used by the [`create-solid-storybook`](https://github.com/kachurun/create-solid-storybook) CLI to scaffold Storybook in your SolidJS project. It is not intended for direct use._

This template provides a ready-to-use Storybook setup for SolidJS, designed to help you quickly document, develop, and test your UI components.

## Features

- ⚡️ Pre-configured Storybook for SolidJS
- 🧩 Example stories and components
- 📁 Recommended directory structure
- 🔗 Easy integration with your SolidJS app
- 📖 **Interactive documentation** with MDX and Docs addon
- ♿️ **Accessibility checks** with A11y addon
- 🔗 **Component linking** with Links addon
- 🚀 **Onboarding experience** with Onboarding addon
- 🧪 **Integrated component testing** with Vitest addon
- 📝 **Automatic documentation** with Autodocs addon

## How to Use

If you're reading this, you likely already have this template in your project—either by running the [`create-solid-storybook`](https://github.com/kachurun/create-solid-storybook) CLI or by copying this folder manually.

> **Tip:** For the best experience and up-to-date configuration, we recommend using the CLI to scaffold Storybook in your SolidJS project.

### 1. Install Dependencies

Install the required dependencies:

```sh
npm install
# or
bun install
```

### 2. Run Storybook

Start Storybook locally:

```sh
npm run storybook
# or
bun run storybook
```

Open the provided URL in your browser to view your Storybook instance.

### 3. Explore and Customize

- Browse the example stories in the `stories/` directory.
- Add your own components and stories to the `stories/` directory.
- Update `.storybook/` configuration files as needed for your project.

## Directory Structure

- `.storybook/` – Storybook configuration files
- `stories/` – Example stories and components

## Learn More

- [Storybook for SolidJS Documentation](https://storybook.js.org/docs/solid)
- [SolidJS Documentation](https://www.solidjs.com/docs)

## Contributing

Contributions and feedback are welcome! Please open an issue or submit a pull request via the [`create-solid-storybook`](https://github.com/kachurun/create-solid-storybook) repository.

---

## 👤 Maintainer

Maintained with ❤️ by [@kachurun](https://github.com/kachurun)

---

## 📖 License

MIT
npm package: @kaciakmaciak/react-scripts-relay-modern
Description: Configuration and scripts for Create React App.
Latest version: 1.0.2

# react-scripts

This package includes scripts and configuration used by [Create React App](https://github.com/facebook/create-react-app).<br>
Please refer to its documentation:

* [Getting Started](https://github.com/facebook/create-react-app/blob/master/README.md#getting-started) – How to create a new app.
* [User Guide](https://github.com/facebook/create-react-app/blob/master/packages/react-scripts/template/README.md) – How to develop apps bootstrapped with Create React App.
npm package: @kaciras-blog/devtool
Description: Development tools for Kaciras Blog
Latest version: 2.6.3

# @kaciras-blog/devtool

Kaciras Blog 的开发套件，包含了构建配置，支持服务端渲染和热重载。

# 用法

```shell script
pnpm install @kaciras-blog/devtool
```

然后在 package.json 里加入：

```json
{
  "scripts": {
    "serve": "blog-devtool serve",
    "build": "blog-devtool build"
  }
}
```

* serve: 启动具有热重载功能的开发服务器

* build: 构建项目，可以使用 `--profile=` 指定配置文件
npm package: @kaciras-blog/media
Description: Media processor for Kaciras Blog
Latest version: 2.6.3

# @kaciras-blog/media

Kaciras Blog 的媒体处理库，支持图片、视频等资源的存储。

主要功能：

- 图片处理，包括裁剪、缩放、压缩等。

- 优化图片，并转码为多种新格式。

- 根据 Accept-* 头部自动选择最佳格式下载。

- 上传同一视频的多种编码版本，同样下载时返回最佳格式。

## 渐进升级策略

有两种策略可以用来对资源进行渐进升级：

* 前端选择：通过`<source>`指定多个 URL，浏览器自动忽略不支持的；还可以用 ServiceWorker 将请求重定向到优化版本。
* 后端选择：服务端通过请求信息比如 `Accept` 判断客户端支持哪些，然后选出最佳的。

后端选择通常具有更好的兼容性，例如构建图床服务，无需更改第三方网站的代码即可发送优化版本。但目前并非所有特性支持都能从请求中获取到，比如视频编码（hevc、av1）就不行。

这两种策略并不矛盾，可以同时使用，本项目设计时就以支持后端选择为目标。
npm package: @kaciras-blog/nativelib
Description: Node addon for Kaciras Blog
Author: Kaciras
Latest version: 0.3.2

[![Build Status](https://travis-ci.org/kaciras-blog/nativelib.svg?branch=master)](https://travis-ci.org/kaciras-blog/nativelib)
[![codecov](https://codecov.io/gh/kaciras-blog/nativelib/branch/master/graph/badge.svg?token=XBI5620UXW)](https://codecov.io/gh/kaciras-blog/nativelib)

Kaciras 博客的 Node 本地扩展，包含了一些需要在底层实现的功能。

## xxHash

[xxHash](https://github.com/Cyan4973/xxHash) 是一个非加密 Hash 函数系列，拥有很快的运算速度。本项包含 xxHash3_128 算法的 Node 扩展。

# 安装

```shell script
npm i @kaciras-blog/nativelib
```

默认情况将从 GitHub Release 上下载编译好的二进制文件，如果需要自己编译请添加`--no-prebuild`参数。

# 用法

## xxHash

使用跟 crypto 模块相似的 API：

```javascript
const { createXXH3_128 } = require("@kaciras-blog/nativelib");

console.log(createXXH3_128().update("xxhash").digest("hex"));
// 9c8b437c78cac00a376072e24bfdf4d2
```

使用快捷函数：

```javascript
const { xxHash3_128 } = require("@kaciras-blog/nativelib");

console.log(xxHash3_128("xxhash", "base64url")); // nItDfHjKwAo3YHLiS_300g
```

xxHash 算法非常快，故没有提供异步的版本。

## hashSum

计算一个对象的 Hash，底层使用 xxHash3_128 算法，返回 16 字节的 buffer 对象。该函数可以作为 [hash-sum](https://github.com/bevacqua/hash-sum) 的替代。

```javascript
const { hashSum } = require("@kaciras-blog/nativelib");

const hash = hashSum({
	a: 12345,
	b: null,
	c: ["foo", "bar"],
	d: { foo: true },
});

console.log(hash.toString("base64url")); // n2mK3P2WyGed560H01IaTA
```
npm package: @kaciras-blog/server
Description: Web page and assets server of Kaciras Blog
Latest version: 2.6.3

# @kaciras-blog/server

Kaciras Blog 的页面服务器，提供对网页、图片、视频、Sitemap、Feed 流等资源的处理，支持 Vue 的服务端渲染。

# 安装

```shell script
pnpm install @kaciras-blog/server
```

# 用法

* `blog-server run` 启动服务器，可以使用 `--profile=` 来指定配置文件

* `blog-server build-cache` 生成媒体资源的缓存，在迁移和恢复备份之后运行一次
npm package: @kaciras-blog/uikit
Description: Component library for kaciras blog
Latest version: 2.7.0

# @Kaciras-blog/uikit

Kaciras Blog 的组件库，包含一些通用的组件和函数，使用 Storybook 独立开发和测试。

[StoryBook 文档](https://kaciras-blog.github.io/uikit)

虽然是独立的库，但只是自己用用，没有推广的打算（UI 库太多了，完全不想竞争）。

# Install

```
pnpm install @Kaciras-blog/uikit
```

咋用：

```typescript
import UIKit from "@kaciras-blog/uikit";
import { createApp } from "vue";
import { createPinia } from "pinia";
import "@kaciras-blog/uikit/dist/style.css";
import App from './App.vue'

const store = createPinia();
const app = createApp(App);

app.use(store).use(UIKit).mount("body");
```