@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.
- package/out/all.d.ts +19 -0
- package/out/all.js +42 -0
- package/out/all.js.map +1 -0
- package/out/core/Constants.d.ts +9 -0
- package/out/core/Constants.js +14 -0
- package/out/core/Constants.js.map +1 -0
- package/out/core/Line.d.ts +9 -0
- package/out/core/Line.js +17 -0
- package/out/core/Line.js.map +1 -0
- package/out/core/LineParser.d.ts +2 -0
- package/out/core/LineParser.js +72 -0
- package/out/core/LineParser.js.map +1 -0
- package/out/core/NameNamespace.d.ts +7 -0
- package/out/core/NameNamespace.js +17 -0
- package/out/core/NameNamespace.js.map +1 -0
- package/out/core/NameNamespaceParser.d.ts +5 -0
- package/out/core/NameNamespaceParser.js +43 -0
- package/out/core/NameNamespaceParser.js.map +1 -0
- package/out/core/NamespaceValidator.d.ts +4 -0
- package/out/core/NamespaceValidator.js +17 -0
- package/out/core/NamespaceValidator.js.map +1 -0
- package/out/core/Node.d.ts +29 -0
- package/out/core/Node.js +116 -0
- package/out/core/Node.js.map +1 -0
- package/out/core/NodeCreator.d.ts +3 -0
- package/out/core/NodeCreator.js +52 -0
- package/out/core/NodeCreator.js.map +1 -0
- package/out/core/ParseResult.d.ts +12 -0
- package/out/core/ParseResult.js +26 -0
- package/out/core/ParseResult.js.map +1 -0
- package/out/core/Parser.d.ts +16 -0
- package/out/core/Parser.js +142 -0
- package/out/core/Parser.js.map +1 -0
- package/out/core/StringUtils.d.ts +8 -0
- package/out/core/StringUtils.js +46 -0
- package/out/core/StringUtils.js.map +1 -0
- package/out/exceptions/ParseException.d.ts +6 -0
- package/out/exceptions/ParseException.js +17 -0
- package/out/exceptions/ParseException.js.map +1 -0
- package/out/exceptions/RuntimeException.d.ts +6 -0
- package/out/exceptions/RuntimeException.js +20 -0
- package/out/exceptions/RuntimeException.js.map +1 -0
- package/out/exceptions/ValidationException.d.ts +4 -0
- package/out/exceptions/ValidationException.js +13 -0
- package/out/exceptions/ValidationException.js.map +1 -0
- package/out/processors/Observer.d.ts +8 -0
- package/out/processors/Observer.js +3 -0
- package/out/processors/Observer.js.map +1 -0
- package/out/processors/Validator.d.ts +5 -0
- package/out/processors/Validator.js +3 -0
- package/out/processors/Validator.js.map +1 -0
- package/out/runtime/ConditionalValidator.d.ts +9 -0
- package/out/runtime/ConditionalValidator.js +18 -0
- package/out/runtime/ConditionalValidator.js.map +1 -0
- package/out/runtime/NodeWriter.d.ts +12 -0
- package/out/runtime/NodeWriter.js +59 -0
- package/out/runtime/NodeWriter.js.map +1 -0
- package/out/runtime/UnifiedSchemaProvider.d.ts +22 -0
- package/out/runtime/UnifiedSchemaProvider.js +80 -0
- package/out/runtime/UnifiedSchemaProvider.js.map +1 -0
- package/out/schema/ChildDefinition.d.ts +21 -0
- package/out/schema/ChildDefinition.js +50 -0
- package/out/schema/ChildDefinition.js.map +1 -0
- package/out/schema/NodeDefinition.d.ts +34 -0
- package/out/schema/NodeDefinition.js +74 -0
- package/out/schema/NodeDefinition.js.map +1 -0
- package/out/schema/Schema.d.ts +30 -0
- package/out/schema/Schema.js +43 -0
- package/out/schema/Schema.js.map +1 -0
- package/out/schema/SchemaParser.d.ts +3 -0
- package/out/schema/SchemaParser.js +117 -0
- package/out/schema/SchemaParser.js.map +1 -0
- package/out/schema/SchemaProvider.d.ts +4 -0
- package/out/schema/SchemaProvider.js +3 -0
- package/out/schema/SchemaProvider.js.map +1 -0
- package/out/schema/SchemaProviderMemory.d.ts +11 -0
- package/out/schema/SchemaProviderMemory.js +44 -0
- package/out/schema/SchemaProviderMemory.js.map +1 -0
- package/out/schema/SchemaProviderMeta.d.ts +8 -0
- package/out/schema/SchemaProviderMeta.js +92 -0
- package/out/schema/SchemaProviderMeta.js.map +1 -0
- package/out/schema/SchemaValidator.d.ts +16 -0
- package/out/schema/SchemaValidator.js +115 -0
- package/out/schema/SchemaValidator.js.map +1 -0
- package/out/schema/Type.d.ts +6 -0
- package/out/schema/Type.js +3 -0
- package/out/schema/Type.js.map +1 -0
- package/out/schema/TypeRegistry.d.ts +8 -0
- package/out/schema/TypeRegistry.js +69 -0
- package/out/schema/TypeRegistry.js.map +1 -0
- package/out/schema/type/BASE64.d.ts +2 -0
- package/out/schema/type/BASE64.js +30 -0
- package/out/schema/type/BASE64.js.map +1 -0
- package/out/schema/type/BINARY.d.ts +2 -0
- package/out/schema/type/BINARY.js +18 -0
- package/out/schema/type/BINARY.js.map +1 -0
- package/out/schema/type/BLOCK.d.ts +2 -0
- package/out/schema/type/BLOCK.js +16 -0
- package/out/schema/type/BLOCK.js.map +1 -0
- package/out/schema/type/BOOLEAN.d.ts +1 -0
- package/out/schema/type/BOOLEAN.js +6 -0
- package/out/schema/type/BOOLEAN.js.map +1 -0
- package/out/schema/type/DATE.d.ts +1 -0
- package/out/schema/type/DATE.js +6 -0
- package/out/schema/type/DATE.js.map +1 -0
- package/out/schema/type/EMAIL.d.ts +1 -0
- package/out/schema/type/EMAIL.js +6 -0
- package/out/schema/type/EMAIL.js.map +1 -0
- package/out/schema/type/ENUM.d.ts +2 -0
- package/out/schema/type/ENUM.js +21 -0
- package/out/schema/type/ENUM.js.map +1 -0
- package/out/schema/type/GROUP.d.ts +2 -0
- package/out/schema/type/GROUP.js +16 -0
- package/out/schema/type/GROUP.js.map +1 -0
- package/out/schema/type/HEXADECIMAL.d.ts +2 -0
- package/out/schema/type/HEXADECIMAL.js +18 -0
- package/out/schema/type/HEXADECIMAL.js.map +1 -0
- package/out/schema/type/INLINE.d.ts +2 -0
- package/out/schema/type/INLINE.js +16 -0
- package/out/schema/type/INLINE.js.map +1 -0
- package/out/schema/type/INTEGER.d.ts +1 -0
- package/out/schema/type/INTEGER.js +6 -0
- package/out/schema/type/INTEGER.js.map +1 -0
- package/out/schema/type/MARKDOWN.d.ts +2 -0
- package/out/schema/type/MARKDOWN.js +17 -0
- package/out/schema/type/MARKDOWN.js.map +1 -0
- package/out/schema/type/NATURAL.d.ts +1 -0
- package/out/schema/type/NATURAL.js +6 -0
- package/out/schema/type/NATURAL.js.map +1 -0
- package/out/schema/type/NUMBER.d.ts +1 -0
- package/out/schema/type/NUMBER.js +6 -0
- package/out/schema/type/NUMBER.js.map +1 -0
- package/out/schema/type/TEXT.d.ts +2 -0
- package/out/schema/type/TEXT.js +15 -0
- package/out/schema/type/TEXT.js.map +1 -0
- package/out/schema/type/TIME.d.ts +1 -0
- package/out/schema/type/TIME.js +6 -0
- package/out/schema/type/TIME.js.map +1 -0
- package/out/schema/type/TIMESTAMP.d.ts +1 -0
- package/out/schema/type/TIMESTAMP.js +6 -0
- package/out/schema/type/TIMESTAMP.js.map +1 -0
- package/out/schema/type/URL.d.ts +2 -0
- package/out/schema/type/URL.js +27 -0
- package/out/schema/type/URL.js.map +1 -0
- package/out/schema/type/UUID.d.ts +1 -0
- package/out/schema/type/UUID.js +6 -0
- package/out/schema/type/UUID.js.map +1 -0
- package/out/schema/type/binaryValue.d.ts +2 -0
- package/out/schema/type/binaryValue.js +13 -0
- package/out/schema/type/binaryValue.js.map +1 -0
- package/out/schema/type/regexType.d.ts +2 -0
- package/out/schema/type/regexType.js +20 -0
- package/out/schema/type/regexType.js.map +1 -0
- package/out/template/ChildLine.d.ts +12 -0
- package/out/template/ChildLine.js +28 -0
- package/out/template/ChildLine.js.map +1 -0
- package/out/template/ChildLineParser.d.ts +7 -0
- package/out/template/ChildLineParser.js +98 -0
- package/out/template/ChildLineParser.js.map +1 -0
- package/out/template/MetaTemplateSchemaProvider.d.ts +8 -0
- package/out/template/MetaTemplateSchemaProvider.js +35 -0
- package/out/template/MetaTemplateSchemaProvider.js.map +1 -0
- package/out/template/TemplateParser.d.ts +3 -0
- package/out/template/TemplateParser.js +214 -0
- package/out/template/TemplateParser.js.map +1 -0
- package/out/template/TemplateSchemaProviderMemory.d.ts +6 -0
- package/out/template/TemplateSchemaProviderMemory.js +37 -0
- package/out/template/TemplateSchemaProviderMemory.js.map +1 -0
- package/package.json +45 -0
package/out/all.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export { Node } from "./core/Node";
|
|
2
|
+
export { Parser } from "./core/Parser";
|
|
3
|
+
export { ParseResult } from "./core/ParseResult";
|
|
4
|
+
export { Line } from "./core/Line";
|
|
5
|
+
export { Constants } from "./core/Constants";
|
|
6
|
+
export { parseLine } from "./core/LineParser";
|
|
7
|
+
export { StringUtils } from "./core/StringUtils";
|
|
8
|
+
export { ParseException } from "./exceptions/ParseException";
|
|
9
|
+
export { Observer } from "./processors/Observer";
|
|
10
|
+
export { Schema } from "./schema/Schema";
|
|
11
|
+
export { SchemaValidator } from "./schema/SchemaValidator";
|
|
12
|
+
export { SchemaProvider } from "./schema/SchemaProvider";
|
|
13
|
+
export { NodeDefinition } from "./schema/NodeDefinition";
|
|
14
|
+
export { ChildDefinition } from "./schema/ChildDefinition";
|
|
15
|
+
export { transformNodeToSchema } from "./schema/SchemaParser";
|
|
16
|
+
export { UnifiedSchemaProvider } from "./runtime/UnifiedSchemaProvider";
|
|
17
|
+
export { ConditionalValidator } from "./runtime/ConditionalValidator";
|
|
18
|
+
export { NodeWriter, IndentStyle } from "./runtime/NodeWriter";
|
|
19
|
+
export { transformTemplateNodeToSchema } from "./template/TemplateParser";
|
package/out/all.js
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Punto de entrada público del paquete (out/all.js / out/all.d.ts).
|
|
3
|
+
// Todo lo que deba ser consumible por terceros (p. ej. la extensión VSCode)
|
|
4
|
+
// debe re-exportarse desde aquí.
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.transformTemplateNodeToSchema = exports.IndentStyle = exports.NodeWriter = exports.ConditionalValidator = exports.UnifiedSchemaProvider = exports.transformNodeToSchema = exports.ChildDefinition = exports.NodeDefinition = exports.SchemaValidator = exports.Schema = exports.ParseException = exports.StringUtils = exports.parseLine = exports.Constants = exports.Line = exports.ParseResult = exports.Parser = exports.Node = void 0;
|
|
7
|
+
var Node_1 = require("./core/Node");
|
|
8
|
+
Object.defineProperty(exports, "Node", { enumerable: true, get: function () { return Node_1.Node; } });
|
|
9
|
+
var Parser_1 = require("./core/Parser");
|
|
10
|
+
Object.defineProperty(exports, "Parser", { enumerable: true, get: function () { return Parser_1.Parser; } });
|
|
11
|
+
var ParseResult_1 = require("./core/ParseResult");
|
|
12
|
+
Object.defineProperty(exports, "ParseResult", { enumerable: true, get: function () { return ParseResult_1.ParseResult; } });
|
|
13
|
+
var Line_1 = require("./core/Line");
|
|
14
|
+
Object.defineProperty(exports, "Line", { enumerable: true, get: function () { return Line_1.Line; } });
|
|
15
|
+
var Constants_1 = require("./core/Constants");
|
|
16
|
+
Object.defineProperty(exports, "Constants", { enumerable: true, get: function () { return Constants_1.Constants; } });
|
|
17
|
+
var LineParser_1 = require("./core/LineParser");
|
|
18
|
+
Object.defineProperty(exports, "parseLine", { enumerable: true, get: function () { return LineParser_1.parseLine; } });
|
|
19
|
+
var StringUtils_1 = require("./core/StringUtils");
|
|
20
|
+
Object.defineProperty(exports, "StringUtils", { enumerable: true, get: function () { return StringUtils_1.StringUtils; } });
|
|
21
|
+
var ParseException_1 = require("./exceptions/ParseException");
|
|
22
|
+
Object.defineProperty(exports, "ParseException", { enumerable: true, get: function () { return ParseException_1.ParseException; } });
|
|
23
|
+
var Schema_1 = require("./schema/Schema");
|
|
24
|
+
Object.defineProperty(exports, "Schema", { enumerable: true, get: function () { return Schema_1.Schema; } });
|
|
25
|
+
var SchemaValidator_1 = require("./schema/SchemaValidator");
|
|
26
|
+
Object.defineProperty(exports, "SchemaValidator", { enumerable: true, get: function () { return SchemaValidator_1.SchemaValidator; } });
|
|
27
|
+
var NodeDefinition_1 = require("./schema/NodeDefinition");
|
|
28
|
+
Object.defineProperty(exports, "NodeDefinition", { enumerable: true, get: function () { return NodeDefinition_1.NodeDefinition; } });
|
|
29
|
+
var ChildDefinition_1 = require("./schema/ChildDefinition");
|
|
30
|
+
Object.defineProperty(exports, "ChildDefinition", { enumerable: true, get: function () { return ChildDefinition_1.ChildDefinition; } });
|
|
31
|
+
var SchemaParser_1 = require("./schema/SchemaParser");
|
|
32
|
+
Object.defineProperty(exports, "transformNodeToSchema", { enumerable: true, get: function () { return SchemaParser_1.transformNodeToSchema; } });
|
|
33
|
+
var UnifiedSchemaProvider_1 = require("./runtime/UnifiedSchemaProvider");
|
|
34
|
+
Object.defineProperty(exports, "UnifiedSchemaProvider", { enumerable: true, get: function () { return UnifiedSchemaProvider_1.UnifiedSchemaProvider; } });
|
|
35
|
+
var ConditionalValidator_1 = require("./runtime/ConditionalValidator");
|
|
36
|
+
Object.defineProperty(exports, "ConditionalValidator", { enumerable: true, get: function () { return ConditionalValidator_1.ConditionalValidator; } });
|
|
37
|
+
var NodeWriter_1 = require("./runtime/NodeWriter");
|
|
38
|
+
Object.defineProperty(exports, "NodeWriter", { enumerable: true, get: function () { return NodeWriter_1.NodeWriter; } });
|
|
39
|
+
Object.defineProperty(exports, "IndentStyle", { enumerable: true, get: function () { return NodeWriter_1.IndentStyle; } });
|
|
40
|
+
var TemplateParser_1 = require("./template/TemplateParser");
|
|
41
|
+
Object.defineProperty(exports, "transformTemplateNodeToSchema", { enumerable: true, get: function () { return TemplateParser_1.transformTemplateNodeToSchema; } });
|
|
42
|
+
//# sourceMappingURL=all.js.map
|
package/out/all.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"all.js","sourceRoot":"","sources":["../src/all.ts"],"names":[],"mappings":";AAAA,oEAAoE;AACpE,4EAA4E;AAC5E,iCAAiC;;;AAEjC,oCAAmC;AAA1B,4FAAA,IAAI,OAAA;AACb,wCAAuC;AAA9B,gGAAA,MAAM,OAAA;AACf,kDAAiD;AAAxC,0GAAA,WAAW,OAAA;AACpB,oCAAmC;AAA1B,4FAAA,IAAI,OAAA;AACb,8CAA6C;AAApC,sGAAA,SAAS,OAAA;AAClB,gDAA8C;AAArC,uGAAA,SAAS,OAAA;AAClB,kDAAiD;AAAxC,0GAAA,WAAW,OAAA;AAEpB,8DAA6D;AAApD,gHAAA,cAAc,OAAA;AAIvB,0CAAyC;AAAhC,gGAAA,MAAM,OAAA;AACf,4DAA2D;AAAlD,kHAAA,eAAe,OAAA;AAExB,0DAAyD;AAAhD,gHAAA,cAAc,OAAA;AACvB,4DAA2D;AAAlD,kHAAA,eAAe,OAAA;AACxB,sDAA8D;AAArD,qHAAA,qBAAqB,OAAA;AAE9B,yEAAwE;AAA/D,8HAAA,qBAAqB,OAAA;AAC9B,uEAAsE;AAA7D,4HAAA,oBAAoB,OAAA;AAC7B,mDAA+D;AAAtD,wGAAA,UAAU,OAAA;AAAE,yGAAA,WAAW,OAAA;AAEhC,4DAA0E;AAAjE,+HAAA,6BAA6B,OAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare class Constants {
|
|
2
|
+
static readonly COMMENT_CHAR: string;
|
|
3
|
+
static readonly TAB_SPACES: number;
|
|
4
|
+
static readonly TAB: string;
|
|
5
|
+
static readonly SPACE: string;
|
|
6
|
+
static readonly SEP_NODE: string;
|
|
7
|
+
static readonly SEP_TEXT_NODE: string;
|
|
8
|
+
static readonly EMPTY_NAMESPACE: string;
|
|
9
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Constants = void 0;
|
|
4
|
+
class Constants {
|
|
5
|
+
}
|
|
6
|
+
exports.Constants = Constants;
|
|
7
|
+
Constants.COMMENT_CHAR = "#";
|
|
8
|
+
Constants.TAB_SPACES = 4;
|
|
9
|
+
Constants.TAB = "\t";
|
|
10
|
+
Constants.SPACE = " ";
|
|
11
|
+
Constants.SEP_NODE = ":";
|
|
12
|
+
Constants.SEP_TEXT_NODE = ">>";
|
|
13
|
+
Constants.EMPTY_NAMESPACE = "";
|
|
14
|
+
//# sourceMappingURL=Constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Constants.js","sourceRoot":"","sources":["../../src/core/Constants.ts"],"names":[],"mappings":";;;AAAA,MAAa,SAAS;;AAAtB,8BAQC;AAPgB,sBAAY,GAAW,GAAG,CAAC;AAC3B,oBAAU,GAAW,CAAC,CAAC;AACvB,aAAG,GAAW,IAAI,CAAC;AACnB,eAAK,GAAW,GAAG,CAAC;AACpB,kBAAQ,GAAW,GAAG,CAAC;AACvB,uBAAa,GAAW,IAAI,CAAC;AAC7B,yBAAe,GAAW,EAAE,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare class Line {
|
|
2
|
+
readonly level: number;
|
|
3
|
+
readonly content: string;
|
|
4
|
+
readonly isComment: boolean;
|
|
5
|
+
readonly isBlock: boolean;
|
|
6
|
+
readonly indentLength: number;
|
|
7
|
+
constructor(level: number, content: string, isComment: boolean, isBlock: boolean, indentLength: number);
|
|
8
|
+
isEmpty(): boolean;
|
|
9
|
+
}
|
package/out/core/Line.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Line = void 0;
|
|
4
|
+
class Line {
|
|
5
|
+
constructor(level, content, isComment, isBlock, indentLength) {
|
|
6
|
+
this.level = level;
|
|
7
|
+
this.content = content;
|
|
8
|
+
this.isComment = isComment;
|
|
9
|
+
this.isBlock = isBlock;
|
|
10
|
+
this.indentLength = indentLength;
|
|
11
|
+
}
|
|
12
|
+
isEmpty() {
|
|
13
|
+
return this.content.trim() === "";
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
exports.Line = Line;
|
|
17
|
+
//# sourceMappingURL=Line.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Line.js","sourceRoot":"","sources":["../../src/core/Line.ts"],"names":[],"mappings":";;;AAAA,MAAa,IAAI;IAQhB,YAAY,KAAa,EAAE,OAAe,EAAE,SAAkB,EAAE,OAAgB,EAAE,YAAoB;QACrG,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IAElC,CAAC;IACD,OAAO;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;IACnC,CAAC;CACD;AAnBD,oBAmBC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseLine = parseLine;
|
|
4
|
+
const Constants_1 = require("./Constants");
|
|
5
|
+
const StringUtils_1 = require("./StringUtils");
|
|
6
|
+
const ParseException_1 = require("../exceptions/ParseException");
|
|
7
|
+
const Line_1 = require("./Line");
|
|
8
|
+
function parseLine(line, lastNodeBlock, lastLevel, numLine, validate = true) {
|
|
9
|
+
let level = 0;
|
|
10
|
+
let spaces = 0;
|
|
11
|
+
let pointer = 0;
|
|
12
|
+
let sawSpace = false;
|
|
13
|
+
let sawTab = false;
|
|
14
|
+
while (pointer < line.length) {
|
|
15
|
+
const c = line.charAt(pointer);
|
|
16
|
+
if (c === Constants_1.Constants.SPACE) {
|
|
17
|
+
sawSpace = true;
|
|
18
|
+
spaces++;
|
|
19
|
+
if (spaces === Constants_1.Constants.TAB_SPACES) {
|
|
20
|
+
level++;
|
|
21
|
+
spaces = 0;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
else if (c === Constants_1.Constants.TAB) {
|
|
25
|
+
sawTab = true;
|
|
26
|
+
level++;
|
|
27
|
+
spaces = 0;
|
|
28
|
+
}
|
|
29
|
+
else if (c === Constants_1.Constants.COMMENT_CHAR) {
|
|
30
|
+
return new Line_1.Line(level, line.substring(pointer + 1), true, false, pointer);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
// Primer carácter no espacio/tab/comentario => fin de indentación
|
|
34
|
+
break;
|
|
35
|
+
}
|
|
36
|
+
// Dentro del bloque de texto
|
|
37
|
+
if (lastNodeBlock && level > lastLevel) {
|
|
38
|
+
const text = StringUtils_1.StringUtils.rightTrim(line.substring(pointer + 1));
|
|
39
|
+
// El prefijo que cubre el nivel de bloque debe ser homogéneo (spec 10.2, regla 2);
|
|
40
|
+
// las líneas vacías se preservan siempre y quedan exentas (spec 10.3)
|
|
41
|
+
if (validate && sawSpace && sawTab && text.length > 0) {
|
|
42
|
+
throw new ParseException_1.ParseException(numLine, "MIXED_INDENTATION", `Mixed tabs and spaces in indentation`);
|
|
43
|
+
}
|
|
44
|
+
return new Line_1.Line(level, text, false, true, pointer);
|
|
45
|
+
}
|
|
46
|
+
// Aumentamos pointer
|
|
47
|
+
pointer++;
|
|
48
|
+
}
|
|
49
|
+
// En este punto ya estamos fuera de bloque de texto (si existía)
|
|
50
|
+
// Empty
|
|
51
|
+
if (pointer === line.length) {
|
|
52
|
+
if (lastNodeBlock) {
|
|
53
|
+
return new Line_1.Line(level, "", false, true, pointer);
|
|
54
|
+
}
|
|
55
|
+
return new Line_1.Line(level, "", false, false, pointer);
|
|
56
|
+
}
|
|
57
|
+
// Mezcla de espacios y tabuladores en la indentación (spec 8.1 y 8.3)
|
|
58
|
+
if (validate && sawSpace && sawTab) {
|
|
59
|
+
throw new ParseException_1.ParseException(numLine, "MIXED_INDENTATION", `Mixed tabs and spaces in indentation`);
|
|
60
|
+
}
|
|
61
|
+
// Indentación no es múltiplo de 4 con espacios
|
|
62
|
+
if (validate && spaces > 0) {
|
|
63
|
+
throw new ParseException_1.ParseException(numLine, "INVALID_NUMBER_SPACES", `There are ${spaces} spaces before node`);
|
|
64
|
+
}
|
|
65
|
+
// Validamos level
|
|
66
|
+
if (validate && level > lastLevel + 1) {
|
|
67
|
+
throw new ParseException_1.ParseException(numLine, "INDENTATION_LEVEL_NOT_VALID", `Level of indent incorrect: ${level}`);
|
|
68
|
+
}
|
|
69
|
+
// Caso general: devolver la línea sin la indentación consumida
|
|
70
|
+
return new Line_1.Line(level, line.substring(pointer).trim(), false, false, pointer);
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=LineParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LineParser.js","sourceRoot":"","sources":["../../src/core/LineParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NameNamespace = void 0;
|
|
4
|
+
class NameNamespace {
|
|
5
|
+
constructor(name, namespace) {
|
|
6
|
+
this.name = name;
|
|
7
|
+
this.namespace = namespace;
|
|
8
|
+
}
|
|
9
|
+
getName() {
|
|
10
|
+
return this.name;
|
|
11
|
+
}
|
|
12
|
+
getNamespace() {
|
|
13
|
+
return this.namespace;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
exports.NameNamespace = NameNamespace;
|
|
17
|
+
//# sourceMappingURL=NameNamespace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NameNamespace.js","sourceRoot":"","sources":["../../src/core/NameNamespace.ts"],"names":[],"mappings":";;;AAAA,MAAa,aAAa;IAIxB,YAAY,IAAY,EAAE,SAAiB;QACzC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;CACF;AAhBD,sCAgBC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NameNamespaceParser = void 0;
|
|
4
|
+
const ParseException_1 = require("../exceptions/ParseException");
|
|
5
|
+
const NameNamespace_1 = require("./NameNamespace");
|
|
6
|
+
class NameNamespaceParser {
|
|
7
|
+
constructor() {
|
|
8
|
+
}
|
|
9
|
+
static parse(rawName, inheritedNs, lineNumber, fullLine) {
|
|
10
|
+
if (rawName === null || rawName === undefined) {
|
|
11
|
+
throw new ParseException_1.ParseException(lineNumber, "INVALID_LINE", `Line not valid: ${fullLine}`);
|
|
12
|
+
}
|
|
13
|
+
rawName = rawName.trim();
|
|
14
|
+
const startIndex = rawName.indexOf("(");
|
|
15
|
+
const endIndex = rawName.indexOf(")");
|
|
16
|
+
let name;
|
|
17
|
+
let namespace = inheritedNs ?? "";
|
|
18
|
+
// Encontrados los dos
|
|
19
|
+
if (startIndex !== -1 && endIndex !== -1) {
|
|
20
|
+
if (startIndex > endIndex || endIndex !== rawName.length - 1) {
|
|
21
|
+
throw new ParseException_1.ParseException(lineNumber, "INVALID_NAMESPACE", `Line not valid: ${fullLine}`);
|
|
22
|
+
}
|
|
23
|
+
name = rawName.substring(0, startIndex).trim();
|
|
24
|
+
// Sin trim: la gramática (STXT-SPEC 7/16) no admite espacios dentro de '( )'
|
|
25
|
+
namespace = rawName.substring(startIndex + 1, endIndex);
|
|
26
|
+
if (namespace.length === 0) {
|
|
27
|
+
throw new ParseException_1.ParseException(lineNumber, "INVALID_NAMESPACE", `Line not valid: ${fullLine}`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
// Ninguno de los dos
|
|
31
|
+
else if (startIndex === -1 && endIndex === -1) {
|
|
32
|
+
name = rawName;
|
|
33
|
+
}
|
|
34
|
+
// Solo uno de los dos
|
|
35
|
+
else {
|
|
36
|
+
throw new ParseException_1.ParseException(lineNumber, "INVALID_NAMESPACE", `Line not valid: ${fullLine}`);
|
|
37
|
+
}
|
|
38
|
+
// Retorno
|
|
39
|
+
return new NameNamespace_1.NameNamespace(name, namespace.toLowerCase());
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.NameNamespaceParser = NameNamespaceParser;
|
|
43
|
+
//# sourceMappingURL=NameNamespaceParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NameNamespaceParser.js","sourceRoot":"","sources":["../../src/core/NameNamespaceParser.ts"],"names":[],"mappings":";;;AAAA,iEAA8D;AAC9D,mDAAgD;AAEhD,MAAa,mBAAmB;IAC/B;IACA,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAkC,EAAE,WAAsC,EAAE,UAAkB,EAAE,QAAgB;QAC5H,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC/C,MAAM,IAAI,+BAAc,CAAC,UAAU,EAAE,cAAc,EAAE,mBAAmB,QAAQ,EAAE,CAAC,CAAC;QACrF,CAAC;QAED,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAEzB,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAEtC,IAAI,IAAY,CAAC;QACjB,IAAI,SAAS,GAAW,WAAW,IAAI,EAAE,CAAC;QAE1C,sBAAsB;QACtB,IAAI,UAAU,KAAK,CAAC,CAAC,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;YAC1C,IAAI,UAAU,GAAG,QAAQ,IAAI,QAAQ,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9D,MAAM,IAAI,+BAAc,CAAC,UAAU,EAAE,mBAAmB,EAAE,mBAAmB,QAAQ,EAAE,CAAC,CAAC;YAC1F,CAAC;YAED,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;YAC/C,6EAA6E;YAC7E,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;YAExD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC5B,MAAM,IAAI,+BAAc,CAAC,UAAU,EAAE,mBAAmB,EAAE,mBAAmB,QAAQ,EAAE,CAAC,CAAC;YAC1F,CAAC;QACF,CAAC;QACD,qBAAqB;aAChB,IAAI,UAAU,KAAK,CAAC,CAAC,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;YAC/C,IAAI,GAAG,OAAO,CAAC;QAChB,CAAC;QACD,sBAAsB;aACjB,CAAC;YACL,MAAM,IAAI,+BAAc,CAAC,UAAU,EAAC,mBAAmB,EAAC,mBAAmB,QAAQ,EAAE,CAAC,CAAC;QACxF,CAAC;QAED,UAAU;QACV,OAAO,IAAI,6BAAa,CAAC,IAAI,EAAE,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;IACzD,CAAC;CACD;AA3CD,kDA2CC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NamespaceValidator = void 0;
|
|
4
|
+
const ParseException_1 = require("../exceptions/ParseException");
|
|
5
|
+
class NamespaceValidator {
|
|
6
|
+
static validateNamespaceFormat(namespace, lineNumber) {
|
|
7
|
+
if (!namespace) {
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
if (!NamespaceValidator.NAMESPACE_FORMAT.test(namespace)) {
|
|
11
|
+
throw new ParseException_1.ParseException(lineNumber, "INVALID_NAMESPACE", `Namespace not valid: ${namespace}`);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.NamespaceValidator = NamespaceValidator;
|
|
16
|
+
NamespaceValidator.NAMESPACE_FORMAT = /^@?[a-z0-9]+(\.[a-z0-9]+)+$/;
|
|
17
|
+
//# sourceMappingURL=NamespaceValidator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NamespaceValidator.js","sourceRoot":"","sources":["../../src/core/NamespaceValidator.ts"],"names":[],"mappings":";;;AAAA,iEAA8D;AAE9D,MAAa,kBAAkB;IAI9B,MAAM,CAAC,uBAAuB,CAAC,SAAoC,EAAE,UAAkB;QACtF,IAAI,CAAC,SAAS,EAAE,CAAC;YAChB,OAAO;QACR,CAAC;QAED,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1D,MAAM,IAAI,+BAAc,CAAC,UAAU,EAAE,mBAAmB,EAAE,wBAAwB,SAAS,EAAE,CAAC,CAAC;QAChG,CAAC;IACF,CAAC;;AAZF,gDAaC;AAXwB,mCAAgB,GAAW,6BAA6B,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export declare class Node {
|
|
2
|
+
private static readonly VALID_NAME;
|
|
3
|
+
private readonly name;
|
|
4
|
+
private readonly normalizedName;
|
|
5
|
+
private readonly namespace;
|
|
6
|
+
private readonly textNode;
|
|
7
|
+
private readonly value;
|
|
8
|
+
private textLines;
|
|
9
|
+
private readonly line;
|
|
10
|
+
private readonly level;
|
|
11
|
+
private children;
|
|
12
|
+
constructor(line: number, level: number, name: string, namespace: string | null | undefined, textNode: boolean, value: string | null | undefined);
|
|
13
|
+
addTextLine(line: string): void;
|
|
14
|
+
getName(): string;
|
|
15
|
+
getNormalizedName(): string;
|
|
16
|
+
getQualifiedName(): string;
|
|
17
|
+
getNamespace(): string;
|
|
18
|
+
getChildren(): ReadonlyArray<Node>;
|
|
19
|
+
addChild(node: Node): void;
|
|
20
|
+
getValue(): string;
|
|
21
|
+
getTextLines(): ReadonlyArray<string>;
|
|
22
|
+
getLine(): number;
|
|
23
|
+
getLevel(): number;
|
|
24
|
+
isTextNode(): boolean;
|
|
25
|
+
getText(): string;
|
|
26
|
+
getChild(cname: string, namespace?: string): Node | null;
|
|
27
|
+
getChildrenByName(cname: string, namespace?: string): Node[];
|
|
28
|
+
toString(): string;
|
|
29
|
+
}
|
package/out/core/Node.js
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Node = void 0;
|
|
4
|
+
const ParseException_1 = require("../exceptions/ParseException");
|
|
5
|
+
const RuntimeException_1 = require("../exceptions/RuntimeException");
|
|
6
|
+
const NamespaceValidator_1 = require("./NamespaceValidator");
|
|
7
|
+
const StringUtils_1 = require("./StringUtils");
|
|
8
|
+
class Node {
|
|
9
|
+
constructor(line, level, name, namespace, textNode, value) {
|
|
10
|
+
this.textLines = [];
|
|
11
|
+
this.children = [];
|
|
12
|
+
this.level = level;
|
|
13
|
+
this.line = line;
|
|
14
|
+
this.name = StringUtils_1.StringUtils.compactSpaces(name);
|
|
15
|
+
this.normalizedName = StringUtils_1.StringUtils.normalize(name);
|
|
16
|
+
this.namespace = StringUtils_1.StringUtils.lowerCase(namespace);
|
|
17
|
+
this.value = (value ?? "").trim();
|
|
18
|
+
this.textNode = textNode;
|
|
19
|
+
NamespaceValidator_1.NamespaceValidator.validateNamespaceFormat(this.namespace, line);
|
|
20
|
+
if (this.value.length > 0 && this.isTextNode()) {
|
|
21
|
+
throw new RuntimeException_1.RuntimeException("INLINE_VALUE_NOT_VALID", "Not empty value with textNode");
|
|
22
|
+
}
|
|
23
|
+
if (!Node.VALID_NAME.test(name)) {
|
|
24
|
+
throw new ParseException_1.ParseException(line, "INVALID_NODE_NAME", `Node name contains invalid characters: ${name}`);
|
|
25
|
+
}
|
|
26
|
+
if (this.normalizedName.length === 0) {
|
|
27
|
+
throw new ParseException_1.ParseException(line, "INVALID_NODE_NAME", `Node name not valid: ${name}`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
addTextLine(line) {
|
|
31
|
+
this.textLines.push(line);
|
|
32
|
+
}
|
|
33
|
+
getName() {
|
|
34
|
+
return this.name;
|
|
35
|
+
}
|
|
36
|
+
getNormalizedName() {
|
|
37
|
+
return this.normalizedName;
|
|
38
|
+
}
|
|
39
|
+
getQualifiedName() {
|
|
40
|
+
return this.namespace.length === 0
|
|
41
|
+
? this.normalizedName
|
|
42
|
+
: `${this.namespace}:${this.normalizedName}`;
|
|
43
|
+
}
|
|
44
|
+
getNamespace() {
|
|
45
|
+
return this.namespace;
|
|
46
|
+
}
|
|
47
|
+
getChildren() {
|
|
48
|
+
return this.children;
|
|
49
|
+
}
|
|
50
|
+
addChild(node) {
|
|
51
|
+
this.children.push(node);
|
|
52
|
+
}
|
|
53
|
+
getValue() {
|
|
54
|
+
return this.value;
|
|
55
|
+
}
|
|
56
|
+
getTextLines() {
|
|
57
|
+
return this.textLines;
|
|
58
|
+
}
|
|
59
|
+
getLine() {
|
|
60
|
+
return this.line;
|
|
61
|
+
}
|
|
62
|
+
getLevel() {
|
|
63
|
+
return this.level;
|
|
64
|
+
}
|
|
65
|
+
isTextNode() {
|
|
66
|
+
return this.textNode;
|
|
67
|
+
}
|
|
68
|
+
getText() {
|
|
69
|
+
return this.isTextNode() ? this.textLines.join("\n") : this.value;
|
|
70
|
+
}
|
|
71
|
+
getChild(cname, namespace) {
|
|
72
|
+
const result = this.getChildrenByName(cname, namespace);
|
|
73
|
+
if (result.length > 1) {
|
|
74
|
+
throw new RuntimeException_1.RuntimeException("AMBIGUOUS_CHILD", "More than 1 child. Use getChildren");
|
|
75
|
+
}
|
|
76
|
+
if (result.length === 0) {
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
return result[0];
|
|
80
|
+
}
|
|
81
|
+
// Fast access methods to children
|
|
82
|
+
getChildrenByName(cname, namespace) {
|
|
83
|
+
const key = StringUtils_1.StringUtils.normalize(cname);
|
|
84
|
+
const targetNamespace = namespace !== undefined ? namespace : this.namespace;
|
|
85
|
+
const result = [];
|
|
86
|
+
for (const child of this.children) {
|
|
87
|
+
if (child.getNormalizedName() === key && child.getNamespace() === targetNamespace) {
|
|
88
|
+
result.push(child);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return result;
|
|
92
|
+
}
|
|
93
|
+
toString() {
|
|
94
|
+
let s = "Node{";
|
|
95
|
+
s += `line=${this.line}`;
|
|
96
|
+
s += `, level=${this.level}`;
|
|
97
|
+
s += `, name='${this.name}'`;
|
|
98
|
+
if (this.namespace.length > 0) {
|
|
99
|
+
s += `, ns='${this.namespace}'`;
|
|
100
|
+
}
|
|
101
|
+
s += `, text=${this.textNode}`;
|
|
102
|
+
if (!this.textNode && this.value.length > 0) {
|
|
103
|
+
s += `, value='${this.value}'`;
|
|
104
|
+
}
|
|
105
|
+
if (this.textNode) {
|
|
106
|
+
s += `, lines=${this.textLines.length}`;
|
|
107
|
+
}
|
|
108
|
+
s += `, children=${this.children.length}`;
|
|
109
|
+
s += "}";
|
|
110
|
+
return s;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
exports.Node = Node;
|
|
114
|
+
// STXT-SPEC 4.2: letras y dígitos Unicode (categorías L y Nd) más '-', '_' y espacio
|
|
115
|
+
Node.VALID_NAME = /^[\p{L}\p{Nd}\-_ ]+$/u;
|
|
116
|
+
//# sourceMappingURL=Node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Node.js","sourceRoot":"","sources":["../../src/core/Node.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createNode = createNode;
|
|
4
|
+
const NameNamespaceParser_1 = require("./NameNamespaceParser");
|
|
5
|
+
const Node_1 = require("./Node");
|
|
6
|
+
const ParseException_1 = require("../exceptions/ParseException");
|
|
7
|
+
const Constants_1 = require("./Constants");
|
|
8
|
+
function createNode(lineIndent, lineNumber, level, parent) {
|
|
9
|
+
const line = lineIndent.content;
|
|
10
|
+
let name;
|
|
11
|
+
let value;
|
|
12
|
+
let textNode = false;
|
|
13
|
+
const nodeIndex = line.indexOf(Constants_1.Constants.SEP_NODE);
|
|
14
|
+
const textIndex = line.indexOf(Constants_1.Constants.SEP_TEXT_NODE);
|
|
15
|
+
if (nodeIndex === -1 && textIndex === -1) {
|
|
16
|
+
throw new ParseException_1.ParseException(lineNumber, "INVALID_LINE", `Line not valid: ${line}`);
|
|
17
|
+
}
|
|
18
|
+
else if (nodeIndex === -1 && textIndex !== -1) {
|
|
19
|
+
textNode = true;
|
|
20
|
+
}
|
|
21
|
+
else if (nodeIndex !== -1 && textIndex === -1) {
|
|
22
|
+
textNode = false;
|
|
23
|
+
}
|
|
24
|
+
else if (nodeIndex < textIndex) {
|
|
25
|
+
textNode = false;
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
throw new ParseException_1.ParseException(lineNumber, "INVALID_LINE", `Line not valid: ${line}`);
|
|
29
|
+
}
|
|
30
|
+
if (textNode) {
|
|
31
|
+
name = line.substring(0, textIndex);
|
|
32
|
+
value = line.substring(textIndex + Constants_1.Constants.SEP_TEXT_NODE.length);
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
name = line.substring(0, nodeIndex);
|
|
36
|
+
value = line.substring(nodeIndex + Constants_1.Constants.SEP_NODE.length);
|
|
37
|
+
}
|
|
38
|
+
if (textNode && value.trim().length > 0) {
|
|
39
|
+
throw new ParseException_1.ParseException(lineNumber, "INLINE_VALUE_NOT_VALID", `Line not valid: ${line}`);
|
|
40
|
+
}
|
|
41
|
+
// Namespace por defecto: heredado del padre
|
|
42
|
+
const nameNamespace = NameNamespaceParser_1.NameNamespaceParser.parse(name, parent ? parent.getNamespace() : null, lineNumber, line);
|
|
43
|
+
name = nameNamespace.getName();
|
|
44
|
+
const namespace = nameNamespace.getNamespace();
|
|
45
|
+
// Validamos nombre
|
|
46
|
+
if (name.length === 0) {
|
|
47
|
+
throw new ParseException_1.ParseException(lineNumber, "INVALID_LINE", `Line not valid: ${line}`);
|
|
48
|
+
}
|
|
49
|
+
// Creamos nodo
|
|
50
|
+
return new Node_1.Node(lineNumber, level, name, namespace, textNode, value);
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=NodeCreator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NodeCreator.js","sourceRoot":"","sources":["../../src/core/NodeCreator.ts"],"names":[],"mappings":";;AAMA,gCAmDC;AAxDD,+DAA4D;AAC5D,iCAA8B;AAC9B,iEAA8D;AAC9D,2CAAwC;AAExC,SAAgB,UAAU,CAAC,UAAgB,EAAE,UAAkB,EAAE,KAAa,EAAE,MAAmB;IAC/F,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC;IAEhC,IAAI,IAAY,CAAC;IACjB,IAAI,KAAa,CAAC;IAClB,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAS,CAAC,QAAQ,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAS,CAAC,aAAa,CAAC,CAAC;IAExD,IAAI,SAAS,KAAK,CAAC,CAAC,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,+BAAc,CAAC,UAAU,EAAE,cAAc,EAAE,mBAAmB,IAAI,EAAE,CAAC,CAAC;IACpF,CAAC;SAAM,IAAI,SAAS,KAAK,CAAC,CAAC,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;QAC9C,QAAQ,GAAG,IAAI,CAAC;IACpB,CAAC;SAAM,IAAI,SAAS,KAAK,CAAC,CAAC,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;QAC9C,QAAQ,GAAG,KAAK,CAAC;IACrB,CAAC;SAAM,IAAI,SAAS,GAAG,SAAS,EAAE,CAAC;QAC/B,QAAQ,GAAG,KAAK,CAAC;IACrB,CAAC;SAAM,CAAC;QACJ,MAAM,IAAI,+BAAc,CAAC,UAAU,EAAE,cAAc,EAAE,mBAAmB,IAAI,EAAE,CAAC,CAAC;IACpF,CAAC;IAED,IAAI,QAAQ,EAAE,CAAC;QACX,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QACpC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,qBAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IACvE,CAAC;SAAM,CAAC;QACJ,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QACpC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,qBAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAClE,CAAC;IAED,IAAI,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,+BAAc,CAAC,UAAU,EAAE,wBAAwB,EAAE,mBAAmB,IAAI,EAAE,CAAC,CAAC;IAC9F,CAAC;IAED,4CAA4C;IAC5C,MAAM,aAAa,GAAG,yCAAmB,CAAC,KAAK,CAC3C,IAAI,EACJ,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI,EACrC,UAAU,EACV,IAAI,CACP,CAAC;IACF,IAAI,GAAG,aAAa,CAAC,OAAO,EAAE,CAAC;IAC/B,MAAM,SAAS,GAAG,aAAa,CAAC,YAAY,EAAE,CAAC;IAE/C,mBAAmB;IACnB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,+BAAc,CAAC,UAAU,EAAE,cAAc,EAAE,mBAAmB,IAAI,EAAE,CAAC,CAAC;IACpF,CAAC;IAED,eAAe;IACf,OAAO,IAAI,WAAI,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AACzE,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Node } from "./Node";
|
|
2
|
+
import { ParseException } from "../exceptions/ParseException";
|
|
3
|
+
export declare class ParseResult {
|
|
4
|
+
private readonly nodes;
|
|
5
|
+
private readonly errors;
|
|
6
|
+
constructor(nodes?: Node[], errors?: ParseException[]);
|
|
7
|
+
getNodes(): Node[];
|
|
8
|
+
getErrors(): ParseException[];
|
|
9
|
+
hasErrors(): boolean;
|
|
10
|
+
addError(error: ParseException): void;
|
|
11
|
+
addNode(node: Node): void;
|
|
12
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ParseResult = void 0;
|
|
4
|
+
class ParseResult {
|
|
5
|
+
constructor(nodes = [], errors = []) {
|
|
6
|
+
this.nodes = nodes;
|
|
7
|
+
this.errors = errors;
|
|
8
|
+
}
|
|
9
|
+
getNodes() {
|
|
10
|
+
return this.nodes;
|
|
11
|
+
}
|
|
12
|
+
getErrors() {
|
|
13
|
+
return this.errors;
|
|
14
|
+
}
|
|
15
|
+
hasErrors() {
|
|
16
|
+
return this.errors.length > 0;
|
|
17
|
+
}
|
|
18
|
+
addError(error) {
|
|
19
|
+
this.errors.push(error);
|
|
20
|
+
}
|
|
21
|
+
addNode(node) {
|
|
22
|
+
this.nodes.push(node);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
exports.ParseResult = ParseResult;
|
|
26
|
+
//# sourceMappingURL=ParseResult.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ParseResult.js","sourceRoot":"","sources":["../../src/core/ParseResult.ts"],"names":[],"mappings":";;;AAGA,MAAa,WAAW;IAIvB,YAAY,QAAgB,EAAE,EAAE,SAA2B,EAAE;QAC5D,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,CAAC;IAEM,QAAQ;QACd,OAAO,IAAI,CAAC,KAAK,CAAC;IACnB,CAAC;IAEM,SAAS;QACf,OAAO,IAAI,CAAC,MAAM,CAAC;IACpB,CAAC;IAEM,SAAS;QACf,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IAC/B,CAAC;IAEM,QAAQ,CAAC,KAAqB;QACpC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAEM,OAAO,CAAC,IAAU;QACxB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;CACD;AA5BD,kCA4BC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Node } from "./Node";
|
|
2
|
+
import { Observer } from "../processors/Observer";
|
|
3
|
+
import { Validator } from "../processors/Validator";
|
|
4
|
+
import { ParseResult } from "./ParseResult";
|
|
5
|
+
export declare class Parser {
|
|
6
|
+
private observers;
|
|
7
|
+
private validators;
|
|
8
|
+
registerObserver(observer: Observer): void;
|
|
9
|
+
registerValidator(validator: Validator): void;
|
|
10
|
+
parse(content: string): Node[];
|
|
11
|
+
parseResult(content: string): ParseResult;
|
|
12
|
+
private processLine;
|
|
13
|
+
private handleError;
|
|
14
|
+
private closeToLevel;
|
|
15
|
+
private removeUTF8BOM;
|
|
16
|
+
}
|