tarsec 0.0.21 → 0.0.22

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/dist/trace.d.ts CHANGED
@@ -4,7 +4,7 @@ import { ParserResult, Parser, PlainObject, CaptureParser } from "./types.js";
4
4
  * @param name - debug name for parser
5
5
  * @param result - parser result
6
6
  * @returns - A formatted string that describes the parser's result
7
- */
7
+ */
8
8
  export declare function resultToString<T>(name: string, result: ParserResult<T>): string;
9
9
  /**
10
10
  * This function is used internally with debug mode. Given a parser and a debug name for it,
@@ -63,6 +63,19 @@ export declare function resultToString<T>(name: string, result: ParserResult<T>)
63
63
  */
64
64
  export declare function trace<T, C extends PlainObject>(name: string, parser: CaptureParser<T, C>): CaptureParser<T, C>;
65
65
  export declare function trace<T>(name: string, parser: Parser<T>): Parser<T>;
66
+ /**
67
+ * Useful for adding debugging messages to your parsers.
68
+ * Use `getDebugMessages` to get all the messages,
69
+ * or `getDebugMessage` to get the last message,
70
+ * if your parser fails.
71
+ *
72
+ * @param parser - a parser
73
+ * @param message - the message to show if the parser fails
74
+ */
75
+ export declare function debug<T, C extends PlainObject>(parser: CaptureParser<T, C>, message: string): CaptureParser<T, C>;
76
+ export declare function debug<T>(parser: Parser<T>, message: string): Parser<T>;
77
+ export declare function getDebugMessages(): string[];
78
+ export declare function getDebugMessage(): string;
66
79
  /**
67
80
  * Utility timing function. Given a callback, it times the callback
68
81
  * and returns its runtime in milliseconds. It uses `performance.now()` to do this.
package/dist/trace.js CHANGED
@@ -4,24 +4,25 @@ const isNode = typeof process !== "undefined" &&
4
4
  process.versions != null &&
5
5
  process.versions.node != null;
6
6
  const STEP = 2;
7
+ let level = 0;
8
+ let counts = {};
9
+ let times = {};
10
+ let debugFlag = isNode ? !!process.env.DEBUG : false;
11
+ let stepCount = 0;
12
+ let stepLimit = -1;
13
+ let debugMessages = [];
7
14
  /**
8
15
  * This function is used internally by the `trace` function to create the string for each step.
9
16
  * @param name - debug name for parser
10
17
  * @param result - parser result
11
18
  * @returns - A formatted string that describes the parser's result
12
- */
19
+ */
13
20
  export function resultToString(name, result) {
14
21
  if (result.success) {
15
22
  return `✅ ${name} -- match: ${escape(result.result)}, rest: ${escape(result.rest)}`;
16
23
  }
17
24
  return `❌ ${name} -- message: ${escape(result.message)}, rest: ${escape(result.rest)}`;
18
25
  }
19
- let level = 0;
20
- let counts = {};
21
- let times = {};
22
- let debugFlag = isNode ? !!process.env.DEBUG : false;
23
- let stepCount = 0;
24
- let stepLimit = -1;
25
26
  export function trace(name, parser) {
26
27
  if (stepLimit > 0 && stepCount > stepLimit) {
27
28
  throw new Error(`parser step limit of ${stepLimit} exceeded, parser may be in an infinite loop`);
@@ -52,6 +53,24 @@ export function trace(name, parser) {
52
53
  }
53
54
  };
54
55
  }
56
+ export function debug(parser, message) {
57
+ return (input) => {
58
+ const result = parser(input);
59
+ if (result.success) {
60
+ return result;
61
+ }
62
+ else {
63
+ debugMessages.push(`${message} -- ${resultToString("", result)}`);
64
+ return result;
65
+ }
66
+ };
67
+ }
68
+ export function getDebugMessages() {
69
+ return debugMessages;
70
+ }
71
+ export function getDebugMessage() {
72
+ return debugMessages[debugMessages.length - 1];
73
+ }
55
74
  /**
56
75
  * Utility timing function. Given a callback, it times the callback
57
76
  * and returns its runtime in milliseconds. It uses `performance.now()` to do this.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tarsec",
3
- "version": "0.0.21",
3
+ "version": "0.0.22",
4
4
  "description": "A parser combinator library for TypeScript, inspired by Parsec.",
5
5
  "homepage": "https://github.com/egonSchiele/tarsec",
6
6
  "scripts": {