@xano/xanoscript-language-server 11.12.1 → 11.12.3

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 (339) hide show
  1. package/lexer/tokens.js +22 -3
  2. package/package.json +25 -1
  3. package/.claude/memory/feedback_no_git.md +0 -11
  4. package/.claude/settings.local.json +0 -21
  5. package/.github/copilot-instructions.md +0 -190
  6. package/.github/workflows/ci.yml +0 -31
  7. package/.husky/pre-commit +0 -1
  8. package/CLAUDE.md +0 -256
  9. package/eslint.config.js +0 -24
  10. package/lexer/comment.spec.js +0 -77
  11. package/lexer/multiline.spec.js +0 -179
  12. package/lexer/tests/query/query_lexer.spec.js +0 -36
  13. package/lexer/tests/query/valid_sources/basic_query.xs +0 -44
  14. package/lexer/tests/query/valid_sources/db_query.xs +0 -77
  15. package/lexer/tests/query/valid_sources/empty_query.xs +0 -5
  16. package/lexer/tests/query/valid_sources/header_query.xs +0 -15
  17. package/lexer/tests/table/basic_table.xs +0 -17
  18. package/lexer/tests/table/empty_table.xs +0 -3
  19. package/lexer/tests/table/table_lexer.spec.js +0 -324
  20. package/lexer/utils.spec.js +0 -61
  21. package/onCompletion/contentAssist.spec.js +0 -275
  22. package/onDefinition/onDefinition.spec.js +0 -313
  23. package/onHover/FilterMessageProvider.spec.js +0 -85
  24. package/onHover/FunctionMessageProvider.spec.js +0 -128
  25. package/onHover/InputFilterMessageProvider.spec.js +0 -329
  26. package/onHover/QueryFilterMessageProvider.spec.js +0 -164
  27. package/onHover/onHoverDocument.spec.js +0 -660
  28. package/parser/addon_parser.spec.js +0 -88
  29. package/parser/agent_parser.spec.js +0 -599
  30. package/parser/agent_trigger_parser.spec.js +0 -525
  31. package/parser/api_group_parser.spec.js +0 -137
  32. package/parser/attributes/columnDefaultValueAttribute.spec.js +0 -49
  33. package/parser/attributes/descriptionFieldAttribute.spec.js +0 -39
  34. package/parser/attributes/disabledFieldAttribute.spec.js +0 -34
  35. package/parser/attributes/docsFieldAttribute.spec.js +0 -44
  36. package/parser/attributes/guidFieldAttribute.spec.js +0 -93
  37. package/parser/attributes/inputFilterFn.spec.js +0 -39
  38. package/parser/attributes/sensitiveFieldAttribute.spec.js +0 -39
  39. package/parser/attributes/valueFieldAttribute.spec.js +0 -54
  40. package/parser/attributes/valuesFieldAttribute.spec.js +0 -44
  41. package/parser/attributes/visibilityFieldAttribute.spec.js +0 -44
  42. package/parser/branch_parser.spec.js +0 -34
  43. package/parser/clauses/agentClause.spec.js +0 -34
  44. package/parser/clauses/authClause.spec.js +0 -39
  45. package/parser/clauses/cacheClause.spec.js +0 -103
  46. package/parser/clauses/canonicalClause.spec.js +0 -34
  47. package/parser/clauses/channelClause.spec.js +0 -34
  48. package/parser/clauses/dbTableClause.spec.js +0 -34
  49. package/parser/clauses/historyClause.spec.js +0 -53
  50. package/parser/clauses/indexClause.spec.js +0 -47
  51. package/parser/clauses/inputClause.spec.js +0 -96
  52. package/parser/clauses/mcpServerClause.spec.js +0 -34
  53. package/parser/clauses/middlewareClause.spec.js +0 -161
  54. package/parser/clauses/nakedStackFn.spec.js +0 -73
  55. package/parser/clauses/responseClause.spec.js +0 -47
  56. package/parser/clauses/scheduleClause.spec.js +0 -71
  57. package/parser/clauses/schemaClause.spec.js +0 -102
  58. package/parser/clauses/testClause.spec.js +0 -69
  59. package/parser/clauses/viewClause.spec.js +0 -163
  60. package/parser/definitions/arraySlice.spec.js +0 -49
  61. package/parser/definitions/columnDefinition.spec.js +0 -199
  62. package/parser/definitions/dbLinkColumnDefinition.spec.js +0 -45
  63. package/parser/definitions/enumColumnDefinition.spec.js +0 -108
  64. package/parser/definitions/filterDefinition.spec.js +0 -43
  65. package/parser/definitions/objectColumnDefinition.spec.js +0 -118
  66. package/parser/function_parser.spec.js +0 -131
  67. package/parser/functions/actionCallFn.spec.js +0 -51
  68. package/parser/functions/addonCallFn.spec.js +0 -41
  69. package/parser/functions/ai/aiAgentRunFn.spec.js +0 -94
  70. package/parser/functions/ai/aiExternalMcpServerDetailsFn.spec.js +0 -85
  71. package/parser/functions/ai/aiExternalMcpToolListFn.spec.js +0 -85
  72. package/parser/functions/ai/aiExternalMcpToolRunFn.spec.js +0 -101
  73. package/parser/functions/aiFn.spec.js +0 -51
  74. package/parser/functions/api/apiCallFn.spec.js +0 -62
  75. package/parser/functions/api/apiLambdaFn.spec.js +0 -63
  76. package/parser/functions/api/apiRealtimeEventFn.spec.js +0 -82
  77. package/parser/functions/api/apiRequestFn.spec.js +0 -113
  78. package/parser/functions/api/apiStreamFn.spec.js +0 -44
  79. package/parser/functions/api/webflowRequestFn.spec.js +0 -114
  80. package/parser/functions/array/arrayDifferenceFn.spec.js +0 -34
  81. package/parser/functions/array/arrayFindFn.spec.js +0 -44
  82. package/parser/functions/array/arrayGroupByFn.spec.js +0 -41
  83. package/parser/functions/array/arrayIntersectionFn.spec.js +0 -22
  84. package/parser/functions/array/arrayMapFn.spec.js +0 -37
  85. package/parser/functions/array/arrayNoValueAs.spec.js +0 -56
  86. package/parser/functions/array/arrayPartitionFn.spec.js +0 -29
  87. package/parser/functions/array/arrayUnionFn.spec.js +0 -22
  88. package/parser/functions/array/arrayValueIfAs.spec.js +0 -54
  89. package/parser/functions/array/arrayValueOnly.spec.js +0 -61
  90. package/parser/functions/array/valueAttrOnly.spec.js +0 -61
  91. package/parser/functions/cloud/cloudAlgoliaRequestFn.spec.js +0 -30
  92. package/parser/functions/cloud/cloudAwsS3Fn.spec.js +0 -21
  93. package/parser/functions/cloud/cloudDeleteFileFn.spec.js +0 -25
  94. package/parser/functions/cloud/cloudGetFileInfoFn.spec.js +0 -25
  95. package/parser/functions/cloud/cloudListDirectoryFn.spec.js +0 -26
  96. package/parser/functions/cloud/cloudReadFileFn.spec.js +0 -25
  97. package/parser/functions/cloud/cloudSearchDocumentFn.spec.js +0 -28
  98. package/parser/functions/cloud/cloudSearchQueryFn.spec.js +0 -32
  99. package/parser/functions/cloud/cloudSearchRequestFn.spec.js +0 -32
  100. package/parser/functions/cloud/cloudSignUrlFn.spec.js +0 -26
  101. package/parser/functions/cloud/cloudStorageFn.spec.js +0 -21
  102. package/parser/functions/cloud/cloudUploadFileFn.spec.js +0 -29
  103. package/parser/functions/controls/awaitFn.spec.js +0 -48
  104. package/parser/functions/controls/conditionalFn.spec.js +0 -188
  105. package/parser/functions/controls/forEachFn.spec.js +0 -109
  106. package/parser/functions/controls/forFn.spec.js +0 -85
  107. package/parser/functions/controls/functionRunFn.spec.js +0 -77
  108. package/parser/functions/controls/groupFn.spec.js +0 -63
  109. package/parser/functions/controls/preconditionFn.spec.js +0 -107
  110. package/parser/functions/controls/returnFn.spec.js +0 -44
  111. package/parser/functions/controls/switchFn.spec.js +0 -118
  112. package/parser/functions/controls/throwFn.spec.js +0 -56
  113. package/parser/functions/controls/tryCatchFn.spec.js +0 -193
  114. package/parser/functions/controls/whileFn.spec.js +0 -94
  115. package/parser/functions/db/dbAddFn.spec.js +0 -72
  116. package/parser/functions/db/dbAddOrEditFn.spec.js +0 -97
  117. package/parser/functions/db/dbBulkAddFn.spec.js +0 -94
  118. package/parser/functions/db/dbBulkDeleteFn.spec.js +0 -28
  119. package/parser/functions/db/dbBulkPatchFn.spec.js +0 -42
  120. package/parser/functions/db/dbBulkUpdateFn.spec.js +0 -42
  121. package/parser/functions/db/dbDelFn.spec.js +0 -67
  122. package/parser/functions/db/dbDirectQueryFn.spec.js +0 -104
  123. package/parser/functions/db/dbEditFn.spec.js +0 -122
  124. package/parser/functions/db/dbExternalDirectQueryFn.spec.js +0 -103
  125. package/parser/functions/db/dbGetFn.spec.js +0 -117
  126. package/parser/functions/db/dbHasFn.spec.js +0 -62
  127. package/parser/functions/db/dbPatchFn.spec.js +0 -88
  128. package/parser/functions/db/dbQueryFn.spec.js +0 -380
  129. package/parser/functions/db/dbSchemaFn.spec.js +0 -42
  130. package/parser/functions/db/dbSetDatasourceFn.spec.js +0 -44
  131. package/parser/functions/db/dbTransactionFn.spec.js +0 -63
  132. package/parser/functions/db/dbTruncateFn.spec.js +0 -42
  133. package/parser/functions/debug/debugLogFn.spec.js +0 -44
  134. package/parser/functions/debug/debugStopFn.spec.js +0 -44
  135. package/parser/functions/expect/unitExpectToBeWithinFn.spec.js +0 -63
  136. package/parser/functions/expect/unitExpectToThrowFn.spec.js +0 -40
  137. package/parser/functions/expect/unitExpectWithArgumentsFn.spec.js +0 -355
  138. package/parser/functions/expect/unitExpectWithoutArgumentsFn.spec.js +0 -69
  139. package/parser/functions/expect/workflowExpectToBeWithinFn.spec.js +0 -70
  140. package/parser/functions/expect/workflowExpectToThrowFn.spec.js +0 -56
  141. package/parser/functions/expect/workflowExpectWithArgumentsFn.spec.js +0 -308
  142. package/parser/functions/expect/workflowExpectWithoutArgumentsFn.spec.js +0 -87
  143. package/parser/functions/math/allMathFn.spec.js +0 -100
  144. package/parser/functions/middlewareCallFn.spec.js +0 -44
  145. package/parser/functions/object/objectEntriesFn.spec.js +0 -44
  146. package/parser/functions/object/objectKeysFn.spec.js +0 -44
  147. package/parser/functions/object/objectValuesFn.spec.js +0 -44
  148. package/parser/functions/redis/redisCountFn.spec.js +0 -58
  149. package/parser/functions/redis/redisDecrFn.spec.js +0 -47
  150. package/parser/functions/redis/redisDelFn.spec.js +0 -58
  151. package/parser/functions/redis/redisGetFn.spec.js +0 -67
  152. package/parser/functions/redis/redisHasFn.spec.js +0 -58
  153. package/parser/functions/redis/redisIncrFn.spec.js +0 -74
  154. package/parser/functions/redis/redisKeysFn.spec.js +0 -67
  155. package/parser/functions/redis/redisPopFn.spec.js +0 -75
  156. package/parser/functions/redis/redisPushFn.spec.js +0 -71
  157. package/parser/functions/redis/redisRangeFn.spec.js +0 -80
  158. package/parser/functions/redis/redisRateLimitFn.spec.js +0 -87
  159. package/parser/functions/redis/redisRemoveFn.spec.js +0 -65
  160. package/parser/functions/redis/redisSetFn.spec.js +0 -89
  161. package/parser/functions/redis/redisShiftFn.spec.js +0 -75
  162. package/parser/functions/redis/redisUnshiftFn.spec.js +0 -73
  163. package/parser/functions/schema/schemaFn.spec.js +0 -92
  164. package/parser/functions/schema/schemaParseArrayFn.spec.js +0 -134
  165. package/parser/functions/schema/schemaParseAttributeFn.spec.js +0 -285
  166. package/parser/functions/schema/schemaParseConstantFn.spec.js +0 -122
  167. package/parser/functions/schema/schemaParseEnum.spec.js +0 -47
  168. package/parser/functions/schema/schemaParseImmutableFn.spec.js +0 -99
  169. package/parser/functions/schema/schemaParseObjectFn.spec.js +0 -223
  170. package/parser/functions/schema/utils.spec.js +0 -27
  171. package/parser/functions/security/securityCheckPasswordFn.spec.js +0 -22
  172. package/parser/functions/security/securityCreateAuthTokenFn.spec.js +0 -51
  173. package/parser/functions/security/securityCreateCurveKeyFn.spec.js +0 -22
  174. package/parser/functions/security/securityCreatePasswordFn.spec.js +0 -26
  175. package/parser/functions/security/securityCreateRsaKeyFn.spec.js +0 -22
  176. package/parser/functions/security/securityCreateSecretKeyFn.spec.js +0 -22
  177. package/parser/functions/security/securityCreateUuidFn.spec.js +0 -27
  178. package/parser/functions/security/securityDecryptFn.spec.js +0 -24
  179. package/parser/functions/security/securityEncryptFn.spec.js +0 -24
  180. package/parser/functions/security/securityJweDecodeFn.spec.js +0 -26
  181. package/parser/functions/security/securityJweDecodeLegacyFn.spec.js +0 -26
  182. package/parser/functions/security/securityJweEncodeFn.spec.js +0 -26
  183. package/parser/functions/security/securityJweEncodeLegacyFn.spec.js +0 -25
  184. package/parser/functions/security/securityJwsDecodeFn.spec.js +0 -25
  185. package/parser/functions/security/securityJwsEncodeFn.spec.js +0 -25
  186. package/parser/functions/security/securityRandomBytesFn.spec.js +0 -21
  187. package/parser/functions/security/securityRandomNumberFn.spec.js +0 -22
  188. package/parser/functions/storage/storageCreateAttachmentFn.spec.js +0 -87
  189. package/parser/functions/storage/storageCreateAudioFn.spec.js +0 -98
  190. package/parser/functions/storage/storageCreateFileResourceFn.spec.js +0 -72
  191. package/parser/functions/storage/storageCreateImageFn.spec.js +0 -98
  192. package/parser/functions/storage/storageCreateVideoFn.spec.js +0 -99
  193. package/parser/functions/storage/storageDeleteFileFn.spec.js +0 -67
  194. package/parser/functions/storage/storageReadFileResourceFn.spec.js +0 -60
  195. package/parser/functions/storage/storageSignPrivateUrlFn.spec.js +0 -72
  196. package/parser/functions/stream/streamFromCsvFn.spec.js +0 -69
  197. package/parser/functions/stream/streamFromJsonlFn.spec.js +0 -47
  198. package/parser/functions/stream/streamFromRequestFn.spec.js +0 -103
  199. package/parser/functions/text/allTextWithReturnValueFn.spec.js +0 -100
  200. package/parser/functions/text/allTextWithoutReturnValueFn.spec.js +0 -122
  201. package/parser/functions/toolCallFn.spec.js +0 -28
  202. package/parser/functions/triggerCallFn.spec.js +0 -51
  203. package/parser/functions/unitExpectFn.spec.js +0 -21
  204. package/parser/functions/util/utilGeoDistanceFn.spec.js +0 -79
  205. package/parser/functions/util/utilGetAllInputFn.spec.js +0 -33
  206. package/parser/functions/util/utilGetEnvFn.spec.js +0 -33
  207. package/parser/functions/util/utilGetRawInputFn.spec.js +0 -62
  208. package/parser/functions/util/utilGetVarsFn.spec.js +0 -33
  209. package/parser/functions/util/utilIpLookupFn.spec.js +0 -37
  210. package/parser/functions/util/utilPostProcessFn.spec.js +0 -63
  211. package/parser/functions/util/utilSendEmailFn.spec.js +0 -62
  212. package/parser/functions/util/utilSetHeaderFn.spec.js +0 -48
  213. package/parser/functions/util/utilSleepFn.spec.js +0 -44
  214. package/parser/functions/util/utilTemplateFn.spec.js +0 -78
  215. package/parser/functions/varFn.spec.js +0 -332
  216. package/parser/functions/workflowExpectFn.spec.js +0 -32
  217. package/parser/functions/zip/zipAddToArchiveFn.spec.js +0 -78
  218. package/parser/functions/zip/zipCreateArchiveFn.spec.js +0 -53
  219. package/parser/functions/zip/zipDeleteFromArchiveFn.spec.js +0 -69
  220. package/parser/functions/zip/zipExtractFn.spec.js +0 -52
  221. package/parser/functions/zip/zipViewContentsFn.spec.js +0 -52
  222. package/parser/generic/arrayWithValues.spec.js +0 -72
  223. package/parser/generic/asVariable.spec.js +0 -117
  224. package/parser/generic/assignableVariableAs.spec.js +0 -126
  225. package/parser/generic/assignableVariableProperty.spec.js +0 -138
  226. package/parser/generic/castedValue.spec.js +0 -29
  227. package/parser/generic/chainedIdentifier.spec.js +0 -89
  228. package/parser/generic/completeAuthVariable.spec.js +0 -23
  229. package/parser/generic/completeEnvVariable.spec.js +0 -99
  230. package/parser/generic/completeErrorVariable.spec.js +0 -17
  231. package/parser/generic/completeInputVariable.spec.js +0 -53
  232. package/parser/generic/expressionFn.spec.js +0 -605
  233. package/parser/generic/filterFn.spec.js +0 -47
  234. package/parser/generic/functionAttrReq.spec.js +0 -353
  235. package/parser/generic/longFormVariable.spec.js +0 -25
  236. package/parser/generic/minimalFnBody.spec.js +0 -47
  237. package/parser/generic/mockAttribute.spec.js +0 -57
  238. package/parser/generic/multilineFilterFn.spec.js +0 -51
  239. package/parser/generic/objectWithAttributes.spec.js +0 -147
  240. package/parser/generic/requiredValueFnBody.spec.js +0 -56
  241. package/parser/generic/shortFormVariable.spec.js +0 -27
  242. package/parser/generic/stringArray.spec.js +0 -55
  243. package/parser/generic/tagsAttribute.spec.js +0 -47
  244. package/parser/generic/variableOnly.spec.js +0 -47
  245. package/parser/mcp_server_parser.spec.js +0 -478
  246. package/parser/mcp_server_trigger_parser.spec.js +0 -396
  247. package/parser/metadata/columnMetadataDefinition.spec.js +0 -47
  248. package/parser/metadata/enumColumnMetadataDefinition.spec.js +0 -81
  249. package/parser/middleware_parser.spec.js +0 -230
  250. package/parser/multidoc.spec.js +0 -946
  251. package/parser/query_parser.spec.js +0 -202
  252. package/parser/realtime_channel_parser.spec.js +0 -20
  253. package/parser/realtime_trigger_parser.spec.js +0 -469
  254. package/parser/run_parser.spec.js +0 -100
  255. package/parser/table_parser.spec.js +0 -176
  256. package/parser/table_trigger_parser.spec.js +0 -478
  257. package/parser/task_parser.spec.js +0 -94
  258. package/parser/tests/agent/agent_parser.spec.js +0 -52
  259. package/parser/tests/agent/valid_sources/customer_servier_agent.xs +0 -45
  260. package/parser/tests/api_group/api_group_parser.spec.js +0 -52
  261. package/parser/tests/api_group/valid_sources/api_group_history.xs +0 -4
  262. package/parser/tests/api_group/valid_sources/basic_api_group.xs +0 -3
  263. package/parser/tests/api_group/valid_sources/complete_api_group.xs +0 -7
  264. package/parser/tests/api_group/valid_sources/protected_api_group.xs +0 -7
  265. package/parser/tests/function/function_parser.spec.js +0 -52
  266. package/parser/tests/function/valid_sources/all_controls.xs +0 -68
  267. package/parser/tests/function/valid_sources/all_query_return_types.xs +0 -227
  268. package/parser/tests/function/valid_sources/all_storage.xs +0 -45
  269. package/parser/tests/function/valid_sources/discord_poll_send_to_slack.xs +0 -133
  270. package/parser/tests/function/valid_sources/expression_in_response.xs +0 -22
  271. package/parser/tests/function/valid_sources/filter_by_value.xs +0 -55
  272. package/parser/tests/function/valid_sources/filter_query.xs +0 -82
  273. package/parser/tests/function/valid_sources/large_regex.xs +0 -13
  274. package/parser/tests/function/valid_sources/ledash_ends_with.xs +0 -90
  275. package/parser/tests/function/valid_sources/multiline_description.xs +0 -28
  276. package/parser/tests/function/valid_sources/multiline_expr.xs +0 -41
  277. package/parser/tests/function/valid_sources/set_theory_fn.xs +0 -129
  278. package/parser/tests/function/valid_sources/simple_unit_test.xs +0 -33
  279. package/parser/tests/function/valid_sources/valid_officer.xs +0 -57
  280. package/parser/tests/function/valid_sources/webflow.xs +0 -18
  281. package/parser/tests/multidoc/multidoc_parser.spec.js +0 -55
  282. package/parser/tests/multidoc/valid_sources/function_stack.xs +0 -130603
  283. package/parser/tests/query/query_parser.spec.js +0 -54
  284. package/parser/tests/query/valid_sources/all_basics.xs +0 -51
  285. package/parser/tests/query/valid_sources/all_cloud.xs +0 -141
  286. package/parser/tests/query/valid_sources/all_db.xs +0 -102
  287. package/parser/tests/query/valid_sources/all_external_db.xs +0 -43
  288. package/parser/tests/query/valid_sources/all_keywords.xs +0 -65
  289. package/parser/tests/query/valid_sources/all_math.xs +0 -53
  290. package/parser/tests/query/valid_sources/all_object.xs +0 -25
  291. package/parser/tests/query/valid_sources/all_redis.xs +0 -106
  292. package/parser/tests/query/valid_sources/all_security.xs +0 -105
  293. package/parser/tests/query/valid_sources/all_stream.xs +0 -69
  294. package/parser/tests/query/valid_sources/all_text.xs +0 -54
  295. package/parser/tests/query/valid_sources/all_util.xs +0 -66
  296. package/parser/tests/query/valid_sources/all_zip.xs +0 -39
  297. package/parser/tests/query/valid_sources/arrays.xs +0 -33
  298. package/parser/tests/query/valid_sources/disabled_response.xs +0 -27
  299. package/parser/tests/query/valid_sources/multiline_lambda_GET.xs +0 -50
  300. package/parser/tests/query/valid_sources/mutliline_query.xs +0 -140
  301. package/parser/tests/query/valid_sources/patch_expression_multiline.xs +0 -27
  302. package/parser/tests/query/valid_sources/query_cache.xs +0 -34
  303. package/parser/tests/query/valid_sources/query_example.xs +0 -43
  304. package/parser/tests/query/valid_sources/query_mini.xs +0 -11
  305. package/parser/tests/query/valid_sources/query_rich_inputs.xs +0 -32
  306. package/parser/tests/query/valid_sources/simple_unit_test.xs +0 -33
  307. package/parser/tests/query/valid_sources/test_with_slashes.xs +0 -22
  308. package/parser/tests/query/valid_sources/with_unit_test.xs +0 -97
  309. package/parser/tests/table/table_parser.spec.js +0 -52
  310. package/parser/tests/table/valid_sources/account.xs +0 -31
  311. package/parser/tests/table/valid_sources/all_basic_columns.xs +0 -44
  312. package/parser/tests/table/valid_sources/basic_table.xs +0 -15
  313. package/parser/tests/table/valid_sources/empty_object.xs +0 -17
  314. package/parser/tests/table/valid_sources/empty_table.xs +0 -3
  315. package/parser/tests/table/valid_sources/multiline_index.xs +0 -33
  316. package/parser/tests/table/valid_sources/relation.xs +0 -44
  317. package/parser/tests/table/valid_sources/rich_columns.xs +0 -31
  318. package/parser/tests/table/valid_sources/table_with_comments.xs +0 -17
  319. package/parser/tests/table/valid_sources/table_with_search_index.xs +0 -31
  320. package/parser/tests/table/valid_sources/view_table.xs +0 -62
  321. package/parser/tests/task/task_parser.spec.js +0 -53
  322. package/parser/tests/task/valid_sources/active_event.xs +0 -11
  323. package/parser/tests/task/valid_sources/all_events.xs +0 -17
  324. package/parser/tests/task/valid_sources/create_leak.xs +0 -165
  325. package/parser/tests/task/valid_sources/daily_sales_report.xs +0 -56
  326. package/parser/tests/task/valid_sources/inactive_event.xs +0 -11
  327. package/parser/tests/variable_test/coverage_check.xs +0 -293
  328. package/parser/tests/workflow_test/valid_sources/basic_workflow_test.xs +0 -13
  329. package/parser/tests/workflow_test/workflow_test_parser.spec.js +0 -52
  330. package/parser/tool_parser.spec.js +0 -115
  331. package/parser/variableValidator.spec.js +0 -179
  332. package/parser/workflow_test_parser.spec.js +0 -136
  333. package/parser/workspace_parser.spec.js +0 -142
  334. package/parser/workspace_trigger_parser.spec.js +0 -332
  335. package/toTmLanguage.js +0 -75
  336. package/utils.spec.js +0 -369
  337. package/workspace/crossFileValidator.spec.js +0 -654
  338. package/workspace/referenceTracking.spec.js +0 -420
  339. package/workspace/workspaceIndex.spec.js +0 -189
@@ -1,946 +0,0 @@
1
- import { expect } from "chai";
2
- import { describe, it } from "mocha";
3
- import { documentCache } from "../cache/documentCache.js";
4
- import { multidocParser } from "./multidoc.js";
5
-
6
- describe("multidoc", () => {
7
- describe("detection", () => {
8
- it("should pass through non-multidoc text to single parser", () => {
9
- const result = multidocParser(`function foo {
10
- input {
11
- }
12
-
13
- stack {
14
- }
15
-
16
- response = null
17
- }`);
18
- expect(result.errors).to.be.empty;
19
- expect(result.isMultidoc).to.not.be.ok;
20
- });
21
-
22
- it("should detect multidoc when separator is present", () => {
23
- const result = multidocParser(`function foo {
24
- input {
25
- }
26
-
27
- stack {
28
- }
29
-
30
- response = null
31
- }
32
- ---
33
- function bar {
34
- input {
35
- }
36
-
37
- stack {
38
- }
39
-
40
- response = null
41
- }`);
42
- expect(result.errors).to.be.empty;
43
- expect(result.isMultidoc).to.be.true;
44
- });
45
- });
46
-
47
- describe("splitting", () => {
48
- it("should parse each segment independently with different schemes", () => {
49
- const result = multidocParser(`function foo {
50
- input {
51
- }
52
-
53
- stack {
54
- }
55
-
56
- response = null
57
- }
58
- ---
59
- table my_table {
60
- auth = false
61
-
62
- schema {
63
- int id
64
- timestamp created_at?=now
65
- }
66
- }`);
67
- expect(result.errors).to.be.empty;
68
- expect(result.isMultidoc).to.be.true;
69
- expect(result.segmentCount).to.equal(2);
70
- });
71
-
72
- it("should handle three segments", () => {
73
- const result = multidocParser(`function foo {
74
- input {
75
- }
76
-
77
- stack {
78
- }
79
-
80
- response = null
81
- }
82
- ---
83
- function bar {
84
- input {
85
- }
86
-
87
- stack {
88
- }
89
-
90
- response = null
91
- }
92
- ---
93
- function baz {
94
- input {
95
- }
96
-
97
- stack {
98
- }
99
-
100
- response = null
101
- }`);
102
- expect(result.errors).to.be.empty;
103
- expect(result.segmentCount).to.equal(3);
104
- });
105
- });
106
-
107
- describe("offset math", () => {
108
- it("should offset error positions in second segment to global coordinates", () => {
109
- const seg1 = `function foo {
110
- input {
111
- }
112
-
113
- stack {
114
- }
115
-
116
- response = null
117
- }`;
118
- const seg2 = `function bar {
119
- stack {
120
- INVALID_SYNTAX !!!
121
- }
122
- response = null
123
- }`;
124
- const text = seg1 + "\n---\n" + seg2;
125
- const result = multidocParser(text);
126
-
127
- expect(result.errors).to.not.be.empty;
128
- const error = result.errors[0];
129
- expect(error.token.startOffset).to.be.at.least(seg1.length + 5);
130
- });
131
-
132
- it("should not offset positions in first segment", () => {
133
- const seg1 = `function foo {
134
- stack {
135
- INVALID_SYNTAX !!!
136
- }
137
- response = null
138
- }`;
139
- const seg2 = `function bar {
140
- input {
141
- }
142
-
143
- stack {
144
- }
145
-
146
- response = null
147
- }`;
148
- const text = seg1 + "\n---\n" + seg2;
149
- const result = multidocParser(text);
150
-
151
- expect(result.errors).to.not.be.empty;
152
- const error = result.errors[0];
153
- expect(error.token.startOffset).to.be.lessThan(seg1.length);
154
- });
155
-
156
- it("should offset varDeclaration positions in second segment", () => {
157
- const seg1 = `function foo {
158
- input {
159
- }
160
-
161
- stack {
162
- var $x {
163
- value = 1
164
- }
165
-
166
- var.update $x {
167
- value = 2
168
- }
169
- }
170
-
171
- response = null
172
- }`;
173
- const seg2 = `function bar {
174
- input {
175
- }
176
-
177
- stack {
178
- var $y {
179
- value = 1
180
- }
181
-
182
- var.update $y {
183
- value = 2
184
- }
185
- }
186
-
187
- response = null
188
- }`;
189
- const text = seg1 + "\n---\n" + seg2;
190
- const result = multidocParser(text);
191
-
192
- const yDecl = result.__symbolTable.varDeclarations.find(
193
- (d) => d.name === "$y",
194
- );
195
- expect(yDecl).to.exist;
196
- expect(yDecl.startOffset).to.be.at.least(seg1.length + 5);
197
- });
198
- });
199
-
200
- describe("variable scoping", () => {
201
- it("should not report unused variable when used in same segment", () => {
202
- const text = `function foo {
203
- input {
204
- }
205
-
206
- stack {
207
- var $x {
208
- value = 1
209
- }
210
-
211
- var.update $x {
212
- value = 2
213
- }
214
- }
215
-
216
- response = null
217
- }
218
- ---
219
- function bar {
220
- input {
221
- }
222
-
223
- stack {
224
- var $y {
225
- value = 1
226
- }
227
-
228
- var.update $y {
229
- value = 2
230
- }
231
- }
232
-
233
- response = null
234
- }`;
235
- const result = multidocParser(text);
236
- expect(result.errors).to.be.empty;
237
- const unusedHints = result.hints.filter((h) =>
238
- h.message.includes("never used"),
239
- );
240
- expect(unusedHints).to.be.empty;
241
- });
242
-
243
- it("should report unused variable scoped to its own segment", () => {
244
- const text = `function foo {
245
- input {
246
- }
247
-
248
- stack {
249
- var $unused {
250
- value = 1
251
- }
252
- }
253
-
254
- response = null
255
- }
256
- ---
257
- function bar {
258
- input {
259
- }
260
-
261
- stack {
262
- var $also_unused {
263
- value = 1
264
- }
265
- }
266
-
267
- response = null
268
- }`;
269
- const result = multidocParser(text);
270
- const unusedHints = result.hints.filter((h) =>
271
- h.message.includes("never used"),
272
- );
273
- expect(unusedHints).to.have.lengthOf(2);
274
- });
275
-
276
- it("should not leak variables across segments", () => {
277
- const text = `function foo {
278
- input {
279
- }
280
-
281
- stack {
282
- var $x {
283
- value = 1
284
- }
285
-
286
- var.update $x {
287
- value = 2
288
- }
289
- }
290
-
291
- response = null
292
- }
293
- ---
294
- function bar {
295
- input {
296
- }
297
-
298
- stack {
299
- var.update $x {
300
- value = 2
301
- }
302
-
303
- var $y {
304
- value = 2
305
- }
306
- }
307
-
308
- response = null
309
- }`;
310
- const result = multidocParser(text);
311
- const unknownWarnings = result.warnings.filter((w) =>
312
- w.message.includes("Unknown variable"),
313
- );
314
- expect(unknownWarnings).to.have.lengthOf(1);
315
- expect(unknownWarnings[0].message).to.include("$x");
316
- });
317
-
318
- it("should offset variable validation positions in second segment", () => {
319
- const seg1 = `function foo {
320
- input {
321
- }
322
-
323
- stack {
324
- var $a {
325
- value = 1
326
- }
327
- }
328
-
329
- response = null
330
- }`;
331
- const seg2 = `function bar {
332
- input {
333
- }
334
-
335
- stack {
336
- var $b {
337
- value = 1
338
- }
339
- }
340
-
341
- response = null
342
- }`;
343
- const text = seg1 + "\n---\n" + seg2;
344
- const result = multidocParser(text);
345
-
346
- const bHint = result.hints.find((h) => h.message.includes("$b"));
347
- expect(bHint).to.exist;
348
- expect(bHint.token.startOffset).to.be.at.least(seg1.length + 5);
349
- });
350
- });
351
-
352
- describe("cross-reference validation", () => {
353
- it("should resolve cross-reference from segment B to function in segment A", () => {
354
- const text = `function foo_bar {
355
- input {
356
- }
357
-
358
- stack {
359
- }
360
-
361
- response = null
362
- }
363
- ---
364
- function baz {
365
- input {
366
- }
367
-
368
- stack {
369
- function.run foo_bar {
370
- } as $result
371
- }
372
-
373
- response = null
374
- }`;
375
- const result = multidocParser(text);
376
- const crossRefWarnings = result.warnings.filter((w) =>
377
- w.message.includes("Unknown function"),
378
- );
379
- expect(crossRefWarnings).to.be.empty;
380
- });
381
-
382
- it("should warn on missing cross-reference within multidoc", () => {
383
- const text = `function baz {
384
- input {
385
- }
386
-
387
- stack {
388
- function.run nonexistent {
389
- } as $result
390
- }
391
-
392
- response = null
393
- }
394
- ---
395
- function bar {
396
- input {
397
- }
398
-
399
- stack {
400
- }
401
-
402
- response = null
403
- }`;
404
- const result = multidocParser(text);
405
- const crossRefWarnings = result.warnings.filter((w) =>
406
- w.message.includes("Unknown function"),
407
- );
408
- expect(crossRefWarnings).to.have.lengthOf(1);
409
- expect(crossRefWarnings[0].message).to.include("nonexistent");
410
- });
411
-
412
- it("should offset cross-reference warning positions to global coordinates", () => {
413
- const seg1 = `function foo {
414
- input {
415
- }
416
-
417
- stack {
418
- }
419
-
420
- response = null
421
- }`;
422
- const seg2 = `function bar {
423
- input {
424
- }
425
-
426
- stack {
427
- function.run missing_fn {
428
- } as $result
429
- }
430
-
431
- response = null
432
- }`;
433
- const text = seg1 + "\n---\n" + seg2;
434
- const result = multidocParser(text);
435
-
436
- const warning = result.warnings.find((w) =>
437
- w.message.includes("Unknown function"),
438
- );
439
- expect(warning).to.exist;
440
- const warningOffset = warning.token?.startOffset ?? warning.startOffset;
441
- expect(warningOffset).to.be.at.least(seg1.length + 5);
442
- });
443
- });
444
-
445
- describe("edge cases", () => {
446
- it("should handle empty segment between separators", () => {
447
- const text = `function foo {
448
- input {
449
- }
450
-
451
- stack {
452
- }
453
-
454
- response = null
455
- }
456
- ---
457
-
458
- ---
459
- function bar {
460
- input {
461
- }
462
-
463
- stack {
464
- }
465
-
466
- response = null
467
- }`;
468
- const result = multidocParser(text);
469
- expect(result.isMultidoc).to.be.true;
470
- expect(result.segmentCount).to.equal(3);
471
- });
472
-
473
- it("should handle trailing separator", () => {
474
- const text = `function foo {
475
- input {
476
- }
477
-
478
- stack {
479
- }
480
-
481
- response = null
482
- }
483
- ---
484
- `;
485
- const result = multidocParser(text);
486
- expect(result.isMultidoc).to.be.true;
487
- expect(result.segmentCount).to.equal(2);
488
- });
489
-
490
- it("should not split on --- without surrounding newlines", () => {
491
- const result = multidocParser(`function foo {
492
- input {
493
- }
494
-
495
- stack {
496
- }
497
-
498
- response = null
499
- }`);
500
- expect(result.isMultidoc).to.not.be.ok;
501
- });
502
-
503
- it("should not corrupt earlier segment results (singleton safety)", () => {
504
- const seg1 = `function foo {
505
- input {
506
- }
507
-
508
- stack {
509
- var $a {
510
- value = 1
511
- }
512
-
513
- var.update $a {
514
- value = 2
515
- }
516
- }
517
-
518
- response = null
519
- }`;
520
- const seg2 = `function bar {
521
- input {
522
- }
523
-
524
- stack {
525
- var $b {
526
- value = 1
527
- }
528
-
529
- var.update $b {
530
- value = 2
531
- }
532
- }
533
-
534
- response = null
535
- }`;
536
- const text = seg1 + "\n---\n" + seg2;
537
- const result = multidocParser(text);
538
-
539
- const names = result.__symbolTable.varDeclarations.map((d) => d.name);
540
- expect(names).to.include("$a");
541
- expect(names).to.include("$b");
542
-
543
- const aDecl = result.__symbolTable.varDeclarations.find(
544
- (d) => d.name === "$a",
545
- );
546
- const bDecl = result.__symbolTable.varDeclarations.find(
547
- (d) => d.name === "$b",
548
- );
549
- expect(aDecl.startOffset).to.be.lessThan(seg1.length);
550
- expect(bDecl.startOffset).to.be.at.least(seg1.length + 5);
551
- });
552
- });
553
-
554
- describe("cache integration", () => {
555
- it("should route multidoc through multidocParser via cache", () => {
556
- documentCache.clear();
557
- const text = `function foo {
558
- input {
559
- }
560
-
561
- stack {
562
- }
563
-
564
- response = null
565
- }
566
- ---
567
- function bar {
568
- input {
569
- }
570
-
571
- stack {
572
- }
573
-
574
- response = null
575
- }`;
576
- const { parser, scheme } = documentCache.getOrParse(
577
- "test://multidoc",
578
- 1,
579
- text,
580
- );
581
- expect(parser.isMultidoc).to.be.true;
582
- expect(scheme).to.equal("multidoc");
583
- });
584
-
585
- it("should cache multidoc results", () => {
586
- documentCache.clear();
587
- const text = `function foo {
588
- input {
589
- }
590
-
591
- stack {
592
- }
593
-
594
- response = null
595
- }
596
- ---
597
- function bar {
598
- input {
599
- }
600
-
601
- stack {
602
- }
603
-
604
- response = null
605
- }`;
606
- documentCache.getOrParse("test://multidoc-cache", 1, text);
607
- const { parser } = documentCache.getOrParse(
608
- "test://multidoc-cache",
609
- 1,
610
- text,
611
- );
612
- expect(parser.isMultidoc).to.be.true;
613
- });
614
-
615
- it("should not route single-doc through multidocParser", () => {
616
- documentCache.clear();
617
- const text = `function foo {
618
- input {
619
- }
620
-
621
- stack {
622
- }
623
-
624
- response = null
625
- }`;
626
- const { parser, scheme } = documentCache.getOrParse(
627
- "test://single",
628
- 1,
629
- text,
630
- );
631
- expect(parser.isMultidoc).to.not.be.ok;
632
- expect(scheme).to.not.equal("multidoc");
633
- });
634
- });
635
-
636
- describe("adversarial", () => {
637
- it("should compute exact offset for second segment", () => {
638
- const seg1 = `function foo {
639
- input {
640
- }
641
-
642
- stack {
643
- }
644
-
645
- response = null
646
- }`;
647
- const seg2 = `function bar {
648
- input {
649
- }
650
-
651
- stack {
652
- }
653
-
654
- response = null
655
- }`;
656
- const text = seg1 + "\n---\n" + seg2;
657
- const result = multidocParser(text);
658
-
659
- // The keyword "function" in seg2 starts at exactly seg1.length + 5
660
- const expectedOffset = seg1.length + 5;
661
- // seg2 parses fine, so no errors — check varDeclarations or references if present
662
- // Instead, verify via a parse error at a known position in seg2
663
- expect(result.errors).to.be.empty;
664
- expect(result.segmentCount).to.equal(2);
665
- // The second segment's text should start at the expected offset
666
- // Verify by checking that seg2 content matches the original text at that position
667
- expect(text.substring(expectedOffset)).to.equal(seg2);
668
- });
669
-
670
- it("should report exact offset for error in third segment", () => {
671
- const seg1 = `function foo {
672
- input {
673
- }
674
-
675
- stack {
676
- }
677
-
678
- response = null
679
- }`;
680
- const seg2 = `function bar {
681
- input {
682
- }
683
-
684
- stack {
685
- }
686
-
687
- response = null
688
- }`;
689
- const seg3 = `INVALID`;
690
- const text = seg1 + "\n---\n" + seg2 + "\n---\n" + seg3;
691
- const result = multidocParser(text);
692
-
693
- const expectedSeg3Start = seg1.length + 5 + seg2.length + 5;
694
- expect(result.errors).to.not.be.empty;
695
- // The error must be within seg3's global range
696
- const error = result.errors[0];
697
- expect(error.token.startOffset).to.be.at.least(expectedSeg3Start);
698
- expect(error.token.startOffset).to.be.lessThan(
699
- expectedSeg3Start + seg3.length,
700
- );
701
- });
702
-
703
- it("should isolate errors — bad seg1 should not prevent seg2 from parsing", () => {
704
- const text = `INVALID_GARBAGE
705
- ---
706
- function bar {
707
- input {
708
- }
709
-
710
- stack {
711
- var $y {
712
- value = 1
713
- }
714
- }
715
-
716
- response = null
717
- }`;
718
- const result = multidocParser(text);
719
-
720
- // seg1 has errors
721
- expect(result.errors).to.not.be.empty;
722
- // seg2's variable should still be tracked
723
- const yDecl = result.__symbolTable.varDeclarations.find(
724
- (d) => d.name === "$y",
725
- );
726
- expect(yDecl).to.exist;
727
- });
728
-
729
- it("should handle same variable name in different segments independently", () => {
730
- const text = `function foo {
731
- input {
732
- }
733
-
734
- stack {
735
- var $x {
736
- value = "from foo"
737
- }
738
-
739
- var.update $x {
740
- value = "updated in foo"
741
- }
742
- }
743
-
744
- response = null
745
- }
746
- ---
747
- function bar {
748
- input {
749
- }
750
-
751
- stack {
752
- var $x {
753
- value = "from bar"
754
- }
755
-
756
- var.update $x {
757
- value = "updated in bar"
758
- }
759
- }
760
-
761
- response = null
762
- }`;
763
- const result = multidocParser(text);
764
- expect(result.errors).to.be.empty;
765
- // Both $x declarations exist
766
- const xDecls = result.__symbolTable.varDeclarations.filter(
767
- (d) => d.name === "$x",
768
- );
769
- expect(xDecls).to.have.lengthOf(2);
770
- // Neither should be reported as unused
771
- const unusedHints = result.hints.filter((h) =>
772
- h.message.includes("never used"),
773
- );
774
- expect(unusedHints).to.be.empty;
775
- // No unknown variable warnings
776
- const unknownWarnings = result.warnings.filter((w) =>
777
- w.message.includes("Unknown variable"),
778
- );
779
- expect(unknownWarnings).to.be.empty;
780
- });
781
-
782
- it("should warn when referencing a table name as a function", () => {
783
- const text = `table users {
784
- auth = false
785
-
786
- schema {
787
- int id
788
- timestamp created_at?=now
789
- }
790
- }
791
- ---
792
- function caller {
793
- input {
794
- }
795
-
796
- stack {
797
- function.run users {
798
- } as $result
799
- }
800
-
801
- response = null
802
- }`;
803
- const result = multidocParser(text);
804
- // "users" is a table, not a function — cross-ref should warn
805
- const crossRefWarnings = result.warnings.filter((w) =>
806
- w.message.includes("Unknown function"),
807
- );
808
- expect(crossRefWarnings).to.have.lengthOf(1);
809
- expect(crossRefWarnings[0].message).to.include("users");
810
- });
811
-
812
- it("should handle cross-ref between function and table (db.get)", () => {
813
- const text = `table users {
814
- auth = false
815
-
816
- schema {
817
- int id
818
- timestamp created_at?=now
819
- }
820
- }
821
- ---
822
- function caller {
823
- input {
824
- }
825
-
826
- stack {
827
- db.get users {
828
- field_name = id
829
- field_value = 1
830
- } as $user
831
- }
832
-
833
- response = null
834
- }`;
835
- const result = multidocParser(text);
836
- // "users" is a table, db.get references tables — should resolve
837
- const crossRefWarnings = result.warnings.filter((w) =>
838
- w.message.includes("Unknown table"),
839
- );
840
- expect(crossRefWarnings).to.be.empty;
841
- });
842
-
843
- it("should handle separator at document start", () => {
844
- const text = `
845
- ---
846
- function foo {
847
- input {
848
- }
849
-
850
- stack {
851
- }
852
-
853
- response = null
854
- }`;
855
- const result = multidocParser(text);
856
- expect(result.isMultidoc).to.be.true;
857
- expect(result.segmentCount).to.equal(2);
858
- // First segment is empty/whitespace, should have errors but not crash
859
- });
860
-
861
- it("should handle document that is only a separator", () => {
862
- const text = "\n---\n";
863
- const result = multidocParser(text);
864
- expect(result.isMultidoc).to.be.true;
865
- expect(result.segmentCount).to.equal(2);
866
- // Both segments are empty strings — should not crash
867
- });
868
-
869
- it("should parse workspace + table multidoc without errors on separator", () => {
870
- const text = `workspace "car-coverage" {
871
- acceptance = {ai_terms: false}
872
- preferences = {
873
- internal_docs : false
874
- track_performance: true
875
- sql_names : false
876
- sql_columns : true
877
- }
878
-
879
- realtime = {canonical: "UJCEVaoiEJN-wjghNzMxj324-8w"}
880
- env = {api_key: "12345"}
881
- }
882
- ---
883
- table user {
884
- auth = true
885
-
886
- schema {
887
- int id
888
- timestamp created_at?=now
889
- text name filters=trim
890
- email? email filters=trim|lower
891
- password? password filters=min:8|minAlpha:1|minDigit:1
892
- text? refresh_token {
893
- sensitive = true
894
- visibility = "private"
895
- }
896
-
897
- timestamp? refresh_token_expires
898
-
899
- // some description
900
- enum my_enum {
901
- values = ["true", "false", "2"]
902
- sensitive = true
903
- visibility = "private"
904
- }
905
-
906
- object test_visibility? {
907
- schema {
908
- text internal? filters=trim {
909
- visibility = "internal"
910
- }
911
- }
912
- }
913
- }
914
-
915
- index = [
916
- {type: "primary", field: [{name: "id"}]}
917
- {type: "btree", field: [{name: "created_at", op: "desc"}]}
918
- {type: "btree|unique", field: [{name: "email", op: "asc"}]}
919
- ]
920
- }`;
921
- const result = multidocParser(text);
922
- expect(result.isMultidoc).to.be.true;
923
- expect(result.segmentCount).to.equal(2);
924
- expect(result.errors).to.be.empty;
925
- });
926
-
927
- it("should not treat --- inside a string literal as separator", () => {
928
- // This is a known limitation — but test current behavior
929
- const text = `function foo {
930
- input {
931
- }
932
-
933
- stack {
934
- var $x {
935
- value = "before separator"
936
- }
937
- }
938
-
939
- response = null
940
- }`;
941
- // No separator present — should be single doc
942
- const result = multidocParser(text);
943
- expect(result.isMultidoc).to.not.be.ok;
944
- });
945
- });
946
- });