@stxt-lang/core 0.5.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 (169) hide show
  1. package/out/all.d.ts +19 -0
  2. package/out/all.js +42 -0
  3. package/out/all.js.map +1 -0
  4. package/out/core/Constants.d.ts +9 -0
  5. package/out/core/Constants.js +14 -0
  6. package/out/core/Constants.js.map +1 -0
  7. package/out/core/Line.d.ts +9 -0
  8. package/out/core/Line.js +17 -0
  9. package/out/core/Line.js.map +1 -0
  10. package/out/core/LineParser.d.ts +2 -0
  11. package/out/core/LineParser.js +72 -0
  12. package/out/core/LineParser.js.map +1 -0
  13. package/out/core/NameNamespace.d.ts +7 -0
  14. package/out/core/NameNamespace.js +17 -0
  15. package/out/core/NameNamespace.js.map +1 -0
  16. package/out/core/NameNamespaceParser.d.ts +5 -0
  17. package/out/core/NameNamespaceParser.js +43 -0
  18. package/out/core/NameNamespaceParser.js.map +1 -0
  19. package/out/core/NamespaceValidator.d.ts +4 -0
  20. package/out/core/NamespaceValidator.js +17 -0
  21. package/out/core/NamespaceValidator.js.map +1 -0
  22. package/out/core/Node.d.ts +29 -0
  23. package/out/core/Node.js +116 -0
  24. package/out/core/Node.js.map +1 -0
  25. package/out/core/NodeCreator.d.ts +3 -0
  26. package/out/core/NodeCreator.js +52 -0
  27. package/out/core/NodeCreator.js.map +1 -0
  28. package/out/core/ParseResult.d.ts +12 -0
  29. package/out/core/ParseResult.js +26 -0
  30. package/out/core/ParseResult.js.map +1 -0
  31. package/out/core/Parser.d.ts +16 -0
  32. package/out/core/Parser.js +142 -0
  33. package/out/core/Parser.js.map +1 -0
  34. package/out/core/StringUtils.d.ts +8 -0
  35. package/out/core/StringUtils.js +46 -0
  36. package/out/core/StringUtils.js.map +1 -0
  37. package/out/exceptions/ParseException.d.ts +6 -0
  38. package/out/exceptions/ParseException.js +17 -0
  39. package/out/exceptions/ParseException.js.map +1 -0
  40. package/out/exceptions/RuntimeException.d.ts +6 -0
  41. package/out/exceptions/RuntimeException.js +20 -0
  42. package/out/exceptions/RuntimeException.js.map +1 -0
  43. package/out/exceptions/ValidationException.d.ts +4 -0
  44. package/out/exceptions/ValidationException.js +13 -0
  45. package/out/exceptions/ValidationException.js.map +1 -0
  46. package/out/processors/Observer.d.ts +8 -0
  47. package/out/processors/Observer.js +3 -0
  48. package/out/processors/Observer.js.map +1 -0
  49. package/out/processors/Validator.d.ts +5 -0
  50. package/out/processors/Validator.js +3 -0
  51. package/out/processors/Validator.js.map +1 -0
  52. package/out/runtime/ConditionalValidator.d.ts +9 -0
  53. package/out/runtime/ConditionalValidator.js +18 -0
  54. package/out/runtime/ConditionalValidator.js.map +1 -0
  55. package/out/runtime/NodeWriter.d.ts +12 -0
  56. package/out/runtime/NodeWriter.js +59 -0
  57. package/out/runtime/NodeWriter.js.map +1 -0
  58. package/out/runtime/UnifiedSchemaProvider.d.ts +22 -0
  59. package/out/runtime/UnifiedSchemaProvider.js +80 -0
  60. package/out/runtime/UnifiedSchemaProvider.js.map +1 -0
  61. package/out/schema/ChildDefinition.d.ts +21 -0
  62. package/out/schema/ChildDefinition.js +50 -0
  63. package/out/schema/ChildDefinition.js.map +1 -0
  64. package/out/schema/NodeDefinition.d.ts +34 -0
  65. package/out/schema/NodeDefinition.js +74 -0
  66. package/out/schema/NodeDefinition.js.map +1 -0
  67. package/out/schema/Schema.d.ts +30 -0
  68. package/out/schema/Schema.js +43 -0
  69. package/out/schema/Schema.js.map +1 -0
  70. package/out/schema/SchemaParser.d.ts +3 -0
  71. package/out/schema/SchemaParser.js +117 -0
  72. package/out/schema/SchemaParser.js.map +1 -0
  73. package/out/schema/SchemaProvider.d.ts +4 -0
  74. package/out/schema/SchemaProvider.js +3 -0
  75. package/out/schema/SchemaProvider.js.map +1 -0
  76. package/out/schema/SchemaProviderMemory.d.ts +11 -0
  77. package/out/schema/SchemaProviderMemory.js +44 -0
  78. package/out/schema/SchemaProviderMemory.js.map +1 -0
  79. package/out/schema/SchemaProviderMeta.d.ts +8 -0
  80. package/out/schema/SchemaProviderMeta.js +92 -0
  81. package/out/schema/SchemaProviderMeta.js.map +1 -0
  82. package/out/schema/SchemaValidator.d.ts +16 -0
  83. package/out/schema/SchemaValidator.js +115 -0
  84. package/out/schema/SchemaValidator.js.map +1 -0
  85. package/out/schema/Type.d.ts +6 -0
  86. package/out/schema/Type.js +3 -0
  87. package/out/schema/Type.js.map +1 -0
  88. package/out/schema/TypeRegistry.d.ts +8 -0
  89. package/out/schema/TypeRegistry.js +69 -0
  90. package/out/schema/TypeRegistry.js.map +1 -0
  91. package/out/schema/type/BASE64.d.ts +2 -0
  92. package/out/schema/type/BASE64.js +30 -0
  93. package/out/schema/type/BASE64.js.map +1 -0
  94. package/out/schema/type/BINARY.d.ts +2 -0
  95. package/out/schema/type/BINARY.js +18 -0
  96. package/out/schema/type/BINARY.js.map +1 -0
  97. package/out/schema/type/BLOCK.d.ts +2 -0
  98. package/out/schema/type/BLOCK.js +16 -0
  99. package/out/schema/type/BLOCK.js.map +1 -0
  100. package/out/schema/type/BOOLEAN.d.ts +1 -0
  101. package/out/schema/type/BOOLEAN.js +6 -0
  102. package/out/schema/type/BOOLEAN.js.map +1 -0
  103. package/out/schema/type/DATE.d.ts +1 -0
  104. package/out/schema/type/DATE.js +6 -0
  105. package/out/schema/type/DATE.js.map +1 -0
  106. package/out/schema/type/EMAIL.d.ts +1 -0
  107. package/out/schema/type/EMAIL.js +6 -0
  108. package/out/schema/type/EMAIL.js.map +1 -0
  109. package/out/schema/type/ENUM.d.ts +2 -0
  110. package/out/schema/type/ENUM.js +21 -0
  111. package/out/schema/type/ENUM.js.map +1 -0
  112. package/out/schema/type/GROUP.d.ts +2 -0
  113. package/out/schema/type/GROUP.js +16 -0
  114. package/out/schema/type/GROUP.js.map +1 -0
  115. package/out/schema/type/HEXADECIMAL.d.ts +2 -0
  116. package/out/schema/type/HEXADECIMAL.js +18 -0
  117. package/out/schema/type/HEXADECIMAL.js.map +1 -0
  118. package/out/schema/type/INLINE.d.ts +2 -0
  119. package/out/schema/type/INLINE.js +16 -0
  120. package/out/schema/type/INLINE.js.map +1 -0
  121. package/out/schema/type/INTEGER.d.ts +1 -0
  122. package/out/schema/type/INTEGER.js +6 -0
  123. package/out/schema/type/INTEGER.js.map +1 -0
  124. package/out/schema/type/MARKDOWN.d.ts +2 -0
  125. package/out/schema/type/MARKDOWN.js +17 -0
  126. package/out/schema/type/MARKDOWN.js.map +1 -0
  127. package/out/schema/type/NATURAL.d.ts +1 -0
  128. package/out/schema/type/NATURAL.js +6 -0
  129. package/out/schema/type/NATURAL.js.map +1 -0
  130. package/out/schema/type/NUMBER.d.ts +1 -0
  131. package/out/schema/type/NUMBER.js +6 -0
  132. package/out/schema/type/NUMBER.js.map +1 -0
  133. package/out/schema/type/TEXT.d.ts +2 -0
  134. package/out/schema/type/TEXT.js +15 -0
  135. package/out/schema/type/TEXT.js.map +1 -0
  136. package/out/schema/type/TIME.d.ts +1 -0
  137. package/out/schema/type/TIME.js +6 -0
  138. package/out/schema/type/TIME.js.map +1 -0
  139. package/out/schema/type/TIMESTAMP.d.ts +1 -0
  140. package/out/schema/type/TIMESTAMP.js +6 -0
  141. package/out/schema/type/TIMESTAMP.js.map +1 -0
  142. package/out/schema/type/URL.d.ts +2 -0
  143. package/out/schema/type/URL.js +27 -0
  144. package/out/schema/type/URL.js.map +1 -0
  145. package/out/schema/type/UUID.d.ts +1 -0
  146. package/out/schema/type/UUID.js +6 -0
  147. package/out/schema/type/UUID.js.map +1 -0
  148. package/out/schema/type/binaryValue.d.ts +2 -0
  149. package/out/schema/type/binaryValue.js +13 -0
  150. package/out/schema/type/binaryValue.js.map +1 -0
  151. package/out/schema/type/regexType.d.ts +2 -0
  152. package/out/schema/type/regexType.js +20 -0
  153. package/out/schema/type/regexType.js.map +1 -0
  154. package/out/template/ChildLine.d.ts +12 -0
  155. package/out/template/ChildLine.js +28 -0
  156. package/out/template/ChildLine.js.map +1 -0
  157. package/out/template/ChildLineParser.d.ts +7 -0
  158. package/out/template/ChildLineParser.js +98 -0
  159. package/out/template/ChildLineParser.js.map +1 -0
  160. package/out/template/MetaTemplateSchemaProvider.d.ts +8 -0
  161. package/out/template/MetaTemplateSchemaProvider.js +35 -0
  162. package/out/template/MetaTemplateSchemaProvider.js.map +1 -0
  163. package/out/template/TemplateParser.d.ts +3 -0
  164. package/out/template/TemplateParser.js +214 -0
  165. package/out/template/TemplateParser.js.map +1 -0
  166. package/out/template/TemplateSchemaProviderMemory.d.ts +6 -0
  167. package/out/template/TemplateSchemaProviderMemory.js +37 -0
  168. package/out/template/TemplateSchemaProviderMemory.js.map +1 -0
  169. package/package.json +45 -0
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Parser = void 0;
4
+ const LineParser_1 = require("./LineParser");
5
+ const NodeCreator_1 = require("./NodeCreator");
6
+ const ParseResult_1 = require("./ParseResult");
7
+ const ParseException_1 = require("../exceptions/ParseException");
8
+ class Parser {
9
+ constructor() {
10
+ this.observers = [];
11
+ this.validators = [];
12
+ }
13
+ registerObserver(observer) {
14
+ this.observers.push(observer);
15
+ }
16
+ registerValidator(validator) {
17
+ this.validators.push(validator);
18
+ }
19
+ parse(content) {
20
+ const result = this.parseResult(content);
21
+ if (result.hasErrors()) {
22
+ const error = result.getErrors()[0];
23
+ throw error;
24
+ }
25
+ return result.getNodes();
26
+ }
27
+ parseResult(content) {
28
+ content = this.removeUTF8BOM(content);
29
+ const result = new ParseResult_1.ParseResult();
30
+ const stack = [];
31
+ const documents = [];
32
+ let lineNumber = 0;
33
+ const lines = content.split(/\r?\n/);
34
+ // El salto de línea final es terminador de la última línea, no una línea
35
+ // vacía adicional (evita añadir una línea espuria a un bloque >> en EOF, spec 10.3)
36
+ if (lines.length > 0 && lines[lines.length - 1] === "") {
37
+ lines.pop();
38
+ }
39
+ for (const line of lines) {
40
+ lineNumber++;
41
+ this.processLine(line, lineNumber, stack, documents, result);
42
+ }
43
+ // Cerrar todos los nodos pendientes al EOF
44
+ this.closeToLevel(stack, documents, 0, result);
45
+ // Agregar nodos al resultado
46
+ for (const doc of documents) {
47
+ result.addNode(doc);
48
+ }
49
+ // Retorno resultado
50
+ return result;
51
+ }
52
+ processLine(lineString, lineNumber, stack, documents, result) {
53
+ try {
54
+ const lastNode = stack.length === 0 ? null : stack[stack.length - 1];
55
+ const lastLevel = lastNode ? lastNode.getLevel() : 0;
56
+ const lastNodeText = lastNode ? lastNode.isTextNode() : false;
57
+ // Parseamos línea
58
+ const line = (0, LineParser_1.parseLine)(lineString, lastNodeText, lastLevel, lineNumber);
59
+ if (line.isComment) {
60
+ // Pasamos a observers
61
+ this.observers.forEach(observer => {
62
+ observer.onComment(lineNumber, lineString);
63
+ });
64
+ return;
65
+ }
66
+ const currentLevel = line.level;
67
+ // Si estamos dentro de un nodo texto, y el nivel indica que sigue siendo texto,
68
+ // añadimos línea de texto y no creamos nodo.
69
+ if (line.isBlock) {
70
+ lastNode.addTextLine(line.content);
71
+ // Notificar a observers sobre la línea de texto
72
+ this.observers.forEach(observer => {
73
+ observer.onTextLine(lastNode, lineNumber, lineString, line);
74
+ });
75
+ return;
76
+ }
77
+ // Si es línea vacía no hacemos nada
78
+ if (line.isEmpty()) {
79
+ return;
80
+ }
81
+ // Cerramos nodos hasta el nivel actual (esto "finaliza" y adjunta al padre/documentos)
82
+ this.closeToLevel(stack, documents, currentLevel, result);
83
+ // Creamos el nuevo nodo y lo dejamos "abierto" en la pila (NO lo adjuntamos aún)
84
+ const parent = stack.length === 0 ? null : stack[stack.length - 1];
85
+ const node = (0, NodeCreator_1.createNode)(line, lineNumber, currentLevel, parent);
86
+ // Pasamos a observers
87
+ this.observers.forEach(observer => {
88
+ observer.onCreate(node, lineString);
89
+ });
90
+ // Añadimos a stack
91
+ stack.push(node);
92
+ }
93
+ catch (e) {
94
+ this.handleError(e, lineNumber, result);
95
+ }
96
+ }
97
+ handleError(e, line, result, errorCode = "UNEXPECTED_ERROR", unknownErrorCode = "UNKNOWN_ERROR") {
98
+ if (e instanceof ParseException_1.ParseException) {
99
+ result.addError(e);
100
+ }
101
+ else if (e instanceof Error) {
102
+ // Convertir errores genéricos a ParseException
103
+ result.addError(new ParseException_1.ParseException(line, errorCode, e.message));
104
+ }
105
+ else {
106
+ // Error desconocido
107
+ result.addError(new ParseException_1.ParseException(line, unknownErrorCode, String(e)));
108
+ }
109
+ }
110
+ closeToLevel(stack, documents, targetLevel, result) {
111
+ while (stack.length > targetLevel) {
112
+ const completed = stack.pop();
113
+ // Pasamos validators
114
+ this.validators.forEach(validator => {
115
+ try {
116
+ const errors = validator.validate(completed);
117
+ errors.forEach(error => {
118
+ result.addError(error);
119
+ });
120
+ }
121
+ catch (e) {
122
+ this.handleError(e, completed.getLine(), result, "VALIDATION_ERROR", "UNKNOWN_VALIDATION_ERROR");
123
+ }
124
+ });
125
+ if (stack.length === 0) {
126
+ documents.push(completed);
127
+ }
128
+ else {
129
+ stack[stack.length - 1].addChild(completed);
130
+ }
131
+ // Pasamos a observers
132
+ this.observers.forEach(observer => {
133
+ observer.onFinish(completed);
134
+ });
135
+ }
136
+ }
137
+ removeUTF8BOM(content) {
138
+ return content.charCodeAt(0) === 0xfeff ? content.slice(1) : content;
139
+ }
140
+ }
141
+ exports.Parser = Parser;
142
+ //# sourceMappingURL=Parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Parser.js","sourceRoot":"","sources":["../../src/core/Parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export declare class StringUtils {
2
+ private constructor();
3
+ static rightTrim(s: string | null | undefined): string;
4
+ static cleanSpaces(input: string): string;
5
+ static lowerCase(input: string | null | undefined): string;
6
+ static compactSpaces(s: string | null | undefined): string;
7
+ static normalize(input: string | null | undefined): string;
8
+ }
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StringUtils = void 0;
4
+ class StringUtils {
5
+ constructor() {
6
+ }
7
+ // Usado para nodos name>>
8
+ static rightTrim(s) {
9
+ const value = s ?? "";
10
+ let i = value.length - 1;
11
+ while (i >= 0 && /\s/.test(value.charAt(i))) {
12
+ i--;
13
+ }
14
+ return value.substring(0, i + 1);
15
+ }
16
+ // Usado para nodos tipo Base64 y Hex
17
+ static cleanSpaces(input) {
18
+ return input.replace(/\s+/g, "");
19
+ }
20
+ // Usado para normalizar namespace
21
+ static lowerCase(input) {
22
+ // Equivalente práctico a Locale.ROOT en JS: evitar dependencias de locale del usuario
23
+ return (input ?? "").toLowerCase();
24
+ }
25
+ // Usados para name de los nodos
26
+ static compactSpaces(s) {
27
+ return (s ?? "").trim().replace(/\s+/g, " ");
28
+ }
29
+ // Usados para name normalizado de nodos (STXT-SPEC 4.3): NFC + minúsculas,
30
+ // conservando diacríticos y alfabetos no latinos (modelo IDN)
31
+ static normalize(input) {
32
+ let s = (input ?? "").trim();
33
+ if (s.length === 0) {
34
+ return "";
35
+ }
36
+ s = s.normalize("NFC");
37
+ s = s.toLowerCase();
38
+ // toda secuencia de separadores ('-', '_', espacios) => un solo '-'
39
+ s = s.replace(/[-_\s]+/g, "-");
40
+ // trim de '-'
41
+ s = s.replace(/^-+|-+$/g, "");
42
+ return s;
43
+ }
44
+ }
45
+ exports.StringUtils = StringUtils;
46
+ //# sourceMappingURL=StringUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StringUtils.js","sourceRoot":"","sources":["../../src/core/StringUtils.ts"],"names":[],"mappings":";;;AAAA,MAAa,WAAW;IACvB;IACA,CAAC;IAED,0BAA0B;IAC1B,MAAM,CAAC,SAAS,CAAC,CAA4B;QAC5C,MAAM,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7C,CAAC,EAAE,CAAC;QACL,CAAC;QACD,OAAO,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAClC,CAAC;IAED,qCAAqC;IACrC,MAAM,CAAC,WAAW,CAAC,KAAa;QAC/B,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAClC,CAAC;IAED,kCAAkC;IAClC,MAAM,CAAC,SAAS,CAAC,KAAgC;QAChD,sFAAsF;QACtF,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACpC,CAAC;IAED,gCAAgC;IAChC,MAAM,CAAC,aAAa,CAAC,CAA4B;QAChD,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9C,CAAC;IAED,2EAA2E;IAC3E,8DAA8D;IAC9D,MAAM,CAAC,SAAS,CAAC,KAAgC;QAChD,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpB,OAAO,EAAE,CAAC;QACX,CAAC;QAED,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;QAEpB,oEAAoE;QACpE,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QAE/B,cAAc;QACd,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAE9B,OAAO,CAAC,CAAC;IACV,CAAC;CACD;AAjDD,kCAiDC"}
@@ -0,0 +1,6 @@
1
+ export declare class ParseException extends Error {
2
+ readonly line: number;
3
+ readonly code: string;
4
+ constructor(line: number, code: string, message: string);
5
+ toString(): string;
6
+ }
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ParseException = void 0;
4
+ class ParseException extends Error {
5
+ constructor(line, code, message) {
6
+ super(message);
7
+ this.name = "ParseException";
8
+ this.line = line;
9
+ this.code = code;
10
+ Object.setPrototypeOf(this, ParseException.prototype);
11
+ }
12
+ toString() {
13
+ return `${this.name} [line=${this.line}, code=${this.code}]: ${this.message}`;
14
+ }
15
+ }
16
+ exports.ParseException = ParseException;
17
+ //# sourceMappingURL=ParseException.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ParseException.js","sourceRoot":"","sources":["../../src/exceptions/ParseException.ts"],"names":[],"mappings":";;;AAAA,MAAa,cAAe,SAAQ,KAAK;IAIxC,YAAY,IAAY,EAAE,IAAY,EAAE,OAAe;QACtD,KAAK,CAAC,OAAO,CAAC,CAAC;QAEf,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QAEjB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;IACvD,CAAC;IAED,QAAQ;QACP,OAAO,GAAG,IAAI,CAAC,IAAI,UAAU,IAAI,CAAC,IAAI,UAAU,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;IAC/E,CAAC;CACD;AAjBD,wCAiBC"}
@@ -0,0 +1,6 @@
1
+ export declare class RuntimeException extends Error {
2
+ readonly code: string;
3
+ constructor(code: string, message: string);
4
+ getCode(): string;
5
+ toString(): string;
6
+ }
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RuntimeException = void 0;
4
+ class RuntimeException extends Error {
5
+ constructor(code, message) {
6
+ super(message);
7
+ this.name = "RuntimeException";
8
+ this.code = code;
9
+ Object.setPrototypeOf(this, RuntimeException.prototype);
10
+ }
11
+ getCode() {
12
+ return this.code;
13
+ }
14
+ toString() {
15
+ const message = this.message;
16
+ return `${this.name}[${this.code}]${message ? `: ${message}` : ""}`;
17
+ }
18
+ }
19
+ exports.RuntimeException = RuntimeException;
20
+ //# sourceMappingURL=RuntimeException.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RuntimeException.js","sourceRoot":"","sources":["../../src/exceptions/RuntimeException.ts"],"names":[],"mappings":";;;AAAA,MAAa,gBAAiB,SAAQ,KAAK;IAG1C,YAAY,IAAY,EAAE,OAAe;QACxC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QAEjB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC;IACzD,CAAC;IAED,OAAO;QACN,OAAO,IAAI,CAAC,IAAI,CAAC;IAClB,CAAC;IAED,QAAQ;QACP,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACrE,CAAC;CACD;AAnBD,4CAmBC"}
@@ -0,0 +1,4 @@
1
+ import { ParseException } from "./ParseException";
2
+ export declare class ValidationException extends ParseException {
3
+ constructor(line: number, code: string, message: string);
4
+ }
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ValidationException = void 0;
4
+ const ParseException_1 = require("./ParseException");
5
+ class ValidationException extends ParseException_1.ParseException {
6
+ constructor(line, code, message) {
7
+ super(line, code, message);
8
+ this.name = "ValidationException";
9
+ Object.setPrototypeOf(this, ValidationException.prototype);
10
+ }
11
+ }
12
+ exports.ValidationException = ValidationException;
13
+ //# sourceMappingURL=ValidationException.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ValidationException.js","sourceRoot":"","sources":["../../src/exceptions/ValidationException.ts"],"names":[],"mappings":";;;AAAA,qDAAkD;AAElD,MAAa,mBAAoB,SAAQ,+BAAc;IACnD,YAAY,IAAY,EAAE,IAAY,EAAE,OAAe;QACnD,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;QAElC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,mBAAmB,CAAC,SAAS,CAAC,CAAC;IAC/D,CAAC;CACJ;AAPD,kDAOC"}
@@ -0,0 +1,8 @@
1
+ import { Line } from "../core/Line";
2
+ import { Node } from "../core/Node";
3
+ export interface Observer {
4
+ onCreate(node: Node, line: string): void;
5
+ onFinish(node: Node): void;
6
+ onComment(lineNumber: number, line: string): void;
7
+ onTextLine(node: Node, lineNumber: number, lineString: string, line: Line): void;
8
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=Observer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Observer.js","sourceRoot":"","sources":["../../src/processors/Observer.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ import { Node } from "../core/Node";
2
+ import { ValidationException } from "../exceptions/ValidationException";
3
+ export interface Validator {
4
+ validate(node: Node): ValidationException[];
5
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=Validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Validator.js","sourceRoot":"","sources":["../../src/processors/Validator.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ import { Node } from "../core/Node";
2
+ import { Validator } from "../processors/Validator";
3
+ import { SchemaValidator } from "../schema/SchemaValidator";
4
+ import { ValidationException } from "../exceptions/ValidationException";
5
+ export declare class ConditionalValidator implements Validator {
6
+ private readonly schemaValidator;
7
+ constructor(schemaValidator: SchemaValidator);
8
+ validate(node: Node): ValidationException[];
9
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConditionalValidator = void 0;
4
+ // Wrapper del validador que solo valida nodos con namespace
5
+ class ConditionalValidator {
6
+ constructor(schemaValidator) {
7
+ this.schemaValidator = schemaValidator;
8
+ }
9
+ validate(node) {
10
+ // Solo validar si tiene namespace
11
+ if (node.getNamespace() !== "") {
12
+ return this.schemaValidator.validate(node);
13
+ }
14
+ return [];
15
+ }
16
+ }
17
+ exports.ConditionalValidator = ConditionalValidator;
18
+ //# sourceMappingURL=ConditionalValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConditionalValidator.js","sourceRoot":"","sources":["../../src/runtime/ConditionalValidator.ts"],"names":[],"mappings":";;;AAKA,4DAA4D;AAC5D,MAAa,oBAAoB;IAG7B,YAAY,eAAgC;QACxC,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;IAC3C,CAAC;IAED,QAAQ,CAAC,IAAU;QACf,kCAAkC;QAClC,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,EAAE,CAAC;IACd,CAAC;CACJ;AAdD,oDAcC"}
@@ -0,0 +1,12 @@
1
+ import { Node } from "../core/Node";
2
+ export declare enum IndentStyle {
3
+ TABS = "TABS",
4
+ SPACES_4 = "SPACES_4"
5
+ }
6
+ export declare class NodeWriter {
7
+ private constructor();
8
+ static toSTXT(node: Node, style?: IndentStyle): string;
9
+ static toSTXTDocs(docs: ReadonlyArray<Node>, style?: IndentStyle): string;
10
+ private static writeNode;
11
+ private static indent;
12
+ }
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NodeWriter = exports.IndentStyle = void 0;
4
+ var IndentStyle;
5
+ (function (IndentStyle) {
6
+ IndentStyle["TABS"] = "TABS";
7
+ IndentStyle["SPACES_4"] = "SPACES_4";
8
+ })(IndentStyle || (exports.IndentStyle = IndentStyle = {}));
9
+ class NodeWriter {
10
+ constructor() { }
11
+ static toSTXT(node, style = IndentStyle.TABS) {
12
+ const out = [];
13
+ NodeWriter.writeNode(out, node, 0, style, "");
14
+ return out.join("");
15
+ }
16
+ static toSTXTDocs(docs, style = IndentStyle.TABS) {
17
+ const out = [];
18
+ for (let i = 0; i < docs.length; i++) {
19
+ if (i > 0) {
20
+ out.push("\n");
21
+ }
22
+ NodeWriter.writeNode(out, docs[i], 0, style, "");
23
+ }
24
+ return out.join("");
25
+ }
26
+ static writeNode(out, n, depth, style, parentNs) {
27
+ NodeWriter.indent(out, depth, style);
28
+ const ns = n.getNamespace();
29
+ out.push(n.getName());
30
+ if (ns.length > 0 && ns !== parentNs) {
31
+ out.push(" (", ns, ")");
32
+ }
33
+ if (n.isTextNode()) {
34
+ out.push(" >>\n");
35
+ for (const line of n.getTextLines()) {
36
+ NodeWriter.indent(out, depth + 1, style);
37
+ out.push(line, "\n");
38
+ }
39
+ }
40
+ else {
41
+ out.push(":");
42
+ const value = n.getValue();
43
+ if (value.length > 0) {
44
+ out.push(" ", value);
45
+ }
46
+ out.push("\n");
47
+ }
48
+ for (const child of n.getChildren()) {
49
+ NodeWriter.writeNode(out, child, depth + 1, style, ns);
50
+ }
51
+ }
52
+ static indent(out, depth, style) {
53
+ if (depth > 0) {
54
+ out.push(style === IndentStyle.SPACES_4 ? " ".repeat(depth) : "\t".repeat(depth));
55
+ }
56
+ }
57
+ }
58
+ exports.NodeWriter = NodeWriter;
59
+ //# sourceMappingURL=NodeWriter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NodeWriter.js","sourceRoot":"","sources":["../../src/runtime/NodeWriter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { Schema } from "../schema/Schema";
2
+ import { SchemaProvider } from "../schema/SchemaProvider";
3
+ /**
4
+ * Provider unificado que maneja tanto schemas como templates.
5
+ * Detecta automáticamente el tipo según el namespace del nodo raíz:
6
+ * - @stxt.template => procesa como template
7
+ * - @stxt.schema => procesa como schema
8
+ * - otros => no hace nada
9
+ */
10
+ export declare class UnifiedSchemaProvider implements SchemaProvider {
11
+ private readonly schemas;
12
+ private readonly schemaMeta;
13
+ private readonly templateMeta;
14
+ constructor();
15
+ getSchema(namespace: string): Schema | undefined | null;
16
+ addFile(text: string): void;
17
+ private addTemplateNode;
18
+ private addSchemaNode;
19
+ private static throwIfInvalid;
20
+ clear(): void;
21
+ getAllSchemas(): ReadonlyArray<Schema>;
22
+ }
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UnifiedSchemaProvider = void 0;
4
+ const Parser_1 = require("../core/Parser");
5
+ const StringUtils_1 = require("../core/StringUtils");
6
+ const SchemaProviderMeta_1 = require("../schema/SchemaProviderMeta");
7
+ const SchemaParser_1 = require("../schema/SchemaParser");
8
+ const SchemaValidator_1 = require("../schema/SchemaValidator");
9
+ const MetaTemplateSchemaProvider_1 = require("../template/MetaTemplateSchemaProvider");
10
+ const TemplateParser_1 = require("../template/TemplateParser");
11
+ /**
12
+ * Provider unificado que maneja tanto schemas como templates.
13
+ * Detecta automáticamente el tipo según el namespace del nodo raíz:
14
+ * - @stxt.template => procesa como template
15
+ * - @stxt.schema => procesa como schema
16
+ * - otros => no hace nada
17
+ */
18
+ class UnifiedSchemaProvider {
19
+ constructor() {
20
+ this.schemas = new Map();
21
+ this.schemaMeta = new SchemaProviderMeta_1.SchemaProviderMeta();
22
+ this.templateMeta = new MetaTemplateSchemaProvider_1.MetaTemplateSchemaProvider();
23
+ }
24
+ getSchema(namespace) {
25
+ const key = StringUtils_1.StringUtils.lowerCase(namespace);
26
+ if (namespace === "@stxt.template") {
27
+ return this.templateMeta.getSchema(key);
28
+ }
29
+ else if (namespace === "@stxt.schema") {
30
+ return this.schemaMeta.getSchema(key);
31
+ }
32
+ let result = this.schemas.get(key);
33
+ return result;
34
+ }
35
+ addFile(text) {
36
+ const parser = new Parser_1.Parser();
37
+ const nodes = parser.parse(text);
38
+ for (const node of nodes) {
39
+ const namespace = node.getNamespace();
40
+ if (namespace === "@stxt.template") {
41
+ this.addTemplateNode(node);
42
+ }
43
+ else if (namespace === "@stxt.schema") {
44
+ this.addSchemaNode(node);
45
+ }
46
+ }
47
+ }
48
+ addTemplateNode(node) {
49
+ // Validar contra el meta-schema de templates
50
+ const schemaValidator = new SchemaValidator_1.SchemaValidator(this.templateMeta, true);
51
+ UnifiedSchemaProvider.throwIfInvalid(schemaValidator.validate(node));
52
+ // Transformar el template a schema
53
+ const schema = (0, TemplateParser_1.transformTemplateNodeToSchema)(node);
54
+ const key = StringUtils_1.StringUtils.lowerCase(schema.getNamespace());
55
+ this.schemas.set(key, schema);
56
+ }
57
+ addSchemaNode(node) {
58
+ // Validar contra el meta-schema de schemas
59
+ const schemaValidator = new SchemaValidator_1.SchemaValidator(this.schemaMeta, true);
60
+ UnifiedSchemaProvider.throwIfInvalid(schemaValidator.validate(node));
61
+ // Transformar el nodo a schema
62
+ const schema = (0, SchemaParser_1.transformNodeToSchema)(node);
63
+ const key = StringUtils_1.StringUtils.lowerCase(schema.getNamespace());
64
+ this.schemas.set(key, schema);
65
+ }
66
+ // Un schema/template que no valida contra su meta-schema no debe cargarse
67
+ static throwIfInvalid(errors) {
68
+ if (errors.length > 0) {
69
+ throw errors[0];
70
+ }
71
+ }
72
+ clear() {
73
+ this.schemas.clear();
74
+ }
75
+ getAllSchemas() {
76
+ return Array.from(this.schemas.values());
77
+ }
78
+ }
79
+ exports.UnifiedSchemaProvider = UnifiedSchemaProvider;
80
+ //# sourceMappingURL=UnifiedSchemaProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UnifiedSchemaProvider.js","sourceRoot":"","sources":["../../src/runtime/UnifiedSchemaProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export declare class ChildDefinition {
2
+ private readonly normalizedName;
3
+ private readonly name;
4
+ private readonly namespace;
5
+ private readonly min;
6
+ private readonly max;
7
+ constructor(name: string, namespace: string | null | undefined, min: number | null, max: number | null, numLine: number);
8
+ getName(): string;
9
+ getNormalizedName(): string;
10
+ getNamespace(): string;
11
+ getMin(): number | null;
12
+ getMax(): number | null;
13
+ getQualifiedName(): string;
14
+ toJSON(): {
15
+ name: string;
16
+ normalizedName: string;
17
+ namespace: string;
18
+ min: number | null;
19
+ max: number | null;
20
+ };
21
+ }
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ChildDefinition = void 0;
4
+ const NamespaceValidator_1 = require("../core/NamespaceValidator");
5
+ const ValidationException_1 = require("../exceptions/ValidationException");
6
+ const StringUtils_1 = require("../core/StringUtils");
7
+ class ChildDefinition {
8
+ constructor(name, namespace, min, max, numLine) {
9
+ this.name = StringUtils_1.StringUtils.compactSpaces(name);
10
+ this.normalizedName = StringUtils_1.StringUtils.normalize(name);
11
+ this.namespace = StringUtils_1.StringUtils.lowerCase(namespace);
12
+ this.min = min;
13
+ this.max = max;
14
+ NamespaceValidator_1.NamespaceValidator.validateNamespaceFormat(this.namespace, numLine);
15
+ if (this.normalizedName.length === 0) {
16
+ throw new ValidationException_1.ValidationException(numLine, "INVALID_NODE_NAME", `Node name not valid: ${name}`);
17
+ }
18
+ }
19
+ getName() {
20
+ return this.name;
21
+ }
22
+ getNormalizedName() {
23
+ return this.normalizedName;
24
+ }
25
+ getNamespace() {
26
+ return this.namespace;
27
+ }
28
+ getMin() {
29
+ return this.min;
30
+ }
31
+ getMax() {
32
+ return this.max;
33
+ }
34
+ getQualifiedName() {
35
+ return this.namespace.length === 0
36
+ ? this.normalizedName
37
+ : `${this.namespace}:${this.normalizedName}`;
38
+ }
39
+ toJSON() {
40
+ return {
41
+ name: this.getName(),
42
+ normalizedName: this.getNormalizedName(),
43
+ namespace: this.getNamespace(),
44
+ min: this.getMin(),
45
+ max: this.getMax(),
46
+ };
47
+ }
48
+ }
49
+ exports.ChildDefinition = ChildDefinition;
50
+ //# sourceMappingURL=ChildDefinition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChildDefinition.js","sourceRoot":"","sources":["../../src/schema/ChildDefinition.ts"],"names":[],"mappings":";;;AAAA,mEAAgE;AAChE,2EAAwE;AACxE,qDAAkD;AAElD,MAAa,eAAe;IAO3B,YAAY,IAAY,EAAE,SAAoC,EAAE,GAAkB,EAAE,GAAkB,EAAE,OAAe;QACtH,IAAI,CAAC,IAAI,GAAG,yBAAW,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,cAAc,GAAG,yBAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,CAAC,SAAS,GAAG,yBAAW,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAClD,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QAEf,uCAAkB,CAAC,uBAAuB,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAEpE,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,yCAAmB,CAAC,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,IAAI,EAAE,CAAC,CAAC;QAC7F,CAAC;IACF,CAAC;IAED,OAAO;QACN,OAAO,IAAI,CAAC,IAAI,CAAC;IAClB,CAAC;IAED,iBAAiB;QAChB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC5B,CAAC;IAED,YAAY;QACX,OAAO,IAAI,CAAC,SAAS,CAAC;IACvB,CAAC;IAED,MAAM;QACL,OAAO,IAAI,CAAC,GAAG,CAAC;IACjB,CAAC;IAED,MAAM;QACL,OAAO,IAAI,CAAC,GAAG,CAAC;IACjB,CAAC;IAED,gBAAgB;QACf,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;YACjC,CAAC,CAAC,IAAI,CAAC,cAAc;YACrB,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;IAC/C,CAAC;IAED,MAAM;QACL,OAAO;YACN,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE;YACpB,cAAc,EAAE,IAAI,CAAC,iBAAiB,EAAE;YACxC,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE;YAC9B,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE;YAClB,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE;SAClB,CAAC;IACH,CAAC;CAED;AAzDD,0CAyDC"}