@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,12 @@
1
+ export declare class ChildLine {
2
+ private readonly min;
3
+ private readonly max;
4
+ private readonly values;
5
+ private readonly type;
6
+ constructor(type: string | null, min: number | null, max: number | null, values: string[] | null);
7
+ getType(): string | null;
8
+ getMin(): number | null;
9
+ getMax(): number | null;
10
+ getValues(): string[] | null;
11
+ toString(): string;
12
+ }
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ChildLine = void 0;
4
+ class ChildLine {
5
+ constructor(type, min, max, values) {
6
+ this.type = type;
7
+ this.min = min;
8
+ this.max = max;
9
+ this.values = values;
10
+ }
11
+ getType() {
12
+ return this.type;
13
+ }
14
+ getMin() {
15
+ return this.min;
16
+ }
17
+ getMax() {
18
+ return this.max;
19
+ }
20
+ getValues() {
21
+ return this.values;
22
+ }
23
+ toString() {
24
+ return `ChildLine [type=${this.type}, min=${this.min}, max=${this.max}, values=${this.values ? `[${this.values.join(", ")}]` : "null"}]`;
25
+ }
26
+ }
27
+ exports.ChildLine = ChildLine;
28
+ //# sourceMappingURL=ChildLine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChildLine.js","sourceRoot":"","sources":["../../src/template/ChildLine.ts"],"names":[],"mappings":";;;AAAA,MAAa,SAAS;IAMlB,YAAY,IAAmB,EAAE,GAAkB,EAAE,GAAkB,EAAE,MAAuB;QAC5F,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAED,OAAO;QAEH,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,MAAM;QACF,OAAO,IAAI,CAAC,GAAG,CAAC;IACpB,CAAC;IAED,MAAM;QACF,OAAO,IAAI,CAAC,GAAG,CAAC;IACpB,CAAC;IAED,SAAS;QACL,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAED,QAAQ;QACJ,OAAO,mBAAmB,IAAI,CAAC,IAAI,SAAS,IAAI,CAAC,GAAG,SAAS,IAAI,CAAC,GAAG,YAAY,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAC3H,GAAG,CAAC;IACZ,CAAC;CACJ;AAlCD,8BAkCC"}
@@ -0,0 +1,7 @@
1
+ import { ChildLine } from "./ChildLine";
2
+ export declare class ChildLineParser {
3
+ private constructor();
4
+ private static readonly CHILD_LINE_PATTERN;
5
+ static parse(rawLine: string, lineNumber: number): ChildLine;
6
+ private static parseCount;
7
+ }
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ChildLineParser = void 0;
4
+ const ValidationException_1 = require("../exceptions/ValidationException");
5
+ const ChildLine_1 = require("./ChildLine");
6
+ class ChildLineParser {
7
+ constructor() { }
8
+ static parse(rawLine, lineNumber) {
9
+ if (rawLine.trim().length === 0) {
10
+ return new ChildLine_1.ChildLine(null, null, null, null);
11
+ }
12
+ const m = ChildLineParser.CHILD_LINE_PATTERN.exec(rawLine);
13
+ if (!m) {
14
+ throw new ValidationException_1.ValidationException(lineNumber, "INVALID_CHILD_LINE", `Line not valid: ${rawLine}`);
15
+ }
16
+ // m[1]=count, m[2]=type, m[3]=values
17
+ let type = m[2]?.trim() ?? "";
18
+ if (type.length === 0) {
19
+ type = null;
20
+ }
21
+ const count = (m[1] ?? "").trim();
22
+ let min = null;
23
+ let max = null;
24
+ if (count.length === 0 || count === "*") {
25
+ min = null;
26
+ max = null;
27
+ }
28
+ else if (count === "?") {
29
+ min = null;
30
+ max = 1;
31
+ }
32
+ else if (count === "+") {
33
+ min = 1;
34
+ max = null;
35
+ }
36
+ else if (count.endsWith("+")) {
37
+ min = ChildLineParser.parseCount(count.substring(0, count.length - 1), count, rawLine, lineNumber);
38
+ max = null;
39
+ }
40
+ else if (count.endsWith("-")) {
41
+ min = null;
42
+ max = ChildLineParser.parseCount(count.substring(0, count.length - 1), count, rawLine, lineNumber);
43
+ }
44
+ else if (count.includes(",")) {
45
+ const parts = count.split(",");
46
+ if (parts.length !== 2) {
47
+ throw new ValidationException_1.ValidationException(lineNumber, "INVALID_CHILD_COUNT", `Invalid count ${count} in line: ${rawLine}`);
48
+ }
49
+ const aNum = ChildLineParser.parseCount(parts[0].trim(), count, rawLine, lineNumber);
50
+ const bNum = ChildLineParser.parseCount(parts[1].trim(), count, rawLine, lineNumber);
51
+ // Cardinalidad inválida si min > max (STXT-TEMPLATE-SPEC 7.1)
52
+ if (aNum > bNum) {
53
+ throw new ValidationException_1.ValidationException(lineNumber, "MIN_GREATER_THAN_MAX", `Min ${aNum} greater than Max ${bNum} in line: ${rawLine}`);
54
+ }
55
+ min = aNum;
56
+ max = bNum;
57
+ }
58
+ else {
59
+ min = ChildLineParser.parseCount(count, count, rawLine, lineNumber);
60
+ max = min;
61
+ }
62
+ // values
63
+ let values = null;
64
+ const valuesStr = m[3];
65
+ if (valuesStr !== null && valuesStr !== undefined) {
66
+ const parts = valuesStr.split(",");
67
+ const list = [];
68
+ for (let part of parts) {
69
+ part = part.trim();
70
+ if (part.length === 0) {
71
+ continue;
72
+ }
73
+ if (list.includes(part)) {
74
+ throw new ValidationException_1.ValidationException(lineNumber, "VALUE_DUPLICATED", `The values ${part} is duplicated`);
75
+ }
76
+ list.push(part);
77
+ }
78
+ // Los corchetes presentes (aunque vengan vacíos, "[]") cuentan como una definición
79
+ // explícita de valores: se devuelve un array no-nulo (posiblemente vacío) para
80
+ // distinguirlo de la ausencia total de corchetes (valuesStr null/undefined, values
81
+ // permanece null). Así "[]" se trata como redefinición/definición real (ported
82
+ // from stxt-java).
83
+ values = list;
84
+ }
85
+ // type es string|null en nuestra clase
86
+ return new ChildLine_1.ChildLine(type ?? null, min, max, values);
87
+ }
88
+ // num, min y max deben ser enteros no negativos, sin texto sobrante (STXT-TEMPLATE-SPEC 7.1)
89
+ static parseCount(num, count, rawLine, lineNumber) {
90
+ if (!/^\d+$/.test(num)) {
91
+ throw new ValidationException_1.ValidationException(lineNumber, "INVALID_CHILD_COUNT", `Invalid count ${count} in line: ${rawLine}`);
92
+ }
93
+ return parseInt(num, 10);
94
+ }
95
+ }
96
+ exports.ChildLineParser = ChildLineParser;
97
+ ChildLineParser.CHILD_LINE_PATTERN = /^\s*(?:\(\s*([^()\s][^)]*?)\s*\)\s*)?([^()[\]]*)?(?:\[\s*([^]*?)\s*\]\s*)?\s*$/;
98
+ //# sourceMappingURL=ChildLineParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChildLineParser.js","sourceRoot":"","sources":["../../src/template/ChildLineParser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { Schema } from "../schema/Schema";
2
+ import { SchemaProvider } from "../schema/SchemaProvider";
3
+ export declare class MetaTemplateSchemaProvider implements SchemaProvider {
4
+ private static readonly META_TEXT;
5
+ private readonly meta;
6
+ constructor();
7
+ getSchema(namespace: string): Schema;
8
+ }
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MetaTemplateSchemaProvider = void 0;
4
+ const Parser_1 = require("../core/Parser");
5
+ const ValidationException_1 = require("../exceptions/ValidationException");
6
+ const RuntimeException_1 = require("../exceptions/RuntimeException");
7
+ const TemplateParser_1 = require("./TemplateParser");
8
+ class MetaTemplateSchemaProvider {
9
+ constructor() {
10
+ const parser = new Parser_1.Parser();
11
+ const nodes = parser.parse(MetaTemplateSchemaProvider.META_TEXT);
12
+ if (nodes.length !== 1) {
13
+ throw new ValidationException_1.ValidationException(0, "META_SCHEMA_INVALID", `Meta schema must produce exactly 1 document, got ${nodes.length}`);
14
+ }
15
+ this.meta = (0, TemplateParser_1.transformTemplateNodeToSchema)(nodes[0]);
16
+ }
17
+ getSchema(namespace) {
18
+ if (namespace !== "@stxt.template") {
19
+ throw new RuntimeException_1.RuntimeException("RESOURCE_NOT_FOUND", `Not found '${namespace}' in namespace: @stxt.template`);
20
+ }
21
+ // meta siempre existe si el constructor terminó, pero lo dejamos equivalente al Java
22
+ if (!this.meta) {
23
+ throw new ValidationException_1.ValidationException(0, "META_SCHEMA_NOT_AVAILABLE", "Meta schema not available");
24
+ }
25
+ return this.meta;
26
+ }
27
+ }
28
+ exports.MetaTemplateSchemaProvider = MetaTemplateSchemaProvider;
29
+ MetaTemplateSchemaProvider.META_TEXT = `Template (@stxt.template): @stxt.template
30
+ \tStructure >>
31
+ \t\tTemplate (@stxt.template):
32
+ \t\t\tDescription: (?) TEXT
33
+ \t\t\tStructure: (1) BLOCK
34
+ `;
35
+ //# sourceMappingURL=MetaTemplateSchemaProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MetaTemplateSchemaProvider.js","sourceRoot":"","sources":["../../src/template/MetaTemplateSchemaProvider.ts"],"names":[],"mappings":";;;AAAA,2CAAwC;AAMxC,2EAAwE;AACxE,qEAAkE;AAClE,qDAAiE;AAEjE,MAAa,0BAA0B;IAUtC;QACC,MAAM,MAAM,GAAG,IAAI,eAAM,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAW,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,SAAS,CAAC,CAAC;QAEzE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,yCAAmB,CAC5B,CAAC,EACD,qBAAqB,EACrB,oDAAoD,KAAK,CAAC,MAAM,EAAE,CAClE,CAAC;QACH,CAAC;QAED,IAAI,CAAC,IAAI,GAAG,IAAA,8CAA6B,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,SAAS,CAAC,SAAiB;QAC1B,IAAI,SAAS,KAAK,gBAAgB,EAAE,CAAC;YACpC,MAAM,IAAI,mCAAgB,CAAC,oBAAoB,EAAE,cAAc,SAAS,gCAAgC,CAAC,CAAC;QAC3G,CAAC;QAED,qFAAqF;QACrF,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAChB,MAAM,IAAI,yCAAmB,CAAC,CAAC,EAAE,2BAA2B,EAAE,2BAA2B,CAAC,CAAC;QAC5F,CAAC;QAED,OAAO,IAAI,CAAC,IAAI,CAAC;IAClB,CAAC;;AApCF,gEAqCC;AApCwB,oCAAS,GAAG;;;;;CAKpC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Node } from "../core/Node";
2
+ import { Schema } from "../schema/Schema";
3
+ export declare function transformTemplateNodeToSchema(node: Node): Schema;
@@ -0,0 +1,214 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.transformTemplateNodeToSchema = transformTemplateNodeToSchema;
4
+ const Parser_1 = require("../core/Parser");
5
+ const ValidationException_1 = require("../exceptions/ValidationException");
6
+ const ChildDefinition_1 = require("../schema/ChildDefinition");
7
+ const NodeDefinition_1 = require("../schema/NodeDefinition");
8
+ const Schema_1 = require("../schema/Schema");
9
+ const StringUtils_1 = require("../core/StringUtils");
10
+ const ChildLineParser_1 = require("./ChildLineParser");
11
+ const ParseException_1 = require("../exceptions/ParseException");
12
+ const TypeRegistry_1 = require("../schema/TypeRegistry");
13
+ function transformTemplateNodeToSchema(node) {
14
+ // Insertamos namespace
15
+ const result = new Schema_1.Schema(node.getValue(), node.getLine(), undefined);
16
+ // Buscamos nodo structure
17
+ const structure = node.getChild("structure");
18
+ if (!structure) {
19
+ throw new ValidationException_1.ValidationException(node.getLine(), "TEMPLATE_STRUCTURE_REQUIRED", "Template must define 'Structure >>'");
20
+ }
21
+ const text = structure.getText();
22
+ const offset = structure.getLine();
23
+ // Creamos un parser simple
24
+ const parser = new Parser_1.Parser();
25
+ // Parseamos para los nodos
26
+ try {
27
+ const nodes = parser.parse(text);
28
+ // Vamos iterando todos los nodos insertando
29
+ for (const n of nodes) {
30
+ addToSchema(result, n);
31
+ }
32
+ }
33
+ catch (e) {
34
+ // ValidationException extiende ParseException: comprobar primero para no degradar
35
+ // la severidad (la extensión pinta ValidationException como Warning)
36
+ if (e instanceof ValidationException_1.ValidationException) {
37
+ throw new ValidationException_1.ValidationException(e.line + offset, e.code, e.message);
38
+ }
39
+ if (e instanceof ParseException_1.ParseException) {
40
+ throw new ParseException_1.ParseException(e.line + offset, e.code, e.message);
41
+ }
42
+ throw e;
43
+ }
44
+ // Buscamos descripciones
45
+ const description = node.getChild("description");
46
+ if (description) {
47
+ const text = description.getText();
48
+ try {
49
+ const nodes = parser.parse(text);
50
+ addDescriptions(result, nodes);
51
+ }
52
+ catch (e) {
53
+ if (e instanceof ValidationException_1.ValidationException) {
54
+ throw new ValidationException_1.ValidationException(e.line + description.getLine(), e.code, e.message);
55
+ }
56
+ if (e instanceof ParseException_1.ParseException) {
57
+ throw new ParseException_1.ParseException(e.line + description.getLine(), e.code, e.message);
58
+ }
59
+ throw e;
60
+ }
61
+ }
62
+ // Retornamos resultado
63
+ return result;
64
+ }
65
+ function addToSchema(schema, node) {
66
+ // Obtenemos nombre qualificado
67
+ let namespace = node.getNamespace();
68
+ const name = node.getName();
69
+ // Miramos datos
70
+ let cl = ChildLineParser_1.ChildLineParser.parse(node.getValue(), node.getLine());
71
+ if (!namespace || namespace === "") {
72
+ namespace = schema.getNamespace();
73
+ }
74
+ if (namespace !== schema.getNamespace()) {
75
+ // Un nodo externo solo puede declarar cardinalidad: ni tipo, ni valores ENUM,
76
+ // ni hijos (STXT-TEMPLATE-SPEC 6.4, 10 y 14.15)
77
+ const type = cl.getType();
78
+ if (type && type.trim().length > 0) {
79
+ throw new ValidationException_1.ValidationException(node.getLine(), "TYPE_DEFINITION_NOT_ALLOWED", "Not allowed type definition in external namespaces");
80
+ }
81
+ const values = cl.getValues();
82
+ if (values) {
83
+ throw new ValidationException_1.ValidationException(node.getLine(), "VALUES_NOT_ALLOWED_IN_EXTERNAL_NAMESPACE", `Not allowed values in external namespaces (node ${node.getName()})`);
84
+ }
85
+ if (node.getChildren().length > 0) {
86
+ throw new ValidationException_1.ValidationException(node.getLine(), "CHILDREN_NOT_ALLOWED_IN_EXTERNAL_NAMESPACE", `Not allowed children in external namespaces (node ${node.getName()})`);
87
+ }
88
+ // No hacemos nada con creación de nodos que no son de @stxt.template!!
89
+ return;
90
+ }
91
+ // Miramos si es nuevo y añadimos en listado
92
+ let schemaNode = schema.getNodeDefinition(name);
93
+ if (!schemaNode) {
94
+ // Nuevo
95
+ const type = cl.getType() ?? "INLINE";
96
+ // En este punto el schema ya contiene tanto las definiciones previas ya cerradas
97
+ // como los ancestros abiertos, así que una referencia que no resuelve aquí no
98
+ // resuelve a nada (STXT-TEMPLATE-SPEC 6.4 y 14.11)
99
+ if (type.startsWith("@")) {
100
+ throw new ValidationException_1.ValidationException(node.getLine(), "REFERENCE_NOT_FOUND", `Reference '${type}' does not point to a previous definition or an open ancestor`);
101
+ }
102
+ schemaNode = new NodeDefinition_1.NodeDefinition(node.getName(), type, node.getLine(), undefined);
103
+ schema.addNodeDefinition(schemaNode);
104
+ if (!TypeRegistry_1.TypeRegistry.get(type)) {
105
+ throw new ValidationException_1.ValidationException(node.getLine(), "TYPE_NOT_VALID", `Type not valid: ${type}`);
106
+ }
107
+ const values = cl.getValues();
108
+ if (values) {
109
+ if (type !== "ENUM") {
110
+ // Mismo código que SchemaParser: un template es azúcar equivalente a un schema
111
+ // (STXT-TEMPLATE-SPEC 13), así que la misma condición no debe cambiar de código
112
+ // según la puerta de entrada
113
+ throw new ValidationException_1.ValidationException(node.getLine(), "VALUES_ONLY_SUPPORTED_BY_ENUM", `Values only supported for type ENUM, not for type ${type}`);
114
+ }
115
+ for (const v of values) {
116
+ schemaNode.addValue(v, node.getLine());
117
+ }
118
+ }
119
+ // Un ENUM sin lista de valores es un template inválido (STXT-TEMPLATE-SPEC 9 y 13.7)
120
+ if (type === "ENUM" && (!values || values.length === 0)) {
121
+ throw new ValidationException_1.ValidationException(node.getLine(), "VALUES_EMPTY_FOR_ENUM", "ENUM Type must include values");
122
+ }
123
+ }
124
+ else {
125
+ const type = cl.getType();
126
+ if (!type || !type.startsWith("@")) {
127
+ throw new ValidationException_1.ValidationException(node.getLine(), "NODE_DEFINED_MULTIPLE_TIMES", `Multiple node reference must start with @: ${node.getName()}`);
128
+ }
129
+ const reference = type.substring(1).trim();
130
+ // Referencia y tipo explícito en la misma línea (STXT-TEMPLATE-SPEC 14.13)
131
+ const explicitType = referenceType(reference, node.getNormalizedName());
132
+ if (explicitType) {
133
+ throw new ValidationException_1.ValidationException(node.getLine(), "REFERENCE_WITH_TYPE_NOT_ALLOWED", `Reference '@${node.getName()}' can not declare a type: ${explicitType}`);
134
+ }
135
+ if (StringUtils_1.StringUtils.normalize(reference) !== node.getNormalizedName()) {
136
+ throw new ValidationException_1.ValidationException(node.getLine(), "NODE_REFERENCE_NOT_VALID", `Reference must be '@${node.getName()}', not '${reference}'`);
137
+ }
138
+ // La referencia puede sobrescribir la cardinalidad, pero no redefinir valores
139
+ // ENUM ni hijos (STXT-TEMPLATE-SPEC 6.4)
140
+ const values = cl.getValues();
141
+ if (values) {
142
+ throw new ValidationException_1.ValidationException(node.getLine(), "VALUES_NOT_ALLOWED_IN_REFERENCE", `Reference '@${node.getName()}' can not redefine ENUM values`);
143
+ }
144
+ if (node.getChildren().length > 0) {
145
+ throw new ValidationException_1.ValidationException(node.getLine(), "CHILDREN_NOT_ALLOWED_IN_REFERENCE", `Reference '@${node.getName()}' can not redefine children`);
146
+ }
147
+ return; // OK Definition
148
+ }
149
+ // Una vez ya existe, si tiene hijos los intentamos crear.
150
+ const childrenNode = node.getChildren();
151
+ // Error de template 14.9: nodo con hijos y tipo efectivo que no admite hijos
152
+ if (childrenNode.length > 0 && !TypeRegistry_1.TypeRegistry.admitsChildren(schemaNode.getType())) {
153
+ throw new ValidationException_1.ValidationException(node.getLine(), "CHILDREN_NOT_ALLOWED_FOR_TYPE", `Type ${schemaNode.getType()} does not allow children (node ${node.getName()})`);
154
+ }
155
+ // Insertamos childs
156
+ for (const child of childrenNode) {
157
+ cl = ChildLineParser_1.ChildLineParser.parse(child.getValue(), child.getLine());
158
+ const childName = child.getName();
159
+ let childNamespace = child.getNamespace();
160
+ if (!childNamespace || childNamespace === "") {
161
+ childNamespace = schema.getNamespace();
162
+ }
163
+ const schChild = new ChildDefinition_1.ChildDefinition(childName, childNamespace, cl.getMin(), cl.getMax(), child.getLine());
164
+ schemaNode.addChildDefinition(schChild);
165
+ addToSchema(schema, child);
166
+ }
167
+ }
168
+ /**
169
+ * Distingue `@Nombre Nodo TIPO` (referencia + tipo, error 14.13) de `@Otro Nombre`
170
+ * (referencia con nombre distinto, error 14.12). Como los nombres de nodo admiten
171
+ * espacios, la única lectura fiable es: si el último token es un tipo conocido y lo
172
+ * que queda delante es el nombre del propio nodo, la línea declara ambas cosas.
173
+ * Devuelve el tipo declarado, o null si la referencia no lleva tipo.
174
+ */
175
+ function referenceType(reference, normalizedName) {
176
+ const cut = reference.lastIndexOf(" ");
177
+ if (cut < 0) {
178
+ return null;
179
+ }
180
+ const candidate = reference.substring(cut + 1).trim();
181
+ const rest = reference.substring(0, cut);
182
+ if (TypeRegistry_1.TypeRegistry.get(candidate) && StringUtils_1.StringUtils.normalize(rest) === normalizedName) {
183
+ return candidate;
184
+ }
185
+ return null;
186
+ }
187
+ function addDescriptions(schema, nodes) {
188
+ nodes.forEach((node) => {
189
+ // Obtenemos namespace
190
+ let namespace = node.getNamespace();
191
+ if (!namespace || namespace === "") {
192
+ namespace = schema.getNamespace();
193
+ }
194
+ // Validamos no external description
195
+ if (namespace !== schema.getNamespace()) {
196
+ throw new ValidationException_1.ValidationException(node.getLine(), "EXTERNAL_DESCRIPTION_NOT_ALLOWED", "Not allowed description in external namespaces");
197
+ }
198
+ // Validamos sin hijos
199
+ if (node.getChildren().length > 0) {
200
+ throw new ValidationException_1.ValidationException(node.getLine(), "CHILDREN_DESCRIPTION_NOT_ALLOWED", "Not allowed children in description");
201
+ }
202
+ // Buscamos nodo de esquema
203
+ const nodeDef = schema.getNodeDefinition(node.getName());
204
+ if (!nodeDef) {
205
+ throw new ValidationException_1.ValidationException(node.getLine(), "NODE_NOT_FOUND", `Not found node with name: ${node.getName()}`);
206
+ }
207
+ // No se permite más de una entrada por nodo (STXT-TEMPLATE-SPEC 12)
208
+ if (nodeDef.getDescription() !== undefined) {
209
+ throw new ValidationException_1.ValidationException(node.getLine(), "DESCRIPTION_ALREADY_DEFINED", `Exists a previous description for node: ${node.getName()}`);
210
+ }
211
+ nodeDef.setDescription(node.getText());
212
+ });
213
+ }
214
+ //# sourceMappingURL=TemplateParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TemplateParser.js","sourceRoot":"","sources":["../../src/template/TemplateParser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { SchemaProviderMemory } from "../schema/SchemaProviderMemory";
2
+ import { SchemaProvider } from "../schema/SchemaProvider";
3
+ export declare class TemplateSchemaProviderMemory extends SchemaProviderMemory {
4
+ constructor(parent?: SchemaProvider | null | undefined);
5
+ addTemplate(template: string): void;
6
+ }
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ // TemplateSchemaProvider.ts
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.TemplateSchemaProviderMemory = void 0;
5
+ const Parser_1 = require("../core/Parser");
6
+ const SchemaValidator_1 = require("../schema/SchemaValidator");
7
+ const ValidationException_1 = require("../exceptions/ValidationException");
8
+ const MetaTemplateSchemaProvider_1 = require("./MetaTemplateSchemaProvider");
9
+ const SchemaProviderMemory_1 = require("../schema/SchemaProviderMemory");
10
+ const TemplateParser_1 = require("./TemplateParser");
11
+ class TemplateSchemaProviderMemory extends SchemaProviderMemory_1.SchemaProviderMemory {
12
+ constructor(parent) {
13
+ if (!parent) {
14
+ parent = new MetaTemplateSchemaProvider_1.MetaTemplateSchemaProvider();
15
+ }
16
+ super(parent);
17
+ }
18
+ addTemplate(template) {
19
+ const parser = new Parser_1.Parser();
20
+ const nodes = parser.parse(template);
21
+ if (nodes.length !== 1) {
22
+ throw new ValidationException_1.ValidationException(0, "INVALID_SCHEMA", `There are ${nodes.length}, and expected is 1`);
23
+ }
24
+ // Validamos el template contra el meta-schema de templates
25
+ const schemaValidator = new SchemaValidator_1.SchemaValidator(new MetaTemplateSchemaProvider_1.MetaTemplateSchemaProvider(), true);
26
+ schemaValidator.validate(nodes[0]);
27
+ // Generamos schema desde el template
28
+ const sch = (0, TemplateParser_1.transformTemplateNodeToSchema)(nodes[0]);
29
+ // Check mínimo de seguridad (en Java también se controlaba el namespace esperado)
30
+ if (!sch.getNamespace() || sch.getNamespace().trim().length === 0) {
31
+ throw new ValidationException_1.ValidationException(0, "INVALID_SCHEMA", "Schema namespace is empty");
32
+ }
33
+ this.schemas.set(sch.getNamespace(), sch);
34
+ }
35
+ }
36
+ exports.TemplateSchemaProviderMemory = TemplateSchemaProviderMemory;
37
+ //# sourceMappingURL=TemplateSchemaProviderMemory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TemplateSchemaProviderMemory.js","sourceRoot":"","sources":["../../src/template/TemplateSchemaProviderMemory.ts"],"names":[],"mappings":";AAAA,4BAA4B;;;AAE5B,2CAAwC;AAGxC,+DAA4D;AAC5D,2EAAwE;AAExE,6EAA0E;AAC1E,yEAAsE;AAEtE,qDAAiE;AAEjE,MAAa,4BAA6B,SAAQ,2CAAoB;IAElE,YAAY,MAA0C;QAClD,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,MAAM,GAAG,IAAI,uDAA0B,EAAE,CAAC;QAC9C,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,CAAC;IAClB,CAAC;IAED,WAAW,CAAC,QAAgB;QACxB,MAAM,MAAM,GAAG,IAAI,eAAM,EAAE,CAAC;QAE5B,MAAM,KAAK,GAAW,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC7C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,yCAAmB,CAAC,CAAC,EAAE,gBAAgB,EAAE,aAAa,KAAK,CAAC,MAAM,qBAAqB,CAAC,CAAC;QACvG,CAAC;QAED,2DAA2D;QAC3D,MAAM,eAAe,GAAG,IAAI,iCAAe,CAAC,IAAI,uDAA0B,EAAE,EAAE,IAAI,CAAC,CAAC;QACpF,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAEnC,qCAAqC;QACrC,MAAM,GAAG,GAAG,IAAA,8CAA6B,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAEpD,kFAAkF;QAClF,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChE,MAAM,IAAI,yCAAmB,CAAC,CAAC,EAAE,gBAAgB,EAAE,2BAA2B,CAAC,CAAC;QACpF,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,GAAG,CAAC,CAAC;IAC9C,CAAC;CACJ;AA/BD,oEA+BC"}
package/package.json ADDED
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "@stxt-lang/core",
3
+ "version": "0.5.1",
4
+ "description": "Parser and schema validator for STXT, an indentation-based structured-text format.",
5
+ "main": "out/all.js",
6
+ "types": "out/all.d.ts",
7
+ "publishConfig": {
8
+ "access": "public"
9
+ },
10
+ "files": [
11
+ "out/all.js",
12
+ "out/all.js.map",
13
+ "out/all.d.ts",
14
+ "out/core",
15
+ "out/exceptions",
16
+ "out/processors",
17
+ "out/runtime",
18
+ "out/schema",
19
+ "out/template"
20
+ ],
21
+ "scripts": {
22
+ "build": "tsc",
23
+ "watch": "tsc --watch",
24
+ "lint": "eslint src --ext .ts",
25
+ "prepare": "npm run build",
26
+ "pretest": "npm run build && npm run lint",
27
+ "test": "mocha \"out/test/**/*.test.js\""
28
+ },
29
+ "repository": {
30
+ "type": "git",
31
+ "url": "git+https://github.com/stxt-lang/stxt-js.git"
32
+ },
33
+ "keywords": [],
34
+ "author": "",
35
+ "license": "ISC",
36
+ "devDependencies": {
37
+ "@types/mocha": "^10.0.10",
38
+ "@types/node": "22.x",
39
+ "@typescript-eslint/eslint-plugin": "^5.62.0",
40
+ "@typescript-eslint/parser": "^5.62.0",
41
+ "eslint": "^8.57.1",
42
+ "mocha": "^11.7.5",
43
+ "typescript": "^5.5.4"
44
+ }
45
+ }