Socket
Socket
Sign inDemoInstall

lowlight

Package Overview
Dependencies
Maintainers
1
Versions
42
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

lowlight - npm Package Compare versions

Comparing version 1.20.0 to 2.0.0

index.d.ts

300

index.js

@@ -1,299 +0,1 @@

'use strict'
var low = require('./lib/core.js')
module.exports = low
low.registerLanguage('1c', require('highlight.js/lib/languages/1c'))
low.registerLanguage('abnf', require('highlight.js/lib/languages/abnf'))
low.registerLanguage(
'accesslog',
require('highlight.js/lib/languages/accesslog')
)
low.registerLanguage(
'actionscript',
require('highlight.js/lib/languages/actionscript')
)
low.registerLanguage('ada', require('highlight.js/lib/languages/ada'))
low.registerLanguage(
'angelscript',
require('highlight.js/lib/languages/angelscript')
)
low.registerLanguage('apache', require('highlight.js/lib/languages/apache'))
low.registerLanguage(
'applescript',
require('highlight.js/lib/languages/applescript')
)
low.registerLanguage('arcade', require('highlight.js/lib/languages/arcade'))
low.registerLanguage('arduino', require('highlight.js/lib/languages/arduino'))
low.registerLanguage('armasm', require('highlight.js/lib/languages/armasm'))
low.registerLanguage('xml', require('highlight.js/lib/languages/xml'))
low.registerLanguage('asciidoc', require('highlight.js/lib/languages/asciidoc'))
low.registerLanguage('aspectj', require('highlight.js/lib/languages/aspectj'))
low.registerLanguage(
'autohotkey',
require('highlight.js/lib/languages/autohotkey')
)
low.registerLanguage('autoit', require('highlight.js/lib/languages/autoit'))
low.registerLanguage('avrasm', require('highlight.js/lib/languages/avrasm'))
low.registerLanguage('awk', require('highlight.js/lib/languages/awk'))
low.registerLanguage('axapta', require('highlight.js/lib/languages/axapta'))
low.registerLanguage('bash', require('highlight.js/lib/languages/bash'))
low.registerLanguage('basic', require('highlight.js/lib/languages/basic'))
low.registerLanguage('bnf', require('highlight.js/lib/languages/bnf'))
low.registerLanguage(
'brainfuck',
require('highlight.js/lib/languages/brainfuck')
)
low.registerLanguage('c-like', require('highlight.js/lib/languages/c-like'))
low.registerLanguage('c', require('highlight.js/lib/languages/c'))
low.registerLanguage('cal', require('highlight.js/lib/languages/cal'))
low.registerLanguage(
'capnproto',
require('highlight.js/lib/languages/capnproto')
)
low.registerLanguage('ceylon', require('highlight.js/lib/languages/ceylon'))
low.registerLanguage('clean', require('highlight.js/lib/languages/clean'))
low.registerLanguage('clojure', require('highlight.js/lib/languages/clojure'))
low.registerLanguage(
'clojure-repl',
require('highlight.js/lib/languages/clojure-repl')
)
low.registerLanguage('cmake', require('highlight.js/lib/languages/cmake'))
low.registerLanguage(
'coffeescript',
require('highlight.js/lib/languages/coffeescript')
)
low.registerLanguage('coq', require('highlight.js/lib/languages/coq'))
low.registerLanguage('cos', require('highlight.js/lib/languages/cos'))
low.registerLanguage('cpp', require('highlight.js/lib/languages/cpp'))
low.registerLanguage('crmsh', require('highlight.js/lib/languages/crmsh'))
low.registerLanguage('crystal', require('highlight.js/lib/languages/crystal'))
low.registerLanguage('csharp', require('highlight.js/lib/languages/csharp'))
low.registerLanguage('csp', require('highlight.js/lib/languages/csp'))
low.registerLanguage('css', require('highlight.js/lib/languages/css'))
low.registerLanguage('d', require('highlight.js/lib/languages/d'))
low.registerLanguage('markdown', require('highlight.js/lib/languages/markdown'))
low.registerLanguage('dart', require('highlight.js/lib/languages/dart'))
low.registerLanguage('delphi', require('highlight.js/lib/languages/delphi'))
low.registerLanguage('diff', require('highlight.js/lib/languages/diff'))
low.registerLanguage('django', require('highlight.js/lib/languages/django'))
low.registerLanguage('dns', require('highlight.js/lib/languages/dns'))
low.registerLanguage(
'dockerfile',
require('highlight.js/lib/languages/dockerfile')
)
low.registerLanguage('dos', require('highlight.js/lib/languages/dos'))
low.registerLanguage('dsconfig', require('highlight.js/lib/languages/dsconfig'))
low.registerLanguage('dts', require('highlight.js/lib/languages/dts'))
low.registerLanguage('dust', require('highlight.js/lib/languages/dust'))
low.registerLanguage('ebnf', require('highlight.js/lib/languages/ebnf'))
low.registerLanguage('elixir', require('highlight.js/lib/languages/elixir'))
low.registerLanguage('elm', require('highlight.js/lib/languages/elm'))
low.registerLanguage('ruby', require('highlight.js/lib/languages/ruby'))
low.registerLanguage('erb', require('highlight.js/lib/languages/erb'))
low.registerLanguage(
'erlang-repl',
require('highlight.js/lib/languages/erlang-repl')
)
low.registerLanguage('erlang', require('highlight.js/lib/languages/erlang'))
low.registerLanguage('excel', require('highlight.js/lib/languages/excel'))
low.registerLanguage('fix', require('highlight.js/lib/languages/fix'))
low.registerLanguage('flix', require('highlight.js/lib/languages/flix'))
low.registerLanguage('fortran', require('highlight.js/lib/languages/fortran'))
low.registerLanguage('fsharp', require('highlight.js/lib/languages/fsharp'))
low.registerLanguage('gams', require('highlight.js/lib/languages/gams'))
low.registerLanguage('gauss', require('highlight.js/lib/languages/gauss'))
low.registerLanguage('gcode', require('highlight.js/lib/languages/gcode'))
low.registerLanguage('gherkin', require('highlight.js/lib/languages/gherkin'))
low.registerLanguage('glsl', require('highlight.js/lib/languages/glsl'))
low.registerLanguage('gml', require('highlight.js/lib/languages/gml'))
low.registerLanguage('go', require('highlight.js/lib/languages/go'))
low.registerLanguage('golo', require('highlight.js/lib/languages/golo'))
low.registerLanguage('gradle', require('highlight.js/lib/languages/gradle'))
low.registerLanguage('groovy', require('highlight.js/lib/languages/groovy'))
low.registerLanguage('haml', require('highlight.js/lib/languages/haml'))
low.registerLanguage(
'handlebars',
require('highlight.js/lib/languages/handlebars')
)
low.registerLanguage('haskell', require('highlight.js/lib/languages/haskell'))
low.registerLanguage('haxe', require('highlight.js/lib/languages/haxe'))
low.registerLanguage('hsp', require('highlight.js/lib/languages/hsp'))
low.registerLanguage('htmlbars', require('highlight.js/lib/languages/htmlbars'))
low.registerLanguage('http', require('highlight.js/lib/languages/http'))
low.registerLanguage('hy', require('highlight.js/lib/languages/hy'))
low.registerLanguage('inform7', require('highlight.js/lib/languages/inform7'))
low.registerLanguage('ini', require('highlight.js/lib/languages/ini'))
low.registerLanguage('irpf90', require('highlight.js/lib/languages/irpf90'))
low.registerLanguage('isbl', require('highlight.js/lib/languages/isbl'))
low.registerLanguage('java', require('highlight.js/lib/languages/java'))
low.registerLanguage(
'javascript',
require('highlight.js/lib/languages/javascript')
)
low.registerLanguage(
'jboss-cli',
require('highlight.js/lib/languages/jboss-cli')
)
low.registerLanguage('json', require('highlight.js/lib/languages/json'))
low.registerLanguage('julia', require('highlight.js/lib/languages/julia'))
low.registerLanguage(
'julia-repl',
require('highlight.js/lib/languages/julia-repl')
)
low.registerLanguage('kotlin', require('highlight.js/lib/languages/kotlin'))
low.registerLanguage('lasso', require('highlight.js/lib/languages/lasso'))
low.registerLanguage('latex', require('highlight.js/lib/languages/latex'))
low.registerLanguage('ldif', require('highlight.js/lib/languages/ldif'))
low.registerLanguage('leaf', require('highlight.js/lib/languages/leaf'))
low.registerLanguage('less', require('highlight.js/lib/languages/less'))
low.registerLanguage('lisp', require('highlight.js/lib/languages/lisp'))
low.registerLanguage(
'livecodeserver',
require('highlight.js/lib/languages/livecodeserver')
)
low.registerLanguage(
'livescript',
require('highlight.js/lib/languages/livescript')
)
low.registerLanguage('llvm', require('highlight.js/lib/languages/llvm'))
low.registerLanguage('lsl', require('highlight.js/lib/languages/lsl'))
low.registerLanguage('lua', require('highlight.js/lib/languages/lua'))
low.registerLanguage('makefile', require('highlight.js/lib/languages/makefile'))
low.registerLanguage(
'mathematica',
require('highlight.js/lib/languages/mathematica')
)
low.registerLanguage('matlab', require('highlight.js/lib/languages/matlab'))
low.registerLanguage('maxima', require('highlight.js/lib/languages/maxima'))
low.registerLanguage('mel', require('highlight.js/lib/languages/mel'))
low.registerLanguage('mercury', require('highlight.js/lib/languages/mercury'))
low.registerLanguage('mipsasm', require('highlight.js/lib/languages/mipsasm'))
low.registerLanguage('mizar', require('highlight.js/lib/languages/mizar'))
low.registerLanguage('perl', require('highlight.js/lib/languages/perl'))
low.registerLanguage(
'mojolicious',
require('highlight.js/lib/languages/mojolicious')
)
low.registerLanguage('monkey', require('highlight.js/lib/languages/monkey'))
low.registerLanguage(
'moonscript',
require('highlight.js/lib/languages/moonscript')
)
low.registerLanguage('n1ql', require('highlight.js/lib/languages/n1ql'))
low.registerLanguage('nginx', require('highlight.js/lib/languages/nginx'))
low.registerLanguage('nim', require('highlight.js/lib/languages/nim'))
low.registerLanguage('nix', require('highlight.js/lib/languages/nix'))
low.registerLanguage(
'node-repl',
require('highlight.js/lib/languages/node-repl')
)
low.registerLanguage('nsis', require('highlight.js/lib/languages/nsis'))
low.registerLanguage(
'objectivec',
require('highlight.js/lib/languages/objectivec')
)
low.registerLanguage('ocaml', require('highlight.js/lib/languages/ocaml'))
low.registerLanguage('openscad', require('highlight.js/lib/languages/openscad'))
low.registerLanguage('oxygene', require('highlight.js/lib/languages/oxygene'))
low.registerLanguage('parser3', require('highlight.js/lib/languages/parser3'))
low.registerLanguage('pf', require('highlight.js/lib/languages/pf'))
low.registerLanguage('pgsql', require('highlight.js/lib/languages/pgsql'))
low.registerLanguage('php', require('highlight.js/lib/languages/php'))
low.registerLanguage(
'php-template',
require('highlight.js/lib/languages/php-template')
)
low.registerLanguage(
'plaintext',
require('highlight.js/lib/languages/plaintext')
)
low.registerLanguage('pony', require('highlight.js/lib/languages/pony'))
low.registerLanguage(
'powershell',
require('highlight.js/lib/languages/powershell')
)
low.registerLanguage(
'processing',
require('highlight.js/lib/languages/processing')
)
low.registerLanguage('profile', require('highlight.js/lib/languages/profile'))
low.registerLanguage('prolog', require('highlight.js/lib/languages/prolog'))
low.registerLanguage(
'properties',
require('highlight.js/lib/languages/properties')
)
low.registerLanguage('protobuf', require('highlight.js/lib/languages/protobuf'))
low.registerLanguage('puppet', require('highlight.js/lib/languages/puppet'))
low.registerLanguage(
'purebasic',
require('highlight.js/lib/languages/purebasic')
)
low.registerLanguage('python', require('highlight.js/lib/languages/python'))
low.registerLanguage(
'python-repl',
require('highlight.js/lib/languages/python-repl')
)
low.registerLanguage('q', require('highlight.js/lib/languages/q'))
low.registerLanguage('qml', require('highlight.js/lib/languages/qml'))
low.registerLanguage('r', require('highlight.js/lib/languages/r'))
low.registerLanguage('reasonml', require('highlight.js/lib/languages/reasonml'))
low.registerLanguage('rib', require('highlight.js/lib/languages/rib'))
low.registerLanguage('roboconf', require('highlight.js/lib/languages/roboconf'))
low.registerLanguage('routeros', require('highlight.js/lib/languages/routeros'))
low.registerLanguage('rsl', require('highlight.js/lib/languages/rsl'))
low.registerLanguage(
'ruleslanguage',
require('highlight.js/lib/languages/ruleslanguage')
)
low.registerLanguage('rust', require('highlight.js/lib/languages/rust'))
low.registerLanguage('sas', require('highlight.js/lib/languages/sas'))
low.registerLanguage('scala', require('highlight.js/lib/languages/scala'))
low.registerLanguage('scheme', require('highlight.js/lib/languages/scheme'))
low.registerLanguage('scilab', require('highlight.js/lib/languages/scilab'))
low.registerLanguage('scss', require('highlight.js/lib/languages/scss'))
low.registerLanguage('shell', require('highlight.js/lib/languages/shell'))
low.registerLanguage('smali', require('highlight.js/lib/languages/smali'))
low.registerLanguage(
'smalltalk',
require('highlight.js/lib/languages/smalltalk')
)
low.registerLanguage('sml', require('highlight.js/lib/languages/sml'))
low.registerLanguage('sqf', require('highlight.js/lib/languages/sqf'))
low.registerLanguage('sql_more', require('highlight.js/lib/languages/sql_more'))
low.registerLanguage('sql', require('highlight.js/lib/languages/sql'))
low.registerLanguage('stan', require('highlight.js/lib/languages/stan'))
low.registerLanguage('stata', require('highlight.js/lib/languages/stata'))
low.registerLanguage('step21', require('highlight.js/lib/languages/step21'))
low.registerLanguage('stylus', require('highlight.js/lib/languages/stylus'))
low.registerLanguage('subunit', require('highlight.js/lib/languages/subunit'))
low.registerLanguage('swift', require('highlight.js/lib/languages/swift'))
low.registerLanguage(
'taggerscript',
require('highlight.js/lib/languages/taggerscript')
)
low.registerLanguage('yaml', require('highlight.js/lib/languages/yaml'))
low.registerLanguage('tap', require('highlight.js/lib/languages/tap'))
low.registerLanguage('tcl', require('highlight.js/lib/languages/tcl'))
low.registerLanguage('thrift', require('highlight.js/lib/languages/thrift'))
low.registerLanguage('tp', require('highlight.js/lib/languages/tp'))
low.registerLanguage('twig', require('highlight.js/lib/languages/twig'))
low.registerLanguage(
'typescript',
require('highlight.js/lib/languages/typescript')
)
low.registerLanguage('vala', require('highlight.js/lib/languages/vala'))
low.registerLanguage('vbnet', require('highlight.js/lib/languages/vbnet'))
low.registerLanguage('vbscript', require('highlight.js/lib/languages/vbscript'))
low.registerLanguage(
'vbscript-html',
require('highlight.js/lib/languages/vbscript-html')
)
low.registerLanguage('verilog', require('highlight.js/lib/languages/verilog'))
low.registerLanguage('vhdl', require('highlight.js/lib/languages/vhdl'))
low.registerLanguage('vim', require('highlight.js/lib/languages/vim'))
low.registerLanguage('x86asm', require('highlight.js/lib/languages/x86asm'))
low.registerLanguage('xl', require('highlight.js/lib/languages/xl'))
low.registerLanguage('xquery', require('highlight.js/lib/languages/xquery'))
low.registerLanguage('zephir', require('highlight.js/lib/languages/zephir'))
export {lowlight} from './lib/common.js'

@@ -1,36 +0,45 @@

'use strict'
/**
* @typedef {import('hast').Text} Text
*
* @typedef {import('highlight.js').HighlightResult} HighlightResult
* @typedef {import('highlight.js').HLJSOptions} HighlightOptions
* @typedef {import('highlight.js').LanguageFn} HighlightSyntax
* @typedef {import('highlight.js').Emitter} HighlightEmitter
*
* @typedef {{type: 'element', tagName: 'span', properties: {className: Array.<string>}, children: Array.<LowlightElementSpan|Text>}} LowlightElementSpan
* @typedef {{type: 'root', data: {language: string, relevance: number}, children: Array.<LowlightElementSpan|Text>}} LowlightRoot
*
* @typedef {Object} ExtraAutoOptions
* @property {Array.<string>} [subset] List of allowed languages; defaults to all registered languages
*
* @typedef {Object} LowlightOptions
* @property {string} [prefix='hljs-'] Class prefix
*
* @typedef {LowlightOptions & ExtraAutoOptions} LowlightAutoOptions
*/
var high = require('highlight.js/lib/core')
var fault = require('fault')
import high from 'highlight.js/lib/core'
import {fault} from 'fault'
exports.highlight = highlight
exports.highlightAuto = highlightAuto
exports.registerLanguage = registerLanguage
exports.listLanguages = listLanguages
exports.registerAlias = registerAlias
const own = {}.hasOwnProperty
Emitter.prototype.addText = text
Emitter.prototype.addKeyword = addKeyword
Emitter.prototype.addSublanguage = addSublanguage
Emitter.prototype.openNode = open
Emitter.prototype.closeNode = close
Emitter.prototype.closeAllNodes = noop
Emitter.prototype.finalize = noop
Emitter.prototype.toHTML = toHtmlNoop
const defaultPrefix = 'hljs-'
var defaultPrefix = 'hljs-'
/**
* Parse `value` (code) according to the `language` (name) grammar.
*
* @param {string} language Language name
* @param {string} value Code value
* @param {LowlightOptions} [options={}] Settings
* @returns {LowlightRoot}
*/
function highlight(language, value, options = {}) {
let prefix = options.prefix
// Highlighting `value` in the language `name`.
function highlight(name, value, options) {
var before = high.configure({})
var settings = options || {}
var prefix = settings.prefix
var result
if (typeof name !== 'string') {
throw fault('Expected `string` for name, got `%s`', name)
if (typeof language !== 'string') {
throw fault('Expected `string` for name, got `%s`', language)
}
if (!high.getLanguage(name)) {
throw fault('Unknown language: `%s` is not registered', name)
if (!high.getLanguage(language)) {
throw fault('Unknown language: `%s` is not registered', language)
}

@@ -46,10 +55,11 @@

high.configure({__emitter: Emitter, classPrefix: prefix})
high.configure({__emitter: HastEmitter, classPrefix: prefix})
/** @type {HighlightResult & {_emitter: HastEmitter}} */
// @ts-ignore our emitter is added.
const result = high.highlight(value, {language, ignoreIllegals: true})
high.configure({})
result = high.highlight(value, {language: name, ignoreIllegals: true})
high.configure(before || {})
/* istanbul ignore if - Highlight.js seems to use this (currently) for broken
* grammars, so let’s keep it in there just to be sure. */
// Highlight.js seems to use this (currently) for broken grammars, so let’s
// keep it in there just to be sure.
/* c8 ignore next 3 */
if (result.errorRaised) {

@@ -59,19 +69,29 @@ throw result.errorRaised

return {
relevance: result.relevance,
language: result.language,
value: result.emitter.rootNode.children
}
result._emitter.root.data.language = result.language
result._emitter.root.data.relevance = result.relevance
return result._emitter.root
}
function highlightAuto(value, options) {
var settings = options || {}
var subset = settings.subset || high.listLanguages()
var prefix = settings.prefix
var length = subset.length
var index = -1
var result
var secondBest
var current
var name
/**
* Parse `value` (code) by guessing its grammar.
*
* @param {string} value Code value
* @param {LowlightAutoOptions} [options={}] Settings
* @returns {LowlightRoot}
*/
function highlightAuto(value, options = {}) {
const subset = options.subset || high.listLanguages()
let prefix = options.prefix
let index = -1
/** @type {LowlightRoot} */
let result = {
type: 'root',
data: {language: null, relevance: 0},
children: []
}
/** @type {string} */
let name
/** @type {LowlightRoot} */
let current

@@ -86,38 +106,31 @@ if (prefix === null || prefix === undefined) {

secondBest = {relevance: 0, language: null, value: []}
result = {relevance: 0, language: null, value: []}
while (++index < length) {
while (++index < subset.length) {
name = subset[index]
if (!high.getLanguage(name)) {
continue
}
if (!high.getLanguage(name)) continue
current = highlight(name, value, options)
current.language = name
if (current.relevance > secondBest.relevance) {
secondBest = current
}
if (current.relevance > result.relevance) {
secondBest = result
result = current
}
if (current.data.relevance > result.data.relevance) result = current
}
if (secondBest.language) {
result.secondBest = secondBest
}
return result
}
// Register a language.
function registerLanguage(name, syntax) {
high.registerLanguage(name, syntax)
/**
* Register a language.
*
* @param {string} language Language name
* @param {HighlightSyntax} syntax Language syntax
* @returns {void}
*/
function registerLanguage(language, syntax) {
high.registerLanguage(language, syntax)
}
// Get a list of all registered languages.
/**
* Get a list of all registered languages.
*
* @returns {Array.<string>}
*/
function listLanguages() {

@@ -127,35 +140,92 @@ return high.listLanguages()

// Register more aliases for an already registered language.
function registerAlias(name, alias) {
var map = name
var key
const registerAlias =
/**
* @type {(
* ((language: string, alias: string|Array.<string>) => void) &
* ((aliases: Object<string, string|Array.<string>>) => void)
* )}
*/
(
/**
* Register more aliases for an already registered language.
*
* @param {string|Object<string, string|Array.<string>>} language
* @param {string|Array.<string>} [alias]
* @returns {void}
*/
function (language, alias) {
/** @type {Object<string, string|Array.<string>>} */
let map
/** @type {string} */
let key
if (alias) {
map = {}
map[name] = alias
if (typeof language === 'string') {
map = {}
map[language] = alias
} else {
map = language
}
for (key in map) {
if (own.call(map, key)) {
high.registerAliases(map[key], {languageName: key})
}
}
}
)
/** @type {HighlightEmitter} */
class HastEmitter {
/**
* @param {HighlightOptions} options
*/
constructor(options) {
/** @type {HighlightOptions} */
this.options = options
/** @type {LowlightRoot} */
this.root = {
type: 'root',
data: {language: undefined, relevance: 0},
children: []
}
/** @type {[LowlightRoot, ...LowlightElementSpan[]]} */
this.stack = [this.root]
}
for (key in map) {
high.registerAliases(map[key], {languageName: key})
/**
* @param {string} value
*/
addText(value) {
if (value === '') return
const current = this.stack[this.stack.length - 1]
const tail = current.children[current.children.length - 1]
if (tail && tail.type === 'text') {
tail.value += value
} else {
current.children.push({type: 'text', value})
}
}
}
function Emitter(options) {
this.options = options
this.rootNode = {children: []}
this.stack = [this.rootNode]
}
/**
* @param {string} value
* @param {string} name
*/
addKeyword(value, name) {
this.openNode(name)
this.addText(value)
this.closeNode()
}
function addKeyword(value, name) {
this.openNode(name)
this.addText(value)
this.closeNode()
}
/**
* @param {HastEmitter} other
* @param {string} name
*/
addSublanguage(other, name) {
const current = this.stack[this.stack.length - 1]
const results = other.root.children
function addSublanguage(other, name) {
var stack = this.stack
var current = stack[stack.length - 1]
var results = other.rootNode.children
var node = name
? {
if (name) {
current.children.push({
type: 'element',

@@ -165,48 +235,53 @@ tagName: 'span',

children: results
}
: results
})
} else {
current.children.push(...results)
}
}
current.children = current.children.concat(node)
}
/**
* @param {string} name
*/
openNode(name) {
const className = name.split('.').map((d) => this.options.classPrefix + d)
const current = this.stack[this.stack.length - 1]
/** @type {LowlightElementSpan} */
const child = {
type: 'element',
tagName: 'span',
properties: {className},
children: []
}
function text(value) {
var stack = this.stack
var current
var tail
current.children.push(child)
this.stack.push(child)
}
if (value === '') return
/**
*/
closeNode() {
this.stack.pop()
}
current = stack[stack.length - 1]
tail = current.children[current.children.length - 1]
/**
*/
closeAllNodes() {}
if (tail && tail.type === 'text') {
tail.value += value
} else {
current.children.push({type: 'text', value: value})
}
}
/**
*/
finalize() {}
function open(name) {
var stack = this.stack
var className = this.options.classPrefix + name
var current = stack[stack.length - 1]
var child = {
type: 'element',
tagName: 'span',
properties: {className: [className]},
children: []
/**
*/
toHTML() {
return ''
}
current.children.push(child)
stack.push(child)
}
function close() {
this.stack.pop()
export const lowlight = {
highlight,
highlightAuto,
registerLanguage,
listLanguages,
registerAlias
}
function toHtmlNoop() {
return ''
}
function noop() {}
{
"name": "lowlight",
"version": "1.20.0",
"version": "2.0.0",
"description": "Virtual syntax highlighting for virtual DOMs and non-HTML things",

@@ -27,14 +27,25 @@ "license": "MIT",

],
"sideEffects": false,
"type": "module",
"main": "index.js",
"types": "index.d.ts",
"files": [
"index.js",
"lib/core.js"
"lib/core.d.ts",
"lib/core.js",
"index.d.ts",
"index.js"
],
"dependencies": {
"fault": "^1.0.0",
"highlight.js": "~10.7.0"
"@types/hast": "^2.0.0",
"fault": "^2.0.0",
"highlight.js": "~11.0.0"
},
"devDependencies": {
"browserify": "^17.0.0",
"@types/mdast": "^3.0.0",
"@types/tape": "^4.0.0",
"@types/unist": "^2.0.0",
"c8": "^7.0.0",
"chalk": "^4.0.0",
"nyc": "^15.0.0",
"estree-util-is-identifier-name": "^2.0.0",
"mdast-zone": "^5.0.0",
"prettier": "^2.0.0",

@@ -44,16 +55,18 @@ "rehype": "^11.0.0",

"remark-preset-wooorm": "^8.0.0",
"rimraf": "^3.0.0",
"tape": "^5.0.0",
"tinyify": "^3.0.0",
"unist-util-remove-position": "^3.0.0",
"xo": "^0.38.0"
"type-coverage": "^2.0.0",
"typescript": "^4.0.0",
"unist-builder": "^3.0.0",
"unist-util-remove-position": "^4.0.0",
"xo": "^0.40.0"
},
"scripts": {
"prepack": "npm run build && npm run format",
"build": "rimraf \"{lib/**,test/**,script/**,}*.d.ts\" && tsc && type-coverage",
"generate": "node script/build-registry",
"format": "remark . -qfo && prettier . -w --loglevel warn && xo --fix",
"build-bundle": "browserify index.js -s lowlight > lowlight.js",
"build-mangle": "browserify index.js -s lowlight -p tinyify > lowlight.min.js",
"build": "npm run build-bundle && npm run build-mangle",
"test-api": "node test",
"test-coverage": "nyc --reporter lcov tape test/index.js",
"test": "npm run generate && npm run format && npm run build && npm run test-coverage"
"test-api": "node test/index.js",
"test-coverage": "c8 --check-coverage --branches 100 --functions 100 --lines 100 --statements 100 --reporter lcov node test/index.js",
"test": "npm run generate && npm run build && npm run format && npm run test-coverage"
},

@@ -70,25 +83,19 @@ "prettier": {

"prettier": true,
"esnext": false,
"rules": {
"unicorn/no-array-callback-reference": "off",
"unicorn/no-fn-reference-in-iterator": "off",
"unicorn/prefer-optional-catch-binding": "off",
"unicorn/prefer-includes": "off",
"guard-for-in": "off"
},
"ignores": [
"lowlight.js"
]
"node/file-extension-in-import": "off",
"unicorn/prefer-node-protocol": "off"
}
},
"remarkConfig": {
"plugins": [
"preset-wooorm"
"preset-wooorm",
"./script/count.js",
"./script/support.js"
]
},
"nyc": {
"check-coverage": true,
"lines": 100,
"functions": 100,
"branches": 100
"typeCoverage": {
"atLeast": 100,
"detail": true,
"strict": true
}
}

@@ -12,5 +12,13 @@ # lowlight

Lowlight is built to work with all syntaxes supported by [highlight.js][],
that’s [191 languages][names] (and all 94 themes).
Lowlight is built to work with all syntaxes supported by [highlight.js][].
There are three builds of lowlight:
<!--index start-->
* `lib/core.js` — 0 languages
* `lib/common.js` (default) — 35 languages
* `lib/all.js` — 191 languages
<!--index end-->
Want to use [Prism][] instead?

@@ -24,9 +32,8 @@ Try [`refractor`][refractor]!

* [API](#api)
* [`low.highlight(language, value[, options])`](#lowhighlightlanguage-value-options)
* [`low.highlightAuto(value[, options])`](#lowhighlightautovalue-options)
* [`Result`](#result)
* [`low.registerLanguage(name, syntax)`](#lowregisterlanguagename-syntax)
* [`low.registerAlias(name[, alias])`](#lowregisteraliasname-alias)
* [`low.listLanguages()`](#lowlistlanguages)
* [Browser](#browser)
* [`lowlight.highlight(language, value[, options])`](#lowlighthighlightlanguage-value-options)
* [`lowlight.highlightAuto(value[, options])`](#lowlighthighlightautovalue-options)
* [`lowlight.registerLanguage(language, syntax)`](#lowlightregisterlanguagelanguage-syntax)
* [`lowlight.registerAlias(language, alias)`](#lowlightregisteraliaslanguage-alias)
* [`lowlight.listLanguages()`](#lowlightlistlanguages)
* [Syntaxes](#syntaxes)
* [Related](#related)

@@ -38,2 +45,5 @@ * [Projects](#projects)

This package is [ESM only](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c):
Node 12+ is needed to use it and it must be `import`ed instead of `require`d.
[npm][]:

@@ -45,4 +55,2 @@

[Usage in the browser »][browser]
## Use

@@ -53,6 +61,7 @@

```js
var low = require('lowlight')
var tree = low.highlight('js', '"use strict";').value
import {lowlight} from 'lowlight'
console.log(tree)
const tree = lowlight.highlight('js', '"use strict";')
console.dir(tree, {depth: null})
```

@@ -63,22 +72,50 @@

```js
[
{
type: 'element',
tagName: 'span',
properties: {className: ['hljs-meta']},
children: [{type: 'text', value: '"use strict"'}]
},
{type: 'text', value: ';'}
]
{
type: 'root',
data: {language: 'js', relevance: 10},
children: [
{
type: 'element',
tagName: 'span',
properties: {className: ['hljs-meta']},
children: [{type: 'text', value: '"use strict"'}]
},
{type: 'text', value: ';'}
]
}
```
Or, serialized with [rehype-stringify][]:
hast trees can be serialized with [`hast-util-to-html`][to-html]:
```js
var unified = require('unified')
var rehypeStringify = require('rehype-stringify')
import {lowlight} from 'lowlight'
import toHtml from 'hast-util-to-html'
var processor = unified().use(rehypeStringify)
var html = processor.stringify({type: 'root', children: tree}).toString()
const tree = lowlight.highlight('js', '"use strict";')
console.log(toHtml(tree))
```
Yields:
```html
<span class="hljs-meta">"use strict"</span>;
```
hast trees can be turned into other things, like virtual DOMs, with
[`hast-to-hyperscript`][to-hyperscript].
hast trees are also used throughout the **[rehype][]** (**[unified][]**)
ecosystem:
```js
import unified from 'unified'
import rehypeStringify from 'rehype-stringify'
import {lowlight} from 'lowlight'
const tree = lowlight.highlight('js', '"use strict";')
const processor = unified().use(rehypeStringify)
const html = processor.stringify(tree).toString()
console.log(html)

@@ -93,9 +130,9 @@ ```

> **Tip**: Use [`hast-to-hyperscript`][to-hyperscript] to transform to other
> virtual DOMs, or DIY.
## API
### `low.highlight(language, value[, options])`
This package exports the following identifiers: `lowlight`.
There is no default export.
### `lowlight.highlight(language, value[, options])`
Parse `value` (`string`) according to the [`language`][names] grammar.

@@ -109,10 +146,14 @@

[`Result`][result].
A hast [`Root`][root] with two `data` fields:
* `relevance` (`number`) — How sure **low** is that the given code is in the
language
* `language` (`string`) — The detected `language` name
###### Example
```js
var low = require('lowlight')
import {lowlight} from 'lowlight'
console.log(low.highlight('css', 'em { color: red }'))
console.log(lowlight.highlight('css', 'em { color: red }'))
```

@@ -123,6 +164,6 @@

```js
{relevance: 4, language: 'css', value: [Array]}
{type: 'root', data: {language: 'css', relevance: 3}, children: [Array]}
```
### `low.highlightAuto(value[, options])`
### `lowlight.highlightAuto(value[, options])`

@@ -133,4 +174,4 @@ Parse `value` by guessing its grammar.

* `prefix` (`string?`, default: `'hljs-'`)
— Class prefix
The options of `lowlight.highlight` are supported, plus:
* `subset` (`Array.<string>?` default: all registered languages)

@@ -141,3 +182,3 @@ — List of allowed languages

[`Result`][result], with a `secondBest` if found.
The same result as `lowlight.highlight` is returned.

@@ -147,5 +188,5 @@ ###### Example

```js
var low = require('lowlight')
import {lowlight} from 'lowlight'
console.log(low.highlightAuto('"hello, " + name + "!"'))
console.log(lowlight.highlightAuto('"hello, " + name + "!"'))
```

@@ -156,29 +197,9 @@

```js
{
relevance: 3,
language: 'applescript',
value: [Array],
secondBest: {relevance: 3, language: 'basic', value: [Array]}
}
{type: 'root', data: {language: 'applescript', relevance: 3}, children: [Array]}
```
### `Result`
### `lowlight.registerLanguage(language, syntax)`
`Result` is a highlighting result object.
###### Properties
* `relevance` (`number`)
— How sure **low** is that the given code is in the found language
* `language` (`string`)
— The detected `language`
* `value` ([`Array.<Node>`][hast-node])
— Virtual nodes representing the highlighted given code
* `secondBest` ([`Result?`][result])
— Result of the second-best (based on `relevance`) match.
Only set by `highlightAuto`, but can still be `null`.
### `low.registerLanguage(name, syntax)`
Register a [syntax][] as `name` (`string`).
Register a [syntax][] as `language` (`string`).
Useful in the browser or with custom grammars.

@@ -189,8 +210,8 @@

```js
var low = require('lowlight/lib/core')
var xml = require('highlight.js/lib/languages/xml')
import {lowlight} from 'lowlight/lib/core.js'
import xml from 'highlight.js/lib/languages/xml.js'
low.registerLanguage('xml', xml)
lowlight.registerLanguage('xml', xml)
console.log(low.highlight('html', '<em>Emphasis</em>'))
console.log(lowlight.highlight('html', '<em>Emphasis</em>'))
```

@@ -201,12 +222,12 @@

```js
{relevance: 2, language: 'html', value: [Array]}
{type: 'root', data: {language: 'html', relevance: 2}, children: [Array]}
```
### `low.registerAlias(name[, alias])`
### `lowlight.registerAlias(language, alias)`
Register a new `alias` for the `name` language.
Register a new `alias` for `language`.
###### Signatures
* `registerAlias(name, alias|list)`
* `registerAlias(language, alias|list)`
* `registerAlias(aliases)`

@@ -216,7 +237,7 @@

* `name` (`string`) — [Name][names] of a registered language
* `language` (`string`) — [Name][names] of a registered language
* `alias` (`string`) — New alias for the registered language
* `list` (`Array.<alias>`) — List of aliases
* `aliases` (`Object.<alias|list>`) — Map where each key is a `name` and each
value an `alias` or a `list`
* `aliases` (`Object.<language, alias|list>`) — Map where each key is a
`language` and each value an `alias` or a `list`

@@ -226,16 +247,16 @@ ###### Example

```js
var low = require('lowlight/lib/core')
var md = require('highlight.js/lib/languages/markdown')
import {lowlight} from 'lowlight/lib/core.js'
import md from 'highlight.js/lib/languages/markdown.js'
low.registerLanguage('markdown', md)
lowlight.registerLanguage('markdown', md)
// low.highlight('mdown', '<em>Emphasis</em>')
// lowlight.highlight('mdown', '<em>Emphasis</em>')
// ^ would throw: Error: Unknown language: `mdown` is not registered
low.registerAlias({markdown: ['mdown', 'mkdn', 'mdwn', 'ron']})
low.highlight('mdown', '<em>Emphasis</em>')
lowlight.registerAlias({markdown: ['mdown', 'mkdn', 'mdwn', 'ron']})
lowlight.highlight('mdown', '<em>Emphasis</em>')
// ^ Works!
```
### `low.listLanguages()`
### `lowlight.listLanguages()`

@@ -251,33 +272,219 @@ List all registered languages.

```js
var low = require('lowlight/lib/core')
var md = require('highlight.js/lib/languages/markdown')
import {lowlight} from 'lowlight/lib/core.js'
import md from 'highlight.js/lib/languages/markdown.js'
console.log(low.listLanguages()) // => []
console.log(lowlight.listLanguages()) // => []
low.registerLanguage('markdown', md)
lowlight.registerLanguage('markdown', md)
console.log(low.listLanguages()) // => ['markdown']
console.log(lowlight.listLanguages()) // => ['markdown']
```
## Browser
## Syntaxes
It is not suggested to use the pre-built files or requiring `lowlight` in the
browser as that would include 916kB (260kB GZipped) of code.
If you’re using `lowlight/lib/core.js`, no syntaxes are included.
Checked syntaxes are included if you import `lowlight` (or
`lowlight/lib/common.js`).
Unchecked syntaxes are available through `lowlight/lib/all.js`
Instead, require `lowlight/lib/core`, and include only the used highlighters.
For example:
Note that highlight.js works as a singleton.
That means that if you register a syntax anywhere in your project, it’ll become
available everywhere!
```js
var low = require('lowlight/lib/core')
var js = require('highlight.js/lib/languages/javascript')
<!--support start-->
low.registerLanguage('javascript', js)
* [ ] `1c` — 1C:Enterprise
* [ ] `abnf` — Augmented Backus-Naur Form
* [ ] `accesslog` — Apache Access Log
* [ ] `actionscript` (`as`) — ActionScript
* [ ] `ada` — Ada
* [ ] `angelscript` (`asc`) — AngelScript
* [ ] `apache` (`apacheconf`) — Apache config
* [ ] `applescript` (`osascript`) — AppleScript
* [ ] `arcade` — ArcGIS Arcade
* [x] `arduino` (`ino`) — Arduino
* [ ] `armasm` (`arm`) — ARM Assembly
* [ ] `asciidoc` (`adoc`) — AsciiDoc
* [ ] `aspectj` — AspectJ
* [ ] `autohotkey` (`ahk`) — AutoHotkey
* [ ] `autoit` — AutoIt
* [ ] `avrasm` — AVR Assembly
* [ ] `awk` — Awk
* [ ] `axapta` (`x++`) — X++
* [x] `bash` (`sh`) — Bash
* [ ] `basic` — BASIC
* [ ] `bnf` — Backus–Naur Form
* [ ] `brainfuck` (`bf`) — Brainfuck
* [x] `c` (`h`) — C
* [ ] `cal` — C/AL
* [ ] `capnproto` (`capnp`) — Cap’n Proto
* [ ] `ceylon` — Ceylon
* [ ] `clean` (`icl`, `dcl`) — Clean
* [ ] `clojure` (`clj`) — Clojure
* [ ] `clojure-repl` — Clojure REPL
* [ ] `cmake` (`cmake.in`) — CMake
* [ ] `coffeescript` (`coffee`, `cson`, `iced`) — CoffeeScript
* [ ] `coq` — Coq
* [ ] `cos` (`cls`) — Caché Object Script
* [x] `cpp` (`cc`, `c++`, `h++`, `hpp`, `hh`, `hxx`, `cxx`) — C++
* [ ] `crmsh` (`crm`, `pcmk`) — crmsh
* [ ] `crystal` (`cr`) — Crystal
* [x] `csharp` (`cs`, `c#`) — C#
* [ ] `csp` — CSP
* [x] `css` — CSS
* [ ] `d` — D
* [ ] `dart` — Dart
* [ ] `delphi` (`dpr`, `dfm`, `pas`, `pascal`) — Delphi
* [x] `diff` (`patch`) — Diff
* [ ] `django` (`jinja`) — Django
* [ ] `dns` (`bind`, `zone`) — DNS Zone
* [ ] `dockerfile` (`docker`) — Dockerfile
* [ ] `dos` (`bat`, `cmd`) — Batch file (DOS)
* [ ] `dsconfig` — undefined
* [ ] `dts` — Device Tree
* [ ] `dust` (`dst`) — Dust
* [ ] `ebnf` — Extended Backus-Naur Form
* [ ] `elixir` — Elixir
* [ ] `elm` — Elm
* [ ] `erb` — ERB
* [ ] `erlang` (`erl`) — Erlang
* [ ] `erlang-repl` — Erlang REPL
* [ ] `excel` (`xlsx`, `xls`) — Excel formulae
* [ ] `fix` — FIX
* [ ] `flix` — Flix
* [ ] `fortran` (`f90`, `f95`) — Fortran
* [ ] `fsharp` (`fs`) — F#
* [ ] `gams` (`gms`) — GAMS
* [ ] `gauss` (`gss`) — GAUSS
* [ ] `gcode` (`nc`) — G-code (ISO 6983)
* [ ] `gherkin` (`feature`) — Gherkin
* [ ] `glsl` — GLSL
* [ ] `gml` — GML
* [x] `go` (`golang`) — Go
* [ ] `golo` — Golo
* [ ] `gradle` — Gradle
* [ ] `groovy` — Groovy
* [ ] `haml` — HAML
* [ ] `handlebars` (`hbs`, `html.hbs`, `html.handlebars`, `htmlbars`) — Handlebars
* [ ] `haskell` (`hs`) — Haskell
* [ ] `haxe` (`hx`) — Haxe
* [ ] `hsp` — HSP
* [ ] `http` (`https`) — HTTP
* [ ] `hy` (`hylang`) — Hy
* [ ] `inform7` (`i7`) — Inform 7
* [x] `ini` (`toml`) — TOML, also INI
* [ ] `irpf90` — IRPF90
* [ ] `isbl` — ISBL
* [x] `java` (`jsp`) — Java
* [x] `javascript` (`js`, `jsx`, `mjs`, `cjs`) — Javascript
* [ ] `jboss-cli` (`wildfly-cli`) — JBoss CLI
* [x] `json` — JSON
* [ ] `julia` — Julia
* [ ] `julia-repl` — Julia REPL
* [x] `kotlin` (`kt`, `kts`) — Kotlin
* [ ] `lasso` (`ls`, `lassoscript`) — Lasso
* [ ] `latex` (`tex`) — LaTeX
* [ ] `ldif` — LDIF
* [ ] `leaf` — Leaf
* [x] `less` — Less
* [ ] `lisp` — Lisp
* [ ] `livecodeserver` — LiveCode
* [ ] `livescript` (`ls`) — LiveScript
* [ ] `llvm` — LLVM IR
* [ ] `lsl` — LSL (Linden Scripting Language)
* [x] `lua` — Lua
* [x] `makefile` (`mk`, `mak`, `make`) — Makefile
* [x] `markdown` (`md`, `mkdown`, `mkd`) — Markdown
* [ ] `mathematica` (`mma`, `wl`) — Mathematica
* [ ] `matlab` — Matlab
* [ ] `maxima` — Maxima
* [ ] `mel` — MEL
* [ ] `mercury` (`m`, `moo`) — Mercury
* [ ] `mipsasm` (`mips`) — MIPS Assembly
* [ ] `mizar` — Mizar
* [ ] `mojolicious` — Mojolicious
* [ ] `monkey` — Monkey
* [ ] `moonscript` (`moon`) — MoonScript
* [ ] `n1ql` — N1QL
* [ ] `nestedtext` (`nt`) — Nested Text
* [ ] `nginx` (`nginxconf`) — Nginx config
* [ ] `nim` — Nim
* [ ] `nix` (`nixos`) — Nix
* [ ] `node-repl` — Node REPL
* [ ] `nsis` — NSIS
* [x] `objectivec` (`mm`, `objc`, `obj-c`, `obj-c++`, `objective-c++`) — Objective-C
* [ ] `ocaml` (`ml`) — OCaml
* [ ] `openscad` (`scad`) — OpenSCAD
* [ ] `oxygene` — Oxygene
* [ ] `parser3` — Parser3
* [x] `perl` (`pl`, `pm`) — Perl
* [ ] `pf` (`pf.conf`) — Packet Filter config
* [ ] `pgsql` (`postgres`, `postgresql`) — PostgreSQL
* [x] `php` — undefined
* [x] `php-template` — PHP template
* [x] `plaintext` (`text`, `txt`) — Plain text
* [ ] `pony` — Pony
* [ ] `powershell` (`ps`, `ps1`) — PowerShell
* [ ] `processing` (`pde`) — Processing
* [ ] `profile` — Python profiler
* [ ] `prolog` — Prolog
* [ ] `properties` — .properties
* [ ] `protobuf` — Protocol Buffers
* [ ] `puppet` (`pp`) — Puppet
* [ ] `purebasic` (`pb`, `pbi`) — PureBASIC
* [x] `python` (`py`, `gyp`, `ipython`) — Python
* [x] `python-repl` (`pycon`) — undefined
* [ ] `q` (`k`, `kdb`) — Q
* [ ] `qml` (`qt`) — QML
* [x] `r` — R
* [ ] `reasonml` (`re`) — ReasonML
* [ ] `rib` — RenderMan RIB
* [ ] `roboconf` (`graph`, `instances`) — Roboconf
* [ ] `routeros` (`mikrotik`) — Microtik RouterOS script
* [ ] `rsl` — RenderMan RSL
* [x] `ruby` (`rb`, `gemspec`, `podspec`, `thor`, `irb`) — Ruby
* [ ] `ruleslanguage` — Oracle Rules Language
* [x] `rust` (`rs`) — Rust
* [ ] `sas` — SAS
* [ ] `scala` — Scala
* [ ] `scheme` — Scheme
* [ ] `scilab` (`sci`) — Scilab
* [x] `scss` — SCSS
* [x] `shell` (`console`, `shellsession`) — Shell Session
* [ ] `smali` — Smali
* [ ] `smalltalk` (`st`) — Smalltalk
* [ ] `sml` (`ml`) — SML (Standard ML)
* [ ] `sqf` — SQF
* [x] `sql` — SQL
* [ ] `stan` (`stanfuncs`) — Stan
* [ ] `stata` (`do`, `ado`) — Stata
* [ ] `step21` (`p21`, `step`, `stp`) — STEP Part 21
* [ ] `stylus` (`styl`) — Stylus
* [ ] `subunit` — SubUnit
* [x] `swift` — Swift
* [ ] `taggerscript` — Tagger Script
* [ ] `tap` — Test Anything Protocol
* [ ] `tcl` (`tk`) — Tcl
* [ ] `thrift` — Thrift
* [ ] `tp` — TP
* [ ] `twig` (`craftcms`) — Twig
* [x] `typescript` (`ts`, `tsx`) — TypeScript
* [ ] `vala` — Vala
* [x] `vbnet` (`vb`) — Visual Basic .NET
* [ ] `vbscript` (`vbs`) — VBScript
* [ ] `vbscript-html` — VBScript in HTML
* [ ] `verilog` (`v`, `sv`, `svh`) — Verilog
* [ ] `vhdl` — VHDL
* [ ] `vim` — Vim Script
* [ ] `wasm` — WebAssembly
* [ ] `wren` — Wren
* [ ] `x86asm` — Intel x86 Assembly
* [ ] `xl` (`tao`) — XL
* [x] `xml` (`html`, `xhtml`, `rss`, `atom`, `xjb`, `xsd`, `xsl`, `plist`, `wsf`, `svg`) — HTML, XML
* [ ] `xquery` (`xpath`, `xq`) — XQuery
* [x] `yaml` (`yml`) — YAML
* [ ] `zephir` (`zep`) — Zephir
low.highlight('js', '"use strict";')
// See `Usage` for the results.
```
<!--support end-->
…when using [browserify][] and minifying with [tinyify][] this results in 24kB
of code (9kB with GZip).
## Related

@@ -331,6 +538,10 @@

[rehype-stringify]: https://github.com/rehypejs/rehype/tree/main/packages/rehype-stringify
[to-html]: https://github.com/syntax-tree/hast-util-to-html
[hast-node]: https://github.com/syntax-tree/hast#ast
[rehype]: https://github.com/rehypejs/rehype
[unified]: https://github.com/unifiedjs/unified
[root]: https://github.com/syntax-tree/hast#root
[highlight.js]: https://github.com/highlightjs/highlight.js

@@ -348,12 +559,4 @@

[browser]: #browser
[result]: #result
[prism]: https://github.com/PrismJS/prism
[refractor]: https://github.com/wooorm/refractor
[browserify]: https://github.com/browserify/browserify
[tinyify]: https://github.com/browserify/tinyify
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