@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
package/dist/pic.js ADDED
@@ -0,0 +1,197 @@
1
+ /**
2
+ * Expande repeticiones en una cláusula PIC.
3
+ * "X(10)" → "XXXXXXXXXX", "9(3)V9(2)" → "999V99"
4
+ */
5
+ function expandPic(raw) {
6
+ return raw.replace(/([XABSV9P0Z*+\-,./$])\((\d+)\)/gi, (_m, ch, n) => ch.repeat(Number(n)));
7
+ }
8
+ function normalizeUsage(usage) {
9
+ return (usage ?? 'DISPLAY').toUpperCase().replace(/[-\s]/g, '');
10
+ }
11
+ /**
12
+ * Tamaño de un campo binario (COMP/BINARY) según el número de dígitos
13
+ * decimales que representa — convención estándar IBM Enterprise COBOL:
14
+ * 1-4 dígitos → halfword (2 bytes), 5-9 → fullword (4 bytes), 10-18 → doubleword (8 bytes).
15
+ */
16
+ function binarySize(totalDigits) {
17
+ if (totalDigits <= 4)
18
+ return 2;
19
+ if (totalDigits <= 9)
20
+ return 4;
21
+ return 8;
22
+ }
23
+ /**
24
+ * Determina si un PIC expandido es numérico, editado-numérico o alfanumérico.
25
+ * Numérico puro: solo 9, S, V, P.
26
+ * Editado numérico: contiene algún carácter de edición — Z y * (supresión),
27
+ * + y - (signo), $ (moneda), coma, punto, barra, B (espacio), 0 (inserción
28
+ * de cero), o los sufijos CR/DB.
29
+ * Alfanumérico: contiene X o A.
30
+ *
31
+ * Se ejecuta sobre el PIC ya expandido, así que el 0 de `9(10)` no llega
32
+ * hasta aquí: solo se ve un 0 escrito como posición de inserción.
33
+ */
34
+ function classifyPic(expanded) {
35
+ if (/[XA]/i.test(expanded))
36
+ return 'alphanumeric';
37
+ if (/[Z*+\-,./B0$]|CR|DB/i.test(expanded))
38
+ return 'numeric-edited';
39
+ return 'numeric';
40
+ }
41
+ /**
42
+ * Cuenta bytes DISPLAY de un PIC expandido. Cada carácter posicional = 1 byte,
43
+ * excepto V (decimal implícito, 0 bytes), S (signo embebido, 0 bytes a menos
44
+ * que SIGN SEPARATE), y CR/DB (2 bytes cada uno — pero en el expandido cada
45
+ * letra ya está separada: C, R se cuentan individualmente, 1+1=2).
46
+ */
47
+ function displayBytes(expanded, signSeparate) {
48
+ let bytes = 0;
49
+ for (const ch of expanded) {
50
+ const upper = ch.toUpperCase();
51
+ if (upper === 'V')
52
+ continue;
53
+ if (upper === 'S') {
54
+ if (signSeparate)
55
+ bytes++;
56
+ continue;
57
+ }
58
+ // P (scaling) no ocupa byte físico
59
+ if (upper === 'P')
60
+ continue;
61
+ bytes++;
62
+ }
63
+ return bytes || 1;
64
+ }
65
+ /**
66
+ * Cuenta las posiciones de dígito de un PIC expandido: 9, Z y * (los dos
67
+ * últimos son dígitos suprimibles, no adornos) y P (scaling, que cuenta
68
+ * como dígito aunque no ocupe byte). El signo (S, + o -) y los caracteres
69
+ * de inserción (coma, barra, B, 0, CR, DB) NO son dígitos.
70
+ *
71
+ * La parte decimal se separa por V (decimal implícito) o por el punto de
72
+ * un PIC editado: en `ZZ,ZZ9.99` los dos últimos 9 son decimales, igual
73
+ * que en `9(5)V99`.
74
+ */
75
+ function countDigits(expanded) {
76
+ const noSign = expanded.replace(/^S/i, '');
77
+ const parts = noSign.split(/[V.]/i);
78
+ const intPart = parts[0] ?? '';
79
+ const decPart = parts[1] ?? '';
80
+ function digitCount(s) {
81
+ let count = 0;
82
+ for (const ch of s) {
83
+ const upper = ch.toUpperCase();
84
+ if (upper === '9' || upper === 'Z' || upper === '*' || upper === 'P')
85
+ count++;
86
+ }
87
+ return count;
88
+ }
89
+ const intDigits = digitCount(intPart);
90
+ const decDigits = digitCount(decPart);
91
+ return { total: intDigits + decDigits, decimal: decDigits };
92
+ }
93
+ /**
94
+ * Parsea una cláusula PIC (y USAGE) y calcula tipo y longitud en bytes.
95
+ * COMP-1/COMP-2 no requieren PIC — su tamaño es fijo (float de 4/8 bytes).
96
+ */
97
+ export function parsePic(rawPicture, usage, options) {
98
+ const normalizedUsage = normalizeUsage(usage);
99
+ const picture = (rawPicture ?? '').toUpperCase().replace(/\s+/g, '');
100
+ if (normalizedUsage === 'COMP1') {
101
+ return { type: 'float-single', picture, totalDigits: 0, decimalDigits: 0, lengthInBytes: 4 };
102
+ }
103
+ if (normalizedUsage === 'COMP2') {
104
+ return { type: 'float-double', picture, totalDigits: 0, decimalDigits: 0, lengthInBytes: 8 };
105
+ }
106
+ // Punteros e índices no llevan PIC: su tamaño lo fija el USAGE. Tamaños
107
+ // de IBM Enterprise COBOL en AMODE 31, que es el modo por defecto; en
108
+ // LP64 un POINTER son 8 bytes.
109
+ if (normalizedUsage === 'POINTER' || normalizedUsage === 'FUNCTIONPOINTER') {
110
+ return { type: 'pointer', picture, totalDigits: 0, decimalDigits: 0, lengthInBytes: 4 };
111
+ }
112
+ if (normalizedUsage === 'PROCEDUREPOINTER') {
113
+ return { type: 'pointer', picture, totalDigits: 0, decimalDigits: 0, lengthInBytes: 8 };
114
+ }
115
+ if (normalizedUsage === 'INDEX') {
116
+ return { type: 'index', picture, totalDigits: 0, decimalDigits: 0, lengthInBytes: 4 };
117
+ }
118
+ const expanded = expandPic(picture);
119
+ const classification = classifyPic(expanded);
120
+ if (classification === 'alphanumeric') {
121
+ const len = displayBytes(expanded, false);
122
+ return {
123
+ type: 'alphanumeric',
124
+ picture,
125
+ totalDigits: 0,
126
+ decimalDigits: 0,
127
+ lengthInBytes: len,
128
+ };
129
+ }
130
+ const { total: totalDigits, decimal: decDigits } = countDigits(expanded);
131
+ if (normalizedUsage === 'COMP3' || normalizedUsage === 'PACKEDDECIMAL') {
132
+ const bytes = Math.ceil((totalDigits + 1) / 2);
133
+ return {
134
+ type: 'packed-decimal',
135
+ picture,
136
+ totalDigits,
137
+ decimalDigits: decDigits,
138
+ lengthInBytes: bytes,
139
+ };
140
+ }
141
+ if (normalizedUsage === 'COMP' || normalizedUsage === 'BINARY') {
142
+ return {
143
+ type: 'binary',
144
+ picture,
145
+ totalDigits,
146
+ decimalDigits: decDigits,
147
+ lengthInBytes: binarySize(totalDigits),
148
+ };
149
+ }
150
+ const bytes = displayBytes(expanded, options?.signSeparate === true);
151
+ return {
152
+ // Un PIC editado es un campo de presentación: los caracteres de
153
+ // inserción ocupan bytes reales pero no son dígitos con los que
154
+ // se pueda operar. Distinguirlo evita que la tabla de esquema
155
+ // sugiera que ZZ,ZZ9.99 se comporta como 9(7)V99.
156
+ type: classification === 'numeric-edited' ? 'numeric-edited' : 'numeric',
157
+ picture,
158
+ totalDigits,
159
+ decimalDigits: decDigits,
160
+ lengthInBytes: bytes,
161
+ };
162
+ }
163
+ /** USAGE que no requiere PIC para determinar su tamaño (floats, punteros, índices) */
164
+ export function usageImpliesFixedSize(usage) {
165
+ const n = normalizeUsage(usage);
166
+ return (n === 'COMP1' ||
167
+ n === 'COMP2' ||
168
+ n === 'POINTER' ||
169
+ n === 'PROCEDUREPOINTER' ||
170
+ n === 'FUNCTIONPOINTER' ||
171
+ n === 'INDEX');
172
+ }
173
+ /**
174
+ * Frontera de alineación en bytes que exige un campo, o 1 si no exige
175
+ * ninguna. SYNCHRONIZED alinea los binarios y los flotantes; los punteros
176
+ * y los índices van alineados siempre, lleven SYNC o no.
177
+ *
178
+ * La alineación es relativa al principio del registro 01, y los bytes de
179
+ * relleno que deja delante no pertenecen a ningún campo — por eso hay que
180
+ * contarlos para que los offsets siguientes sean ciertos.
181
+ */
182
+ export function alignmentOf(type, lengthInBytes, synchronized) {
183
+ if (type === 'pointer' || type === 'index')
184
+ return lengthInBytes >= 8 ? 8 : 4;
185
+ if (!synchronized)
186
+ return 1;
187
+ if (type === 'float-single')
188
+ return 4;
189
+ if (type === 'float-double')
190
+ return 8;
191
+ // Binario: media palabra, palabra o doble palabra según su tamaño.
192
+ if (type === 'binary')
193
+ return lengthInBytes >= 8 ? 8 : lengthInBytes >= 4 ? 4 : 2;
194
+ // DISPLAY y COMP-3 no se alinean: SYNC no les afecta.
195
+ return 1;
196
+ }
197
+ //# sourceMappingURL=pic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pic.js","sourceRoot":"","sources":["../src/pic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { ParseResult, ReferenceResult } from './types.js';
2
+ /**
3
+ * Where-used por campo: para cada data-name del esquema, dónde se LEE y
4
+ * dónde se ESCRIBE en la PROCEDURE DIVISION, anclado a párrafo y línea.
5
+ *
6
+ * Misma disciplina que el resto del motor (ADR-0003): se reconoce un
7
+ * subconjunto de verbos con reparto de roles bien definido (MOVE, COMPUTE,
8
+ * la aritmética, SET, INITIALIZE, STRING/UNSTRING, INSPECT, READ/RETURN
9
+ * INTO, WRITE/REWRITE FROM, PERFORM VARYING, los contextos de condición) y
10
+ * los host variables de EXEC SQL/CICS. Todo lo demás se MARCA, no se
11
+ * inventa:
12
+ * - un argumento BY REFERENCE de una CALL, un MOVE CORRESPONDING, un
13
+ * host variable de SQL dinámico o un homónimo del esquema → `uncertain`;
14
+ * - una ocurrencia real de un campo en un verbo que el motor no modela
15
+ * todavía → `unclassified` (se toca ahí, pero no se afirma el rol);
16
+ * - un nombre en posición de operando que no casa con el esquema →
17
+ * `unknownNames` (puede estar en un copybook ausente).
18
+ *
19
+ * El rol se decide por la SENTENCIA completa, no por la línea: una MOVE
20
+ * puede repartirse en varias líneas y el operando destino está tras el TO.
21
+ * Por eso se acumula el texto hasta el punto y se trocea por verbos, con
22
+ * un mapa offset→línea para anclar cada token a su línea real del fuente.
23
+ */
24
+ export declare function collectReferences(source: string, data?: ParseResult | undefined): ReferenceResult;