codecane 1.0.293 → 1.0.296

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 (300) hide show
  1. package/README.md +87 -0
  2. package/dist/background-process-manager.d.ts +50 -0
  3. package/dist/background-process-manager.js +359 -0
  4. package/dist/background-process-manager.js.map +1 -0
  5. package/dist/browser-runner.d.ts +35 -0
  6. package/dist/browser-runner.js +680 -0
  7. package/dist/browser-runner.js.map +1 -0
  8. package/dist/chat-storage.d.ts +2 -0
  9. package/dist/chat-storage.js +93 -0
  10. package/dist/chat-storage.js.map +1 -0
  11. package/dist/checkpoints/checkpoint-manager.d.ts +94 -0
  12. package/dist/checkpoints/checkpoint-manager.js +280 -0
  13. package/dist/checkpoints/checkpoint-manager.js.map +1 -0
  14. package/dist/checkpoints/file-manager.d.ts +72 -0
  15. package/dist/checkpoints/file-manager.js +294 -0
  16. package/dist/checkpoints/file-manager.js.map +1 -0
  17. package/dist/cli-handlers/api-key.d.ts +25 -0
  18. package/dist/cli-handlers/api-key.js +66 -0
  19. package/dist/cli-handlers/api-key.js.map +1 -0
  20. package/dist/cli-handlers/checkpoint.d.ts +18 -0
  21. package/dist/cli-handlers/checkpoint.js +195 -0
  22. package/dist/cli-handlers/checkpoint.js.map +1 -0
  23. package/dist/cli-handlers/diff.d.ts +2 -0
  24. package/dist/cli-handlers/diff.js +31 -0
  25. package/dist/cli-handlers/diff.js.map +1 -0
  26. package/dist/cli-handlers/easter-egg.d.ts +1 -0
  27. package/dist/cli-handlers/easter-egg.js +126 -0
  28. package/dist/cli-handlers/easter-egg.js.map +1 -0
  29. package/dist/cli-handlers/inititalization-flow.d.ts +1 -0
  30. package/dist/cli-handlers/inititalization-flow.js +24 -0
  31. package/dist/cli-handlers/inititalization-flow.js.map +1 -0
  32. package/dist/cli.d.ts +44 -0
  33. package/dist/cli.js +494 -0
  34. package/dist/cli.js.map +1 -0
  35. package/dist/client.d.ts +151 -0
  36. package/dist/client.js +835 -0
  37. package/dist/client.js.map +1 -0
  38. package/dist/code-map/languages.d.ts +13 -0
  39. package/dist/code-map/languages.d.ts.map +1 -0
  40. package/dist/code-map/languages.js +129 -0
  41. package/dist/code-map/languages.js.map +1 -0
  42. package/dist/code-map/parse.d.ts +12 -0
  43. package/dist/code-map/parse.d.ts.map +1 -0
  44. package/dist/code-map/parse.js +127 -0
  45. package/dist/code-map/parse.js.map +1 -0
  46. package/dist/code-map/test-langs/test.d.ts +12 -0
  47. package/dist/code-map/test-langs/test.d.ts.map +1 -0
  48. package/dist/code-map/test-langs/test.js +23 -0
  49. package/dist/code-map/test-langs/test.js.map +1 -0
  50. package/dist/code-map/tree-sitter-queries/readme.md +23 -0
  51. package/dist/code-map/tree-sitter-queries/tree-sitter-c-tags.scm +11 -0
  52. package/dist/code-map/tree-sitter-queries/tree-sitter-c_sharp-tags.scm +13 -0
  53. package/dist/code-map/tree-sitter-queries/tree-sitter-cpp-tags.scm +17 -0
  54. package/dist/code-map/tree-sitter-queries/tree-sitter-go-tags.scm +26 -0
  55. package/dist/code-map/tree-sitter-queries/tree-sitter-java-tags.scm +19 -0
  56. package/dist/code-map/tree-sitter-queries/tree-sitter-javascript-tags.scm +15 -0
  57. package/dist/code-map/tree-sitter-queries/tree-sitter-php-tags.scm +26 -0
  58. package/dist/code-map/tree-sitter-queries/tree-sitter-python-tags.scm +9 -0
  59. package/dist/code-map/tree-sitter-queries/tree-sitter-ruby-tags.scm +58 -0
  60. package/dist/code-map/tree-sitter-queries/tree-sitter-rust-tags.scm +26 -0
  61. package/dist/code-map/tree-sitter-queries/tree-sitter-typescript-tags.scm +15 -0
  62. package/dist/code-map/tsconfig.tsbuildinfo +1 -0
  63. package/dist/common/actions.d.ts +2592 -0
  64. package/dist/common/actions.js +144 -0
  65. package/dist/common/actions.js.map +1 -0
  66. package/dist/common/analytics.d.ts +4 -0
  67. package/dist/common/analytics.js +40 -0
  68. package/dist/common/analytics.js.map +1 -0
  69. package/dist/common/api-keys/constants.d.ts +8 -0
  70. package/dist/common/api-keys/constants.js +26 -0
  71. package/dist/common/api-keys/constants.js.map +1 -0
  72. package/dist/common/api-keys/crypto.d.ts +24 -0
  73. package/dist/common/api-keys/crypto.js +186 -0
  74. package/dist/common/api-keys/crypto.js.map +1 -0
  75. package/dist/common/browser-actions.d.ts +4415 -0
  76. package/dist/common/browser-actions.js +343 -0
  77. package/dist/common/browser-actions.js.map +1 -0
  78. package/dist/common/constants/analytics-events.d.ts +19 -0
  79. package/dist/common/constants/analytics-events.js +27 -0
  80. package/dist/common/constants/analytics-events.js.map +1 -0
  81. package/dist/common/constants/grant-priorities.d.ts +2 -0
  82. package/dist/common/constants/grant-priorities.js +10 -0
  83. package/dist/common/constants/grant-priorities.js.map +1 -0
  84. package/dist/common/constants/tools.d.ts +17 -0
  85. package/dist/common/constants/tools.js +45 -0
  86. package/dist/common/constants/tools.js.map +1 -0
  87. package/dist/common/constants.d.ts +134 -0
  88. package/dist/common/constants.js +180 -0
  89. package/dist/common/constants.js.map +1 -0
  90. package/dist/common/db/drizzle.config.d.ts +2 -0
  91. package/dist/common/db/drizzle.config.js +17 -0
  92. package/dist/common/db/drizzle.config.js.map +1 -0
  93. package/dist/common/db/env.d.mts +1 -0
  94. package/dist/common/db/env.mjs +26 -0
  95. package/dist/common/db/env.mjs.map +1 -0
  96. package/dist/common/db/index.d.ts +6 -0
  97. package/dist/common/db/index.js +35 -0
  98. package/dist/common/db/index.js.map +1 -0
  99. package/dist/common/db/schema.d.ts +1419 -0
  100. package/dist/common/db/schema.js +175 -0
  101. package/dist/common/db/schema.js.map +1 -0
  102. package/dist/common/db/transaction.d.ts +12 -0
  103. package/dist/common/db/transaction.js +36 -0
  104. package/dist/common/db/transaction.js.map +1 -0
  105. package/dist/common/env.d.mts +1 -0
  106. package/dist/common/env.mjs +40 -0
  107. package/dist/common/env.mjs.map +1 -0
  108. package/dist/common/json-config/__tests__/stringify-schema.test.d.ts +1 -0
  109. package/dist/common/json-config/__tests__/stringify-schema.test.js +66 -0
  110. package/dist/common/json-config/__tests__/stringify-schema.test.js.map +1 -0
  111. package/dist/common/json-config/constants.d.ts +82 -0
  112. package/dist/common/json-config/constants.js +48 -0
  113. package/dist/common/json-config/constants.js.map +1 -0
  114. package/dist/common/json-config/parser.d.ts +7 -0
  115. package/dist/common/json-config/parser.js +51 -0
  116. package/dist/common/json-config/parser.js.map +1 -0
  117. package/dist/common/json-config/stringify-schema.d.ts +9 -0
  118. package/dist/common/json-config/stringify-schema.js +131 -0
  119. package/dist/common/json-config/stringify-schema.js.map +1 -0
  120. package/dist/common/project-file-tree.d.ts +11 -0
  121. package/dist/common/project-file-tree.js +200 -0
  122. package/dist/common/project-file-tree.js.map +1 -0
  123. package/dist/common/types/agent-state.d.ts +464 -0
  124. package/dist/common/types/agent-state.js +32 -0
  125. package/dist/common/types/agent-state.js.map +1 -0
  126. package/dist/common/types/grant.d.ts +2 -0
  127. package/dist/common/types/grant.js +10 -0
  128. package/dist/common/types/grant.js.map +1 -0
  129. package/dist/common/types/message.d.ts +311 -0
  130. package/dist/common/types/message.js +54 -0
  131. package/dist/common/types/message.js.map +1 -0
  132. package/dist/common/types/referral.d.ts +2 -0
  133. package/dist/common/types/referral.js +5 -0
  134. package/dist/common/types/referral.js.map +1 -0
  135. package/dist/common/types/tools.d.ts +5 -0
  136. package/dist/common/types/tools.js +3 -0
  137. package/dist/common/types/tools.js.map +1 -0
  138. package/dist/common/types/usage.d.ts +40 -0
  139. package/dist/common/types/usage.js +15 -0
  140. package/dist/common/types/usage.js.map +1 -0
  141. package/dist/common/util/__tests__/messages.test.d.ts +1 -0
  142. package/dist/common/util/__tests__/messages.test.js +70 -0
  143. package/dist/common/util/__tests__/messages.test.js.map +1 -0
  144. package/dist/common/util/__tests__/saxy.test.d.ts +1 -0
  145. package/dist/common/util/__tests__/saxy.test.js +387 -0
  146. package/dist/common/util/__tests__/saxy.test.js.map +1 -0
  147. package/dist/common/util/__tests__/string.test.d.ts +1 -0
  148. package/dist/common/util/__tests__/string.test.js +82 -0
  149. package/dist/common/util/__tests__/string.test.js.map +1 -0
  150. package/dist/common/util/array.d.ts +6 -0
  151. package/dist/common/util/array.js +32 -0
  152. package/dist/common/util/array.js.map +1 -0
  153. package/dist/common/util/changes.d.ts +7 -0
  154. package/dist/common/util/changes.js +78 -0
  155. package/dist/common/util/changes.js.map +1 -0
  156. package/dist/common/util/credentials.d.ts +25 -0
  157. package/dist/common/util/credentials.js +24 -0
  158. package/dist/common/util/credentials.js.map +1 -0
  159. package/dist/common/util/currency.d.ts +14 -0
  160. package/dist/common/util/currency.js +23 -0
  161. package/dist/common/util/currency.js.map +1 -0
  162. package/dist/common/util/dates.d.ts +10 -0
  163. package/dist/common/util/dates.js +22 -0
  164. package/dist/common/util/dates.js.map +1 -0
  165. package/dist/common/util/file.d.ts +159 -0
  166. package/dist/common/util/file.js +192 -0
  167. package/dist/common/util/file.js.map +1 -0
  168. package/dist/common/util/git.d.ts +6 -0
  169. package/dist/common/util/git.js +81 -0
  170. package/dist/common/util/git.js.map +1 -0
  171. package/dist/common/util/logger.d.ts +8 -0
  172. package/dist/common/util/logger.js +52 -0
  173. package/dist/common/util/logger.js.map +1 -0
  174. package/dist/common/util/lru-cache.d.ts +30 -0
  175. package/dist/common/util/lru-cache.js +68 -0
  176. package/dist/common/util/lru-cache.js.map +1 -0
  177. package/dist/common/util/messages.d.ts +9 -0
  178. package/dist/common/util/messages.js +69 -0
  179. package/dist/common/util/messages.js.map +1 -0
  180. package/dist/common/util/min-heap.d.ts +15 -0
  181. package/dist/common/util/min-heap.js +73 -0
  182. package/dist/common/util/min-heap.js.map +1 -0
  183. package/dist/common/util/object.d.ts +18 -0
  184. package/dist/common/util/object.js +91 -0
  185. package/dist/common/util/object.js.map +1 -0
  186. package/dist/common/util/patch.d.ts +1 -0
  187. package/dist/common/util/patch.js +215 -0
  188. package/dist/common/util/patch.js.map +1 -0
  189. package/dist/common/util/promise.d.ts +17 -0
  190. package/dist/common/util/promise.js +80 -0
  191. package/dist/common/util/promise.js.map +1 -0
  192. package/dist/common/util/referral.d.ts +1 -0
  193. package/dist/common/util/referral.js +6 -0
  194. package/dist/common/util/referral.js.map +1 -0
  195. package/dist/common/util/saxy.d.ts +164 -0
  196. package/dist/common/util/saxy.js +503 -0
  197. package/dist/common/util/saxy.js.map +1 -0
  198. package/dist/common/util/string.d.ts +61 -0
  199. package/dist/common/util/string.js +220 -0
  200. package/dist/common/util/string.js.map +1 -0
  201. package/dist/common/util/stripe.d.ts +3 -0
  202. package/dist/common/util/stripe.js +22 -0
  203. package/dist/common/util/stripe.js.map +1 -0
  204. package/dist/common/util/sync-failure.d.ts +1 -0
  205. package/dist/common/util/sync-failure.js +57 -0
  206. package/dist/common/util/sync-failure.js.map +1 -0
  207. package/dist/common/websockets/websocket-client.d.ts +42 -0
  208. package/dist/common/websockets/websocket-client.js +216 -0
  209. package/dist/common/websockets/websocket-client.js.map +1 -0
  210. package/dist/common/websockets/websocket-schema.d.ts +4876 -0
  211. package/dist/common/websockets/websocket-schema.js +55 -0
  212. package/dist/common/websockets/websocket-schema.js.map +1 -0
  213. package/dist/config.d.ts +4 -0
  214. package/dist/config.js +12 -0
  215. package/dist/config.js.map +1 -0
  216. package/dist/create-template-project.d.ts +1 -0
  217. package/dist/create-template-project.js +107 -0
  218. package/dist/create-template-project.js.map +1 -0
  219. package/dist/credentials.d.ts +4 -0
  220. package/dist/credentials.js +38 -0
  221. package/dist/credentials.js.map +1 -0
  222. package/dist/dev-process-manager.d.ts +10 -0
  223. package/dist/dev-process-manager.js +55 -0
  224. package/dist/dev-process-manager.js.map +1 -0
  225. package/dist/display.d.ts +9 -0
  226. package/dist/display.js +68 -0
  227. package/dist/display.js.map +1 -0
  228. package/dist/fingerprint.d.ts +1 -0
  229. package/dist/fingerprint.js +48 -0
  230. package/dist/fingerprint.js.map +1 -0
  231. package/dist/index.d.ts +2 -0
  232. package/dist/index.js +130 -0
  233. package/dist/index.js.map +1 -0
  234. package/dist/menu.d.ts +3 -0
  235. package/dist/menu.js +170 -0
  236. package/dist/menu.js.map +1 -0
  237. package/dist/project-files.d.ts +129 -0
  238. package/dist/project-files.js +556 -0
  239. package/dist/project-files.js.map +1 -0
  240. package/dist/startup-process-handler.d.ts +2 -0
  241. package/dist/startup-process-handler.js +21 -0
  242. package/dist/startup-process-handler.js.map +1 -0
  243. package/dist/tool-handlers.d.ts +30 -0
  244. package/dist/tool-handlers.js +245 -0
  245. package/dist/tool-handlers.js.map +1 -0
  246. package/dist/types.d.ts +15 -0
  247. package/dist/types.js +3 -0
  248. package/dist/types.js.map +1 -0
  249. package/dist/update-codebuff.d.ts +1 -0
  250. package/dist/update-codebuff.js +161 -0
  251. package/dist/update-codebuff.js.map +1 -0
  252. package/dist/utils/__tests__/background-process-manager.test.d.ts +1 -0
  253. package/dist/utils/__tests__/background-process-manager.test.js +327 -0
  254. package/dist/utils/__tests__/background-process-manager.test.js.map +1 -0
  255. package/dist/utils/__tests__/response-example-4-files.txt +621 -0
  256. package/dist/utils/__tests__/tool-renderers.test.d.ts +1 -0
  257. package/dist/utils/__tests__/tool-renderers.test.js +51 -0
  258. package/dist/utils/__tests__/tool-renderers.test.js.map +1 -0
  259. package/dist/utils/__tests__/xml-stream-parser.test.d.ts +1 -0
  260. package/dist/utils/__tests__/xml-stream-parser.test.js +229 -0
  261. package/dist/utils/__tests__/xml-stream-parser.test.js.map +1 -0
  262. package/dist/utils/analytics.d.ts +6 -0
  263. package/dist/utils/analytics.js +83 -0
  264. package/dist/utils/analytics.js.map +1 -0
  265. package/dist/utils/detect-shell.d.ts +1 -0
  266. package/dist/utils/detect-shell.js +60 -0
  267. package/dist/utils/detect-shell.js.map +1 -0
  268. package/dist/utils/git.d.ts +2 -0
  269. package/dist/utils/git.js +40 -0
  270. package/dist/utils/git.js.map +1 -0
  271. package/dist/utils/logger.d.ts +21 -0
  272. package/dist/utils/logger.js +105 -0
  273. package/dist/utils/logger.js.map +1 -0
  274. package/dist/utils/spinner.d.ts +11 -0
  275. package/dist/utils/spinner.js +87 -0
  276. package/dist/utils/spinner.js.map +1 -0
  277. package/dist/utils/system-info.d.ts +8 -0
  278. package/dist/utils/system-info.js +22 -0
  279. package/dist/utils/system-info.js.map +1 -0
  280. package/dist/utils/terminal.d.ts +43 -0
  281. package/dist/utils/terminal.js +546 -0
  282. package/dist/utils/terminal.js.map +1 -0
  283. package/dist/utils/tool-renderers.d.ts +16 -0
  284. package/dist/utils/tool-renderers.js +163 -0
  285. package/dist/utils/tool-renderers.js.map +1 -0
  286. package/dist/utils/xml-stream-parser.d.ts +9 -0
  287. package/dist/utils/xml-stream-parser.js +128 -0
  288. package/dist/utils/xml-stream-parser.js.map +1 -0
  289. package/dist/web-scraper.d.ts +3 -0
  290. package/dist/web-scraper.js +57 -0
  291. package/dist/web-scraper.js.map +1 -0
  292. package/dist/workers/checkpoint-worker.d.ts +1 -0
  293. package/dist/workers/checkpoint-worker.js +48 -0
  294. package/dist/workers/checkpoint-worker.js.map +1 -0
  295. package/dist/workers/project-context.d.ts +1 -0
  296. package/dist/workers/project-context.js +20 -0
  297. package/dist/workers/project-context.js.map +1 -0
  298. package/package.json +69 -22
  299. package/bin/launcher.js +0 -21
  300. package/scripts/postinstall.js +0 -100
@@ -0,0 +1,503 @@
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 string_decoder_1 = require("string_decoder");
8
+ const readable_stream_1 = require("readable-stream");
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
+ parts.push(input.slice(next));
41
+ break;
42
+ }
43
+ const entity = input.slice(next + 1, end);
44
+ if (entity === 'quot') {
45
+ parts.push('"');
46
+ }
47
+ else if (entity === 'amp') {
48
+ parts.push('&');
49
+ }
50
+ else if (entity === 'apos') {
51
+ parts.push("'");
52
+ }
53
+ else if (entity === 'lt') {
54
+ parts.push('<');
55
+ }
56
+ else if (entity === 'gt') {
57
+ parts.push('>');
58
+ }
59
+ else {
60
+ // ignore unrecognized character entities
61
+ if (entity[0] !== '#') {
62
+ parts.push('&' + entity + ';');
63
+ }
64
+ else {
65
+ // hexadecimal numeric entities
66
+ if (entity[1] === 'x') {
67
+ const value = parseInt(entity.slice(2), 16);
68
+ // ignore non-numeric numeric entities
69
+ if (isNaN(value)) {
70
+ parts.push('&' + entity + ';');
71
+ }
72
+ else {
73
+ parts.push(String.fromCharCode(value));
74
+ }
75
+ }
76
+ else {
77
+ // decimal numeric entities
78
+ const value = parseInt(entity.slice(1), 10);
79
+ // ignore non-numeric numeric entities
80
+ if (isNaN(value)) {
81
+ parts.push('&' + entity + ';');
82
+ }
83
+ else {
84
+ parts.push(String.fromCharCode(value));
85
+ }
86
+ }
87
+ }
88
+ }
89
+ position = end + 1;
90
+ }
91
+ if (position < input.length) {
92
+ parts.push(input.slice(position));
93
+ }
94
+ return parts.join('');
95
+ };
96
+ /**
97
+ * Parse a string of XML attributes to a map of attribute names to their values.
98
+ *
99
+ * @param input A string of XML attributes
100
+ * @throws If the string is malformed
101
+ * @return A map of attribute names to their values
102
+ */
103
+ const parseAttrs = (input) => {
104
+ const attrs = {};
105
+ const end = input.length;
106
+ let position = 0;
107
+ while (position < end) {
108
+ // Skip all whitespace
109
+ if ((0, string_1.isWhitespace)(input[position])) {
110
+ position += 1;
111
+ continue;
112
+ }
113
+ // Check that the attribute name contains valid chars
114
+ const startName = position;
115
+ while (input[position] !== '=' && position < end) {
116
+ if ((0, string_1.isWhitespace)(input[position])) {
117
+ throw new Error('Attribute names may not contain whitespace');
118
+ }
119
+ position += 1;
120
+ }
121
+ // This is XML, so we need a value for the attribute
122
+ if (position === end) {
123
+ throw new Error('Expected a value for the attribute');
124
+ }
125
+ const attrName = input.slice(startName, position);
126
+ position += 1;
127
+ const startQuote = input[position];
128
+ position += 1;
129
+ if (startQuote !== '"' && startQuote !== "'") {
130
+ throw new Error('Attribute values should be quoted');
131
+ }
132
+ const endQuote = input.indexOf(startQuote, position);
133
+ if (endQuote === -1) {
134
+ throw new Error('Unclosed attribute value');
135
+ }
136
+ const attrValue = input.slice(position, endQuote);
137
+ attrs[attrName] = attrValue;
138
+ position = endQuote + 1;
139
+ }
140
+ return attrs;
141
+ };
142
+ exports.parseAttrs = parseAttrs;
143
+ /**
144
+ * Find the first character in a string that matches a predicate
145
+ * while being outside the given delimiters.
146
+ *
147
+ * @param haystack String to search in
148
+ * @param predicate Checks whether a character is permissible
149
+ * @param [delim=''] Delimiter inside which no match should be
150
+ * returned. If empty, all characters are considered.
151
+ * @param [fromIndex=0] Start the search from this index
152
+ * @return Index of the first match, or -1 if no match
153
+ */
154
+ const findIndexOutside = (haystack, predicate, delim = '', fromIndex = 0) => {
155
+ const length = haystack.length;
156
+ let index = fromIndex;
157
+ let inDelim = false;
158
+ while (index < length && (inDelim || !predicate(haystack[index]))) {
159
+ if (haystack[index] === delim) {
160
+ inDelim = !inDelim;
161
+ }
162
+ ++index;
163
+ }
164
+ return index === length ? -1 : index;
165
+ };
166
+ /**
167
+ * Parse an XML stream and emit events corresponding
168
+ * to the different tokens encountered.
169
+ */
170
+ class Saxy extends readable_stream_1.Transform {
171
+ _decoder;
172
+ _tagStack;
173
+ _waiting;
174
+ _schema;
175
+ _pendingEntity;
176
+ /**
177
+ * Parse a string of XML attributes to a map of attribute names
178
+ * to their values
179
+ *
180
+ * @param input A string of XML attributes
181
+ * @throws If the string is malformed
182
+ * @return A map of attribute names to their values
183
+ */
184
+ static parseAttrs = exports.parseAttrs;
185
+ /**
186
+ * Expand a piece of XML text by replacing all XML entities
187
+ * by their canonical value. Ignore invalid and unknown
188
+ * entities
189
+ *
190
+ * @param input A string of XML text
191
+ * @return The input string, expanded
192
+ */
193
+ static parseEntities = parseEntities;
194
+ /**
195
+ * Create a new parser instance.
196
+ * @param schema Optional schema defining allowed top-level tags and their children
197
+ */
198
+ constructor(schema) {
199
+ super({ decodeStrings: false });
200
+ // String decoder instance
201
+ const state = this._writableState;
202
+ this._decoder = new string_decoder_1.StringDecoder(state.defaultEncoding);
203
+ // Stack of tags that were opened up until the current cursor position
204
+ this._tagStack = [];
205
+ // Not waiting initially
206
+ this._waiting = null;
207
+ // Store schema if provided
208
+ this._schema = schema || null;
209
+ // Pending entity for incomplete entities
210
+ this._pendingEntity = null;
211
+ }
212
+ /**
213
+ * Handle a chunk of data written into the stream.
214
+ *
215
+ * @param chunk Chunk of data.
216
+ * @param encoding Encoding of the string, or 'buffer'.
217
+ * @param callback Called when the chunk has been parsed, with
218
+ * an optional error argument.
219
+ */
220
+ _write(chunk, encoding, callback) {
221
+ const data = encoding === 'buffer'
222
+ ? this._decoder.write(chunk)
223
+ : chunk;
224
+ this._parseChunk(data, callback);
225
+ }
226
+ /**
227
+ * Handle the end of incoming data.
228
+ *
229
+ * @param callback
230
+ */
231
+ _final(callback) {
232
+ // Make sure all data has been extracted from the decoder
233
+ this._parseChunk(this._decoder.end(), (err) => {
234
+ if (err) {
235
+ callback(err);
236
+ return;
237
+ }
238
+ // Handle any remaining pending entity
239
+ if (this._pendingEntity) {
240
+ this.emit(Node.text, { contents: this._pendingEntity });
241
+ }
242
+ // Handle unclosed nodes
243
+ if (this._waiting !== null) {
244
+ switch (this._waiting.token) {
245
+ case Node.text:
246
+ // Text nodes are implicitly closed
247
+ this.emit('text', { contents: this._waiting.data });
248
+ break;
249
+ case Node.cdata:
250
+ callback(new Error('Unclosed CDATA section'));
251
+ return;
252
+ case Node.comment:
253
+ callback(new Error('Unclosed comment'));
254
+ return;
255
+ case Node.processingInstruction:
256
+ callback(new Error('Unclosed processing instruction'));
257
+ return;
258
+ case Node.tagOpen:
259
+ case Node.tagClose:
260
+ // We do not distinguish between unclosed opening
261
+ // or unclosed closing tags
262
+ // callback(new Error('Unclosed tag'))
263
+ return;
264
+ default:
265
+ // Pass
266
+ }
267
+ }
268
+ if (this._tagStack.length !== 0) {
269
+ // callback(new Error(`Unclosed tags: ${this._tagStack.join(',')}`))
270
+ return;
271
+ }
272
+ callback();
273
+ });
274
+ }
275
+ /**
276
+ * Immediately parse a complete chunk of XML and close the stream.
277
+ *
278
+ * @param input Input chunk.
279
+ */
280
+ parse(input) {
281
+ this.end(input);
282
+ return this;
283
+ }
284
+ /**
285
+ * Put the stream into waiting mode, which means we need more data
286
+ * to finish parsing the current token.
287
+ *
288
+ * @param token Type of token that is being parsed.
289
+ * @param data Pending data.
290
+ */
291
+ _wait(token, data) {
292
+ this._waiting = { token, data };
293
+ }
294
+ /**
295
+ * Put the stream out of waiting mode.
296
+ *
297
+ * @return Any data that was pending.
298
+ */
299
+ _unwait() {
300
+ if (this._waiting === null) {
301
+ return '';
302
+ }
303
+ const data = this._waiting.data;
304
+ this._waiting = null;
305
+ return data;
306
+ }
307
+ /**
308
+ * Handle the opening of a tag in the text stream.
309
+ *
310
+ * Push the tag into the opened tag stack and emit the
311
+ * corresponding event on the event emitter.
312
+ *
313
+ * @param node Information about the opened tag.
314
+ * @param rawTag The raw tag text including angle brackets
315
+ */
316
+ _handleTagOpening(node, rawTag) {
317
+ const { name } = node;
318
+ // If we have a schema, validate against it
319
+ if (this._schema) {
320
+ // For top-level tags
321
+ if (this._tagStack.length === 0) {
322
+ // Convert to text if not in schema
323
+ if (!this._schema[name]) {
324
+ this.emit(Node.text, { contents: rawTag });
325
+ return;
326
+ }
327
+ }
328
+ // For nested tags
329
+ else {
330
+ const parentTag = this._tagStack[this._tagStack.length - 1];
331
+ // Convert to text if parent not in schema or this tag not allowed as child
332
+ if (!this._schema[parentTag] ||
333
+ !this._schema[parentTag].includes(name)) {
334
+ this.emit(Node.text, { contents: rawTag });
335
+ return;
336
+ }
337
+ }
338
+ }
339
+ if (!node.isSelfClosing) {
340
+ this._tagStack.push(node.name);
341
+ }
342
+ this.emit(Node.tagOpen, node);
343
+ }
344
+ /**
345
+ * Parse a XML chunk.
346
+ *
347
+ * @private
348
+ * @param input A string with the chunk data.
349
+ * @param callback Called when the chunk has been parsed, with
350
+ * an optional error argument.
351
+ */
352
+ _parseChunk(input, callback) {
353
+ // Handle pending entity if exists
354
+ if (this._pendingEntity) {
355
+ input = this._pendingEntity + input;
356
+ this._pendingEntity = null;
357
+ }
358
+ // Use pending data if applicable and get out of waiting mode
359
+ const waitingData = this._unwait();
360
+ input = waitingData + input;
361
+ let chunkPos = 0;
362
+ const end = input.length;
363
+ while (chunkPos < end) {
364
+ if (input[chunkPos] !== '<' ||
365
+ (chunkPos + 1 < end && !this._isXMLTagStart(input, chunkPos + 1))) {
366
+ // Find next potential tag, but verify it's actually a tag
367
+ let nextTag = input.indexOf('<', chunkPos);
368
+ while (nextTag !== -1 &&
369
+ nextTag + 1 < end &&
370
+ !this._isXMLTagStart(input, nextTag + 1)) {
371
+ nextTag = input.indexOf('<', nextTag + 1);
372
+ }
373
+ // We read a TEXT node but there might be some
374
+ // more text data left, so we wait
375
+ if (nextTag === -1) {
376
+ let chunk = input.slice(chunkPos);
377
+ if (this._tagStack.length === 1 && chunk === '\n') {
378
+ chunk = '';
379
+ }
380
+ // Check for incomplete entity at end
381
+ const lastAmp = chunk.lastIndexOf('&');
382
+ if (lastAmp !== -1 && chunk.indexOf(';', lastAmp) === -1) {
383
+ // Store incomplete entity for next chunk
384
+ this._pendingEntity = chunk.slice(lastAmp);
385
+ chunk = chunk.slice(0, lastAmp);
386
+ }
387
+ if (chunk.length > 0) {
388
+ chunk = parseEntities(chunk);
389
+ this.emit(Node.text, { contents: chunk });
390
+ }
391
+ chunkPos = end;
392
+ break;
393
+ }
394
+ // A tag follows, so we can be confident that
395
+ // we have all the data needed for the TEXT node
396
+ let chunk = input.slice(chunkPos, nextTag);
397
+ if (this._tagStack.length === 1 && chunk === '\n') {
398
+ chunk = '';
399
+ }
400
+ // Check for incomplete entity at end
401
+ const lastAmp = chunk.lastIndexOf('&');
402
+ if (lastAmp !== -1 && chunk.indexOf(';', lastAmp) === -1) {
403
+ // Store incomplete entity for next chunk
404
+ this._pendingEntity = chunk.slice(lastAmp);
405
+ chunk = chunk.slice(0, lastAmp);
406
+ }
407
+ // Only emit non-whitespace text or text within a single tag (not between tags)
408
+ if (chunk.length > 0) {
409
+ chunk = parseEntities(chunk);
410
+ this.emit(Node.text, { contents: chunk });
411
+ }
412
+ chunkPos = nextTag;
413
+ }
414
+ // Invariant: the cursor now points on the name of a tag,
415
+ // after an opening angled bracket
416
+ chunkPos += 1;
417
+ // Recognize regular tags (< ... >)
418
+ const tagClose = findIndexOutside(input, (char) => char === '>', '"', chunkPos);
419
+ if (tagClose === -1) {
420
+ this._wait(Node.tagOpen, input.slice(chunkPos - 1));
421
+ break;
422
+ }
423
+ // Check if the tag is a closing tag
424
+ if (input[chunkPos] === '/') {
425
+ const tagName = input.slice(chunkPos + 1, tagClose);
426
+ const stackedTagName = this._tagStack[this._tagStack.length - 1];
427
+ // Convert closing tag to text if it doesn't match schema validation
428
+ if (this._schema) {
429
+ // For top-level tags
430
+ if (this._tagStack.length === 1) {
431
+ if (!this._schema[tagName]) {
432
+ const rawTag = input.slice(chunkPos - 1, tagClose + 1);
433
+ this.emit(Node.text, { contents: rawTag });
434
+ chunkPos = tagClose + 1;
435
+ continue;
436
+ }
437
+ }
438
+ // For nested tags
439
+ else {
440
+ const parentTag = this._tagStack[this._tagStack.length - 2];
441
+ if (!this._schema[parentTag] ||
442
+ !this._schema[parentTag].includes(tagName)) {
443
+ const rawTag = input.slice(chunkPos - 1, tagClose + 1);
444
+ this.emit(Node.text, { contents: rawTag });
445
+ chunkPos = tagClose + 1;
446
+ continue;
447
+ }
448
+ }
449
+ }
450
+ this._tagStack.pop();
451
+ // Only emit if the tag matches what we expect
452
+ if (stackedTagName === tagName) {
453
+ this.emit(Node.tagClose, { name: tagName });
454
+ }
455
+ chunkPos = tagClose + 1;
456
+ continue;
457
+ }
458
+ // Check if the tag is self-closing
459
+ const isSelfClosing = input[tagClose - 1] === '/';
460
+ let realTagClose = isSelfClosing ? tagClose - 1 : tagClose;
461
+ // Extract the tag name and attributes
462
+ const whitespace = input.slice(chunkPos).search(/\s/);
463
+ // Get the raw tag text for potential text node conversion
464
+ const rawTag = input.slice(chunkPos - 1, tagClose + 1);
465
+ if (whitespace === -1 || whitespace >= tagClose - chunkPos) {
466
+ // Tag without any attribute
467
+ this._handleTagOpening({
468
+ name: input.slice(chunkPos, realTagClose),
469
+ attrs: '',
470
+ isSelfClosing,
471
+ }, rawTag);
472
+ }
473
+ else if (whitespace === 0) {
474
+ // Invalid tag starting with whitespace - emit as text
475
+ this.emit(Node.text, { contents: rawTag });
476
+ }
477
+ else {
478
+ // Tag with attributes
479
+ this._handleTagOpening({
480
+ name: input.slice(chunkPos, chunkPos + whitespace),
481
+ attrs: input.slice(chunkPos + whitespace, realTagClose),
482
+ isSelfClosing,
483
+ }, rawTag);
484
+ }
485
+ chunkPos = tagClose + 1;
486
+ }
487
+ callback();
488
+ }
489
+ /**
490
+ * Check if a potential XML tag start is actually a valid tag
491
+ * @param input The input string
492
+ * @param pos Position after the < character
493
+ * @returns true if this is a valid XML tag start
494
+ */
495
+ _isXMLTagStart(input, pos) {
496
+ // Valid XML tags must start with a letter, underscore or colon
497
+ // https://www.w3.org/TR/xml/#NT-NameStartChar
498
+ const firstChar = input[pos];
499
+ return /[A-Za-z_:]/.test(firstChar) || firstChar === '/';
500
+ }
501
+ }
502
+ exports.Saxy = Saxy;
503
+ //# 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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"}
@@ -0,0 +1,61 @@
1
+ export declare const truncateString: (str: string, maxLength: number) => string;
2
+ export declare const truncateStringWithMessage: ({ str, maxLength, message, remove, }: {
3
+ str: string;
4
+ maxLength: number;
5
+ message?: string;
6
+ remove?: "END" | "START" | "MIDDLE";
7
+ }) => string;
8
+ /**
9
+ * Check if a character is a whitespace character according
10
+ * to the XML spec (space, carriage return, line feed or tab)
11
+ *
12
+ * @param character Character to check
13
+ * @return Whether the character is whitespace or not
14
+ */
15
+ export declare const isWhitespace: (character: string) => boolean;
16
+ export declare const replaceNonStandardPlaceholderComments: (content: string, replacement: string) => string;
17
+ export declare const randBoolFromStr: (str: string) => boolean;
18
+ export declare const pluralize: (count: number, word: string) => string;
19
+ /**
20
+ * Safely replaces all occurrences of a search string with a replacement string,
21
+ * escaping special replacement patterns (like $) in the replacement string.
22
+ */
23
+ export declare const capitalize: (str: string) => string;
24
+ /**
25
+ * Converts a snake_case string to Title Case
26
+ * Example: "add_subgoal" -> "Add Subgoal"
27
+ */
28
+ export declare const snakeToTitleCase: (str: string) => string;
29
+ /**
30
+ * Ensures a URL has the appropriate protocol (http:// or https://)
31
+ * Uses http:// for localhost and local IPs, https:// for all other domains
32
+ */
33
+ export declare const ensureUrlProtocol: (url: string) => string;
34
+ export declare const safeReplace: (content: string, searchStr: string, replaceStr: string) => string;
35
+ export declare const hasLazyEdit: (content: string) => boolean;
36
+ /**
37
+ * Extracts a JSON field from a string, transforms it, and puts it back.
38
+ * Handles both array and object JSON values.
39
+ * @param content The string containing JSON-like content
40
+ * @param field The field name to find and transform
41
+ * @param transform Function to transform the parsed JSON value
42
+ * @param fallback String to use if parsing fails
43
+ * @returns The content string with the transformed JSON field
44
+ */
45
+ export declare const transformJsonInString: <T = unknown>(content: string, field: string, transform: (json: T) => unknown, fallback: string) => string;
46
+ /**
47
+ * Generates a compact unique identifier by combining timestamp bits with random bits.
48
+ * Takes last 24 bits of timestamp (enough for months) and 8 random bits.
49
+ * Encodes in base36 for very compact strings (~5-6 chars).
50
+ * @param prefix Optional prefix to add to the ID
51
+ * @returns A unique string ID
52
+ * @example
53
+ * generateCompactId() // => "1a2b3c"
54
+ * generateCompactId('msg-') // => "msg-1a2b3c"
55
+ */
56
+ export declare const generateCompactId: (prefix?: string) => string;
57
+ /**
58
+ * Removes null characters from a string
59
+ */
60
+ export declare const stripNullChars: (str: string) => string;
61
+ export declare function stripColors(str: string): string;