@stevenvo780/st-lang 4.0.0 → 4.1.0

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 (133) hide show
  1. package/dist/proof-exchange/index.d.ts +4 -6
  2. package/dist/proof-exchange/index.d.ts.map +1 -1
  3. package/dist/proof-exchange/index.js +9 -5
  4. package/dist/proof-exchange/index.js.map +1 -1
  5. package/dist/tests/coverage-95/api-and-interpreter-e2e.test.d.ts +2 -0
  6. package/dist/tests/coverage-95/api-and-interpreter-e2e.test.d.ts.map +1 -0
  7. package/dist/tests/coverage-95/api-and-interpreter-e2e.test.js +255 -0
  8. package/dist/tests/coverage-95/api-and-interpreter-e2e.test.js.map +1 -0
  9. package/dist/tests/coverage-95/argumentation.test.d.ts +2 -0
  10. package/dist/tests/coverage-95/argumentation.test.d.ts.map +1 -0
  11. package/dist/tests/coverage-95/argumentation.test.js +105 -0
  12. package/dist/tests/coverage-95/argumentation.test.js.map +1 -0
  13. package/dist/tests/coverage-95/arithmetic.test.d.ts +2 -0
  14. package/dist/tests/coverage-95/arithmetic.test.d.ts.map +1 -0
  15. package/dist/tests/coverage-95/arithmetic.test.js +139 -0
  16. package/dist/tests/coverage-95/arithmetic.test.js.map +1 -0
  17. package/dist/tests/coverage-95/belnap.test.d.ts +2 -0
  18. package/dist/tests/coverage-95/belnap.test.d.ts.map +1 -0
  19. package/dist/tests/coverage-95/belnap.test.js +145 -0
  20. package/dist/tests/coverage-95/belnap.test.js.map +1 -0
  21. package/dist/tests/coverage-95/cdcl-v2-solver.test.d.ts +2 -0
  22. package/dist/tests/coverage-95/cdcl-v2-solver.test.d.ts.map +1 -0
  23. package/dist/tests/coverage-95/cdcl-v2-solver.test.js +61 -0
  24. package/dist/tests/coverage-95/cdcl-v2-solver.test.js.map +1 -0
  25. package/dist/tests/coverage-95/classical-propositional-direct.test.d.ts +2 -0
  26. package/dist/tests/coverage-95/classical-propositional-direct.test.d.ts.map +1 -0
  27. package/dist/tests/coverage-95/classical-propositional-direct.test.js +175 -0
  28. package/dist/tests/coverage-95/classical-propositional-direct.test.js.map +1 -0
  29. package/dist/tests/coverage-95/compat.test.d.ts +2 -0
  30. package/dist/tests/coverage-95/compat.test.d.ts.map +1 -0
  31. package/dist/tests/coverage-95/compat.test.js +82 -0
  32. package/dist/tests/coverage-95/compat.test.js.map +1 -0
  33. package/dist/tests/coverage-95/examples-runner.test.d.ts +2 -0
  34. package/dist/tests/coverage-95/examples-runner.test.d.ts.map +1 -0
  35. package/dist/tests/coverage-95/examples-runner.test.js +34 -0
  36. package/dist/tests/coverage-95/examples-runner.test.js.map +1 -0
  37. package/dist/tests/coverage-95/first-order.test.d.ts +2 -0
  38. package/dist/tests/coverage-95/first-order.test.d.ts.map +1 -0
  39. package/dist/tests/coverage-95/first-order.test.js +138 -0
  40. package/dist/tests/coverage-95/first-order.test.js.map +1 -0
  41. package/dist/tests/coverage-95/fol-prover.test.d.ts +2 -0
  42. package/dist/tests/coverage-95/fol-prover.test.d.ts.map +1 -0
  43. package/dist/tests/coverage-95/fol-prover.test.js +228 -0
  44. package/dist/tests/coverage-95/fol-prover.test.js.map +1 -0
  45. package/dist/tests/coverage-95/interpreter-commands.test.d.ts +2 -0
  46. package/dist/tests/coverage-95/interpreter-commands.test.d.ts.map +1 -0
  47. package/dist/tests/coverage-95/interpreter-commands.test.js +332 -0
  48. package/dist/tests/coverage-95/interpreter-commands.test.js.map +1 -0
  49. package/dist/tests/coverage-95/lsp-server.test.d.ts +2 -0
  50. package/dist/tests/coverage-95/lsp-server.test.d.ts.map +1 -0
  51. package/dist/tests/coverage-95/lsp-server.test.js +181 -0
  52. package/dist/tests/coverage-95/lsp-server.test.js.map +1 -0
  53. package/dist/tests/coverage-95/modal-tableau-profiles.test.d.ts +2 -0
  54. package/dist/tests/coverage-95/modal-tableau-profiles.test.d.ts.map +1 -0
  55. package/dist/tests/coverage-95/modal-tableau-profiles.test.js +157 -0
  56. package/dist/tests/coverage-95/modal-tableau-profiles.test.js.map +1 -0
  57. package/dist/tests/coverage-95/parallel-sat.test.d.ts +2 -0
  58. package/dist/tests/coverage-95/parallel-sat.test.d.ts.map +1 -0
  59. package/dist/tests/coverage-95/parallel-sat.test.js +42 -0
  60. package/dist/tests/coverage-95/parallel-sat.test.js.map +1 -0
  61. package/dist/tests/coverage-95/parser-extra.test.d.ts +2 -0
  62. package/dist/tests/coverage-95/parser-extra.test.d.ts.map +1 -0
  63. package/dist/tests/coverage-95/parser-extra.test.js +210 -0
  64. package/dist/tests/coverage-95/parser-extra.test.js.map +1 -0
  65. package/dist/tests/coverage-95/propositional-utilities.test.d.ts +2 -0
  66. package/dist/tests/coverage-95/propositional-utilities.test.d.ts.map +1 -0
  67. package/dist/tests/coverage-95/propositional-utilities.test.js +281 -0
  68. package/dist/tests/coverage-95/propositional-utilities.test.js.map +1 -0
  69. package/dist/tests/coverage-95/protocol-handler.test.d.ts +2 -0
  70. package/dist/tests/coverage-95/protocol-handler.test.d.ts.map +1 -0
  71. package/dist/tests/coverage-95/protocol-handler.test.js +275 -0
  72. package/dist/tests/coverage-95/protocol-handler.test.js.map +1 -0
  73. package/dist/tests/coverage-95/smt-mock-backend.test.d.ts +2 -0
  74. package/dist/tests/coverage-95/smt-mock-backend.test.d.ts.map +1 -0
  75. package/dist/tests/coverage-95/smt-mock-backend.test.js +201 -0
  76. package/dist/tests/coverage-95/smt-mock-backend.test.js.map +1 -0
  77. package/dist/tests/coverage-95/smt-serializer.test.d.ts +2 -0
  78. package/dist/tests/coverage-95/smt-serializer.test.d.ts.map +1 -0
  79. package/dist/tests/coverage-95/smt-serializer.test.js +143 -0
  80. package/dist/tests/coverage-95/smt-serializer.test.js.map +1 -0
  81. package/dist/tests/coverage-95/smt-subprocess.test.d.ts +2 -0
  82. package/dist/tests/coverage-95/smt-subprocess.test.d.ts.map +1 -0
  83. package/dist/tests/coverage-95/smt-subprocess.test.js +96 -0
  84. package/dist/tests/coverage-95/smt-subprocess.test.js.map +1 -0
  85. package/dist/tests/coverage-95/tableau-engine.test.d.ts +2 -0
  86. package/dist/tests/coverage-95/tableau-engine.test.d.ts.map +1 -0
  87. package/dist/tests/coverage-95/tableau-engine.test.js +125 -0
  88. package/dist/tests/coverage-95/tableau-engine.test.js.map +1 -0
  89. package/dist/tests/coverage-95/temporal-ltl.test.d.ts +2 -0
  90. package/dist/tests/coverage-95/temporal-ltl.test.d.ts.map +1 -0
  91. package/dist/tests/coverage-95/temporal-ltl.test.js +94 -0
  92. package/dist/tests/coverage-95/temporal-ltl.test.js.map +1 -0
  93. package/dist/tests/coverage-95/typecheck-checker.test.d.ts +2 -0
  94. package/dist/tests/coverage-95/typecheck-checker.test.d.ts.map +1 -0
  95. package/dist/tests/coverage-95/typecheck-checker.test.js +191 -0
  96. package/dist/tests/coverage-95/typecheck-checker.test.js.map +1 -0
  97. package/dist/tests/coverage-95/undecidability-detector.test.d.ts +2 -0
  98. package/dist/tests/coverage-95/undecidability-detector.test.d.ts.map +1 -0
  99. package/dist/tests/coverage-95/undecidability-detector.test.js +149 -0
  100. package/dist/tests/coverage-95/undecidability-detector.test.js.map +1 -0
  101. package/dist/tests/coverage-95/visitor.test.d.ts +2 -0
  102. package/dist/tests/coverage-95/visitor.test.d.ts.map +1 -0
  103. package/dist/tests/coverage-95/visitor.test.js +140 -0
  104. package/dist/tests/coverage-95/visitor.test.js.map +1 -0
  105. package/dist/tests/text-layer-v2/mdx-bridge/mdx-bridge.test.d.ts +2 -0
  106. package/dist/tests/text-layer-v2/mdx-bridge/mdx-bridge.test.d.ts.map +1 -0
  107. package/dist/tests/text-layer-v2/mdx-bridge/mdx-bridge.test.js +200 -0
  108. package/dist/tests/text-layer-v2/mdx-bridge/mdx-bridge.test.js.map +1 -0
  109. package/dist/text-layer/v2/index.d.ts +2 -0
  110. package/dist/text-layer/v2/index.d.ts.map +1 -1
  111. package/dist/text-layer/v2/index.js +7 -1
  112. package/dist/text-layer/v2/index.js.map +1 -1
  113. package/dist/text-layer/v2/mdx-bridge/diff.d.ts +13 -0
  114. package/dist/text-layer/v2/mdx-bridge/diff.d.ts.map +1 -0
  115. package/dist/text-layer/v2/mdx-bridge/diff.js +69 -0
  116. package/dist/text-layer/v2/mdx-bridge/diff.js.map +1 -0
  117. package/dist/text-layer/v2/mdx-bridge/index.d.ts +14 -0
  118. package/dist/text-layer/v2/mdx-bridge/index.d.ts.map +1 -0
  119. package/dist/text-layer/v2/mdx-bridge/index.js +21 -0
  120. package/dist/text-layer/v2/mdx-bridge/index.js.map +1 -0
  121. package/dist/text-layer/v2/mdx-bridge/parser.d.ts +33 -0
  122. package/dist/text-layer/v2/mdx-bridge/parser.d.ts.map +1 -0
  123. package/dist/text-layer/v2/mdx-bridge/parser.js +192 -0
  124. package/dist/text-layer/v2/mdx-bridge/parser.js.map +1 -0
  125. package/dist/text-layer/v2/mdx-bridge/serializer.d.ts +17 -0
  126. package/dist/text-layer/v2/mdx-bridge/serializer.d.ts.map +1 -0
  127. package/dist/text-layer/v2/mdx-bridge/serializer.js +69 -0
  128. package/dist/text-layer/v2/mdx-bridge/serializer.js.map +1 -0
  129. package/dist/text-layer/v2/mdx-bridge/types.d.ts +53 -0
  130. package/dist/text-layer/v2/mdx-bridge/types.d.ts.map +1 -0
  131. package/dist/text-layer/v2/mdx-bridge/types.js +19 -0
  132. package/dist/text-layer/v2/mdx-bridge/types.js.map +1 -0
  133. package/package.json +1 -1
@@ -0,0 +1,192 @@
1
+ "use strict";
2
+ /**
3
+ * MDX → Claim[] parser.
4
+ *
5
+ * Reconoce dos formatos en cualquier orden y en cualquier posición del
6
+ * documento (dentro de prosa, dentro de listas, etc):
7
+ *
8
+ * - HTML comment style:
9
+ * <!-- st:claim id="c1" profile="p" formula="A->B" deps="c0,c2" -->
10
+ *
11
+ * - Fenced code block style:
12
+ * ```st-claim id=c1 profile=p deps=c0
13
+ * A->B
14
+ * ```
15
+ *
16
+ * Bloques malformados (sin id, sin profile, sin formula, etc.) se ignoran
17
+ * acumulando un warning. NUNCA lanza.
18
+ */
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.stripMDXMetadata = exports.mdxToClaims = exports.mdxToClaimsDetailed = void 0;
21
+ const COMMENT_RE = /<!--\s*st:claim\s+([^]*?)-->/g;
22
+ // Fence: ```st-claim [opts]\n...body...\n```
23
+ // Tolerante con espacios y con el cierre exacto de 3 backticks.
24
+ const FENCE_RE = /```st-claim([^\n]*)\n([\s\S]*?)\n```/g;
25
+ const truncate = (s, max = 80) => s.length > max ? s.slice(0, max - 3) + '...' : s;
26
+ /**
27
+ * Parsea una lista de atributos clave=valor. Soporta:
28
+ * - id="c1" o id='c1' (con comillas)
29
+ * - id=c1 (sin comillas, hasta whitespace)
30
+ * - claves repetidas: la última gana
31
+ *
32
+ * Devuelve un mapa case-sensitive.
33
+ */
34
+ const parseAttrs = (raw) => {
35
+ const attrs = {};
36
+ // Pattern por iteración: key=value-con-o-sin-quotes
37
+ const re = /([a-zA-Z_][\w-]*)\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'`<>]+))/g;
38
+ let m;
39
+ while ((m = re.exec(raw)) !== null) {
40
+ const key = m[1];
41
+ if (key === undefined)
42
+ continue;
43
+ const value = m[2] ?? m[3] ?? m[4] ?? '';
44
+ attrs[key] = value;
45
+ }
46
+ return attrs;
47
+ };
48
+ const parseDeps = (raw) => {
49
+ if (!raw)
50
+ return [];
51
+ return raw
52
+ .split(',')
53
+ .map((s) => s.trim())
54
+ .filter((s) => s.length > 0);
55
+ };
56
+ const buildClaim = (attrs, formula, rawBlock, offset) => {
57
+ const id = attrs.id?.trim();
58
+ const profile = attrs.profile?.trim();
59
+ const trimmedFormula = formula.trim();
60
+ if (!id) {
61
+ return {
62
+ ok: false,
63
+ warning: {
64
+ offset,
65
+ message: 'st:claim sin id',
66
+ snippet: truncate(rawBlock),
67
+ },
68
+ };
69
+ }
70
+ if (!profile) {
71
+ return {
72
+ ok: false,
73
+ warning: {
74
+ offset,
75
+ message: `st:claim '${id}' sin profile`,
76
+ snippet: truncate(rawBlock),
77
+ },
78
+ };
79
+ }
80
+ if (!trimmedFormula) {
81
+ return {
82
+ ok: false,
83
+ warning: {
84
+ offset,
85
+ message: `st:claim '${id}' sin formula`,
86
+ snippet: truncate(rawBlock),
87
+ },
88
+ };
89
+ }
90
+ const dependencies = parseDeps(attrs.deps ?? attrs.dependencies);
91
+ const claim = {
92
+ id,
93
+ formula: trimmedFormula,
94
+ profile,
95
+ dependencies,
96
+ rawBlock,
97
+ };
98
+ // Source location (offset en el MDX original). docId queda vacío — el
99
+ // caller puede inyectarlo si necesita persistir.
100
+ claim.source = { docId: '', offset };
101
+ return { ok: true, claim };
102
+ };
103
+ /**
104
+ * Versión "rica" — devuelve también warnings. La API pública delega aquí.
105
+ */
106
+ const mdxToClaimsDetailed = (mdx) => {
107
+ const claims = [];
108
+ const warnings = [];
109
+ const seenIds = new Set();
110
+ // Reset stateful regex flags per call (defensa porque /g mantiene lastIndex).
111
+ COMMENT_RE.lastIndex = 0;
112
+ FENCE_RE.lastIndex = 0;
113
+ // 1) Comentarios HTML
114
+ let cm;
115
+ while ((cm = COMMENT_RE.exec(mdx)) !== null) {
116
+ const rawBlock = cm[0];
117
+ const attrRaw = cm[1] ?? '';
118
+ const offset = cm.index;
119
+ const attrs = parseAttrs(attrRaw);
120
+ // En comment-style, la fórmula viene en el atributo `formula`.
121
+ const formula = attrs.formula ?? '';
122
+ const built = buildClaim(attrs, formula, rawBlock, offset);
123
+ if (!built.ok) {
124
+ warnings.push(built.warning);
125
+ continue;
126
+ }
127
+ if (seenIds.has(built.claim.id)) {
128
+ warnings.push({
129
+ offset,
130
+ message: `st:claim id duplicado: '${built.claim.id}'`,
131
+ snippet: truncate(rawBlock),
132
+ });
133
+ continue;
134
+ }
135
+ seenIds.add(built.claim.id);
136
+ claims.push(built.claim);
137
+ }
138
+ // 2) Code fences ```st-claim
139
+ let fm;
140
+ while ((fm = FENCE_RE.exec(mdx)) !== null) {
141
+ const rawBlock = fm[0];
142
+ const attrRaw = fm[1] ?? '';
143
+ const body = fm[2] ?? '';
144
+ const offset = fm.index;
145
+ const attrs = parseAttrs(attrRaw);
146
+ const built = buildClaim(attrs, body, rawBlock, offset);
147
+ if (!built.ok) {
148
+ warnings.push(built.warning);
149
+ continue;
150
+ }
151
+ if (seenIds.has(built.claim.id)) {
152
+ warnings.push({
153
+ offset,
154
+ message: `st:claim id duplicado: '${built.claim.id}'`,
155
+ snippet: truncate(rawBlock),
156
+ });
157
+ continue;
158
+ }
159
+ seenIds.add(built.claim.id);
160
+ claims.push(built.claim);
161
+ }
162
+ // Orden estable por offset (mezcla comments + fences en orden de aparición).
163
+ claims.sort((a, b) => {
164
+ const ao = a.source?.offset ?? 0;
165
+ const bo = b.source?.offset ?? 0;
166
+ return ao - bo;
167
+ });
168
+ return { claims, warnings };
169
+ };
170
+ exports.mdxToClaimsDetailed = mdxToClaimsDetailed;
171
+ /**
172
+ * MDX → Claim[]. Tolera bloques malformados ignorándolos.
173
+ */
174
+ const mdxToClaims = (mdx) => {
175
+ return (0, exports.mdxToClaimsDetailed)(mdx).claims;
176
+ };
177
+ exports.mdxToClaims = mdxToClaims;
178
+ /**
179
+ * Helper interno: convierte MDXClaim a Claim "pelado" (sin rawBlock/source).
180
+ * Útil para diff que sólo compara campos lógicos.
181
+ */
182
+ const stripMDXMetadata = (claim) => {
183
+ const { id, formula, profile, dependencies } = claim;
184
+ return {
185
+ id,
186
+ formula,
187
+ profile,
188
+ dependencies: [...dependencies],
189
+ };
190
+ };
191
+ exports.stripMDXMetadata = stripMDXMetadata;
192
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../../src/text-layer/v2/mdx-bridge/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Claim[] → MDX serializer.
3
+ *
4
+ * Produce MDX con bloques sincronizables en formato 'comment' o 'fence'.
5
+ * El round-trip `mdxToClaims(claimsToMDX(claims))` reproduce los campos
6
+ * lógicos (id, formula, profile, dependencies) sin pérdida.
7
+ */
8
+ import type { Claim } from '../types';
9
+ import type { ClaimsToMDXOptions } from './types';
10
+ /**
11
+ * Claim[] → MDX string.
12
+ *
13
+ * Separa cada bloque con doble newline. El orden de salida respeta el
14
+ * orden del array de entrada.
15
+ */
16
+ export declare const claimsToMDX: (claims: Claim[], options?: ClaimsToMDXOptions) => string;
17
+ //# sourceMappingURL=serializer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serializer.d.ts","sourceRoot":"","sources":["../../../../src/text-layer/v2/mdx-bridge/serializer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEtC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAoDlD;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GAAI,QAAQ,KAAK,EAAE,EAAE,UAAS,kBAAuB,KAAG,MAI/E,CAAC"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ /**
3
+ * Claim[] → MDX serializer.
4
+ *
5
+ * Produce MDX con bloques sincronizables en formato 'comment' o 'fence'.
6
+ * El round-trip `mdxToClaims(claimsToMDX(claims))` reproduce los campos
7
+ * lógicos (id, formula, profile, dependencies) sin pérdida.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.claimsToMDX = void 0;
11
+ /**
12
+ * Escape para atributo entre comillas dobles. Reemplaza " por &quot; y
13
+ * mantiene el resto. No es HTML-completo (no escapa <>&) porque vive
14
+ * dentro de un comentario HTML, donde sólo "--" sería problemático.
15
+ *
16
+ * Si la fórmula contiene "--", la rompemos insertando un zero-width-space.
17
+ * En la práctica las fórmulas ST no contienen "--" (sí "<->", "->", etc.),
18
+ * así que es defense-in-depth.
19
+ */
20
+ const escapeAttr = (s) => s.replace(/"/g, '&quot;').replace(/--/g, '-​-');
21
+ const unescapedRoundtripCheck = (raw) => !raw.includes('--');
22
+ /**
23
+ * Para fence-style: los atributos no llevan comillas si el valor no tiene
24
+ * espacios ni caracteres especiales; si los tiene, usamos comillas dobles.
25
+ */
26
+ const fenceAttrValue = (value) => {
27
+ if (/^[A-Za-z0-9._\-:]+$/.test(value))
28
+ return value;
29
+ return `"${value.replace(/"/g, '\\"')}"`;
30
+ };
31
+ const formatComment = (claim) => {
32
+ const parts = [];
33
+ parts.push(`id="${escapeAttr(claim.id)}"`);
34
+ parts.push(`profile="${escapeAttr(claim.profile)}"`);
35
+ parts.push(`formula="${escapeAttr(claim.formula)}"`);
36
+ if (claim.dependencies.length > 0) {
37
+ parts.push(`deps="${escapeAttr(claim.dependencies.join(','))}"`);
38
+ }
39
+ // Sanity: el cierre `-->` del comentario no debe aparecer en los atributos.
40
+ const inside = parts.join(' ');
41
+ if (!unescapedRoundtripCheck(inside)) {
42
+ // Si quedó "--" tras escape, es un edge-case raro: igual emitimos y
43
+ // dejamos que el parser lo reconozca (regex es no-greedy).
44
+ }
45
+ return `<!-- st:claim ${inside} -->`;
46
+ };
47
+ const formatFence = (claim) => {
48
+ const headerParts = [];
49
+ headerParts.push(`id=${fenceAttrValue(claim.id)}`);
50
+ headerParts.push(`profile=${fenceAttrValue(claim.profile)}`);
51
+ if (claim.dependencies.length > 0) {
52
+ headerParts.push(`deps=${fenceAttrValue(claim.dependencies.join(','))}`);
53
+ }
54
+ const header = headerParts.join(' ');
55
+ return ['```st-claim ' + header, claim.formula, '```'].join('\n');
56
+ };
57
+ /**
58
+ * Claim[] → MDX string.
59
+ *
60
+ * Separa cada bloque con doble newline. El orden de salida respeta el
61
+ * orden del array de entrada.
62
+ */
63
+ const claimsToMDX = (claims, options = {}) => {
64
+ const template = options.template ?? 'fence';
65
+ const blocks = claims.map((c) => (template === 'comment' ? formatComment(c) : formatFence(c)));
66
+ return blocks.join('\n\n');
67
+ };
68
+ exports.claimsToMDX = claimsToMDX;
69
+ //# sourceMappingURL=serializer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serializer.js","sourceRoot":"","sources":["../../../../src/text-layer/v2/mdx-bridge/serializer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * MDX bridge — tipos públicos para conversión bidireccional Claim[] ↔ MDX.
3
+ *
4
+ * Una Claim se serializa en MDX con dos formatos posibles:
5
+ *
6
+ * 1. "comment" (compacto, una sola línea, atributos HTML):
7
+ * <!-- st:claim id="c1" profile="classical.propositional" formula="A->B" deps="c0" -->
8
+ *
9
+ * 2. "fence" (legible, multi-línea):
10
+ * ```st-claim id=c1 profile=classical.propositional deps=c0
11
+ * A->B
12
+ * ```
13
+ *
14
+ * En ambos formatos los IDs son únicos por documento. El parser conserva el
15
+ * texto crudo del bloque en `rawBlock` para poder reescribir o comparar.
16
+ */
17
+ import type { Claim } from '../types';
18
+ export interface MDXClaim extends Claim {
19
+ /** Texto completo del bloque tal como apareció en el MDX original. */
20
+ rawBlock: string;
21
+ }
22
+ export type MDXClaimTemplate = 'comment' | 'fence';
23
+ export interface ClaimsToMDXOptions {
24
+ /** Formato a emitir. Default: 'fence'. */
25
+ template?: MDXClaimTemplate;
26
+ }
27
+ export interface MDXDelta {
28
+ added: Claim[];
29
+ removed: string[];
30
+ modified: Array<{
31
+ id: string;
32
+ before: Claim;
33
+ after: Claim;
34
+ }>;
35
+ }
36
+ /**
37
+ * Warning emitido por el parser cuando encuentra un bloque malformado.
38
+ * El parser no lanza excepciones: ignora el bloque problemático y acumula
39
+ * warnings para diagnóstico.
40
+ */
41
+ export interface MDXParseWarning {
42
+ /** Posición aproximada (offset en el string de entrada). */
43
+ offset: number;
44
+ /** Mensaje legible describiendo qué falló. */
45
+ message: string;
46
+ /** Snippet del texto problemático (truncado). */
47
+ snippet: string;
48
+ }
49
+ export interface MDXParseResult {
50
+ claims: MDXClaim[];
51
+ warnings: MDXParseWarning[];
52
+ }
53
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/text-layer/v2/mdx-bridge/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEtC,MAAM,WAAW,QAAS,SAAQ,KAAK;IACrC,sEAAsE;IACtE,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,OAAO,CAAC;AAEnD,MAAM,WAAW,kBAAkB;IACjC,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,KAAK,EAAE,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE,CAAC,CAAC;CAC9D;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,4DAA4D;IAC5D,MAAM,EAAE,MAAM,CAAC;IACf,8CAA8C;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,iDAAiD;IACjD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,QAAQ,EAAE,CAAC;IACnB,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC7B"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ /**
3
+ * MDX bridge — tipos públicos para conversión bidireccional Claim[] ↔ MDX.
4
+ *
5
+ * Una Claim se serializa en MDX con dos formatos posibles:
6
+ *
7
+ * 1. "comment" (compacto, una sola línea, atributos HTML):
8
+ * <!-- st:claim id="c1" profile="classical.propositional" formula="A->B" deps="c0" -->
9
+ *
10
+ * 2. "fence" (legible, multi-línea):
11
+ * ```st-claim id=c1 profile=classical.propositional deps=c0
12
+ * A->B
13
+ * ```
14
+ *
15
+ * En ambos formatos los IDs son únicos por documento. El parser conserva el
16
+ * texto crudo del bloque en `rawBlock` para poder reescribir o comparar.
17
+ */
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/text-layer/v2/mdx-bridge/types.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stevenvo780/st-lang",
3
- "version": "4.0.0",
3
+ "version": "4.1.0",
4
4
  "description": "ST — Lenguaje ejecutable con nucleo logico y capa textual. Motor multi-perfil (11 lógicas), derivaciones, tablas de verdad, contramodelos, aliases modales, Belnap 4-valores y capa textual para formalización de documentos.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",