New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

coffee-lex

Package Overview
Dependencies
Maintainers
1
Versions
71
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

coffee-lex - npm Package Compare versions

Comparing version 8.0.0 to 8.1.0

489

dist/index.js
"use strict";
exports.__esModule = true;
Object.defineProperty(exports, "__esModule", { value: true });
var SourceLocation_1 = require("./SourceLocation");

@@ -7,3 +7,3 @@ var SourceToken_1 = require("./SourceToken");

var SourceType_1 = require("./SourceType");
exports.SourceType = SourceType_1["default"];
exports.SourceType = SourceType_1.default;
var BufferedStream_1 = require("./utils/BufferedStream");

@@ -20,19 +20,20 @@ var calculateHeregexpPadding_1 = require("./utils/calculateHeregexpPadding");

var tokens = [];
var pending = new BufferedStream_1["default"](stream(source));
var pending = new BufferedStream_1.default(stream(source));
do {
pending.unshift.apply(pending, calculateNormalStringPadding_1["default"](source, pending));
pending.unshift.apply(pending, calculateTripleQuotedStringPadding_1["default"](source, pending));
pending.unshift.apply(pending, calculateHeregexpPadding_1["default"](source, pending));
pending.unshift.apply(pending, calculateNormalStringPadding_1.default(source, pending));
pending.unshift.apply(pending, calculateTripleQuotedStringPadding_1.default(source, pending));
pending.unshift.apply(pending, calculateHeregexpPadding_1.default(source, pending));
pending.unshift.apply(pending, combinedLocationsForMultiwordOperators(pending, source));
location = pending.shift();
if (previousLocation && previousLocation.type !== SourceType_1["default"].SPACE) {
tokens.push(new SourceToken_1["default"](previousLocation.type, previousLocation.index, location.index));
if (previousLocation && previousLocation.type !== SourceType_1.default.SPACE) {
tokens.push(new SourceToken_1.default(previousLocation.type, previousLocation.index, location.index));
}
previousLocation = location;
} while (location.type !== SourceType_1["default"].EOF);
return new SourceTokenList_1["default"](tokens);
} while (location.type !== SourceType_1.default.EOF);
return new SourceTokenList_1.default(tokens);
}
exports["default"] = lex;
exports.default = lex;
function combinedLocationsForMultiwordOperators(stream, source) {
if (!stream.hasNext(SourceType_1["default"].OPERATOR, SourceType_1["default"].SPACE, SourceType_1["default"].OPERATOR) && !stream.hasNext(SourceType_1["default"].OPERATOR, SourceType_1["default"].SPACE, SourceType_1["default"].RELATION)) {
if (!stream.hasNext(SourceType_1.default.OPERATOR, SourceType_1.default.SPACE, SourceType_1.default.OPERATOR) &&
!stream.hasNext(SourceType_1.default.OPERATOR, SourceType_1.default.SPACE, SourceType_1.default.RELATION)) {
return [];

@@ -49,9 +50,5 @@ }

case 'of':
return [
new SourceLocation_1["default"](SourceType_1["default"].RELATION, not.index)
];
return [new SourceLocation_1.default(SourceType_1.default.RELATION, not.index)];
case 'instanceof':
return [
new SourceLocation_1["default"](SourceType_1["default"].OPERATOR, not.index)
];
return [new SourceLocation_1.default(SourceType_1.default.OPERATOR, not.index)];
}

@@ -66,13 +63,25 @@ }

*/
var STRING = [SourceType_1["default"].SSTRING_END, SourceType_1["default"].DSTRING_END, SourceType_1["default"].TSSTRING_END, SourceType_1["default"].TDSTRING_END];
var STRING = [SourceType_1.default.SSTRING_END, SourceType_1.default.DSTRING_END, SourceType_1.default.TSSTRING_END, SourceType_1.default.TDSTRING_END];
var CALLABLE = [
SourceType_1["default"].IDENTIFIER, SourceType_1["default"].CALL_END, SourceType_1["default"].RPAREN, SourceType_1["default"].RBRACKET, SourceType_1["default"].EXISTENCE, SourceType_1["default"].AT, SourceType_1["default"].THIS, SourceType_1["default"].SUPER
SourceType_1.default.IDENTIFIER,
SourceType_1.default.CALL_END,
SourceType_1.default.RPAREN,
SourceType_1.default.RBRACKET,
SourceType_1.default.EXISTENCE,
SourceType_1.default.AT,
SourceType_1.default.THIS,
SourceType_1.default.SUPER
];
var INDEXABLE = CALLABLE.concat([
SourceType_1["default"].NUMBER
SourceType_1.default.NUMBER
].concat(STRING, [
SourceType_1["default"].REGEXP, SourceType_1["default"].HEREGEXP_END,
SourceType_1["default"].BOOL, SourceType_1["default"].NULL, SourceType_1["default"].UNDEFINED, SourceType_1["default"].RBRACE, SourceType_1["default"].PROTO
SourceType_1.default.REGEXP,
SourceType_1.default.HEREGEXP_END,
SourceType_1.default.BOOL,
SourceType_1.default.NULL,
SourceType_1.default.UNDEFINED,
SourceType_1.default.RBRACE,
SourceType_1.default.PROTO
]));
var NOT_REGEXP = INDEXABLE.concat([SourceType_1["default"].INCREMENT, SourceType_1["default"].DECREMENT]);
var NOT_REGEXP = INDEXABLE.concat([SourceType_1.default.INCREMENT, SourceType_1.default.DECREMENT]);
var IDENTIFIER_PATTERN = /^(?!\d)((?:(?!\s)[$\w\x7f-\uffff])+)/;

@@ -85,23 +94,58 @@ var NUMBER_PATTERN = /^0b[01]+|^0o[0-7]+|^0x[\da-f]+|^\d*\.?\d+(?:e[+-]?\d+)?/i;

// equality
'===', '==', '!==', '!=',
'===',
'==',
'!==',
'!=',
// assignment
'=',
'+=', '-=', '/=', '*=', '%=', '%%=',
'||=', '&&=', '^=', 'or=', 'and=',
'+=',
'-=',
'/=',
'*=',
'%=',
'%%=',
'||=',
'&&=',
'^=',
'or=',
'and=',
'?=',
'|=', '&=', '~=', '<<=', '>>>=', '>>=',
'|=',
'&=',
'~=',
'<<=',
'>>>=',
'>>=',
// increment/decrement
'++', '--',
'++',
'--',
// math
'+', '-', '//', '/', '*', '%', '%%',
'+',
'-',
'//',
'/',
'*',
'%',
'%%',
// logical
'||', '&&', '^', '!',
'||',
'&&',
'^',
'!',
// existence
'?',
// bitwise
'|', '&', '~', '<<', '>>>', '>>',
'|',
'&',
'~',
'<<',
'>>>',
'>>',
// comparison
'<=', '<', '>=', '>',
'<=',
'<',
'>=',
'>',
// prototype access
'::',
'::'
];

@@ -113,3 +157,3 @@ /**

if (index === void 0) { index = 0; }
var location = new SourceLocation_1["default"](SourceType_1["default"].NORMAL, index);
var location = new SourceLocation_1.default(SourceType_1.default.NORMAL, index);
var interpolationStack = [];

@@ -127,80 +171,83 @@ var braceStack = [];

if (index >= source.length) {
setType(SourceType_1["default"].EOF);
setType(SourceType_1.default.EOF);
}
switch (location.type) {
case SourceType_1["default"].NORMAL:
case SourceType_1["default"].SPACE:
case SourceType_1["default"].IDENTIFIER:
case SourceType_1["default"].DOT:
case SourceType_1["default"].NUMBER:
case SourceType_1["default"].OPERATOR:
case SourceType_1["default"].INCREMENT:
case SourceType_1["default"].DECREMENT:
case SourceType_1["default"].COMMA:
case SourceType_1["default"].LPAREN:
case SourceType_1["default"].RPAREN:
case SourceType_1["default"].CALL_START:
case SourceType_1["default"].CALL_END:
case SourceType_1["default"].NEW:
case SourceType_1["default"].LBRACE:
case SourceType_1["default"].RBRACE:
case SourceType_1["default"].LBRACKET:
case SourceType_1["default"].RBRACKET:
case SourceType_1["default"].NEWLINE:
case SourceType_1["default"].COLON:
case SourceType_1["default"].FUNCTION:
case SourceType_1["default"].THIS:
case SourceType_1["default"].AT:
case SourceType_1["default"].SEMICOLON:
case SourceType_1["default"].IF:
case SourceType_1["default"].ELSE:
case SourceType_1["default"].THEN:
case SourceType_1["default"].FOR:
case SourceType_1["default"].OWN:
case SourceType_1["default"].WHILE:
case SourceType_1["default"].BOOL:
case SourceType_1["default"].NULL:
case SourceType_1["default"].UNDEFINED:
case SourceType_1["default"].REGEXP:
case SourceType_1["default"].SSTRING_END:
case SourceType_1["default"].DSTRING_END:
case SourceType_1["default"].TSSTRING_END:
case SourceType_1["default"].TDSTRING_END:
case SourceType_1["default"].INTERPOLATION_START:
case SourceType_1["default"].SUPER:
case SourceType_1["default"].TRY:
case SourceType_1["default"].CATCH:
case SourceType_1["default"].FINALLY:
case SourceType_1["default"].SWITCH:
case SourceType_1["default"].WHEN:
case SourceType_1["default"].BREAK:
case SourceType_1["default"].CONTINUE:
case SourceType_1["default"].EXISTENCE:
case SourceType_1["default"].CLASS:
case SourceType_1["default"].PROTO:
case SourceType_1["default"].RANGE:
case SourceType_1["default"].DELETE:
case SourceType_1["default"].RETURN:
case SourceType_1["default"].RELATION:
case SourceType_1["default"].LOOP:
case SourceType_1["default"].DO:
case SourceType_1["default"].YIELD:
case SourceType_1["default"].YIELDFROM:
case SourceType_1["default"].THROW:
case SourceType_1["default"].EXTENDS:
case SourceType_1["default"].CONTINUATION:
case SourceType_1.default.NORMAL:
case SourceType_1.default.SPACE:
case SourceType_1.default.IDENTIFIER:
case SourceType_1.default.DOT:
case SourceType_1.default.NUMBER:
case SourceType_1.default.OPERATOR:
case SourceType_1.default.INCREMENT:
case SourceType_1.default.DECREMENT:
case SourceType_1.default.COMMA:
case SourceType_1.default.LPAREN:
case SourceType_1.default.RPAREN:
case SourceType_1.default.CALL_START:
case SourceType_1.default.CALL_END:
case SourceType_1.default.NEW:
case SourceType_1.default.LBRACE:
case SourceType_1.default.RBRACE:
case SourceType_1.default.LBRACKET:
case SourceType_1.default.RBRACKET:
case SourceType_1.default.NEWLINE:
case SourceType_1.default.COLON:
case SourceType_1.default.FUNCTION:
case SourceType_1.default.THIS:
case SourceType_1.default.AT:
case SourceType_1.default.SEMICOLON:
case SourceType_1.default.IF:
case SourceType_1.default.ELSE:
case SourceType_1.default.THEN:
case SourceType_1.default.FOR:
case SourceType_1.default.OWN:
case SourceType_1.default.WHILE:
case SourceType_1.default.BOOL:
case SourceType_1.default.NULL:
case SourceType_1.default.UNDEFINED:
case SourceType_1.default.REGEXP:
case SourceType_1.default.SSTRING_END:
case SourceType_1.default.DSTRING_END:
case SourceType_1.default.TSSTRING_END:
case SourceType_1.default.TDSTRING_END:
case SourceType_1.default.INTERPOLATION_START:
case SourceType_1.default.SUPER:
case SourceType_1.default.TRY:
case SourceType_1.default.CATCH:
case SourceType_1.default.FINALLY:
case SourceType_1.default.SWITCH:
case SourceType_1.default.WHEN:
case SourceType_1.default.BREAK:
case SourceType_1.default.CONTINUE:
case SourceType_1.default.EXISTENCE:
case SourceType_1.default.CLASS:
case SourceType_1.default.PROTO:
case SourceType_1.default.RANGE:
case SourceType_1.default.DELETE:
case SourceType_1.default.RETURN:
case SourceType_1.default.RELATION:
case SourceType_1.default.LOOP:
case SourceType_1.default.DO:
case SourceType_1.default.YIELD:
case SourceType_1.default.YIELDFROM:
case SourceType_1.default.THROW:
case SourceType_1.default.EXTENDS:
case SourceType_1.default.IMPORT:
case SourceType_1.default.EXPORT:
case SourceType_1.default.DEFAULT:
case SourceType_1.default.CONTINUATION:
if (consume(SPACE_PATTERN)) {
setType(SourceType_1["default"].SPACE);
setType(SourceType_1.default.SPACE);
}
else if (consume('\n')) {
setType(SourceType_1["default"].NEWLINE);
setType(SourceType_1.default.NEWLINE);
}
else if (consume('...') || consume('..')) {
setType(SourceType_1["default"].RANGE);
setType(SourceType_1.default.RANGE);
}
else if (consume(NUMBER_PATTERN)) {
setType(SourceType_1["default"].NUMBER);
setType(SourceType_1.default.NUMBER);
}
else if (consume('.')) {
setType(SourceType_1["default"].DOT);
setType(SourceType_1.default.DOT);
}

@@ -211,5 +258,5 @@ else if (consume('"""')) {

endingDelimiter: '"""',
endSourceType: SourceType_1["default"].TDSTRING_END
endSourceType: SourceType_1.default.TDSTRING_END
});
setType(SourceType_1["default"].TDSTRING_START);
setType(SourceType_1.default.TDSTRING_START);
}

@@ -220,27 +267,27 @@ else if (consume('"')) {

endingDelimiter: '"',
endSourceType: SourceType_1["default"].DSTRING_END
endSourceType: SourceType_1.default.DSTRING_END
});
setType(SourceType_1["default"].DSTRING_START);
setType(SourceType_1.default.DSTRING_START);
}
else if (consume('\'\'\'')) {
else if (consume("'''")) {
stringStack.push({
allowInterpolations: false,
endingDelimiter: '\'\'\'',
endSourceType: SourceType_1["default"].TSSTRING_END
endingDelimiter: "'''",
endSourceType: SourceType_1.default.TSSTRING_END
});
setType(SourceType_1["default"].TSSTRING_START);
setType(SourceType_1.default.TSSTRING_START);
}
else if (consume('\'')) {
else if (consume("'")) {
stringStack.push({
allowInterpolations: false,
endingDelimiter: '\'',
endSourceType: SourceType_1["default"].SSTRING_END
endingDelimiter: "'",
endSourceType: SourceType_1.default.SSTRING_END
});
setType(SourceType_1["default"].SSTRING_START);
setType(SourceType_1.default.SSTRING_START);
}
else if (consume(/^###[^#]/)) {
setType(SourceType_1["default"].HERECOMMENT);
setType(SourceType_1.default.HERECOMMENT);
}
else if (consume('#')) {
setType(SourceType_1["default"].COMMENT);
setType(SourceType_1.default.COMMENT);
}

@@ -251,14 +298,14 @@ else if (consume('///')) {

endingDelimiter: '///',
endSourceType: SourceType_1["default"].HEREGEXP_END
endSourceType: SourceType_1.default.HEREGEXP_END
});
setType(SourceType_1["default"].HEREGEXP_START);
setType(SourceType_1.default.HEREGEXP_START);
}
else if (consume('(')) {
if (CALLABLE.indexOf(location.type) >= 0) {
parenStack.push(SourceType_1["default"].CALL_START);
setType(SourceType_1["default"].CALL_START);
parenStack.push(SourceType_1.default.CALL_START);
setType(SourceType_1.default.CALL_START);
}
else {
parenStack.push(SourceType_1["default"].LPAREN);
setType(SourceType_1["default"].LPAREN);
parenStack.push(SourceType_1.default.LPAREN);
setType(SourceType_1.default.LPAREN);
}

@@ -273,7 +320,7 @@ }

switch (lparen) {
case SourceType_1["default"].LPAREN:
setType(SourceType_1["default"].RPAREN);
case SourceType_1.default.LPAREN:
setType(SourceType_1.default.RPAREN);
break;
case SourceType_1["default"].CALL_START:
setType(SourceType_1["default"].CALL_END);
case SourceType_1.default.CALL_START:
setType(SourceType_1.default.CALL_END);
break;

@@ -286,10 +333,10 @@ default:

else if (consume('[')) {
setType(SourceType_1["default"].LBRACKET);
setType(SourceType_1.default.LBRACKET);
}
else if (consume(']')) {
setType(SourceType_1["default"].RBRACKET);
setType(SourceType_1.default.RBRACKET);
}
else if (consume('{')) {
braceStack.push(start);
setType(SourceType_1["default"].LBRACE);
setType(SourceType_1.default.LBRACE);
}

@@ -302,49 +349,52 @@ else if (consume('}')) {

braceStack.pop();
setType(SourceType_1["default"].RBRACE);
setType(SourceType_1.default.RBRACE);
}
}
else if (consumeAny(['->', '=>'])) {
setType(SourceType_1["default"].FUNCTION);
setType(SourceType_1.default.FUNCTION);
}
else if (consumeRegexp()) {
setType(SourceType_1["default"].REGEXP);
setType(SourceType_1.default.REGEXP);
}
else if (consume('::')) {
setType(SourceType_1["default"].PROTO);
setType(SourceType_1.default.PROTO);
}
else if (consume(':')) {
setType(SourceType_1["default"].COLON);
setType(SourceType_1.default.COLON);
}
else if (consume(',')) {
setType(SourceType_1["default"].COMMA);
setType(SourceType_1.default.COMMA);
}
else if (consume('@')) {
setType(SourceType_1["default"].AT);
setType(SourceType_1.default.AT);
}
else if (consume(';')) {
setType(SourceType_1["default"].SEMICOLON);
setType(SourceType_1.default.SEMICOLON);
}
else if (consume('```')) {
setType(SourceType_1.default.HEREJS);
}
else if (consume('`')) {
setType(SourceType_1["default"].JS);
setType(SourceType_1.default.JS);
}
else if (consumeAny(OPERATORS)) {
if (consumed() === '?') {
setType(SourceType_1["default"].EXISTENCE);
setType(SourceType_1.default.EXISTENCE);
}
else if (consumed() === '++') {
setType(SourceType_1["default"].INCREMENT);
setType(SourceType_1.default.INCREMENT);
}
else if (consumed() === '--') {
setType(SourceType_1["default"].DECREMENT);
setType(SourceType_1.default.DECREMENT);
}
else {
setType(SourceType_1["default"].OPERATOR);
setType(SourceType_1.default.OPERATOR);
}
}
else if (consume(YIELDFROM_PATTERN)) {
setType(SourceType_1["default"].YIELDFROM);
setType(SourceType_1.default.YIELDFROM);
}
else if (consume(IDENTIFIER_PATTERN)) {
var prevLocationIndex = locations.length - 1;
while (prevLocationIndex > 0 && locations[prevLocationIndex].type === SourceType_1["default"].NEWLINE) {
while (prevLocationIndex > 0 && locations[prevLocationIndex].type === SourceType_1.default.NEWLINE) {
prevLocationIndex--;

@@ -354,4 +404,5 @@ }

var nextIsColon = match(/^\s*:/);
if (nextIsColon || (prev && (prev.type === SourceType_1["default"].DOT || prev.type === SourceType_1["default"].PROTO || prev.type === SourceType_1["default"].AT))) {
setType(SourceType_1["default"].IDENTIFIER);
if (nextIsColon ||
(prev && (prev.type === SourceType_1.default.DOT || prev.type === SourceType_1.default.PROTO || prev.type === SourceType_1.default.AT))) {
setType(SourceType_1.default.IDENTIFIER);
}

@@ -362,46 +413,46 @@ else {

case 'unless':
setType(SourceType_1["default"].IF);
setType(SourceType_1.default.IF);
break;
case 'else':
setType(SourceType_1["default"].ELSE);
setType(SourceType_1.default.ELSE);
break;
case 'return':
setType(SourceType_1["default"].RETURN);
setType(SourceType_1.default.RETURN);
break;
case 'for':
setType(SourceType_1["default"].FOR);
setType(SourceType_1.default.FOR);
break;
case 'own':
setType(SourceType_1["default"].OWN);
setType(SourceType_1.default.OWN);
break;
case 'while':
case 'until':
setType(SourceType_1["default"].WHILE);
setType(SourceType_1.default.WHILE);
break;
case 'loop':
setType(SourceType_1["default"].LOOP);
setType(SourceType_1.default.LOOP);
break;
case 'then':
setType(SourceType_1["default"].THEN);
setType(SourceType_1.default.THEN);
break;
case 'switch':
setType(SourceType_1["default"].SWITCH);
setType(SourceType_1.default.SWITCH);
break;
case 'when':
setType(SourceType_1["default"].WHEN);
setType(SourceType_1.default.WHEN);
break;
case 'null':
setType(SourceType_1["default"].NULL);
setType(SourceType_1.default.NULL);
break;
case 'undefined':
setType(SourceType_1["default"].UNDEFINED);
setType(SourceType_1.default.UNDEFINED);
break;
case 'this':
setType(SourceType_1["default"].THIS);
setType(SourceType_1.default.THIS);
break;
case 'new':
setType(SourceType_1["default"].NEW);
setType(SourceType_1.default.NEW);
break;
case 'super':
setType(SourceType_1["default"].SUPER);
setType(SourceType_1.default.SUPER);
break;

@@ -414,3 +465,3 @@ case 'true':

case 'off':
setType(SourceType_1["default"].BOOL);
setType(SourceType_1.default.BOOL);
break;

@@ -423,43 +474,52 @@ case 'and':

case 'instanceof':
setType(SourceType_1["default"].OPERATOR);
setType(SourceType_1.default.OPERATOR);
break;
case 'class':
setType(SourceType_1["default"].CLASS);
setType(SourceType_1.default.CLASS);
break;
case 'break':
setType(SourceType_1["default"].BREAK);
setType(SourceType_1.default.BREAK);
break;
case 'continue':
setType(SourceType_1["default"].CONTINUE);
setType(SourceType_1.default.CONTINUE);
break;
case 'try':
setType(SourceType_1["default"].TRY);
setType(SourceType_1.default.TRY);
break;
case 'catch':
setType(SourceType_1["default"].CATCH);
setType(SourceType_1.default.CATCH);
break;
case 'finally':
setType(SourceType_1["default"].FINALLY);
setType(SourceType_1.default.FINALLY);
break;
case 'delete':
setType(SourceType_1["default"].DELETE);
setType(SourceType_1.default.DELETE);
break;
case 'in':
case 'of':
setType(SourceType_1["default"].RELATION);
setType(SourceType_1.default.RELATION);
break;
case 'do':
setType(SourceType_1["default"].DO);
setType(SourceType_1.default.DO);
break;
case 'yield':
setType(SourceType_1["default"].YIELD);
setType(SourceType_1.default.YIELD);
break;
case 'throw':
setType(SourceType_1["default"].THROW);
setType(SourceType_1.default.THROW);
break;
case 'extends':
setType(SourceType_1["default"].EXTENDS);
setType(SourceType_1.default.EXTENDS);
break;
case 'import':
setType(SourceType_1.default.IMPORT);
break;
case 'export':
setType(SourceType_1.default.EXPORT);
break;
case 'default':
setType(SourceType_1.default.DEFAULT);
break;
default:
setType(SourceType_1["default"].IDENTIFIER);
setType(SourceType_1.default.IDENTIFIER);
}

@@ -469,16 +529,16 @@ }

else if (consume('\\')) {
setType(SourceType_1["default"].CONTINUATION);
setType(SourceType_1.default.CONTINUATION);
}
else {
setType(SourceType_1["default"].UNKNOWN);
setType(SourceType_1.default.UNKNOWN);
}
break;
case SourceType_1["default"].SSTRING_START:
case SourceType_1["default"].DSTRING_START:
case SourceType_1["default"].TSSTRING_START:
case SourceType_1["default"].TDSTRING_START:
case SourceType_1["default"].HEREGEXP_START:
setType(SourceType_1["default"].STRING_CONTENT);
case SourceType_1.default.SSTRING_START:
case SourceType_1.default.DSTRING_START:
case SourceType_1.default.TSSTRING_START:
case SourceType_1.default.TDSTRING_START:
case SourceType_1.default.HEREGEXP_START:
setType(SourceType_1.default.STRING_CONTENT);
break;
case SourceType_1["default"].STRING_CONTENT: {
case SourceType_1.default.STRING_CONTENT: {
var stringOptions = stringStack[stringStack.length - 1];

@@ -503,5 +563,5 @@ if (!stringOptions) {

}
case SourceType_1["default"].COMMENT:
case SourceType_1.default.COMMENT:
if (consume('\n')) {
setType(SourceType_1["default"].NEWLINE);
setType(SourceType_1.default.NEWLINE);
}

@@ -512,5 +572,5 @@ else {

break;
case SourceType_1["default"].HERECOMMENT:
case SourceType_1.default.HERECOMMENT:
if (consume('###')) {
setType(SourceType_1["default"].NORMAL);
setType(SourceType_1.default.NORMAL);
}

@@ -521,3 +581,3 @@ else {

break;
case SourceType_1["default"].INTERPOLATION_END:
case SourceType_1.default.INTERPOLATION_END:
var lastInterpolation = interpolationStack.pop();

@@ -531,9 +591,9 @@ if (!lastInterpolation) {

break;
case SourceType_1["default"].HEREGEXP_END:
case SourceType_1.default.HEREGEXP_END:
while (consumeAny(REGEXP_FLAGS)) {
// condition has side-effect
}
setType(SourceType_1["default"].NORMAL);
setType(SourceType_1.default.NORMAL);
break;
case SourceType_1["default"].JS:
case SourceType_1.default.JS:
if (consume('\\')) {

@@ -543,3 +603,3 @@ index++;

else if (consume('`')) {
setType(SourceType_1["default"].NORMAL);
setType(SourceType_1.default.NORMAL);
}

@@ -550,6 +610,16 @@ else {

break;
case SourceType_1["default"].EOF:
case SourceType_1.default.HEREJS:
if (consume('\\')) {
index++;
}
else if (consume('```')) {
setType(SourceType_1.default.NORMAL);
}
else {
index++;
}
break;
case SourceType_1.default.EOF:
if (braceStack.length !== 0) {
throw new Error("unexpected EOF while looking for '}' to match '{' " +
("at " + braceStack[braceStack.length - 1]));
throw new Error("unexpected EOF while looking for '}' to match '{' " + ("at " + braceStack[braceStack.length - 1]));
}

@@ -560,3 +630,3 @@ if (stringStack.length !== 0) {

break;
case SourceType_1["default"].UNKNOWN:
case SourceType_1.default.UNKNOWN:
// Jump to the end.

@@ -566,10 +636,9 @@ index = source.length;

default:
throw new Error("unknown source type at offset " + location.index + ": " + SourceType_1["default"][location.type]);
throw new Error("unknown source type at offset " + location.index + ": " + SourceType_1.default[location.type]);
}
shouldStepAgain = (
// Don't report on going back to "normal" source code.
location.type === SourceType_1["default"].NORMAL ||
// Don't report if nothing has changed, unless we're at the end.
(location === lastLocation &&
location.type !== SourceType_1["default"].EOF));
shouldStepAgain =
// Don't report on going back to "normal" source code.
location.type === SourceType_1.default.NORMAL ||
// Don't report if nothing has changed, unless we're at the end.
(location === lastLocation && location.type !== SourceType_1.default.EOF);
} while (shouldStepAgain);

@@ -601,3 +670,3 @@ locations.push(location);

var spaced = false;
if (prev.type === SourceType_1["default"].SPACE) {
if (prev.type === SourceType_1.default.SPACE) {
spaced = true;

@@ -628,3 +697,3 @@ prev = locations[locations.length - 2];

function setType(newType) {
location = new SourceLocation_1["default"](newType, start);
location = new SourceLocation_1.default(newType, start);
}

@@ -642,3 +711,3 @@ function match(value) {

interpolationStack.push({ type: location.type, braces: braceStack });
setType(SourceType_1["default"].INTERPOLATION_START);
setType(SourceType_1.default.INTERPOLATION_START);
braceStack = [];

@@ -650,3 +719,3 @@ }

}
setType(SourceType_1["default"].INTERPOLATION_END);
setType(SourceType_1.default.INTERPOLATION_END);
}

@@ -661,5 +730,5 @@ }

result.push(location);
} while (location.type !== SourceType_1["default"].EOF);
} while (location.type !== SourceType_1.default.EOF);
return result;
}
exports.consumeStream = consumeStream;
"use strict";
exports.__esModule = true;
Object.defineProperty(exports, "__esModule", { value: true });
/**
* Represents a change in source code type at a particular index.
*/
var SourceLocation = (function () {
var SourceLocation = /** @class */ (function () {
function SourceLocation(type, index) {

@@ -13,2 +13,2 @@ this.type = type;

}());
exports["default"] = SourceLocation;
exports.default = SourceLocation;
"use strict";
exports.__esModule = true;
var SourceToken = (function () {
Object.defineProperty(exports, "__esModule", { value: true });
var SourceToken = /** @class */ (function () {
function SourceToken(type, start, end) {

@@ -14,2 +14,2 @@ if (start > end) {

}());
exports["default"] = SourceToken;
exports.default = SourceToken;
"use strict";
exports.__esModule = true;
Object.defineProperty(exports, "__esModule", { value: true });
var SourceTokenListIndex_1 = require("./SourceTokenListIndex");

@@ -9,3 +9,3 @@ var SourceType_1 = require("./SourceType");

*/
var SourceTokenList = (function () {
var SourceTokenList = /** @class */ (function () {
function SourceTokenList(tokens) {

@@ -44,3 +44,5 @@ this._validateTokens(tokens);

var result = [];
this.forEach(function (token, index, list) { result.push(mapper(token, index, list)); });
this.forEach(function (token, index, list) {
result.push(mapper(token, index, list));
});
return result;

@@ -87,9 +89,11 @@ };

for (var _i = 0, _a = [
[SourceType_1["default"].DSTRING_START, SourceType_1["default"].DSTRING_END], [SourceType_1["default"].TDSTRING_START, SourceType_1["default"].TDSTRING_END], [SourceType_1["default"].HEREGEXP_START, SourceType_1["default"].HEREGEXP_END]
[SourceType_1.default.DSTRING_START, SourceType_1.default.DSTRING_END],
[SourceType_1.default.TDSTRING_START, SourceType_1.default.TDSTRING_END],
[SourceType_1.default.HEREGEXP_START, SourceType_1.default.HEREGEXP_END]
]; _i < _a.length; _i++) {
var _b = _a[_i], startType = _b[0], endType = _b[1];
var range = this.rangeOfMatchingTokensContainingTokenIndex(startType, endType, index);
if (bestRange === null || bestRange === undefined ||
(range !== null && range !== undefined &&
range[0].distance(range[1]) < bestRange[0].distance(bestRange[1]))) {
if (bestRange === null ||
bestRange === undefined ||
(range !== null && range !== undefined && range[0].distance(range[1]) < bestRange[0].distance(bestRange[1]))) {
bestRange = range;

@@ -114,80 +118,77 @@ }

switch (token.type) {
case startType:
{
var level_1 = 0;
var start = index;
var endIndex = this.indexOfTokenMatchingPredicate(function (token) {
if (token.type === startType) {
level_1 += 1;
case startType: {
var level_1 = 0;
var start = index;
var endIndex = this.indexOfTokenMatchingPredicate(function (token) {
if (token.type === startType) {
level_1 += 1;
}
else if (token.type === endType) {
level_1 -= 1;
if (level_1 === 0) {
return true;
}
else if (token.type === endType) {
level_1 -= 1;
if (level_1 === 0) {
return true;
}
}
return false;
}, start);
if (!endIndex) {
}
return false;
}, start);
if (!endIndex) {
return null;
}
else {
var rangeEnd = endIndex.next();
if (!rangeEnd) {
return null;
}
else {
var rangeEnd = endIndex.next();
if (!rangeEnd) {
return null;
return [start, rangeEnd];
}
}
case endType: {
var level_2 = 0;
var endIndex = index;
var startIndex = this.lastIndexOfTokenMatchingPredicate(function (token) {
if (token.type === startType) {
level_2 -= 1;
if (level_2 === 0) {
return true;
}
return [start, rangeEnd];
}
else if (token.type === endType) {
level_2 += 1;
}
return false;
}, endIndex);
if (!startIndex) {
return null;
}
case endType:
{
var level_2 = 0;
var endIndex = index;
var startIndex = this.lastIndexOfTokenMatchingPredicate(function (token) {
if (token.type === startType) {
level_2 -= 1;
if (level_2 === 0) {
return true;
}
}
else if (token.type === endType) {
level_2 += 1;
}
return false;
}, endIndex);
if (!startIndex) {
else {
var rangeEnd = endIndex.next();
if (!rangeEnd) {
return null;
}
else {
var rangeEnd = endIndex.next();
if (!rangeEnd) {
return null;
}
else {
return [startIndex, rangeEnd];
}
return [startIndex, rangeEnd];
}
}
default:
{
var level_3 = 0;
var startIndex = this.lastIndexOfTokenMatchingPredicate(function (token) {
if (token.type === startType) {
if (level_3 === 0) {
return true;
}
level_3 -= 1;
}
default: {
var level_3 = 0;
var startIndex = this.lastIndexOfTokenMatchingPredicate(function (token) {
if (token.type === startType) {
if (level_3 === 0) {
return true;
}
else if (token.type === endType) {
level_3 += 1;
}
return false;
}, index);
if (!startIndex) {
return null;
level_3 -= 1;
}
else {
return this.rangeOfMatchingTokensContainingTokenIndex(startType, endType, startIndex);
else if (token.type === endType) {
level_3 += 1;
}
return false;
}, index);
if (!startIndex) {
return null;
}
else {
return this.rangeOfMatchingTokensContainingTokenIndex(startType, endType, startIndex);
}
}
}

@@ -318,4 +319,3 @@ };

if (tokens[i].end > tokens[i + 1].start) {
throw new Error("Tokens not in order. Expected " + JSON.stringify(tokens[i]) + " before " +
("" + JSON.stringify(tokens[i + 1])));
throw new Error("Tokens not in order. Expected " + JSON.stringify(tokens[i]) + " before " + ("" + JSON.stringify(tokens[i + 1])));
}

@@ -329,8 +329,6 @@ }

if (!index) {
throw new Error("unexpected 'null' index, perhaps you forgot to check the result of " +
"'indexOfTokenContainingSourceIndex'?");
throw new Error("unexpected 'null' index, perhaps you forgot to check the result of " + "'indexOfTokenContainingSourceIndex'?");
}
if (typeof index === 'number') {
throw new Error("to get a token at index " + index + ", " +
("use list.tokenAtIndex(list.startIndex.advance(" + index + "))"));
throw new Error("to get a token at index " + index + ", " + ("use list.tokenAtIndex(list.startIndex.advance(" + index + "))"));
}

@@ -355,3 +353,3 @@ if (index['_sourceTokenList'] !== this) {

if (!cached) {
cached = new SourceTokenListIndex_1["default"](this, index);
cached = new SourceTokenListIndex_1.default(this, index);
this._indexCache[index] = cached;

@@ -369,2 +367,2 @@ }

}());
exports["default"] = SourceTokenList;
exports.default = SourceTokenList;
"use strict";
exports.__esModule = true;
Object.defineProperty(exports, "__esModule", { value: true });
/**
* Represents a token at a particular index within a list of tokens.
*/
var SourceTokenListIndex = (function () {
var SourceTokenListIndex = /** @class */ (function () {
function SourceTokenListIndex(sourceTokenList, index) {

@@ -66,2 +66,2 @@ this._sourceTokenList = sourceTokenList;

}());
exports["default"] = SourceTokenListIndex;
exports.default = SourceTokenListIndex;

@@ -18,2 +18,3 @@ /**

DECREMENT = "DECREMENT",
DEFAULT = "DEFAULT",
DELETE = "DELETE",

@@ -25,2 +26,3 @@ DO = "DO",

ELSE = "ELSE",
EXPORT = "EXPORT",
EOF = "EOF",

@@ -33,5 +35,7 @@ EXISTENCE = "EXISTENCE",

HERECOMMENT = "HERECOMMENT",
HEREJS = "HEREJS",
HEREGEXP_START = "HEREGEXP_START",
HEREGEXP_END = "HEREGEXP_END",
IF = "IF",
IMPORT = "IMPORT",
INCREMENT = "INCREMENT",

@@ -38,0 +42,0 @@ INTERPOLATION_START = "INTERPOLATION_START",

"use strict";
exports.__esModule = true;
Object.defineProperty(exports, "__esModule", { value: true });
/**

@@ -21,2 +21,3 @@ * Represents a particular type of CoffeeScript code.

SourceType["DECREMENT"] = "DECREMENT";
SourceType["DEFAULT"] = "DEFAULT";
SourceType["DELETE"] = "DELETE";

@@ -28,2 +29,3 @@ SourceType["DO"] = "DO";

SourceType["ELSE"] = "ELSE";
SourceType["EXPORT"] = "EXPORT";
SourceType["EOF"] = "EOF";

@@ -36,5 +38,7 @@ SourceType["EXISTENCE"] = "EXISTENCE";

SourceType["HERECOMMENT"] = "HERECOMMENT";
SourceType["HEREJS"] = "HEREJS";
SourceType["HEREGEXP_START"] = "HEREGEXP_START";
SourceType["HEREGEXP_END"] = "HEREGEXP_END";
SourceType["IF"] = "IF";
SourceType["IMPORT"] = "IMPORT";
SourceType["INCREMENT"] = "INCREMENT";

@@ -88,2 +92,2 @@ SourceType["INTERPOLATION_START"] = "INTERPOLATION_START";

})(SourceType || (SourceType = {}));
exports["default"] = SourceType;
exports.default = SourceType;
"use strict";
exports.__esModule = true;
var BufferedStream = (function () {
Object.defineProperty(exports, "__esModule", { value: true });
var BufferedStream = /** @class */ (function () {
function BufferedStream(stream) {

@@ -41,2 +41,2 @@ this.pending = [];

}());
exports["default"] = BufferedStream;
exports.default = BufferedStream;
"use strict";
exports.__esModule = true;
Object.defineProperty(exports, "__esModule", { value: true });
var SourceType_1 = require("../SourceType");

@@ -10,6 +10,6 @@ var PaddingTracker_1 = require("./PaddingTracker");

function calculateHeregexpPadding(source, stream) {
if (!stream.hasNext(SourceType_1["default"].HEREGEXP_START)) {
if (!stream.hasNext(SourceType_1.default.HEREGEXP_START)) {
return [];
}
var paddingTracker = new PaddingTracker_1["default"](source, stream, SourceType_1["default"].HEREGEXP_END);
var paddingTracker = new PaddingTracker_1.default(source, stream, SourceType_1.default.HEREGEXP_END);
for (var _i = 0, _a = paddingTracker.fragments; _i < _a.length; _i++) {

@@ -44,3 +44,3 @@ var fragment = _a[_i];

}
exports["default"] = calculateHeregexpPadding;
exports.default = calculateHeregexpPadding;
/**

@@ -47,0 +47,0 @@ * A space, tab, or newline is escaped if it is preceded by an odd number of

"use strict";
exports.__esModule = true;
Object.defineProperty(exports, "__esModule", { value: true });
var SourceType_1 = require("../SourceType");

@@ -16,7 +16,7 @@ var PaddingTracker_1 = require("./PaddingTracker");

var paddingTracker;
if (stream.hasNext(SourceType_1["default"].SSTRING_START)) {
paddingTracker = new PaddingTracker_1["default"](source, stream, SourceType_1["default"].SSTRING_END);
if (stream.hasNext(SourceType_1.default.SSTRING_START)) {
paddingTracker = new PaddingTracker_1.default(source, stream, SourceType_1.default.SSTRING_END);
}
else if (stream.hasNext(SourceType_1["default"].DSTRING_START)) {
paddingTracker = new PaddingTracker_1["default"](source, stream, SourceType_1["default"].DSTRING_END);
else if (stream.hasNext(SourceType_1.default.DSTRING_START)) {
paddingTracker = new PaddingTracker_1.default(source, stream, SourceType_1.default.DSTRING_END);
}

@@ -43,8 +43,7 @@ else {

// are also allowed and should be skipped.
while ((pos < content.length && ' \t\n'.includes(content[pos])) ||
(content.slice(pos, pos + 2) === '\\\n')) {
while ((pos < content.length && ' \t\n'.includes(content[pos])) || content.slice(pos, pos + 2) === '\\\n') {
pos++;
}
var endIndex = pos;
if (isNewlineEscaped_1["default"](content, newlinePos)) {
if (isNewlineEscaped_1.default(content, newlinePos)) {
// Escaped newlines behave a bit strangely: whitespace is removed from

@@ -82,2 +81,2 @@ // the right side but not the left side, and the newline and its

}
exports["default"] = calculateNormalStringPadding;
exports.default = calculateNormalStringPadding;
"use strict";
exports.__esModule = true;
Object.defineProperty(exports, "__esModule", { value: true });
var SourceType_1 = require("../SourceType");

@@ -32,7 +32,7 @@ var isNewlineEscaped_1 = require("./isNewlineEscaped");

var paddingTracker;
if (stream.hasNext(SourceType_1["default"].TSSTRING_START)) {
paddingTracker = new PaddingTracker_1["default"](source, stream, SourceType_1["default"].TSSTRING_END);
if (stream.hasNext(SourceType_1.default.TSSTRING_START)) {
paddingTracker = new PaddingTracker_1.default(source, stream, SourceType_1.default.TSSTRING_END);
}
else if (stream.hasNext(SourceType_1["default"].TDSTRING_START)) {
paddingTracker = new PaddingTracker_1["default"](source, stream, SourceType_1["default"].TDSTRING_END);
else if (stream.hasNext(SourceType_1.default.TDSTRING_START)) {
paddingTracker = new PaddingTracker_1.default(source, stream, SourceType_1.default.TDSTRING_END);
}

@@ -63,7 +63,6 @@ else {

for (var i = 0; i < fragment.content.length; i++) {
if (fragment.content[i] === '\n' && isNewlineEscaped_1["default"](fragment.content, i)) {
if (fragment.content[i] === '\n' && isNewlineEscaped_1.default(fragment.content, i)) {
var backslashPos = fragment.content.lastIndexOf('\\', i);
var paddingEnd = i;
while (paddingEnd < fragment.content.length &&
' \t\n'.includes(fragment.content[paddingEnd])) {
while (paddingEnd < fragment.content.length && ' \t\n'.includes(fragment.content[paddingEnd])) {
paddingEnd++;

@@ -74,4 +73,3 @@ }

var isStartOfLine = i > 0 && fragment.content[i - 1] === '\n';
var isStartOfString = fragment.index === 0 && i === 0;
if (isStartOfLine || isStartOfString) {
if (isStartOfLine) {
var paddingStart = i;

@@ -87,3 +85,3 @@ var paddingEnd = i + sharedIndent.length;

}
exports["default"] = calculateTripleQuotedStringPadding;
exports.default = calculateTripleQuotedStringPadding;
function getIndentForFragments(fragments) {

@@ -152,11 +150,12 @@ var hasSeenLine = false;

var isEatingWhitespace = false;
for (var i = 0; i < str.length; i++) {
if (str[i] === '\n' && numBackslashes % 2 === 0 && !isEatingWhitespace) {
for (var _i = 0, str_1 = str; _i < str_1.length; _i++) {
var chr = str_1[_i];
if (chr === '\n' && numBackslashes % 2 === 0 && !isEatingWhitespace) {
lines.push('');
}
else {
if (str[i] === '\n' && numBackslashes % 2 === 1) {
if (chr === '\n' && numBackslashes % 2 === 1) {
isEatingWhitespace = true;
}
if (str[i] === '\\') {
if (chr === '\\') {
numBackslashes++;

@@ -167,6 +166,6 @@ }

}
if (!' \t\n'.includes(str[i])) {
if (!' \t\n'.includes(chr)) {
isEatingWhitespace = false;
}
lines[lines.length - 1] += str[i];
lines[lines.length - 1] += chr;
}

@@ -173,0 +172,0 @@ }

"use strict";
exports.__esModule = true;
Object.defineProperty(exports, "__esModule", { value: true });
/**

@@ -26,2 +26,2 @@ * In both normal multiline strings and triple quoted strings, a newline

}
exports["default"] = isNewlineEscaped;
exports.default = isNewlineEscaped;
"use strict";
exports.__esModule = true;
Object.defineProperty(exports, "__esModule", { value: true });
var SourceLocation_1 = require("../SourceLocation");

@@ -26,3 +26,3 @@ var SourceType_1 = require("../SourceType");

*/
var PaddingTracker = (function () {
var PaddingTracker = /** @class */ (function () {
function PaddingTracker(source, stream, endType) {

@@ -36,3 +36,3 @@ this.fragments = [];

this._originalLocations.push(location);
if (interpolationLevel === 0 && location.type === SourceType_1["default"].STRING_CONTENT) {
if (interpolationLevel === 0 && location.type === SourceType_1.default.STRING_CONTENT) {
var start = location.index;

@@ -44,6 +44,6 @@ var end = stream.peek().index;

}
else if (location.type === SourceType_1["default"].INTERPOLATION_START) {
else if (location.type === SourceType_1.default.INTERPOLATION_START) {
interpolationLevel += 1;
}
else if (location.type === SourceType_1["default"].INTERPOLATION_END) {
else if (location.type === SourceType_1.default.INTERPOLATION_END) {
interpolationLevel -= 1;

@@ -59,4 +59,3 @@ }

var currentRange = this.fragments[rangeIndex];
if (location.type === SourceType_1["default"].STRING_CONTENT &&
currentRange && location.index === currentRange.start) {
if (location.type === SourceType_1.default.STRING_CONTENT && currentRange && location.index === currentRange.start) {
resultLocations.push.apply(resultLocations, currentRange.computeSourceLocations());

@@ -76,4 +75,4 @@ rangeIndex++;

}());
exports["default"] = PaddingTracker;
var TrackedFragment = (function () {
exports.default = PaddingTracker;
var TrackedFragment = /** @class */ (function () {
function TrackedFragment(content, start, end, index) {

@@ -95,3 +94,3 @@ this.content = content;

if (this.start === this.end) {
return [new SourceLocation_1["default"](SourceType_1["default"].STRING_CONTENT, this.start)];
return [new SourceLocation_1.default(SourceType_1.default.STRING_CONTENT, this.start)];
}

@@ -140,12 +139,12 @@ // Break the marked ranges down into events, similar to how you might count

if (paddingDepth > 0) {
sourceType = SourceType_1["default"].STRING_PADDING;
sourceType = SourceType_1.default.STRING_PADDING;
}
else if (lineSeparatorDepth > 0) {
sourceType = SourceType_1["default"].STRING_LINE_SEPARATOR;
sourceType = SourceType_1.default.STRING_LINE_SEPARATOR;
}
else {
sourceType = SourceType_1["default"].STRING_CONTENT;
sourceType = SourceType_1.default.STRING_CONTENT;
}
if (sourceType !== lastSourceType) {
resultLocations.push(new SourceLocation_1["default"](sourceType, sourceIndex));
resultLocations.push(new SourceLocation_1.default(sourceType, sourceIndex));
lastSourceType = sourceType;

@@ -152,0 +151,0 @@ }

@@ -8,4 +8,8 @@ {

"scripts": {
"lint": "tslint --config tslint.json --project tsconfig.json --type-check",
"lint-fix": "tslint --config tslint.json --project tsconfig.json --type-check --fix",
"check-format": "prettier-check --parser typescript '{src,test}/**/*.ts'",
"reformat": "prettier --parser typescript --write '{src,test}/**/*.ts'",
"prelint": "yarn run check-format",
"lint": "tslint --config tslint.json --project tsconfig.json",
"prelint-fix": "yarn run reformat",
"lint-fix": "tslint --config tslint.json --project tsconfig.json --fix",
"pretest": "yarn run lint",

@@ -34,10 +38,12 @@ "test": "mocha"

"devDependencies": {
"@types/mocha": "^2.2.41",
"@types/node": "^8.0.9",
"decaffeinate-coffeescript": "^1.10.0-patch25",
"mocha": "^3.2.0",
"@types/mocha": "^2.2.46",
"@types/node": "^9.3.0",
"decaffeinate-coffeescript": "1.12.7-patch.1",
"mocha": "^5.0.0",
"prettier": "1.10.2",
"prettier-check": "2.0.0",
"semantic-release": "^6.3.5",
"ts-node": "^3.2.0",
"tslint": "^5.5.0",
"typescript": "^2.4.1"
"ts-node": "^4.1.0",
"tslint": "^5.8.0",
"typescript": "^2.6.2"
},

@@ -47,3 +53,3 @@ "publishConfig": {

},
"version": "8.0.0"
"version": "8.1.0"
}

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

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