@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,34 @@
1
+ import { ChildDefinition } from "./ChildDefinition";
2
+ export declare class NodeDefinition {
3
+ private readonly name;
4
+ private readonly normalizedName;
5
+ private readonly type;
6
+ private description;
7
+ private readonly children;
8
+ private readonly values;
9
+ constructor(name: string, type: string, line: number, description: string | undefined);
10
+ getName(): string;
11
+ getNormalizedName(): string;
12
+ getType(): string;
13
+ getChildren(): ReadonlyMap<string, ChildDefinition>;
14
+ getDescription(): string | undefined;
15
+ setDescription(description: string): void;
16
+ addChildDefinition(childDefinition: ChildDefinition): void;
17
+ addValue(value: string, line?: number): void;
18
+ isAllowedValue(value: string): boolean;
19
+ getValues(): ReadonlySet<string>;
20
+ toJSON(): {
21
+ name: string;
22
+ normalizedName: string;
23
+ type: string;
24
+ description: string | undefined;
25
+ children: {
26
+ name: string;
27
+ normalizedName: string;
28
+ namespace: string;
29
+ min: number | null;
30
+ max: number | null;
31
+ }[];
32
+ values: string[];
33
+ };
34
+ }
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NodeDefinition = void 0;
4
+ const ValidationException_1 = require("../exceptions/ValidationException");
5
+ const StringUtils_1 = require("../core/StringUtils");
6
+ class NodeDefinition {
7
+ constructor(name, type, line, description) {
8
+ this.children = new Map();
9
+ this.values = new Set();
10
+ this.name = StringUtils_1.StringUtils.compactSpaces(name);
11
+ this.normalizedName = StringUtils_1.StringUtils.normalize(name);
12
+ this.type = type;
13
+ this.description = description;
14
+ if (this.normalizedName.length === 0) {
15
+ throw new ValidationException_1.ValidationException(line, "INVALID_NODE_NAME", `Node name not valid: ${name}`);
16
+ }
17
+ }
18
+ getName() {
19
+ return this.name;
20
+ }
21
+ getNormalizedName() {
22
+ return this.normalizedName;
23
+ }
24
+ getType() {
25
+ return this.type;
26
+ }
27
+ getChildren() {
28
+ return this.children;
29
+ }
30
+ getDescription() {
31
+ return this.description;
32
+ }
33
+ setDescription(description) {
34
+ this.description = description;
35
+ }
36
+ addChildDefinition(childDefinition) {
37
+ const qname = childDefinition.getQualifiedName();
38
+ if (this.children.has(qname)) {
39
+ throw new ValidationException_1.ValidationException(0, "CHILD_DEF_ALREADY_DEFINED", `Exists a previous node definition with: ${qname}`);
40
+ }
41
+ this.children.set(qname, childDefinition);
42
+ }
43
+ // STXT-SCHEMA-SPEC 13.9 / STXT-TEMPLATE-SPEC 14.14: no puede haber valores duplicados
44
+ // tras la normalización por trim. Mismo código que ChildLineParser: es la misma condición
45
+ // por la otra puerta de entrada.
46
+ addValue(value, line) {
47
+ const trimmed = value?.trim() ?? "";
48
+ if (this.values.has(trimmed)) {
49
+ throw new ValidationException_1.ValidationException(line ?? 0, "VALUE_DUPLICATED", `The values ${trimmed} is duplicated`);
50
+ }
51
+ this.values.add(trimmed);
52
+ }
53
+ isAllowedValue(value) {
54
+ if (this.values.size === 0) {
55
+ return true;
56
+ }
57
+ return this.values.has(value);
58
+ }
59
+ getValues() {
60
+ return this.values;
61
+ }
62
+ toJSON() {
63
+ return {
64
+ name: this.getName(),
65
+ normalizedName: this.getNormalizedName(),
66
+ type: this.getType(),
67
+ description: this.description,
68
+ children: Array.from(this.getChildren().values()).map(c => c.toJSON()),
69
+ values: Array.from(this.getValues()),
70
+ };
71
+ }
72
+ }
73
+ exports.NodeDefinition = NodeDefinition;
74
+ //# sourceMappingURL=NodeDefinition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NodeDefinition.js","sourceRoot":"","sources":["../../src/schema/NodeDefinition.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { NodeDefinition } from "./NodeDefinition";
2
+ export declare class Schema {
3
+ static readonly SCHEMA_NAMESPACE = "@stxt.schema";
4
+ private readonly nodes;
5
+ private readonly namespace;
6
+ private readonly description;
7
+ constructor(namespace: string | null | undefined, line: number, description: string | undefined);
8
+ getNodes(): ReadonlyMap<string, NodeDefinition>;
9
+ getNodeDefinition(name: string): NodeDefinition | undefined;
10
+ addNodeDefinition(nodeDefinition: NodeDefinition): void;
11
+ getNamespace(): string;
12
+ toJSON(): {
13
+ namespace: string;
14
+ nodes: {
15
+ name: string;
16
+ normalizedName: string;
17
+ type: string;
18
+ description: string | undefined;
19
+ children: {
20
+ name: string;
21
+ normalizedName: string;
22
+ namespace: string;
23
+ min: number | null;
24
+ max: number | null;
25
+ }[];
26
+ values: string[];
27
+ }[];
28
+ };
29
+ toString(): string;
30
+ }
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Schema = void 0;
4
+ const NamespaceValidator_1 = require("../core/NamespaceValidator");
5
+ const StringUtils_1 = require("../core/StringUtils");
6
+ const ValidationException_1 = require("../exceptions/ValidationException");
7
+ class Schema {
8
+ constructor(namespace, line, description) {
9
+ this.nodes = new Map();
10
+ this.namespace = StringUtils_1.StringUtils.lowerCase(namespace);
11
+ this.description = description;
12
+ NamespaceValidator_1.NamespaceValidator.validateNamespaceFormat(this.namespace, line);
13
+ }
14
+ getNodes() {
15
+ return this.nodes;
16
+ }
17
+ getNodeDefinition(name) {
18
+ return this.nodes.get(StringUtils_1.StringUtils.normalize(name));
19
+ }
20
+ addNodeDefinition(nodeDefinition) {
21
+ const qname = nodeDefinition.getNormalizedName();
22
+ if (this.nodes.has(qname)) {
23
+ throw new ValidationException_1.ValidationException(0, "NODE_DEF_ALREADY_DEFINED", `Exists a previous node definition with: ${qname}`);
24
+ }
25
+ this.nodes.set(qname, nodeDefinition);
26
+ }
27
+ getNamespace() {
28
+ return this.namespace;
29
+ }
30
+ // Dentro de la clase Schema
31
+ toJSON() {
32
+ return {
33
+ namespace: this.namespace,
34
+ nodes: Array.from(this.nodes.values()).map(n => n.toJSON()),
35
+ };
36
+ }
37
+ toString() {
38
+ return JSON.stringify(this, null, 2); // pretty print
39
+ }
40
+ }
41
+ exports.Schema = Schema;
42
+ Schema.SCHEMA_NAMESPACE = "@stxt.schema";
43
+ //# sourceMappingURL=Schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Schema.js","sourceRoot":"","sources":["../../src/schema/Schema.ts"],"names":[],"mappings":";;;AAAA,mEAAgE;AAChE,qDAAkD;AAClD,2EAAwE;AAGxE,MAAa,MAAM;IAOf,YAAY,SAAoC,EAAE,IAAY,EAAE,WAA+B;QAJ9E,UAAK,GAAgC,IAAI,GAAG,EAAE,CAAC;QAK5D,IAAI,CAAC,SAAS,GAAG,yBAAW,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAClD,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,uCAAkB,CAAC,uBAAuB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACrE,CAAC;IAED,QAAQ;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAED,iBAAiB,CAAC,IAAY;QAC1B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACvD,CAAC;IAED,iBAAiB,CAAC,cAA8B;QAC5C,MAAM,KAAK,GAAG,cAAc,CAAC,iBAAiB,EAAE,CAAC;QAEjD,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,yCAAmB,CAAC,CAAC,EAAE,0BAA0B,EAAE,2CAA2C,KAAK,EAAE,CAAC,CAAC;QACrH,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;IAC1C,CAAC;IAED,YAAY;QACR,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,4BAA4B;IAE5B,MAAM;QACF,OAAO;YACH,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SAC9D,CAAC;IACN,CAAC;IAED,QAAQ;QACJ,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,eAAe;IACzD,CAAC;;AA9CL,wBAgDC;AA/CmB,uBAAgB,GAAG,cAAc,AAAjB,CAAkB"}
@@ -0,0 +1,3 @@
1
+ import { Schema } from "./Schema";
2
+ import { Node } from "../core/Node";
3
+ export declare function transformNodeToSchema(node: Node): Schema;
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.transformNodeToSchema = transformNodeToSchema;
4
+ const Schema_1 = require("./Schema");
5
+ const NodeDefinition_1 = require("./NodeDefinition");
6
+ const ChildDefinition_1 = require("./ChildDefinition");
7
+ const ValidationException_1 = require("../exceptions/ValidationException");
8
+ const RuntimeException_1 = require("../exceptions/RuntimeException");
9
+ const NameNamespaceParser_1 = require("../core/NameNamespaceParser");
10
+ const TypeRegistry_1 = require("./TypeRegistry");
11
+ function transformNodeToSchema(node) {
12
+ // Node name
13
+ const nodeName = node.getNormalizedName();
14
+ const namespaceSchema = node.getNamespace();
15
+ // Obtenemos name y namespace
16
+ if (nodeName !== "schema" || namespaceSchema !== Schema_1.Schema.SCHEMA_NAMESPACE) {
17
+ throw new ValidationException_1.ValidationException(node.getLine(), "NOT_STXT_SCHEMA", `Se espera schema(${Schema_1.Schema.SCHEMA_NAMESPACE}) y es ${nodeName}(${namespaceSchema})`);
18
+ }
19
+ // Obtenemos description
20
+ const descrip = node.getChild("description")?.getText();
21
+ const schema = new Schema_1.Schema(node.getValue(), node.getLine(), descrip);
22
+ // Para validar
23
+ const allNames = new Set(); // Para validar que existan los childs
24
+ // Obtenemos los nodos
25
+ for (const n of node.getChildrenByName("node")) {
26
+ const schNode = createFrom(n, schema.getNamespace());
27
+ schema.addNodeDefinition(schNode);
28
+ allNames.add(schNode.getNormalizedName());
29
+ }
30
+ // Validamos que todos los nombres estén definidos
31
+ for (const schNode of schema.getNodes().values()) {
32
+ for (const schChild of schNode.getChildren().values()) {
33
+ // Sólo validamos del mismo namespace
34
+ if (schChild.getNamespace() === schema.getNamespace()) {
35
+ // Ojo: en Java aquí se usa schChild.getNormalizedName(), pero ChildDefinition no lo expone.
36
+ // Para mantener el comportamiento, se recomienda añadir getNormalizedName() a ChildDefinition.
37
+ const childNorm = schChild.getNormalizedName?.();
38
+ if (!childNorm) {
39
+ throw new RuntimeException_1.RuntimeException("CHILD_DEFINITION_API_MISMATCH", "ChildDefinition.getNormalizedName() is missing in TypeScript version. Add it to ChildDefinition.");
40
+ }
41
+ if (!allNames.has(childNorm)) {
42
+ throw new ValidationException_1.ValidationException(0, "CHILD_NOT_DEFINED", `Child ${childNorm} not defined in ${schema.getNamespace()}`);
43
+ }
44
+ }
45
+ }
46
+ }
47
+ return schema;
48
+ }
49
+ function createFrom(n, namespace) {
50
+ const name = n.getValue();
51
+ let type = "INLINE";
52
+ const typeNode = n.getChild("type");
53
+ if (typeNode) {
54
+ type = typeNode.getValue();
55
+ }
56
+ const description = n.getChild("description")?.getText();
57
+ const result = new NodeDefinition_1.NodeDefinition(name, type, n.getLine(), description);
58
+ const children = n.getChild("children");
59
+ if (children) {
60
+ // Error de schema 13.5: Children en un Node cuyo tipo no admite hijos
61
+ if (!TypeRegistry_1.TypeRegistry.admitsChildren(type)) {
62
+ throw new ValidationException_1.ValidationException(children.getLine(), "CHILDREN_NOT_ALLOWED_FOR_TYPE", `Type ${type} does not allow children (node ${name})`);
63
+ }
64
+ for (const child of children.getChildrenByName("child")) {
65
+ putChildToSchemaNode(result, child, namespace);
66
+ }
67
+ }
68
+ // Miramos values
69
+ let valuesNodes = n.getChildrenByName("values");
70
+ if (valuesNodes && valuesNodes.length > 0) {
71
+ if (type !== "ENUM") {
72
+ throw new ValidationException_1.ValidationException(n.getLine(), "VALUES_ONLY_SUPPORTED_BY_ENUM", `Values only supported for type ENUM, not for type ${type}`);
73
+ }
74
+ if (valuesNodes.length > 1) {
75
+ throw new RuntimeException_1.RuntimeException("INVALID_SIZE_VALUES", `Unexpected number of values: ${valuesNodes.length}`);
76
+ }
77
+ const valuesNode = valuesNodes[0];
78
+ const values = valuesNode.getChildrenByName("value");
79
+ for (const v of values) {
80
+ result.addValue(v.getValue(), v.getLine());
81
+ }
82
+ // Para la comprobación final de ENUM
83
+ valuesNodes = values;
84
+ }
85
+ // Miramos enum
86
+ if (type === "ENUM" && (!valuesNodes || valuesNodes.length === 0)) {
87
+ throw new ValidationException_1.ValidationException(n.getLine(), "VALUES_EMPTY_FOR_ENUM", "ENUM Type must include values");
88
+ }
89
+ return result;
90
+ }
91
+ function putChildToSchemaNode(schemaNode, child, defNamespace) {
92
+ // Obtenemos name y namespace
93
+ const ns = NameNamespaceParser_1.NameNamespaceParser.parse(child.getValue(), defNamespace, child.getLine(), child.getValue());
94
+ const name = ns.getName();
95
+ const namespace = ns.getNamespace();
96
+ const min = getInteger(child, "min");
97
+ const max = getInteger(child, "max");
98
+ // Cardinalidad inválida si Min > Max (STXT-SCHEMA-SPEC 10 y 13.7)
99
+ if (min !== null && max !== null && min > max) {
100
+ throw new ValidationException_1.ValidationException(child.getLine(), "MIN_GREATER_THAN_MAX", `Min ${min} greater than Max ${max}`);
101
+ }
102
+ const schemaChild = new ChildDefinition_1.ChildDefinition(name, namespace, min, max, child.getLine());
103
+ schemaNode.addChildDefinition(schemaChild);
104
+ }
105
+ function getInteger(node, name) {
106
+ const n = node.getChild(name);
107
+ if (!n) {
108
+ return null;
109
+ }
110
+ const raw = n.getValue();
111
+ const parsed = Number.parseInt(raw, 10);
112
+ if (Number.isNaN(parsed)) {
113
+ throw new ValidationException_1.ValidationException(node.getLine(), "INVALID_INTEGER", `Integer not valid: ${raw}`);
114
+ }
115
+ return parsed;
116
+ }
117
+ //# sourceMappingURL=SchemaParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchemaParser.js","sourceRoot":"","sources":["../../src/schema/SchemaParser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Schema } from "./Schema";
2
+ export interface SchemaProvider {
3
+ getSchema(namespace: string): Schema | null | undefined;
4
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=SchemaProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchemaProvider.js","sourceRoot":"","sources":["../../src/schema/SchemaProvider.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ import { Schema } from "./Schema";
2
+ import { SchemaProvider } from "./SchemaProvider";
3
+ export declare class SchemaProviderMemory implements SchemaProvider {
4
+ private readonly parentSchema;
5
+ constructor(parent?: SchemaProvider | null | undefined);
6
+ protected readonly schemas: Map<string, Schema>;
7
+ getSchema(namespace: string): Schema | undefined | null;
8
+ addSchema(txt: string): void;
9
+ clear(): void;
10
+ getAllSchemas(): ReadonlyArray<Schema>;
11
+ }
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SchemaProviderMemory = void 0;
4
+ const Parser_1 = require("../core/Parser");
5
+ const StringUtils_1 = require("../core/StringUtils");
6
+ const SchemaParser_1 = require("./SchemaParser");
7
+ const SchemaProviderMeta_1 = require("./SchemaProviderMeta");
8
+ const SchemaValidator_1 = require("./SchemaValidator");
9
+ class SchemaProviderMemory {
10
+ constructor(parent) {
11
+ this.schemas = new Map();
12
+ if (!parent) {
13
+ this.parentSchema = new SchemaProviderMeta_1.SchemaProviderMeta();
14
+ }
15
+ else {
16
+ this.parentSchema = parent;
17
+ }
18
+ }
19
+ getSchema(namespace) {
20
+ const key = StringUtils_1.StringUtils.lowerCase(namespace);
21
+ let result = this.schemas.get(key);
22
+ if (!result) {
23
+ result = this.parentSchema.getSchema(namespace);
24
+ }
25
+ return result;
26
+ }
27
+ addSchema(txt) {
28
+ const parser = new Parser_1.Parser();
29
+ const node = parser.parse(txt)[0];
30
+ const schema = (0, SchemaParser_1.transformNodeToSchema)(node);
31
+ const schemaValidator = new SchemaValidator_1.SchemaValidator(new SchemaProviderMeta_1.SchemaProviderMeta(), true);
32
+ schemaValidator.validate(node);
33
+ const key = schema.getNamespace();
34
+ this.schemas.set(key, schema);
35
+ }
36
+ clear() {
37
+ this.schemas.clear();
38
+ }
39
+ getAllSchemas() {
40
+ return Array.from(this.schemas.values());
41
+ }
42
+ }
43
+ exports.SchemaProviderMemory = SchemaProviderMemory;
44
+ //# sourceMappingURL=SchemaProviderMemory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchemaProviderMemory.js","sourceRoot":"","sources":["../../src/schema/SchemaProviderMemory.ts"],"names":[],"mappings":";;;AACA,2CAAwC;AACxC,qDAAkD;AAElD,iDAAuD;AAEvD,6DAA0D;AAC1D,uDAAoD;AAEpD,MAAa,oBAAoB;IAG7B,YAAY,MAA0C;QAQnC,YAAO,GAAwB,IAAI,GAAG,EAAE,CAAC;QAPxD,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,IAAI,CAAC,YAAY,GAAG,IAAI,uCAAkB,EAAE,CAAC;QACjD,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;QAC/B,CAAC;IACL,CAAC;IAID,SAAS,CAAC,SAAiB;QACvB,MAAM,GAAG,GAAG,yBAAW,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAE7C,IAAI,MAAM,GAA8B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9D,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACpD,CAAC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,SAAS,CAAC,GAAW;QACjB,MAAM,MAAM,GAAW,IAAI,eAAM,EAAE,CAAC;QACpC,MAAM,IAAI,GAAS,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,MAAM,GAAW,IAAA,oCAAqB,EAAC,IAAI,CAAC,CAAC;QAEnD,MAAM,eAAe,GAAG,IAAI,iCAAe,CAAC,IAAI,uCAAkB,EAAE,EAAE,IAAI,CAAC,CAAC;QAC5E,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAE/B,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC;QAClC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAClC,CAAC;IAED,KAAK;QACD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IAED,aAAa;QACT,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7C,CAAC;CACJ;AA1CD,oDA0CC"}
@@ -0,0 +1,8 @@
1
+ import { Schema } from "./Schema";
2
+ import { SchemaProvider } from "./SchemaProvider";
3
+ export declare class SchemaProviderMeta implements SchemaProvider {
4
+ private static readonly META_TEXT;
5
+ private readonly meta;
6
+ constructor();
7
+ getSchema(namespace: string): Schema;
8
+ }
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SchemaProviderMeta = void 0;
4
+ const Schema_1 = require("./Schema");
5
+ const Parser_1 = require("../core/Parser");
6
+ const ValidationException_1 = require("../exceptions/ValidationException");
7
+ const RuntimeException_1 = require("../exceptions/RuntimeException");
8
+ const SchemaParser_1 = require("./SchemaParser");
9
+ class SchemaProviderMeta {
10
+ constructor() {
11
+ const parser = new Parser_1.Parser();
12
+ const nodes = parser.parse(SchemaProviderMeta.META_TEXT);
13
+ if (nodes.length !== 1) {
14
+ throw new ValidationException_1.ValidationException(0, "META_SCHEMA_INVALID", `Meta schema must produce exactly 1 document, got ${nodes.length}`);
15
+ }
16
+ this.meta = (0, SchemaParser_1.transformNodeToSchema)(nodes[0]);
17
+ }
18
+ getSchema(namespace) {
19
+ if (namespace !== Schema_1.Schema.SCHEMA_NAMESPACE) {
20
+ throw new RuntimeException_1.RuntimeException("RESOURCE_NOT_FOUND", `Not found '${namespace}' in namespace: ${Schema_1.Schema.SCHEMA_NAMESPACE}`);
21
+ }
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.SchemaProviderMeta = SchemaProviderMeta;
29
+ SchemaProviderMeta.META_TEXT = `Schema (@stxt.schema): @stxt.schema
30
+ Node: Schema
31
+ Children:
32
+ Child: Description
33
+ Max: 1
34
+ Child: Node
35
+ Min: 1
36
+ Node: Node
37
+ Children:
38
+ Child: Type
39
+ Max: 1
40
+ Child: Children
41
+ Max: 1
42
+ Child: Description
43
+ Max: 1
44
+ Child: Values
45
+ Max: 1
46
+ Node: Children
47
+ Type: GROUP
48
+ Children:
49
+ Child: Child
50
+ Min: 1
51
+ Node: Description
52
+ Type: TEXT
53
+ Node: Child
54
+ Children:
55
+ Child: Min
56
+ Max: 1
57
+ Child: Max
58
+ Max: 1
59
+ Node: Min
60
+ Type: NATURAL
61
+ Node: Max
62
+ Type: NATURAL
63
+ Node: Type
64
+ Type: ENUM
65
+ Values:
66
+ Value: INLINE
67
+ Value: BLOCK
68
+ Value: TEXT
69
+ Value: BOOLEAN
70
+ Value: URL
71
+ Value: INTEGER
72
+ Value: NATURAL
73
+ Value: NUMBER
74
+ Value: DATE
75
+ Value: TIME
76
+ Value: TIMESTAMP
77
+ Value: UUID
78
+ Value: EMAIL
79
+ Value: HEXADECIMAL
80
+ Value: BINARY
81
+ Value: BASE64
82
+ Value: GROUP
83
+ Value: ENUM
84
+ Value: MARKDOWN
85
+ Node: Values
86
+ Type: GROUP
87
+ Children:
88
+ Child: Value
89
+ Min: 1
90
+ Node: Value
91
+ `;
92
+ //# sourceMappingURL=SchemaProviderMeta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchemaProviderMeta.js","sourceRoot":"","sources":["../../src/schema/SchemaProviderMeta.ts"],"names":[],"mappings":";;;AAAA,qCAAkC;AAElC,2CAAwC;AAExC,2EAAwE;AACxE,qEAAkE;AAClE,iDAAuD;AAEvD,MAAa,kBAAkB;IAmE3B;QACI,MAAM,MAAM,GAAG,IAAI,eAAM,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAW,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAEjE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,yCAAmB,CAAC,CAAC,EAAE,qBAAqB,EAAE,oDAAoD,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAChI,CAAC;QAED,IAAI,CAAC,IAAI,GAAG,IAAA,oCAAqB,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,SAAS,CAAC,SAAiB;QACvB,IAAI,SAAS,KAAK,eAAM,CAAC,gBAAgB,EAAE,CAAC;YACxC,MAAM,IAAI,mCAAgB,CAAC,oBAAoB,EAAE,cAAc,SAAS,mBAAmB,eAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAC1H,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACb,MAAM,IAAI,yCAAmB,CAAC,CAAC,EAAE,2BAA2B,EAAE,2BAA2B,CAAC,CAAC;QAC/F,CAAC;QAED,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;;AAxFL,gDAyFC;AAxF2B,4BAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8DvC,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { Node } from "../core/Node";
2
+ import { ValidationException } from "../exceptions/ValidationException";
3
+ import { Validator } from "../processors/Validator";
4
+ import { SchemaProvider } from "./SchemaProvider";
5
+ import { Schema } from "./Schema";
6
+ export declare class SchemaValidator implements Validator {
7
+ private readonly schemaProvider;
8
+ private readonly recursiveValidation;
9
+ constructor(schemaProvider: SchemaProvider, recursive?: boolean);
10
+ validate(node: Node): ValidationException[];
11
+ validateAgainstSchema(node: Node, schema: Schema): ValidationException[];
12
+ private static validateChildrenDeclared;
13
+ private static validateValue;
14
+ private static validateCount;
15
+ private static validateCountChild;
16
+ }
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SchemaValidator = void 0;
4
+ const ValidationException_1 = require("../exceptions/ValidationException");
5
+ const TypeRegistry_1 = require("./TypeRegistry");
6
+ class SchemaValidator {
7
+ constructor(schemaProvider, recursive = false) {
8
+ this.schemaProvider = schemaProvider;
9
+ this.recursiveValidation = recursive;
10
+ }
11
+ validate(node) {
12
+ const errors = [];
13
+ // Obtenemos namespace
14
+ const namespace = node.getNamespace();
15
+ const schema = this.schemaProvider.getSchema(namespace);
16
+ if (!schema) {
17
+ errors.push(new ValidationException_1.ValidationException(node.getLine(), "SCHEMA_NOT_FOUND", `Not found schema: ${namespace}`));
18
+ return errors;
19
+ }
20
+ // Validamos nodo
21
+ errors.push(...this.validateAgainstSchema(node, schema));
22
+ // Validamos children
23
+ if (this.recursiveValidation) {
24
+ for (const childNode of node.getChildren()) {
25
+ errors.push(...this.validate(childNode));
26
+ }
27
+ }
28
+ return errors;
29
+ }
30
+ validateAgainstSchema(node, schema) {
31
+ const errors = [];
32
+ const schemaNode = schema.getNodeDefinition(node.getNormalizedName());
33
+ if (!schemaNode) {
34
+ const error = `NOT EXIST NODE ${node.getNormalizedName()} for namespace ${schema.getNamespace()}`;
35
+ errors.push(new ValidationException_1.ValidationException(node.getLine(), "NODE_NOT_EXIST_IN_SCHEMA", error));
36
+ return errors;
37
+ }
38
+ errors.push(...SchemaValidator.validateValue(schemaNode, node));
39
+ errors.push(...SchemaValidator.validateChildrenDeclared(schemaNode, node));
40
+ errors.push(...SchemaValidator.validateCount(schemaNode, node));
41
+ return errors;
42
+ }
43
+ // Modelo de contenido cerrado (STXT-SCHEMA-SPEC, sección 6): solo se permiten
44
+ // los hijos directos declarados en la definición del padre; sin Children, cierre total
45
+ static validateChildrenDeclared(nodeDef, node) {
46
+ const errors = [];
47
+ for (const child of node.getChildren()) {
48
+ if (!nodeDef.getChildren().has(child.getQualifiedName())) {
49
+ errors.push(new ValidationException_1.ValidationException(child.getLine(), "CHILD_NOT_DECLARED", `Child '${child.getQualifiedName()}' not declared in node '${node.getQualifiedName()}'`));
50
+ }
51
+ }
52
+ return errors;
53
+ }
54
+ static validateValue(nodeDef, node) {
55
+ const errors = [];
56
+ const nodeType = nodeDef.getType();
57
+ const validator = TypeRegistry_1.TypeRegistry.get(nodeType);
58
+ if (!validator) {
59
+ errors.push(new ValidationException_1.ValidationException(node.getLine(), "TYPE_NOT_SUPPORTED", `Node type not supported: ${nodeType}`));
60
+ return errors;
61
+ }
62
+ try {
63
+ validator.validate(nodeDef, node);
64
+ }
65
+ catch (e) {
66
+ if (e instanceof ValidationException_1.ValidationException) {
67
+ errors.push(e);
68
+ }
69
+ else if (e instanceof Error) {
70
+ errors.push(new ValidationException_1.ValidationException(node.getLine(), "VALIDATION_ERROR", e.message));
71
+ }
72
+ else {
73
+ errors.push(new ValidationException_1.ValidationException(node.getLine(), "UNKNOWN_VALIDATION_ERROR", String(e)));
74
+ }
75
+ }
76
+ return errors;
77
+ }
78
+ static validateCount(nodeDef, node) {
79
+ const errors = [];
80
+ const count = new Map();
81
+ const childrenByType = new Map();
82
+ for (const child of node.getChildren()) {
83
+ const childName = child.getQualifiedName();
84
+ count.set(childName, (count.get(childName) ?? 0) + 1);
85
+ if (!childrenByType.has(childName)) {
86
+ childrenByType.set(childName, []);
87
+ }
88
+ childrenByType.get(childName).push(child);
89
+ }
90
+ for (const childDef of nodeDef.getChildren().values()) {
91
+ const qname = childDef.getQualifiedName();
92
+ errors.push(...SchemaValidator.validateCountChild(childDef, count.get(qname) ?? 0, node, childrenByType.get(qname) ?? []));
93
+ }
94
+ return errors;
95
+ }
96
+ static validateCountChild(childDef, childCount, node, children) {
97
+ const errors = [];
98
+ const min = childDef.getMin(); // number | null
99
+ const max = childDef.getMax(); // number | null
100
+ if (min !== null && childCount < min) {
101
+ errors.push(new ValidationException_1.ValidationException(node.getLine(), "INVALID_NUMBER", `${childCount} nodes of '${childDef.getQualifiedName()}' and min is ${min}`));
102
+ }
103
+ if (max !== null && childCount > max) {
104
+ // Error en el parent
105
+ errors.push(new ValidationException_1.ValidationException(node.getLine(), "INVALID_NUMBER", `${childCount} nodes of '${childDef.getQualifiedName()}' and max is ${max}`));
106
+ // Error en cada nodo hijo que excede el máximo permitido
107
+ for (const child of children) {
108
+ errors.push(new ValidationException_1.ValidationException(child.getLine(), "INVALID_NUMBER", `Too many '${childDef.getQualifiedName()}' nodes: found ${childCount}, max is ${max}`));
109
+ }
110
+ }
111
+ return errors;
112
+ }
113
+ }
114
+ exports.SchemaValidator = SchemaValidator;
115
+ //# sourceMappingURL=SchemaValidator.js.map