codebuff 1.0.169 → 1.0.170

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 (103) hide show
  1. package/dist/browser-runner.js +17 -7
  2. package/dist/browser-runner.js.map +1 -1
  3. package/dist/chat-storage.d.ts +2 -27
  4. package/dist/chat-storage.js +73 -139
  5. package/dist/chat-storage.js.map +1 -1
  6. package/dist/checkpoint-file-manager.d.ts +8 -0
  7. package/dist/checkpoint-file-manager.js +125 -0
  8. package/dist/checkpoint-file-manager.js.map +1 -0
  9. package/dist/checkpoints.d.ts +61 -0
  10. package/dist/checkpoints.js +171 -0
  11. package/dist/checkpoints.js.map +1 -0
  12. package/dist/cli.d.ts +7 -8
  13. package/dist/cli.js +127 -155
  14. package/dist/cli.js.map +1 -1
  15. package/dist/client.d.ts +179 -28
  16. package/dist/client.js +154 -150
  17. package/dist/client.js.map +1 -1
  18. package/dist/code-map/languages.js +17 -7
  19. package/dist/code-map/languages.js.map +1 -1
  20. package/dist/code-map/parse.js +17 -7
  21. package/dist/code-map/parse.js.map +1 -1
  22. package/dist/code-map/tsconfig.tsbuildinfo +1 -1
  23. package/dist/common/actions.d.ts +2121 -560
  24. package/dist/common/actions.js +58 -81
  25. package/dist/common/actions.js.map +1 -1
  26. package/dist/common/constants/tools.d.ts +13 -0
  27. package/dist/common/constants/tools.js +22 -0
  28. package/dist/common/constants/tools.js.map +1 -0
  29. package/dist/common/constants.d.ts +0 -1
  30. package/dist/common/constants.js +3 -3
  31. package/dist/common/constants.js.map +1 -1
  32. package/dist/common/logger.d.ts +1 -0
  33. package/dist/common/logger.js +7 -0
  34. package/dist/common/logger.js.map +1 -0
  35. package/dist/common/types/agent-state.d.ts +461 -0
  36. package/dist/common/types/agent-state.js +30 -0
  37. package/dist/common/types/agent-state.js.map +1 -0
  38. package/dist/common/types/message.d.ts +311 -0
  39. package/dist/common/types/message.js +54 -0
  40. package/dist/common/types/message.js.map +1 -0
  41. package/dist/common/types/tools.d.ts +5 -0
  42. package/dist/common/types/tools.js +3 -0
  43. package/dist/common/types/tools.js.map +1 -0
  44. package/dist/common/util/changes.js +3 -3
  45. package/dist/common/util/changes.js.map +1 -1
  46. package/dist/common/util/constants.d.ts +1 -0
  47. package/dist/common/util/constants.js +7 -0
  48. package/dist/common/util/constants.js.map +1 -0
  49. package/dist/common/util/credentials.d.ts +4 -4
  50. package/dist/common/util/file.d.ts +6 -2
  51. package/dist/common/util/file.js +25 -24
  52. package/dist/common/util/file.js.map +1 -1
  53. package/dist/common/util/git.js +1 -1
  54. package/dist/common/util/git.js.map +1 -1
  55. package/dist/common/util/helpers.d.ts +1 -0
  56. package/dist/common/util/helpers.js +6 -0
  57. package/dist/common/util/helpers.js.map +1 -0
  58. package/dist/common/util/messages.d.ts +1 -1
  59. package/dist/common/util/promise.d.ts +8 -0
  60. package/dist/common/util/promise.js +25 -2
  61. package/dist/common/util/promise.js.map +1 -1
  62. package/dist/common/util/saxy.d.ts +158 -0
  63. package/dist/common/util/saxy.js +450 -0
  64. package/dist/common/util/saxy.js.map +1 -0
  65. package/dist/common/util/string.d.ts +13 -0
  66. package/dist/common/util/string.js +21 -1
  67. package/dist/common/util/string.js.map +1 -1
  68. package/dist/common/util/token-counter.d.ts +3 -0
  69. package/dist/common/util/token-counter.js +27 -0
  70. package/dist/common/util/token-counter.js.map +1 -0
  71. package/dist/common/websockets/websocket-schema.d.ts +3646 -530
  72. package/dist/create-template-project.js +17 -7
  73. package/dist/create-template-project.js.map +1 -1
  74. package/dist/index.js +5 -3
  75. package/dist/index.js.map +1 -1
  76. package/dist/menu.js +31 -19
  77. package/dist/menu.js.map +1 -1
  78. package/dist/project-files.d.ts +40 -2
  79. package/dist/project-files.js +94 -34
  80. package/dist/project-files.js.map +1 -1
  81. package/dist/tool-handlers.d.ts +21 -7
  82. package/dist/tool-handlers.js +99 -37
  83. package/dist/tool-handlers.js.map +1 -1
  84. package/dist/utils/__tests__/xml-stream-parser.test.js +221 -0
  85. package/dist/utils/__tests__/xml-stream-parser.test.js.map +1 -0
  86. package/dist/utils/spinner.d.ts +1 -0
  87. package/dist/utils/spinner.js +28 -7
  88. package/dist/utils/spinner.js.map +1 -1
  89. package/dist/utils/terminal.d.ts +23 -3
  90. package/dist/utils/terminal.js +68 -45
  91. package/dist/utils/terminal.js.map +1 -1
  92. package/dist/utils/tool-renderers.d.ts +16 -0
  93. package/dist/utils/tool-renderers.js +105 -0
  94. package/dist/utils/tool-renderers.js.map +1 -0
  95. package/dist/utils/xml-stream-parser.d.ts +9 -0
  96. package/dist/utils/xml-stream-parser.js +128 -0
  97. package/dist/utils/xml-stream-parser.js.map +1 -0
  98. package/dist/worker-script-project-context.js +1 -1
  99. package/dist/worker-script-project-context.js.map +1 -1
  100. package/package.json +2 -1
  101. package/dist/__tests__/browser-runner.test.js +0 -15
  102. package/dist/__tests__/browser-runner.test.js.map +0 -1
  103. /package/dist/{__tests__/browser-runner.test.d.ts → utils/__tests__/xml-stream-parser.test.d.ts} +0 -0
@@ -2,9 +2,10 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.sleep = exports.mapAsync = exports.INITIAL_RETRY_DELAY = void 0;
4
4
  exports.withRetry = withRetry;
5
+ exports.withTimeout = withTimeout;
5
6
  exports.INITIAL_RETRY_DELAY = 1000; // 1 second
6
7
  async function withRetry(operation, options = {}) {
7
- const { maxRetries = 3, shouldRetry = (error) => error?.type === 'APIConnectionError', onRetry = () => { }, retryDelayMs = exports.INITIAL_RETRY_DELAY } = options;
8
+ const { maxRetries = 3, shouldRetry = (error) => error?.type === 'APIConnectionError', onRetry = () => { }, retryDelayMs = exports.INITIAL_RETRY_DELAY, } = options;
8
9
  let lastError = null;
9
10
  for (let attempt = 0; attempt < maxRetries; attempt++) {
10
11
  try {
@@ -18,7 +19,7 @@ async function withRetry(operation, options = {}) {
18
19
  onRetry(error, attempt + 1);
19
20
  // Exponential backoff
20
21
  const delayMs = retryDelayMs * Math.pow(2, attempt);
21
- await new Promise(resolve => setTimeout(resolve, delayMs));
22
+ await new Promise((resolve) => setTimeout(resolve, delayMs));
22
23
  }
23
24
  }
24
25
  throw lastError;
@@ -54,4 +55,26 @@ const mapAsync = (items, f, maxConcurrentRequests = 20) => {
54
55
  exports.mapAsync = mapAsync;
55
56
  const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
56
57
  exports.sleep = sleep;
58
+ /**
59
+ * Wraps a promise with a timeout
60
+ * @param promise The promise to wrap
61
+ * @param timeoutMs Timeout in milliseconds
62
+ * @param timeoutMessage Optional message for the timeout error
63
+ * @returns A promise that resolves with the result of the original promise or rejects with a timeout error
64
+ */
65
+ async function withTimeout(promise, timeoutMs, timeoutMessage = 'Operation timed out') {
66
+ let timeoutId;
67
+ const timeoutPromise = new Promise((_, reject) => {
68
+ timeoutId = setTimeout(() => {
69
+ reject(new Error(timeoutMessage));
70
+ }, timeoutMs);
71
+ });
72
+ return Promise.race([
73
+ promise.then((result) => {
74
+ clearTimeout(timeoutId);
75
+ return result;
76
+ }),
77
+ timeoutPromise,
78
+ ]);
79
+ }
57
80
  //# sourceMappingURL=promise.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"promise.js","sourceRoot":"","sources":["../../src/util/promise.ts"],"names":[],"mappings":";;;AAEA,8BAqCC;AAvCY,QAAA,mBAAmB,GAAG,IAAI,CAAA,CAAC,WAAW;AAE5C,KAAK,UAAU,SAAS,CAC7B,SAA2B,EAC3B,UAKI,EAAE;IAEN,MAAM,EACJ,UAAU,GAAG,CAAC,EACd,WAAW,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,oBAAoB,EAC7D,OAAO,GAAG,GAAG,EAAE,GAAE,CAAC,EAClB,YAAY,GAAG,2BAAmB,EACnC,GAAG,OAAO,CAAA;IAEX,IAAI,SAAS,GAAQ,IAAI,CAAA;IAEzB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;QACtD,IAAI,CAAC;YACH,OAAO,MAAM,SAAS,EAAE,CAAA;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,SAAS,GAAG,KAAK,CAAA;YAEjB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,UAAU,GAAG,CAAC,EAAE,CAAC;gBACtD,MAAM,KAAK,CAAA;YACb,CAAC;YAED,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,CAAC,CAAC,CAAA;YAE3B,sBAAsB;YACtB,MAAM,OAAO,GAAG,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;YACnD,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;QAC5D,CAAC;IACH,CAAC;IAED,MAAM,SAAS,CAAA;AACjB,CAAC;AAEM,MAAM,QAAQ,GAAG,CACtB,KAAU,EACV,CAAyC,EACzC,qBAAqB,GAAG,EAAE,EAC1B,EAAE;IACF,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,IAAI,YAAY,GAAG,CAAC,CAAA;IACpB,MAAM,OAAO,GAAQ,EAAE,CAAA;IAEvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAA+B,EAAE,MAAM,EAAE,EAAE;QAC7D,MAAM,MAAM,GAAG,GAAG,EAAE;YAClB,OAAO,KAAK,GAAG,KAAK,CAAC,MAAM,IAAI,YAAY,GAAG,qBAAqB,EAAE,CAAC;gBACpE,MAAM,SAAS,GAAG,KAAK,CAAA;gBACvB,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;qBAC3B,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;oBACb,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,CAAA;oBACzB,YAAY,EAAE,CAAA;oBACd,IAAI,KAAK,KAAK,KAAK,CAAC,MAAM,IAAI,YAAY,KAAK,CAAC;wBAAE,OAAO,CAAC,OAAO,CAAC,CAAA;;wBAC7D,MAAM,EAAE,CAAA;gBACf,CAAC,CAAC;qBACD,KAAK,CAAC,MAAM,CAAC,CAAA;gBAEhB,KAAK,EAAE,CAAA;gBACP,YAAY,EAAE,CAAA;YAChB,CAAC;QACH,CAAC,CAAA;QAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,CAAC,EAAE,CAAC,CAAA;;YAC9B,MAAM,EAAE,CAAA;IACf,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AA9BY,QAAA,QAAQ,YA8BpB;AAEM,MAAM,KAAK,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;AAA7D,QAAA,KAAK,SAAwD"}
1
+ {"version":3,"file":"promise.js","sourceRoot":"","sources":["../../src/util/promise.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,158 @@
1
+ /**
2
+ * This is a modified version of the Saxy library that emits text nodes immediately
3
+ */
4
+ import { Transform } from 'readable-stream';
5
+ export type TextNode = {
6
+ /** The text value */
7
+ contents: string;
8
+ };
9
+ export type CDATANode = {
10
+ /** The CDATA contents */
11
+ contents: string;
12
+ };
13
+ export type CommentNode = {
14
+ /** The comment contents */
15
+ contents: string;
16
+ };
17
+ export type ProcessingInstructionNode = {
18
+ /** The instruction contents */
19
+ contents: string;
20
+ };
21
+ /** Information about an opened tag */
22
+ export type TagOpenNode = {
23
+ /** Name of the tag that was opened. */
24
+ name: string;
25
+ /**
26
+ * Attributes passed to the tag, in a string representation
27
+ * (use Saxy.parseAttributes to get an attribute-value mapping).
28
+ */
29
+ attrs: string;
30
+ /**
31
+ * Whether the tag self-closes (tags of the form `<tag />`).
32
+ * Such tags will not be followed by a closing tag.
33
+ */
34
+ isSelfClosing: boolean;
35
+ };
36
+ /** Information about a closed tag */
37
+ export type TagCloseNode = {
38
+ /** Name of the tag that was closed. */
39
+ name: string;
40
+ };
41
+ export type NextFunction = (err?: Error) => void;
42
+ export interface SaxyEvents {
43
+ finish: () => void;
44
+ error: (err: Error) => void;
45
+ text: (data: TextNode) => void;
46
+ cdata: (data: CDATANode) => void;
47
+ comment: (data: CommentNode) => void;
48
+ processinginstruction: (data: ProcessingInstructionNode) => void;
49
+ tagopen: (data: TagOpenNode) => void;
50
+ tagclose: (data: TagCloseNode) => void;
51
+ }
52
+ export type SaxyEventNames = keyof SaxyEvents;
53
+ export type SaxyEventArgs = Error | TextNode | CDATANode | CommentNode | ProcessingInstructionNode | TagOpenNode | TagCloseNode;
54
+ export interface Saxy {
55
+ on<U extends SaxyEventNames>(event: U, listener: SaxyEvents[U]): this;
56
+ on(event: string | symbol | Event, listener: (...args: any[]) => void): this;
57
+ once<U extends SaxyEventNames>(event: U, listener: SaxyEvents[U]): this;
58
+ }
59
+ /**
60
+ * Schema for defining allowed tags and their children
61
+ */
62
+ export type TagSchema = {
63
+ [topLevelTag: string]: string[];
64
+ };
65
+ /**
66
+ * Parse a string of XML attributes to a map of attribute names to their values.
67
+ *
68
+ * @param input A string of XML attributes
69
+ * @throws If the string is malformed
70
+ * @return A map of attribute names to their values
71
+ */
72
+ export declare const parseAttrs: (input: string) => Record<string, unknown>;
73
+ /**
74
+ * Parse an XML stream and emit events corresponding
75
+ * to the different tokens encountered.
76
+ */
77
+ export declare class Saxy extends Transform {
78
+ private _decoder;
79
+ private _tagStack;
80
+ private _waiting;
81
+ private _schema;
82
+ /**
83
+ * Parse a string of XML attributes to a map of attribute names
84
+ * to their values
85
+ *
86
+ * @param input A string of XML attributes
87
+ * @throws If the string is malformed
88
+ * @return A map of attribute names to their values
89
+ */
90
+ static parseAttrs: (input: string) => Record<string, unknown>;
91
+ /**
92
+ * Expand a piece of XML text by replacing all XML entities
93
+ * by their canonical value. Ignore invalid and unknown
94
+ * entities
95
+ *
96
+ * @param input A string of XML text
97
+ * @return The input string, expanded
98
+ */
99
+ static parseEntities: (input: string) => string;
100
+ /**
101
+ * Create a new parser instance.
102
+ * @param schema Optional schema defining allowed top-level tags and their children
103
+ */
104
+ constructor(schema?: TagSchema);
105
+ /**
106
+ * Handle a chunk of data written into the stream.
107
+ *
108
+ * @param chunk Chunk of data.
109
+ * @param encoding Encoding of the string, or 'buffer'.
110
+ * @param callback Called when the chunk has been parsed, with
111
+ * an optional error argument.
112
+ */
113
+ _write(chunk: Buffer | string, encoding: string, callback: NextFunction): void;
114
+ /**
115
+ * Handle the end of incoming data.
116
+ *
117
+ * @param callback
118
+ */
119
+ _final(callback: NextFunction): void;
120
+ /**
121
+ * Immediately parse a complete chunk of XML and close the stream.
122
+ *
123
+ * @param input Input chunk.
124
+ */
125
+ parse(input: Buffer | string): this;
126
+ /**
127
+ * Put the stream into waiting mode, which means we need more data
128
+ * to finish parsing the current token.
129
+ *
130
+ * @param token Type of token that is being parsed.
131
+ * @param data Pending data.
132
+ */
133
+ private _wait;
134
+ /**
135
+ * Put the stream out of waiting mode.
136
+ *
137
+ * @return Any data that was pending.
138
+ */
139
+ private _unwait;
140
+ /**
141
+ * Handle the opening of a tag in the text stream.
142
+ *
143
+ * Push the tag into the opened tag stack and emit the
144
+ * corresponding event on the event emitter.
145
+ *
146
+ * @param node Information about the opened tag.
147
+ */
148
+ private _handleTagOpening;
149
+ /**
150
+ * Parse a XML chunk.
151
+ *
152
+ * @private
153
+ * @param input A string with the chunk data.
154
+ * @param callback Called when the chunk has been parsed, with
155
+ * an optional error argument.
156
+ */
157
+ private _parseChunk;
158
+ }
@@ -0,0 +1,450 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Saxy = exports.parseAttrs = void 0;
4
+ /**
5
+ * This is a modified version of the Saxy library that emits text nodes immediately
6
+ */
7
+ const readable_stream_1 = require("readable-stream");
8
+ const string_decoder_1 = require("string_decoder");
9
+ const string_1 = require("./string");
10
+ /**
11
+ * Nodes that can be found inside an XML stream.
12
+ */
13
+ const Node = {
14
+ text: 'text',
15
+ cdata: 'cdata',
16
+ comment: 'comment',
17
+ processingInstruction: 'processinginstruction',
18
+ tagOpen: 'tagopen',
19
+ tagClose: 'tagclose',
20
+ // markupDeclaration: 'markupDeclaration',
21
+ };
22
+ /**
23
+ * Expand a piece of XML text by replacing all XML entities by
24
+ * their canonical value. Ignore invalid and unknown entities.
25
+ *
26
+ * @param input A string of XML text
27
+ * @return The input string, expanded
28
+ */
29
+ const parseEntities = (input) => {
30
+ let position = 0, next = 0;
31
+ const parts = [];
32
+ while ((next = input.indexOf('&', position)) !== -1) {
33
+ // remember anything there was before the entity
34
+ if (next > position) {
35
+ parts.push(input.slice(position, next));
36
+ }
37
+ const end = input.indexOf(';', next);
38
+ // ignore unterminated entities
39
+ if (end === -1) {
40
+ break;
41
+ }
42
+ const entity = input.slice(next, end);
43
+ if (entity === '&quot') {
44
+ parts.push('"');
45
+ }
46
+ else if (entity === '&amp') {
47
+ parts.push('&');
48
+ }
49
+ else if (entity === '&apos') {
50
+ parts.push("'");
51
+ }
52
+ else if (entity === '&lt') {
53
+ parts.push('<');
54
+ }
55
+ else if (entity === '&gt') {
56
+ parts.push('>');
57
+ }
58
+ else {
59
+ // ignore unrecognized character entities
60
+ if (entity[1] !== '#') {
61
+ parts.push(entity + ';');
62
+ }
63
+ else {
64
+ // hexadecimal numeric entities
65
+ if (entity[2] == 'x') {
66
+ const value = parseInt(entity.slice(3), 16);
67
+ // ignore non-numeric numeric entities
68
+ if (isNaN(value)) {
69
+ parts.push(entity + ';');
70
+ }
71
+ else {
72
+ parts.push(String.fromCharCode(value));
73
+ }
74
+ }
75
+ else {
76
+ // decimal numeric entities
77
+ const value = parseInt(entity.slice(2), 10);
78
+ // ignore non-numeric numeric entities
79
+ if (isNaN(value)) {
80
+ parts.push(entity + ';');
81
+ }
82
+ else {
83
+ parts.push(String.fromCharCode(value));
84
+ }
85
+ }
86
+ }
87
+ }
88
+ position = end + 1;
89
+ }
90
+ if (position < input.length) {
91
+ parts.push(input.slice(position));
92
+ }
93
+ return parts.join('');
94
+ };
95
+ /**
96
+ * Parse a string of XML attributes to a map of attribute names to their values.
97
+ *
98
+ * @param input A string of XML attributes
99
+ * @throws If the string is malformed
100
+ * @return A map of attribute names to their values
101
+ */
102
+ const parseAttrs = (input) => {
103
+ const attrs = {};
104
+ const end = input.length;
105
+ let position = 0;
106
+ while (position < end) {
107
+ // Skip all whitespace
108
+ if ((0, string_1.isWhitespace)(input[position])) {
109
+ position += 1;
110
+ continue;
111
+ }
112
+ // Check that the attribute name contains valid chars
113
+ const startName = position;
114
+ while (input[position] !== '=' && position < end) {
115
+ if ((0, string_1.isWhitespace)(input[position])) {
116
+ throw new Error('Attribute names may not contain whitespace');
117
+ }
118
+ position += 1;
119
+ }
120
+ // This is XML, so we need a value for the attribute
121
+ if (position === end) {
122
+ throw new Error('Expected a value for the attribute');
123
+ }
124
+ const attrName = input.slice(startName, position);
125
+ position += 1;
126
+ const startQuote = input[position];
127
+ position += 1;
128
+ if (startQuote !== '"' && startQuote !== "'") {
129
+ throw new Error('Attribute values should be quoted');
130
+ }
131
+ const endQuote = input.indexOf(startQuote, position);
132
+ if (endQuote === -1) {
133
+ throw new Error('Unclosed attribute value');
134
+ }
135
+ const attrValue = input.slice(position, endQuote);
136
+ attrs[attrName] = attrValue;
137
+ position = endQuote + 1;
138
+ }
139
+ return attrs;
140
+ };
141
+ exports.parseAttrs = parseAttrs;
142
+ /**
143
+ * Find the first character in a string that matches a predicate
144
+ * while being outside the given delimiters.
145
+ *
146
+ * @param haystack String to search in
147
+ * @param predicate Checks whether a character is permissible
148
+ * @param [delim=''] Delimiter inside which no match should be
149
+ * returned. If empty, all characters are considered.
150
+ * @param [fromIndex=0] Start the search from this index
151
+ * @return Index of the first match, or -1 if no match
152
+ */
153
+ const findIndexOutside = (haystack, predicate, delim = '', fromIndex = 0) => {
154
+ const length = haystack.length;
155
+ let index = fromIndex;
156
+ let inDelim = false;
157
+ while (index < length && (inDelim || !predicate(haystack[index]))) {
158
+ if (haystack[index] === delim) {
159
+ inDelim = !inDelim;
160
+ }
161
+ ++index;
162
+ }
163
+ return index === length ? -1 : index;
164
+ };
165
+ /**
166
+ * Parse an XML stream and emit events corresponding
167
+ * to the different tokens encountered.
168
+ */
169
+ class Saxy extends readable_stream_1.Transform {
170
+ _decoder;
171
+ _tagStack;
172
+ _waiting;
173
+ _schema;
174
+ /**
175
+ * Parse a string of XML attributes to a map of attribute names
176
+ * to their values
177
+ *
178
+ * @param input A string of XML attributes
179
+ * @throws If the string is malformed
180
+ * @return A map of attribute names to their values
181
+ */
182
+ static parseAttrs = exports.parseAttrs;
183
+ /**
184
+ * Expand a piece of XML text by replacing all XML entities
185
+ * by their canonical value. Ignore invalid and unknown
186
+ * entities
187
+ *
188
+ * @param input A string of XML text
189
+ * @return The input string, expanded
190
+ */
191
+ static parseEntities = parseEntities;
192
+ /**
193
+ * Create a new parser instance.
194
+ * @param schema Optional schema defining allowed top-level tags and their children
195
+ */
196
+ constructor(schema) {
197
+ super({ decodeStrings: false });
198
+ // String decoder instance
199
+ const state = this._writableState;
200
+ this._decoder = new string_decoder_1.StringDecoder(state.defaultEncoding);
201
+ // Stack of tags that were opened up until the current cursor position
202
+ this._tagStack = [];
203
+ // Not waiting initially
204
+ this._waiting = null;
205
+ // Store schema if provided
206
+ this._schema = schema || null;
207
+ }
208
+ /**
209
+ * Handle a chunk of data written into the stream.
210
+ *
211
+ * @param chunk Chunk of data.
212
+ * @param encoding Encoding of the string, or 'buffer'.
213
+ * @param callback Called when the chunk has been parsed, with
214
+ * an optional error argument.
215
+ */
216
+ _write(chunk, encoding, callback) {
217
+ const data = encoding === 'buffer'
218
+ ? this._decoder.write(chunk)
219
+ : chunk;
220
+ this._parseChunk(data, callback);
221
+ }
222
+ /**
223
+ * Handle the end of incoming data.
224
+ *
225
+ * @param callback
226
+ */
227
+ _final(callback) {
228
+ // Make sure all data has been extracted from the decoder
229
+ this._parseChunk(this._decoder.end(), (err) => {
230
+ if (err) {
231
+ callback(err);
232
+ return;
233
+ }
234
+ // Handle unclosed nodes
235
+ if (this._waiting !== null) {
236
+ switch (this._waiting.token) {
237
+ case Node.text:
238
+ // Text nodes are implicitly closed
239
+ this.emit('text', { contents: this._waiting.data });
240
+ break;
241
+ case Node.cdata:
242
+ callback(new Error('Unclosed CDATA section'));
243
+ return;
244
+ case Node.comment:
245
+ callback(new Error('Unclosed comment'));
246
+ return;
247
+ case Node.processingInstruction:
248
+ callback(new Error('Unclosed processing instruction'));
249
+ return;
250
+ case Node.tagOpen:
251
+ case Node.tagClose:
252
+ // We do not distinguish between unclosed opening
253
+ // or unclosed closing tags
254
+ callback(new Error('Unclosed tag'));
255
+ return;
256
+ default:
257
+ // Pass
258
+ }
259
+ }
260
+ if (this._tagStack.length !== 0) {
261
+ // callback(new Error(`Unclosed tags: ${this._tagStack.join(',')}`))
262
+ return;
263
+ }
264
+ callback();
265
+ });
266
+ }
267
+ /**
268
+ * Immediately parse a complete chunk of XML and close the stream.
269
+ *
270
+ * @param input Input chunk.
271
+ */
272
+ parse(input) {
273
+ this.end(input);
274
+ return this;
275
+ }
276
+ /**
277
+ * Put the stream into waiting mode, which means we need more data
278
+ * to finish parsing the current token.
279
+ *
280
+ * @param token Type of token that is being parsed.
281
+ * @param data Pending data.
282
+ */
283
+ _wait(token, data) {
284
+ this._waiting = { token, data };
285
+ }
286
+ /**
287
+ * Put the stream out of waiting mode.
288
+ *
289
+ * @return Any data that was pending.
290
+ */
291
+ _unwait() {
292
+ if (this._waiting === null) {
293
+ return '';
294
+ }
295
+ const data = this._waiting.data;
296
+ this._waiting = null;
297
+ return data;
298
+ }
299
+ /**
300
+ * Handle the opening of a tag in the text stream.
301
+ *
302
+ * Push the tag into the opened tag stack and emit the
303
+ * corresponding event on the event emitter.
304
+ *
305
+ * @param node Information about the opened tag.
306
+ */
307
+ _handleTagOpening(node) {
308
+ const { name } = node;
309
+ // If we have a schema, validate against it
310
+ if (this._schema) {
311
+ // For top-level tags
312
+ if (this._tagStack.length === 0) {
313
+ // Ignore if not in schema
314
+ if (!this._schema[name]) {
315
+ return;
316
+ }
317
+ }
318
+ // For nested tags
319
+ else {
320
+ const parentTag = this._tagStack[this._tagStack.length - 1];
321
+ // Ignore if parent not in schema or this tag not allowed as child
322
+ if (!this._schema[parentTag] ||
323
+ !this._schema[parentTag].includes(name)) {
324
+ return;
325
+ }
326
+ }
327
+ }
328
+ if (!node.isSelfClosing) {
329
+ this._tagStack.push(node.name);
330
+ }
331
+ this.emit(Node.tagOpen, node);
332
+ }
333
+ /**
334
+ * Parse a XML chunk.
335
+ *
336
+ * @private
337
+ * @param input A string with the chunk data.
338
+ * @param callback Called when the chunk has been parsed, with
339
+ * an optional error argument.
340
+ */
341
+ _parseChunk(input, callback) {
342
+ // Use pending data if applicable and get out of waiting mode
343
+ input = this._unwait() + input;
344
+ let chunkPos = 0;
345
+ const end = input.length;
346
+ while (chunkPos < end) {
347
+ if (input[chunkPos] !== '<') {
348
+ const nextTag = input.indexOf('<', chunkPos);
349
+ // We read a TEXT node but there might be some
350
+ // more text data left, so we wait
351
+ if (nextTag === -1) {
352
+ // this._wait(Node.text, input.slice(chunkPos))
353
+ let chunk = input.slice(chunkPos);
354
+ if (this._tagStack.length === 1) {
355
+ // Trim whitespace for text within top level tags
356
+ chunk = chunk.trim();
357
+ }
358
+ if (chunk.length > 0) {
359
+ // NOTE (James): We changed this to emit the partial text node immediately
360
+ this.emit(Node.text, { contents: chunk });
361
+ }
362
+ chunkPos = end;
363
+ break;
364
+ }
365
+ // A tag follows, so we can be confident that
366
+ // we have all the data needed for the TEXT node
367
+ let chunk = input.slice(chunkPos, nextTag);
368
+ if (this._tagStack.length === 1) {
369
+ // Trim whitespace for text within top level tags
370
+ chunk = chunk.trim();
371
+ }
372
+ // Only emit non-whitespace text or text within a single tag (not between tags)
373
+ if (chunk.length > 0) {
374
+ this.emit(Node.text, { contents: chunk });
375
+ }
376
+ chunkPos = nextTag;
377
+ }
378
+ // Invariant: the cursor now points on the name of a tag,
379
+ // after an opening angled bracket
380
+ chunkPos += 1;
381
+ // Recognize regular tags (< ... >)
382
+ const tagClose = findIndexOutside(input, (char) => char === '>', '"', chunkPos);
383
+ if (tagClose === -1) {
384
+ this._wait(Node.tagOpen, input.slice(chunkPos - 1));
385
+ break;
386
+ }
387
+ // Check if the tag is a closing tag
388
+ if (input[chunkPos] === '/') {
389
+ const tagName = input.slice(chunkPos + 1, tagClose);
390
+ const stackedTagName = this._tagStack[this._tagStack.length - 1];
391
+ // Only emit close tag if it matches schema validation
392
+ if (this._schema) {
393
+ // For top-level tags
394
+ if (this._tagStack.length === 1) {
395
+ if (!this._schema[tagName]) {
396
+ chunkPos = tagClose + 1;
397
+ continue;
398
+ }
399
+ }
400
+ // For nested tags
401
+ else {
402
+ const parentTag = this._tagStack[this._tagStack.length - 2];
403
+ if (!this._schema[parentTag] ||
404
+ !this._schema[parentTag].includes(tagName)) {
405
+ chunkPos = tagClose + 1;
406
+ continue;
407
+ }
408
+ }
409
+ }
410
+ this._tagStack.pop();
411
+ // Only emit if the tag matches what we expect
412
+ if (stackedTagName === tagName) {
413
+ this.emit(Node.tagClose, { name: tagName });
414
+ }
415
+ chunkPos = tagClose + 1;
416
+ continue;
417
+ }
418
+ // Check if the tag is self-closing
419
+ const isSelfClosing = input[tagClose - 1] === '/';
420
+ let realTagClose = isSelfClosing ? tagClose - 1 : tagClose;
421
+ // Extract the tag name and attributes
422
+ const whitespace = input.slice(chunkPos).search(/\s/);
423
+ if (whitespace === -1 || whitespace >= tagClose - chunkPos) {
424
+ // Tag without any attribute
425
+ this._handleTagOpening({
426
+ name: input.slice(chunkPos, realTagClose),
427
+ attrs: '',
428
+ isSelfClosing,
429
+ });
430
+ }
431
+ else if (whitespace === 0) {
432
+ // console.log('Tag names may not start with whitespace:', input)
433
+ // callback(new Error('Tag names may not start with whitespace'))
434
+ // return
435
+ }
436
+ else {
437
+ // Tag with attributes
438
+ this._handleTagOpening({
439
+ name: input.slice(chunkPos, chunkPos + whitespace),
440
+ attrs: input.slice(chunkPos + whitespace, realTagClose),
441
+ isSelfClosing,
442
+ });
443
+ }
444
+ chunkPos = tagClose + 1;
445
+ }
446
+ callback();
447
+ }
448
+ }
449
+ exports.Saxy = Saxy;
450
+ //# sourceMappingURL=saxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"saxy.js","sourceRoot":"","sources":["../../src/util/saxy.ts"],"names":[],"mappings":"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"}