@loaders.gl/xml 3.3.2 → 3.4.0-alpha.2
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/dist/dist.min.js +365 -183
- package/dist/es5/html-loader.js +59 -0
- package/dist/es5/html-loader.js.map +1 -0
- package/dist/es5/index.js +33 -0
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/lib/{parse-xml.js → parsers/parse-xml.js} +7 -6
- package/dist/es5/lib/parsers/parse-xml.js.map +1 -0
- package/dist/es5/lib/{parser/xml-parser.js → parsers/streaming-xml-parser.js} +8 -8
- package/dist/es5/lib/parsers/streaming-xml-parser.js.map +1 -0
- package/dist/es5/lib/xml-utils/uncapitalize.js +34 -0
- package/dist/es5/lib/xml-utils/uncapitalize.js.map +1 -0
- package/dist/es5/lib/xml-utils/xml-utils.js +26 -0
- package/dist/es5/lib/xml-utils/xml-utils.js.map +1 -0
- package/dist/es5/xml-loader.js +41 -5
- package/dist/es5/xml-loader.js.map +1 -1
- package/dist/esm/html-loader.js +29 -0
- package/dist/esm/html-loader.js.map +1 -0
- package/dist/esm/index.js +6 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/{parse-xml.js → parsers/parse-xml.js} +6 -5
- package/dist/esm/lib/parsers/parse-xml.js.map +1 -0
- package/dist/esm/lib/{parser/xml-parser.js → parsers/streaming-xml-parser.js} +2 -2
- package/dist/esm/lib/parsers/streaming-xml-parser.js.map +1 -0
- package/dist/esm/lib/xml-utils/uncapitalize.js +20 -0
- package/dist/esm/lib/xml-utils/uncapitalize.js.map +1 -0
- package/dist/esm/lib/xml-utils/xml-utils.js +18 -0
- package/dist/esm/lib/xml-utils/xml-utils.js.map +1 -0
- package/dist/esm/xml-loader.js +40 -5
- package/dist/esm/xml-loader.js.map +1 -1
- package/dist/html-loader.d.ts +11 -0
- package/dist/html-loader.d.ts.map +1 -0
- package/dist/html-loader.js +40 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -1
- package/dist/lib/parsers/parse-xml.d.ts +12 -0
- package/dist/lib/parsers/parse-xml.d.ts.map +1 -0
- package/dist/lib/{parse-xml.js → parsers/parse-xml.js} +7 -8
- package/dist/lib/{parser/xml-parser.d.ts → parsers/streaming-xml-parser.d.ts} +6 -2
- package/dist/lib/parsers/streaming-xml-parser.d.ts.map +1 -0
- package/dist/lib/{parser/xml-parser.js → parsers/streaming-xml-parser.js} +6 -6
- package/dist/lib/xml-utils/uncapitalize.d.ts +13 -0
- package/dist/lib/xml-utils/uncapitalize.d.ts.map +1 -0
- package/dist/lib/xml-utils/uncapitalize.js +32 -0
- package/dist/lib/xml-utils/xml-utils.d.ts +11 -0
- package/dist/lib/xml-utils/xml-utils.d.ts.map +1 -0
- package/dist/lib/xml-utils/xml-utils.js +30 -0
- package/dist/xml-loader.d.ts +21 -3
- package/dist/xml-loader.d.ts.map +1 -1
- package/dist/xml-loader.js +41 -5
- package/package.json +5 -5
- package/src/html-loader.ts +46 -0
- package/src/index.ts +16 -0
- package/src/lib/{parse-xml.ts → parsers/parse-xml.ts} +9 -6
- package/src/lib/{parser/xml-parser.ts → parsers/streaming-xml-parser.ts} +5 -3
- package/src/lib/xml-utils/uncapitalize.ts +31 -0
- package/src/lib/xml-utils/xml-utils.ts +27 -0
- package/src/xml-loader.ts +63 -6
- package/dist/es5/lib/parse-xml.js.map +0 -1
- package/dist/es5/lib/parser/xml-parser.js.map +0 -1
- package/dist/esm/lib/parse-xml.js.map +0 -1
- package/dist/esm/lib/parser/xml-parser.js.map +0 -1
- package/dist/lib/parse-xml.d.ts +0 -9
- package/dist/lib/parse-xml.d.ts.map +0 -1
- package/dist/lib/parser/xml-parser.d.ts.map +0 -1
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.HTMLLoader = void 0;
|
|
8
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
9
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
10
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
+
var _loaderUtils = require("@loaders.gl/loader-utils");
|
|
12
|
+
var _xmlLoader = require("./xml-loader");
|
|
13
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
14
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
15
|
+
var HTMLLoader = _objectSpread(_objectSpread({}, _xmlLoader.XMLLoader), {}, {
|
|
16
|
+
name: 'HTML',
|
|
17
|
+
id: 'html',
|
|
18
|
+
extensions: ['html', 'htm'],
|
|
19
|
+
mimeTypes: ['text/html'],
|
|
20
|
+
testText: testHTMLFile,
|
|
21
|
+
parse: function () {
|
|
22
|
+
var _parse = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(arrayBuffer, options) {
|
|
23
|
+
return _regenerator.default.wrap(function _callee$(_context) {
|
|
24
|
+
while (1) {
|
|
25
|
+
switch (_context.prev = _context.next) {
|
|
26
|
+
case 0:
|
|
27
|
+
return _context.abrupt("return", _parseTextSync(new TextDecoder().decode(arrayBuffer), options));
|
|
28
|
+
case 1:
|
|
29
|
+
case "end":
|
|
30
|
+
return _context.stop();
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}, _callee);
|
|
34
|
+
}));
|
|
35
|
+
function parse(_x, _x2) {
|
|
36
|
+
return _parse.apply(this, arguments);
|
|
37
|
+
}
|
|
38
|
+
return parse;
|
|
39
|
+
}(),
|
|
40
|
+
parseTextSync: function parseTextSync(text, options) {
|
|
41
|
+
return _parseTextSync(text, options);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
exports.HTMLLoader = HTMLLoader;
|
|
45
|
+
function testHTMLFile(text) {
|
|
46
|
+
return text.startsWith('<html');
|
|
47
|
+
}
|
|
48
|
+
function _parseTextSync(text, options) {
|
|
49
|
+
options = (0, _loaderUtils.mergeLoaderOptions)(options, {
|
|
50
|
+
xml: {
|
|
51
|
+
parser: 'fast-xml-parser'
|
|
52
|
+
},
|
|
53
|
+
_fastXML: {
|
|
54
|
+
htmlEntities: true
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
return _xmlLoader.XMLLoader.parseTextSync(text, options);
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=html-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html-loader.js","names":["HTMLLoader","XMLLoader","name","id","extensions","mimeTypes","testText","testHTMLFile","parse","arrayBuffer","options","parseTextSync","TextDecoder","decode","text","startsWith","mergeLoaderOptions","xml","parser","_fastXML","htmlEntities"],"sources":["../../src/html-loader.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport type {LoaderWithParser} from '@loaders.gl/loader-utils';\nimport {mergeLoaderOptions} from '@loaders.gl/loader-utils';\nimport {XMLLoader, XMLLoaderOptions} from './xml-loader';\n\nexport type HTMLLoaderOptions = XMLLoaderOptions;\n\n/**\n * Loader for HTML files\n * Essentially a copy of the XMLLoader with different mime types, file extensions and content tests.\n * This split enables applications can control whether they want HTML responses to be parsed by the XML loader or not.\n * This loader does not have any additional understanding of the structure of HTML or the document.\n */\nexport const HTMLLoader: LoaderWithParser = {\n ...XMLLoader,\n name: 'HTML',\n id: 'html',\n extensions: ['html', 'htm'],\n mimeTypes: ['text/html'],\n testText: testHTMLFile,\n parse: async (arrayBuffer: ArrayBuffer, options?: XMLLoaderOptions) =>\n parseTextSync(new TextDecoder().decode(arrayBuffer), options),\n parseTextSync: (text: string, options?: XMLLoaderOptions) => parseTextSync(text, options)\n};\n\nfunction testHTMLFile(text: string): boolean {\n // TODO - There could be space first.\n return text.startsWith('<html');\n}\n\nfunction parseTextSync(text: string, options?: XMLLoaderOptions): any {\n // fast-xml-parser can recognize HTML entities\n // https://github.com/NaturalIntelligence/fast-xml-parser/blob/master/docs/v4/2.XMLparseOptions.md#htmlentities\n // https://github.com/NaturalIntelligence/fast-xml-parser/blob/master/docs/v4/5.Entities.md\n options = mergeLoaderOptions(options, {\n xml: {\n parser: 'fast-xml-parser'\n },\n _fastXML: {\n htmlEntities: true\n }\n });\n\n return XMLLoader.parseTextSync(text, options);\n}\n"],"mappings":";;;;;;;;;;AAGA;AACA;AAAyD;AAAA;AAUlD,IAAMA,UAA4B,mCACpCC,oBAAS;EACZC,IAAI,EAAE,MAAM;EACZC,EAAE,EAAE,MAAM;EACVC,UAAU,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC;EAC3BC,SAAS,EAAE,CAAC,WAAW,CAAC;EACxBC,QAAQ,EAAEC,YAAY;EACtBC,KAAK;IAAA,uEAAE,iBAAOC,WAAwB,EAAEC,OAA0B;MAAA;QAAA;UAAA;YAAA;cAAA,iCAChEC,cAAa,CAAC,IAAIC,WAAW,EAAE,CAACC,MAAM,CAACJ,WAAW,CAAC,EAAEC,OAAO,CAAC;YAAA;YAAA;cAAA;UAAA;QAAA;MAAA;IAAA;IAAA;MAAA;IAAA;IAAA;EAAA;EAC/DC,aAAa,EAAE,uBAACG,IAAY,EAAEJ,OAA0B;IAAA,OAAKC,cAAa,CAACG,IAAI,EAAEJ,OAAO,CAAC;EAAA;AAAA,EAC1F;AAAC;AAEF,SAASH,YAAY,CAACO,IAAY,EAAW;EAE3C,OAAOA,IAAI,CAACC,UAAU,CAAC,OAAO,CAAC;AACjC;AAEA,SAASJ,cAAa,CAACG,IAAY,EAAEJ,OAA0B,EAAO;EAIpEA,OAAO,GAAG,IAAAM,+BAAkB,EAACN,OAAO,EAAE;IACpCO,GAAG,EAAE;MACHC,MAAM,EAAE;IACV,CAAC;IACDC,QAAQ,EAAE;MACRC,YAAY,EAAE;IAChB;EACF,CAAC,CAAC;EAEF,OAAOnB,oBAAS,CAACU,aAAa,CAACG,IAAI,EAAEJ,OAAO,CAAC;AAC/C"}
|
package/dist/es5/index.js
CHANGED
|
@@ -3,6 +3,12 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
Object.defineProperty(exports, "HTMLLoader", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function get() {
|
|
9
|
+
return _htmlLoader.HTMLLoader;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
6
12
|
Object.defineProperty(exports, "SAXParser", {
|
|
7
13
|
enumerable: true,
|
|
8
14
|
get: function get() {
|
|
@@ -15,6 +21,33 @@ Object.defineProperty(exports, "XMLLoader", {
|
|
|
15
21
|
return _xmlLoader.XMLLoader;
|
|
16
22
|
}
|
|
17
23
|
});
|
|
24
|
+
Object.defineProperty(exports, "_uncapitalize", {
|
|
25
|
+
enumerable: true,
|
|
26
|
+
get: function get() {
|
|
27
|
+
return _uncapitalize.uncapitalize;
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
Object.defineProperty(exports, "_uncapitalizeKeys", {
|
|
31
|
+
enumerable: true,
|
|
32
|
+
get: function get() {
|
|
33
|
+
return _uncapitalize.uncapitalizeKeys;
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
Object.defineProperty(exports, "convertXMLFieldToArrayInPlace", {
|
|
37
|
+
enumerable: true,
|
|
38
|
+
get: function get() {
|
|
39
|
+
return _xmlUtils.convertXMLFieldToArrayInPlace;
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
Object.defineProperty(exports, "convertXMLValueToArray", {
|
|
43
|
+
enumerable: true,
|
|
44
|
+
get: function get() {
|
|
45
|
+
return _xmlUtils.convertXMLValueToArray;
|
|
46
|
+
}
|
|
47
|
+
});
|
|
18
48
|
var _xmlLoader = require("./xml-loader");
|
|
49
|
+
var _htmlLoader = require("./html-loader");
|
|
19
50
|
var _sax = require("./sax-ts/sax");
|
|
51
|
+
var _xmlUtils = require("./lib/xml-utils/xml-utils");
|
|
52
|
+
var _uncapitalize = require("./lib/xml-utils/uncapitalize");
|
|
20
53
|
//# sourceMappingURL=index.js.map
|
package/dist/es5/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../src/index.ts"],"sourcesContent":["// loaders.gl, MIT license\n\n// XMLLoader\n\nexport type {XMLLoaderOptions} from './xml-loader';\nexport {XMLLoader} from './xml-loader';\n\n// SAX\n\nexport type {SAXParserOptions as SAXParserOptions} from './sax-ts/sax';\nexport {SAXParser as SAXParser} from './sax-ts/sax';\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/index.ts"],"sourcesContent":["// loaders.gl, MIT license\n\n// XMLLoader\n\nexport type {XMLLoaderOptions} from './xml-loader';\nexport {XMLLoader} from './xml-loader';\n\n// HTMLLoader\n\nexport type {HTMLLoaderOptions} from './html-loader';\nexport {HTMLLoader} from './html-loader';\n\n// SAX\n\nexport type {SAXParserOptions as SAXParserOptions} from './sax-ts/sax';\nexport {SAXParser as SAXParser} from './sax-ts/sax';\n\n// Utilities\n\nexport {convertXMLValueToArray, convertXMLFieldToArrayInPlace} from './lib/xml-utils/xml-utils';\n\n// Experimental\n\nexport {\n uncapitalize as _uncapitalize,\n uncapitalizeKeys as _uncapitalizeKeys\n} from './lib/xml-utils/uncapitalize';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA;AAKA;AAKA;AAIA;AAIA"}
|
|
@@ -4,24 +4,25 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.
|
|
7
|
+
exports.fastParseXML = fastParseXML;
|
|
8
8
|
exports.parseXMLInBatches = parseXMLInBatches;
|
|
9
9
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
10
|
-
var
|
|
10
|
+
var _streamingXmlParser = require("./streaming-xml-parser");
|
|
11
11
|
var _fastXmlParser = require("fast-xml-parser");
|
|
12
12
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
13
13
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
14
|
-
function
|
|
14
|
+
function fastParseXML(text, options) {
|
|
15
15
|
var parser = new _fastXmlParser.XMLParser(_objectSpread({
|
|
16
16
|
ignoreAttributes: false,
|
|
17
17
|
attributeNamePrefix: ''
|
|
18
|
-
}, options
|
|
18
|
+
}, options));
|
|
19
19
|
var parsedXML = parser.parse(text);
|
|
20
20
|
return parsedXML;
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
function parseXMLInBatches(text
|
|
24
|
-
var
|
|
23
|
+
function parseXMLInBatches(text) {
|
|
24
|
+
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
25
|
+
var parser = new _streamingXmlParser.StreamingXMLParser(_objectSpread(_objectSpread({}, options), {}, {
|
|
25
26
|
strict: true
|
|
26
27
|
}));
|
|
27
28
|
parser.write(text);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-xml.js","names":["fastParseXML","text","options","parser","FastXMLParser","ignoreAttributes","attributeNamePrefix","parsedXML","parse","parseXMLInBatches","StreamingXMLParser","strict","write","close","result"],"sources":["../../../../src/lib/parsers/parse-xml.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport {StreamingXMLParser} from './streaming-xml-parser';\nimport {XMLParser as FastXMLParser} from 'fast-xml-parser';\nimport type {X2jOptions} from 'fast-xml-parser';\n\n/** Type for passing through fast-xml-parser options */\nexport type FastXMLParserOptions = Partial<X2jOptions>;\n\nexport function fastParseXML(text: string, options: FastXMLParserOptions): any {\n const parser = new FastXMLParser({\n ignoreAttributes: false,\n attributeNamePrefix: '',\n ...options\n });\n\n const parsedXML = parser.parse(text);\n\n return parsedXML;\n}\n\n/**\n * @todo Build a streaming XML parser based on sax-js\n * @param text\n * @param options\n * @returns\n */\nexport function parseXMLInBatches(text: string, options = {}): any {\n const parser = new StreamingXMLParser({\n ...options,\n strict: true\n });\n\n parser.write(text);\n parser.close();\n\n return parser.result;\n}\n"],"mappings":";;;;;;;;;AAEA;AACA;AAA2D;AAAA;AAMpD,SAASA,YAAY,CAACC,IAAY,EAAEC,OAA6B,EAAO;EAC7E,IAAMC,MAAM,GAAG,IAAIC,wBAAa;IAC9BC,gBAAgB,EAAE,KAAK;IACvBC,mBAAmB,EAAE;EAAE,GACpBJ,OAAO,EACV;EAEF,IAAMK,SAAS,GAAGJ,MAAM,CAACK,KAAK,CAACP,IAAI,CAAC;EAEpC,OAAOM,SAAS;AAClB;;AAQO,SAASE,iBAAiB,CAACR,IAAY,EAAqB;EAAA,IAAnBC,OAAO,uEAAG,CAAC,CAAC;EAC1D,IAAMC,MAAM,GAAG,IAAIO,sCAAkB,iCAChCR,OAAO;IACVS,MAAM,EAAE;EAAI,GACZ;EAEFR,MAAM,CAACS,KAAK,CAACX,IAAI,CAAC;EAClBE,MAAM,CAACU,KAAK,EAAE;EAEd,OAAOV,MAAM,CAACW,MAAM;AACtB"}
|
|
@@ -4,18 +4,18 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.
|
|
7
|
+
exports.StreamingXMLParser = void 0;
|
|
8
8
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
9
9
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
10
10
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
11
|
var _sax = require("../../sax-ts/sax");
|
|
12
12
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
13
13
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
14
|
-
var
|
|
14
|
+
var StreamingXMLParser = function () {
|
|
15
15
|
|
|
16
|
-
function
|
|
16
|
+
function StreamingXMLParser(options) {
|
|
17
17
|
var _this = this;
|
|
18
|
-
(0, _classCallCheck2.default)(this,
|
|
18
|
+
(0, _classCallCheck2.default)(this, StreamingXMLParser);
|
|
19
19
|
(0, _defineProperty2.default)(this, "parser", void 0);
|
|
20
20
|
(0, _defineProperty2.default)(this, "result", undefined);
|
|
21
21
|
(0, _defineProperty2.default)(this, "previousStates", []);
|
|
@@ -61,7 +61,7 @@ var XMLParser = function () {
|
|
|
61
61
|
}
|
|
62
62
|
}, options));
|
|
63
63
|
}
|
|
64
|
-
(0, _createClass2.default)(
|
|
64
|
+
(0, _createClass2.default)(StreamingXMLParser, [{
|
|
65
65
|
key: "reset",
|
|
66
66
|
value: function reset() {
|
|
67
67
|
this.result = undefined;
|
|
@@ -133,7 +133,7 @@ var XMLParser = function () {
|
|
|
133
133
|
this.currentState = this.previousStates.pop();
|
|
134
134
|
}
|
|
135
135
|
}]);
|
|
136
|
-
return
|
|
136
|
+
return StreamingXMLParser;
|
|
137
137
|
}();
|
|
138
|
-
exports.
|
|
139
|
-
//# sourceMappingURL=xml-parser.js.map
|
|
138
|
+
exports.StreamingXMLParser = StreamingXMLParser;
|
|
139
|
+
//# sourceMappingURL=streaming-xml-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streaming-xml-parser.js","names":["StreamingXMLParser","options","undefined","Object","freeze","container","key","reset","parser","SAXParser","onready","previousStates","length","currentState","onopentag","name","attributes","isSelfClosing","_openObject","emit","onkey","onclosetag","_closeObject","onopenarray","_openArray","onclosearray","_closeArray","ontext","value","_pushOrSet","onerror","error","onend","result","pop","chunk","write","close","Array","isArray","push","newContainer"],"sources":["../../../../src/lib/parsers/streaming-xml-parser.ts"],"sourcesContent":["// @ts-nocheck\n/* eslint-disable */\n\nimport {SAXParser, SAXParserOptions} from '../../sax-ts/sax';\n// import JSONPath from '../jsonpath/jsonpath';\n\nexport type StreamingXMLParserOptions = SAXParserOptions;\n\n/**\n * StreamingXMLParser builds a JSON object using the events emitted by the SAX parser\n */\nexport class StreamingXMLParser {\n readonly parser: SAXParser;\n result = undefined;\n previousStates = [];\n currentState = Object.freeze({container: [], key: null});\n // jsonpath: JSONPath = new JSONPath();\n\n constructor(options: SAXParserOptions) {\n this.reset();\n this.parser = new SAXParser({\n onready: () => {\n this.previousStates.length = 0;\n this.currentState.container.length = 0;\n },\n\n onopentag: ({name, attributes, isSelfClosing}) => {\n this._openObject({});\n if (typeof name !== 'undefined') {\n this.parser.emit('onkey', name);\n }\n },\n\n onkey: (name) => {\n this.currentState.key = name;\n },\n\n onclosetag: () => {\n this._closeObject();\n },\n\n onopenarray: () => {\n this._openArray();\n },\n\n onclosearray: () => {\n this._closeArray();\n },\n\n ontext: (value) => {\n this._pushOrSet(value);\n },\n\n onerror: (error) => {\n throw error;\n },\n\n onend: () => {\n this.result = this.currentState.container.pop();\n },\n\n ...options\n });\n }\n\n reset(): void {\n this.result = undefined;\n this.previousStates = [];\n this.currentState = Object.freeze({container: [], key: null});\n }\n\n write(chunk): void {\n this.parser.write(chunk);\n }\n\n close(): void {\n this.parser.close();\n }\n\n // PRIVATE METHODS\n\n _pushOrSet(value): void {\n const {container, key} = this.currentState;\n if (key !== null) {\n container[key] = value;\n this.currentState.key = null;\n } else if (Array.isArray(container)) {\n container.push(value);\n } else if (container) {\n // debugger\n }\n }\n\n _openArray(newContainer = []): void {\n // this.jsonpath.push(null);\n this._pushOrSet(newContainer);\n this.previousStates.push(this.currentState);\n this.currentState = {container: newContainer, isArray: true, key: null};\n }\n\n _closeArray(): void {\n // this.jsonpath.pop();\n this.currentState = this.previousStates.pop();\n }\n\n _openObject(newContainer = {}): void {\n // this.jsonpath.push(null);\n this._pushOrSet(newContainer);\n this.previousStates.push(this.currentState);\n this.currentState = {container: newContainer, isArray: false, key: null};\n }\n\n _closeObject(): void {\n // this.jsonpath.pop();\n this.currentState = this.previousStates.pop();\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.uncapitalize = uncapitalize;
|
|
8
|
+
exports.uncapitalizeKeys = uncapitalizeKeys;
|
|
9
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
10
|
+
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
11
|
+
|
|
12
|
+
function uncapitalize(str) {
|
|
13
|
+
return typeof str === 'string' ? str.charAt(0).toLowerCase() + str.slice(1) : str;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function uncapitalizeKeys(object) {
|
|
17
|
+
if (Array.isArray(object)) {
|
|
18
|
+
return object.map(function (element) {
|
|
19
|
+
return uncapitalizeKeys(element);
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
if (object && (0, _typeof2.default)(object) === 'object') {
|
|
23
|
+
var newObject = {};
|
|
24
|
+
for (var _i = 0, _Object$entries = Object.entries(object); _i < _Object$entries.length; _i++) {
|
|
25
|
+
var _Object$entries$_i = (0, _slicedToArray2.default)(_Object$entries[_i], 2),
|
|
26
|
+
key = _Object$entries$_i[0],
|
|
27
|
+
value = _Object$entries$_i[1];
|
|
28
|
+
newObject[uncapitalize(key)] = uncapitalizeKeys(value);
|
|
29
|
+
}
|
|
30
|
+
return newObject;
|
|
31
|
+
}
|
|
32
|
+
return object;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=uncapitalize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uncapitalize.js","names":["uncapitalize","str","charAt","toLowerCase","slice","uncapitalizeKeys","object","Array","isArray","map","element","newObject","Object","entries","key","value"],"sources":["../../../../src/lib/xml-utils/uncapitalize.ts"],"sourcesContent":["// loaders.gl, MIT license\n\n/**\n * Uncapitalize first letter of a string\n * @param str\n * @returns\n */\nexport function uncapitalize(str: string): string {\n return typeof str === 'string' ? str.charAt(0).toLowerCase() + str.slice(1) : str;\n}\n\n/**\n * Recursively uncapitalize all keys in a nested object\n * @param object\n * @returns\n */\nexport function uncapitalizeKeys(object: any): any {\n if (Array.isArray(object)) {\n return object.map((element) => uncapitalizeKeys(element));\n }\n\n if (object && typeof object === 'object') {\n const newObject = {};\n for (const [key, value] of Object.entries(object)) {\n newObject[uncapitalize(key)] = uncapitalizeKeys(value);\n }\n return newObject;\n }\n\n return object;\n}\n"],"mappings":";;;;;;;;;;;AAOO,SAASA,YAAY,CAACC,GAAW,EAAU;EAChD,OAAO,OAAOA,GAAG,KAAK,QAAQ,GAAGA,GAAG,CAACC,MAAM,CAAC,CAAC,CAAC,CAACC,WAAW,EAAE,GAAGF,GAAG,CAACG,KAAK,CAAC,CAAC,CAAC,GAAGH,GAAG;AACnF;;AAOO,SAASI,gBAAgB,CAACC,MAAW,EAAO;EACjD,IAAIC,KAAK,CAACC,OAAO,CAACF,MAAM,CAAC,EAAE;IACzB,OAAOA,MAAM,CAACG,GAAG,CAAC,UAACC,OAAO;MAAA,OAAKL,gBAAgB,CAACK,OAAO,CAAC;IAAA,EAAC;EAC3D;EAEA,IAAIJ,MAAM,IAAI,sBAAOA,MAAM,MAAK,QAAQ,EAAE;IACxC,IAAMK,SAAS,GAAG,CAAC,CAAC;IACpB,mCAA2BC,MAAM,CAACC,OAAO,CAACP,MAAM,CAAC,qCAAE;MAA9C;QAAOQ,GAAG;QAAEC,KAAK;MACpBJ,SAAS,CAACX,YAAY,CAACc,GAAG,CAAC,CAAC,GAAGT,gBAAgB,CAACU,KAAK,CAAC;IACxD;IACA,OAAOJ,SAAS;EAClB;EAEA,OAAOL,MAAM;AACf"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.convertXMLFieldToArrayInPlace = convertXMLFieldToArrayInPlace;
|
|
8
|
+
exports.convertXMLValueToArray = convertXMLValueToArray;
|
|
9
|
+
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
10
|
+
|
|
11
|
+
function convertXMLValueToArray(xmlValue) {
|
|
12
|
+
if (Array.isArray(xmlValue)) {
|
|
13
|
+
return xmlValue;
|
|
14
|
+
}
|
|
15
|
+
if (xmlValue && (0, _typeof2.default)(xmlValue) === 'object' && xmlValue['0']) {
|
|
16
|
+
}
|
|
17
|
+
if (xmlValue) {
|
|
18
|
+
return [xmlValue];
|
|
19
|
+
}
|
|
20
|
+
return [];
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function convertXMLFieldToArrayInPlace(xml, key) {
|
|
24
|
+
xml[key] = convertXMLValueToArray(xml[key]);
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=xml-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xml-utils.js","names":["convertXMLValueToArray","xmlValue","Array","isArray","convertXMLFieldToArrayInPlace","xml","key"],"sources":["../../../../src/lib/xml-utils/xml-utils.ts"],"sourcesContent":["// TODO - these utilities could be moved to the XML parser.\n// uncapitalizeKeys could be an XMLLoader option\n\n/**\n * Extracts a value or array and always return an array\n * Useful since XML parses to object instead of array when only a single value is provided\n */\nexport function convertXMLValueToArray(xmlValue: unknown): unknown[] {\n if (Array.isArray(xmlValue)) {\n return xmlValue;\n }\n if (xmlValue && typeof xmlValue === 'object' && xmlValue['0']) {\n // Error this is an objectified array\n }\n if (xmlValue) {\n return [xmlValue];\n }\n return [];\n}\n\n/**\n * Mutates a field in place, converting it to array\n * Useful since XML parses to object instead of array when only a single value is provided\n */\nexport function convertXMLFieldToArrayInPlace(xml: any, key: string): void {\n xml[key] = convertXMLValueToArray(xml[key]);\n}\n"],"mappings":";;;;;;;;;;AAOO,SAASA,sBAAsB,CAACC,QAAiB,EAAa;EACnE,IAAIC,KAAK,CAACC,OAAO,CAACF,QAAQ,CAAC,EAAE;IAC3B,OAAOA,QAAQ;EACjB;EACA,IAAIA,QAAQ,IAAI,sBAAOA,QAAQ,MAAK,QAAQ,IAAIA,QAAQ,CAAC,GAAG,CAAC,EAAE;EAE/D;EACA,IAAIA,QAAQ,EAAE;IACZ,OAAO,CAACA,QAAQ,CAAC;EACnB;EACA,OAAO,EAAE;AACX;;AAMO,SAASG,6BAA6B,CAACC,GAAQ,EAAEC,GAAW,EAAQ;EACzED,GAAG,CAACC,GAAG,CAAC,GAAGN,sBAAsB,CAACK,GAAG,CAACC,GAAG,CAAC,CAAC;AAC7C"}
|
package/dist/es5/xml-loader.js
CHANGED
|
@@ -6,9 +6,13 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
});
|
|
7
7
|
exports._typecheckXMLLoader = exports.XMLLoader = void 0;
|
|
8
8
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
9
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
10
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
10
|
-
var _parseXml = require("./lib/parse-xml");
|
|
11
|
-
var
|
|
11
|
+
var _parseXml = require("./lib/parsers/parse-xml");
|
|
12
|
+
var _uncapitalize = require("./lib/xml-utils/uncapitalize");
|
|
13
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
14
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
15
|
+
var VERSION = typeof "3.4.0-alpha.2" !== 'undefined' ? "3.4.0-alpha.2" : 'latest';
|
|
12
16
|
var XMLLoader = {
|
|
13
17
|
name: 'XML',
|
|
14
18
|
id: 'xml',
|
|
@@ -19,7 +23,13 @@ var XMLLoader = {
|
|
|
19
23
|
mimeTypes: ['application/xml', 'text/xml'],
|
|
20
24
|
testText: testXMLFile,
|
|
21
25
|
options: {
|
|
22
|
-
xml: {
|
|
26
|
+
xml: {
|
|
27
|
+
parser: 'fast-xml-parser',
|
|
28
|
+
uncapitalizeKeys: false,
|
|
29
|
+
removeNSPrefix: false,
|
|
30
|
+
textNodeName: 'value',
|
|
31
|
+
arrayPaths: []
|
|
32
|
+
}
|
|
23
33
|
},
|
|
24
34
|
parse: function () {
|
|
25
35
|
var _parse = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(arrayBuffer, options) {
|
|
@@ -27,7 +37,7 @@ var XMLLoader = {
|
|
|
27
37
|
while (1) {
|
|
28
38
|
switch (_context.prev = _context.next) {
|
|
29
39
|
case 0:
|
|
30
|
-
return _context.abrupt("return", (
|
|
40
|
+
return _context.abrupt("return", _parseTextSync(new TextDecoder().decode(arrayBuffer), options));
|
|
31
41
|
case 1:
|
|
32
42
|
case "end":
|
|
33
43
|
return _context.stop();
|
|
@@ -41,13 +51,39 @@ var XMLLoader = {
|
|
|
41
51
|
return parse;
|
|
42
52
|
}(),
|
|
43
53
|
parseTextSync: function parseTextSync(text, options) {
|
|
44
|
-
return (
|
|
54
|
+
return _parseTextSync(text, options);
|
|
45
55
|
}
|
|
46
56
|
};
|
|
47
57
|
exports.XMLLoader = XMLLoader;
|
|
48
58
|
function testXMLFile(text) {
|
|
49
59
|
return text.startsWith('<?xml');
|
|
50
60
|
}
|
|
61
|
+
function _parseTextSync(text, options) {
|
|
62
|
+
var _options$xml;
|
|
63
|
+
var xmlOptions = _objectSpread(_objectSpread({}, XMLLoader.options.xml), options === null || options === void 0 ? void 0 : options.xml);
|
|
64
|
+
switch (xmlOptions.parser) {
|
|
65
|
+
case 'fast-xml-parser':
|
|
66
|
+
var fastXMLOptions = _objectSpread({
|
|
67
|
+
allowBooleanAttributes: true,
|
|
68
|
+
ignoreDeclaration: true,
|
|
69
|
+
|
|
70
|
+
removeNSPrefix: xmlOptions.removeNSPrefix,
|
|
71
|
+
textNodeName: xmlOptions.textNodeName,
|
|
72
|
+
isArray: function isArray(name, jpath, isLeafNode, isAttribute) {
|
|
73
|
+
var _xmlOptions$arrayPath;
|
|
74
|
+
var array = Boolean(xmlOptions === null || xmlOptions === void 0 ? void 0 : (_xmlOptions$arrayPath = xmlOptions.arrayPaths) === null || _xmlOptions$arrayPath === void 0 ? void 0 : _xmlOptions$arrayPath.some(function (path) {
|
|
75
|
+
return jpath === path;
|
|
76
|
+
}));
|
|
77
|
+
return array;
|
|
78
|
+
}
|
|
79
|
+
}, options === null || options === void 0 ? void 0 : options._fastXML);
|
|
80
|
+
var xml = (0, _parseXml.fastParseXML)(text, fastXMLOptions);
|
|
81
|
+
|
|
82
|
+
return xmlOptions.uncapitalizeKeys ? (0, _uncapitalize.uncapitalizeKeys)(xml) : xml;
|
|
83
|
+
default:
|
|
84
|
+
throw new Error(options === null || options === void 0 ? void 0 : (_options$xml = options.xml) === null || _options$xml === void 0 ? void 0 : _options$xml.parser);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
51
87
|
var _typecheckXMLLoader = XMLLoader;
|
|
52
88
|
exports._typecheckXMLLoader = _typecheckXMLLoader;
|
|
53
89
|
//# sourceMappingURL=xml-loader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xml-loader.js","names":["VERSION","XMLLoader","name","id","module","version","worker","extensions","mimeTypes","testText","testXMLFile","options","xml","parse","arrayBuffer","
|
|
1
|
+
{"version":3,"file":"xml-loader.js","names":["VERSION","XMLLoader","name","id","module","version","worker","extensions","mimeTypes","testText","testXMLFile","options","xml","parser","uncapitalizeKeys","removeNSPrefix","textNodeName","arrayPaths","parse","arrayBuffer","parseTextSync","TextDecoder","decode","text","startsWith","xmlOptions","fastXMLOptions","allowBooleanAttributes","ignoreDeclaration","isArray","jpath","isLeafNode","isAttribute","array","Boolean","some","path","_fastXML","fastParseXML","Error","_typecheckXMLLoader"],"sources":["../../src/xml-loader.ts"],"sourcesContent":["import type {LoaderWithParser, LoaderOptions} from '@loaders.gl/loader-utils';\nimport type {SAXParserOptions} from './sax-ts/sax';\nimport {fastParseXML, FastXMLParserOptions} from './lib/parsers/parse-xml';\nimport {uncapitalizeKeys} from './lib/xml-utils/uncapitalize';\n\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\nexport type XMLLoaderOptions = LoaderOptions & {\n xml?: {\n // TODO - type this harder\n parser?: 'fast-xml-parser' | string;\n /** XML is typically PascalCase, JavaScript prefects camelCase */\n uncapitalizeKeys?: boolean;\n removeNSPrefix?: boolean;\n textNodeName?: string;\n arrayPaths?: string[];\n };\n /** @deprecated Experimental, passes options to fast-xml-parser, IF it is being used */\n _fastXML?: FastXMLParserOptions;\n /** @deprecated Experimental, passes options to the SAX XML parser, IF it is being used. */\n _sax?: SAXParserOptions;\n};\n\n/**\n * Loader for XML files\n */\nexport const XMLLoader = {\n name: 'XML',\n id: 'xml',\n module: 'xml',\n version: VERSION,\n worker: false,\n extensions: ['xml'],\n mimeTypes: ['application/xml', 'text/xml'],\n testText: testXMLFile,\n options: {\n xml: {\n parser: 'fast-xml-parser',\n uncapitalizeKeys: false,\n removeNSPrefix: false,\n textNodeName: 'value',\n arrayPaths: []\n }\n },\n parse: async (arrayBuffer: ArrayBuffer, options?: XMLLoaderOptions) =>\n parseTextSync(new TextDecoder().decode(arrayBuffer), options),\n parseTextSync: (text: string, options?: XMLLoaderOptions) => parseTextSync(text, options)\n};\n\nfunction testXMLFile(text: string): boolean {\n // TODO - There could be space first.\n return text.startsWith('<?xml');\n}\n\nfunction parseTextSync(text: string, options?: XMLLoaderOptions): any {\n const xmlOptions: Required<XMLLoaderOptions['xml']> = {...XMLLoader.options.xml, ...options?.xml};\n switch (xmlOptions.parser) {\n case 'fast-xml-parser':\n const fastXMLOptions: FastXMLParserOptions = {\n // Default FastXML options\n // https://github.com/NaturalIntelligence/fast-xml-parser/blob/master/docs/v4/2.XMLparseOptions.md#allowbooleanattributes\n allowBooleanAttributes: true,\n // https://github.com/NaturalIntelligence/fast-xml-parser/blob/master/docs/v4/2.XMLparseOptions.md#ignoredeclaration\n ignoreDeclaration: true,\n\n // XMLLoader Options: Map to FastXMLOptions\n\n // https://github.com/NaturalIntelligence/fast-xml-parser/blob/master/docs/v4/2.XMLparseOptions.md#removensprefix\n removeNSPrefix: xmlOptions.removeNSPrefix,\n\n // https://github.com/NaturalIntelligence/fast-xml-parser/blob/master/docs/v4/2.XMLparseOptions.md#textnodename\n textNodeName: xmlOptions.textNodeName,\n\n isArray: (name: string, jpath: string, isLeafNode: boolean, isAttribute: boolean) => {\n const array = Boolean(xmlOptions?.arrayPaths?.some((path) => jpath === path));\n return array;\n },\n\n // Application overrides\n ...options?._fastXML\n };\n\n const xml = fastParseXML(text, fastXMLOptions);\n\n // Note - could be done with FastXML tag processing\n return xmlOptions.uncapitalizeKeys ? uncapitalizeKeys(xml) : xml;\n\n default:\n throw new Error(options?.xml?.parser);\n }\n}\n\nexport const _typecheckXMLLoader: LoaderWithParser = XMLLoader;\n"],"mappings":";;;;;;;;;;AAEA;AACA;AAA8D;AAAA;AAI9D,IAAMA,OAAO,GAAG,sBAAkB,KAAK,WAAW,qBAAiB,QAAQ;AAqBpE,IAAMC,SAAS,GAAG;EACvBC,IAAI,EAAE,KAAK;EACXC,EAAE,EAAE,KAAK;EACTC,MAAM,EAAE,KAAK;EACbC,OAAO,EAAEL,OAAO;EAChBM,MAAM,EAAE,KAAK;EACbC,UAAU,EAAE,CAAC,KAAK,CAAC;EACnBC,SAAS,EAAE,CAAC,iBAAiB,EAAE,UAAU,CAAC;EAC1CC,QAAQ,EAAEC,WAAW;EACrBC,OAAO,EAAE;IACPC,GAAG,EAAE;MACHC,MAAM,EAAE,iBAAiB;MACzBC,gBAAgB,EAAE,KAAK;MACvBC,cAAc,EAAE,KAAK;MACrBC,YAAY,EAAE,OAAO;MACrBC,UAAU,EAAE;IACd;EACF,CAAC;EACDC,KAAK;IAAA,uEAAE,iBAAOC,WAAwB,EAAER,OAA0B;MAAA;QAAA;UAAA;YAAA;cAAA,iCAChES,cAAa,CAAC,IAAIC,WAAW,EAAE,CAACC,MAAM,CAACH,WAAW,CAAC,EAAER,OAAO,CAAC;YAAA;YAAA;cAAA;UAAA;QAAA;MAAA;IAAA;IAAA;MAAA;IAAA;IAAA;EAAA;EAC/DS,aAAa,EAAE,uBAACG,IAAY,EAAEZ,OAA0B;IAAA,OAAKS,cAAa,CAACG,IAAI,EAAEZ,OAAO,CAAC;EAAA;AAC3F,CAAC;AAAC;AAEF,SAASD,WAAW,CAACa,IAAY,EAAW;EAE1C,OAAOA,IAAI,CAACC,UAAU,CAAC,OAAO,CAAC;AACjC;AAEA,SAASJ,cAAa,CAACG,IAAY,EAAEZ,OAA0B,EAAO;EAAA;EACpE,IAAMc,UAA6C,mCAAOxB,SAAS,CAACU,OAAO,CAACC,GAAG,GAAKD,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEC,GAAG,CAAC;EACjG,QAAQa,UAAU,CAACZ,MAAM;IACvB,KAAK,iBAAiB;MACpB,IAAMa,cAAoC;QAGxCC,sBAAsB,EAAE,IAAI;QAE5BC,iBAAiB,EAAE,IAAI;;QAKvBb,cAAc,EAAEU,UAAU,CAACV,cAAc;QAGzCC,YAAY,EAAES,UAAU,CAACT,YAAY;QAErCa,OAAO,EAAE,iBAAC3B,IAAY,EAAE4B,KAAa,EAAEC,UAAmB,EAAEC,WAAoB,EAAK;UAAA;UACnF,IAAMC,KAAK,GAAGC,OAAO,CAACT,UAAU,aAAVA,UAAU,gDAAVA,UAAU,CAAER,UAAU,0DAAtB,sBAAwBkB,IAAI,CAAC,UAACC,IAAI;YAAA,OAAKN,KAAK,KAAKM,IAAI;UAAA,EAAC,CAAC;UAC7E,OAAOH,KAAK;QACd;MAAC,GAGEtB,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAE0B,QAAQ,CACrB;MAED,IAAMzB,GAAG,GAAG,IAAA0B,sBAAY,EAACf,IAAI,EAAEG,cAAc,CAAC;;MAG9C,OAAOD,UAAU,CAACX,gBAAgB,GAAG,IAAAA,8BAAgB,EAACF,GAAG,CAAC,GAAGA,GAAG;IAElE;MACE,MAAM,IAAI2B,KAAK,CAAC5B,OAAO,aAAPA,OAAO,uCAAPA,OAAO,CAAEC,GAAG,iDAAZ,aAAcC,MAAM,CAAC;EAAC;AAE5C;AAEO,IAAM2B,mBAAqC,GAAGvC,SAAS;AAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
import { mergeLoaderOptions } from '@loaders.gl/loader-utils';
|
|
4
|
+
import { XMLLoader } from './xml-loader';
|
|
5
|
+
export const HTMLLoader = {
|
|
6
|
+
...XMLLoader,
|
|
7
|
+
name: 'HTML',
|
|
8
|
+
id: 'html',
|
|
9
|
+
extensions: ['html', 'htm'],
|
|
10
|
+
mimeTypes: ['text/html'],
|
|
11
|
+
testText: testHTMLFile,
|
|
12
|
+
parse: async (arrayBuffer, options) => parseTextSync(new TextDecoder().decode(arrayBuffer), options),
|
|
13
|
+
parseTextSync: (text, options) => parseTextSync(text, options)
|
|
14
|
+
};
|
|
15
|
+
function testHTMLFile(text) {
|
|
16
|
+
return text.startsWith('<html');
|
|
17
|
+
}
|
|
18
|
+
function parseTextSync(text, options) {
|
|
19
|
+
options = mergeLoaderOptions(options, {
|
|
20
|
+
xml: {
|
|
21
|
+
parser: 'fast-xml-parser'
|
|
22
|
+
},
|
|
23
|
+
_fastXML: {
|
|
24
|
+
htmlEntities: true
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
return XMLLoader.parseTextSync(text, options);
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=html-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html-loader.js","names":["mergeLoaderOptions","XMLLoader","HTMLLoader","name","id","extensions","mimeTypes","testText","testHTMLFile","parse","arrayBuffer","options","parseTextSync","TextDecoder","decode","text","startsWith","xml","parser","_fastXML","htmlEntities"],"sources":["../../src/html-loader.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport type {LoaderWithParser} from '@loaders.gl/loader-utils';\nimport {mergeLoaderOptions} from '@loaders.gl/loader-utils';\nimport {XMLLoader, XMLLoaderOptions} from './xml-loader';\n\nexport type HTMLLoaderOptions = XMLLoaderOptions;\n\n/**\n * Loader for HTML files\n * Essentially a copy of the XMLLoader with different mime types, file extensions and content tests.\n * This split enables applications can control whether they want HTML responses to be parsed by the XML loader or not.\n * This loader does not have any additional understanding of the structure of HTML or the document.\n */\nexport const HTMLLoader: LoaderWithParser = {\n ...XMLLoader,\n name: 'HTML',\n id: 'html',\n extensions: ['html', 'htm'],\n mimeTypes: ['text/html'],\n testText: testHTMLFile,\n parse: async (arrayBuffer: ArrayBuffer, options?: XMLLoaderOptions) =>\n parseTextSync(new TextDecoder().decode(arrayBuffer), options),\n parseTextSync: (text: string, options?: XMLLoaderOptions) => parseTextSync(text, options)\n};\n\nfunction testHTMLFile(text: string): boolean {\n // TODO - There could be space first.\n return text.startsWith('<html');\n}\n\nfunction parseTextSync(text: string, options?: XMLLoaderOptions): any {\n // fast-xml-parser can recognize HTML entities\n // https://github.com/NaturalIntelligence/fast-xml-parser/blob/master/docs/v4/2.XMLparseOptions.md#htmlentities\n // https://github.com/NaturalIntelligence/fast-xml-parser/blob/master/docs/v4/5.Entities.md\n options = mergeLoaderOptions(options, {\n xml: {\n parser: 'fast-xml-parser'\n },\n _fastXML: {\n htmlEntities: true\n }\n });\n\n return XMLLoader.parseTextSync(text, options);\n}\n"],"mappings":";;AAGA,SAAQA,kBAAkB,QAAO,0BAA0B;AAC3D,SAAQC,SAAS,QAAyB,cAAc;AAUxD,OAAO,MAAMC,UAA4B,GAAG;EAC1C,GAAGD,SAAS;EACZE,IAAI,EAAE,MAAM;EACZC,EAAE,EAAE,MAAM;EACVC,UAAU,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC;EAC3BC,SAAS,EAAE,CAAC,WAAW,CAAC;EACxBC,QAAQ,EAAEC,YAAY;EACtBC,KAAK,EAAE,OAAOC,WAAwB,EAAEC,OAA0B,KAChEC,aAAa,CAAC,IAAIC,WAAW,EAAE,CAACC,MAAM,CAACJ,WAAW,CAAC,EAAEC,OAAO,CAAC;EAC/DC,aAAa,EAAE,CAACG,IAAY,EAAEJ,OAA0B,KAAKC,aAAa,CAACG,IAAI,EAAEJ,OAAO;AAC1F,CAAC;AAED,SAASH,YAAY,CAACO,IAAY,EAAW;EAE3C,OAAOA,IAAI,CAACC,UAAU,CAAC,OAAO,CAAC;AACjC;AAEA,SAASJ,aAAa,CAACG,IAAY,EAAEJ,OAA0B,EAAO;EAIpEA,OAAO,GAAGX,kBAAkB,CAACW,OAAO,EAAE;IACpCM,GAAG,EAAE;MACHC,MAAM,EAAE;IACV,CAAC;IACDC,QAAQ,EAAE;MACRC,YAAY,EAAE;IAChB;EACF,CAAC,CAAC;EAEF,OAAOnB,SAAS,CAACW,aAAa,CAACG,IAAI,EAAEJ,OAAO,CAAC;AAC/C"}
|
package/dist/esm/index.js
CHANGED
|
@@ -2,5 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
export { XMLLoader } from './xml-loader';
|
|
4
4
|
|
|
5
|
+
export { HTMLLoader } from './html-loader';
|
|
6
|
+
|
|
5
7
|
export { SAXParser } from './sax-ts/sax';
|
|
8
|
+
|
|
9
|
+
export { convertXMLValueToArray, convertXMLFieldToArrayInPlace } from './lib/xml-utils/xml-utils';
|
|
10
|
+
|
|
11
|
+
export { uncapitalize as _uncapitalize, uncapitalizeKeys as _uncapitalizeKeys } from './lib/xml-utils/uncapitalize';
|
|
6
12
|
//# sourceMappingURL=index.js.map
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["XMLLoader","SAXParser"],"sources":["../../src/index.ts"],"sourcesContent":["// loaders.gl, MIT license\n\n// XMLLoader\n\nexport type {XMLLoaderOptions} from './xml-loader';\nexport {XMLLoader} from './xml-loader';\n\n// SAX\n\nexport type {SAXParserOptions as SAXParserOptions} from './sax-ts/sax';\nexport {SAXParser as SAXParser} from './sax-ts/sax';\n"],"mappings":";;AAKA,SAAQA,SAAS,QAAO,cAAc;;AAKtC,SAAQC,SAAsB,QAAO,cAAc"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["XMLLoader","HTMLLoader","SAXParser","convertXMLValueToArray","convertXMLFieldToArrayInPlace","uncapitalize","_uncapitalize","uncapitalizeKeys","_uncapitalizeKeys"],"sources":["../../src/index.ts"],"sourcesContent":["// loaders.gl, MIT license\n\n// XMLLoader\n\nexport type {XMLLoaderOptions} from './xml-loader';\nexport {XMLLoader} from './xml-loader';\n\n// HTMLLoader\n\nexport type {HTMLLoaderOptions} from './html-loader';\nexport {HTMLLoader} from './html-loader';\n\n// SAX\n\nexport type {SAXParserOptions as SAXParserOptions} from './sax-ts/sax';\nexport {SAXParser as SAXParser} from './sax-ts/sax';\n\n// Utilities\n\nexport {convertXMLValueToArray, convertXMLFieldToArrayInPlace} from './lib/xml-utils/xml-utils';\n\n// Experimental\n\nexport {\n uncapitalize as _uncapitalize,\n uncapitalizeKeys as _uncapitalizeKeys\n} from './lib/xml-utils/uncapitalize';\n"],"mappings":";;AAKA,SAAQA,SAAS,QAAO,cAAc;;AAKtC,SAAQC,UAAU,QAAO,eAAe;;AAKxC,SAAQC,SAAsB,QAAO,cAAc;;AAInD,SAAQC,sBAAsB,EAAEC,6BAA6B,QAAO,2BAA2B;;AAI/F,SACEC,YAAY,IAAIC,aAAa,EAC7BC,gBAAgB,IAAIC,iBAAiB,QAChC,8BAA8B"}
|
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { StreamingXMLParser } from './streaming-xml-parser';
|
|
4
4
|
import { XMLParser as FastXMLParser } from 'fast-xml-parser';
|
|
5
|
-
export function
|
|
5
|
+
export function fastParseXML(text, options) {
|
|
6
6
|
const parser = new FastXMLParser({
|
|
7
7
|
ignoreAttributes: false,
|
|
8
8
|
attributeNamePrefix: '',
|
|
9
|
-
...
|
|
9
|
+
...options
|
|
10
10
|
});
|
|
11
11
|
const parsedXML = parser.parse(text);
|
|
12
12
|
return parsedXML;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
export function parseXMLInBatches(text
|
|
16
|
-
|
|
15
|
+
export function parseXMLInBatches(text) {
|
|
16
|
+
let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
17
|
+
const parser = new StreamingXMLParser({
|
|
17
18
|
...options,
|
|
18
19
|
strict: true
|
|
19
20
|
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-xml.js","names":["StreamingXMLParser","XMLParser","FastXMLParser","fastParseXML","text","options","parser","ignoreAttributes","attributeNamePrefix","parsedXML","parse","parseXMLInBatches","strict","write","close","result"],"sources":["../../../../src/lib/parsers/parse-xml.ts"],"sourcesContent":["// loaders.gl, MIT license\n\nimport {StreamingXMLParser} from './streaming-xml-parser';\nimport {XMLParser as FastXMLParser} from 'fast-xml-parser';\nimport type {X2jOptions} from 'fast-xml-parser';\n\n/** Type for passing through fast-xml-parser options */\nexport type FastXMLParserOptions = Partial<X2jOptions>;\n\nexport function fastParseXML(text: string, options: FastXMLParserOptions): any {\n const parser = new FastXMLParser({\n ignoreAttributes: false,\n attributeNamePrefix: '',\n ...options\n });\n\n const parsedXML = parser.parse(text);\n\n return parsedXML;\n}\n\n/**\n * @todo Build a streaming XML parser based on sax-js\n * @param text\n * @param options\n * @returns\n */\nexport function parseXMLInBatches(text: string, options = {}): any {\n const parser = new StreamingXMLParser({\n ...options,\n strict: true\n });\n\n parser.write(text);\n parser.close();\n\n return parser.result;\n}\n"],"mappings":";;AAEA,SAAQA,kBAAkB,QAAO,wBAAwB;AACzD,SAAQC,SAAS,IAAIC,aAAa,QAAO,iBAAiB;AAM1D,OAAO,SAASC,YAAY,CAACC,IAAY,EAAEC,OAA6B,EAAO;EAC7E,MAAMC,MAAM,GAAG,IAAIJ,aAAa,CAAC;IAC/BK,gBAAgB,EAAE,KAAK;IACvBC,mBAAmB,EAAE,EAAE;IACvB,GAAGH;EACL,CAAC,CAAC;EAEF,MAAMI,SAAS,GAAGH,MAAM,CAACI,KAAK,CAACN,IAAI,CAAC;EAEpC,OAAOK,SAAS;AAClB;;AAQA,OAAO,SAASE,iBAAiB,CAACP,IAAY,EAAqB;EAAA,IAAnBC,OAAO,uEAAG,CAAC,CAAC;EAC1D,MAAMC,MAAM,GAAG,IAAIN,kBAAkB,CAAC;IACpC,GAAGK,OAAO;IACVO,MAAM,EAAE;EACV,CAAC,CAAC;EAEFN,MAAM,CAACO,KAAK,CAACT,IAAI,CAAC;EAClBE,MAAM,CAACQ,KAAK,EAAE;EAEd,OAAOR,MAAM,CAACS,MAAM;AACtB"}
|
|
@@ -2,7 +2,7 @@ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
|
2
2
|
|
|
3
3
|
import { SAXParser } from '../../sax-ts/sax';
|
|
4
4
|
|
|
5
|
-
export class
|
|
5
|
+
export class StreamingXMLParser {
|
|
6
6
|
|
|
7
7
|
constructor(options) {
|
|
8
8
|
_defineProperty(this, "parser", void 0);
|
|
@@ -108,4 +108,4 @@ export class XMLParser {
|
|
|
108
108
|
this.currentState = this.previousStates.pop();
|
|
109
109
|
}
|
|
110
110
|
}
|
|
111
|
-
//# sourceMappingURL=xml-parser.js.map
|
|
111
|
+
//# sourceMappingURL=streaming-xml-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streaming-xml-parser.js","names":["SAXParser","StreamingXMLParser","constructor","options","undefined","Object","freeze","container","key","reset","parser","onready","previousStates","length","currentState","onopentag","name","attributes","isSelfClosing","_openObject","emit","onkey","onclosetag","_closeObject","onopenarray","_openArray","onclosearray","_closeArray","ontext","value","_pushOrSet","onerror","error","onend","result","pop","write","chunk","close","Array","isArray","push","newContainer"],"sources":["../../../../src/lib/parsers/streaming-xml-parser.ts"],"sourcesContent":["// @ts-nocheck\n/* eslint-disable */\n\nimport {SAXParser, SAXParserOptions} from '../../sax-ts/sax';\n// import JSONPath from '../jsonpath/jsonpath';\n\nexport type StreamingXMLParserOptions = SAXParserOptions;\n\n/**\n * StreamingXMLParser builds a JSON object using the events emitted by the SAX parser\n */\nexport class StreamingXMLParser {\n readonly parser: SAXParser;\n result = undefined;\n previousStates = [];\n currentState = Object.freeze({container: [], key: null});\n // jsonpath: JSONPath = new JSONPath();\n\n constructor(options: SAXParserOptions) {\n this.reset();\n this.parser = new SAXParser({\n onready: () => {\n this.previousStates.length = 0;\n this.currentState.container.length = 0;\n },\n\n onopentag: ({name, attributes, isSelfClosing}) => {\n this._openObject({});\n if (typeof name !== 'undefined') {\n this.parser.emit('onkey', name);\n }\n },\n\n onkey: (name) => {\n this.currentState.key = name;\n },\n\n onclosetag: () => {\n this._closeObject();\n },\n\n onopenarray: () => {\n this._openArray();\n },\n\n onclosearray: () => {\n this._closeArray();\n },\n\n ontext: (value) => {\n this._pushOrSet(value);\n },\n\n onerror: (error) => {\n throw error;\n },\n\n onend: () => {\n this.result = this.currentState.container.pop();\n },\n\n ...options\n });\n }\n\n reset(): void {\n this.result = undefined;\n this.previousStates = [];\n this.currentState = Object.freeze({container: [], key: null});\n }\n\n write(chunk): void {\n this.parser.write(chunk);\n }\n\n close(): void {\n this.parser.close();\n }\n\n // PRIVATE METHODS\n\n _pushOrSet(value): void {\n const {container, key} = this.currentState;\n if (key !== null) {\n container[key] = value;\n this.currentState.key = null;\n } else if (Array.isArray(container)) {\n container.push(value);\n } else if (container) {\n // debugger\n }\n }\n\n _openArray(newContainer = []): void {\n // this.jsonpath.push(null);\n this._pushOrSet(newContainer);\n this.previousStates.push(this.currentState);\n this.currentState = {container: newContainer, isArray: true, key: null};\n }\n\n _closeArray(): void {\n // this.jsonpath.pop();\n this.currentState = this.previousStates.pop();\n }\n\n _openObject(newContainer = {}): void {\n // this.jsonpath.push(null);\n this._pushOrSet(newContainer);\n this.previousStates.push(this.currentState);\n this.currentState = {container: newContainer, isArray: false, key: null};\n }\n\n _closeObject(): void {\n // this.jsonpath.pop();\n this.currentState = this.previousStates.pop();\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
export function uncapitalize(str) {
|
|
4
|
+
return typeof str === 'string' ? str.charAt(0).toLowerCase() + str.slice(1) : str;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export function uncapitalizeKeys(object) {
|
|
8
|
+
if (Array.isArray(object)) {
|
|
9
|
+
return object.map(element => uncapitalizeKeys(element));
|
|
10
|
+
}
|
|
11
|
+
if (object && typeof object === 'object') {
|
|
12
|
+
const newObject = {};
|
|
13
|
+
for (const [key, value] of Object.entries(object)) {
|
|
14
|
+
newObject[uncapitalize(key)] = uncapitalizeKeys(value);
|
|
15
|
+
}
|
|
16
|
+
return newObject;
|
|
17
|
+
}
|
|
18
|
+
return object;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=uncapitalize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uncapitalize.js","names":["uncapitalize","str","charAt","toLowerCase","slice","uncapitalizeKeys","object","Array","isArray","map","element","newObject","key","value","Object","entries"],"sources":["../../../../src/lib/xml-utils/uncapitalize.ts"],"sourcesContent":["// loaders.gl, MIT license\n\n/**\n * Uncapitalize first letter of a string\n * @param str\n * @returns\n */\nexport function uncapitalize(str: string): string {\n return typeof str === 'string' ? str.charAt(0).toLowerCase() + str.slice(1) : str;\n}\n\n/**\n * Recursively uncapitalize all keys in a nested object\n * @param object\n * @returns\n */\nexport function uncapitalizeKeys(object: any): any {\n if (Array.isArray(object)) {\n return object.map((element) => uncapitalizeKeys(element));\n }\n\n if (object && typeof object === 'object') {\n const newObject = {};\n for (const [key, value] of Object.entries(object)) {\n newObject[uncapitalize(key)] = uncapitalizeKeys(value);\n }\n return newObject;\n }\n\n return object;\n}\n"],"mappings":";;AAOA,OAAO,SAASA,YAAY,CAACC,GAAW,EAAU;EAChD,OAAO,OAAOA,GAAG,KAAK,QAAQ,GAAGA,GAAG,CAACC,MAAM,CAAC,CAAC,CAAC,CAACC,WAAW,EAAE,GAAGF,GAAG,CAACG,KAAK,CAAC,CAAC,CAAC,GAAGH,GAAG;AACnF;;AAOA,OAAO,SAASI,gBAAgB,CAACC,MAAW,EAAO;EACjD,IAAIC,KAAK,CAACC,OAAO,CAACF,MAAM,CAAC,EAAE;IACzB,OAAOA,MAAM,CAACG,GAAG,CAAEC,OAAO,IAAKL,gBAAgB,CAACK,OAAO,CAAC,CAAC;EAC3D;EAEA,IAAIJ,MAAM,IAAI,OAAOA,MAAM,KAAK,QAAQ,EAAE;IACxC,MAAMK,SAAS,GAAG,CAAC,CAAC;IACpB,KAAK,MAAM,CAACC,GAAG,EAAEC,KAAK,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACT,MAAM,CAAC,EAAE;MACjDK,SAAS,CAACX,YAAY,CAACY,GAAG,CAAC,CAAC,GAAGP,gBAAgB,CAACQ,KAAK,CAAC;IACxD;IACA,OAAOF,SAAS;EAClB;EAEA,OAAOL,MAAM;AACf"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
export function convertXMLValueToArray(xmlValue) {
|
|
4
|
+
if (Array.isArray(xmlValue)) {
|
|
5
|
+
return xmlValue;
|
|
6
|
+
}
|
|
7
|
+
if (xmlValue && typeof xmlValue === 'object' && xmlValue['0']) {
|
|
8
|
+
}
|
|
9
|
+
if (xmlValue) {
|
|
10
|
+
return [xmlValue];
|
|
11
|
+
}
|
|
12
|
+
return [];
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function convertXMLFieldToArrayInPlace(xml, key) {
|
|
16
|
+
xml[key] = convertXMLValueToArray(xml[key]);
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=xml-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xml-utils.js","names":["convertXMLValueToArray","xmlValue","Array","isArray","convertXMLFieldToArrayInPlace","xml","key"],"sources":["../../../../src/lib/xml-utils/xml-utils.ts"],"sourcesContent":["// TODO - these utilities could be moved to the XML parser.\n// uncapitalizeKeys could be an XMLLoader option\n\n/**\n * Extracts a value or array and always return an array\n * Useful since XML parses to object instead of array when only a single value is provided\n */\nexport function convertXMLValueToArray(xmlValue: unknown): unknown[] {\n if (Array.isArray(xmlValue)) {\n return xmlValue;\n }\n if (xmlValue && typeof xmlValue === 'object' && xmlValue['0']) {\n // Error this is an objectified array\n }\n if (xmlValue) {\n return [xmlValue];\n }\n return [];\n}\n\n/**\n * Mutates a field in place, converting it to array\n * Useful since XML parses to object instead of array when only a single value is provided\n */\nexport function convertXMLFieldToArrayInPlace(xml: any, key: string): void {\n xml[key] = convertXMLValueToArray(xml[key]);\n}\n"],"mappings":";;AAOA,OAAO,SAASA,sBAAsB,CAACC,QAAiB,EAAa;EACnE,IAAIC,KAAK,CAACC,OAAO,CAACF,QAAQ,CAAC,EAAE;IAC3B,OAAOA,QAAQ;EACjB;EACA,IAAIA,QAAQ,IAAI,OAAOA,QAAQ,KAAK,QAAQ,IAAIA,QAAQ,CAAC,GAAG,CAAC,EAAE;EAE/D;EACA,IAAIA,QAAQ,EAAE;IACZ,OAAO,CAACA,QAAQ,CAAC;EACnB;EACA,OAAO,EAAE;AACX;;AAMA,OAAO,SAASG,6BAA6B,CAACC,GAAQ,EAAEC,GAAW,EAAQ;EACzED,GAAG,CAACC,GAAG,CAAC,GAAGN,sBAAsB,CAACK,GAAG,CAACC,GAAG,CAAC,CAAC;AAC7C"}
|