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.
Files changed (117) hide show
  1. package/chains/query_constructor/ir.cjs +1 -0
  2. package/chains/query_constructor/ir.d.ts +1 -0
  3. package/chains/query_constructor/ir.js +1 -0
  4. package/chains/query_constructor.cjs +1 -0
  5. package/chains/query_constructor.d.ts +1 -0
  6. package/chains/query_constructor.js +1 -0
  7. package/dist/agents/chat_convo/index.cjs +27 -11
  8. package/dist/agents/chat_convo/index.d.ts +4 -1
  9. package/dist/agents/chat_convo/index.js +28 -12
  10. package/dist/agents/chat_convo/outputParser.cjs +79 -7
  11. package/dist/agents/chat_convo/outputParser.d.ts +25 -13
  12. package/dist/agents/chat_convo/outputParser.js +77 -6
  13. package/dist/agents/chat_convo/prompt.cjs +11 -8
  14. package/dist/agents/chat_convo/prompt.d.ts +2 -2
  15. package/dist/agents/chat_convo/prompt.js +11 -8
  16. package/dist/callbacks/handlers/tracer_langchain.cjs +12 -4
  17. package/dist/callbacks/handlers/tracer_langchain.d.ts +4 -1
  18. package/dist/callbacks/handlers/tracer_langchain.js +12 -4
  19. package/dist/callbacks/manager.cjs +6 -2
  20. package/dist/callbacks/manager.js +6 -2
  21. package/dist/chains/query_constructor/index.cjs +105 -0
  22. package/dist/chains/query_constructor/index.d.ts +37 -0
  23. package/dist/chains/query_constructor/index.js +95 -0
  24. package/dist/chains/query_constructor/ir.cjs +116 -0
  25. package/dist/chains/query_constructor/ir.d.ts +60 -0
  26. package/dist/chains/query_constructor/ir.js +107 -0
  27. package/dist/chains/query_constructor/parser.cjs +103 -0
  28. package/dist/chains/query_constructor/parser.d.ts +12 -0
  29. package/dist/chains/query_constructor/parser.js +99 -0
  30. package/dist/chains/query_constructor/prompt.cjs +127 -0
  31. package/dist/chains/query_constructor/prompt.d.ts +15 -0
  32. package/dist/chains/query_constructor/prompt.js +124 -0
  33. package/dist/chains/sql_db/sql_db_chain.cjs +13 -0
  34. package/dist/chains/sql_db/sql_db_chain.d.ts +2 -0
  35. package/dist/chains/sql_db/sql_db_chain.js +13 -0
  36. package/dist/client/langchainplus.cjs +21 -15
  37. package/dist/client/langchainplus.d.ts +4 -2
  38. package/dist/client/langchainplus.js +21 -15
  39. package/dist/llms/sagemaker_endpoint.cjs +123 -0
  40. package/dist/llms/sagemaker_endpoint.d.ts +82 -0
  41. package/dist/llms/sagemaker_endpoint.js +118 -0
  42. package/dist/memory/buffer_memory.cjs +1 -1
  43. package/dist/memory/buffer_memory.js +1 -1
  44. package/dist/memory/buffer_window_memory.cjs +1 -1
  45. package/dist/memory/buffer_window_memory.js +1 -1
  46. package/dist/output_parsers/expression.cjs +68 -0
  47. package/dist/output_parsers/expression.d.ts +25 -0
  48. package/dist/output_parsers/expression.js +49 -0
  49. package/dist/output_parsers/expression_type_handlers/array_literal_expression_handler.cjs +26 -0
  50. package/dist/output_parsers/expression_type_handlers/array_literal_expression_handler.d.ts +7 -0
  51. package/dist/output_parsers/expression_type_handlers/array_literal_expression_handler.js +22 -0
  52. package/dist/output_parsers/expression_type_handlers/base.cjs +67 -0
  53. package/dist/output_parsers/expression_type_handlers/base.d.ts +23 -0
  54. package/dist/output_parsers/expression_type_handlers/base.js +62 -0
  55. package/dist/output_parsers/expression_type_handlers/boolean_literal_handler.cjs +24 -0
  56. package/dist/output_parsers/expression_type_handlers/boolean_literal_handler.d.ts +7 -0
  57. package/dist/output_parsers/expression_type_handlers/boolean_literal_handler.js +20 -0
  58. package/dist/output_parsers/expression_type_handlers/call_expression_handler.cjs +52 -0
  59. package/dist/output_parsers/expression_type_handlers/call_expression_handler.d.ts +7 -0
  60. package/dist/output_parsers/expression_type_handlers/call_expression_handler.js +48 -0
  61. package/dist/output_parsers/expression_type_handlers/factory.cjs +56 -0
  62. package/dist/output_parsers/expression_type_handlers/factory.d.ts +9 -0
  63. package/dist/output_parsers/expression_type_handlers/factory.js +52 -0
  64. package/dist/output_parsers/expression_type_handlers/identifier_handler.cjs +22 -0
  65. package/dist/output_parsers/expression_type_handlers/identifier_handler.d.ts +7 -0
  66. package/dist/output_parsers/expression_type_handlers/identifier_handler.js +18 -0
  67. package/dist/output_parsers/expression_type_handlers/member_expression_handler.cjs +45 -0
  68. package/dist/output_parsers/expression_type_handlers/member_expression_handler.d.ts +7 -0
  69. package/dist/output_parsers/expression_type_handlers/member_expression_handler.js +41 -0
  70. package/dist/output_parsers/expression_type_handlers/numeric_literal_handler.cjs +24 -0
  71. package/dist/output_parsers/expression_type_handlers/numeric_literal_handler.d.ts +7 -0
  72. package/dist/output_parsers/expression_type_handlers/numeric_literal_handler.js +20 -0
  73. package/dist/output_parsers/expression_type_handlers/object_literal_expression_handler.cjs +29 -0
  74. package/dist/output_parsers/expression_type_handlers/object_literal_expression_handler.d.ts +7 -0
  75. package/dist/output_parsers/expression_type_handlers/object_literal_expression_handler.js +25 -0
  76. package/dist/output_parsers/expression_type_handlers/property_assignment_handler.cjs +36 -0
  77. package/dist/output_parsers/expression_type_handlers/property_assignment_handler.d.ts +7 -0
  78. package/dist/output_parsers/expression_type_handlers/property_assignment_handler.js +32 -0
  79. package/dist/output_parsers/expression_type_handlers/string_literal_handler.cjs +22 -0
  80. package/dist/output_parsers/expression_type_handlers/string_literal_handler.d.ts +7 -0
  81. package/dist/output_parsers/expression_type_handlers/string_literal_handler.js +18 -0
  82. package/dist/output_parsers/expression_type_handlers/types.cjs +2 -0
  83. package/dist/output_parsers/expression_type_handlers/types.d.ts +41 -0
  84. package/dist/output_parsers/expression_type_handlers/types.js +1 -0
  85. package/dist/output_parsers/index.cjs +2 -1
  86. package/dist/output_parsers/index.d.ts +1 -1
  87. package/dist/output_parsers/index.js +1 -1
  88. package/dist/output_parsers/structured.cjs +81 -23
  89. package/dist/output_parsers/structured.d.ts +18 -0
  90. package/dist/output_parsers/structured.js +79 -22
  91. package/dist/retrievers/self_query/index.cjs +79 -0
  92. package/dist/retrievers/self_query/index.d.ts +33 -0
  93. package/dist/retrievers/self_query/index.js +74 -0
  94. package/dist/retrievers/self_query/translator.cjs +72 -0
  95. package/dist/retrievers/self_query/translator.d.ts +14 -0
  96. package/dist/retrievers/self_query/translator.js +67 -0
  97. package/dist/schema/query_constructor.cjs +26 -0
  98. package/dist/schema/query_constructor.d.ts +6 -0
  99. package/dist/schema/query_constructor.js +22 -0
  100. package/dist/tools/json.cjs +3 -1
  101. package/dist/tools/json.js +3 -1
  102. package/dist/util/event-source-parse.cjs +31 -5
  103. package/dist/util/event-source-parse.d.ts +3 -3
  104. package/dist/util/event-source-parse.js +31 -5
  105. package/llms/sagemaker_endpoint.cjs +1 -0
  106. package/llms/sagemaker_endpoint.d.ts +1 -0
  107. package/llms/sagemaker_endpoint.js +1 -0
  108. package/output_parsers/expression.cjs +1 -0
  109. package/output_parsers/expression.d.ts +1 -0
  110. package/output_parsers/expression.js +1 -0
  111. package/package.json +61 -3
  112. package/retrievers/self_query.cjs +1 -0
  113. package/retrievers/self_query.d.ts +1 -0
  114. package/retrievers/self_query.js +1 -0
  115. package/schema/query_constructor.cjs +1 -0
  116. package/schema/query_constructor.d.ts +1 -0
  117. 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
+ }