langchain 0.0.76 → 0.0.77
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/chains/query_constructor/ir.cjs +1 -0
- package/chains/query_constructor/ir.d.ts +1 -0
- package/chains/query_constructor/ir.js +1 -0
- package/chains/query_constructor.cjs +1 -0
- package/chains/query_constructor.d.ts +1 -0
- package/chains/query_constructor.js +1 -0
- package/dist/agents/chat_convo/index.cjs +27 -11
- package/dist/agents/chat_convo/index.d.ts +4 -1
- package/dist/agents/chat_convo/index.js +28 -12
- package/dist/agents/chat_convo/outputParser.cjs +79 -7
- package/dist/agents/chat_convo/outputParser.d.ts +25 -13
- package/dist/agents/chat_convo/outputParser.js +77 -6
- package/dist/agents/chat_convo/prompt.cjs +11 -8
- package/dist/agents/chat_convo/prompt.d.ts +2 -2
- package/dist/agents/chat_convo/prompt.js +11 -8
- package/dist/callbacks/handlers/tracer_langchain.cjs +12 -4
- package/dist/callbacks/handlers/tracer_langchain.d.ts +4 -1
- package/dist/callbacks/handlers/tracer_langchain.js +12 -4
- package/dist/callbacks/manager.cjs +6 -2
- package/dist/callbacks/manager.js +6 -2
- package/dist/chains/query_constructor/index.cjs +105 -0
- package/dist/chains/query_constructor/index.d.ts +37 -0
- package/dist/chains/query_constructor/index.js +95 -0
- package/dist/chains/query_constructor/ir.cjs +116 -0
- package/dist/chains/query_constructor/ir.d.ts +60 -0
- package/dist/chains/query_constructor/ir.js +107 -0
- package/dist/chains/query_constructor/parser.cjs +103 -0
- package/dist/chains/query_constructor/parser.d.ts +12 -0
- package/dist/chains/query_constructor/parser.js +99 -0
- package/dist/chains/query_constructor/prompt.cjs +127 -0
- package/dist/chains/query_constructor/prompt.d.ts +15 -0
- package/dist/chains/query_constructor/prompt.js +124 -0
- package/dist/chains/sql_db/sql_db_chain.cjs +13 -0
- package/dist/chains/sql_db/sql_db_chain.d.ts +2 -0
- package/dist/chains/sql_db/sql_db_chain.js +13 -0
- package/dist/client/langchainplus.cjs +21 -15
- package/dist/client/langchainplus.d.ts +4 -2
- package/dist/client/langchainplus.js +21 -15
- package/dist/llms/sagemaker_endpoint.cjs +123 -0
- package/dist/llms/sagemaker_endpoint.d.ts +82 -0
- package/dist/llms/sagemaker_endpoint.js +118 -0
- package/dist/memory/buffer_memory.cjs +1 -1
- package/dist/memory/buffer_memory.js +1 -1
- package/dist/memory/buffer_window_memory.cjs +1 -1
- package/dist/memory/buffer_window_memory.js +1 -1
- package/dist/output_parsers/expression.cjs +68 -0
- package/dist/output_parsers/expression.d.ts +25 -0
- package/dist/output_parsers/expression.js +49 -0
- package/dist/output_parsers/expression_type_handlers/array_literal_expression_handler.cjs +26 -0
- package/dist/output_parsers/expression_type_handlers/array_literal_expression_handler.d.ts +7 -0
- package/dist/output_parsers/expression_type_handlers/array_literal_expression_handler.js +22 -0
- package/dist/output_parsers/expression_type_handlers/base.cjs +67 -0
- package/dist/output_parsers/expression_type_handlers/base.d.ts +23 -0
- package/dist/output_parsers/expression_type_handlers/base.js +62 -0
- package/dist/output_parsers/expression_type_handlers/boolean_literal_handler.cjs +24 -0
- package/dist/output_parsers/expression_type_handlers/boolean_literal_handler.d.ts +7 -0
- package/dist/output_parsers/expression_type_handlers/boolean_literal_handler.js +20 -0
- package/dist/output_parsers/expression_type_handlers/call_expression_handler.cjs +52 -0
- package/dist/output_parsers/expression_type_handlers/call_expression_handler.d.ts +7 -0
- package/dist/output_parsers/expression_type_handlers/call_expression_handler.js +48 -0
- package/dist/output_parsers/expression_type_handlers/factory.cjs +56 -0
- package/dist/output_parsers/expression_type_handlers/factory.d.ts +9 -0
- package/dist/output_parsers/expression_type_handlers/factory.js +52 -0
- package/dist/output_parsers/expression_type_handlers/identifier_handler.cjs +22 -0
- package/dist/output_parsers/expression_type_handlers/identifier_handler.d.ts +7 -0
- package/dist/output_parsers/expression_type_handlers/identifier_handler.js +18 -0
- package/dist/output_parsers/expression_type_handlers/member_expression_handler.cjs +45 -0
- package/dist/output_parsers/expression_type_handlers/member_expression_handler.d.ts +7 -0
- package/dist/output_parsers/expression_type_handlers/member_expression_handler.js +41 -0
- package/dist/output_parsers/expression_type_handlers/numeric_literal_handler.cjs +24 -0
- package/dist/output_parsers/expression_type_handlers/numeric_literal_handler.d.ts +7 -0
- package/dist/output_parsers/expression_type_handlers/numeric_literal_handler.js +20 -0
- package/dist/output_parsers/expression_type_handlers/object_literal_expression_handler.cjs +29 -0
- package/dist/output_parsers/expression_type_handlers/object_literal_expression_handler.d.ts +7 -0
- package/dist/output_parsers/expression_type_handlers/object_literal_expression_handler.js +25 -0
- package/dist/output_parsers/expression_type_handlers/property_assignment_handler.cjs +36 -0
- package/dist/output_parsers/expression_type_handlers/property_assignment_handler.d.ts +7 -0
- package/dist/output_parsers/expression_type_handlers/property_assignment_handler.js +32 -0
- package/dist/output_parsers/expression_type_handlers/string_literal_handler.cjs +22 -0
- package/dist/output_parsers/expression_type_handlers/string_literal_handler.d.ts +7 -0
- package/dist/output_parsers/expression_type_handlers/string_literal_handler.js +18 -0
- package/dist/output_parsers/expression_type_handlers/types.cjs +2 -0
- package/dist/output_parsers/expression_type_handlers/types.d.ts +41 -0
- package/dist/output_parsers/expression_type_handlers/types.js +1 -0
- package/dist/output_parsers/index.cjs +2 -1
- package/dist/output_parsers/index.d.ts +1 -1
- package/dist/output_parsers/index.js +1 -1
- package/dist/output_parsers/structured.cjs +81 -23
- package/dist/output_parsers/structured.d.ts +18 -0
- package/dist/output_parsers/structured.js +79 -22
- package/dist/retrievers/self_query/index.cjs +79 -0
- package/dist/retrievers/self_query/index.d.ts +33 -0
- package/dist/retrievers/self_query/index.js +74 -0
- package/dist/retrievers/self_query/translator.cjs +72 -0
- package/dist/retrievers/self_query/translator.d.ts +14 -0
- package/dist/retrievers/self_query/translator.js +67 -0
- package/dist/schema/query_constructor.cjs +26 -0
- package/dist/schema/query_constructor.d.ts +6 -0
- package/dist/schema/query_constructor.js +22 -0
- package/dist/tools/json.cjs +3 -1
- package/dist/tools/json.js +3 -1
- package/dist/util/event-source-parse.cjs +31 -5
- package/dist/util/event-source-parse.d.ts +3 -3
- package/dist/util/event-source-parse.js +31 -5
- package/llms/sagemaker_endpoint.cjs +1 -0
- package/llms/sagemaker_endpoint.d.ts +1 -0
- package/llms/sagemaker_endpoint.js +1 -0
- package/output_parsers/expression.cjs +1 -0
- package/output_parsers/expression.d.ts +1 -0
- package/output_parsers/expression.js +1 -0
- package/package.json +61 -3
- package/retrievers/self_query.cjs +1 -0
- package/retrievers/self_query.d.ts +1 -0
- package/retrievers/self_query.js +1 -0
- package/schema/query_constructor.cjs +1 -0
- package/schema/query_constructor.d.ts +1 -0
- package/schema/query_constructor.js +1 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ParsedType } from "./expression_type_handlers/types.js";
|
|
2
|
+
import { BaseOutputParser } from "../schema/output_parser.js";
|
|
3
|
+
/**
|
|
4
|
+
* okay so we need to be able to handle the following cases:
|
|
5
|
+
* ExpressionStatement
|
|
6
|
+
* CallExpression
|
|
7
|
+
* Identifier | MemberExpression
|
|
8
|
+
* ExpressionLiterals: [
|
|
9
|
+
* CallExpression
|
|
10
|
+
* StringLiteral
|
|
11
|
+
* NumericLiteral
|
|
12
|
+
* ArrayLiteralExpression
|
|
13
|
+
* ExpressionLiterals
|
|
14
|
+
* ObjectLiteralExpression
|
|
15
|
+
* PropertyAssignment
|
|
16
|
+
* Identifier
|
|
17
|
+
* ExpressionLiterals
|
|
18
|
+
* ]
|
|
19
|
+
*/
|
|
20
|
+
export declare class ExpressionParser extends BaseOutputParser<ParsedType> {
|
|
21
|
+
parse(text: string): Promise<ParsedType>;
|
|
22
|
+
getFormatInstructions(): string;
|
|
23
|
+
}
|
|
24
|
+
export * from "./expression_type_handlers/types.js";
|
|
25
|
+
export { MasterHandler } from "./expression_type_handlers/factory.js";
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { MasterHandler } from "./expression_type_handlers/factory.js";
|
|
2
|
+
import { BaseOutputParser } from "../schema/output_parser.js";
|
|
3
|
+
import { ASTParser } from "./expression_type_handlers/base.js";
|
|
4
|
+
/**
|
|
5
|
+
* okay so we need to be able to handle the following cases:
|
|
6
|
+
* ExpressionStatement
|
|
7
|
+
* CallExpression
|
|
8
|
+
* Identifier | MemberExpression
|
|
9
|
+
* ExpressionLiterals: [
|
|
10
|
+
* CallExpression
|
|
11
|
+
* StringLiteral
|
|
12
|
+
* NumericLiteral
|
|
13
|
+
* ArrayLiteralExpression
|
|
14
|
+
* ExpressionLiterals
|
|
15
|
+
* ObjectLiteralExpression
|
|
16
|
+
* PropertyAssignment
|
|
17
|
+
* Identifier
|
|
18
|
+
* ExpressionLiterals
|
|
19
|
+
* ]
|
|
20
|
+
*/
|
|
21
|
+
export class ExpressionParser extends BaseOutputParser {
|
|
22
|
+
async parse(text) {
|
|
23
|
+
const parse = await ASTParser.importASTParser();
|
|
24
|
+
try {
|
|
25
|
+
const program = parse(text);
|
|
26
|
+
if (program.body.length > 1) {
|
|
27
|
+
throw new Error(`Expected 1 statement, got ${program.body.length}`);
|
|
28
|
+
}
|
|
29
|
+
const [node] = program.body;
|
|
30
|
+
if (!ASTParser.isExpressionStatement(node)) {
|
|
31
|
+
throw new Error(`Expected ExpressionStatement, got ${node.type}`);
|
|
32
|
+
}
|
|
33
|
+
const { expression: expressionStatement } = node;
|
|
34
|
+
if (!ASTParser.isCallExpression(expressionStatement)) {
|
|
35
|
+
throw new Error("Expected CallExpression");
|
|
36
|
+
}
|
|
37
|
+
const masterHandler = MasterHandler.createMasterHandler();
|
|
38
|
+
return await masterHandler.handle(expressionStatement);
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
throw new Error(`Error parsing ${err}: ${text}`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
getFormatInstructions() {
|
|
45
|
+
return "";
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
export * from "./expression_type_handlers/types.js";
|
|
49
|
+
export { MasterHandler } from "./expression_type_handlers/factory.js";
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ArrayLiteralExpressionHandler = void 0;
|
|
4
|
+
const base_js_1 = require("./base.cjs");
|
|
5
|
+
class ArrayLiteralExpressionHandler extends base_js_1.NodeHandler {
|
|
6
|
+
async accepts(node) {
|
|
7
|
+
if (base_js_1.ASTParser.isArrayExpression(node)) {
|
|
8
|
+
return node;
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
async handle(node) {
|
|
15
|
+
if (!this.parentHandler) {
|
|
16
|
+
throw new Error("ArrayLiteralExpressionHandler must have a parent handler");
|
|
17
|
+
}
|
|
18
|
+
return {
|
|
19
|
+
type: "array_literal",
|
|
20
|
+
values: await Promise.all(node.elements.map((innerNode) =>
|
|
21
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
22
|
+
this.parentHandler.handle(innerNode))),
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.ArrayLiteralExpressionHandler = ArrayLiteralExpressionHandler;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ESTree } from "meriyah";
|
|
2
|
+
import { NodeHandler } from "./base.js";
|
|
3
|
+
import { ArrayLiteralType } from "./types.js";
|
|
4
|
+
export declare class ArrayLiteralExpressionHandler extends NodeHandler {
|
|
5
|
+
accepts(node: ESTree.Node): Promise<ESTree.ArrayExpression | boolean>;
|
|
6
|
+
handle(node: ESTree.ArrayExpression): Promise<ArrayLiteralType>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { NodeHandler, ASTParser } from "./base.js";
|
|
2
|
+
export class ArrayLiteralExpressionHandler extends NodeHandler {
|
|
3
|
+
async accepts(node) {
|
|
4
|
+
if (ASTParser.isArrayExpression(node)) {
|
|
5
|
+
return node;
|
|
6
|
+
}
|
|
7
|
+
else {
|
|
8
|
+
return false;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
async handle(node) {
|
|
12
|
+
if (!this.parentHandler) {
|
|
13
|
+
throw new Error("ArrayLiteralExpressionHandler must have a parent handler");
|
|
14
|
+
}
|
|
15
|
+
return {
|
|
16
|
+
type: "array_literal",
|
|
17
|
+
values: await Promise.all(node.elements.map((innerNode) =>
|
|
18
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
19
|
+
this.parentHandler.handle(innerNode))),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ASTParser = exports.NodeHandler = void 0;
|
|
4
|
+
class NodeHandler {
|
|
5
|
+
constructor(parentHandler) {
|
|
6
|
+
Object.defineProperty(this, "parentHandler", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
configurable: true,
|
|
9
|
+
writable: true,
|
|
10
|
+
value: parentHandler
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
exports.NodeHandler = NodeHandler;
|
|
15
|
+
class ASTParser {
|
|
16
|
+
static async importASTParser() {
|
|
17
|
+
try {
|
|
18
|
+
if (!ASTParser.astParseInstance) {
|
|
19
|
+
const meriyah = await import("meriyah");
|
|
20
|
+
ASTParser.astParseInstance =
|
|
21
|
+
meriyah.parseScript;
|
|
22
|
+
}
|
|
23
|
+
return ASTParser.astParseInstance;
|
|
24
|
+
}
|
|
25
|
+
catch (e) {
|
|
26
|
+
console.log(e);
|
|
27
|
+
throw new Error("Failed to import meriyah. Please install meriyah (i.e. npm install meriyah).");
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
static isProgram(node) {
|
|
31
|
+
return node.type === "Program";
|
|
32
|
+
}
|
|
33
|
+
static isExpressionStatement(node) {
|
|
34
|
+
return node.type === "ExpressionStatement";
|
|
35
|
+
}
|
|
36
|
+
static isCallExpression(node) {
|
|
37
|
+
return node.type === "CallExpression";
|
|
38
|
+
}
|
|
39
|
+
static isLiteral(node) {
|
|
40
|
+
return node.type === "Literal";
|
|
41
|
+
}
|
|
42
|
+
static isStringLiteral(node) {
|
|
43
|
+
return node.type === "Literal" && typeof node.value === "string";
|
|
44
|
+
}
|
|
45
|
+
static isNumericLiteral(node) {
|
|
46
|
+
return node.type === "Literal" && typeof node.value === "number";
|
|
47
|
+
}
|
|
48
|
+
static isBooleanLiteral(node) {
|
|
49
|
+
return node.type === "Literal" && typeof node.value === "boolean";
|
|
50
|
+
}
|
|
51
|
+
static isIdentifier(node) {
|
|
52
|
+
return node.type === "Identifier";
|
|
53
|
+
}
|
|
54
|
+
static isObjectExpression(node) {
|
|
55
|
+
return node.type === "ObjectExpression";
|
|
56
|
+
}
|
|
57
|
+
static isArrayExpression(node) {
|
|
58
|
+
return node.type === "ArrayExpression";
|
|
59
|
+
}
|
|
60
|
+
static isProperty(node) {
|
|
61
|
+
return node.type === "Property";
|
|
62
|
+
}
|
|
63
|
+
static isMemberExpression(node) {
|
|
64
|
+
return node.type === "MemberExpression";
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
exports.ASTParser = ASTParser;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type meriyahT from "meriyah";
|
|
2
|
+
export declare abstract class NodeHandler {
|
|
3
|
+
protected parentHandler?: NodeHandler | undefined;
|
|
4
|
+
constructor(parentHandler?: NodeHandler | undefined);
|
|
5
|
+
abstract accepts(node: meriyahT.ESTree.Node): Promise<meriyahT.ESTree.Node | boolean>;
|
|
6
|
+
abstract handle(node: meriyahT.ESTree.Node): Promise<any>;
|
|
7
|
+
}
|
|
8
|
+
export declare class ASTParser {
|
|
9
|
+
static astParseInstance: typeof meriyahT.parseScript;
|
|
10
|
+
static importASTParser(): Promise<typeof meriyahT.parseScript>;
|
|
11
|
+
static isProgram(node: meriyahT.ESTree.Node): node is meriyahT.ESTree.Program;
|
|
12
|
+
static isExpressionStatement(node: meriyahT.ESTree.Node): node is meriyahT.ESTree.ExpressionStatement;
|
|
13
|
+
static isCallExpression(node: meriyahT.ESTree.Node): node is meriyahT.ESTree.CallExpression;
|
|
14
|
+
static isLiteral(node: meriyahT.ESTree.Node): node is meriyahT.ESTree.Literal;
|
|
15
|
+
static isStringLiteral(node: meriyahT.ESTree.Node): node is meriyahT.ESTree.Literal;
|
|
16
|
+
static isNumericLiteral(node: meriyahT.ESTree.Node): node is meriyahT.ESTree.Literal;
|
|
17
|
+
static isBooleanLiteral(node: meriyahT.ESTree.Node): node is meriyahT.ESTree.Literal;
|
|
18
|
+
static isIdentifier(node: meriyahT.ESTree.Node): node is meriyahT.ESTree.Identifier;
|
|
19
|
+
static isObjectExpression(node: meriyahT.ESTree.Node): node is meriyahT.ESTree.ObjectExpression;
|
|
20
|
+
static isArrayExpression(node: meriyahT.ESTree.Node): node is meriyahT.ESTree.ArrayExpression;
|
|
21
|
+
static isProperty(node: meriyahT.ESTree.Node): node is meriyahT.ESTree.Property;
|
|
22
|
+
static isMemberExpression(node: meriyahT.ESTree.Node): node is meriyahT.ESTree.MemberExpression;
|
|
23
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
export class NodeHandler {
|
|
2
|
+
constructor(parentHandler) {
|
|
3
|
+
Object.defineProperty(this, "parentHandler", {
|
|
4
|
+
enumerable: true,
|
|
5
|
+
configurable: true,
|
|
6
|
+
writable: true,
|
|
7
|
+
value: parentHandler
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export class ASTParser {
|
|
12
|
+
static async importASTParser() {
|
|
13
|
+
try {
|
|
14
|
+
if (!ASTParser.astParseInstance) {
|
|
15
|
+
const meriyah = await import("meriyah");
|
|
16
|
+
ASTParser.astParseInstance =
|
|
17
|
+
meriyah.parseScript;
|
|
18
|
+
}
|
|
19
|
+
return ASTParser.astParseInstance;
|
|
20
|
+
}
|
|
21
|
+
catch (e) {
|
|
22
|
+
console.log(e);
|
|
23
|
+
throw new Error("Failed to import meriyah. Please install meriyah (i.e. npm install meriyah).");
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
static isProgram(node) {
|
|
27
|
+
return node.type === "Program";
|
|
28
|
+
}
|
|
29
|
+
static isExpressionStatement(node) {
|
|
30
|
+
return node.type === "ExpressionStatement";
|
|
31
|
+
}
|
|
32
|
+
static isCallExpression(node) {
|
|
33
|
+
return node.type === "CallExpression";
|
|
34
|
+
}
|
|
35
|
+
static isLiteral(node) {
|
|
36
|
+
return node.type === "Literal";
|
|
37
|
+
}
|
|
38
|
+
static isStringLiteral(node) {
|
|
39
|
+
return node.type === "Literal" && typeof node.value === "string";
|
|
40
|
+
}
|
|
41
|
+
static isNumericLiteral(node) {
|
|
42
|
+
return node.type === "Literal" && typeof node.value === "number";
|
|
43
|
+
}
|
|
44
|
+
static isBooleanLiteral(node) {
|
|
45
|
+
return node.type === "Literal" && typeof node.value === "boolean";
|
|
46
|
+
}
|
|
47
|
+
static isIdentifier(node) {
|
|
48
|
+
return node.type === "Identifier";
|
|
49
|
+
}
|
|
50
|
+
static isObjectExpression(node) {
|
|
51
|
+
return node.type === "ObjectExpression";
|
|
52
|
+
}
|
|
53
|
+
static isArrayExpression(node) {
|
|
54
|
+
return node.type === "ArrayExpression";
|
|
55
|
+
}
|
|
56
|
+
static isProperty(node) {
|
|
57
|
+
return node.type === "Property";
|
|
58
|
+
}
|
|
59
|
+
static isMemberExpression(node) {
|
|
60
|
+
return node.type === "MemberExpression";
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BooleanLiteralHandler = void 0;
|
|
4
|
+
const base_js_1 = require("./base.cjs");
|
|
5
|
+
class BooleanLiteralHandler extends base_js_1.NodeHandler {
|
|
6
|
+
async accepts(node) {
|
|
7
|
+
if (base_js_1.ASTParser.isBooleanLiteral(node)) {
|
|
8
|
+
return node;
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
async handle(node) {
|
|
15
|
+
if (!this.parentHandler) {
|
|
16
|
+
throw new Error("ArrayLiteralExpressionHandler must have a parent handler");
|
|
17
|
+
}
|
|
18
|
+
return {
|
|
19
|
+
type: "boolean_literal",
|
|
20
|
+
value: node.value,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
exports.BooleanLiteralHandler = BooleanLiteralHandler;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ESTree } from "meriyah";
|
|
2
|
+
import { NodeHandler } from "./base.js";
|
|
3
|
+
import { BooleanLiteralType } from "./types.js";
|
|
4
|
+
export declare class BooleanLiteralHandler extends NodeHandler {
|
|
5
|
+
accepts(node: ESTree.Node): Promise<ESTree.Literal | boolean>;
|
|
6
|
+
handle(node: ESTree.Literal): Promise<BooleanLiteralType>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { NodeHandler, ASTParser } from "./base.js";
|
|
2
|
+
export class BooleanLiteralHandler extends NodeHandler {
|
|
3
|
+
async accepts(node) {
|
|
4
|
+
if (ASTParser.isBooleanLiteral(node)) {
|
|
5
|
+
return node;
|
|
6
|
+
}
|
|
7
|
+
else {
|
|
8
|
+
return false;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
async handle(node) {
|
|
12
|
+
if (!this.parentHandler) {
|
|
13
|
+
throw new Error("ArrayLiteralExpressionHandler must have a parent handler");
|
|
14
|
+
}
|
|
15
|
+
return {
|
|
16
|
+
type: "boolean_literal",
|
|
17
|
+
value: node.value,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CallExpressionHandler = void 0;
|
|
4
|
+
const base_js_1 = require("./base.cjs");
|
|
5
|
+
class CallExpressionHandler extends base_js_1.NodeHandler {
|
|
6
|
+
async accepts(node) {
|
|
7
|
+
if (base_js_1.ASTParser.isCallExpression(node)) {
|
|
8
|
+
return node;
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
async handle(node) {
|
|
15
|
+
function checkCallExpressionArgumentType(arg) {
|
|
16
|
+
return [
|
|
17
|
+
base_js_1.ASTParser.isStringLiteral,
|
|
18
|
+
base_js_1.ASTParser.isNumericLiteral,
|
|
19
|
+
base_js_1.ASTParser.isBooleanLiteral,
|
|
20
|
+
base_js_1.ASTParser.isArrayExpression,
|
|
21
|
+
base_js_1.ASTParser.isObjectExpression,
|
|
22
|
+
base_js_1.ASTParser.isCallExpression,
|
|
23
|
+
base_js_1.ASTParser.isIdentifier,
|
|
24
|
+
].reduce((acc, func) => acc || func(arg), false);
|
|
25
|
+
}
|
|
26
|
+
if (this.parentHandler === undefined) {
|
|
27
|
+
throw new Error("ArrayLiteralExpressionHandler must have a parent handler");
|
|
28
|
+
}
|
|
29
|
+
const { callee } = node;
|
|
30
|
+
let funcCall;
|
|
31
|
+
if (base_js_1.ASTParser.isIdentifier(callee)) {
|
|
32
|
+
funcCall = callee.name.replace(/^["'](.+(?=["']$))["']$/, "$1");
|
|
33
|
+
}
|
|
34
|
+
else if (base_js_1.ASTParser.isMemberExpression(callee)) {
|
|
35
|
+
funcCall = (await this.parentHandler.handle(callee));
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
throw new Error("Unknown expression type");
|
|
39
|
+
}
|
|
40
|
+
const args = await Promise.all(node.arguments.map((arg) => {
|
|
41
|
+
if (!checkCallExpressionArgumentType(arg)) {
|
|
42
|
+
throw new Error("Unknown argument type");
|
|
43
|
+
}
|
|
44
|
+
if (!this.parentHandler) {
|
|
45
|
+
throw new Error("CallExpressionHandler must have a parent handler");
|
|
46
|
+
}
|
|
47
|
+
return this.parentHandler.handle(arg);
|
|
48
|
+
}));
|
|
49
|
+
return { type: "call_expression", funcCall, args };
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
exports.CallExpressionHandler = CallExpressionHandler;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ESTree } from "meriyah";
|
|
2
|
+
import { NodeHandler } from "./base.js";
|
|
3
|
+
import { CallExpressionType } from "./types.js";
|
|
4
|
+
export declare class CallExpressionHandler extends NodeHandler {
|
|
5
|
+
accepts(node: ESTree.Node): Promise<ESTree.CallExpression | boolean>;
|
|
6
|
+
handle(node: ESTree.CallExpression): Promise<CallExpressionType>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { NodeHandler, ASTParser } from "./base.js";
|
|
2
|
+
export class CallExpressionHandler extends NodeHandler {
|
|
3
|
+
async accepts(node) {
|
|
4
|
+
if (ASTParser.isCallExpression(node)) {
|
|
5
|
+
return node;
|
|
6
|
+
}
|
|
7
|
+
else {
|
|
8
|
+
return false;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
async handle(node) {
|
|
12
|
+
function checkCallExpressionArgumentType(arg) {
|
|
13
|
+
return [
|
|
14
|
+
ASTParser.isStringLiteral,
|
|
15
|
+
ASTParser.isNumericLiteral,
|
|
16
|
+
ASTParser.isBooleanLiteral,
|
|
17
|
+
ASTParser.isArrayExpression,
|
|
18
|
+
ASTParser.isObjectExpression,
|
|
19
|
+
ASTParser.isCallExpression,
|
|
20
|
+
ASTParser.isIdentifier,
|
|
21
|
+
].reduce((acc, func) => acc || func(arg), false);
|
|
22
|
+
}
|
|
23
|
+
if (this.parentHandler === undefined) {
|
|
24
|
+
throw new Error("ArrayLiteralExpressionHandler must have a parent handler");
|
|
25
|
+
}
|
|
26
|
+
const { callee } = node;
|
|
27
|
+
let funcCall;
|
|
28
|
+
if (ASTParser.isIdentifier(callee)) {
|
|
29
|
+
funcCall = callee.name.replace(/^["'](.+(?=["']$))["']$/, "$1");
|
|
30
|
+
}
|
|
31
|
+
else if (ASTParser.isMemberExpression(callee)) {
|
|
32
|
+
funcCall = (await this.parentHandler.handle(callee));
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
throw new Error("Unknown expression type");
|
|
36
|
+
}
|
|
37
|
+
const args = await Promise.all(node.arguments.map((arg) => {
|
|
38
|
+
if (!checkCallExpressionArgumentType(arg)) {
|
|
39
|
+
throw new Error("Unknown argument type");
|
|
40
|
+
}
|
|
41
|
+
if (!this.parentHandler) {
|
|
42
|
+
throw new Error("CallExpressionHandler must have a parent handler");
|
|
43
|
+
}
|
|
44
|
+
return this.parentHandler.handle(arg);
|
|
45
|
+
}));
|
|
46
|
+
return { type: "call_expression", funcCall, args };
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MasterHandler = void 0;
|
|
4
|
+
const base_js_1 = require("./base.cjs");
|
|
5
|
+
const array_literal_expression_handler_js_1 = require("./array_literal_expression_handler.cjs");
|
|
6
|
+
const boolean_literal_handler_js_1 = require("./boolean_literal_handler.cjs");
|
|
7
|
+
const call_expression_handler_js_1 = require("./call_expression_handler.cjs");
|
|
8
|
+
const numeric_literal_handler_js_1 = require("./numeric_literal_handler.cjs");
|
|
9
|
+
const object_literal_expression_handler_js_1 = require("./object_literal_expression_handler.cjs");
|
|
10
|
+
const property_assignment_handler_js_1 = require("./property_assignment_handler.cjs");
|
|
11
|
+
const string_literal_handler_js_1 = require("./string_literal_handler.cjs");
|
|
12
|
+
const identifier_handler_js_1 = require("./identifier_handler.cjs");
|
|
13
|
+
const member_expression_handler_js_1 = require("./member_expression_handler.cjs");
|
|
14
|
+
const handlers = [
|
|
15
|
+
array_literal_expression_handler_js_1.ArrayLiteralExpressionHandler,
|
|
16
|
+
boolean_literal_handler_js_1.BooleanLiteralHandler,
|
|
17
|
+
call_expression_handler_js_1.CallExpressionHandler,
|
|
18
|
+
numeric_literal_handler_js_1.NumericLiteralHandler,
|
|
19
|
+
object_literal_expression_handler_js_1.ObjectLiteralExpressionHandler,
|
|
20
|
+
member_expression_handler_js_1.MemberExpressionHandler,
|
|
21
|
+
property_assignment_handler_js_1.PropertyAssignmentHandler,
|
|
22
|
+
string_literal_handler_js_1.StringLiteralHandler,
|
|
23
|
+
identifier_handler_js_1.IdentifierHandler,
|
|
24
|
+
];
|
|
25
|
+
class MasterHandler extends base_js_1.NodeHandler {
|
|
26
|
+
constructor() {
|
|
27
|
+
super(...arguments);
|
|
28
|
+
Object.defineProperty(this, "nodeHandlers", {
|
|
29
|
+
enumerable: true,
|
|
30
|
+
configurable: true,
|
|
31
|
+
writable: true,
|
|
32
|
+
value: []
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
async accepts(node) {
|
|
36
|
+
throw new Error(`Master handler does not accept any nodes: ${node}`);
|
|
37
|
+
}
|
|
38
|
+
async handle(node) {
|
|
39
|
+
for (const handler of this.nodeHandlers) {
|
|
40
|
+
const accepts = await handler.accepts(node);
|
|
41
|
+
if (accepts) {
|
|
42
|
+
return handler.handle(node);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
throw new Error(`No handler found for node: ${node}`);
|
|
46
|
+
}
|
|
47
|
+
static createMasterHandler() {
|
|
48
|
+
const masterHandler = new MasterHandler();
|
|
49
|
+
handlers.forEach((Handler) => {
|
|
50
|
+
const handlerInstance = new Handler(masterHandler);
|
|
51
|
+
masterHandler.nodeHandlers.push(handlerInstance);
|
|
52
|
+
});
|
|
53
|
+
return masterHandler;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
exports.MasterHandler = MasterHandler;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ESTree } from "meriyah";
|
|
2
|
+
import { NodeHandler } from "./base.js";
|
|
3
|
+
import { ParsedType } from "./types.js";
|
|
4
|
+
export declare class MasterHandler extends NodeHandler {
|
|
5
|
+
nodeHandlers: NodeHandler[];
|
|
6
|
+
accepts(node: ESTree.Node): Promise<ESTree.Node | boolean>;
|
|
7
|
+
handle(node: ESTree.CallExpression): Promise<ParsedType>;
|
|
8
|
+
static createMasterHandler(): MasterHandler;
|
|
9
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { NodeHandler } from "./base.js";
|
|
2
|
+
import { ArrayLiteralExpressionHandler } from "./array_literal_expression_handler.js";
|
|
3
|
+
import { BooleanLiteralHandler } from "./boolean_literal_handler.js";
|
|
4
|
+
import { CallExpressionHandler } from "./call_expression_handler.js";
|
|
5
|
+
import { NumericLiteralHandler } from "./numeric_literal_handler.js";
|
|
6
|
+
import { ObjectLiteralExpressionHandler } from "./object_literal_expression_handler.js";
|
|
7
|
+
import { PropertyAssignmentHandler } from "./property_assignment_handler.js";
|
|
8
|
+
import { StringLiteralHandler } from "./string_literal_handler.js";
|
|
9
|
+
import { IdentifierHandler } from "./identifier_handler.js";
|
|
10
|
+
import { MemberExpressionHandler } from "./member_expression_handler.js";
|
|
11
|
+
const handlers = [
|
|
12
|
+
ArrayLiteralExpressionHandler,
|
|
13
|
+
BooleanLiteralHandler,
|
|
14
|
+
CallExpressionHandler,
|
|
15
|
+
NumericLiteralHandler,
|
|
16
|
+
ObjectLiteralExpressionHandler,
|
|
17
|
+
MemberExpressionHandler,
|
|
18
|
+
PropertyAssignmentHandler,
|
|
19
|
+
StringLiteralHandler,
|
|
20
|
+
IdentifierHandler,
|
|
21
|
+
];
|
|
22
|
+
export class MasterHandler extends NodeHandler {
|
|
23
|
+
constructor() {
|
|
24
|
+
super(...arguments);
|
|
25
|
+
Object.defineProperty(this, "nodeHandlers", {
|
|
26
|
+
enumerable: true,
|
|
27
|
+
configurable: true,
|
|
28
|
+
writable: true,
|
|
29
|
+
value: []
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
async accepts(node) {
|
|
33
|
+
throw new Error(`Master handler does not accept any nodes: ${node}`);
|
|
34
|
+
}
|
|
35
|
+
async handle(node) {
|
|
36
|
+
for (const handler of this.nodeHandlers) {
|
|
37
|
+
const accepts = await handler.accepts(node);
|
|
38
|
+
if (accepts) {
|
|
39
|
+
return handler.handle(node);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
throw new Error(`No handler found for node: ${node}`);
|
|
43
|
+
}
|
|
44
|
+
static createMasterHandler() {
|
|
45
|
+
const masterHandler = new MasterHandler();
|
|
46
|
+
handlers.forEach((Handler) => {
|
|
47
|
+
const handlerInstance = new Handler(masterHandler);
|
|
48
|
+
masterHandler.nodeHandlers.push(handlerInstance);
|
|
49
|
+
});
|
|
50
|
+
return masterHandler;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.IdentifierHandler = void 0;
|
|
4
|
+
const base_js_1 = require("./base.cjs");
|
|
5
|
+
class IdentifierHandler extends base_js_1.NodeHandler {
|
|
6
|
+
async accepts(node) {
|
|
7
|
+
if (base_js_1.ASTParser.isIdentifier(node)) {
|
|
8
|
+
return node;
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
async handle(node) {
|
|
15
|
+
if (!this.parentHandler) {
|
|
16
|
+
throw new Error("ArrayLiteralExpressionHandler must have a parent handler");
|
|
17
|
+
}
|
|
18
|
+
const text = node.name.replace(/^["'](.+(?=["']$))["']$/, "$1");
|
|
19
|
+
return { type: "identifier", value: text };
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
exports.IdentifierHandler = IdentifierHandler;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ESTree } from "meriyah";
|
|
2
|
+
import { NodeHandler } from "./base.js";
|
|
3
|
+
import { IdentifierType } from "./types.js";
|
|
4
|
+
export declare class IdentifierHandler extends NodeHandler {
|
|
5
|
+
accepts(node: ESTree.Node): Promise<ESTree.Identifier | boolean>;
|
|
6
|
+
handle(node: ESTree.Identifier): Promise<IdentifierType>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { NodeHandler, ASTParser } from "./base.js";
|
|
2
|
+
export class IdentifierHandler extends NodeHandler {
|
|
3
|
+
async accepts(node) {
|
|
4
|
+
if (ASTParser.isIdentifier(node)) {
|
|
5
|
+
return node;
|
|
6
|
+
}
|
|
7
|
+
else {
|
|
8
|
+
return false;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
async handle(node) {
|
|
12
|
+
if (!this.parentHandler) {
|
|
13
|
+
throw new Error("ArrayLiteralExpressionHandler must have a parent handler");
|
|
14
|
+
}
|
|
15
|
+
const text = node.name.replace(/^["'](.+(?=["']$))["']$/, "$1");
|
|
16
|
+
return { type: "identifier", value: text };
|
|
17
|
+
}
|
|
18
|
+
}
|