@hardlydifficult/text 1.0.42 → 1.0.43

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.
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Safe condition parser for strategy expressions.
3
+ *
4
+ * Supports: indicator aliases, numeric literals, comparison operators (>, <, >=, <=, ==),
5
+ * logical operators (AND, OR), and parentheses.
6
+ *
7
+ * Examples:
8
+ * "sma_7 > sma_30"
9
+ * "rsi_14 < 30"
10
+ * "macd_signal > 0 AND rsi_14 < 70"
11
+ * "(sma_7 > sma_30) AND (rsi_14 < 70 OR bollinger < 0.2)"
12
+ *
13
+ * NO eval() - uses a simple recursive descent parser.
14
+ */
15
+ /**
16
+ * Evaluate a condition expression against a set of variable values.
17
+ *
18
+ * @param condition - Expression string, e.g. "sma_7 > sma_30 AND rsi_14 < 70"
19
+ * @param variables - Map of variable names to their current values
20
+ * @returns true if the condition is met
21
+ */
22
+ export declare function evaluateCondition(condition: string, variables: Record<string, number>): boolean;
23
+ /**
24
+ * Extract all variable names referenced in a condition expression.
25
+ *
26
+ * @param condition - Expression string to extract variables from
27
+ * @returns Array of variable name strings found in the expression
28
+ */
29
+ export declare function extractVariables(condition: string): string[];
30
+ //# sourceMappingURL=conditionParser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conditionParser.d.ts","sourceRoot":"","sources":["../src/conditionParser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAiPH;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,OAAO,CAOT;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAO5D"}
@@ -0,0 +1,248 @@
1
+ "use strict";
2
+ /**
3
+ * Safe condition parser for strategy expressions.
4
+ *
5
+ * Supports: indicator aliases, numeric literals, comparison operators (>, <, >=, <=, ==),
6
+ * logical operators (AND, OR), and parentheses.
7
+ *
8
+ * Examples:
9
+ * "sma_7 > sma_30"
10
+ * "rsi_14 < 30"
11
+ * "macd_signal > 0 AND rsi_14 < 70"
12
+ * "(sma_7 > sma_30) AND (rsi_14 < 70 OR bollinger < 0.2)"
13
+ *
14
+ * NO eval() - uses a simple recursive descent parser.
15
+ */
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.evaluateCondition = evaluateCondition;
18
+ exports.extractVariables = extractVariables;
19
+ function tokenize(input) {
20
+ const tokens = [];
21
+ let i = 0;
22
+ const s = input.trim();
23
+ while (i < s.length) {
24
+ const ch = s[i];
25
+ // Skip whitespace
26
+ if (ch === " " || ch === "\t") {
27
+ i++;
28
+ continue;
29
+ }
30
+ // Parentheses
31
+ if (ch === "(" || ch === ")") {
32
+ tokens.push({ type: "paren", value: ch });
33
+ i++;
34
+ continue;
35
+ }
36
+ // Two-char operators
37
+ if (i + 1 < s.length) {
38
+ const twoChar = s.slice(i, i + 2);
39
+ if (twoChar === ">=" || twoChar === "<=" || twoChar === "==") {
40
+ tokens.push({
41
+ type: "operator",
42
+ value: twoChar,
43
+ });
44
+ i += 2;
45
+ continue;
46
+ }
47
+ }
48
+ // Single-char operators
49
+ if (ch === ">" || ch === "<") {
50
+ tokens.push({ type: "operator", value: ch });
51
+ i++;
52
+ continue;
53
+ }
54
+ // Number (including negative and decimal)
55
+ if (ch === "-" || (ch >= "0" && ch <= "9")) {
56
+ // Check if minus is a negative sign (not subtraction)
57
+ if (ch === "-") {
58
+ // Minus is negative if at start, after operator, after logical, or after open paren
59
+ if (tokens.length > 0) {
60
+ const prev = tokens[tokens.length - 1];
61
+ if (prev.type !== "operator" &&
62
+ prev.type !== "logical" &&
63
+ !(prev.type === "paren" && prev.value === "(")) {
64
+ // This would be subtraction — not supported
65
+ throw new Error(`Unexpected '-' at position ${String(i)}. Subtraction is not supported.`);
66
+ }
67
+ }
68
+ }
69
+ let numStr = "";
70
+ if (ch === "-") {
71
+ numStr += "-";
72
+ i++;
73
+ }
74
+ while (i < s.length) {
75
+ const digit = s[i];
76
+ if (!((digit >= "0" && digit <= "9") || digit === ".")) {
77
+ break;
78
+ }
79
+ numStr += digit;
80
+ i++;
81
+ }
82
+ tokens.push({ type: "number", value: parseFloat(numStr) });
83
+ continue;
84
+ }
85
+ // Identifier or logical operator
86
+ if ((ch >= "a" && ch <= "z") || (ch >= "A" && ch <= "Z") || ch === "_") {
87
+ let ident = "";
88
+ while (i < s.length) {
89
+ const c = s[i];
90
+ if (!((c >= "a" && c <= "z") ||
91
+ (c >= "A" && c <= "Z") ||
92
+ (c >= "0" && c <= "9") ||
93
+ c === "_")) {
94
+ break;
95
+ }
96
+ ident += c;
97
+ i++;
98
+ }
99
+ if (ident === "AND" || ident === "OR") {
100
+ tokens.push({ type: "logical", value: ident });
101
+ }
102
+ else {
103
+ tokens.push({ type: "identifier", value: ident });
104
+ }
105
+ continue;
106
+ }
107
+ throw new Error(`Unexpected character '${ch}' at position ${String(i)}`);
108
+ }
109
+ return tokens;
110
+ }
111
+ /*
112
+ * Recursive descent parser for condition expressions.
113
+ *
114
+ * Grammar:
115
+ * expr := orExpr
116
+ * orExpr := andExpr ('OR' andExpr)*
117
+ * andExpr := compare ('AND' compare)*
118
+ * compare := value (op value)?
119
+ * value := NUMBER | IDENTIFIER | '(' expr ')'
120
+ */
121
+ class Parser {
122
+ tokens;
123
+ variables;
124
+ pos = 0;
125
+ constructor(tokens, variables) {
126
+ this.tokens = tokens;
127
+ this.variables = variables;
128
+ }
129
+ evaluate() {
130
+ const result = this.orExpr();
131
+ if (this.pos < this.tokens.length) {
132
+ throw new Error(`Unexpected token at position ${String(this.pos)}: ${JSON.stringify(this.tokens[this.pos])}`);
133
+ }
134
+ return result;
135
+ }
136
+ orExpr() {
137
+ let left = this.andExpr();
138
+ while (this.pos < this.tokens.length) {
139
+ const token = this.tokens[this.pos];
140
+ if (token.type !== "logical" || token.value !== "OR") {
141
+ break;
142
+ }
143
+ this.pos++; // consume OR
144
+ const right = this.andExpr();
145
+ left = left || right;
146
+ }
147
+ return left;
148
+ }
149
+ andExpr() {
150
+ let left = this.compare();
151
+ while (this.pos < this.tokens.length) {
152
+ const token = this.tokens[this.pos];
153
+ if (token.type !== "logical" || token.value !== "AND") {
154
+ break;
155
+ }
156
+ this.pos++; // consume AND
157
+ const right = this.compare();
158
+ left = left && right;
159
+ }
160
+ return left;
161
+ }
162
+ compare() {
163
+ const left = this.value();
164
+ if (this.pos < this.tokens.length) {
165
+ const token = this.tokens[this.pos];
166
+ if (token.type === "operator") {
167
+ const { value: op } = token;
168
+ this.pos++; // consume operator
169
+ const right = this.value();
170
+ switch (op) {
171
+ case ">":
172
+ return left > right;
173
+ case "<":
174
+ return left < right;
175
+ case ">=":
176
+ return left >= right;
177
+ case "<=":
178
+ return left <= right;
179
+ case "==":
180
+ return left === right;
181
+ default: {
182
+ const _exhaustive = op;
183
+ throw new Error(`Unknown operator: ${_exhaustive}`);
184
+ }
185
+ }
186
+ }
187
+ }
188
+ // Bare truthy check (non-zero = true)
189
+ return left !== 0 && !isNaN(left);
190
+ }
191
+ value() {
192
+ if (this.pos >= this.tokens.length) {
193
+ throw new Error("Unexpected end of expression");
194
+ }
195
+ const token = this.tokens[this.pos];
196
+ if (token.type === "number") {
197
+ this.pos++;
198
+ return token.value;
199
+ }
200
+ if (token.type === "identifier") {
201
+ this.pos++;
202
+ if (!(token.value in this.variables)) {
203
+ throw new Error(`Unknown variable: ${token.value}`);
204
+ }
205
+ return this.variables[token.value];
206
+ }
207
+ if (token.type === "paren" && token.value === "(") {
208
+ this.pos++; // consume '('
209
+ const result = this.orExpr();
210
+ const closeParen = this.tokens[this.pos];
211
+ if (closeParen.type !== "paren" || closeParen.value !== ")") {
212
+ throw new Error("Expected closing parenthesis");
213
+ }
214
+ this.pos++; // consume ')'
215
+ // Return as number (boolean -> 1/0)
216
+ return result ? 1 : 0;
217
+ }
218
+ throw new Error(`Unexpected token: ${JSON.stringify(token)}`);
219
+ }
220
+ }
221
+ /**
222
+ * Evaluate a condition expression against a set of variable values.
223
+ *
224
+ * @param condition - Expression string, e.g. "sma_7 > sma_30 AND rsi_14 < 70"
225
+ * @param variables - Map of variable names to their current values
226
+ * @returns true if the condition is met
227
+ */
228
+ function evaluateCondition(condition, variables) {
229
+ const tokens = tokenize(condition);
230
+ if (tokens.length === 0) {
231
+ return false;
232
+ }
233
+ const parser = new Parser(tokens, variables);
234
+ return parser.evaluate();
235
+ }
236
+ /**
237
+ * Extract all variable names referenced in a condition expression.
238
+ *
239
+ * @param condition - Expression string to extract variables from
240
+ * @returns Array of variable name strings found in the expression
241
+ */
242
+ function extractVariables(condition) {
243
+ const tokens = tokenize(condition);
244
+ return tokens
245
+ .filter((t) => t.type === "identifier")
246
+ .map((t) => t.value);
247
+ }
248
+ //# sourceMappingURL=conditionParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conditionParser.js","sourceRoot":"","sources":["../src/conditionParser.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -14,4 +14,6 @@ export { Linker, createLinker, linkText, type LinkRule, type LinkTarget, type Li
14
14
  export { codeBlock } from "./codeBlock.js";
15
15
  export { stripAnsi } from "./stripAnsi.js";
16
16
  export { isWaitingForInput } from "./questionDetection.js";
17
+ export { createSessionId } from "./sessionId.js";
18
+ export { evaluateCondition, extractVariables } from "./conditionParser.js";
17
19
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACvE,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EACL,MAAM,EACN,YAAY,EACZ,QAAQ,EACR,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,eAAe,GACrB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACvE,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EACL,MAAM,EACN,YAAY,EACZ,QAAQ,EACR,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,eAAe,GACrB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC"}
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isWaitingForInput = exports.stripAnsi = exports.codeBlock = exports.linkText = exports.createLinker = exports.Linker = exports.healYaml = exports.formatYaml = exports.formatWithLineNumbers = exports.convertFormat = exports.FILE_TREE_DEFAULTS = exports.buildFileTree = exports.formatDuration = exports.slugify = exports.chunkText = exports.extractPlaceholders = exports.replaceTemplate = exports.formatErrorForLog = exports.formatError = exports.getErrorMessage = void 0;
3
+ exports.extractVariables = exports.evaluateCondition = exports.createSessionId = exports.isWaitingForInput = exports.stripAnsi = exports.codeBlock = exports.linkText = exports.createLinker = exports.Linker = exports.healYaml = exports.formatYaml = exports.formatWithLineNumbers = exports.convertFormat = exports.FILE_TREE_DEFAULTS = exports.buildFileTree = exports.formatDuration = exports.slugify = exports.chunkText = exports.extractPlaceholders = exports.replaceTemplate = exports.formatErrorForLog = exports.formatError = exports.getErrorMessage = void 0;
4
4
  var errors_js_1 = require("./errors.js");
5
5
  Object.defineProperty(exports, "getErrorMessage", { enumerable: true, get: function () { return errors_js_1.getErrorMessage; } });
6
6
  Object.defineProperty(exports, "formatError", { enumerable: true, get: function () { return errors_js_1.formatError; } });
@@ -35,4 +35,9 @@ var stripAnsi_js_1 = require("./stripAnsi.js");
35
35
  Object.defineProperty(exports, "stripAnsi", { enumerable: true, get: function () { return stripAnsi_js_1.stripAnsi; } });
36
36
  var questionDetection_js_1 = require("./questionDetection.js");
37
37
  Object.defineProperty(exports, "isWaitingForInput", { enumerable: true, get: function () { return questionDetection_js_1.isWaitingForInput; } });
38
+ var sessionId_js_1 = require("./sessionId.js");
39
+ Object.defineProperty(exports, "createSessionId", { enumerable: true, get: function () { return sessionId_js_1.createSessionId; } });
40
+ var conditionParser_js_1 = require("./conditionParser.js");
41
+ Object.defineProperty(exports, "evaluateCondition", { enumerable: true, get: function () { return conditionParser_js_1.evaluateCondition; } });
42
+ Object.defineProperty(exports, "extractVariables", { enumerable: true, get: function () { return conditionParser_js_1.extractVariables; } });
38
43
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,yCAA8E;AAArE,4GAAA,eAAe,OAAA;AAAE,wGAAA,WAAW,OAAA;AAAE,8GAAA,iBAAiB,OAAA;AACxD,6CAAqE;AAA5D,8GAAA,eAAe,OAAA;AAAE,kHAAA,mBAAmB,OAAA;AAC7C,+CAA2C;AAAlC,yGAAA,SAAS,OAAA;AAClB,2CAAuC;AAA9B,qGAAA,OAAO,OAAA;AAChB,yDAAqD;AAA5C,mHAAA,cAAc,OAAA;AACvB,uDAAuE;AAA9D,iHAAA,aAAa,OAAA;AAAE,sHAAA,kBAAkB,OAAA;AAE1C,uDAAmD;AAA1C,iHAAA,aAAa,OAAA;AAEtB,uEAAmE;AAA1D,iIAAA,qBAAqB,OAAA;AAC9B,iDAA6C;AAApC,2GAAA,UAAU,OAAA;AACnB,6CAAyC;AAAhC,uGAAA,QAAQ,OAAA;AACjB,yCAWqB;AAVnB,mGAAA,MAAM,OAAA;AACN,yGAAA,YAAY,OAAA;AACZ,qGAAA,QAAQ,OAAA;AASV,+CAA2C;AAAlC,yGAAA,SAAS,OAAA;AAClB,+CAA2C;AAAlC,yGAAA,SAAS,OAAA;AAClB,+DAA2D;AAAlD,yHAAA,iBAAiB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,yCAA8E;AAArE,4GAAA,eAAe,OAAA;AAAE,wGAAA,WAAW,OAAA;AAAE,8GAAA,iBAAiB,OAAA;AACxD,6CAAqE;AAA5D,8GAAA,eAAe,OAAA;AAAE,kHAAA,mBAAmB,OAAA;AAC7C,+CAA2C;AAAlC,yGAAA,SAAS,OAAA;AAClB,2CAAuC;AAA9B,qGAAA,OAAO,OAAA;AAChB,yDAAqD;AAA5C,mHAAA,cAAc,OAAA;AACvB,uDAAuE;AAA9D,iHAAA,aAAa,OAAA;AAAE,sHAAA,kBAAkB,OAAA;AAE1C,uDAAmD;AAA1C,iHAAA,aAAa,OAAA;AAEtB,uEAAmE;AAA1D,iIAAA,qBAAqB,OAAA;AAC9B,iDAA6C;AAApC,2GAAA,UAAU,OAAA;AACnB,6CAAyC;AAAhC,uGAAA,QAAQ,OAAA;AACjB,yCAWqB;AAVnB,mGAAA,MAAM,OAAA;AACN,yGAAA,YAAY,OAAA;AACZ,qGAAA,QAAQ,OAAA;AASV,+CAA2C;AAAlC,yGAAA,SAAS,OAAA;AAClB,+CAA2C;AAAlC,yGAAA,SAAS,OAAA;AAClB,+DAA2D;AAAlD,yHAAA,iBAAiB,OAAA;AAC1B,+CAAiD;AAAxC,+GAAA,eAAe,OAAA;AACxB,2DAA2E;AAAlE,uHAAA,iBAAiB,OAAA;AAAE,sHAAA,gBAAgB,OAAA"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Creates a unique session ID with the given prefix, a base-36 timestamp, and a random suffix.
3
+ */
4
+ export declare function createSessionId(prefix: string): string;
5
+ //# sourceMappingURL=sessionId.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessionId.d.ts","sourceRoot":"","sources":["../src/sessionId.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEtD"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createSessionId = createSessionId;
4
+ /**
5
+ * Creates a unique session ID with the given prefix, a base-36 timestamp, and a random suffix.
6
+ */
7
+ function createSessionId(prefix) {
8
+ return `${prefix}-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;
9
+ }
10
+ //# sourceMappingURL=sessionId.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessionId.js","sourceRoot":"","sources":["../src/sessionId.ts"],"names":[],"mappings":";;AAGA,0CAEC;AALD;;GAEG;AACH,SAAgB,eAAe,CAAC,MAAc;IAC5C,OAAO,GAAG,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AAC1F,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hardlydifficult/text",
3
- "version": "1.0.42",
3
+ "version": "1.0.43",
4
4
  "main": "./dist/index.js",
5
5
  "types": "./dist/index.d.ts",
6
6
  "files": [