@miguelduran14/knowflow 0.1.1

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 (192) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +182 -0
  3. package/dist/advisories.d.ts +16 -0
  4. package/dist/advisories.js +364 -0
  5. package/dist/advisories.js.map +1 -0
  6. package/dist/cli.d.ts +2 -0
  7. package/dist/cli.js +104 -0
  8. package/dist/cli.js.map +1 -0
  9. package/dist/copy-resolver.d.ts +22 -0
  10. package/dist/copy-resolver.js +74 -0
  11. package/dist/copy-resolver.js.map +1 -0
  12. package/dist/dataflow.d.ts +2 -0
  13. package/dist/dataflow.js +88 -0
  14. package/dist/dataflow.js.map +1 -0
  15. package/dist/dossier.d.ts +20 -0
  16. package/dist/dossier.js +331 -0
  17. package/dist/dossier.js.map +1 -0
  18. package/dist/explain/claude.d.ts +14 -0
  19. package/dist/explain/claude.js +91 -0
  20. package/dist/explain/claude.js.map +1 -0
  21. package/dist/explain/explain.d.ts +72 -0
  22. package/dist/explain/explain.js +126 -0
  23. package/dist/explain/explain.js.map +1 -0
  24. package/dist/explain/facts.d.ts +23 -0
  25. package/dist/explain/facts.js +266 -0
  26. package/dist/explain/facts.js.map +1 -0
  27. package/dist/explain/fake.d.ts +14 -0
  28. package/dist/explain/fake.js +27 -0
  29. package/dist/explain/fake.js.map +1 -0
  30. package/dist/explain/openai.d.ts +42 -0
  31. package/dist/explain/openai.js +102 -0
  32. package/dist/explain/openai.js.map +1 -0
  33. package/dist/explain/provider.d.ts +19 -0
  34. package/dist/explain/provider.js +2 -0
  35. package/dist/explain/provider.js.map +1 -0
  36. package/dist/explain/sse.d.ts +10 -0
  37. package/dist/explain/sse.js +44 -0
  38. package/dist/explain/sse.js.map +1 -0
  39. package/dist/flow-parser.d.ts +10 -0
  40. package/dist/flow-parser.js +503 -0
  41. package/dist/flow-parser.js.map +1 -0
  42. package/dist/glossary.d.ts +54 -0
  43. package/dist/glossary.js +340 -0
  44. package/dist/glossary.js.map +1 -0
  45. package/dist/index.d.ts +17 -0
  46. package/dist/index.js +16 -0
  47. package/dist/index.js.map +1 -0
  48. package/dist/inventory.d.ts +7 -0
  49. package/dist/inventory.js +453 -0
  50. package/dist/inventory.js.map +1 -0
  51. package/dist/lines.d.ts +15 -0
  52. package/dist/lines.js +53 -0
  53. package/dist/lines.js.map +1 -0
  54. package/dist/linker.d.ts +17 -0
  55. package/dist/linker.js +56 -0
  56. package/dist/linker.js.map +1 -0
  57. package/dist/mermaid.d.ts +27 -0
  58. package/dist/mermaid.js +133 -0
  59. package/dist/mermaid.js.map +1 -0
  60. package/dist/parser.d.ts +19 -0
  61. package/dist/parser.js +442 -0
  62. package/dist/parser.js.map +1 -0
  63. package/dist/pic.d.ts +29 -0
  64. package/dist/pic.js +197 -0
  65. package/dist/pic.js.map +1 -0
  66. package/dist/references.d.ts +24 -0
  67. package/dist/references.js +906 -0
  68. package/dist/references.js.map +1 -0
  69. package/dist/source-lines.d.ts +56 -0
  70. package/dist/source-lines.js +114 -0
  71. package/dist/source-lines.js.map +1 -0
  72. package/dist/types.d.ts +499 -0
  73. package/dist/types.js +2 -0
  74. package/dist/types.js.map +1 -0
  75. package/gui/dist/assets/ChainCanvas-C37KyhnE.js +1 -0
  76. package/gui/dist/assets/FlowCanvas-BRklWBCp.js +3 -0
  77. package/gui/dist/assets/RobotProfessor-BtTDTBDq.js +4220 -0
  78. package/gui/dist/assets/fira-code-cyrillic-400-normal-UC0NFL4U.woff2 +0 -0
  79. package/gui/dist/assets/fira-code-cyrillic-400-normal-dc1q3VD7.woff +0 -0
  80. package/gui/dist/assets/fira-code-cyrillic-500-normal-Bu7VCL72.woff +0 -0
  81. package/gui/dist/assets/fira-code-cyrillic-500-normal-CX35h3Mg.woff2 +0 -0
  82. package/gui/dist/assets/fira-code-cyrillic-600-normal-BD56RyRT.woff +0 -0
  83. package/gui/dist/assets/fira-code-cyrillic-600-normal-CPRdbepc.woff2 +0 -0
  84. package/gui/dist/assets/fira-code-cyrillic-ext-400-normal-Buh61xzB.woff +0 -0
  85. package/gui/dist/assets/fira-code-cyrillic-ext-400-normal-txZ9Fk_1.woff2 +0 -0
  86. package/gui/dist/assets/fira-code-cyrillic-ext-500-normal-CYRspHgm.woff2 +0 -0
  87. package/gui/dist/assets/fira-code-cyrillic-ext-500-normal-CwtLmSFD.woff +0 -0
  88. package/gui/dist/assets/fira-code-cyrillic-ext-600-normal-B9wE0zmr.woff2 +0 -0
  89. package/gui/dist/assets/fira-code-cyrillic-ext-600-normal-DldcyWhZ.woff +0 -0
  90. package/gui/dist/assets/fira-code-greek-400-normal-B2Gh_Y8s.woff2 +0 -0
  91. package/gui/dist/assets/fira-code-greek-400-normal-DobhaxvF.woff +0 -0
  92. package/gui/dist/assets/fira-code-greek-500-normal-CVO0IRNt.woff2 +0 -0
  93. package/gui/dist/assets/fira-code-greek-500-normal-DEXIWiey.woff +0 -0
  94. package/gui/dist/assets/fira-code-greek-600-normal-D_h3X2X5.woff +0 -0
  95. package/gui/dist/assets/fira-code-greek-600-normal-Dxp52_By.woff2 +0 -0
  96. package/gui/dist/assets/fira-code-greek-ext-400-normal-DR7mBgIM.woff2 +0 -0
  97. package/gui/dist/assets/fira-code-greek-ext-400-normal-DSPUheWg.woff +0 -0
  98. package/gui/dist/assets/fira-code-greek-ext-500-normal-BO3iq16n.woff2 +0 -0
  99. package/gui/dist/assets/fira-code-greek-ext-500-normal-CMiNLXER.woff +0 -0
  100. package/gui/dist/assets/fira-code-greek-ext-600-normal-C-cQDoOk.woff +0 -0
  101. package/gui/dist/assets/fira-code-greek-ext-600-normal-DtBpFRLc.woff2 +0 -0
  102. package/gui/dist/assets/fira-code-latin-400-normal-C-QZfXAs.woff +0 -0
  103. package/gui/dist/assets/fira-code-latin-400-normal-DGosTW8U.woff2 +0 -0
  104. package/gui/dist/assets/fira-code-latin-500-normal-B6gioGu8.woff2 +0 -0
  105. package/gui/dist/assets/fira-code-latin-500-normal-aMLC2AMm.woff +0 -0
  106. package/gui/dist/assets/fira-code-latin-600-normal-BmSSHshu.woff +0 -0
  107. package/gui/dist/assets/fira-code-latin-600-normal-CvYZpPHg.woff2 +0 -0
  108. package/gui/dist/assets/fira-code-latin-ext-400-normal-DG73JjOf.woff +0 -0
  109. package/gui/dist/assets/fira-code-latin-ext-400-normal-KSMg0QLl.woff2 +0 -0
  110. package/gui/dist/assets/fira-code-latin-ext-500-normal-CaANqXjI.woff +0 -0
  111. package/gui/dist/assets/fira-code-latin-ext-500-normal-Crd9e_oI.woff2 +0 -0
  112. package/gui/dist/assets/fira-code-latin-ext-600-normal-0PFQL1eg.woff +0 -0
  113. package/gui/dist/assets/fira-code-latin-ext-600-normal-Cb7jxoAi.woff2 +0 -0
  114. package/gui/dist/assets/fira-code-symbols2-400-normal-_QEZCEwe.woff +0 -0
  115. package/gui/dist/assets/fira-code-symbols2-500-normal-DwsgbIjQ.woff +0 -0
  116. package/gui/dist/assets/fira-code-symbols2-600-normal-Dvq6IQE5.woff +0 -0
  117. package/gui/dist/assets/fira-sans-cyrillic-300-normal-BO7tmGom.woff2 +0 -0
  118. package/gui/dist/assets/fira-sans-cyrillic-300-normal-BtNmWoqn.woff +0 -0
  119. package/gui/dist/assets/fira-sans-cyrillic-400-normal-CKu2TFQr.woff2 +0 -0
  120. package/gui/dist/assets/fira-sans-cyrillic-400-normal-D9eUeF-O.woff +0 -0
  121. package/gui/dist/assets/fira-sans-cyrillic-500-normal-CXfldnQ8.woff2 +0 -0
  122. package/gui/dist/assets/fira-sans-cyrillic-500-normal-Daski1k2.woff +0 -0
  123. package/gui/dist/assets/fira-sans-cyrillic-600-normal-CJ5P9t7t.woff +0 -0
  124. package/gui/dist/assets/fira-sans-cyrillic-600-normal-JSBvCpTs.woff2 +0 -0
  125. package/gui/dist/assets/fira-sans-cyrillic-700-normal-Bl-HczEO.woff2 +0 -0
  126. package/gui/dist/assets/fira-sans-cyrillic-700-normal-KyW5QH4H.woff +0 -0
  127. package/gui/dist/assets/fira-sans-cyrillic-ext-300-normal-BRn8Tsce.woff2 +0 -0
  128. package/gui/dist/assets/fira-sans-cyrillic-ext-300-normal-DOtRq9zH.woff +0 -0
  129. package/gui/dist/assets/fira-sans-cyrillic-ext-400-normal-Cycyekte.woff2 +0 -0
  130. package/gui/dist/assets/fira-sans-cyrillic-ext-400-normal-Dd5dApAy.woff +0 -0
  131. package/gui/dist/assets/fira-sans-cyrillic-ext-500-normal-Cixivk4R.woff +0 -0
  132. package/gui/dist/assets/fira-sans-cyrillic-ext-500-normal-Dkk5LlrU.woff2 +0 -0
  133. package/gui/dist/assets/fira-sans-cyrillic-ext-600-normal-BKgjRriM.woff +0 -0
  134. package/gui/dist/assets/fira-sans-cyrillic-ext-600-normal-CE6oUZE1.woff2 +0 -0
  135. package/gui/dist/assets/fira-sans-cyrillic-ext-700-normal-BfO9TR-w.woff2 +0 -0
  136. package/gui/dist/assets/fira-sans-cyrillic-ext-700-normal-Gcpdxicj.woff +0 -0
  137. package/gui/dist/assets/fira-sans-greek-300-normal-D3JfF3y9.woff2 +0 -0
  138. package/gui/dist/assets/fira-sans-greek-300-normal-DSgcXl_1.woff +0 -0
  139. package/gui/dist/assets/fira-sans-greek-400-normal-BFCFncbp.woff2 +0 -0
  140. package/gui/dist/assets/fira-sans-greek-400-normal-DQ8sF22y.woff +0 -0
  141. package/gui/dist/assets/fira-sans-greek-500-normal-C9KT8sAy.woff +0 -0
  142. package/gui/dist/assets/fira-sans-greek-500-normal-Cy-TUuxE.woff2 +0 -0
  143. package/gui/dist/assets/fira-sans-greek-600-normal-BlqpLOpF.woff2 +0 -0
  144. package/gui/dist/assets/fira-sans-greek-600-normal-DfHu91YF.woff +0 -0
  145. package/gui/dist/assets/fira-sans-greek-700-normal-BVfcrbV7.woff2 +0 -0
  146. package/gui/dist/assets/fira-sans-greek-700-normal-CJu31rC4.woff +0 -0
  147. package/gui/dist/assets/fira-sans-greek-ext-300-normal-CodlqOxk.woff +0 -0
  148. package/gui/dist/assets/fira-sans-greek-ext-300-normal-DVDwbKuK.woff2 +0 -0
  149. package/gui/dist/assets/fira-sans-greek-ext-400-normal-ByG7UNQ2.woff2 +0 -0
  150. package/gui/dist/assets/fira-sans-greek-ext-400-normal-ClCfNE6D.woff +0 -0
  151. package/gui/dist/assets/fira-sans-greek-ext-500-normal-Bem4H9fH.woff +0 -0
  152. package/gui/dist/assets/fira-sans-greek-ext-500-normal-nq-cjB3m.woff2 +0 -0
  153. package/gui/dist/assets/fira-sans-greek-ext-600-normal-DPxZoeHL.woff +0 -0
  154. package/gui/dist/assets/fira-sans-greek-ext-600-normal-fS0evUH3.woff2 +0 -0
  155. package/gui/dist/assets/fira-sans-greek-ext-700-normal-C1m6bE4Q.woff2 +0 -0
  156. package/gui/dist/assets/fira-sans-greek-ext-700-normal-C8J5qYMq.woff +0 -0
  157. package/gui/dist/assets/fira-sans-latin-300-normal-B2LrTgQS.woff2 +0 -0
  158. package/gui/dist/assets/fira-sans-latin-300-normal-Dwkm-oZ7.woff +0 -0
  159. package/gui/dist/assets/fira-sans-latin-400-normal-66xCkunx.woff +0 -0
  160. package/gui/dist/assets/fira-sans-latin-400-normal-a0AnQzuD.woff2 +0 -0
  161. package/gui/dist/assets/fira-sans-latin-500-normal-Bkfzcwmr.woff +0 -0
  162. package/gui/dist/assets/fira-sans-latin-500-normal-Bvbxc8ch.woff2 +0 -0
  163. package/gui/dist/assets/fira-sans-latin-600-normal-CXKlxLG9.woff2 +0 -0
  164. package/gui/dist/assets/fira-sans-latin-600-normal-DtSgd811.woff +0 -0
  165. package/gui/dist/assets/fira-sans-latin-700-normal-CRhwpWTq.woff2 +0 -0
  166. package/gui/dist/assets/fira-sans-latin-700-normal-DgqLm3Fi.woff +0 -0
  167. package/gui/dist/assets/fira-sans-latin-ext-300-normal-CAROBYR0.woff +0 -0
  168. package/gui/dist/assets/fira-sans-latin-ext-300-normal-GNF4Ac3G.woff2 +0 -0
  169. package/gui/dist/assets/fira-sans-latin-ext-400-normal-BCUwhuGB.woff +0 -0
  170. package/gui/dist/assets/fira-sans-latin-ext-400-normal-BLG_mAEf.woff2 +0 -0
  171. package/gui/dist/assets/fira-sans-latin-ext-500-normal-CFRf4jcC.woff +0 -0
  172. package/gui/dist/assets/fira-sans-latin-ext-500-normal-OO1QnNpY.woff2 +0 -0
  173. package/gui/dist/assets/fira-sans-latin-ext-600-normal-DLMQsaV4.woff +0 -0
  174. package/gui/dist/assets/fira-sans-latin-ext-600-normal-DTQBTt1m.woff2 +0 -0
  175. package/gui/dist/assets/fira-sans-latin-ext-700-normal-cfTxGFzJ.woff +0 -0
  176. package/gui/dist/assets/fira-sans-latin-ext-700-normal-g2Yrd4J5.woff2 +0 -0
  177. package/gui/dist/assets/fira-sans-vietnamese-300-normal-BO7He0nF.woff2 +0 -0
  178. package/gui/dist/assets/fira-sans-vietnamese-300-normal-CeyOCBN-.woff +0 -0
  179. package/gui/dist/assets/fira-sans-vietnamese-400-normal-DUVG35gE.woff +0 -0
  180. package/gui/dist/assets/fira-sans-vietnamese-400-normal-ljDTQFsx.woff2 +0 -0
  181. package/gui/dist/assets/fira-sans-vietnamese-500-normal-ChEXCnJy.woff2 +0 -0
  182. package/gui/dist/assets/fira-sans-vietnamese-500-normal-UV7M6ot_.woff +0 -0
  183. package/gui/dist/assets/fira-sans-vietnamese-600-normal-Bxjaclsw.woff +0 -0
  184. package/gui/dist/assets/fira-sans-vietnamese-600-normal-Dh2KAvU8.woff2 +0 -0
  185. package/gui/dist/assets/fira-sans-vietnamese-700-normal-DFi88MGY.woff +0 -0
  186. package/gui/dist/assets/fira-sans-vietnamese-700-normal-j5oLGLJY.woff2 +0 -0
  187. package/gui/dist/assets/index-CwQzep9r.js +413 -0
  188. package/gui/dist/assets/index-DUFjnEFT.css +1 -0
  189. package/gui/dist/assets/theme-BnuhLJ6X.css +1 -0
  190. package/gui/dist/assets/theme-G7EkTZY2.js +30 -0
  191. package/gui/dist/index.html +13 -0
  192. package/package.json +62 -0
@@ -0,0 +1,340 @@
1
+ /**
2
+ * Glosario COBOL — capa determinista, no generada por IA.
3
+ *
4
+ * Es el diferenciador: mientras la explicación de UN programa cambia con
5
+ * cada fuente y la produce el LLM, "qué significa COMP-3" es siempre lo
6
+ * mismo y lo escribimos una vez. Ventajas: coste y latencia cero, nunca
7
+ * alucina, y la calidad la garantizas tú, no un modelo.
8
+ *
9
+ * Cada entrada tiene:
10
+ * - `short`: una línea para el tooltip (el 80% de las dudas se resuelven aquí).
11
+ * - `what` / `why` / `gotcha`: la ficha completa que aparece en el cajón.
12
+ * - `example`: código real, corto, que ilustra la idea.
13
+ * - `pattern`: cómo detectar el término en un texto ya escrito.
14
+ *
15
+ * El orden en el que aparecen aquí determina la precedencia de detección:
16
+ * las alternativas más largas van antes para que "PIC X" no gane a "PIC".
17
+ */
18
+ /**
19
+ * Palabra-COBOL boundary: en COBOL el guion forma parte del identificador,
20
+ * así que `\b` no basta. `READ` dentro de `READ-NEXT-PARA` NO debe cazar.
21
+ * Cada envoltura vive en una función distinta para dejar claro qué se
22
+ * escapa y qué no.
23
+ *
24
+ * `cobolWord` es para *literales*: escapa los metacaracteres de regex, así
25
+ * que el llamador escribe "COMP-3" o "GO TO" tal cual.
26
+ */
27
+ function cobolWord(alternatives) {
28
+ const alt = alternatives
29
+ .map(a => a.replace(/([.*+?^${}()|[\]\\])/g, '\\$1').replace(/\s+/g, '\\s+'))
30
+ .join('|');
31
+ return new RegExp(`(?<![A-Za-z0-9-])(?:${alt})(?![A-Za-z0-9-])`, 'gi');
32
+ }
33
+ /**
34
+ * `cobolPattern` es para expresiones ya-regex: no toca lo que le pasas.
35
+ * Úsalo cuando el término lleva grupos opcionales (p. ej. `PIC X(n)?`).
36
+ */
37
+ function cobolPattern(patterns) {
38
+ return new RegExp(`(?<![A-Za-z0-9-])(?:${patterns.join('|')})(?![A-Za-z0-9-])`, 'gi');
39
+ }
40
+ export const GLOSSARY = [
41
+ // ── Tipos de dato / USAGE ────────────────────────────────────────────
42
+ {
43
+ id: 'comp3',
44
+ term: 'COMP-3',
45
+ sub: 'USAGE COMPUTATIONAL-3 · decimal empaquetado',
46
+ short: 'Decimal empaquetado: 2 dígitos por byte y el último medio-byte es el signo.',
47
+ what: 'Guarda un número decimal empaquetado: dos dígitos por byte, y el último medio-byte (nibble) es el signo. Un PIC S9(10)V99 COMP-3 son 6 bytes, no 12.',
48
+ why: 'Ahorra la mitad de espacio frente a DISPLAY (un byte por dígito) y las operaciones aritméticas son más rápidas en el hardware. Por eso casi todos los importes en COBOL son COMP-3.',
49
+ gotcha: 'No puedes volcarlo a un campo alfanumérico con MOVE y leerlo: son bytes empaquetados, no caracteres. Sale basura. Y comparar dos COMP-3 con distinto tamaño requiere un campo intermedio.',
50
+ example: '05 ACCT-BALANCE PIC S9(10)V99 COMP-3.\n* 12 dígitos → 6 bytes',
51
+ pattern: cobolWord(['COMP-3', 'COMPUTATIONAL-3', 'PACKED-DECIMAL']),
52
+ },
53
+ {
54
+ id: 'comp',
55
+ term: 'COMP',
56
+ sub: 'USAGE COMPUTATIONAL · binario',
57
+ short: 'Entero binario del hardware: 2, 4 u 8 bytes según los dígitos.',
58
+ what: 'Guarda un entero binario tal cual lo entiende la CPU (halfword, fullword o doubleword). PIC S9(4) COMP son 2 bytes; S9(8) COMP son 4; S9(18) COMP son 8.',
59
+ why: 'Es el tipo más rápido para contadores, subíndices e índices de tabla porque no necesita conversión.',
60
+ gotcha: 'El límite superior lo pone el número de dígitos declarados en PIC, no los bytes: S9(4) COMP acepta hasta ±9999 aunque el fullword daría para más.',
61
+ example: '05 WS-COUNT PIC S9(4) COMP.\n* hasta ±9999, 2 bytes',
62
+ pattern: cobolWord(['COMP', 'COMPUTATIONAL', 'BINARY']),
63
+ },
64
+ {
65
+ id: 'picx',
66
+ term: 'PIC X(n)',
67
+ sub: 'campo alfanumérico',
68
+ short: 'Alfanumérico de n caracteres, un byte por carácter.',
69
+ what: 'Reserva n caracteres, un byte cada uno. Guarda cualquier texto: letras, dígitos como texto, espacios, símbolos. Se rellena con espacios por la derecha si el valor es más corto.',
70
+ why: 'Es el tipo por defecto para lo que no es numérico de cálculo: claves, códigos, nombres, indicadores de una letra.',
71
+ gotcha: 'PIC X(4) con valor "7" guarda "7 " (con 3 espacios). Comparar contra "7" sin más da falso: hay que contar con el relleno o usar TRIM equivalente.',
72
+ example: '05 ACCT-ID PIC X(11).\n* "00000000042" ocupa 11 bytes',
73
+ pattern: cobolPattern(['PIC\\s+X(?:\\(\\d+\\))?', 'PICTURE\\s+X(?:\\(\\d+\\))?']),
74
+ },
75
+ {
76
+ id: 'pic9',
77
+ term: 'PIC 9(n)',
78
+ sub: 'campo numérico DISPLAY',
79
+ short: 'Numérico de n dígitos, un byte por dígito (formato texto).',
80
+ what: 'Reserva n dígitos, un byte cada uno. Sin USAGE explícito es DISPLAY: cada dígito es un carácter ASCII/EBCDIC. Se rellena con ceros por la izquierda.',
81
+ why: 'Es la forma más legible y la que se lee directamente en un dump. Los importes que no necesitan velocidad y los campos de fichero secuencial suelen ser 9 DISPLAY.',
82
+ gotcha: 'Ocupa mucho más que un COMP-3 equivalente. Un PIC 9(10) DISPLAY son 10 bytes; el COMP-3 son 6.',
83
+ example: '05 WS-COUNT PIC 9(4).\n* 4 bytes en DISPLAY',
84
+ pattern: cobolPattern(['PIC\\s+9(?:\\(\\d+\\))?', 'PICTURE\\s+9(?:\\(\\d+\\))?']),
85
+ },
86
+ {
87
+ id: 'picedit',
88
+ term: 'PIC editado',
89
+ sub: 'campo de presentación',
90
+ short: 'Campo para mostrar: cada Z, *, coma, punto o barra ocupa un byte real.',
91
+ what: 'Un PIC con caracteres de edición (Z, *, +, -, coma, punto, barra, B, 0, CR, DB): cada uno ocupa un byte de la memoria real. ZZ,ZZ9.99 son 9 bytes.',
92
+ why: 'Es como se preparan los importes para imprimir o mostrar: quita ceros a la izquierda, mete separadores, alinea el signo. No sirve para cálculo.',
93
+ gotcha: 'No puedes hacer ADD sobre un PIC editado. Y su tamaño no coincide con el del campo numérico que representa: no confundir 6 bytes de COMP-3 con los 9 de su presentación.',
94
+ example: '05 IMP-EDITADO PIC ZZ,ZZ9.99.\n* 9 bytes',
95
+ pattern: cobolWord(['numeric-edited']),
96
+ },
97
+ // ── Niveles especiales ───────────────────────────────────────────────
98
+ {
99
+ id: 'level88',
100
+ term: 'Nivel 88',
101
+ sub: 'condición con nombre',
102
+ short: 'Nombre legible para un valor concreto de un campo (una condición).',
103
+ what: 'No es un campo: es un nombre legible para un valor (o rango) del campo padre. CUENTA-ACTIVA es cierto cuando ACCT-STATUS = "A".',
104
+ why: 'Deja preguntar por el significado (IF CUENTA-ACTIVA) en vez de por la letra (IF ACCT-STATUS = "A"). Más legible, más difícil de romper y busca-fácil.',
105
+ gotcha: 'No ocupa memoria y no aparece en el layout de bytes. Si borras el campo padre, todos sus 88 desaparecen.',
106
+ example: '05 ACCT-STATUS PIC X.\n 88 CUENTA-ACTIVA VALUE "A".\n 88 CUENTA-CERRADA VALUE "C".',
107
+ pattern: /(?<![A-Za-z0-9-])(?:niveles?\s+88|88\s+level|level\s+88)(?![A-Za-z0-9-])/gi,
108
+ },
109
+ {
110
+ id: 'level66',
111
+ term: 'Nivel 66',
112
+ sub: 'RENAMES · vista alternativa',
113
+ short: 'Nombre alternativo para un tramo contiguo del registro (no reserva memoria).',
114
+ what: 'Renombra un tramo contiguo de campos del registro con un solo nombre. Como REDEFINES, es otra vista de bytes que ya existen; no reserva memoria nueva.',
115
+ why: 'Útil cuando parte de un registro representa un concepto que quieres tratar como un bloque (una clave compuesta, una zona de trabajo).',
116
+ gotcha: 'El rango tiene que ser contiguo. Si el fuente que aportas no tiene los dos extremos, el offset queda "no verificable".',
117
+ example: '01 REGISTRO.\n 05 F1 PIC X(2).\n 05 F2 PIC X(3).\n66 CLAVE-ENTERA RENAMES F1 THRU F2.',
118
+ pattern: /(?<![A-Za-z0-9-])(?:niveles?\s+66|RENAMES)(?![A-Za-z0-9-])/gi,
119
+ },
120
+ // ── Estructura de datos ──────────────────────────────────────────────
121
+ {
122
+ id: 'redefines',
123
+ term: 'REDEFINES',
124
+ sub: 'misma memoria, otra vista',
125
+ short: 'Otra vista sobre los mismos bytes: no reserva memoria nueva.',
126
+ what: 'Un campo con REDEFINES ocupa los mismos bytes que otro (o los mismos que un grupo). Ver los datos de dos formas distintas sin copiarlos.',
127
+ why: 'Común para tratar el mismo registro como texto o como campos numéricos, o para leer un fichero cuyas variantes ocupan el mismo espacio (unión).',
128
+ gotcha: 'Los REDEFINES no se pueden anidar libremente, y siempre van pegados al campo que redefinen. Si el original es más corto que el REDEFINES, COBOL reserva el máximo de los dos.',
129
+ example: '05 FECHA PIC 9(8).\n05 FECHA-PARTES REDEFINES FECHA.\n 10 F-ANIO PIC 9(4).\n 10 F-MES PIC 9(2).\n 10 F-DIA PIC 9(2).',
130
+ pattern: cobolWord(['REDEFINES']),
131
+ },
132
+ {
133
+ id: 'occurs',
134
+ term: 'OCCURS',
135
+ sub: 'tabla / array',
136
+ short: 'Repite un campo o grupo N veces (array).',
137
+ what: 'Un campo con OCCURS 10 es una tabla de 10 elementos consecutivos en memoria. Se accede con un subíndice: TABLA (I).',
138
+ why: 'Es la forma que tiene COBOL de declarar arrays. La variante DEPENDING ON hace la tabla de longitud variable.',
139
+ gotcha: 'El subíndice empieza en 1, no en 0. Y el compilador no comprueba límites: acceder a TABLA(99) en una tabla de 10 lee memoria contigua sin error.',
140
+ example: '05 TABLA OCCURS 10 TIMES.\n 10 T-ID PIC X(4).\n 10 T-IMP PIC S9(7)V99 COMP-3.',
141
+ pattern: cobolWord(['OCCURS']),
142
+ },
143
+ {
144
+ id: 'sync',
145
+ term: 'SYNCHRONIZED',
146
+ sub: 'alineación en memoria',
147
+ short: 'Alinea el campo a su frontera natural (puede añadir bytes de relleno).',
148
+ what: 'Fuerza al compilador a alinear un binario o un flotante a su frontera natural (2/4/8 bytes desde el inicio del 01). Puede dejar bytes de relleno vacíos delante.',
149
+ why: 'Necesario para que el hardware pueda leer una palabra completa de golpe sin penalización. Los punteros van alineados aunque no se escriba SYNC.',
150
+ gotcha: 'Si añades un SYNC a un registro existente, todos los offsets siguientes pueden desplazarse por los bytes de relleno. El parser te lo marca con la etiqueta "alineado".',
151
+ example: '05 WS-FLAG PIC X.\n05 WS-BIN PIC S9(8) COMP SYNC.\n* offset 4, con 3 bytes de relleno',
152
+ pattern: cobolWord(['SYNCHRONIZED', 'SYNC']),
153
+ },
154
+ {
155
+ id: 'fd',
156
+ term: 'FD',
157
+ sub: 'File Description',
158
+ short: 'Describe un fichero y el formato de sus registros (FILE SECTION).',
159
+ what: 'Bajo la FD se declaran los 01 que definen el layout de los registros del fichero. Es el puente entre el fichero físico y la estructura en memoria.',
160
+ why: 'El nombre del FD conecta con el SELECT ... ASSIGN, y este con el ddname del JCL. El fichero físico real lo decide el JCL, no el programa.',
161
+ gotcha: 'El nombre del FD es el interno del programa, no el ddname del JCL. Y un fichero puede tener varios 01 alternativos si tiene varios tipos de registro.',
162
+ example: 'FD ACCTFILE.\n01 ACCT-RECORD.\n 05 ACCT-ID PIC X(11).',
163
+ pattern: cobolWord(['FD', 'SD']),
164
+ },
165
+ // ── E/S y flujo ──────────────────────────────────────────────────────
166
+ {
167
+ id: 'read',
168
+ term: 'READ ... INTO',
169
+ sub: 'lectura de un registro',
170
+ short: 'Lee el siguiente registro del fichero. AT END marca el fin.',
171
+ what: 'Lee el siguiente registro del fichero y lo copia en una estructura de la WORKING-STORAGE. La cláusula AT END dispara cuando ya no quedan registros.',
172
+ why: 'Es el verbo con el que un batch recorre un fichero secuencial: un READ por vuelta del bucle, hasta que AT END pone el flag de fin.',
173
+ gotcha: 'Sin cláusula AT END (o NOT AT END), un READ tras el fin de fichero da un error de ejecución. Siempre hay que manejar el fin.',
174
+ example: 'READ ACCTFILE INTO WS-ACCOUNT\n AT END SET FIN-FICHERO TO TRUE\nEND-READ',
175
+ pattern: cobolWord(['READ INTO', 'READ', 'REWRITE', 'START']),
176
+ },
177
+ {
178
+ id: 'perform',
179
+ term: 'PERFORM',
180
+ sub: 'llamar a un párrafo · bucle',
181
+ short: 'Ejecuta un párrafo (y vuelve al terminar) o repite un bloque.',
182
+ what: 'Con destino: ejecuta ese párrafo/rango y devuelve el control al que llamó al terminar. En su forma inline (UNTIL/VARYING/N TIMES ... END-PERFORM) es un bucle.',
183
+ why: 'Es la forma estructurada de llamar a subrutinas dentro del programa. Distinto de GO TO, que no vuelve.',
184
+ gotcha: 'PERFORM A THRU B ejecuta desde A hasta el fin de B: cualquier párrafo que caiga en medio también se ejecuta, aunque no lo veas al llamarlo.',
185
+ example: 'PERFORM 2100-READ\nPERFORM 2000-LOOP UNTIL WS-EOF = "Y"\nPERFORM 3 TIMES\n ADD 1 TO WS-COUNT\nEND-PERFORM',
186
+ pattern: cobolWord(['PERFORM']),
187
+ },
188
+ {
189
+ id: 'call',
190
+ term: 'CALL',
191
+ sub: 'llamar a otro programa',
192
+ short: 'Llama a otro programa (módulo). Si el destino es una variable, es dinámica.',
193
+ what: 'Transfiere el control a otro programa COBOL. Con literal ("VALIDMOD") el destino es fijo; con nombre de variable, el destino solo se sabe en ejecución (dinámica).',
194
+ why: 'Es como se descompone una aplicación en módulos separados. USING pasa parámetros por referencia (o por valor, con BY VALUE).',
195
+ gotcha: 'Con CALL dinámico, el fichero JCL que da nombre al módulo real puede cambiar sin que el fuente del que llama cambie. El parser lo marca con "dinámico".',
196
+ example: 'CALL "VALIDMOD" USING WS-REGISTRO\nCALL WS-PGM-NAME USING WS-DATA',
197
+ pattern: cobolWord(['CALL']),
198
+ },
199
+ {
200
+ id: 'goto',
201
+ term: 'GO TO',
202
+ sub: 'salto sin retorno',
203
+ short: 'Salta a otro párrafo sin volver. En COBOL moderno, evitar.',
204
+ what: 'Transfiere el control a otro párrafo y NO vuelve al llamador. GO TO ... DEPENDING ON es una tabla de saltos según un valor.',
205
+ why: 'Es el único salto no estructurado de COBOL. Sobrevive por compatibilidad y porque a veces simplifica salidas de emergencia.',
206
+ gotcha: 'Un GO TO fuera de la sección/párrafo actual puede saltarse limpiezas críticas (cierres de fichero, ROLLBACK). Trátalos con lupa.',
207
+ example: 'IF WS-ERROR-GRAVE\n GO TO 9999-ABEND\nEND-IF',
208
+ pattern: cobolWord(['GO TO', 'GOTO']),
209
+ },
210
+ {
211
+ id: 'ends',
212
+ term: 'STOP RUN / GOBACK',
213
+ sub: 'fin del programa',
214
+ short: 'STOP RUN termina el job; GOBACK devuelve al llamador (o al SO si es raíz).',
215
+ what: 'STOP RUN termina la ejecución del job entero. GOBACK devuelve el control: al que llamó con CALL, o al sistema si es el programa raíz. EXIT PROGRAM = GOBACK.',
216
+ why: 'GOBACK es lo correcto en un módulo llamado (permite que el que te llamó siga); STOP RUN es lo correcto en el programa principal.',
217
+ gotcha: 'STOP RUN en un módulo llamado cierra el job entero, no solo tu módulo. Suele ser un bug.',
218
+ example: '9000-CLEANUP.\n CLOSE ACCTFILE.\n GOBACK.',
219
+ pattern: cobolWord(['STOP RUN', 'GOBACK', 'EXIT PROGRAM']),
220
+ },
221
+ // ── Condicionales ────────────────────────────────────────────────────
222
+ {
223
+ id: 'evaluate',
224
+ term: 'EVALUATE',
225
+ sub: 'switch estructurado',
226
+ short: 'Como un switch: WHEN por WHEN, con OTHER como default.',
227
+ what: 'Evalúa un sujeto (o TRUE) y elige la primera rama WHEN cuya condición se cumpla. WHEN OTHER es el "por defecto".',
228
+ why: 'Mucho más legible que un ELSE encadenado. Y EVALUATE TRUE deja escribir condiciones complejas sin anidar.',
229
+ gotcha: 'Solo se ejecuta la primera rama que casa; no hay "fall-through" como en C. Y sin WHEN OTHER, si nada casa, no pasa nada (silencio).',
230
+ example: 'EVALUATE WS-TIPO\n WHEN "A" PERFORM DO-A\n WHEN "B" WHEN "C" PERFORM DO-BC\n WHEN OTHER PERFORM DO-REST\nEND-EVALUATE',
231
+ pattern: cobolWord(['EVALUATE']),
232
+ },
233
+ // ── Recursos externos ────────────────────────────────────────────────
234
+ {
235
+ id: 'execsql',
236
+ term: 'EXEC SQL',
237
+ sub: 'DB2 embebido',
238
+ short: 'Bloque SQL para DB2 embebido en el fuente COBOL.',
239
+ what: 'Un bloque SQL delimitado por EXEC SQL ... END-EXEC. El preprocesador DB2 lo traduce a llamadas al runtime antes de compilar.',
240
+ why: 'Es como COBOL habla con DB2. Las host variables (`:WS-NAME`) mueven datos entre el programa y la base.',
241
+ gotcha: 'Hay que comprobar SQLCODE tras cada bloque, no solo tras el fallo. Un SQL dinámico (PREPARE/EXECUTE) es como CALL dinámico: no sabes qué tabla toca leyendo el fuente.',
242
+ example: 'EXEC SQL\n SELECT NAME INTO :WS-NAME\n FROM CUSTOMER\n WHERE ID = :WS-ID\nEND-EXEC',
243
+ pattern: /(?<![A-Za-z0-9-])EXEC\s+SQL(?![A-Za-z0-9-])/gi,
244
+ },
245
+ {
246
+ id: 'execcics',
247
+ term: 'EXEC CICS',
248
+ sub: 'transacción CICS',
249
+ short: 'Bloque CICS: envía maps, llama a programas, lee ficheros online.',
250
+ what: 'Un bloque CICS delimitado por EXEC CICS ... END-EXEC. Habla con el monitor CICS: pantallas (SEND MAP), programas (LINK), ficheros VSAM, colas.',
251
+ why: 'Es lo que convierte un programa COBOL en una transacción online. Sin CICS solo tienes batch.',
252
+ gotcha: 'El campo EIBRESP tras cada bloque dice si fue bien. Un HANDLE CONDITION captura errores para toda la transacción, así que un error puede resurgir lejos de donde ocurrió.',
253
+ example: 'EXEC CICS SEND MAP("MENU1") MAPSET("MENUSET") END-EXEC\nEXEC CICS LINK PROGRAM("SUBPRG") END-EXEC',
254
+ pattern: /(?<![A-Za-z0-9-])EXEC\s+CICS(?![A-Za-z0-9-])/gi,
255
+ },
256
+ {
257
+ id: 'copy',
258
+ term: 'COPY',
259
+ sub: 'inclusión de copybook',
260
+ short: 'Incluye un fragmento COBOL (copybook) tal cual.',
261
+ what: 'El preprocesador COBOL sustituye el COPY por el contenido del member. Con REPLACING, cambia identificadores sobre la marcha.',
262
+ why: 'Es la forma clásica de compartir estructuras de datos entre programas: un registro define el layout una sola vez y lo importan los que lo necesitan.',
263
+ gotcha: 'Si el copybook cambia, todos los programas que lo usan hay que recompilarlos. Y COPY REPLACING sustituye texto, no símbolos: puede romper cosas por accidente.',
264
+ example: 'WORKING-STORAGE SECTION.\n COPY CUSTREC.\n\n* con REPLACING\nCOPY CUSTREC REPLACING ==:PFX:== BY ==WS==.',
265
+ pattern: cobolWord(['COPY']),
266
+ },
267
+ // ── Secciones ────────────────────────────────────────────────────────
268
+ {
269
+ id: 'linkage',
270
+ term: 'LINKAGE SECTION',
271
+ sub: 'parámetros de entrada',
272
+ short: 'Lo que el programa recibe cuando otro lo llama con CALL.',
273
+ what: 'Declara los datos que llegan como parámetros. No reserva memoria: apunta a la memoria del programa que llamó.',
274
+ why: 'Es la contrapartida del USING de la CALL. Todo lo que quieres que un módulo pueda recibir va aquí.',
275
+ gotcha: 'Tocar la LINKAGE sin haber sido llamado (o desde el batch inicial) da un error de acceso a memoria. Y modificar un campo LINKAGE cambia el valor en el que llamó.',
276
+ example: 'LINKAGE SECTION.\n01 LK-PARM.\n 05 LK-CODIGO PIC X(3).\nPROCEDURE DIVISION USING LK-PARM.',
277
+ pattern: /(?<![A-Za-z0-9-])LINKAGE(?:\s+SECTION)?(?![A-Za-z0-9-])/gi,
278
+ },
279
+ {
280
+ id: 'workingstorage',
281
+ term: 'WORKING-STORAGE',
282
+ sub: 'memoria propia',
283
+ short: 'Memoria del programa: variables locales, contadores, buffers.',
284
+ what: 'Zona de datos propia del programa. Se inicializa una vez (con VALUE) y se mantiene entre invocaciones si el programa se llama varias veces.',
285
+ why: 'Es donde vive todo lo que el programa necesita para trabajar: contadores, flags, estructuras temporales, copias de registros de fichero.',
286
+ example: 'WORKING-STORAGE SECTION.\n01 WS-COUNT PIC S9(4) COMP VALUE 0.\n01 WS-FIN-EOF PIC X VALUE "N".',
287
+ pattern: /(?<![A-Za-z0-9-])WORKING-STORAGE(?:\s+SECTION)?(?![A-Za-z0-9-])/gi,
288
+ },
289
+ ];
290
+ /** Índice por id para el cajón (busca la ficha completa por su clave). */
291
+ export const GLOSSARY_BY_ID = Object.freeze(Object.fromEntries(GLOSSARY.map(e => [e.id, e])));
292
+ /**
293
+ * Trocea un texto en segmentos, marcando los que casan con un término del
294
+ * glosario. Los patrones más específicos ganan a los más generales (`COMP-3`
295
+ * antes que `COMP`) porque están antes en el array.
296
+ *
297
+ * Un mismo trozo del texto NO puede casar con dos términos: en cuanto un
298
+ * carácter queda cubierto por un match, los demás no lo tocan. Sin eso,
299
+ * "COMP-3" abriría el tooltip de "COMP-3" pero también el de "COMP" al
300
+ * pasar por sus cuatro primeras letras.
301
+ */
302
+ export function segmentText(text) {
303
+ const hits = [];
304
+ const claimed = new Array(text.length).fill(false);
305
+ for (const entry of GLOSSARY) {
306
+ // Los patrones globales llevan estado interno: nuevo RegExp por vuelta.
307
+ const re = new RegExp(entry.pattern.source, entry.pattern.flags);
308
+ for (const m of text.matchAll(re)) {
309
+ const start = m.index;
310
+ const end = start + m[0].length;
311
+ // Si algún carácter del match ya está reclamado por un término anterior,
312
+ // este cede: la especificidad se resuelve por orden en GLOSSARY.
313
+ let free = true;
314
+ for (let i = start; i < end; i++) {
315
+ if (claimed[i]) {
316
+ free = false;
317
+ break;
318
+ }
319
+ }
320
+ if (!free)
321
+ continue;
322
+ for (let i = start; i < end; i++)
323
+ claimed[i] = true;
324
+ hits.push({ start, end, term: entry });
325
+ }
326
+ }
327
+ hits.sort((a, b) => a.start - b.start);
328
+ const out = [];
329
+ let cursor = 0;
330
+ for (const h of hits) {
331
+ if (h.start > cursor)
332
+ out.push({ text: text.slice(cursor, h.start) });
333
+ out.push({ text: text.slice(h.start, h.end), term: h.term });
334
+ cursor = h.end;
335
+ }
336
+ if (cursor < text.length)
337
+ out.push({ text: text.slice(cursor) });
338
+ return out;
339
+ }
340
+ //# sourceMappingURL=glossary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glossary.js","sourceRoot":"","sources":["../src/glossary.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export { parse } from './parser.js';
2
+ export { parseFlow } from './flow-parser.js';
3
+ export { parseInventory } from './inventory.js';
4
+ export { collectReferences } from './references.js';
5
+ export { traceField } from './dataflow.js';
6
+ export { checkAdvisories } from './advisories.js';
7
+ export { renderDossier, type DossierInput } from './dossier.js';
8
+ export { GLOSSARY, GLOSSARY_BY_ID, segmentText, type GlossaryEntry, type Segment } from './glossary.js';
9
+ export { flowEdgeLabel, flowToMermaid, linkedFlowToMermaid } from './mermaid.js';
10
+ export { linkPrograms } from './linker.js';
11
+ export { explainProgram, SYSTEM_PROMPT, type ProgramFacts, type Explanation, type WalkthroughStep, } from './explain/explain.js';
12
+ export { factsFidelity, renderFacts, type FactsFidelity } from './explain/facts.js';
13
+ export { createClaudeProvider, DEFAULT_CLAUDE_MODEL, type ClaudeProviderOptions } from './explain/claude.js';
14
+ export { createOpenAICompatibleProvider, type OpenAICompatibleOptions, } from './explain/openai.js';
15
+ export { createFakeProvider, type FakeProvider } from './explain/fake.js';
16
+ export type { ExplanationProvider } from './explain/provider.js';
17
+ export type { Advisory, AdvisoryRule, ConditionValue, CrossProgramCall, CursorUsage, AssignmentEdge, DataSection, DataType, ExecBlock, FieldReference, FieldUsage, FileOperation, FileUsage, FileVerb, FlowEdge, FlowEdgeKind, FlowParagraph, FlowResult, Inventory, LinkedFlow, LinkedProgram, OccursDepending, ParseResult, ReferenceKind, ReferenceResult, RenamesGroup, SchemaField, TracePath, TraceResult, TraceStep, } from './types.js';
package/dist/index.js ADDED
@@ -0,0 +1,16 @@
1
+ export { parse } from './parser.js';
2
+ export { parseFlow } from './flow-parser.js';
3
+ export { parseInventory } from './inventory.js';
4
+ export { collectReferences } from './references.js';
5
+ export { traceField } from './dataflow.js';
6
+ export { checkAdvisories } from './advisories.js';
7
+ export { renderDossier } from './dossier.js';
8
+ export { GLOSSARY, GLOSSARY_BY_ID, segmentText } from './glossary.js';
9
+ export { flowEdgeLabel, flowToMermaid, linkedFlowToMermaid } from './mermaid.js';
10
+ export { linkPrograms } from './linker.js';
11
+ export { explainProgram, SYSTEM_PROMPT, } from './explain/explain.js';
12
+ export { factsFidelity, renderFacts } from './explain/facts.js';
13
+ export { createClaudeProvider, DEFAULT_CLAUDE_MODEL } from './explain/claude.js';
14
+ export { createOpenAICompatibleProvider, } from './explain/openai.js';
15
+ export { createFakeProvider } from './explain/fake.js';
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EAAE,aAAa,EAAqB,MAAM,cAAc,CAAA;AAC/D,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAoC,MAAM,eAAe,CAAA;AACvG,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EACL,cAAc,EACd,aAAa,GAId,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,aAAa,EAAE,WAAW,EAAsB,MAAM,oBAAoB,CAAA;AACnF,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAA8B,MAAM,qBAAqB,CAAA;AAC5G,OAAO,EACL,8BAA8B,GAE/B,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,kBAAkB,EAAqB,MAAM,mBAAmB,CAAA"}
@@ -0,0 +1,7 @@
1
+ import type { Inventory } from './types.js';
2
+ /**
3
+ * Extrae el inventario de E/S y bloques EXEC del fuente completo — los
4
+ * EXEC SQL viven tanto en WORKING-STORAGE (DECLARE CURSOR, INCLUDE) como
5
+ * en la PROCEDURE DIVISION, así que se recorre el programa entero.
6
+ */
7
+ export declare function parseInventory(source: string): Inventory;