open-index/open-npm huggingface dataset:
npm package: @shlappas/balanced
Description: A generic self-balancing binary tree
Latest version: 1.0.1

# `balanced.js`

A simple generic module that allows the manipulation of binary tree nodes via
four rotation methods:

- single left (AVL "LL" rotation)
- single right (AVL "RR" rotation)
- double left (AVL "LR" rotation)
- double right (AVL "RL" rotation)

## Installation

Just install it with your favourit package manager!

### `yarn`

```bash
yarn add @shlappas/balanced
```

### `npm`

```bash
npm install @shlappas/balanced
```
npm package: @shlappas/itertools
Description: Some great tools for iteration inspired by python.
Latest version: 2.1.1

[![npm version](https://badge.fury.io/js/%40shlappas%2Fitertools.svg)](https://badge.fury.io/js/%40shlappas%2Fitertools)
[![Build Status](https://github.com/chrismilson/itertools.js/workflows/test/badge.svg)](https://github.com/chrismilson/itertools.js/actions)

# `itertools.js`

The python language (both python core and the `itertools` module) have great
support for daling with iterators and iterables. Sometimes the same
functionality would be nice to have in javascript and typescript.

This package implements some of the useful iterator-related functions in
typescript, so that you can get the same great readability as a python program,
all while keeping that juicy compile-time type safety.

## Installation

```bash
yarn add @shlappas/itertools
```

## API

Check out [the docs](http://shlappas.com/itertools.js/modules.html)! *Created
with [typedoc](https://github.com/TypeStrong/typedoc)*
npm package: @shlappas/rfg-api
Description: RealFaviconGenerator Node API
Author: Chris Milson
Latest version: 0.6.4

# rfg-api

Implementation of the [RealFaviconGenerator
API](http://realfavicongenerator.net/api) (specifically the [non-interactive
API](https://realfavicongenerator.net/api/non_interactive_api)) for
[Node.js](https://nodejs.org).

This API lets you create favicons for all platforms: desktop browsers, iOS,
Android, etc.

This rewrite attempts to clean up the original with some more documentation, and
is in typescript for added development pleasure.

## Install

### yarn

```bash
yarn add rfg-api
```

### npm

```bash
npm install rfg-api --save
```
npm package: @shlappas/rotating-tree
Description: Methods for rotating binary tree nodes
Latest version: 1.0.0

# `rotating-tree.js`

A simple generic module that allows the manipulation of binary tree nodes via
four rotation methods:

- single left (AVL "LL" rotation)
- single right (AVL "RR" rotation)
- double left (AVL "LR" rotation)
- double right (AVL "RL" rotation)

## Installation

Just install it with your favourite package manager!

### `yarn`

```bash
yarn add @shlappas/rotating-tree
```

### `npm`

```bash
npm install @shlappas/rotating-tree
```
npm package: @shlappas/sorted-array
Description: An array that keeps its elements in order
Latest version: 1.2.0

# Sorted Array

Sometimes you have an array that needs to be kept in order through pushes and
pops etc.

```js
// Becomes slow as arrays get larger. O(n log n)
arr.push(value)
arr.sort()

// May check all values; not binary search.
arr.indexOf(value)
```

This module provides an API similar to the builtin javascript `Array`, but
remains sorted after insertion and deletion.

```js
const arr = new SortedArray((a, b) => a - b)

// Each insert runs in O(log n)
arr.insert(5) // [ 5 ]
arr.insert(10) // [ 5 10 ]
arr.insert(1) // [ 1 5 10 ]
arr.insert(5) // [ 1 5 5 10 ]

arr.forEach((v) => console.log(v)) // 1 5 5 10
```

## Usage

Check out [the docs](http://shlappas.com/sorted-array.js)!

## Installation

```bash
yarn add @shlappas/sorted-array
```

## See Also

This modules is very similar to
[`sorted-set`](https://github.com/chrismilson/sorted-set.js). (both use a
weight-balanced tree in the background)
npm package: @shlappas/sorted-set
Description: A set that keeps its elements in order
Latest version: 1.2.0

# Sorted Set

Sometimes you have a set that needs to be iterated in order. However doing
something like this can be taxing on resources:

```js
// Not in order!
for (const value of set) { /* ... */ }

// Can be slow for large sets!
for (const value of [...set].sort()) { /* ... */ }
```

This module provides an API that implements the builtin javascript `Set`, but
can be iterated in order for much less overhead than sorting an array.

```js
const set = new SortedSet((a, b) => a - b)

set.add(3) // { 3 }
set.add(1) // { 1, 3 }
set.add(5) // { 1, 3, 5 }
set.add(2) // { 1, 2, 3, 5 }
set.add(2) // { 1, 2, 3, 5 }

console.log([...set]) // [1, 2, 3, 5]

// There are extra methods too!
console.log(arr.get(1)) // 2; The value that would be at index 1.
console.log(arr.bisect(3)) // 2; The index that 3 would be inserted into.
```

## Usage

Check out [the docs](http://shlappas.com/sorted-set.js/modules.html)!

## Installation

```bash
yarn add @shlappas/sorted-set
```
npm package: @shlee9999/react-useful-kit
Description: shlee9999's useful React components and Hooks
Author: shlee9999
Latest version: 1.0.0

# React + TypeScript + Vite

This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.

Currently, two official plugins are available:

- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) for Fast Refresh
- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh

## Expanding the ESLint configuration

If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules:

```js
export default tseslint.config([
  globalIgnores(['dist']),
  {
    files: ['**/*.{ts,tsx}'],
    extends: [
      // Other configs...

      // Remove tseslint.configs.recommended and replace with this
      ...tseslint.configs.recommendedTypeChecked,
      // Alternatively, use this for stricter rules
      ...tseslint.configs.strictTypeChecked,
      // Optionally, add this for stylistic rules
      ...tseslint.configs.stylisticTypeChecked,

      // Other configs...
    ],
    languageOptions: {
      parserOptions: {
        project: ['./tsconfig.node.json', './tsconfig.app.json'],
        tsconfigRootDir: import.meta.dirname,
      },
      // other options...
    },
  },
])
```

You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules:

```js
// eslint.config.js
import reactX from 'eslint-plugin-react-x'
import reactDom from 'eslint-plugin-react-dom'

export default tseslint.config([
  globalIgnores(['dist']),
  {
    files: ['**/*.{ts,tsx}'],
    extends: [
      // Other configs...
      // Enable lint rules for React
      reactX.configs['recommended-typescript'],
      // Enable lint rules for React DOM
      reactDom.configs.recommended,
    ],
    languageOptions: {
      parserOptions: {
        project: ['./tsconfig.node.json', './tsconfig.app.json'],
        tsconfigRootDir: import.meta.dirname,
      },
      // other options...
    },
  },
])
```
npm package: @shlinkio/data-manipulation
Description: Userland implementations of some data manipulation helpers extracted from ramda
Latest version: 1.0.4

# Shlink data manipulation

[![Build Status](https://img.shields.io/github/actions/workflow/status/shlinkio/data-manipulation/ci.yml?branch=main&logo=github&style=flat-square)](https://github.com/shlinkio/data-manipulation/actions/workflows/ci.yml?query=workflow%3A%22Continuous+integration%22)
[![Code Coverage](https://img.shields.io/codecov/c/gh/shlinkio/data-manipulation/main?style=flat-square)](https://app.codecov.io/gh/shlinkio/data-manipulation)
[![GitHub release](https://img.shields.io/github/release/shlinkio/data-manipulation.svg?style=flat-square)](https://github.com/shlinkio/data-manipulation/releases/latest)
[![GitHub license](https://img.shields.io/github/license/shlinkio/data-manipulation.svg?style=flat-square)](https://github.com/shlinkio/data-manipulation/blob/main/LICENSE)
[![Paypal Donate](https://img.shields.io/badge/Donate-paypal-blue.svg?style=flat-square&logo=paypal&colorA=cccccc)](https://slnk.to/donate)

Userland implementations of some data manipulation helpers extracted from ramda, while decoupling Shlink projects from that library.

The helpers are not design as in ramda, with a second optional argument and returning a curried function in that case.

Instead, they all expect all the arguments from the beginning and return a computed result.
npm package: @shlinkio/eslint-config-js-coding-standard
Description: Coding standard used by shlink JavaScript projects
Author: Alejandro Celaya
Latest version: 3.8.0

# Shlink - JS coding standard

[![npm](https://img.shields.io/npm/v/@shlinkio/eslint-config-js-coding-standard?style=flat-square)](https://www.npmjs.com/package/@shlinkio/eslint-config-js-coding-standard)
[![npm downloads](https://img.shields.io/npm/dt/@shlinkio/eslint-config-js-coding-standard?style=flat-square)](https://www.npmjs.com/package/@shlinkio/eslint-config-js-coding-standard)
[![GitHub license](https://img.shields.io/github/license/shlinkio/js-coding-standard.svg?style=flat-square)](https://github.com/shlinkio/js-coding-standard/blob/master/LICENSE)
[![Paypal Donate](https://img.shields.io/badge/Donate-paypal-blue.svg?style=flat-square&logo=paypal&colorA=cccccc)](https://acel.me/donate)

Coding standard used by Shlink JavaScript projects.

This library includes two ESLint configurations on their own entry points:

* `/base`: includes recommended eslint, typescript and imports rules
* `/react` includes recommended JSX accessibility, react, react hooks and react compiler rules.

The default entry point includes both of them:

```js
// eslint.config.js
import shlink from '@shlinkio/eslint-config-js-coding-standard';

export default [
  ...shlink,
  {
    // Other rules...
  }
];
```

If the project does not use React, you can just use the base config:

```js
// eslint.config.js
import baseConfig from '@shlinkio/eslint-config-js-coding-standard/base';

export default [
  ...baseConfig,
  {
    // Other rules...
  }
];
```

If you need to access react rules independently, use the `/react` entry point:

```js
// eslint.config.js
import reactConfig from '@shlinkio/eslint-config-js-coding-standard/react';

export default [
  ...reactConfig,
  {
    // Other rules...
  }
];
```
npm package: @shlinkio/shlink-frontend-kit
Description: React components and utilities for Shlink frontend projects
Latest version: 1.4.0

# Shlink frontend kit

React components and utilities for Shlink frontend projects

## Tailwind

This library provides tailwindcss-based components. To use them make sure you add the following instructions to your tailwind stylesheet:

```css
@import 'tailwindcss';

/* Add these two lines */
@source '../node_modules/@shlinkio/shlink-frontend-kit';
@import '@shlinkio/shlink-frontend-kit/tailwind.preset.css';
```
npm package: @shlinkio/shlink-js-sdk
Description: A Shlink's REST API client for JS runtimes: the browser, Node.js, Deno and Bun
Author: Alejandro Celaya
Latest version: 3.1.0

# Shlink JS SDK

[![Build Status](https://img.shields.io/github/actions/workflow/status/shlinkio/shlink-js-sdk/ci.yml?branch=main&logo=github&style=flat-square)](https://github.com/shlinkio/shlink-js-sdk/actions/workflows/ci.yml?query=workflow%3A%22Continuous+integration%22)
[![Code Coverage](https://img.shields.io/codecov/c/gh/shlinkio/shlink-js-sdk/main?style=flat-square)](https://app.codecov.io/gh/shlinkio/shlink-js-sdk)
[![GitHub release](https://img.shields.io/github/release/shlinkio/shlink-js-sdk.svg?style=flat-square)](https://github.com/shlinkio/shlink-js-sdk/releases/latest)
[![GitHub license](https://img.shields.io/github/license/shlinkio/shlink-js-sdk.svg?style=flat-square)](https://github.com/shlinkio/shlink-js-sdk/blob/main/LICENSE)
[![Paypal Donate](https://img.shields.io/badge/Donate-paypal-blue.svg?style=flat-square&logo=paypal&colorA=cccccc)](https://slnk.to/donate)

A Shlink REST API client for JavaScript runtimes: the browser, [Node.js](https://nodejs.org/), [Deno](https://deno.com/) and [Bun](https://bun.sh/).

## Installation

    npm i @shlinkio/shlink-js-sdk

## Docs

Read the documentation at [https://js-sdk.shlink.io](https://js-sdk.shlink.io)
npm package: @shlinkio/stylelint-config-css-coding-standard
Description: Coding standard used by Shlink projects for stylesheets
Author: Alejandro Celaya
Latest version: 1.1.1
Deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.

# Shlink - CSS coding standard

[![npm](https://img.shields.io/npm/v/@shlinkio/stylelint-config-css-coding-standard?style=flat-square)](https://www.npmjs.com/package/@shlinkio/stylelint-config-css-coding-standard)
[![npm downloads](https://img.shields.io/npm/dt/@shlinkio/stylelint-config-css-coding-standard?style=flat-square)](https://www.npmjs.com/package/@shlinkio/stylelint-config-css-coding-standard)
[![GitHub license](https://img.shields.io/github/license/shlinkio/css-coding-standard.svg?style=flat-square)](https://github.com/shlinkio/css-coding-standard/blob/master/LICENSE)
[![Paypal Donate](https://img.shields.io/badge/Donate-paypal-blue.svg?style=flat-square&logo=paypal&colorA=cccccc)](https://acel.me/donate)

Coding standard used by Shlink projects for stylesheets
npm package: @shlomi.api/claude-test-component
Description: Test HTML component for Claude artifacts
Author: Shlomi Schwartz
Latest version: 1.0.0

# Claude Test Component

A test HTML component that can be loaded in Claude artifacts via NPM and jsDelivr CDN.

## Features

- ✅ Styled with modern CSS (gradient background, animations)
- ✅ Interactive with JavaScript (click counter, alerts)
- ✅ Animated entrance effect
- ✅ Click handler demo with visual feedback
- ✅ Console logging for debugging

## Usage in Claude Artifacts

### Method 1: Direct Fetch and Inject

```javascript
async function loadComponent() {
    const url = 'https://cdn.jsdelivr.net/npm/@shlomi.api/claude-test-component@1.0.0/component.html';

    try {
        const response = await fetch(url);
        const html = await response.text();

        // Inject HTML
        document.getElementById('component-target').innerHTML = html;

        // Execute scripts
        const scripts = document.getElementById('component-target').getElementsByTagName('script');
        for (let script of scripts) {
            const newScript = document.createElement('script');
            newScript.textContent = script.textContent;
            script.parentNode.replaceChild(newScript, script);
        }

        console.log('✅ Component loaded!');
    } catch (error) {
        console.error('❌ Failed to load:', error);
    }
}

// Auto-load on page load
loadComponent();
```

### Method 2: Simple HTML

```html
<!DOCTYPE html>
<html>
<body>
    <div id="component-target"></div>

    <script>
        fetch('https://cdn.jsdelivr.net/npm/@shlomi.api/claude-test-component@1.0.0/component.html')
            .then(r => r.text())
            .then(html => {
                document.getElementById('component-target').innerHTML = html;
            });
    </script>
</body>
</html>
```

## CDN URLs

- **Latest version:** `https://cdn.jsdelivr.net/npm/@shlomi.api/claude-test-component@latest/component.html`
- **Specific version:** `https://cdn.jsdelivr.net/npm/@shlomi.api/claude-test-component@1.0.0/component.html`
- **NPM page:** `https://www.npmjs.com/package/@shlomi.api/claude-test-component`

## What This Demonstrates

This component proves that:
1. NPM packages can host HTML components
2. jsDelivr CDN can serve them reliably
3. Claude artifacts can fetch and render them
4. CSS styling is preserved
5. JavaScript functionality works
6. Interactive elements function properly

## Development

To update this component:

```bash
# Clone/edit the files
npm version patch  # or minor, major
npm publish --access public
```

## License

MIT

## Author

Shlomi Schwartz
npm package: @shlomoa/mat-image-carousel
Description: Angular standalone image carousel with Material styling and thumbnail selector.
Author: Shlomo Anglister
Latest version: 0.1.1

# @shlomoa/mat-image-carousel

`@shlomoa/mat-image-carousel` is a standalone Angular component library that delivers a polished, Material-inspired photo carousel with keyboard support, swipe gestures, thumbnail navigation, and optional selection metadata.

The library powers the demo app in this repository and can be installed independently in any Angular >= 17 project.

## Installation

```bash
npm install @shlomoa/mat-image-carousel
```

Make sure your project already depends on `@angular/material` (v20 or newer).

## Usage

Import the components you need directly into your standalone component:

```typescript
import { Component } from '@angular/core';
import { ImageCarouselComponent, SelectionDetailsComponent, CarouselImage } from '@shlomoa/mat-image-carousel';

@Component({
   selector: 'demo-shell',
   imports: [ImageCarouselComponent, SelectionDetailsComponent],
   template: `
      <image-carousel
         [images]="images"
         ariaLabel="Sample trip photos"
         (selectionChange)="selection = $event"
      />

      <selection-details
         [image]="selection?.image ?? null"
         [index]="selection?.index ?? null"
      />
   `,
})
export class DemoShellComponent {
   images: CarouselImage[] = [
      { src: 'https://picsum.photos/id/1015/1200/800', alt: 'Mountain lake' },
      { src: 'https://picsum.photos/id/1025/1200/800', alt: 'Puppy portrait' },
      // ...
   ];

   selection: { index: number; image: CarouselImage } | null = null;
}
```

### Optional exports

- `ImageCarouselComponent`: the main carousel with swipe gestures and navigation controls.
- `CarouselSelectorComponent`: thumbnail rail with wrap-around navigation.
- `SelectionDetailsComponent`: accessible announcement panel for the current selection.
- `UplevelComponent`: decorative Material button that emits an `activated` event.
- `CarouselImage`, `CarouselSelection`: shared TypeScript interfaces.

## Building & Testing

From the workspace root:

```bash
npm run build:lib   # ng build mat-image-carousel
npm run test        # runs both app and library karma suites
```

## Packaging

Generate a tarball you can sideload into another project:

```bash
npm run pack:lib
```

The command creates `dist/mat-image-carousel/shlomoa-mat-image-carousel-<version>.tgz`.

## Publishing

Publish the library to npm (requires an authenticated npm session):

```bash
npm run publish:lib
```

This script builds the library and publishes the contents of `dist/mat-image-carousel/` with `access=public`.

## License

Licensed under the [MIT License](../../LICENSE).
npm package: @shlomya/throttler
Description: Output throttling library
Author: Shlomy Amsalem
Latest version: 1.0.2

 <div align="center">
 <img align="center" width="230" src="https://i.imgur.com/iHgtvmg.png" />
  <h2>Typescript Library Boilerplate Basic</h2>
  <blockquote>Minimal Library Starter Kit for your Typescript projects</blockquote>
 
 <a href="https://www.npmjs.com/package/@hodgef/ts-library-boilerplate-basic"><img src="https://badgen.net/npm/v/@hodgef/ts-library-boilerplate-basic?color=blue" alt="npm version"></a> <a href="https://github.com/hodgef/ts-library-boilerplate"><img src="https://img.shields.io/github/last-commit/hodgef/ts-library-boilerplate" alt="latest commit"></a> <a href="https://github.com/hodgef/ts-library-boilerplate-basic/actions"><img alt="Build Status" src="https://github.com/hodgef/ts-library-boilerplate-basic/workflows/Build/badge.svg?color=green" /></a> <a href="https://github.com/hodgef/ts-library-boilerplate-basic/actions"> <img alt="Publish Status" src="https://github.com/hodgef/ts-library-boilerplate-basic/workflows/Publish/badge.svg?color=green" /></a>

<strong>For a plain Javascript alternative, check out [js-library-boilerplate-basic](https://github.com/hodgef/js-library-boilerplate-basic).</strong>

</div>

## ⭐️ Features

- Webpack 5
- Babel 7
- Hot reloading (`npm start`)
- Automatic Types file generation (index.d.ts)
- UMD exports, so your library works everywhere.
- Jest unit testing
- Customizable file headers for your build [(Example 1)](https://github.com/hodgef/ts-library-boilerplate-basic/blob/master/build/index.js) [(Example2)](https://github.com/hodgef/ts-library-boilerplate-basic/blob/master/build/css/index.css)
- Daily [dependabot](https://dependabot.com) dependency updates

## 📦 Getting Started

```
git clone https://github.com/hodgef/ts-library-boilerplate-basic.git myLibrary
npm install
```

## 💎 Customization

> Before shipping, make sure to:

1. Edit `LICENSE` file
2. Edit `package.json` information (These will be used to generate the headers for your built files)
3. Edit `library: "MyLibrary"` with your library's export name in `./webpack.config.js`

## 🚀 Deployment

1. `npm publish`
2. Your users can include your library as usual

### npm

```
import MyLibrary from 'my-library';
const libraryInstance = new MyLibrary();
...
```

### self-host/cdn

```
<script src="build/index.js"></script>

const MyLibrary = window.MyLibrary.default;
const libraryInstance = new MyLibrary();
...
```

## ✅ Libraries built with this boilerplate

> Made a library using this starter kit? Share it here by [submitting a pull request](https://github.com/hodgef/ts-library-boilerplate-basic/pulls)!

- [simple-keyboard](https://github.com/hodgef/simple-keyboard) - Javascript Virtual Keyboard
- [react-simple-keyboard](https://github.com/hodgef/react-simple-keyboard) - React Virtual Keyboard
- [simple-keyboard-layouts](https://github.com/hodgef/simple-keyboard-layouts) - Keyboard layouts for simple-keyboard
npm package: @shloswap/sdk
Description: 🛠 An SDK for building applications on top of Pancakeswap.
Latest version: 1.0.3

# Pancakeswap SDK

Forked from the [Uniswap SDK](https://github.com/Uniswap/uniswap-v2-sdk/commit/a88048e9c4198a5bdaea00883ca00c8c8e582605).

You can refer to the Uniswap SDK documentation [uniswap.org](https://docs.uniswap.org/sdk/2.0.0/).

## Running tests

To run the tests, follow these steps. You must have at least node v10 and [yarn](https://yarnpkg.com/) installed.

First clone the repository:

```sh
git clone https://github.com/pancakeswap/pancake-swap-sdk.git
```

Move into the pancakeswap-sdk working directory

```sh
cd pancakeswap-sdk/
```

Install dependencies

```sh
yarn install
```

Run tests

```sh
yarn test
```

You should see output like the following:

```sh
yarn run v1.22.4
$ tsdx test
 PASS  test/constants.test.ts
 PASS  test/pair.test.ts
 PASS  test/fraction.test.ts
 PASS  test/miscellaneous.test.ts
 PASS  test/entities.test.ts
 PASS  test/trade.test.ts

Test Suites: 1 skipped, 6 passed, 6 of 7 total
Tests:       3 skipped, 82 passed, 85 total
Snapshots:   0 total
Time:        5.091s
Ran all test suites.
✨  Done in 6.61s.
```
npm package: @shlroland/husky-config
Description: husky config for @shlroland/lint-config
Author: shlroland
Latest version: 2.1.1

### husky

#### config

follow the [husky](https://typicode.github.io/husky/) official documentation to config.
And copy the husky config from [`@shlroland/husky-config`](./packages/husky/index.ts) to your project.
npm package: @shm-open/code-push-server
Description: CodePush service is hotupdate services which adapter react-native-code-push and cordova-plugin-code-push
Author: shihuimiao
Latest version: 2.1.6

# CodePush 服务端

微软官方的 CodePush 在国内的网络访问较慢, 所以我们使用这个服务端来架设自己的 CodePush 服务

## 关于本项目

因为原 [code-push-server](https://github.com/lisong/code-push-server) 项目的作者没有积极维护了, 我们创建了这个项目用来:

-   保持依赖更新
-   修复任何与最新的客户端的兼容问题
-   我们只使用官方的 react-native-code-push 客户端, 所以定制的功能, 比如 [is_use_diff_text](https://github.com/lisong/code-push-server#advance-feature) 会被放弃.
-   我们只在生产环境使用了 react-native-code-push, 对于其他的 CodePush 客户端, 大部分功能应该没有差别, 如果遇到任何问题的话, 都欢迎提交 issue 或者 PR.

## 支持的存储方式

-   local: 在本地硬盘存储包文件
-   qiniu: 在[七牛云](http://www.qiniu.com/)存储包文件
-   s3: 在[aws](https://aws.amazon.com/)存储包文件
-   oss: 在[阿里云](https://www.aliyun.com/product/oss)存储包文件
-   tencentcloud: 在[腾迅云](https://cloud.tencent.com/product/cos)存储包文件

## 正确使用 code-push 热更新

-   苹果 App 允许使用热更新[Apple's developer agreement](https://developer.apple.com/programs/ios/information/iOS_Program_Information_4_3_15.pdf), 为了不影响用户体验，规定必须使用静默更新。 Google Play 不能使用静默更新，必须弹框告知用户 App 有更新。中国的 android 市场必须采用静默更新（如果弹框提示，App 会被“请上传最新版本的二进制应用包”原因驳回）。
-   react-native 不同平台 bundle 包不一样，在使用 code-push-server 的时候必须创建不同的应用来区分(eg. CodePushDemo-ios 和 CodePushDemo-android)
-   react-native-code-push 只更新资源文件,不会更新 java 和 Objective C，所以 npm 升级依赖包版本的时候，如果依赖包使用的本地化实现, 这时候必须更改应用版本号(ios 修改 Info.plist 中的 CFBundleShortVersionString, android 修改 build.gradle 中的 versionName), 然后重新编译 app 发布到应用商店。
-   推荐使用 code-push release-react 命令发布应用，该命令合并了打包和发布命令(eg. code-push release-react CodePushDemo-ios ios -d Production)
-   每次向 App Store 提交新的版本时，也应该基于该提交版本同时向 code-push-server 发布一个初始版本。(因为后面每次向 code-push-server 发布版本时，code-puse-server 都会和初始版本比较，生成补丁版本)

### CodePush 命令行

[code-push-cli](https://github.com/shm-open/code-push-cli) 是用来管理 App 以及发布 CodePush 版本的, 请查看命令行项目的说明了解更多

### 客户端

-   [React Native](https://github.com/Microsoft/react-native-code-push)
-   [Cordova](https://github.com/microsoft/cordova-plugin-code-push)
-   [Capacitor](https://github.com/mapiacompany/capacitor-codepush)

## 如何安装 code-push-server

-   [Docker](./docs/install-server-by-docker.cn.md) (推荐)
-   [直接安装](./docs/install-server.md)

## 默认帐号和密码

-   帐号: `admin`
-   密码: `123456`

## 常见问题

-   [修改密码](https://github.com/lisong/code-push-server/issues/43)
-   [code-push-server 使用+一些需要注意的地方](https://github.com/lisong/code-push-server/issues/135)
-   支持的 targetBinaryVersion
    -   `*`
    -   `1.2.3`
    -   `1.2`/`1.2.*`
    -   `1.2.3 - 1.2.7`
    -   `>=1.2.3 <1.2.7`
    -   `~1.2.3`
    -   `^1.2.3`
npm package: @shm-open/eslint-config-bundle
Description: 基于 [Airbnb 配置](https://airbnb.io/javascript/)的 ESLint 配置捆绑包, 含 [Typescript](https://www.typescriptlang.org/)和[Prettier](https://prettier.io/) 支持
Latest version: 1.9.13

# ESLint Config Bundle ![Node.js CI](https://github.com/shm-open/eslint-config-bundle/workflows/Node.js%20CI/badge.svg)

基于 [Airbnb 配置](https://airbnb.io/javascript/)的 ESLint 配置捆绑包, 含 [Typescript](https://www.typescriptlang.org/)和[Prettier](https://prettier.io/) 支持

## 为什么要用捆绑包

捆绑包里包含了 ESLint + 插件和配置文件. 我们知道业界常见的做法是只发布配置文件, 但是我们注意到配置文件和插件往往会绑定到指定的 ESLint 版本, 而维护配置文件与 ESLint 和插件的版本兼容对于最终使用的工程项目来说是一件麻烦的事, 所以我们把固定版本的 ESLint, 插件以及配置文件放在一起发布, 保证它们之间的兼容性

## 安装

推荐考虑安装[EditorConfig](https://editorconfig.org/)与这个捆绑包一起使用, Prettier 也会尊重 EditorConfig 的一些基础设置, 所以我们在 Prettier 没有设 `indent_size`, 把它们留给 EditorConfig

### 作为 npm 开发依赖安装

```
$ npm install @shm-open/eslint-config-bundle --save-dev
```

### 在项目的根目录下创建 .eslintrc.js, .prettierrc.js 文件, 内容如下

注意: 如果项目的类型是`module`, 可能会需要把扩展名改成 `.cjs`

-   .prettierrc.js

```
module.exports = require('@shm-open/eslint-config-bundle/prettier');
```

-   .eslintrc.js - 基础的 ts/js 项目

```
module.exports = {
    extends: ['@shm-open/eslint-config-bundle']
}
```

-   .eslintrc.js - React 项目

```
module.exports = {
    extends: ['@shm-open/eslint-config-bundle/react']
}
```

-   .eslintrc.js - React Native 项目

```
module.exports = {
    extends: ['@shm-open/eslint-config-bundle/react-native']
}
```

-   .eslintrc.js - Taro 项目

```
module.exports = {
    extends: ['@shm-open/eslint-config-bundle/taro']
}
```
npm package: @shm-open/react-native-wechat
Description: react-native library for wechat app
Author: shihuimiao
Latest version: 1.3.0

# react-native-wechat ![Node.js CI](https://github.com/shm-open/react-native-wechat/workflows/Node.js%20CI/badge.svg)

[React Native] bridging library that integrates WeChat SDKs

本库是在 [react-native-wechat](https://github.com/yorkie/react-native-wechat) 基础上进行重写; 优化了类型定义，方法调用，并且使用`CocoaPods`和`gradle`来管理原生模块依赖的`wechat SDK`.

## Table of Contents

-   [Getting Started](#getting-started)
-   [API Documentation](#api-documentation)
-   [Installation](#installation)
-   [Community](#community)
-   [Authors](#authors)
-   [License](#license)

## Getting Started

`$ npm install @shm-open/react-native-wechat`

-   [Build setup on iOS](./docs/build-setup-ios.md)
-   [Build setup on Android](./docs/build-setup-android.md)

## API Documentation

[react-native-wechat] uses Promises, therefore you can use `Promise`
or `async/await` to manage your dataflow.

#### registerApp(appId, universalLink)

-   `appId` {String} the appId you get from WeChat dashboard
-   `universalLink` {String} the iOS universalLink setting
-   returns {Boolean} explains if your application is registered done

This method should be called once globally.

```js
import * as WeChat from 'react-native-wechat';

WeChat.registerApp('your wxid', 'your universal setting');
```

#### isWXAppInstalled()

-   returns {Boolean} if WeChat is installed.

Check if the WeChat app is installed on the device.

#### isWXAppSupportApi()

-   returns {Boolean} Contains the result.

Check if wechat support open url.

#### getApiVersion()

-   returns {String} Contains the result.

Get the WeChat SDK api version.

#### openWXApp()

-   returns {Boolean}

Open the WeChat app from your application.

#### sendAuthRequest(scope, state)

-   `scope` {String} Scopes of auth request.
    snsapi_userinfo or snsapi_base
-   `state` {String} 用于保持请求和回调的状态，授权请求后原样带回给第三方
-   returns {Object}

Send authentication request, and it returns an object with the
following fields:

| field   | type   | description                         |
| ------- | ------ | ----------------------------------- |
| errCode | Number | Error Code                          |
| errStr  | String | Error message if any error occurred |
| code    | String | Authorization code                  |
| state   | String | state_wx_login                      |

#### pay(payload)

-   `partnerId` {String} 商家向财付通申请的商家 id
-   `prepayId` {String} 预支付订单 ID
-   `nonceStr` {String} 随机串，防重发
-   `timeStamp` {String} 时间戳，防重发
-   `package` {String} 商家根据财付通文档填写的数据和签名
-   `sign` {String} 商家根据微信开放平台文档对数据做的签名
-   returns {Object}

Sends request for proceeding payment, then returns an object:

| name    | type   | description                         |
| ------- | ------ | ----------------------------------- |
| errCode | Number | 0 if pay successed                  |
| errStr  | String | Error message if any error occurred |

## Installation

```sh
$ npm install react-native-wechat --save
```

## License

MIT
npm package: @shm-open/utilities
Description: common utilities
Latest version: 1.13.3

# Utilities ![Node.js CI](https://github.com/shm-open/utilities/workflows/Node.js%20CI/badge.svg)

lightweight common utilities lib in es6 module

## Install

`npm install --save @shm-open/utilities`

## common utilities

`import { * } from '@inno/utilities'`

-   [function: nullFunction](src/function.ts)
-   [listener: utitiles for creating a event listener subject (which supports to add/remove listener)](src/listener.ts)
-   [number: format number for display](src/number.ts)
-   [sampling: smooth samling tool for calculate average values](src/sampling.ts)
-   [tree: utilities for tree data structure](src/tree.ts)
-   [types: utilities for deal with TypeScript types](src/types.ts)
-   [url: utilities for handle url parse and compose](src/url.ts)
-   [version: handle version compare for version strings](src/version.ts)

## react hooks/utilities

`import { * } from '@inno/utilities/lib/react'`

-   [ComposeProviders](src/react/ComposeProviders.ts)
-   [useCallbackProxy](src/react/useCallbackProxy.ts)
-   [useIsMountedRef](src/react/useIsMountedRef.ts)
-   [usePrevious](src/react/usePrevious.ts)
-   [useRefWrapper](src/react/useRefWrapper.ts)
-   [useSyncState](src/react/useSyncState.ts)
-   [useUpdateEffect](src/react/useUpdateEffect.ts)
-   [withClassComponentWrapper](src/react/withClassComponentWrapper.ts)
npm package: @shmarts/vaul-svelte
Description: Everything you need to build a Svelte library, powered by [`create-svelte`](https://github.com/sveltejs/kit/tree/main/packages/create-svelte).
Latest version: 1.0.0-next.7

# create-svelte

Everything you need to build a Svelte library, powered by [`create-svelte`](https://github.com/sveltejs/kit/tree/main/packages/create-svelte).

Read more about creating a library [in the docs](https://kit.svelte.dev/docs/packaging).

## Creating a project

If you're seeing this, you've probably already done this step. Congrats!

```bash
# create a new project in the current directory
npm create svelte@latest

# create a new project in my-app
npm create svelte@latest my-app
```

## Developing

Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server:

```bash
npm run dev

# or start the server and open the app in a new browser tab
npm run dev -- --open
```

Everything inside `src/lib` is part of your library, everything inside `src/routes` can be used as a showcase or preview app.

## Building

To build your library:

```bash
npm run package
```

To create a production version of your showcase app:

```bash
npm run build
```

You can preview the production build with `npm run preview`.

> To deploy your app, you may need to install an [adapter](https://kit.svelte.dev/docs/adapters) for your target environment.

## Publishing

Go into the `package.json` and give your package the desired name through the `"name"` option. Also consider adding a `"license"` field and point it to a `LICENSE` file which you can create from a template (one popular option is the [MIT license](https://opensource.org/license/mit/)).

To publish your library to [npm](https://www.npmjs.com):

```bash
npm publish
```
npm package: @shmaxi/excel-mcp-server
Description: Excel MCP Server for manipulating Excel files - Node.js implementation
Author: shmaxi
Latest version: 0.1.0

# Excel MCP Server (Node.js)

Excel MCP Server for manipulating Excel files - Node.js implementation with npx support.

## Installation

You can run this server using npx without installing:

```bash
npx @shmaxi/excel-mcp-server stdio
```

Or install globally:

```bash
npm install -g @shmaxi/excel-mcp-server
excel-mcp-server stdio
```

## Usage

### Stdio Transport (Local Integration)

```json
{
  "mcpServers": {
    "excel": {
      "command": "npx",
      "args": ["@shmaxi/excel-mcp-server", "stdio"]
    }
  }
}
```

### SSE Transport (Remote Connections)

```bash
FASTMCP_PORT=8000 npx @shmaxi/excel-mcp-server sse
```

## Available Tools

### Workbook Operations
- `create_workbook` - Create a new Excel workbook
- `get_workbook_metadata` - Get metadata about an Excel workbook

### Data Operations
- `write_data_to_excel` - Write data to a worksheet
- `read_data_from_excel` - Read data from a worksheet

### Formatting Operations
- `format_range` - Apply formatting to a range of cells
- `merge_cells` - Merge a range of cells
- `unmerge_cells` - Unmerge previously merged cells
- `apply_formula` - Apply a formula to a cell

### Chart Operations
- `create_chart` - Create a chart in the worksheet
- `create_pivot_table` - Create a pivot table

### Worksheet Operations
- `create_worksheet` - Create a new worksheet
- `copy_worksheet` - Copy a worksheet
- `delete_worksheet` - Delete a worksheet
- `rename_worksheet` - Rename a worksheet

### Range Operations
- `copy_range` - Copy a range of cells
- `delete_range` - Delete a range of cells
- `validate_excel_range` - Validate if a range reference is valid
- `validate_formula_syntax` - Validate Excel formula syntax

## Development

```bash
# Install dependencies
npm install

# Build
npm run build

# Run in development mode
npm run dev stdio
```

## License

MIT
npm package: @shmg/umf
Description: The Universal Metadata Format
Latest version: 1.0.5

# UMF TypeScript Parser

The TypeScript Implementation of the [Universal Media Format](https://github.com/shmg-org/umf-specification).

## Example

```typescript
import { parse } from '@shmg/umf'

const source = `UMF TypeScript Parser

[ Github ]
Author: IceBrick
Language: TypeScript`

const metadata = parse(source)

console.log(metadata.get('Github', 'Author'))
```

## Installation

The package is available on [npm](https://www.npmjs.com/package/@shmg/umf). You can install it using npm or your desired package manager:

```bash
npm install @shmg/umf
```

## License

This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.
npm package: @shmi/helper
Description: Firebase Functions Helpers
Author: Maxim Shubin
Latest version: 1.0.10

# Serve HTTP requests to Firebase easy. Turn object schema to RESTful API for FireStore.
- Let's imagine that you have firebase function
```typescript
export const rest = functions.https.onRequest(app);
```
- Where
```
app
```
is express.Application which built by class of this pkg like
```typescript
new App(
    corsHandler,
    bodyParser.json(),
    bodyParser.urlencoded({extended: false})
)
    .attachRoute(crud)
    .app
```
-  Where
```
crud
```
is
```
(a: express.Application) => void
```
and equivalent to following code
```typescript
import * as express from "express";
import {CrudEntity} from "../dto/crud-entity";
import {admin} from "../../admin";
import {authenticate, sendEmail} from "../middleware";
import {FirestoreCrud, rbm, dto} from "@shmi/helper";

export class crudEntity extends dto.Computed {
    public id?: string = undefined;
    public title?: string = undefined;
    public toThisFieldName?: string = undefined;
}

export default function crud(app: express.Application) {
    const rb = new rbm.RestBehaviorManager();
    const fsCrud = new FirestoreCrud(admin, rb);

    const crudEntity = new CrudEntity();
    crudEntity.ioMap = {transformThisFieldName: 'toThisFieldName'}; // mapping schema
    crudEntity.validator = () => true; // your custom validator

    const auth = new rbm.PrioritizedHandler(authenticate, 1);
    const emailOnCreated = new rbm.PrioritizedHandler(sendEmail, 200);

    fsCrud.attachEntity(crudEntity) // Priority = 100 (2d in execute chain)
        .attachMiddleware(crudEntity, 'post', auth) // Priority = 1 (1t in execute chain)
        .attachMiddleware(crudEntity, 'post', emailOnCreated); // Priority = 200 (3th in execute chain)

    app.all('/crud' + rbm.RestBehaviorManager.reqRoutPathPart, rb.requestHandler());
}
```
Where
```
CrudEntity
```
class must be extended from
```
dto.Computed
```
- that's it, we are ready to accept http requests like this
```
Request:
POST /firebase-project-id/region/rest/crud/crud-entity
Content-Type: application/json
Authorization: Bearer JWT

{"transformThisFieldName":"content"}

Response:
{"id":"uuid | firestoreRandom", :"transformThisFieldName":"content"}

FireStore will get new raw in 'crud-entity' collection:
{"id":"uuid | firestoreRandom", :"toThisFieldName":"content"}
```