WIP: bootstrap and partial real Solana watcher implementation
This commit is contained in:
@@ -0,0 +1,2 @@
|
||||
import type * as ts from 'typescript';
|
||||
export declare function specifierNameMatches(type: ts.Type, names: string | string[]): boolean;
|
||||
@@ -0,0 +1,694 @@
|
||||
// This definition file follows a somewhat unusual format. ESTree allows
|
||||
// runtime type checks based on the `type` parameter. In order to explain this
|
||||
// to typescript we want to use discriminated union types:
|
||||
// https://github.com/Microsoft/TypeScript/pull/9163
|
||||
//
|
||||
// For ESTree this is a bit tricky because the high level interfaces like
|
||||
// Node or Function are pulling double duty. We want to pass common fields down
|
||||
// to the interfaces that extend them (like Identifier or
|
||||
// ArrowFunctionExpression), but you can't extend a type union or enforce
|
||||
// common fields on them. So we've split the high level interfaces into two
|
||||
// types, a base type which passes down inherited fields, and a type union of
|
||||
// all types which extend the base type. Only the type union is exported, and
|
||||
// the union is how other types refer to the collection of inheriting types.
|
||||
//
|
||||
// This makes the definitions file here somewhat more difficult to maintain,
|
||||
// but it has the notable advantage of making ESTree much easier to use as
|
||||
// an end user.
|
||||
|
||||
export interface BaseNodeWithoutComments {
|
||||
// Every leaf interface that extends BaseNode must specify a type property.
|
||||
// The type property should be a string literal. For example, Identifier
|
||||
// has: `type: "Identifier"`
|
||||
type: string;
|
||||
loc?: SourceLocation | null | undefined;
|
||||
range?: [number, number] | undefined;
|
||||
}
|
||||
|
||||
export interface BaseNode extends BaseNodeWithoutComments {
|
||||
leadingComments?: Comment[] | undefined;
|
||||
trailingComments?: Comment[] | undefined;
|
||||
}
|
||||
|
||||
export interface NodeMap {
|
||||
AssignmentProperty: AssignmentProperty;
|
||||
CatchClause: CatchClause;
|
||||
Class: Class;
|
||||
ClassBody: ClassBody;
|
||||
Expression: Expression;
|
||||
Function: Function;
|
||||
Identifier: Identifier;
|
||||
Literal: Literal;
|
||||
MethodDefinition: MethodDefinition;
|
||||
ModuleDeclaration: ModuleDeclaration;
|
||||
ModuleSpecifier: ModuleSpecifier;
|
||||
Pattern: Pattern;
|
||||
PrivateIdentifier: PrivateIdentifier;
|
||||
Program: Program;
|
||||
Property: Property;
|
||||
PropertyDefinition: PropertyDefinition;
|
||||
SpreadElement: SpreadElement;
|
||||
Statement: Statement;
|
||||
Super: Super;
|
||||
SwitchCase: SwitchCase;
|
||||
TemplateElement: TemplateElement;
|
||||
VariableDeclarator: VariableDeclarator;
|
||||
}
|
||||
|
||||
export type Node = NodeMap[keyof NodeMap];
|
||||
|
||||
export interface Comment extends BaseNodeWithoutComments {
|
||||
type: "Line" | "Block";
|
||||
value: string;
|
||||
}
|
||||
|
||||
export interface SourceLocation {
|
||||
source?: string | null | undefined;
|
||||
start: Position;
|
||||
end: Position;
|
||||
}
|
||||
|
||||
export interface Position {
|
||||
/** >= 1 */
|
||||
line: number;
|
||||
/** >= 0 */
|
||||
column: number;
|
||||
}
|
||||
|
||||
export interface Program extends BaseNode {
|
||||
type: "Program";
|
||||
sourceType: "script" | "module";
|
||||
body: Array<Directive | Statement | ModuleDeclaration>;
|
||||
comments?: Comment[] | undefined;
|
||||
}
|
||||
|
||||
export interface Directive extends BaseNode {
|
||||
type: "ExpressionStatement";
|
||||
expression: Literal;
|
||||
directive: string;
|
||||
}
|
||||
|
||||
export interface BaseFunction extends BaseNode {
|
||||
params: Pattern[];
|
||||
generator?: boolean | undefined;
|
||||
async?: boolean | undefined;
|
||||
// The body is either BlockStatement or Expression because arrow functions
|
||||
// can have a body that's either. FunctionDeclarations and
|
||||
// FunctionExpressions have only BlockStatement bodies.
|
||||
body: BlockStatement | Expression;
|
||||
}
|
||||
|
||||
export type Function = FunctionDeclaration | FunctionExpression | ArrowFunctionExpression;
|
||||
|
||||
export type Statement =
|
||||
| ExpressionStatement
|
||||
| BlockStatement
|
||||
| StaticBlock
|
||||
| EmptyStatement
|
||||
| DebuggerStatement
|
||||
| WithStatement
|
||||
| ReturnStatement
|
||||
| LabeledStatement
|
||||
| BreakStatement
|
||||
| ContinueStatement
|
||||
| IfStatement
|
||||
| SwitchStatement
|
||||
| ThrowStatement
|
||||
| TryStatement
|
||||
| WhileStatement
|
||||
| DoWhileStatement
|
||||
| ForStatement
|
||||
| ForInStatement
|
||||
| ForOfStatement
|
||||
| Declaration;
|
||||
|
||||
export interface BaseStatement extends BaseNode {}
|
||||
|
||||
export interface EmptyStatement extends BaseStatement {
|
||||
type: "EmptyStatement";
|
||||
}
|
||||
|
||||
export interface BlockStatement extends BaseStatement {
|
||||
type: "BlockStatement";
|
||||
body: Statement[];
|
||||
innerComments?: Comment[] | undefined;
|
||||
}
|
||||
|
||||
export interface StaticBlock extends Omit<BlockStatement, "type"> {
|
||||
type: "StaticBlock";
|
||||
}
|
||||
|
||||
export interface ExpressionStatement extends BaseStatement {
|
||||
type: "ExpressionStatement";
|
||||
expression: Expression;
|
||||
}
|
||||
|
||||
export interface IfStatement extends BaseStatement {
|
||||
type: "IfStatement";
|
||||
test: Expression;
|
||||
consequent: Statement;
|
||||
alternate?: Statement | null | undefined;
|
||||
}
|
||||
|
||||
export interface LabeledStatement extends BaseStatement {
|
||||
type: "LabeledStatement";
|
||||
label: Identifier;
|
||||
body: Statement;
|
||||
}
|
||||
|
||||
export interface BreakStatement extends BaseStatement {
|
||||
type: "BreakStatement";
|
||||
label?: Identifier | null | undefined;
|
||||
}
|
||||
|
||||
export interface ContinueStatement extends BaseStatement {
|
||||
type: "ContinueStatement";
|
||||
label?: Identifier | null | undefined;
|
||||
}
|
||||
|
||||
export interface WithStatement extends BaseStatement {
|
||||
type: "WithStatement";
|
||||
object: Expression;
|
||||
body: Statement;
|
||||
}
|
||||
|
||||
export interface SwitchStatement extends BaseStatement {
|
||||
type: "SwitchStatement";
|
||||
discriminant: Expression;
|
||||
cases: SwitchCase[];
|
||||
}
|
||||
|
||||
export interface ReturnStatement extends BaseStatement {
|
||||
type: "ReturnStatement";
|
||||
argument?: Expression | null | undefined;
|
||||
}
|
||||
|
||||
export interface ThrowStatement extends BaseStatement {
|
||||
type: "ThrowStatement";
|
||||
argument: Expression;
|
||||
}
|
||||
|
||||
export interface TryStatement extends BaseStatement {
|
||||
type: "TryStatement";
|
||||
block: BlockStatement;
|
||||
handler?: CatchClause | null | undefined;
|
||||
finalizer?: BlockStatement | null | undefined;
|
||||
}
|
||||
|
||||
export interface WhileStatement extends BaseStatement {
|
||||
type: "WhileStatement";
|
||||
test: Expression;
|
||||
body: Statement;
|
||||
}
|
||||
|
||||
export interface DoWhileStatement extends BaseStatement {
|
||||
type: "DoWhileStatement";
|
||||
body: Statement;
|
||||
test: Expression;
|
||||
}
|
||||
|
||||
export interface ForStatement extends BaseStatement {
|
||||
type: "ForStatement";
|
||||
init?: VariableDeclaration | Expression | null | undefined;
|
||||
test?: Expression | null | undefined;
|
||||
update?: Expression | null | undefined;
|
||||
body: Statement;
|
||||
}
|
||||
|
||||
export interface BaseForXStatement extends BaseStatement {
|
||||
left: VariableDeclaration | Pattern;
|
||||
right: Expression;
|
||||
body: Statement;
|
||||
}
|
||||
|
||||
export interface ForInStatement extends BaseForXStatement {
|
||||
type: "ForInStatement";
|
||||
}
|
||||
|
||||
export interface DebuggerStatement extends BaseStatement {
|
||||
type: "DebuggerStatement";
|
||||
}
|
||||
|
||||
export type Declaration = FunctionDeclaration | VariableDeclaration | ClassDeclaration;
|
||||
|
||||
export interface BaseDeclaration extends BaseStatement {}
|
||||
|
||||
export interface MaybeNamedFunctionDeclaration extends BaseFunction, BaseDeclaration {
|
||||
type: "FunctionDeclaration";
|
||||
/** It is null when a function declaration is a part of the `export default function` statement */
|
||||
id: Identifier | null;
|
||||
body: BlockStatement;
|
||||
}
|
||||
|
||||
export interface FunctionDeclaration extends MaybeNamedFunctionDeclaration {
|
||||
id: Identifier;
|
||||
}
|
||||
|
||||
export interface VariableDeclaration extends BaseDeclaration {
|
||||
type: "VariableDeclaration";
|
||||
declarations: VariableDeclarator[];
|
||||
kind: "var" | "let" | "const" | "using" | "await using";
|
||||
}
|
||||
|
||||
export interface VariableDeclarator extends BaseNode {
|
||||
type: "VariableDeclarator";
|
||||
id: Pattern;
|
||||
init?: Expression | null | undefined;
|
||||
}
|
||||
|
||||
export interface ExpressionMap {
|
||||
ArrayExpression: ArrayExpression;
|
||||
ArrowFunctionExpression: ArrowFunctionExpression;
|
||||
AssignmentExpression: AssignmentExpression;
|
||||
AwaitExpression: AwaitExpression;
|
||||
BinaryExpression: BinaryExpression;
|
||||
CallExpression: CallExpression;
|
||||
ChainExpression: ChainExpression;
|
||||
ClassExpression: ClassExpression;
|
||||
ConditionalExpression: ConditionalExpression;
|
||||
FunctionExpression: FunctionExpression;
|
||||
Identifier: Identifier;
|
||||
ImportExpression: ImportExpression;
|
||||
Literal: Literal;
|
||||
LogicalExpression: LogicalExpression;
|
||||
MemberExpression: MemberExpression;
|
||||
MetaProperty: MetaProperty;
|
||||
NewExpression: NewExpression;
|
||||
ObjectExpression: ObjectExpression;
|
||||
SequenceExpression: SequenceExpression;
|
||||
TaggedTemplateExpression: TaggedTemplateExpression;
|
||||
TemplateLiteral: TemplateLiteral;
|
||||
ThisExpression: ThisExpression;
|
||||
UnaryExpression: UnaryExpression;
|
||||
UpdateExpression: UpdateExpression;
|
||||
YieldExpression: YieldExpression;
|
||||
}
|
||||
|
||||
export type Expression = ExpressionMap[keyof ExpressionMap];
|
||||
|
||||
export interface BaseExpression extends BaseNode {}
|
||||
|
||||
export type ChainElement = SimpleCallExpression | MemberExpression;
|
||||
|
||||
export interface ChainExpression extends BaseExpression {
|
||||
type: "ChainExpression";
|
||||
expression: ChainElement;
|
||||
}
|
||||
|
||||
export interface ThisExpression extends BaseExpression {
|
||||
type: "ThisExpression";
|
||||
}
|
||||
|
||||
export interface ArrayExpression extends BaseExpression {
|
||||
type: "ArrayExpression";
|
||||
elements: Array<Expression | SpreadElement | null>;
|
||||
}
|
||||
|
||||
export interface ObjectExpression extends BaseExpression {
|
||||
type: "ObjectExpression";
|
||||
properties: Array<Property | SpreadElement>;
|
||||
}
|
||||
|
||||
export interface PrivateIdentifier extends BaseNode {
|
||||
type: "PrivateIdentifier";
|
||||
name: string;
|
||||
}
|
||||
|
||||
export interface Property extends BaseNode {
|
||||
type: "Property";
|
||||
key: Expression;
|
||||
value: Expression | Pattern; // Could be an AssignmentProperty
|
||||
kind: "init" | "get" | "set";
|
||||
method: boolean;
|
||||
shorthand: boolean;
|
||||
computed: boolean;
|
||||
}
|
||||
|
||||
export interface PropertyDefinition extends BaseNode {
|
||||
type: "PropertyDefinition";
|
||||
key: Expression | PrivateIdentifier;
|
||||
value?: Expression | null | undefined;
|
||||
computed: boolean;
|
||||
static: boolean;
|
||||
}
|
||||
|
||||
export interface FunctionExpression extends BaseFunction, BaseExpression {
|
||||
id?: Identifier | null | undefined;
|
||||
type: "FunctionExpression";
|
||||
body: BlockStatement;
|
||||
}
|
||||
|
||||
export interface SequenceExpression extends BaseExpression {
|
||||
type: "SequenceExpression";
|
||||
expressions: Expression[];
|
||||
}
|
||||
|
||||
export interface UnaryExpression extends BaseExpression {
|
||||
type: "UnaryExpression";
|
||||
operator: UnaryOperator;
|
||||
prefix: true;
|
||||
argument: Expression;
|
||||
}
|
||||
|
||||
export interface BinaryExpression extends BaseExpression {
|
||||
type: "BinaryExpression";
|
||||
operator: BinaryOperator;
|
||||
left: Expression | PrivateIdentifier;
|
||||
right: Expression;
|
||||
}
|
||||
|
||||
export interface AssignmentExpression extends BaseExpression {
|
||||
type: "AssignmentExpression";
|
||||
operator: AssignmentOperator;
|
||||
left: Pattern | MemberExpression;
|
||||
right: Expression;
|
||||
}
|
||||
|
||||
export interface UpdateExpression extends BaseExpression {
|
||||
type: "UpdateExpression";
|
||||
operator: UpdateOperator;
|
||||
argument: Expression;
|
||||
prefix: boolean;
|
||||
}
|
||||
|
||||
export interface LogicalExpression extends BaseExpression {
|
||||
type: "LogicalExpression";
|
||||
operator: LogicalOperator;
|
||||
left: Expression;
|
||||
right: Expression;
|
||||
}
|
||||
|
||||
export interface ConditionalExpression extends BaseExpression {
|
||||
type: "ConditionalExpression";
|
||||
test: Expression;
|
||||
alternate: Expression;
|
||||
consequent: Expression;
|
||||
}
|
||||
|
||||
export interface BaseCallExpression extends BaseExpression {
|
||||
callee: Expression | Super;
|
||||
arguments: Array<Expression | SpreadElement>;
|
||||
}
|
||||
export type CallExpression = SimpleCallExpression | NewExpression;
|
||||
|
||||
export interface SimpleCallExpression extends BaseCallExpression {
|
||||
type: "CallExpression";
|
||||
optional: boolean;
|
||||
}
|
||||
|
||||
export interface NewExpression extends BaseCallExpression {
|
||||
type: "NewExpression";
|
||||
}
|
||||
|
||||
export interface MemberExpression extends BaseExpression, BasePattern {
|
||||
type: "MemberExpression";
|
||||
object: Expression | Super;
|
||||
property: Expression | PrivateIdentifier;
|
||||
computed: boolean;
|
||||
optional: boolean;
|
||||
}
|
||||
|
||||
export type Pattern = Identifier | ObjectPattern | ArrayPattern | RestElement | AssignmentPattern | MemberExpression;
|
||||
|
||||
export interface BasePattern extends BaseNode {}
|
||||
|
||||
export interface SwitchCase extends BaseNode {
|
||||
type: "SwitchCase";
|
||||
test?: Expression | null | undefined;
|
||||
consequent: Statement[];
|
||||
}
|
||||
|
||||
export interface CatchClause extends BaseNode {
|
||||
type: "CatchClause";
|
||||
param: Pattern | null;
|
||||
body: BlockStatement;
|
||||
}
|
||||
|
||||
export interface Identifier extends BaseNode, BaseExpression, BasePattern {
|
||||
type: "Identifier";
|
||||
name: string;
|
||||
}
|
||||
|
||||
export type Literal = SimpleLiteral | RegExpLiteral | BigIntLiteral;
|
||||
|
||||
export interface SimpleLiteral extends BaseNode, BaseExpression {
|
||||
type: "Literal";
|
||||
value: string | boolean | number | null;
|
||||
raw?: string | undefined;
|
||||
}
|
||||
|
||||
export interface RegExpLiteral extends BaseNode, BaseExpression {
|
||||
type: "Literal";
|
||||
value?: RegExp | null | undefined;
|
||||
regex: {
|
||||
pattern: string;
|
||||
flags: string;
|
||||
};
|
||||
raw?: string | undefined;
|
||||
}
|
||||
|
||||
export interface BigIntLiteral extends BaseNode, BaseExpression {
|
||||
type: "Literal";
|
||||
value?: bigint | null | undefined;
|
||||
bigint: string;
|
||||
raw?: string | undefined;
|
||||
}
|
||||
|
||||
export type UnaryOperator = "-" | "+" | "!" | "~" | "typeof" | "void" | "delete";
|
||||
|
||||
export type BinaryOperator =
|
||||
| "=="
|
||||
| "!="
|
||||
| "==="
|
||||
| "!=="
|
||||
| "<"
|
||||
| "<="
|
||||
| ">"
|
||||
| ">="
|
||||
| "<<"
|
||||
| ">>"
|
||||
| ">>>"
|
||||
| "+"
|
||||
| "-"
|
||||
| "*"
|
||||
| "/"
|
||||
| "%"
|
||||
| "**"
|
||||
| "|"
|
||||
| "^"
|
||||
| "&"
|
||||
| "in"
|
||||
| "instanceof";
|
||||
|
||||
export type LogicalOperator = "||" | "&&" | "??";
|
||||
|
||||
export type AssignmentOperator =
|
||||
| "="
|
||||
| "+="
|
||||
| "-="
|
||||
| "*="
|
||||
| "/="
|
||||
| "%="
|
||||
| "**="
|
||||
| "<<="
|
||||
| ">>="
|
||||
| ">>>="
|
||||
| "|="
|
||||
| "^="
|
||||
| "&="
|
||||
| "||="
|
||||
| "&&="
|
||||
| "??=";
|
||||
|
||||
export type UpdateOperator = "++" | "--";
|
||||
|
||||
export interface ForOfStatement extends BaseForXStatement {
|
||||
type: "ForOfStatement";
|
||||
await: boolean;
|
||||
}
|
||||
|
||||
export interface Super extends BaseNode {
|
||||
type: "Super";
|
||||
}
|
||||
|
||||
export interface SpreadElement extends BaseNode {
|
||||
type: "SpreadElement";
|
||||
argument: Expression;
|
||||
}
|
||||
|
||||
export interface ArrowFunctionExpression extends BaseExpression, BaseFunction {
|
||||
type: "ArrowFunctionExpression";
|
||||
expression: boolean;
|
||||
body: BlockStatement | Expression;
|
||||
}
|
||||
|
||||
export interface YieldExpression extends BaseExpression {
|
||||
type: "YieldExpression";
|
||||
argument?: Expression | null | undefined;
|
||||
delegate: boolean;
|
||||
}
|
||||
|
||||
export interface TemplateLiteral extends BaseExpression {
|
||||
type: "TemplateLiteral";
|
||||
quasis: TemplateElement[];
|
||||
expressions: Expression[];
|
||||
}
|
||||
|
||||
export interface TaggedTemplateExpression extends BaseExpression {
|
||||
type: "TaggedTemplateExpression";
|
||||
tag: Expression;
|
||||
quasi: TemplateLiteral;
|
||||
}
|
||||
|
||||
export interface TemplateElement extends BaseNode {
|
||||
type: "TemplateElement";
|
||||
tail: boolean;
|
||||
value: {
|
||||
/** It is null when the template literal is tagged and the text has an invalid escape (e.g. - tag`\unicode and \u{55}`) */
|
||||
cooked?: string | null | undefined;
|
||||
raw: string;
|
||||
};
|
||||
}
|
||||
|
||||
export interface AssignmentProperty extends Property {
|
||||
value: Pattern;
|
||||
kind: "init";
|
||||
method: boolean; // false
|
||||
}
|
||||
|
||||
export interface ObjectPattern extends BasePattern {
|
||||
type: "ObjectPattern";
|
||||
properties: Array<AssignmentProperty | RestElement>;
|
||||
}
|
||||
|
||||
export interface ArrayPattern extends BasePattern {
|
||||
type: "ArrayPattern";
|
||||
elements: Array<Pattern | null>;
|
||||
}
|
||||
|
||||
export interface RestElement extends BasePattern {
|
||||
type: "RestElement";
|
||||
argument: Pattern;
|
||||
}
|
||||
|
||||
export interface AssignmentPattern extends BasePattern {
|
||||
type: "AssignmentPattern";
|
||||
left: Pattern;
|
||||
right: Expression;
|
||||
}
|
||||
|
||||
export type Class = ClassDeclaration | ClassExpression;
|
||||
export interface BaseClass extends BaseNode {
|
||||
superClass?: Expression | null | undefined;
|
||||
body: ClassBody;
|
||||
}
|
||||
|
||||
export interface ClassBody extends BaseNode {
|
||||
type: "ClassBody";
|
||||
body: Array<MethodDefinition | PropertyDefinition | StaticBlock>;
|
||||
}
|
||||
|
||||
export interface MethodDefinition extends BaseNode {
|
||||
type: "MethodDefinition";
|
||||
key: Expression | PrivateIdentifier;
|
||||
value: FunctionExpression;
|
||||
kind: "constructor" | "method" | "get" | "set";
|
||||
computed: boolean;
|
||||
static: boolean;
|
||||
}
|
||||
|
||||
export interface MaybeNamedClassDeclaration extends BaseClass, BaseDeclaration {
|
||||
type: "ClassDeclaration";
|
||||
/** It is null when a class declaration is a part of the `export default class` statement */
|
||||
id: Identifier | null;
|
||||
}
|
||||
|
||||
export interface ClassDeclaration extends MaybeNamedClassDeclaration {
|
||||
id: Identifier;
|
||||
}
|
||||
|
||||
export interface ClassExpression extends BaseClass, BaseExpression {
|
||||
type: "ClassExpression";
|
||||
id?: Identifier | null | undefined;
|
||||
}
|
||||
|
||||
export interface MetaProperty extends BaseExpression {
|
||||
type: "MetaProperty";
|
||||
meta: Identifier;
|
||||
property: Identifier;
|
||||
}
|
||||
|
||||
export type ModuleDeclaration =
|
||||
| ImportDeclaration
|
||||
| ExportNamedDeclaration
|
||||
| ExportDefaultDeclaration
|
||||
| ExportAllDeclaration;
|
||||
export interface BaseModuleDeclaration extends BaseNode {}
|
||||
|
||||
export type ModuleSpecifier = ImportSpecifier | ImportDefaultSpecifier | ImportNamespaceSpecifier | ExportSpecifier;
|
||||
export interface BaseModuleSpecifier extends BaseNode {
|
||||
local: Identifier;
|
||||
}
|
||||
|
||||
export interface ImportDeclaration extends BaseModuleDeclaration {
|
||||
type: "ImportDeclaration";
|
||||
specifiers: Array<ImportSpecifier | ImportDefaultSpecifier | ImportNamespaceSpecifier>;
|
||||
attributes: ImportAttribute[];
|
||||
source: Literal;
|
||||
}
|
||||
|
||||
export interface ImportSpecifier extends BaseModuleSpecifier {
|
||||
type: "ImportSpecifier";
|
||||
imported: Identifier | Literal;
|
||||
}
|
||||
|
||||
export interface ImportAttribute extends BaseNode {
|
||||
type: "ImportAttribute";
|
||||
key: Identifier | Literal;
|
||||
value: Literal;
|
||||
}
|
||||
|
||||
export interface ImportExpression extends BaseExpression {
|
||||
type: "ImportExpression";
|
||||
source: Expression;
|
||||
options?: Expression | null | undefined;
|
||||
}
|
||||
|
||||
export interface ImportDefaultSpecifier extends BaseModuleSpecifier {
|
||||
type: "ImportDefaultSpecifier";
|
||||
}
|
||||
|
||||
export interface ImportNamespaceSpecifier extends BaseModuleSpecifier {
|
||||
type: "ImportNamespaceSpecifier";
|
||||
}
|
||||
|
||||
export interface ExportNamedDeclaration extends BaseModuleDeclaration {
|
||||
type: "ExportNamedDeclaration";
|
||||
declaration?: Declaration | null | undefined;
|
||||
specifiers: ExportSpecifier[];
|
||||
attributes: ImportAttribute[];
|
||||
source?: Literal | null | undefined;
|
||||
}
|
||||
|
||||
export interface ExportSpecifier extends Omit<BaseModuleSpecifier, "local"> {
|
||||
type: "ExportSpecifier";
|
||||
local: Identifier | Literal;
|
||||
exported: Identifier | Literal;
|
||||
}
|
||||
|
||||
export interface ExportDefaultDeclaration extends BaseModuleDeclaration {
|
||||
type: "ExportDefaultDeclaration";
|
||||
declaration: MaybeNamedFunctionDeclaration | MaybeNamedClassDeclaration | Expression;
|
||||
}
|
||||
|
||||
export interface ExportAllDeclaration extends BaseModuleDeclaration {
|
||||
type: "ExportAllDeclaration";
|
||||
exported: Identifier | Literal | null;
|
||||
attributes: ImportAttribute[];
|
||||
source: Literal;
|
||||
}
|
||||
|
||||
export interface AwaitExpression extends BaseExpression {
|
||||
type: "AwaitExpression";
|
||||
argument: Expression;
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
var pump = require('./index')
|
||||
|
||||
var rs = require('fs').createReadStream('/dev/random')
|
||||
var ws = require('fs').createWriteStream('/dev/null')
|
||||
|
||||
var toHex = function () {
|
||||
var reverse = new (require('stream').Transform)()
|
||||
|
||||
reverse._transform = function (chunk, enc, callback) {
|
||||
reverse.push(chunk.toString('hex'))
|
||||
callback()
|
||||
}
|
||||
|
||||
return reverse
|
||||
}
|
||||
|
||||
var wsClosed = false
|
||||
var rsClosed = false
|
||||
var callbackCalled = false
|
||||
|
||||
var check = function () {
|
||||
if (wsClosed && rsClosed && callbackCalled) {
|
||||
console.log('test-node.js passes')
|
||||
clearTimeout(timeout)
|
||||
}
|
||||
}
|
||||
|
||||
ws.on('close', function () {
|
||||
wsClosed = true
|
||||
check()
|
||||
})
|
||||
|
||||
rs.on('close', function () {
|
||||
rsClosed = true
|
||||
check()
|
||||
})
|
||||
|
||||
var res = pump(rs, toHex(), toHex(), toHex(), ws, function () {
|
||||
callbackCalled = true
|
||||
check()
|
||||
})
|
||||
|
||||
if (res !== ws) {
|
||||
throw new Error('should return last stream')
|
||||
}
|
||||
|
||||
setTimeout(function () {
|
||||
rs.destroy()
|
||||
}, 1000)
|
||||
|
||||
var timeout = setTimeout(function () {
|
||||
throw new Error('timeout')
|
||||
}, 5000)
|
||||
@@ -0,0 +1,183 @@
|
||||
'use strict'
|
||||
|
||||
const { describe, test } = require('node:test')
|
||||
const filterLog = require('./filter-log')
|
||||
|
||||
const context = {
|
||||
includeKeys: undefined,
|
||||
ignoreKeys: undefined
|
||||
}
|
||||
const logData = {
|
||||
level: 30,
|
||||
time: 1522431328992,
|
||||
data1: {
|
||||
data2: { 'data-3': 'bar' },
|
||||
error: new Error('test')
|
||||
}
|
||||
}
|
||||
const logData2 = Object.assign({
|
||||
'logging.domain.corp/operation': {
|
||||
id: 'foo',
|
||||
producer: 'bar'
|
||||
}
|
||||
}, logData)
|
||||
|
||||
describe('#filterLog with an ignoreKeys option', () => {
|
||||
test('filterLog removes single entry', t => {
|
||||
const result = filterLog({
|
||||
log: logData,
|
||||
context: {
|
||||
...context,
|
||||
ignoreKeys: ['data1.data2.data-3']
|
||||
}
|
||||
})
|
||||
t.assert.deepStrictEqual(result, { level: 30, time: 1522431328992, data1: { data2: { }, error: new Error('test') } })
|
||||
})
|
||||
|
||||
test('filterLog removes multiple entries', t => {
|
||||
const result = filterLog({
|
||||
log: logData,
|
||||
context: {
|
||||
...context,
|
||||
ignoreKeys: ['time', 'data1']
|
||||
}
|
||||
})
|
||||
t.assert.deepStrictEqual(result, { level: 30 })
|
||||
})
|
||||
|
||||
test('filterLog keeps error instance', t => {
|
||||
const result = filterLog({
|
||||
log: logData,
|
||||
context: {
|
||||
...context,
|
||||
ignoreKeys: []
|
||||
}
|
||||
})
|
||||
t.assert.strictEqual(logData.data1.error, result.data1.error)
|
||||
})
|
||||
|
||||
test('filterLog removes entry with escape sequence', t => {
|
||||
const result = filterLog({
|
||||
log: logData2,
|
||||
context: {
|
||||
...context,
|
||||
ignoreKeys: ['data1', 'logging\\.domain\\.corp/operation']
|
||||
}
|
||||
})
|
||||
t.assert.deepStrictEqual(result, { level: 30, time: 1522431328992 })
|
||||
})
|
||||
|
||||
test('filterLog removes entry with escape sequence nested', t => {
|
||||
const result = filterLog({
|
||||
log: logData2,
|
||||
context: {
|
||||
...context,
|
||||
ignoreKeys: ['data1', 'logging\\.domain\\.corp/operation.producer']
|
||||
}
|
||||
})
|
||||
t.assert.deepStrictEqual(result, { level: 30, time: 1522431328992, 'logging.domain.corp/operation': { id: 'foo' } })
|
||||
})
|
||||
})
|
||||
|
||||
for (const ignoreKeys of [
|
||||
undefined,
|
||||
['level'],
|
||||
['level', 'data1.data2.data-3']
|
||||
]) {
|
||||
describe(`#filterLog with an includeKeys option when the ignoreKeys being ${ignoreKeys}`, () => {
|
||||
test('filterLog include nothing', t => {
|
||||
const result = filterLog({
|
||||
log: logData,
|
||||
context: {
|
||||
...context,
|
||||
ignoreKeys,
|
||||
includeKeys: []
|
||||
}
|
||||
})
|
||||
t.assert.deepStrictEqual(result, {})
|
||||
})
|
||||
|
||||
test('filterLog include single entry', t => {
|
||||
const result = filterLog({
|
||||
log: logData,
|
||||
context: {
|
||||
...context,
|
||||
ignoreKeys,
|
||||
includeKeys: ['time']
|
||||
}
|
||||
})
|
||||
t.assert.deepStrictEqual(result, { time: 1522431328992 })
|
||||
})
|
||||
|
||||
test('filterLog include multiple entries', t => {
|
||||
const result = filterLog({
|
||||
log: logData,
|
||||
context: {
|
||||
...context,
|
||||
ignoreKeys,
|
||||
includeKeys: ['time', 'data1']
|
||||
}
|
||||
})
|
||||
t.assert.deepStrictEqual(result, {
|
||||
time: 1522431328992,
|
||||
data1: {
|
||||
data2: { 'data-3': 'bar' },
|
||||
error: new Error('test')
|
||||
}
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
describe('#filterLog with circular references', () => {
|
||||
const logData = {
|
||||
level: 30,
|
||||
time: 1522431328992,
|
||||
data1: 'test'
|
||||
}
|
||||
logData.circular = logData
|
||||
|
||||
test('filterLog removes single entry', t => {
|
||||
const result = filterLog({
|
||||
log: logData,
|
||||
context: {
|
||||
...context,
|
||||
ignoreKeys: ['data1']
|
||||
}
|
||||
})
|
||||
|
||||
t.assert.deepStrictEqual(result.circular.level, result.level)
|
||||
t.assert.deepStrictEqual(result.circular.time, result.time)
|
||||
|
||||
delete result.circular
|
||||
t.assert.deepStrictEqual(result, { level: 30, time: 1522431328992 })
|
||||
})
|
||||
|
||||
test('filterLog includes single entry', t => {
|
||||
const result = filterLog({
|
||||
log: logData,
|
||||
context: {
|
||||
...context,
|
||||
includeKeys: ['data1']
|
||||
}
|
||||
})
|
||||
|
||||
t.assert.deepStrictEqual(result, { data1: 'test' })
|
||||
})
|
||||
|
||||
test('filterLog includes circular keys', t => {
|
||||
const result = filterLog({
|
||||
log: logData,
|
||||
context: {
|
||||
...context,
|
||||
includeKeys: ['level', 'circular']
|
||||
}
|
||||
})
|
||||
|
||||
t.assert.deepStrictEqual(result.circular.level, logData.level)
|
||||
t.assert.deepStrictEqual(result.circular.time, logData.time)
|
||||
|
||||
delete result.circular
|
||||
t.assert.deepStrictEqual(result, { level: 30 })
|
||||
})
|
||||
})
|
||||
@@ -0,0 +1,25 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.objectForEachKey = objectForEachKey;
|
||||
exports.objectMapKey = objectMapKey;
|
||||
exports.objectReduceKey = objectReduceKey;
|
||||
function objectForEachKey(obj, callback) {
|
||||
const keys = Object.keys(obj);
|
||||
for (const key of keys) {
|
||||
callback(key);
|
||||
}
|
||||
}
|
||||
function objectMapKey(obj, callback) {
|
||||
const values = [];
|
||||
objectForEachKey(obj, key => {
|
||||
values.push(callback(key));
|
||||
});
|
||||
return values;
|
||||
}
|
||||
function objectReduceKey(obj, callback, initial) {
|
||||
let accumulator = initial;
|
||||
objectForEachKey(obj, key => {
|
||||
accumulator = callback(accumulator, key);
|
||||
});
|
||||
return accumulator;
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
function _arrayLikeToArray(r, a) {
|
||||
(null == a || a > r.length) && (a = r.length);
|
||||
for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
|
||||
return n;
|
||||
}
|
||||
export { _arrayLikeToArray as default };
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"ripemd160.js","sourceRoot":"","sources":["../src/ripemd160.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,SAAS,IAAI,UAAU,EAAE,SAAS,IAAI,UAAU,EAAE,MAAM,aAAa,CAAC;AAC/E,+DAA+D;AAC/D,MAAM,CAAC,MAAM,SAAS,GAAsB,UAAU,CAAC;AACvD,+DAA+D;AAC/D,MAAM,CAAC,MAAM,SAAS,GAAsB,UAAU,CAAC"}
|
||||
@@ -0,0 +1,20 @@
|
||||
/**
|
||||
* Blake2s hash function. Focuses on 8-bit to 32-bit platforms. blake2b for 64-bit, but in JS it is slower.
|
||||
* @module
|
||||
* @deprecated
|
||||
*/
|
||||
import { G1s as G1s_n, G2s as G2s_n } from './_blake.ts';
|
||||
import { SHA256_IV } from './_md.ts';
|
||||
import { BLAKE2s as B2S, blake2s as b2s, compress as compress_n } from './blake2.ts';
|
||||
/** @deprecated Use import from `noble/hashes/blake2` module */
|
||||
export const B2S_IV: Uint32Array = SHA256_IV;
|
||||
/** @deprecated Use import from `noble/hashes/blake2` module */
|
||||
export const G1s: typeof G1s_n = G1s_n;
|
||||
/** @deprecated Use import from `noble/hashes/blake2` module */
|
||||
export const G2s: typeof G2s_n = G2s_n;
|
||||
/** @deprecated Use import from `noble/hashes/blake2` module */
|
||||
export const compress: typeof compress_n = compress_n;
|
||||
/** @deprecated Use import from `noble/hashes/blake2` module */
|
||||
export const BLAKE2s: typeof B2S = B2S;
|
||||
/** @deprecated Use import from `noble/hashes/blake2` module */
|
||||
export const blake2s: typeof b2s = b2s;
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,5 @@
|
||||
const file4 = require("./file4.js")
|
||||
|
||||
module.exports = function () {
|
||||
file4()
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
export { _ as default } from "../esm/_defaults.js";
|
||||
@@ -0,0 +1,115 @@
|
||||
'use strict';
|
||||
|
||||
const FilterBase = require('./FilterBase');
|
||||
const withParser = require('../utils/withParser');
|
||||
|
||||
class Replace extends FilterBase {
|
||||
static make(options) {
|
||||
return new Replace(options);
|
||||
}
|
||||
|
||||
static withParser(options) {
|
||||
return withParser(Replace.make, options);
|
||||
}
|
||||
|
||||
_checkChunk(chunk) {
|
||||
switch (chunk.name) {
|
||||
case 'startKey':
|
||||
if (this._allowEmptyReplacement) {
|
||||
this._transform = this._skipKeyChunks;
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
case 'keyValue':
|
||||
if (this._allowEmptyReplacement) return true;
|
||||
break;
|
||||
case 'startObject':
|
||||
case 'startArray':
|
||||
case 'startString':
|
||||
case 'startNumber':
|
||||
case 'nullValue':
|
||||
case 'trueValue':
|
||||
case 'falseValue':
|
||||
case 'stringValue':
|
||||
case 'numberValue':
|
||||
if (this._filter(this._stack, chunk)) {
|
||||
let replacement = this._replacement(this._stack, chunk);
|
||||
if (this._allowEmptyReplacement) {
|
||||
if (replacement.length) {
|
||||
const key = this._stack[this._stack.length - 1];
|
||||
if (typeof key == 'string') {
|
||||
if (this._streamKeys) {
|
||||
this.push({name: 'startKey'});
|
||||
this.push({name: 'stringChunk', value: key});
|
||||
this.push({name: 'endKey'});
|
||||
}
|
||||
this.push({name: 'keyValue', value: key});
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (!replacement.length) replacement = FilterBase.defaultReplacement;
|
||||
}
|
||||
replacement.forEach(value => this.push(value));
|
||||
switch (chunk.name) {
|
||||
case 'startObject':
|
||||
case 'startArray':
|
||||
this._transform = this._skipObject;
|
||||
this._depth = 1;
|
||||
break;
|
||||
case 'startString':
|
||||
this._transform = this._skipString;
|
||||
break;
|
||||
case 'startNumber':
|
||||
this._transform = this._skipNumber;
|
||||
break;
|
||||
case 'nullValue':
|
||||
case 'trueValue':
|
||||
case 'falseValue':
|
||||
case 'stringValue':
|
||||
case 'numberValue':
|
||||
this._transform = this._once ? this._pass : this._check;
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
// issue a key, if needed
|
||||
if (this._allowEmptyReplacement) {
|
||||
const key = this._stack[this._stack.length - 1];
|
||||
if (typeof key == 'string') {
|
||||
switch (chunk.name) {
|
||||
case 'startObject':
|
||||
case 'startArray':
|
||||
case 'startString':
|
||||
case 'startNumber':
|
||||
case 'nullValue':
|
||||
case 'trueValue':
|
||||
case 'falseValue':
|
||||
case 'stringValue':
|
||||
case 'numberValue':
|
||||
if (this._streamKeys) {
|
||||
this.push({name: 'startKey'});
|
||||
this.push({name: 'stringChunk', value: key});
|
||||
this.push({name: 'endKey'});
|
||||
}
|
||||
this.push({name: 'keyValue', value: key});
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
this.push(chunk);
|
||||
return false;
|
||||
}
|
||||
|
||||
_skipKeyChunks(chunk, _, callback) {
|
||||
if (chunk.name === 'endKey') {
|
||||
this._transform = this._check;
|
||||
}
|
||||
callback(null);
|
||||
}
|
||||
}
|
||||
Replace.replace = Replace.make;
|
||||
Replace.make.Constructor = Replace;
|
||||
|
||||
module.exports = Replace;
|
||||
@@ -0,0 +1,226 @@
|
||||
/**
|
||||
* @fileoverview Flag expressions in statement position that do not side effect
|
||||
* @author Michael Ficarra
|
||||
*/
|
||||
"use strict";
|
||||
|
||||
const astUtils = require("./utils/ast-utils");
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Rule Definition
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Returns `true`.
|
||||
* @returns {boolean} `true`.
|
||||
*/
|
||||
function alwaysTrue() {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns `false`.
|
||||
* @returns {boolean} `false`.
|
||||
*/
|
||||
function alwaysFalse() {
|
||||
return false;
|
||||
}
|
||||
|
||||
/** @type {import('../types').Rule.RuleModule} */
|
||||
module.exports = {
|
||||
meta: {
|
||||
type: "suggestion",
|
||||
|
||||
docs: {
|
||||
description: "Disallow unused expressions",
|
||||
dialects: ["JavaScript", "TypeScript"],
|
||||
recommended: false,
|
||||
url: "https://eslint.org/docs/latest/rules/no-unused-expressions",
|
||||
},
|
||||
|
||||
schema: [
|
||||
{
|
||||
type: "object",
|
||||
properties: {
|
||||
allowShortCircuit: {
|
||||
type: "boolean",
|
||||
},
|
||||
allowTernary: {
|
||||
type: "boolean",
|
||||
},
|
||||
allowTaggedTemplates: {
|
||||
type: "boolean",
|
||||
},
|
||||
enforceForJSX: {
|
||||
type: "boolean",
|
||||
},
|
||||
ignoreDirectives: {
|
||||
type: "boolean",
|
||||
},
|
||||
},
|
||||
additionalProperties: false,
|
||||
},
|
||||
],
|
||||
|
||||
defaultOptions: [
|
||||
{
|
||||
allowShortCircuit: false,
|
||||
allowTernary: false,
|
||||
allowTaggedTemplates: false,
|
||||
enforceForJSX: false,
|
||||
ignoreDirectives: false,
|
||||
},
|
||||
],
|
||||
|
||||
messages: {
|
||||
unusedExpression:
|
||||
"Expected an assignment or function call and instead saw an expression.",
|
||||
},
|
||||
},
|
||||
|
||||
create(context) {
|
||||
const [
|
||||
{
|
||||
allowShortCircuit,
|
||||
allowTernary,
|
||||
allowTaggedTemplates,
|
||||
enforceForJSX,
|
||||
ignoreDirectives,
|
||||
},
|
||||
] = context.options;
|
||||
|
||||
/**
|
||||
* Has AST suggesting a directive.
|
||||
* @param {ASTNode} node any node
|
||||
* @returns {boolean} whether the given node structurally represents a directive
|
||||
*/
|
||||
function looksLikeDirective(node) {
|
||||
return (
|
||||
node.type === "ExpressionStatement" &&
|
||||
node.expression.type === "Literal" &&
|
||||
typeof node.expression.value === "string"
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the leading sequence of members in a list that pass the predicate.
|
||||
* @param {Function} predicate ([a] -> Boolean) the function used to make the determination
|
||||
* @param {a[]} list the input list
|
||||
* @returns {a[]} the leading sequence of members in the given list that pass the given predicate
|
||||
*/
|
||||
function takeWhile(predicate, list) {
|
||||
for (let i = 0; i < list.length; ++i) {
|
||||
if (!predicate(list[i])) {
|
||||
return list.slice(0, i);
|
||||
}
|
||||
}
|
||||
return list.slice();
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets leading directives nodes in a Node body.
|
||||
* @param {ASTNode} node a Program or BlockStatement node
|
||||
* @returns {ASTNode[]} the leading sequence of directive nodes in the given node's body
|
||||
*/
|
||||
function directives(node) {
|
||||
return takeWhile(looksLikeDirective, node.body);
|
||||
}
|
||||
|
||||
/**
|
||||
* Detect if a Node is a directive.
|
||||
* @param {ASTNode} node any node
|
||||
* @returns {boolean} whether the given node is considered a directive in its current position
|
||||
*/
|
||||
function isDirective(node) {
|
||||
/**
|
||||
* https://tc39.es/ecma262/#directive-prologue
|
||||
*
|
||||
* Only `FunctionBody`, `ScriptBody` and `ModuleBody` can have directive prologue.
|
||||
* Class static blocks do not have directive prologue.
|
||||
*/
|
||||
return (
|
||||
astUtils.isTopLevelExpressionStatement(node) &&
|
||||
directives(node.parent).includes(node)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* The member functions return `true` if the type has no side-effects.
|
||||
* Unknown nodes are handled as `false`, then this rule ignores those.
|
||||
*/
|
||||
const Checker = Object.assign(Object.create(null), {
|
||||
isDisallowed(node) {
|
||||
return (Checker[node.type] || alwaysFalse)(node);
|
||||
},
|
||||
|
||||
ArrayExpression: alwaysTrue,
|
||||
ArrowFunctionExpression: alwaysTrue,
|
||||
BinaryExpression: alwaysTrue,
|
||||
ChainExpression(node) {
|
||||
return Checker.isDisallowed(node.expression);
|
||||
},
|
||||
ClassExpression: alwaysTrue,
|
||||
ConditionalExpression(node) {
|
||||
if (allowTernary) {
|
||||
return (
|
||||
Checker.isDisallowed(node.consequent) ||
|
||||
Checker.isDisallowed(node.alternate)
|
||||
);
|
||||
}
|
||||
return true;
|
||||
},
|
||||
FunctionExpression: alwaysTrue,
|
||||
Identifier: alwaysTrue,
|
||||
JSXElement() {
|
||||
return enforceForJSX;
|
||||
},
|
||||
JSXFragment() {
|
||||
return enforceForJSX;
|
||||
},
|
||||
Literal: alwaysTrue,
|
||||
LogicalExpression(node) {
|
||||
if (allowShortCircuit) {
|
||||
return Checker.isDisallowed(node.right);
|
||||
}
|
||||
return true;
|
||||
},
|
||||
MemberExpression: alwaysTrue,
|
||||
MetaProperty: alwaysTrue,
|
||||
ObjectExpression: alwaysTrue,
|
||||
SequenceExpression: alwaysTrue,
|
||||
TaggedTemplateExpression() {
|
||||
return !allowTaggedTemplates;
|
||||
},
|
||||
TemplateLiteral: alwaysTrue,
|
||||
ThisExpression: alwaysTrue,
|
||||
UnaryExpression(node) {
|
||||
return node.operator !== "void" && node.operator !== "delete";
|
||||
},
|
||||
// TypeScript-specific node types
|
||||
TSAsExpression(node) {
|
||||
return Checker.isDisallowed(node.expression);
|
||||
},
|
||||
TSTypeAssertion(node) {
|
||||
return Checker.isDisallowed(node.expression);
|
||||
},
|
||||
TSNonNullExpression(node) {
|
||||
return Checker.isDisallowed(node.expression);
|
||||
},
|
||||
TSInstantiationExpression(node) {
|
||||
return Checker.isDisallowed(node.expression);
|
||||
},
|
||||
});
|
||||
|
||||
return {
|
||||
ExpressionStatement(node) {
|
||||
if (
|
||||
Checker.isDisallowed(node.expression) &&
|
||||
!astUtils.isDirective(node) &&
|
||||
!(ignoreDirectives && isDirective(node))
|
||||
) {
|
||||
context.report({ node, messageId: "unusedExpression" });
|
||||
}
|
||||
},
|
||||
};
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,12 @@
|
||||
import { URISchemeHandler, URIComponents } from "../uri";
|
||||
export interface MailtoHeaders {
|
||||
[hfname: string]: string;
|
||||
}
|
||||
export interface MailtoComponents extends URIComponents {
|
||||
to: Array<string>;
|
||||
headers?: MailtoHeaders;
|
||||
subject?: string;
|
||||
body?: string;
|
||||
}
|
||||
declare const handler: URISchemeHandler<MailtoComponents>;
|
||||
export default handler;
|
||||
@@ -0,0 +1,11 @@
|
||||
export type Options = [
|
||||
{
|
||||
ignoreIntersections?: boolean;
|
||||
ignoreUnions?: boolean;
|
||||
}
|
||||
];
|
||||
export type MessageIds = 'duplicate' | 'unnecessary';
|
||||
declare const _default: import("@typescript-eslint/utils/ts-eslint").RuleModule<MessageIds, Options, import("../../rules").ESLintPluginDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener> & {
|
||||
name: string;
|
||||
};
|
||||
export default _default;
|
||||
@@ -0,0 +1,19 @@
|
||||
var _typeof = require("./typeof.js")["default"];
|
||||
function _regeneratorValues(e) {
|
||||
if (null != e) {
|
||||
var t = e["function" == typeof Symbol && Symbol.iterator || "@@iterator"],
|
||||
r = 0;
|
||||
if (t) return t.call(e);
|
||||
if ("function" == typeof e.next) return e;
|
||||
if (!isNaN(e.length)) return {
|
||||
next: function next() {
|
||||
return e && r >= e.length && (e = void 0), {
|
||||
value: e && e[r++],
|
||||
done: !e
|
||||
};
|
||||
}
|
||||
};
|
||||
}
|
||||
throw new TypeError(_typeof(e) + " is not iterable");
|
||||
}
|
||||
module.exports = _regeneratorValues, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
||||
Reference in New Issue
Block a user