@appium/universal-xml-plugin 1.0.26 → 1.0.28
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/build/lib/index.d.ts +2 -2
- package/build/lib/index.d.ts.map +1 -1
- package/build/lib/index.js +8 -11
- package/build/lib/index.js.map +1 -1
- package/build/lib/plugin.d.ts.map +1 -1
- package/build/lib/plugin.js +1 -2
- package/build/lib/plugin.js.map +1 -1
- package/build/lib/source.d.ts +3 -3
- package/build/lib/source.d.ts.map +1 -1
- package/build/lib/source.js +22 -18
- package/build/lib/source.js.map +1 -1
- package/index.js +1 -1
- package/lib/index.js +6 -9
- package/lib/plugin.js +1 -3
- package/lib/source.js +24 -20
- package/package.json +4 -5
package/build/lib/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export function main(): void
|
|
1
|
+
export function main(): Promise<void>;
|
|
2
2
|
export default UniversalXMLPlugin;
|
|
3
3
|
export { UniversalXMLPlugin };
|
|
4
|
-
import UniversalXMLPlugin from './plugin';
|
|
4
|
+
import { UniversalXMLPlugin } from './plugin';
|
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|
package/build/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../lib/index.js"],"names":[],"mappings":"AAMA,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../lib/index.js"],"names":[],"mappings":"AAMA,sCASC;;;mCAfgC,UAAU"}
|
package/build/lib/index.js
CHANGED
|
@@ -5,19 +5,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.UniversalXMLPlugin = void 0;
|
|
7
7
|
exports.main = main;
|
|
8
|
-
const plugin_1 =
|
|
9
|
-
exports
|
|
8
|
+
const plugin_1 = require("./plugin");
|
|
9
|
+
Object.defineProperty(exports, "UniversalXMLPlugin", { enumerable: true, get: function () { return plugin_1.UniversalXMLPlugin; } });
|
|
10
10
|
const source_1 = require("./source");
|
|
11
|
-
const
|
|
12
|
-
exports.default = plugin_1.
|
|
13
|
-
function main() {
|
|
11
|
+
const promises_1 = __importDefault(require("node:fs/promises"));
|
|
12
|
+
exports.default = plugin_1.UniversalXMLPlugin;
|
|
13
|
+
async function main() {
|
|
14
14
|
const [, , xmlDataPath, platform, optsJson] = process.argv;
|
|
15
|
-
const xmlData =
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
opts = JSON.parse(optsJson);
|
|
19
|
-
}
|
|
20
|
-
const { xml, unknowns } = (0, source_1.transformSourceXml)(xmlData, platform, opts);
|
|
15
|
+
const xmlData = await promises_1.default.readFile(xmlDataPath, 'utf8');
|
|
16
|
+
const opts = optsJson ? JSON.parse(optsJson) : {};
|
|
17
|
+
const { xml, unknowns } = await (0, source_1.transformSourceXml)(xmlData, platform, opts);
|
|
21
18
|
console.log(xml); // eslint-disable-line no-console
|
|
22
19
|
if (unknowns.nodes.length || unknowns.attrs.length) {
|
|
23
20
|
console.error(unknowns); // eslint-disable-line no-console
|
package/build/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../lib/index.js"],"names":[],"mappings":";;;;;;AAMA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../lib/index.js"],"names":[],"mappings":";;;;;;AAMA,oBASC;AAfD,qCAA4C;AAIpC,mGAJA,2BAAkB,OAIA;AAH1B,qCAA4C;AAC5C,gEAAkC;AAClC,kBAAe,2BAAkB,CAAC;AAG3B,KAAK,UAAU,IAAI;IACxB,MAAM,CAAC,EAAE,AAAD,EAAG,WAAW,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAC3D,MAAM,OAAO,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACvD,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAClD,MAAM,EAAC,GAAG,EAAE,QAAQ,EAAC,GAAG,MAAM,IAAA,2BAAkB,EAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC1E,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,iCAAiC;IACnD,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACnD,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,iCAAiC;IAC5D,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../lib/plugin.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../lib/plugin.js"],"names":[],"mappings":"AAMA;IACE,4FA4BC;IAED,0CAEC;IAED,2CAEC;IAED,yFAgCC;CACF;2BA9EwB,eAAe"}
|
package/build/lib/plugin.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
/* eslint-disable no-case-declarations */
|
|
3
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
4
|
};
|
|
@@ -18,7 +17,7 @@ class UniversalXMLPlugin extends plugin_1.BasePlugin {
|
|
|
18
17
|
if (platformName.toLowerCase() === 'android') {
|
|
19
18
|
metadata.appPackage = driver.opts.appPackage;
|
|
20
19
|
}
|
|
21
|
-
const { xml, unknowns } = (0, source_1.transformSourceXml)(source, platformName.toLowerCase(), {
|
|
20
|
+
const { xml, unknowns } = await (0, source_1.transformSourceXml)(source, platformName.toLowerCase(), {
|
|
22
21
|
metadata,
|
|
23
22
|
addIndexPath,
|
|
24
23
|
});
|
package/build/lib/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../lib/plugin.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../lib/plugin.js"],"names":[],"mappings":"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"}
|
package/build/lib/source.d.ts
CHANGED
|
@@ -3,15 +3,15 @@
|
|
|
3
3
|
* @param {string} xmlStr
|
|
4
4
|
* @param {string} platform
|
|
5
5
|
* @param {{metadata?: Object, addIndexPath?: boolean}} opts
|
|
6
|
-
* @returns {{xml: string, unknowns: NodesAndAttributes}}
|
|
6
|
+
* @returns {Promise<{xml: string, unknowns: NodesAndAttributes}>}
|
|
7
7
|
*/
|
|
8
8
|
export function transformSourceXml(xmlStr: string, platform: string, { metadata, addIndexPath }?: {
|
|
9
9
|
metadata?: any;
|
|
10
10
|
addIndexPath?: boolean;
|
|
11
|
-
}): {
|
|
11
|
+
}): Promise<{
|
|
12
12
|
xml: string;
|
|
13
13
|
unknowns: NodesAndAttributes;
|
|
14
|
-
}
|
|
14
|
+
}>;
|
|
15
15
|
/**
|
|
16
16
|
*
|
|
17
17
|
* @param {any} nodeName
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../lib/source.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../lib/source.js"],"names":[],"mappings":"AAYA;;;;;;GAMG;AACH,2CALW,MAAM,YACN,MAAM,+BACN;IAAC,QAAQ,CAAC,MAAS;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAC,GACzC,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,kBAAkB,CAAA;CAAC,CAAC,CAehE;AAsBD;;;;;GAKG;AACH,+CAJW,GAAG,YACH,MAAM,GACJ,MAAM,OAAC,CAInB;AAED;;;;;GAKG;AACH,+CAJW,MAAM,YACN,MAAM,GACJ,MAAM,OAAC,CAInB;AAED;;;;;;GAMG;AACH,uCALW,GAAG,YACH,MAAM,0CACN;IAAC,QAAQ,CAAC,MAAS;IAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAC,GAC9D,kBAAkB,CA4C9B;AAED;;;;;;;GAOG;AACH,6CANW,GAAG,kBACH,MAAM,EAAE,YACR,MAAM,0CACN;IAAC,QAAQ,CAAC,MAAS;IAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAC,GAC9D,kBAAkB,CAyC9B;AAED;;;;;;GAMG;AACH,wCALW,GAAG,SACH,MAAM,EAAE,YACR,MAAM,GACJ,MAAM,EAAE,CAsBpB;AApMD,0BAA2B,IAAI,CAAC;AAChC,4CAAyD;AACzD,mCAAgD;iCAyNnC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAC"}
|
package/build/lib/source.js
CHANGED
|
@@ -11,26 +11,12 @@ exports.transformNode = transformNode;
|
|
|
11
11
|
exports.transformChildNodes = transformChildNodes;
|
|
12
12
|
exports.transformAttrs = transformAttrs;
|
|
13
13
|
const lodash_1 = __importDefault(require("lodash"));
|
|
14
|
-
const fast_xml_parser_1 = require("fast-xml-parser");
|
|
15
14
|
const node_map_1 = __importDefault(require("./node-map"));
|
|
16
15
|
const attr_map_1 = require("./attr-map");
|
|
17
16
|
const transformers_1 = __importDefault(require("./transformers"));
|
|
18
17
|
exports.ATTR_PREFIX = '@_';
|
|
19
18
|
exports.IDX_PATH_PREFIX = `${exports.ATTR_PREFIX}indexPath`;
|
|
20
19
|
exports.IDX_PREFIX = `${exports.ATTR_PREFIX}index`;
|
|
21
|
-
const PARSE_OPTS = {
|
|
22
|
-
ignoreAttributes: false,
|
|
23
|
-
ignoreDeclaration: true,
|
|
24
|
-
attributeNamePrefix: exports.ATTR_PREFIX,
|
|
25
|
-
isArray: (name, jPath, isLeafNode, isAttribute) => !isAttribute,
|
|
26
|
-
};
|
|
27
|
-
const GEN_OPTS = {
|
|
28
|
-
ignoreAttributes: false,
|
|
29
|
-
attributeNamePrefix: exports.ATTR_PREFIX,
|
|
30
|
-
allowBooleanAttributes: true,
|
|
31
|
-
suppressBooleanAttributes: false,
|
|
32
|
-
format: true,
|
|
33
|
-
};
|
|
34
20
|
const isAttr = (/** @type {string} */ k) => k.startsWith(exports.ATTR_PREFIX);
|
|
35
21
|
const isNode = (/** @type {string} */ k) => !isAttr(k);
|
|
36
22
|
/**
|
|
@@ -38,19 +24,19 @@ const isNode = (/** @type {string} */ k) => !isAttr(k);
|
|
|
38
24
|
* @param {string} xmlStr
|
|
39
25
|
* @param {string} platform
|
|
40
26
|
* @param {{metadata?: Object, addIndexPath?: boolean}} opts
|
|
41
|
-
* @returns {{xml: string, unknowns: NodesAndAttributes}}
|
|
27
|
+
* @returns {Promise<{xml: string, unknowns: NodesAndAttributes}>}
|
|
42
28
|
*/
|
|
43
|
-
function transformSourceXml(xmlStr, platform, { metadata = {}, addIndexPath = false } = {}) {
|
|
29
|
+
async function transformSourceXml(xmlStr, platform, { metadata = {}, addIndexPath = false } = {}) {
|
|
44
30
|
// first thing we want to do is modify the ios source root node, because it doesn't include the
|
|
45
31
|
// necessary index attribute, so we add it if it's not there
|
|
46
32
|
xmlStr = xmlStr.replace('<AppiumAUT>', '<AppiumAUT index="0">');
|
|
47
|
-
const xmlObj =
|
|
33
|
+
const xmlObj = (await singletonXmlParser()).parse(xmlStr);
|
|
48
34
|
const unknowns = transformNode(xmlObj, platform, {
|
|
49
35
|
metadata,
|
|
50
36
|
addIndexPath,
|
|
51
37
|
parentPath: '',
|
|
52
38
|
});
|
|
53
|
-
let transformedXml =
|
|
39
|
+
let transformedXml = (await singletonXmlBuilder()).build(xmlObj).trim();
|
|
54
40
|
transformedXml = `<?xml version="1.0" encoding="UTF-8"?>\n${transformedXml}`;
|
|
55
41
|
return { xml: transformedXml, unknowns };
|
|
56
42
|
}
|
|
@@ -209,6 +195,24 @@ function transformAttrs(nodeObj, attrs, platform) {
|
|
|
209
195
|
}
|
|
210
196
|
return unknownAttrs;
|
|
211
197
|
}
|
|
198
|
+
const singletonXmlBuilder = lodash_1.default.memoize(async function makeXmlBuilder() {
|
|
199
|
+
const { XMLBuilder } = await import('fast-xml-parser');
|
|
200
|
+
return new XMLBuilder({
|
|
201
|
+
ignoreAttributes: false,
|
|
202
|
+
attributeNamePrefix: exports.ATTR_PREFIX,
|
|
203
|
+
suppressBooleanAttributes: false,
|
|
204
|
+
format: true,
|
|
205
|
+
});
|
|
206
|
+
});
|
|
207
|
+
const singletonXmlParser = lodash_1.default.memoize(async function makeXmlParser() {
|
|
208
|
+
const { XMLParser } = await import('fast-xml-parser');
|
|
209
|
+
return new XMLParser({
|
|
210
|
+
ignoreAttributes: false,
|
|
211
|
+
ignoreDeclaration: true,
|
|
212
|
+
attributeNamePrefix: exports.ATTR_PREFIX,
|
|
213
|
+
isArray: (name, jPath, isLeafNode, isAttribute) => !isAttribute,
|
|
214
|
+
});
|
|
215
|
+
});
|
|
212
216
|
/**
|
|
213
217
|
* @typedef {{nodes: string[], attrs: string[]}} NodesAndAttributes
|
|
214
218
|
*/
|
package/build/lib/source.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"source.js","sourceRoot":"","sources":["../../lib/source.js"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"source.js","sourceRoot":"","sources":["../../lib/source.js"],"names":[],"mappings":"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"}
|
package/index.js
CHANGED
package/lib/index.js
CHANGED
|
@@ -1,17 +1,14 @@
|
|
|
1
|
-
import UniversalXMLPlugin from './plugin';
|
|
1
|
+
import {UniversalXMLPlugin} from './plugin';
|
|
2
2
|
import {transformSourceXml} from './source';
|
|
3
|
-
import fs from 'fs';
|
|
3
|
+
import fs from 'node:fs/promises';
|
|
4
4
|
export default UniversalXMLPlugin;
|
|
5
5
|
export {UniversalXMLPlugin};
|
|
6
6
|
|
|
7
|
-
export function main() {
|
|
7
|
+
export async function main() {
|
|
8
8
|
const [, , xmlDataPath, platform, optsJson] = process.argv;
|
|
9
|
-
const xmlData = fs.
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
opts = JSON.parse(optsJson);
|
|
13
|
-
}
|
|
14
|
-
const {xml, unknowns} = transformSourceXml(xmlData, platform, opts);
|
|
9
|
+
const xmlData = await fs.readFile(xmlDataPath, 'utf8');
|
|
10
|
+
const opts = optsJson ? JSON.parse(optsJson) : {};
|
|
11
|
+
const {xml, unknowns} = await transformSourceXml(xmlData, platform, opts);
|
|
15
12
|
console.log(xml); // eslint-disable-line no-console
|
|
16
13
|
if (unknowns.nodes.length || unknowns.attrs.length) {
|
|
17
14
|
console.error(unknowns); // eslint-disable-line no-console
|
package/lib/plugin.js
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
/* eslint-disable no-case-declarations */
|
|
2
|
-
|
|
3
1
|
import {BasePlugin} from 'appium/plugin';
|
|
4
2
|
import {errors} from 'appium/driver';
|
|
5
3
|
import {transformSourceXml} from './source';
|
|
@@ -14,7 +12,7 @@ export default class UniversalXMLPlugin extends BasePlugin {
|
|
|
14
12
|
if (platformName.toLowerCase() === 'android') {
|
|
15
13
|
metadata.appPackage = driver.opts.appPackage;
|
|
16
14
|
}
|
|
17
|
-
const {xml, unknowns} = transformSourceXml(source, platformName.toLowerCase(), {
|
|
15
|
+
const {xml, unknowns} = await transformSourceXml(source, platformName.toLowerCase(), {
|
|
18
16
|
metadata,
|
|
19
17
|
addIndexPath,
|
|
20
18
|
});
|
package/lib/source.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import _ from 'lodash';
|
|
2
|
-
import {XMLParser, XMLBuilder} from 'fast-xml-parser';
|
|
3
2
|
import NODE_MAP from './node-map';
|
|
4
3
|
import {ATTR_MAP, REMOVE_ATTRS} from './attr-map';
|
|
5
4
|
import TRANSFORMS from './transformers';
|
|
@@ -8,21 +7,6 @@ export const ATTR_PREFIX = '@_';
|
|
|
8
7
|
export const IDX_PATH_PREFIX = `${ATTR_PREFIX}indexPath`;
|
|
9
8
|
export const IDX_PREFIX = `${ATTR_PREFIX}index`;
|
|
10
9
|
|
|
11
|
-
const PARSE_OPTS = {
|
|
12
|
-
ignoreAttributes: false,
|
|
13
|
-
ignoreDeclaration: true,
|
|
14
|
-
attributeNamePrefix: ATTR_PREFIX,
|
|
15
|
-
isArray: (name, jPath, isLeafNode, isAttribute) => !isAttribute,
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
const GEN_OPTS = {
|
|
19
|
-
ignoreAttributes: false,
|
|
20
|
-
attributeNamePrefix: ATTR_PREFIX,
|
|
21
|
-
allowBooleanAttributes: true,
|
|
22
|
-
suppressBooleanAttributes: false,
|
|
23
|
-
format: true,
|
|
24
|
-
};
|
|
25
|
-
|
|
26
10
|
const isAttr = (/** @type {string} */ k) => k.startsWith(ATTR_PREFIX);
|
|
27
11
|
const isNode = (/** @type {string} */ k) => !isAttr(k);
|
|
28
12
|
|
|
@@ -31,19 +15,19 @@ const isNode = (/** @type {string} */ k) => !isAttr(k);
|
|
|
31
15
|
* @param {string} xmlStr
|
|
32
16
|
* @param {string} platform
|
|
33
17
|
* @param {{metadata?: Object, addIndexPath?: boolean}} opts
|
|
34
|
-
* @returns {{xml: string, unknowns: NodesAndAttributes}}
|
|
18
|
+
* @returns {Promise<{xml: string, unknowns: NodesAndAttributes}>}
|
|
35
19
|
*/
|
|
36
|
-
export function transformSourceXml(xmlStr, platform, {metadata = {}, addIndexPath = false} = {}) {
|
|
20
|
+
export async function transformSourceXml(xmlStr, platform, {metadata = {}, addIndexPath = false} = {}) {
|
|
37
21
|
// first thing we want to do is modify the ios source root node, because it doesn't include the
|
|
38
22
|
// necessary index attribute, so we add it if it's not there
|
|
39
23
|
xmlStr = xmlStr.replace('<AppiumAUT>', '<AppiumAUT index="0">');
|
|
40
|
-
const xmlObj =
|
|
24
|
+
const xmlObj = (await singletonXmlParser()).parse(xmlStr);
|
|
41
25
|
const unknowns = transformNode(xmlObj, platform, {
|
|
42
26
|
metadata,
|
|
43
27
|
addIndexPath,
|
|
44
28
|
parentPath: '',
|
|
45
29
|
});
|
|
46
|
-
let transformedXml =
|
|
30
|
+
let transformedXml = (await singletonXmlBuilder()).build(xmlObj).trim();
|
|
47
31
|
transformedXml = `<?xml version="1.0" encoding="UTF-8"?>\n${transformedXml}`;
|
|
48
32
|
return {xml: transformedXml, unknowns};
|
|
49
33
|
}
|
|
@@ -217,6 +201,26 @@ export function transformAttrs(nodeObj, attrs, platform) {
|
|
|
217
201
|
return unknownAttrs;
|
|
218
202
|
}
|
|
219
203
|
|
|
204
|
+
const singletonXmlBuilder = _.memoize(async function makeXmlBuilder() {
|
|
205
|
+
const { XMLBuilder } = await import('fast-xml-parser');
|
|
206
|
+
return new XMLBuilder({
|
|
207
|
+
ignoreAttributes: false,
|
|
208
|
+
attributeNamePrefix: ATTR_PREFIX,
|
|
209
|
+
suppressBooleanAttributes: false,
|
|
210
|
+
format: true,
|
|
211
|
+
});
|
|
212
|
+
});
|
|
213
|
+
|
|
214
|
+
const singletonXmlParser = _.memoize(async function makeXmlParser() {
|
|
215
|
+
const { XMLParser } = await import('fast-xml-parser');
|
|
216
|
+
return new XMLParser({
|
|
217
|
+
ignoreAttributes: false,
|
|
218
|
+
ignoreDeclaration: true,
|
|
219
|
+
attributeNamePrefix: ATTR_PREFIX,
|
|
220
|
+
isArray: (name, jPath, isLeafNode, isAttribute) => !isAttribute,
|
|
221
|
+
});
|
|
222
|
+
});
|
|
223
|
+
|
|
220
224
|
/**
|
|
221
225
|
* @typedef {{nodes: string[], attrs: string[]}} NodesAndAttributes
|
|
222
226
|
*/
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@appium/universal-xml-plugin",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.28",
|
|
4
4
|
"description": "Appium plugin for making XML source and XPath queries the same across iOS and Android",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"automation",
|
|
@@ -36,9 +36,8 @@
|
|
|
36
36
|
"test:unit": "mocha \"./test/unit/**/*.spec.js\""
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@
|
|
40
|
-
"
|
|
41
|
-
"fast-xml-parser": "4.5.0",
|
|
39
|
+
"@xmldom/xmldom": "0.9.7",
|
|
40
|
+
"fast-xml-parser": "5.0.1",
|
|
42
41
|
"lodash": "4.17.21",
|
|
43
42
|
"source-map-support": "0.5.21",
|
|
44
43
|
"xpath": "0.0.34"
|
|
@@ -57,5 +56,5 @@
|
|
|
57
56
|
"publishConfig": {
|
|
58
57
|
"access": "public"
|
|
59
58
|
},
|
|
60
|
-
"gitHead": "
|
|
59
|
+
"gitHead": "ea00e3aa18aff3c51d1c19eea6c4d1c8c2483740"
|
|
61
60
|
}
|