open-index/open-npm huggingface dataset:
npm package: @lxdao/uploader3
Description: [![npm version](https://badge.fury.io/js/%40lxdao%2Fuploader3.svg)](https://badge.fury.io/js/%40lxdao%2Fuploader3) [![npm downloads](https://img.shields.io/npm/dm/%40lxdao%2Fuploader3.svg)](https://www.npmjs.com/package/%40lxdao%2Fuploader3)
Latest version: 1.5.4

# Uploader3

[![npm version](https://badge.fury.io/js/%40lxdao%2Fuploader3.svg)](https://badge.fury.io/js/%40lxdao%2Fuploader3)
[![npm downloads](https://img.shields.io/npm/dm/%40lxdao%2Fuploader3.svg)](https://www.npmjs.com/package/%40lxdao%2Fuploader3)

Uploader3 is a React-based Web3 image upload component that supports multiple image uploads, image cropping, and uploading images to Web3 Storage providers (like IPFS). There are two ways for uploading, by using a backend API or the Uploader3 Connector.

**Features**

- Supports cropping
- Supports uploading to web3 service providers, such as NFT.storage

## Usage

```js copy
import { Uploader3 } from '@lxdao/uploader3';
```

## Props

| Prop         | Type                        | Description                            | Default                                  |
| ------------ | --------------------------- | -------------------------------------- | ---------------------------------------- |
| accept       | `string`                    | image accept file type                 | `['.png','.jpeg','.jpg','.gif', '.svg']` |
| multiple     | `boolean`                   | multiple image upload                  | `false`                                  |
| api          | `string`                    | endpoint upload api url, post method   | `''`                                     |
| headers      | `object`                    | http headers to post api               |                                          |
| connector    | `object`                    | create by uploader3-connector          |                                          |
| crop         | [`Crop`](#crop) / `boolean` | crop config, set `false` disabled crop | `true`                                   |
| onChange     | `function`                  | callback when files selected           |                                          |
| onUpload     | `function`                  | callback when file uploading           |                                          |
| onComplete   | `function`                  | callback when file uploaded            |                                          |
| onCropEnd    | `function`                  | callback when crop end                 |                                          |
| onCropCancel | `function`                  | callback when crop cancel              |                                          |

> `api` and `connector` are mutually exclusive, if both are provided, `api` will be used. must be provided one of them.

## Types reference

### Crop

```ts
type Crop = {
  size: { width: number; height: number };
  aspectRatio: number;
};
```
npm package: @lxdao/uploader3-connector
Description: [![npm version](https://badge.fury.io/js/%40lxdao%2Fuploader3-connector.svg)](https://badge.fury.io/js/%40lxdao%2Fuploader3-connector) [![npm downloads](https://img.shields.io/npm/dm/%40lxdao%2Fuploader3-connector.svg)](https://www.npmjs.com/package/%40lx
Latest version: 1.2.0

# uploader3-connector

[![npm version](https://badge.fury.io/js/%40lxdao%2Fuploader3-connector.svg)](https://badge.fury.io/js/%40lxdao%2Fuploader3-connector)
[![npm downloads](https://img.shields.io/npm/dm/%40lxdao%2Fuploader3-connector.svg)](https://www.npmjs.com/package/%40lxdao%2Fuploader3-connector)

Uploader3 Connector is a connector for Uploader3]. Currently, it only supports [NFT.storage](http://NFT.storage) IPFS service provider.

Supported service provider

- [NFT.storage](https://nft.storage/)

> Support Img3 and list here? Contact [@muxin](https://twitter.com/muxin_eth) or create a ticket in [LXDAO
> DC](https://discord.lxdao.io).

## Usage

```js copy
import { createConnector } from '@lxdao/uploader3-connector';
```

## API

### createConnector

Create a connector for Uploader3 upload service.

```ts
export const createConnector: (service: 'NFT.storage', options: { token: string }) => Connector;
```

## Types reference

### Connector

```ts
interface PostImageFile {
  /** base64 encoded image file */
  data: string;
  /** file type */
  type: 'image/png' | 'image/jpeg' | 'image/gif' | 'image/jpg';
}

export type Connector = {
  postImage: (image: PostImageFile) => Promise<{ cid: string; url: string }>;
};
```
npm package: @lxf2513/mkdir-recursive
Description: Recursively creates a directory. Returns undefined or the first directory path created.
Author: lxf
Latest version: 1.3.2

# mkdir-recursive
Recursively creates a directory. Returns undefined or the first directory path created.

## Installation

```js
npm @lxf2513/mkdir-recursive
```

## Usage

```js
// sync
import { mkdirSyncRecursive } from '@lxf2513/mkdir-recursive'

const path = mkdirSyncRecursive('/path/source')

const paths = mkdirSyncRecursive(['test', 'build/scripts', 'test/html'])

// async
import { mkdirAsyncRecursive } from '@lxf2513/mkdir-recursive'

const path = await mkdirAsyncRecursive('/path/source')
```
npm package: @lxf2513/node-mv
Description: The 'mv' command implementation for nodejs.It will create all the necessary directories and destination file which not exist.
Author: lxf
Latest version: 1.3.2

# node-mv
The 'mv' command implementation for nodejs.It will create all the necessary directories and destination file which not exist.

## Installation

```js
npm install @lxf2513/node-mv
```

## Usage

```js
import { mv } from '@lxf2513/node-mv'
// or
import { createRequire } from 'node:module'
const require = createRequire(import.meta.url)
const { mv } = require('@lxf2513/node-mv')

mv(source, dest, options?)

mv([source1, source2], dest, options?)

*/
```

## Options

* `clobber`: If the destination exists, overwrite it, default `true`
* `mkdirp`: It first created all the necessary directories recursively, default `false`

### Command Line Interface

```
Usage: nodemv [OPTION]... SOURCE... DIRECTORY
Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY.

  -h, --help         display this help and exit
  -v, --version      output version information and exit
  -n, --no-clobber   do not overwrite an existing file
  --mkdirp           make the dest directory recursively if it not exist
npm package: @lxf2513/readdir-sync-recursive
Description: Reads the contents of the directory synchronously and recursively.
Author: lxf
Latest version: 1.3.3

# readdir-sync-recursive
Reads the contents of the directory synchronously and recursively.

Like `fs.readdirSync('/path/source', { recursive: true })`.Compatible with lower versions of nodejs.

Return `[]` if the path not exist or not a directory

## Installation

```js
npm install @lxf2513/readdir-sync-recursive
```

## Usage

```js
import readdirSyncRecursive from '@lxf2513/readdir-sync-recursive'

readdirSyncRecursive('/path/source')

readdirSyncRecursive('/path/source', 'relativePath')

readdirSyncRecursive('/path/source', 'absolutePath')
```
npm package: @lxf2513/vue-use-clipboard
Description: Reactive Clipboard API for Vue3.
Author: lxf
Latest version: 1.2.1

# vue-use-clipboard
Reactive [Clipboard API](https://developer.mozilla.org/en-US/docs/Web/API/Clipboard_API) for Vue3

Reference - [vueuse useClipboard](https://vueuse.org/core/useClipboard/)
npm package: @lxf2513/vue3-clipboard
Description: clipboard for vue3
Latest version: 1.3.0

# vue3-clipboard

A simple vuejs 3 binding for clipboard.js, based on [Inndy/vue-clipboard2](https://github.com/Inndy/vue-clipboard2)

## Install

`npm install @lxf2513/vue3-clipboard` or use `<script type="module">` without npm

## Usage

For vite user:

```javascript
import { createApp } from 'vue'
import { VueClipboard } from '@lxf2513/vue3-clipboard'

const app = createApp({})

app.use(VueClipboard)
```

For standalone usage:

```html
<html>
<head>
  <script src="https://cdn.jsdelivr.net/npm/vue@3.5.12/dist/vue.global.prod.min.js"></script>
</head>
<body>
  <button onclick="module.copy()">Copy</button>
  <script type="module">
  import { copyText } from 'https://cdn.jsdelivr.net/npm/@lxf2513/vue3-clipboard@1.1.0/+esm'
  function copy() {
    copyText('https://github.com/luoxiangfan/vue3-clipboard', undefined, (success, evt) => {
      console.log(success) // true or false
      console.log(evt) // Clipboard Event
    })
  }
  module.copy = copy
  </script>
  <script>
    const module = {}
  </script>
</body>
</html>
```

## I want to copy texts without a specific button!

`container` option is available like this:

In Options API:

```js
const container = this.$refs.container
this.$copyText((text: 'https://github.com/luoxiangfan/vue3-clipboard'), container)
```

In Composition API:

```js
import { copyText } from '@lxf2513/vue3-clipboard'
import { ref } from 'vue'

const container = ref(null)
copyText('https://github.com/luoxiangfan/vue3-clipboard', container.value)
```

Or you can let `@lxf2513/vue3-clipboard` set `container` to current element by doing this:

```js
import { createApp } from 'vue'
import { VueClipboard } from '@lxf2513/vue3-clipboard'

const app = createApp({})

app.use(VueClipboard, {
  autoSetContainer: true,
  appendToBody: true,
})
```

## Sample 1

```html
<template>
  <div class="container">
    <button
      v-clipboard:copy="message"
      v-clipboard:success="handleSuccess"
      v-clipboard:error="handleError"
    >
      Copy
    </button>
  </div>
</template>

<script setup>
  const message = 'https://github.com/luoxiangfan/vue3-clipboard'
  const handleSuccess = (e) => {
    alert('Copied text: ' + e.text)
  }
  const handleError = (e) => {
    alert('Copy failed')
  }
</script>
```

## Sample 2

```html
<template>
  <div class="container">
    <button
      @click="$copyText('https://github.com/luoxiangfan/vue3-clipboard')"
    >
      Copy
    </button>
  </div>
</template>
```

## Sample 3

```html
<template>
  <div class="container">
    <button type="button" @click="copy">Copy</button>
  </div>
</template>

<script setup>
  import { copyText } from '@lxf2513/vue3-clipboard'

  const copy = () => {
    copyText('https://github.com/luoxiangfan/vue3-clipboard', undefined, (success, evt) => {
      console.log(success) // true or false
      console.log(evt) // Clipboard Event
    })
  }
</script>
```
npm package: @lxfater/node-wmi
Description: Library to execute wmi (Windows Management Instrumentation) commands.
Author: JP Grusling
Latest version: 0.0.5

# node-wmi
Library to execute wmi (Windows Management Instrumentation) commands.

## Install
```bash
npm install node-wmi
```
## Documentation
__Methods__

 * [`node-wmi#Query()`](#query)

### <a name="query"></a>Query([options, callback])
Constructor that generates an instance of the Query class.

__Arguments__
 * [`options`](#query_object) - Object representing options for the query. Options can also be applied via chain api. (*optional*)
 * [`callback(err, result)`](#query_callback) - Callback. If not supplied query will not be executed until query.exec() method has been called. (*optional*)

__Return Value__
The Query method returns an instance of the query class.

<a name="query_object"></a>__Options Properties__

 * `host` (type: string) - Hostname or IP of the client to get information from. Defaults to `localhost`.
 * `namespace` (type: string) - Namespace of the class to query. Defaults to `root\CIMV2`.
 * `class` (type:string) - Class to be queried for information. (*required*)
 * `properties`/`props` (type: [string])- List of properties of the class to query for. If not set, all properties will be returned for the given class. (*optional*)
 * `username` (type: string) - Username to use to perform query. (*optional*)
 * `password` (type: string) - Password for the above username. (*optional*)
 * `where` (types: string, [string]) - Where clause for the query. The where clause can come in multiple different types. If you pass in a string, it will be accepted as a literal text to go in the where clause. If you pass in an array of strings, they will be And'ed together. (*optional*)

__Chainable API__
Chainable api methods exists to set each property for the query. To use the chainable api, call the method of the name of the property which you would like to set with the first argument being the value of the property and an *optional* second argument being a callback function to execute the query.

<a name="query_callback"></a>__Callback__
The callback has the signature of (err, result). The callback can be supplied as the second argument to either the constructor or any of the chainable functions. The callback is the first and only parameter for the exec method.

__Examples__
```javascript
// Object usage

var wmi = require('node-wmi');
wmi.Query({
  class: 'Win32_BIOS'
}, function(err, bios) {
  console.log(bios);
});
```

```javascript
// Chainable API reference with exec method

var wmi = require('node-wmi');
wmi.Query().class('Win32_BIOS').exec(function(err, bios) {
  console.log(bios);
});
```

```javascript
// Using callback in chainable api

var wmi = require('node-wmi');
wmi.Query().class('Win32_LogicalDisk', function(err, disks) {
  console.log(disks);
});
```
npm package: @lxfater/win-mouse
Description: Mouse tracking for Windows
Latest version: 2.0.2

# win-mouse

[![Build status](https://ci.appveyor.com/api/projects/status/wj9wy01q1ufhmfns?svg=true)](https://ci.appveyor.com/project/kapetan/win-mouse)

Mouse tracking for Windows. Receive the screen position of various mouse events. The events are also emitted while another application is in the foreground.

Versions of this library prior to version 2.0.0 also run with Node.js version 9 and below. Version 2.0.0 and above are context-aware.

	npm install win-mouse

# Important 
This package tries to request the addon.cc directly to enable the node-loader. 
This package need rebuild under the electron environment.
# Usage

The module returns an event emitter instance.

```javascript
var mouse = require('win-mouse')()

mouse.on('move', function(x, y) {
	console.log(x, y)
})
```

The program will not terminate as long as a mouse listener is active. To allow the program to exit, either call `mouse.unref` (works as `unref`/`ref` on a TCP server) or `mouse.destroy()`.

The events emitted are: `move`, `left-down`, `left-up`, `left-drag`, `right-up`, `right-down` and `right-drag`. For each event the screen coordinates are passed to the handler function.
npm package: @lxfater/windows-electron-drag
Description: Window dragging for electron applications
Latest version: 3.0.1

# electron-drag

Improved window dragging for `Electron` applications.

Frameless windows can be dragged using the [-webkit-app-region][region] css property, but this disables all regular dom events and user interactions with the affected element, which makes it hard to emulate a native-like title bar in the application, as it's not possible to capture double clicks for maximizing the window.

A workaround is to use a pure javascript solution, but dragging only works well when moving the mouse in less than normal speed, else the mouse pointer will move outside the window area and no events will be received by the dom.

This module uses  [win-mouse][win] modules for tracking the mouse position on the entire screen, and thereby enabling consistent window dragging, while the affected element is still able to receive dom events.

# Important
1. Only work under windows.
2. If screen scale to 150% on windows, the position will wrong
3. Make it work well with "@electron/remote" and remember to `import { initialize } from "@electron/remote/main"; initialize()` in your main file.
4. This package need rebuild under the electron environment.
# Build

The module needs to be built with the correct `Electron` headers. See the [guide for using native Node modules with Electron][native] for more information.

Versions of this library above version 2.0.0 require `Electron` which support `Node.js` version 9 and above.

# Usage

	npm install electron-drag

Require the module in an `Electron` web page.

```javascript
var drag = require('electron-drag')

// Pass a query selector or a dom element to the function.
// Dragging the element will drag the whole window.
var clear = drag('#element')

// Call the returned function to make the element undraggable again.
clear()
```

The module only works on OS X and Windows, but doesn't fail when installed on a non-supported platform.

```javascript
// Fallback to using -webkit-app-region property.
if (!drag.supported) {
	document.querySelector('#element').style['-webkit-app-region'] = 'drag'
}
```

[region]: https://github.com/atom/electron/blob/master/docs/api/frameless-window.md#draggable-region
[osx]: https://github.com/kapetan/osx-mouse
[win]: https://github.com/kapetan/win-mouse
[native]: https://github.com/atom/electron/blob/master/docs/tutorial/using-native-node-modules.md
npm package: @lxfater/windows-systeminfo
Description: A nodejs wrapper for native windows systemInfo command.
Author: lxfater
Latest version: 1.0.3

# windows-systeminfo
A nodejs wrapper for native windows systemInfo command.

```javascript
const test = require('@lxfater/windows-systeminfo')
// Put your system (like cp936) cmd PageCode to get the correct information
// Using chcp command  to get your current PageCode
test('cp936').then((x) => {
    console.log(x)
})
```
npm package: @lxfriday/countdown
Description: auto countdown
Author: lxfriday
Latest version: 1.0.2

# countdown

javascript auto countdown util class

## install

```bash
npm i @lxfriday/countdown -S
# or
yarn add @lxfriday/countdown
```

## params

### `constructor`

- `leftTime` `{number}` `required` time(second) left for countdown
- `i` `{number}` period time(second) to execute `onDown`

### `CountDown.prototype.onDown`
called every period, hack func

```js
// use

CountDown.prototype.onDown = function (leftTime) {
    console.log(leftTime);
}

```

### `CountDown.prototype.start`
start countdown

### `CountDown.prototype.pause`
pause countdown temporarily

### `CountDown.prototype.stop`
stop countdown

### `CountDown.prototype.reset`
reset the available time to initial time

### `CountDown.prototype.restart`
restart countdown using the initial leftTime

## usage

```js
var CountDown = require('@lxfriday/countdown');

var countdown1 = new CountDown(180);
countdown1.onDown = function (leftTime) {
    console.log('time now left: ' + leftTime + ' second(s)');
}

countdown1.start();

// time now left: 179 seconds(s)
// time now left: 178 seconds(s)
// time now left: 177 seconds(s)
// time now left: 176 seconds(s)

countdown1.pause(); // temporarily pause

countdown1.start();

// time now left: 175 seconds(s)
// time now left: 174 seconds(s)

countdown1.stop(); // now stoped

// if you want to restart, call reset and start

countdown1.reset();
countdown1.start();

// 179
// 178 ...

// or call restart

countdown1.restart();

// 179
// 178 ...

```
npm package: @lxfriday/deepcopy
Description: deepcopy for javascript
Author: lxfriday
Latest version: 1.0.0

# deepcopy

deep copy for javascript

## install

```bash
npm i @lxfriday/deepcopy -S
# or
yarn add @lxfriday/deepcopy
```

## params

one or more object

## return

the deep copy result

## usage

```js
var deepCopy = require('deepcopy');
var obj = { a: 1, b: 2, c: { cc: 3 } };
var result = deepCopy({}, obj);
console.log(result.c === obj.c); // false

obj.c.cc = 15;

console.log(result.c.cc); // 3
```
npm package: @lxfriday/get-object-value
Description: get object inner value
Author: lxfriday
Latest version: 1.0.3

# @lxfriday/get-object-value

get object inner value

## install

```bash
npm i @lxfriday/get-object-value -S
# or
yarn add @lxfriday/get-object-value
```

## params
`smoothScrollTo(ref, pos[, rate])`

- `obj` {`object`} `required`, target object
- `keys` {`array`} `required`, key array, like object.a.b.c.d.e => ['a', 'b', 'c', 'd', 'e']
- `defaultRet` {`any`} if not found or error, will return defaultRet

## usage

```jsx harmony
const obj = {
      a: {
        b: {
          c: {
            d: {
              e: 'abcde',
            },
          },
        },
      },
    }
// not found
console.log('result => ', secureGetValue(obj, ['a', 'b', 'c', 'd', 'e', 'f'], 'not found'))
// abcde
console.log('result => ', secureGetValue(obj, ['a', 'b', 'c', 'd', 'e'], 'not found'))
```
npm package: @lxfriday/is-empty-object
Description: is a empty object?
Author: lxfriday
Latest version: 1.0.2

# @lxfriday/is-empty-object

Judging whether a variable is an empty object

## install

```bash
npm i @lxfriday/is-empty-object -S
# or
yarn add @lxfriday/is-empty-object
```

## params
`smoothScrollTo(obj)`

- `obj` {`any`} `required` the input variable

## usage

```javascript
const isEmptyObj = require('..')

console.log('()', isEmptyObj())
console.log('{}', isEmptyObj({}))
console.log('{ a: 1 }', isEmptyObj({ a: 1 }))

const obj1 = {}
Object.defineProperty(obj1, 'name', {
  value: 'lxfriday',
})
console.log('obj1', isEmptyObj(obj1))

let sym1 = Symbol('name')

const obj2 = { [sym1]: 'lxfriday' }

console.log('obj2', isEmptyObj(obj2))

// () false
// {} true
// { a: 1 } false
// obj1 false
// obj2 false
```
npm package: @lxfriday/size-transformer
Description: size transformer,from B to TB
Author: lxfriday
Latest version: 1.0.3

# size-transformer

文件大小单位转换

## install

```bash
npm i @lxfriday/size-transformer
# or
yarn add @lxfriday/size-transformer
```

## 参数

- `size` {number} 要转换的文件大小 

## 用法

```js
const transformer = require('@lxfriday/size-transformer');
console.log(transformer(1024 * 1024 * 1024 * 1024)); // 1.00 TB
console.log(transformer(1024)); // 1.00 KB
```
npm package: @lxfriday/smooth-scroll-to
Description: smooth scroll to somewhere
Author: lxfriday
Latest version: 1.0.1

# @lxfriday/smooth-scroll-to

javascript scroll for anywhere

## install

```bash
npm i @lxfriday/smooth-scroll-to -S
# or
yarn add @lxfriday/smooth-scroll-to
```

## params
`smoothScrollTo(ref, pos[, rate])`

- `ref` {`HTMLElement`} `required`, the component you want to scroll
- `pos` {`number`} `required`, the component you want to scroll
- `rate` {`numbger`} scroll speed, bigger means faster

## usage
// use in react

```jsx harmony
import React, { Component } from 'react';
import smoothScrollTo from '@lxfriday/smooth-scroll-to';

class Scroll extends Component {
  handleScroll = () => {
    smoothScrollTo(this.scroll, 1000)
  }
  
  render() {
    return (
      <div ref={r => (this.scroll = r)} style={{ height: 700 }}>
        <button onClick={this.handleScroll}>scroll go</button>
        <div style={{ height: 5000 }}>
          <div style={{ height: 300, backgroundColor: 'red' }} />
          <div style={{ height: 300, backgroundColor: 'green' }} />
          <div style={{ height: 300, backgroundColor: 'yellow' }} />
          <div style={{ height: 300, backgroundColor: 'red' }} />
          <div style={{ height: 300, backgroundColor: 'green' }} />
          <div style={{ height: 300, backgroundColor: 'yellow' }} />
          <div style={{ height: 300, backgroundColor: 'red' }} />
          <div style={{ height: 300, backgroundColor: 'green' }} />
          <div style={{ height: 300, backgroundColor: 'yellow' }} />
          <div style={{ height: 300, backgroundColor: 'red' }} />
          <div style={{ height: 300, backgroundColor: 'green' }} />
          <div style={{ height: 300, backgroundColor: 'yellow' }} />
          <div style={{ height: 300, backgroundColor: 'red' }} />
          <div style={{ height: 300, backgroundColor: 'green' }} />
          <div style={{ height: 300, backgroundColor: 'yellow' }} />
        </div>
      </div>
    )
  }
}
```
npm package: @lxfriday/woodpecker
Description: Eslint、Prettier、Commitlint、Editorconfig、GitIgnore 自动注入工具
Author: lxfriday
Latest version: 2.6.0

# woodpecker

<p text-align=center><img src="./woodpecker.jpeg"></p>

详细说明请看 wiki[https://wiki.n.miui.com/pages/viewpage.action?pageId=194334369](https://wiki.n.miui.com/pages/viewpage.action?pageId=194334369)

---

Eslint、Prettier、Commitlint、Editorconfig、Gitignore 自动注入工具

- Prettier
- Eslint(多种 config 可选)
- Husky
- Lint-staged
- Commitlint (angular style 开源项目主流 commit 规范)
- Editorconfig
- Gitignore

## 安装

```bash
npm i -g @lxfriday/woodpecker
```

## 使用

### `woodpecker i`

选择注入选项

点击 `a` 自动选中全部功能， 点空格选择或者取消选择单个功能。选好之后回车自动开始安装

```bash
$ woodpecker i
woodpecker v2.0.2

-> 开始执行

? 需要注入什么功能？ (Press <space> to select, <a> to toggle all, <i> to invert selection)
>( ) Prettier: 格式化代码
 ( ) Commitlint: 限制 commit message 格式
 ( ) Eslint: 注入 Eslint 功能，选中之后下一步可选择 Eslint config 类型
 ( ) Editorconfig: 添加 .editorconfig 到根目录
 ( ) Gitignore: 添加 .gitignore 到根目录
```

Eslint 可选项

```bash
? 安装下列哪个 Eslint config？ (Use arrow keys)
> airbnb
  eslint-config-react-app
```

### `woodpecker f`

自动配置 vscode

将会对用户的 settings.json 配置文件进行更改，如下，[**需要预先安装 Prettier 插件**](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode)

```
  "editor.formatOnSave": true, // 保存时 format
  "editor.formatOnPaste": true, // 粘贴时 format
  "editor.defaultFormatter": "esbenp.prettier-vscode" // 设置默认的 formatter 为 prettier
```

## 注意

**当 Prettier 和 Eslint 同时存在时，Eslint 规则会受到 Prettier 影响，Prettier 自动格式化时变更为 Pretiter 配置文件对应的格式**

## 相关链接

- [Prettier](https://prettier.io/)
- [Prettier 配置项](https://prettier.io/docs/en/options.html)
- [Eslint rules(中文)](https://cn.eslint.org/docs/rules/)
- [Husky](https://github.com/typicode/husky)
- [Lint-staged](https://github.com/okonet/lint-staged)
- [Commitlint](https://github.com/conventional-changelog/commitlint)
- [angular commit message: @commitlint/config-angular](https://www.npmjs.com/package/@commitlint/config-angular)
- [阮一峰 Commit message 和 Change log 编写指南](http://www.ruanyifeng.com/blog/2016/01/commit_message_change_log.html)
npm package: @lxfu/gm
Description: Git branch manger
Author: lxfu1
Latest version: 1.0.4

# gm

Git 快捷操作工具，类似 alias。

## 安装

```sh
$ npm i -g @lxfu/gm
```

## 使用

- `gm --version` : 查看版本信息
- `gm b`: 查看本地所有分支
  - `gm b -r` : 查看远程分支
  - `gm b -a` : 查看所有分支
- `gm d branchName` : 删除指定分支
- `gm D branchName1 branchName2` : 删除指定分支(branchName1, branchNameX)和当前分支以外的所有分支
- `gm a` : 暂存
  - `gm a`: 相当于 `git add .`
  - `gm a file`: 相当于 `git add file`
- `gm cm commitInfo` : 相当于 `git commit -m commitInfo`
- `gm r commitId` : 相当于 `git reset commitId`
- `gm p` : 相当于 `git push`
  - `gm p -f`: 相当于 `git push -f`
- `gm pr` : 用于没有远程分支的提交
  - `gm pr [-f]` : 相当于 `git push origin HEAD`
  - `gm pr branch [-f]` : 相当于 `git push --set-upstream origin branch`
- `gm pl` : 相当于 `git pull`
- `gm co branch` : 相当于 `git checkout branch`
- `gm cb branch` : 相当于 `git checkout -b branch`
npm package: @lxg/weather-icons
Description: A set of animated svg weather icons. (Forked from https://github.com/basmilius/weather-icons.)
Author: Bas Milius
Latest version: 3.0.1

<a href="https://bas.dev" target="_blank" rel="noopener">
	<img src="https://bmcdn.nl/assets/branding/logo.svg" alt="Bas Milius Logo" height="60" width="60" />
</a>

---

<img src="header.png" alt="Meteocons"/>

# Meteocons
Free to use animated SVG weather icons. Handcrafted by [Bas Milius](https://bas.dev).

## 👀 Preview
- **Filled icons**: https://basmilius.github.io/weather-icons/index-fill.html
- **Outlined icons**: https://basmilius.github.io/weather-icons/index.html

### ⚒ Process
- An icon is designed in Adobe Illustrator.
- Icons are exported to plain SVG files.
- Animations are added by editing SVG files.
- A node.js script minifies the SVG's.

### 🎨 Design files
This repository not only contains the production-ready files, but also the original design
files. You may use these files to adjust icons or even create new ones. The design files
are Adobe Illustrator .ai-files.

### 🌥 Missing an icon?
Please let me know by creating an issue. Keep in mind that I only accept icons that are
somewhat weather related.

---

<p float="left">
    <img src="https://bmcdn.nl/assets/weather-icons/v3.0/fill/svg/clear-day.svg" alt="Partly Cloudy Day" height="48"/>
    <img src="https://bmcdn.nl/assets/weather-icons/v3.0/fill/svg/partly-cloudy-day.svg" alt="Partly Cloudy Day" height="48"/>
    <img src="https://bmcdn.nl/assets/weather-icons/v3.0/fill/svg/rain.svg" alt="Rain" height="48"/>
    <img src="https://bmcdn.nl/assets/weather-icons/v3.0/fill/svg/tornado.svg" alt="Tornado" height="48"/>
    <img src="https://bmcdn.nl/assets/weather-icons/v3.0/fill/svg/clear-night.svg" alt="Clear Night" height="48"/>
</p>

<p float="left">
    <img src="https://bmcdn.nl/assets/weather-icons/v2.0/line/clear-day.svg" alt="Partly Cloudy Day" height="48"/>
    <img src="https://bmcdn.nl/assets/weather-icons/v2.0/line/partly-cloudy-day.svg" alt="Partly Cloudy Day" height="48"/>
    <img src="https://bmcdn.nl/assets/weather-icons/v2.0/line/rain.svg" alt="Rain" height="48"/>
    <img src="https://bmcdn.nl/assets/weather-icons/v2.0/line/tornado.svg" alt="Tornado" height="48"/>
    <img src="https://bmcdn.nl/assets/weather-icons/v2.0/line/clear-night.svg" alt="Clear Night" height="48"/>
</p>
npm package: @lxghtless/eslint-config-prettier
Description: Basic recommended eslint config with prettier.
Author: lxghtless
Latest version: 1.3.0

<h3 align="center">
    @lxghtless/eslint-config-prettier
</h3>

<p align="center">
    <a href="https://eslint.org/">
        <img src="https://aleen42.github.io/badges/src/eslint.svg" />
    </a>
</p>

### Install

```console
$ npm i -D @lxghtless/eslint-config-prettier
```

> Usage (Example)

```json
{
    "root": true,
    "env": {
        "es6": true,
        "node": true
    },
    "extends": [
        "@lxghtless/eslint-config-prettier"
    ]
}
```