Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

remark-lint-linebreak-style

Package Overview
Dependencies
Maintainers
3
Versions
13
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

remark-lint-linebreak-style - npm Package Compare versions

Comparing version 3.1.2 to 4.0.0

index.d.ts.map

34

index.d.ts

@@ -1,27 +0,15 @@

export default remarkLintLinebreakStyle
export type Root = import('mdast').Root
export default remarkLintLinebreakStyle;
export type Root = import('mdast').Root;
/**
* Styles.
* Options.
*/
export type Type = 'unix' | 'windows'
export type Options = Style | 'consistent';
/**
* Options.
* Styles.
*/
export type Options = 'consistent' | Type
declare const remarkLintLinebreakStyle: import('unified').Plugin<
| void[]
| [
| Options
| [
(
| boolean
| import('unified-lint-rule/lib/index.js').Label
| import('unified-lint-rule/lib/index.js').Severity
),
(Options | undefined)?
]
| undefined
],
import('mdast').Root,
import('mdast').Root
>
export type Style = 'unix' | 'windows';
declare const remarkLintLinebreakStyle: {
(config?: import("../../node_modules/unified-lint-rule/lib/index.js").Label | import("../../node_modules/unified-lint-rule/lib/index.js").Severity | Options | [level: import("../../node_modules/unified-lint-rule/lib/index.js").Label | import("../../node_modules/unified-lint-rule/lib/index.js").Severity, option?: Options | null | undefined] | null | undefined): ((tree: import("mdast").Root, file: import("vfile").VFile, next: import("unified").TransformCallback<import("mdast").Root>) => undefined) | undefined;
readonly name: string;
};
//# sourceMappingURL=index.d.ts.map
/**
* remark-lint rule to warn when line endings violate a given style.
*
* ## When should I use this?
*
* You can use this package to check that line endings are consistent.
* This package checks the style of line endings.
*
* ## When should I use this?
*
* You can use this package to check that the style of line endings is
* consistent.
*
* ## API
*
* ### `unified().use(remarkLintLinebreakStyle[, options])`
*
* The following options (default: `'consistent'`) are accepted:
* Warn when line endings violate a given style.
*
* * `'unix'`
* — prefer Unix line endings (`\n`, `␊`):
* * `'window'`
* — prefer Windows line endings (`\r\n`, `␍␊`):
* * `'consistent'`
* — detect the first used style and warn when further line endings differ
* ###### Parameters
*
* * `options` ([`Options`][api-options], default: `'consistent'`)
* — preferred style or whether to detect the first style and warn for
* further differences
*
* ###### Returns
*
* Transform ([`Transformer` from `unified`][github-unified-transformer]).
*
* ### `Options`
*
* Configuration (TypeScript type).
*
* ###### Type
*
* ```ts
* type Options = Style | 'consistent'
* ```
*
* ### `Style`
*
* Style (TypeScript type).
*
* ###### Type
*
* ```ts
* type Style = 'unix' | 'windows'
* ```
*
* ## Recommendation
*
* In Git projects, you can configure it to automatically switch between line
* In Git projects, you can configure to automatically switch between line
* endings based on who checks the repo out.
* In other places, you might manually want to force that one or the other is
* used, in which case this rule can be used and configured.
* In other places, you may want to manually force that one or the other is
* used.
*
* ## Fix
*
* [`remark-stringify`](https://github.com/remarkjs/remark/tree/main/packages/remark-stringify)
* always uses Unix linebreaks.
* [`remark-stringify`][github-remark-stringify] always uses Unix line endings.
*
* [api-options]: #options
* [api-remark-lint-linebreak-style]: #unifieduseremarklintlinebreakstyle-options
* [api-style]: #style
* [github-remark-stringify]: https://github.com/remarkjs/remark/tree/main/packages/remark-stringify
* [github-unified-transformer]: https://github.com/unifiedjs/unified#transformer
*
* @module linebreak-style
* @summary
* remark-lint rule to warn when line endings don’t match a given style.
* @author Titus Wormer
* @copyright 2017 Titus Wormer
* @license MIT
*
* @example
* {"name": "ok-consistent-as-windows.md"}
*
* Alpha␍␊
* Bravo␍␊
* Mercury␍␊and␍␊Venus.
*

@@ -44,24 +79,43 @@ * @example

*
* Alpha␊
* Bravo␊
* Mercury␊and␊Venus.
*
* @example
* {"name": "not-ok-unix.md", "label": "input", "config": "unix", "positionless": true}
* {"config": "unix", "label": "input", "name": "not-ok-unix.md", "positionless": true}
*
* Alpha␍␊
* Mercury.␍␊
*
* @example
* {"name": "not-ok-unix.md", "label": "output", "config": "unix"}
* {"config": "unix", "label": "output", "name": "not-ok-unix.md", "positionless": true}
*
* 1:7: Expected linebreaks to be unix (`\n`), not windows (`\r\n`)
* 1:10: Unexpected windows (`\r\n`) line ending, expected unix (`\n`) line endings
*
* @example
* {"name": "not-ok-windows.md", "label": "input", "config": "windows", "positionless": true}
* {"config": "windows", "label": "input", "name": "not-ok-windows.md", "positionless": true}
*
* Alpha␊
* Mercury.␊
*
* @example
* {"name": "not-ok-windows.md", "label": "output", "config": "windows"}
* {"config": "windows", "label": "output", "name": "not-ok-windows.md", "positionless": true}
*
* 1:6: Expected linebreaks to be windows (`\r\n`), not unix (`\n`)
* 1:9: Unexpected unix (`\n`) line ending, expected windows (`\r\n`) line endings
*
* @example
* {"config": "🌍", "label": "output", "name": "not-ok-options.md", "positionless": true}
*
* 1:1: Unexpected value `🌍` for `options`, expected `'unix'`, `'windows'`, or `'consistent'`
*
* @example
* {"config": "windows", "label": "input", "name": "many.md", "positionless": true}
*
* Mercury.␊Venus.␊Earth.␊Mars.␊Jupiter.␊Saturn.␊Uranus.␊Neptune.␊
*
* @example
* {"config": "windows", "label": "output", "name": "many.md", "positionless": true}
*
* 1:9: Unexpected unix (`\n`) line ending, expected windows (`\r\n`) line endings
* 2:7: Unexpected unix (`\n`) line ending, expected windows (`\r\n`) line endings
* 3:7: Unexpected unix (`\n`) line ending, expected windows (`\r\n`) line endings
* 4:6: Unexpected unix (`\n`) line ending, expected windows (`\r\n`) line endings
* 5:9: Unexpected unix (`\n`) line ending, expected windows (`\r\n`) line endings
* 6:8: Unexpected large number of incorrect line endings, stopping
*/

@@ -74,12 +128,15 @@

/**
* @typedef {'unix' | 'windows'} Type
* @typedef {Style | 'consistent'} Options
* Options.
*
* @typedef {'unix' | 'windows'} Style
* Styles.
* @typedef {'consistent' | Type} Options
* Options.
*/
import {ok as assert} from 'devlop'
import {lintRule} from 'unified-lint-rule'
import {location} from 'vfile-location'
import {VFileMessage} from 'vfile-message'
const escaped = {unix: '\\n', windows: '\\r\\n'}
const max = 5

@@ -91,26 +148,65 @@ const remarkLintLinebreakStyle = lintRule(

},
/** @type {import('unified-lint-rule').Rule<Root, Options>} */
(_, file, option = 'consistent') => {
/**
* @param {Root} _
* Tree.
* @param {Options | null | undefined} [options='consistent']
* Configuration (default: `'consistent'`).
* @returns {undefined}
* Nothing.
*/
function (_, file, options) {
const value = String(file)
const toPoint = location(value).toPoint
let index = value.indexOf('\n')
/** @type {VFileMessage | undefined} */
let cause
/** @type {Style | undefined} */
let expected
if (options === null || options === undefined || options === 'consistent') {
// Empty.
} else if (options === 'unix' || options === 'windows') {
expected = options
} else {
file.fail(
'Unexpected value `' +
options +
"` for `options`, expected `'unix'`, `'windows'`, or `'consistent'`"
)
}
let messages = 0
while (index !== -1) {
const type = value.charAt(index - 1) === '\r' ? 'windows' : 'unix'
const actual = value.charAt(index - 1) === '\r' ? 'windows' : 'unix'
const place = toPoint(index)
assert(place) // Always defined.
if (option === 'consistent') {
option = type
} else if (option !== type) {
file.message(
'Expected linebreaks to be ' +
option +
' (`' +
escaped[option] +
'`), not ' +
type +
' (`' +
escaped[type] +
'`)',
// @ts-expect-error: assume we have a correct point.
toPoint(index)
if (expected) {
if (expected !== actual) {
if (messages === max) {
file.info(
'Unexpected large number of incorrect line endings, stopping',
{place}
)
return
}
file.message(
'Unexpected ' +
displayStyle(actual) +
' line ending, expected ' +
displayStyle(expected) +
' line endings',
{cause, place}
)
messages++
}
} else {
expected = actual
cause = new VFileMessage(
'Line ending style ' +
displayStyle(expected) +
" first defined for `'consistent'` here",
{place, ruleId: 'linebreak-style', source: 'remark-lint'}
)

@@ -125,1 +221,11 @@ }

export default remarkLintLinebreakStyle
/**
* @param {Style} style
* Style.
* @returns {string}
* Display.
*/
function displayStyle(style) {
return style === 'unix' ? 'unix (`\\n`)' : 'windows (`\\r\\n`)'
}
{
"name": "remark-lint-linebreak-style",
"version": "3.1.2",
"version": "4.0.0",
"description": "remark-lint rule to warn when linebreaks violate a given or detected style",
"license": "MIT",
"keywords": [
"break",
"crlf",
"lf",
"line",
"linebreak",
"lint",
"remark",
"lint",
"remark-lint",
"remark-lint-rule",
"rule",
"remark-lint-rule",
"linebreak",
"line",
"break",
"unix",
"windows",
"crlf",
"lf"
"windows"
],
"repository": {
"type": "git",
"url": "https://github.com/remarkjs/remark-lint",
"directory": "packages/remark-lint-linebreak-style"
},
"repository": "https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-linebreak-style",
"bugs": "https://github.com/remarkjs/remark-lint/issues",

@@ -31,26 +28,34 @@ "funding": {

"contributors": [
"Titus Wormer <tituswormer@gmail.com> (https://wooorm.com)"
"Titus <tituswormer@gmail.com>",
"Titus Wormer <tituswormer@gmail.com>"
],
"sideEffects": false,
"type": "module",
"main": "index.js",
"types": "index.d.ts",
"exports": "./index.js",
"files": [
"index.d.ts",
"index.d.ts.map",
"index.js"
],
"dependencies": {
"@types/mdast": "^3.0.0",
"unified": "^10.0.0",
"unified-lint-rule": "^2.0.0",
"vfile-location": "^4.0.0"
"@types/mdast": "^4.0.0",
"devlop": "^1.0.0",
"unified-lint-rule": "^3.0.0",
"vfile-location": "^5.0.0",
"vfile-message": "^4.0.0"
},
"scripts": {},
"xo": false,
"typeCoverage": {
"atLeast": 100,
"detail": true,
"strict": true,
"ignoreCatch": true
"ignoreCatch": true,
"strict": true
},
"xo": {
"prettier": true,
"rules": {
"capitalized-comments": "off",
"unicorn/prefer-default-parameters": "off"
}
}
}

@@ -5,46 +5,48 @@ <!--This file is generated-->

[![Build][build-badge]][build]
[![Coverage][coverage-badge]][coverage]
[![Downloads][downloads-badge]][downloads]
[![Size][size-badge]][size]
[![Sponsors][sponsors-badge]][collective]
[![Backers][backers-badge]][collective]
[![Chat][chat-badge]][chat]
[![Build][badge-build-image]][badge-build-url]
[![Coverage][badge-coverage-image]][badge-coverage-url]
[![Downloads][badge-downloads-image]][badge-downloads-url]
[![Size][badge-size-image]][badge-size-url]
[![Sponsors][badge-funding-sponsors-image]][badge-funding-url]
[![Backers][badge-funding-backers-image]][badge-funding-url]
[![Chat][badge-chat-image]][badge-chat-url]
[`remark-lint`][mono] rule to warn when line endings don’t match a given style.
[`remark-lint`][github-remark-lint] rule to warn when line endings violate a given style.
## Contents
* [What is this?](#what-is-this)
* [When should I use this?](#when-should-i-use-this)
* [Presets](#presets)
* [Install](#install)
* [Use](#use)
* [API](#api)
* [`unified().use(remarkLintLinebreakStyle[, config])`](#unifieduseremarklintlinebreakstyle-config)
* [Recommendation](#recommendation)
* [Fix](#fix)
* [Examples](#examples)
* [Compatibility](#compatibility)
* [Contribute](#contribute)
* [License](#license)
* [When should I use this?](#when-should-i-use-this)
* [When should I use this?](#when-should-i-use-this-1)
* [Presets](#presets)
* [Install](#install)
* [Use](#use)
* [API](#api)
* [`unified().use(remarkLintLinebreakStyle[, options])`](#unifieduseremarklintlinebreakstyle-options)
* [`Options`](#options)
* [`Style`](#style)
* [Recommendation](#recommendation)
* [Fix](#fix)
* [Examples](#examples)
* [Compatibility](#compatibility)
* [Contribute](#contribute)
* [License](#license)
## What is this?
## When should I use this?
This package is a [unified][] ([remark][]) plugin, specifically a `remark-lint`
rule.
Lint rules check markdown code style.
This package checks the style of line endings.
## When should I use this?
You can use this package to check that line endings are consistent.
You can use this package to check that the style of line endings is
consistent.
## Presets
This rule is not included in a preset maintained here.
This plugin is not included in presets maintained here.
## Install
This package is [ESM only][esm].
In Node.js (version 12.20+, 14.14+, or 16.0+), install with [npm][]:
This package is [ESM only][github-gist-esm].
In Node.js (version 16+),
install with [npm][npm-install]:

@@ -55,13 +57,13 @@ ```sh

In Deno with [`esm.sh`][esmsh]:
In Deno with [`esm.sh`][esm-sh]:
```js
import remarkLintLinebreakStyle from 'https://esm.sh/remark-lint-linebreak-style@3'
import remarkLintLinebreakStyle from 'https://esm.sh/remark-lint-linebreak-style@4'
```
In browsers with [`esm.sh`][esmsh]:
In browsers with [`esm.sh`][esm-sh]:
```html
<script type="module">
import remarkLintLinebreakStyle from 'https://esm.sh/remark-lint-linebreak-style@3?bundle'
import remarkLintLinebreakStyle from 'https://esm.sh/remark-lint-linebreak-style@4?bundle'
</script>

@@ -75,18 +77,20 @@ ```

```js
import remarkLint from 'remark-lint'
import remarkLintLinebreakStyle from 'remark-lint-linebreak-style'
import remarkParse from 'remark-parse'
import remarkStringify from 'remark-stringify'
import {read} from 'to-vfile'
import {unified} from 'unified'
import {reporter} from 'vfile-reporter'
import {remark} from 'remark'
import remarkLint from 'remark-lint'
import remarkLintLinebreakStyle from 'remark-lint-linebreak-style'
main()
const file = await read('example.md')
async function main() {
const file = await remark()
.use(remarkLint)
.use(remarkLintLinebreakStyle)
.process(await read('example.md'))
await unified()
.use(remarkParse)
.use(remarkLint)
.use(remarkLintLinebreakStyle)
.use(remarkStringify)
.process(file)
console.error(reporter(file))
}
console.error(reporter(file))
```

@@ -97,3 +101,3 @@

```sh
remark --use remark-lint --use remark-lint-linebreak-style example.md
remark --frail --use remark-lint --use remark-lint-linebreak-style .
```

@@ -119,29 +123,52 @@

This package exports no identifiers.
The default export is `remarkLintLinebreakStyle`.
It exports the [TypeScript][typescript] types
[`Options`][api-options] and
[`Style`][api-style].
The default export is
[`remarkLintLinebreakStyle`][api-remark-lint-linebreak-style].
### `unified().use(remarkLintLinebreakStyle[, config])`
### `unified().use(remarkLintLinebreakStyle[, options])`
This rule supports standard configuration that all remark lint rules accept
(such as `false` to turn it off or `[1, options]` to configure it).
Warn when line endings violate a given style.
The following options (default: `'consistent'`) are accepted:
###### Parameters
* `'unix'`
— prefer Unix line endings (`\n`, `␊`):
* `'window'`
— prefer Windows line endings (`\r\n`, `␍␊`):
* `'consistent'`
— detect the first used style and warn when further line endings differ
* `options` ([`Options`][api-options], default: `'consistent'`)
— preferred style or whether to detect the first style and warn for
further differences
###### Returns
Transform ([`Transformer` from `unified`][github-unified-transformer]).
### `Options`
Configuration (TypeScript type).
###### Type
```ts
type Options = Style | 'consistent'
```
### `Style`
Style (TypeScript type).
###### Type
```ts
type Style = 'unix' | 'windows'
```
## Recommendation
In Git projects, you can configure it to automatically switch between line
In Git projects, you can configure to automatically switch between line
endings based on who checks the repo out.
In other places, you might manually want to force that one or the other is
used, in which case this rule can be used and configured.
In other places, you may want to manually force that one or the other is
used.
## Fix
[`remark-stringify`](https://github.com/remarkjs/remark/tree/main/packages/remark-stringify)
always uses Unix linebreaks.
[`remark-stringify`][github-remark-stringify] always uses Unix line endings.

@@ -154,7 +181,4 @@ ## Examples

> 👉 **Note**: `␍␊` represents a carriage return and a line feed.
```markdown
Alpha␍␊
Bravo␍␊
Mercury␍␊and␍␊Venus.
```

@@ -170,7 +194,4 @@

> 👉 **Note**: `␊` represents a line feed.
```markdown
Alpha␊
Bravo␊
Mercury␊and␊Venus.
```

@@ -188,6 +209,4 @@

> 👉 **Note**: `␍␊` represents a carriage return and a line feed.
```markdown
Alpha␍␊
Mercury.␍␊
```

@@ -198,3 +217,3 @@

```text
1:7: Expected linebreaks to be unix (`\n`), not windows (`\r\n`)
1:10: Unexpected windows (`\r\n`) line ending, expected unix (`\n`) line endings
```

@@ -208,6 +227,30 @@

> 👉 **Note**: `␊` represents a line feed.
```markdown
Mercury.␊
```
###### Out
```text
1:9: Unexpected unix (`\n`) line ending, expected windows (`\r\n`) line endings
```
##### `not-ok-options.md`
When configured with `'🌍'`.
###### Out
```text
1:1: Unexpected value `🌍` for `options`, expected `'unix'`, `'windows'`, or `'consistent'`
```
##### `many.md`
When configured with `'windows'`.
###### In
```markdown
Alpha␊
Mercury.␊Venus.␊Earth.␊Mars.␊Jupiter.␊Saturn.␊Uranus.␊Neptune.␊
```

@@ -218,3 +261,8 @@

```text
1:6: Expected linebreaks to be windows (`\r\n`), not unix (`\n`)
1:9: Unexpected unix (`\n`) line ending, expected windows (`\r\n`) line endings
2:7: Unexpected unix (`\n`) line ending, expected windows (`\r\n`) line endings
3:7: Unexpected unix (`\n`) line ending, expected windows (`\r\n`) line endings
4:6: Unexpected unix (`\n`) line ending, expected windows (`\r\n`) line endings
5:9: Unexpected unix (`\n`) line ending, expected windows (`\r\n`) line endings
6:8: Unexpected large number of incorrect line endings, stopping
```

@@ -224,14 +272,18 @@

Projects maintained by the unified collective are compatible with all maintained
Projects maintained by the unified collective are compatible with maintained
versions of Node.js.
As of now, that is Node.js 12.20+, 14.14+, and 16.0+.
Our projects sometimes work with older versions, but this is not guaranteed.
When we cut a new major release, we drop support for unmaintained versions of
Node.
This means we try to keep the current release line,
`remark-lint-linebreak-style@4`,
compatible with Node.js 16.
## Contribute
See [`contributing.md`][contributing] in [`remarkjs/.github`][health] for ways
See [`contributing.md`][github-dotfiles-contributing] in [`remarkjs/.github`][github-dotfiles-health] for ways
to get started.
See [`support.md`][support] for ways to get help.
See [`support.md`][github-dotfiles-support] for ways to get help.
This project has a [code of conduct][coc].
This project has a [code of conduct][github-dotfiles-coc].
By interacting with this repository, organization, or community you agree to

@@ -242,52 +294,60 @@ abide by its terms.

[MIT][license] © [Titus Wormer][author]
[MIT][file-license] © [Titus Wormer][author]
[build-badge]: https://github.com/remarkjs/remark-lint/workflows/main/badge.svg
[api-options]: #options
[build]: https://github.com/remarkjs/remark-lint/actions
[api-remark-lint-linebreak-style]: #unifieduseremarklintlinebreakstyle-options
[coverage-badge]: https://img.shields.io/codecov/c/github/remarkjs/remark-lint.svg
[api-style]: #style
[coverage]: https://codecov.io/github/remarkjs/remark-lint
[author]: https://wooorm.com
[downloads-badge]: https://img.shields.io/npm/dm/remark-lint-linebreak-style.svg
[badge-build-image]: https://github.com/remarkjs/remark-lint/workflows/main/badge.svg
[downloads]: https://www.npmjs.com/package/remark-lint-linebreak-style
[badge-build-url]: https://github.com/remarkjs/remark-lint/actions
[size-badge]: https://img.shields.io/bundlephobia/minzip/remark-lint-linebreak-style.svg
[badge-chat-image]: https://img.shields.io/badge/chat-discussions-success.svg
[size]: https://bundlephobia.com/result?p=remark-lint-linebreak-style
[badge-chat-url]: https://github.com/remarkjs/remark/discussions
[sponsors-badge]: https://opencollective.com/unified/sponsors/badge.svg
[badge-coverage-image]: https://img.shields.io/codecov/c/github/remarkjs/remark-lint.svg
[backers-badge]: https://opencollective.com/unified/backers/badge.svg
[badge-coverage-url]: https://codecov.io/github/remarkjs/remark-lint
[collective]: https://opencollective.com/unified
[badge-downloads-image]: https://img.shields.io/npm/dm/remark-lint-linebreak-style.svg
[chat-badge]: https://img.shields.io/badge/chat-discussions-success.svg
[badge-downloads-url]: https://www.npmjs.com/package/remark-lint-linebreak-style
[chat]: https://github.com/remarkjs/remark/discussions
[badge-funding-backers-image]: https://opencollective.com/unified/backers/badge.svg
[unified]: https://github.com/unifiedjs/unified
[badge-funding-sponsors-image]: https://opencollective.com/unified/sponsors/badge.svg
[remark]: https://github.com/remarkjs/remark
[badge-funding-url]: https://opencollective.com/unified
[mono]: https://github.com/remarkjs/remark-lint
[badge-size-image]: https://img.shields.io/bundlejs/size/remark-lint-linebreak-style
[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c
[badge-size-url]: https://bundlejs.com/?q=remark-lint-linebreak-style
[esmsh]: https://esm.sh
[esm-sh]: https://esm.sh
[npm]: https://docs.npmjs.com/cli/install
[file-license]: https://github.com/remarkjs/remark-lint/blob/main/license
[health]: https://github.com/remarkjs/.github
[github-dotfiles-coc]: https://github.com/remarkjs/.github/blob/main/code-of-conduct.md
[contributing]: https://github.com/remarkjs/.github/blob/main/contributing.md
[github-dotfiles-contributing]: https://github.com/remarkjs/.github/blob/main/contributing.md
[support]: https://github.com/remarkjs/.github/blob/main/support.md
[github-dotfiles-health]: https://github.com/remarkjs/.github
[coc]: https://github.com/remarkjs/.github/blob/main/code-of-conduct.md
[github-dotfiles-support]: https://github.com/remarkjs/.github/blob/main/support.md
[license]: https://github.com/remarkjs/remark-lint/blob/main/license
[github-gist-esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c
[author]: https://wooorm.com
[github-remark-lint]: https://github.com/remarkjs/remark-lint
[github-remark-stringify]: https://github.com/remarkjs/remark/tree/main/packages/remark-stringify
[github-unified-transformer]: https://github.com/unifiedjs/unified#transformer
[npm-install]: https://docs.npmjs.com/cli/install
[typescript]: https://www.typescriptlang.org
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc