@shko.online/dataverse-odata 0.1.0 → 0.1.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/.babelrc.js +160 -160
- package/.releaserc.yaml +23 -0
- package/CHANGELOG.md +13 -0
- package/README.md +3 -0
- package/lib/cjs/getExpandFromParser.js +16 -16
- package/lib/cjs/getFetchXmlFromParser.js +14 -7
- package/lib/cjs/getOrderByFromParser.js +44 -0
- package/lib/cjs/getSelectFromParser.js +4 -4
- package/lib/cjs/getTopFromParser.js +10 -6
- package/lib/cjs/getXQueryFromParser.js +35 -0
- package/lib/cjs/index.js +42 -0
- package/lib/cjs/parseOData.js +16 -4
- package/lib/cjs/validateNotEmpty.js +17 -0
- package/lib/esm/getExpandFromParser.js +16 -16
- package/lib/esm/getFetchXmlFromParser.js +14 -7
- package/lib/esm/getOrderByFromParser.js +37 -0
- package/lib/esm/getSelectFromParser.js +4 -4
- package/lib/esm/getTopFromParser.js +11 -6
- package/lib/esm/getXQueryFromParser.js +28 -0
- package/lib/esm/index.js +6 -0
- package/lib/esm/parseOData.js +17 -4
- package/lib/esm/validateNotEmpty.js +10 -0
- package/lib/modern/getExpandFromParser.js +16 -16
- package/lib/modern/getFetchXmlFromParser.js +14 -7
- package/lib/modern/getOrderByFromParser.js +38 -0
- package/lib/modern/getSelectFromParser.js +4 -4
- package/lib/modern/getTopFromParser.js +11 -6
- package/lib/modern/getXQueryFromParser.js +28 -0
- package/lib/modern/index.js +6 -0
- package/lib/modern/parseOData.js +17 -4
- package/lib/modern/validateNotEmpty.js +10 -0
- package/lib/ts3.4/getExpandFromParser.d.ts +2 -2
- package/lib/ts3.4/getFetchXmlFromParser.d.ts +2 -2
- package/lib/ts3.4/getOrderByFromParser.d.ts +7 -0
- package/lib/ts3.4/getSelectFromParser.d.ts +2 -2
- package/lib/ts3.4/getTopFromParser.d.ts +2 -2
- package/lib/ts3.4/getXQueryFromParser.d.ts +8 -0
- package/lib/ts3.4/index.d.ts +6 -0
- package/lib/ts3.4/parseOData.d.ts +5 -0
- package/lib/ts3.4/validateNotEmpty.d.ts +3 -0
- package/lib/ts3.9/getExpandFromParser.d.ts +6 -6
- package/lib/ts3.9/getExpandFromParser.d.ts.map +1 -1
- package/lib/ts3.9/getFetchXmlFromParser.d.ts +6 -6
- package/lib/ts3.9/getFetchXmlFromParser.d.ts.map +1 -1
- package/lib/ts3.9/getOrderByFromParser.d.ts +7 -0
- package/lib/ts3.9/getOrderByFromParser.d.ts.map +1 -0
- package/lib/ts3.9/getSelectFromParser.d.ts +6 -6
- package/lib/ts3.9/getSelectFromParser.d.ts.map +1 -1
- package/lib/ts3.9/getTopFromParser.d.ts +6 -6
- package/lib/ts3.9/getTopFromParser.d.ts.map +1 -1
- package/lib/ts3.9/getXQueryFromParser.d.ts +8 -0
- package/lib/ts3.9/getXQueryFromParser.d.ts.map +1 -0
- package/lib/ts3.9/index.d.ts +10 -4
- package/lib/ts3.9/index.d.ts.map +1 -1
- package/lib/ts3.9/parseOData.d.ts +7 -2
- package/lib/ts3.9/parseOData.d.ts.map +1 -1
- package/lib/ts3.9/validateNotEmpty.d.ts +3 -0
- package/lib/ts3.9/validateNotEmpty.d.ts.map +1 -0
- package/package.json +13 -8
- package/src/OData.types.d.ts +136 -61
- package/src/getExpandFromParser.ts +106 -105
- package/src/getFetchXmlFromParser.ts +56 -48
- package/src/getOrderByFromParser.ts +42 -0
- package/src/getSelectFromParser.ts +13 -13
- package/src/getTopFromParser.ts +31 -27
- package/src/getXQueryFromParser.ts +34 -0
- package/src/index.ts +24 -16
- package/src/parseOData.ts +36 -23
- package/src/validateNotEmpty.ts +12 -0
- package/tsconfig.build.json +8 -8
- package/tsconfig.json +35 -35
- package/jest.config.ts +0 -12
- package/lib/getExpandFromParser.d.ts +0 -7
- package/lib/getExpandFromParser.d.ts.map +0 -1
- package/lib/getExpandFromParser.js +0 -97
- package/lib/getExpandFromParser.js.map +0 -1
- package/lib/getFetchXmlFromParser.d.ts +0 -7
- package/lib/getFetchXmlFromParser.d.ts.map +0 -1
- package/lib/getFetchXmlFromParser.js +0 -41
- package/lib/getFetchXmlFromParser.js.map +0 -1
- package/lib/getSelectFromParser.d.ts +0 -7
- package/lib/getSelectFromParser.d.ts.map +0 -1
- package/lib/getSelectFromParser.js +0 -12
- package/lib/getSelectFromParser.js.map +0 -1
- package/lib/getTopFromParser.d.ts +0 -7
- package/lib/getTopFromParser.d.ts.map +0 -1
- package/lib/getTopFromParser.js +0 -27
- package/lib/getTopFromParser.js.map +0 -1
- package/lib/index.d.ts +0 -5
- package/lib/index.d.ts.map +0 -1
- package/lib/index.js +0 -4
- package/lib/index.js.map +0 -1
- package/lib/parseOData.d.ts +0 -3
- package/lib/parseOData.d.ts.map +0 -1
- package/lib/parseOData.js +0 -22
- package/lib/parseOData.js.map +0 -1
- package/tests/OData-Parser.$expand.test.ts +0 -39
- package/tests/OData-Parser.$top.test.ts +0 -36
- package/tests/OData-Parser.fetchXml.test.ts +0 -62
- package/tests/OData-Parser.test.ts +0 -17
package/tsconfig.json
CHANGED
|
@@ -1,36 +1,36 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"jsx": "react",
|
|
4
|
-
"allowSyntheticDefaultImports": true,
|
|
5
|
-
"esModuleInterop": true,
|
|
6
|
-
"target": "es5",
|
|
7
|
-
"lib": [
|
|
8
|
-
"es5",
|
|
9
|
-
"es6",
|
|
10
|
-
"dom"
|
|
11
|
-
],
|
|
12
|
-
"module": "ES6",
|
|
13
|
-
"moduleResolution": "node",
|
|
14
|
-
"noEmit": false,
|
|
15
|
-
"outDir": "lib",
|
|
16
|
-
"resolveJsonModule": true,
|
|
17
|
-
"declaration": true,
|
|
18
|
-
"declarationMap": true,
|
|
19
|
-
"sourceMap": true,
|
|
20
|
-
"baseUrl": ".",
|
|
21
|
-
"typeRoots": [
|
|
22
|
-
"./node_modules/@types"
|
|
23
|
-
]
|
|
24
|
-
},
|
|
25
|
-
"exclude": [
|
|
26
|
-
"node_modules",
|
|
27
|
-
"wwwroot",
|
|
28
|
-
"lib"
|
|
29
|
-
],
|
|
30
|
-
"include": [
|
|
31
|
-
"src",
|
|
32
|
-
"tests",
|
|
33
|
-
"__type-tests__",
|
|
34
|
-
"__test-components__"
|
|
35
|
-
]
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"jsx": "react",
|
|
4
|
+
"allowSyntheticDefaultImports": true,
|
|
5
|
+
"esModuleInterop": true,
|
|
6
|
+
"target": "es5",
|
|
7
|
+
"lib": [
|
|
8
|
+
"es5",
|
|
9
|
+
"es6",
|
|
10
|
+
"dom"
|
|
11
|
+
],
|
|
12
|
+
"module": "ES6",
|
|
13
|
+
"moduleResolution": "node",
|
|
14
|
+
"noEmit": false,
|
|
15
|
+
"outDir": "lib",
|
|
16
|
+
"resolveJsonModule": true,
|
|
17
|
+
"declaration": true,
|
|
18
|
+
"declarationMap": true,
|
|
19
|
+
"sourceMap": true,
|
|
20
|
+
"baseUrl": ".",
|
|
21
|
+
"typeRoots": [
|
|
22
|
+
"./node_modules/@types"
|
|
23
|
+
]
|
|
24
|
+
},
|
|
25
|
+
"exclude": [
|
|
26
|
+
"node_modules",
|
|
27
|
+
"wwwroot",
|
|
28
|
+
"lib"
|
|
29
|
+
],
|
|
30
|
+
"include": [
|
|
31
|
+
"src",
|
|
32
|
+
"tests",
|
|
33
|
+
"__type-tests__",
|
|
34
|
+
"__test-components__"
|
|
35
|
+
]
|
|
36
36
|
}
|
package/jest.config.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { JestConfigWithTsJest } from 'ts-jest';
|
|
2
|
-
|
|
3
|
-
export default {
|
|
4
|
-
testMatch: [' **/tests/**/*.[jt]s?(x)', '**/?(*.)+(spec|test).[tj]s?(x)'],
|
|
5
|
-
clearMocks: true,
|
|
6
|
-
collectCoverage: true,
|
|
7
|
-
coverageDirectory: 'coverage',
|
|
8
|
-
coverageProvider: 'v8',
|
|
9
|
-
preset: 'ts-jest',
|
|
10
|
-
testEnvironment: 'jsdom',
|
|
11
|
-
coverageReporters: ['cobertura', 'text', 'html']
|
|
12
|
-
} as JestConfigWithTsJest;
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { ODataQuery } from './OData.types';
|
|
2
|
-
/**
|
|
3
|
-
* Parses the $expand query
|
|
4
|
-
* @returns Returns true when the parse has an error
|
|
5
|
-
*/
|
|
6
|
-
export declare const getExpandFromParser: (parser: URLSearchParams, result: ODataQuery) => boolean;
|
|
7
|
-
//# sourceMappingURL=getExpandFromParser.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getExpandFromParser.d.ts","sourceRoot":"","sources":["../src/getExpandFromParser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA6C,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3F;;;GAGG;AACH,eAAO,MAAM,mBAAmB,WAAY,eAAe,UAAU,UAAU,KAAG,OAUjF,CAAC"}
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
import { getSelectFromParser } from './getSelectFromParser';
|
|
2
|
-
/**
|
|
3
|
-
* Parses the $expand query
|
|
4
|
-
* @returns Returns true when the parse has an error
|
|
5
|
-
*/
|
|
6
|
-
export var getExpandFromParser = function (parser, result) {
|
|
7
|
-
var $expand = parser.get('$expand');
|
|
8
|
-
if ($expand !== null) {
|
|
9
|
-
result.$expand = {};
|
|
10
|
-
if (extractExpand($expand, result)) {
|
|
11
|
-
return true;
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
return false;
|
|
15
|
-
};
|
|
16
|
-
var extractExpand = function (value, $expand) {
|
|
17
|
-
var match = value.match(/^\s*(\w(\w|\d|_)*)\s*(,|\()?\s*/);
|
|
18
|
-
if (match === null ||
|
|
19
|
-
(match[0].length < value.length && match[3] === null) ||
|
|
20
|
-
(match[0].length === value.length && match[3] !== undefined)) {
|
|
21
|
-
$expand.error = {
|
|
22
|
-
code: '0x0',
|
|
23
|
-
message: 'invalid expand expression',
|
|
24
|
-
};
|
|
25
|
-
return true;
|
|
26
|
-
}
|
|
27
|
-
var matchSeparator = match[3];
|
|
28
|
-
var matchLength = match[0].length;
|
|
29
|
-
if (matchSeparator !== '(') {
|
|
30
|
-
if ($expand.$expand !== undefined) {
|
|
31
|
-
$expand.$expand[match[1]] = { $select: [] };
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
else {
|
|
35
|
-
var _a = getClosingBracket(value.substring(matchLength)), index = _a.index, error = _a.error;
|
|
36
|
-
if (error) {
|
|
37
|
-
$expand.error = {
|
|
38
|
-
code: '0x0',
|
|
39
|
-
message: error,
|
|
40
|
-
};
|
|
41
|
-
return true;
|
|
42
|
-
}
|
|
43
|
-
if ($expand.$expand !== undefined) {
|
|
44
|
-
var innerExpand = {};
|
|
45
|
-
var parser = new URLSearchParams('?' + value.substring(matchLength, matchLength + index));
|
|
46
|
-
if (getSelectFromParser(parser, innerExpand)) {
|
|
47
|
-
$expand.error = innerExpand.error;
|
|
48
|
-
return true;
|
|
49
|
-
}
|
|
50
|
-
if (getExpandFromParser(parser, innerExpand)) {
|
|
51
|
-
$expand.error = innerExpand.error;
|
|
52
|
-
return true;
|
|
53
|
-
}
|
|
54
|
-
if (innerExpand.$expand === undefined && innerExpand.$select === undefined) {
|
|
55
|
-
$expand.error = { code: '0x0', message: 'Empty expand' };
|
|
56
|
-
return true;
|
|
57
|
-
}
|
|
58
|
-
$expand.$expand[match[1]] = innerExpand;
|
|
59
|
-
}
|
|
60
|
-
matchLength = matchLength + index;
|
|
61
|
-
var secondMatch = value.substring(matchLength + 1).match(/\s*(,?)\s*d/);
|
|
62
|
-
if (secondMatch !== null) {
|
|
63
|
-
matchLength = matchLength + secondMatch[0].length;
|
|
64
|
-
if (secondMatch[1] !== null) {
|
|
65
|
-
matchSeparator = ',';
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
if (matchSeparator === ',') {
|
|
70
|
-
if (extractExpand(value.substring(matchLength), $expand)) {
|
|
71
|
-
return true;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
return false;
|
|
75
|
-
};
|
|
76
|
-
var getClosingBracket = function (value) {
|
|
77
|
-
var depth = 1;
|
|
78
|
-
var startAt = 0;
|
|
79
|
-
while (depth > 0) {
|
|
80
|
-
var match = value.substring(startAt).match(/\(|\)/);
|
|
81
|
-
if (match === null) {
|
|
82
|
-
return { error: 'no closing bracket found', index: -1 };
|
|
83
|
-
}
|
|
84
|
-
if (match[0] === ')') {
|
|
85
|
-
depth -= 1;
|
|
86
|
-
if (depth === 0) {
|
|
87
|
-
return { index: match.index || 0 };
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
else {
|
|
91
|
-
depth += 1;
|
|
92
|
-
}
|
|
93
|
-
startAt = (match.index || 0) + 1;
|
|
94
|
-
}
|
|
95
|
-
return { error: 'no closing bracket found', index: -1 };
|
|
96
|
-
};
|
|
97
|
-
//# sourceMappingURL=getExpandFromParser.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getExpandFromParser.js","sourceRoot":"","sources":["../src/getExpandFromParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { ODataQuery } from './OData.types';
|
|
2
|
-
/**
|
|
3
|
-
* Parses the $fetchXml query
|
|
4
|
-
* @returns Returns true when the parse has an error
|
|
5
|
-
*/
|
|
6
|
-
export declare const getFetchXmlFromParser: (parser: URLSearchParams, result: ODataQuery) => boolean;
|
|
7
|
-
//# sourceMappingURL=getFetchXmlFromParser.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getFetchXmlFromParser.d.ts","sourceRoot":"","sources":["../src/getFetchXmlFromParser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD;;;GAGG;AACH,eAAO,MAAM,qBAAqB,WAAY,eAAe,UAAU,UAAU,KAAG,OAyCnF,CAAC"}
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Parses the $fetchXml query
|
|
3
|
-
* @returns Returns true when the parse has an error
|
|
4
|
-
*/
|
|
5
|
-
export var getFetchXmlFromParser = function (parser, result) {
|
|
6
|
-
var fetchXml = parser.get('fetchXml');
|
|
7
|
-
if (fetchXml !== null) {
|
|
8
|
-
var serializer = new DOMParser();
|
|
9
|
-
var fetchXmlDocument = serializer.parseFromString(fetchXml, 'text/xml');
|
|
10
|
-
if (fetchXmlDocument.documentElement.tagName === 'parsererror') {
|
|
11
|
-
result.error = {
|
|
12
|
-
code: '0x80040201',
|
|
13
|
-
message: 'Invalid XML.',
|
|
14
|
-
};
|
|
15
|
-
return true;
|
|
16
|
-
}
|
|
17
|
-
var entity = fetchXmlDocument
|
|
18
|
-
.evaluate('fetch/entity', fetchXmlDocument, null, XPathResult.ANY_TYPE, null)
|
|
19
|
-
.iterateNext();
|
|
20
|
-
if (fetchXmlDocument.documentElement.children.length != 1 || !entity || !entity.getAttribute('name')) {
|
|
21
|
-
result.error = {
|
|
22
|
-
code: '0x80041102',
|
|
23
|
-
message: 'Entity Name was not specified in FetchXml String.',
|
|
24
|
-
};
|
|
25
|
-
return true;
|
|
26
|
-
}
|
|
27
|
-
var invalidAttribute = fetchXmlDocument
|
|
28
|
-
.evaluate('fetch/entity/*[not(self::filter or self::order or self::link-entity or self::attribute or self::all-attributes or self::no-attrs)]', fetchXmlDocument, null, XPathResult.ANY_TYPE, null)
|
|
29
|
-
.iterateNext();
|
|
30
|
-
if (invalidAttribute) {
|
|
31
|
-
result.error = {
|
|
32
|
-
code: '0x8004111c',
|
|
33
|
-
message: "Invalid Child Node, valid nodes are filter, order, link-entity, attribute, all-attributes, no-attrs. NodeName = ".concat(invalidAttribute.tagName, " NodeXml = ").concat(invalidAttribute.outerHTML),
|
|
34
|
-
};
|
|
35
|
-
return true;
|
|
36
|
-
}
|
|
37
|
-
result.fetchXml = fetchXmlDocument;
|
|
38
|
-
}
|
|
39
|
-
return false;
|
|
40
|
-
};
|
|
41
|
-
//# sourceMappingURL=getFetchXmlFromParser.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getFetchXmlFromParser.js","sourceRoot":"","sources":["../src/getFetchXmlFromParser.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,CAAC,IAAM,qBAAqB,GAAG,UAAC,MAAuB,EAAE,MAAkB;IAC7E,IAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACxC,IAAI,QAAQ,KAAK,IAAI,EAAE;QACnB,IAAM,UAAU,GAAG,IAAI,SAAS,EAAE,CAAC;QACnC,IAAM,gBAAgB,GAAG,UAAU,CAAC,eAAe,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC1E,IAAI,gBAAgB,CAAC,eAAe,CAAC,OAAO,KAAK,aAAa,EAAE;YAC5D,MAAM,CAAC,KAAK,GAAG;gBACX,IAAI,EAAE,YAAY;gBAClB,OAAO,EAAE,cAAc;aAC1B,CAAC;YACF,OAAO,IAAI,CAAC;SACf;QACD,IAAM,MAAM,GAAG,gBAAgB;aAC1B,QAAQ,CAAC,cAAc,EAAE,gBAAgB,EAAE,IAAI,EAAE,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC;aAC5E,WAAW,EAAa,CAAC;QAC9B,IAAI,gBAAgB,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE;YAClG,MAAM,CAAC,KAAK,GAAG;gBACX,IAAI,EAAE,YAAY;gBAClB,OAAO,EAAE,mDAAmD;aAC/D,CAAC;YACF,OAAO,IAAI,CAAC;SACf;QACD,IAAM,gBAAgB,GAAG,gBAAgB;aACpC,QAAQ,CACL,oIAAoI,EACpI,gBAAgB,EAChB,IAAI,EACJ,WAAW,CAAC,QAAQ,EACpB,IAAI,CACP;aACA,WAAW,EAAa,CAAC;QAC9B,IAAI,gBAAgB,EAAE;YAClB,MAAM,CAAC,KAAK,GAAG;gBACX,IAAI,EAAE,YAAY;gBAClB,OAAO,EAAE,0HAAmH,gBAAgB,CAAC,OAAO,wBAAc,gBAAgB,CAAC,SAAS,CAAE;aACjM,CAAC;YACF,OAAO,IAAI,CAAC;SACf;QACD,MAAM,CAAC,QAAQ,GAAG,gBAAgB,CAAC;KACtC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { ODataQuery } from './OData.types';
|
|
2
|
-
/**
|
|
3
|
-
* Parses the $select query
|
|
4
|
-
* @returns Returns true when the parse has an error
|
|
5
|
-
*/
|
|
6
|
-
export declare const getSelectFromParser: (parser: URLSearchParams, result: ODataQuery) => boolean;
|
|
7
|
-
//# sourceMappingURL=getSelectFromParser.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getSelectFromParser.d.ts","sourceRoot":"","sources":["../src/getSelectFromParser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD;;;GAGG;AACH,eAAO,MAAM,mBAAmB,WAAY,eAAe,UAAU,UAAU,KAAG,OAMjF,CAAC"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Parses the $select query
|
|
3
|
-
* @returns Returns true when the parse has an error
|
|
4
|
-
*/
|
|
5
|
-
export var getSelectFromParser = function (parser, result) {
|
|
6
|
-
var $select = parser.get('$select');
|
|
7
|
-
if ($select !== null) {
|
|
8
|
-
result.$select = $select.split(',');
|
|
9
|
-
}
|
|
10
|
-
return false;
|
|
11
|
-
};
|
|
12
|
-
//# sourceMappingURL=getSelectFromParser.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getSelectFromParser.js","sourceRoot":"","sources":["../src/getSelectFromParser.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,CAAC,IAAM,mBAAmB,GAAG,UAAC,MAAuB,EAAE,MAAkB;IAC3E,IAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACtC,IAAI,OAAO,KAAK,IAAI,EAAE;QAClB,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;KACvC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { ODataQuery } from './OData.types';
|
|
2
|
-
/**
|
|
3
|
-
* Parses the $top query
|
|
4
|
-
* @returns Returns true when the parse has an error
|
|
5
|
-
*/
|
|
6
|
-
export declare const getTopFromParser: (parser: URLSearchParams, result: ODataQuery) => boolean;
|
|
7
|
-
//# sourceMappingURL=getTopFromParser.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getTopFromParser.d.ts","sourceRoot":"","sources":["../src/getTopFromParser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD;;;GAGG;AACH,eAAO,MAAM,gBAAgB,WAAY,eAAe,UAAU,UAAU,KAAG,OAoB9E,CAAC"}
|
package/lib/getTopFromParser.js
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Parses the $top query
|
|
3
|
-
* @returns Returns true when the parse has an error
|
|
4
|
-
*/
|
|
5
|
-
export var getTopFromParser = function (parser, result) {
|
|
6
|
-
var $topValue = parser.get('$top');
|
|
7
|
-
if ($topValue !== null) {
|
|
8
|
-
var $top = void 0;
|
|
9
|
-
if (!$topValue.match(/^\d+$/) || ($top = parseInt($topValue)) < 0) {
|
|
10
|
-
result.error = {
|
|
11
|
-
code: '0x0',
|
|
12
|
-
message: "Invalid value '".concat($topValue, "' for $top query option found. The $top query option requires a non-negative integer value."),
|
|
13
|
-
};
|
|
14
|
-
return true;
|
|
15
|
-
}
|
|
16
|
-
else if ($top === 0) {
|
|
17
|
-
result.error = {
|
|
18
|
-
code: '0x0',
|
|
19
|
-
message: "Invalid value for $top query option.",
|
|
20
|
-
};
|
|
21
|
-
return true;
|
|
22
|
-
}
|
|
23
|
-
result.$top = $top;
|
|
24
|
-
}
|
|
25
|
-
return false;
|
|
26
|
-
};
|
|
27
|
-
//# sourceMappingURL=getTopFromParser.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getTopFromParser.js","sourceRoot":"","sources":["../src/getTopFromParser.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,CAAC,IAAM,gBAAgB,GAAG,UAAC,MAAuB,EAAE,MAAkB;IACxE,IAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,SAAS,KAAK,IAAI,EAAE;QACpB,IAAI,IAAI,SAAA,CAAC;QACT,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,EAAE;YAC/D,MAAM,CAAC,KAAK,GAAG;gBACX,IAAI,EAAE,KAAK;gBACX,OAAO,EAAE,yBAAkB,SAAS,gGAA6F;aACpI,CAAC;YACF,OAAO,IAAI,CAAC;SACf;aAAM,IAAI,IAAI,KAAK,CAAC,EAAE;YACnB,MAAM,CAAC,KAAK,GAAG;gBACX,IAAI,EAAE,KAAK;gBACX,OAAO,EAAE,sCAAsC;aAClD,CAAC;YACF,OAAO,IAAI,CAAC;SACf;QACD,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;KACtB;IACD,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC"}
|
package/lib/index.d.ts
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
export type { BinaryOperator, ODataError, ODataExpand, ODataExpandQuery, ODataFetch, ODataFilter, ODataQuery, ODataSelect, ODataTop, StandardOperator, StandardOperators, } from './OData.types';
|
|
2
|
-
export { parseOData } from './parseOData';
|
|
3
|
-
import { parseOData } from './parseOData';
|
|
4
|
-
export default parseOData;
|
|
5
|
-
//# sourceMappingURL=index.d.ts.map
|
package/lib/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACR,cAAc,EACd,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,UAAU,EACV,WAAW,EACX,QAAQ,EACR,gBAAgB,EAChB,iBAAiB,GACpB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,eAAe,UAAU,CAAC"}
|
package/lib/index.js
DELETED
package/lib/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,eAAe,UAAU,CAAC"}
|
package/lib/parseOData.d.ts
DELETED
package/lib/parseOData.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parseOData.d.ts","sourceRoot":"","sources":["../src/parseOData.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAMhD,eAAO,MAAM,UAAU,UAAW,MAAM,eAgBvC,CAAC"}
|
package/lib/parseOData.js
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { getTopFromParser } from './getTopFromParser';
|
|
2
|
-
import { getSelectFromParser } from './getSelectFromParser';
|
|
3
|
-
import { getExpandFromParser } from './getExpandFromParser';
|
|
4
|
-
import { getFetchXmlFromParser } from './getFetchXmlFromParser';
|
|
5
|
-
export var parseOData = function (query) {
|
|
6
|
-
var parser = new URLSearchParams(query);
|
|
7
|
-
var result = {};
|
|
8
|
-
if (getExpandFromParser(parser, result)) {
|
|
9
|
-
return result;
|
|
10
|
-
}
|
|
11
|
-
if (getSelectFromParser(parser, result)) {
|
|
12
|
-
return result;
|
|
13
|
-
}
|
|
14
|
-
if (getTopFromParser(parser, result)) {
|
|
15
|
-
return result;
|
|
16
|
-
}
|
|
17
|
-
if (getFetchXmlFromParser(parser, result)) {
|
|
18
|
-
return result;
|
|
19
|
-
}
|
|
20
|
-
return result;
|
|
21
|
-
};
|
|
22
|
-
//# sourceMappingURL=parseOData.js.map
|
package/lib/parseOData.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parseOData.js","sourceRoot":"","sources":["../src/parseOData.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,MAAM,CAAC,IAAM,UAAU,GAAG,UAAC,KAAa;IACpC,IAAM,MAAM,GAAG,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAM,MAAM,GAAG,EAAgB,CAAC;IAChC,IAAI,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;QACrC,OAAO,MAAM,CAAC;KACjB;IACD,IAAI,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;QACrC,OAAO,MAAM,CAAC;KACjB;IACD,IAAI,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;QAClC,OAAO,MAAM,CAAC;KACjB;IACD,IAAI,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;QACvC,OAAO,MAAM,CAAC;KACjB;IACD,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC"}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { describe, expect, test } from '@jest/globals';
|
|
2
|
-
import { parseOData } from '../src';
|
|
3
|
-
|
|
4
|
-
describe('parseOData $expand', () => {
|
|
5
|
-
test('parse $expand Account_Leads', () => {
|
|
6
|
-
const result = parseOData('?$expand=Account_Leads');
|
|
7
|
-
expect(result.error).toBeUndefined();
|
|
8
|
-
expect(result.$expand).not.toBeNull();
|
|
9
|
-
expect(result.$expand).not.toBeUndefined();
|
|
10
|
-
expect(result.$expand?.Account_Leads.$select).toEqual([]);
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
test('parse $expand Account_Leads and business_unit_accounts', () => {
|
|
14
|
-
const result = parseOData('?$expand=Account_Leads,business_unit_accounts');
|
|
15
|
-
expect(result.error).toBeUndefined();
|
|
16
|
-
expect(result.$expand).not.toBeNull();
|
|
17
|
-
expect(result.$expand).not.toBeUndefined();
|
|
18
|
-
expect(result.$expand?.Account_Leads.$select).toEqual([]);
|
|
19
|
-
expect(result.$expand?.business_unit_accounts.$select).toEqual([]);
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
test('parse $expand throws on Account_Leads without details', () => {
|
|
23
|
-
const result = parseOData('?$expand=Account_Leads()');
|
|
24
|
-
expect(result.error).not.toBeUndefined();
|
|
25
|
-
expect(result.error?.message).toEqual('Empty expand');
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
test('parse $expand Account_Leads with $select', () => {
|
|
29
|
-
const result = parseOData('?$expand=Account_Leads($select=name)');
|
|
30
|
-
expect(result.error).toBeUndefined();
|
|
31
|
-
expect(result.$expand).not.toBeNull();
|
|
32
|
-
expect(result.$expand).not.toBeUndefined();
|
|
33
|
-
expect(result.$expand?.Account_Leads).not.toBeNull();
|
|
34
|
-
expect(result.$expand?.Account_Leads).not.toBeUndefined();
|
|
35
|
-
expect(result.$expand?.Account_Leads.$select).not.toBeNull();
|
|
36
|
-
expect(result.$expand?.Account_Leads.$select).not.toBeUndefined();
|
|
37
|
-
expect(result.$expand?.Account_Leads.$select).toContain('name');
|
|
38
|
-
});
|
|
39
|
-
});
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { describe, expect, test } from '@jest/globals';
|
|
2
|
-
import { parseOData } from '../src';
|
|
3
|
-
|
|
4
|
-
describe('parseOData $top', () => {
|
|
5
|
-
test('parse $top 5', () => {
|
|
6
|
-
const result = parseOData('?$top=5');
|
|
7
|
-
console.log(result);
|
|
8
|
-
expect(result.$top).toEqual(5);
|
|
9
|
-
});
|
|
10
|
-
|
|
11
|
-
test('parse $top errors for 1,0', () => {
|
|
12
|
-
const result = parseOData('?$select=name,numberofemployees&$top=1,0');
|
|
13
|
-
expect(result.error).not.toBeNull();
|
|
14
|
-
console.log(result.error);
|
|
15
|
-
expect(result.error?.code).toEqual('0x0');
|
|
16
|
-
expect(result.error?.message).toEqual(
|
|
17
|
-
`Invalid value '1,0' for $top query option found. The $top query option requires a non-negative integer value.`,
|
|
18
|
-
);
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
test('parse $top errors for negative value', () => {
|
|
22
|
-
const result = parseOData('?$select=name,numberofemployees&$top=-2');
|
|
23
|
-
expect(result.error).not.toBeNull();
|
|
24
|
-
expect(result.error?.code).toEqual('0x0');
|
|
25
|
-
expect(result.error?.message).toEqual(
|
|
26
|
-
`Invalid value '-2' for $top query option found. The $top query option requires a non-negative integer value.`,
|
|
27
|
-
);
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
test('parse $top errors for 0', () => {
|
|
31
|
-
const result = parseOData('?$select=name,numberofemployees&$top=0');
|
|
32
|
-
expect(result.error).not.toBeNull();
|
|
33
|
-
expect(result.error?.code).toEqual('0x0');
|
|
34
|
-
expect(result.error?.message).toEqual(`Invalid value for $top query option.`);
|
|
35
|
-
});
|
|
36
|
-
});
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { describe, expect, test } from '@jest/globals';
|
|
2
|
-
import { parseOData } from '../src';
|
|
3
|
-
|
|
4
|
-
describe('parseOData fetchXml', () => {
|
|
5
|
-
test('parse fetchXml account', () => {
|
|
6
|
-
const result = parseOData(
|
|
7
|
-
'?fetchXml=%3Cfetch%20mapping%3D%27logical%27%3E%3Centity%20name%3D%27account%27%3E%3Cattribute%20name%3D%27accountid%27%2F%3E%3Cattribute%20name%3D%27name%27%2F%3E%3Cattribute%20name%3D%27accountnumber%27%2F%3E%3C%2Fentity%3E%3C%2Ffetch%3E',
|
|
8
|
-
);
|
|
9
|
-
console.log(result);
|
|
10
|
-
expect(result.fetchXml?.documentElement.outerHTML).toEqual(
|
|
11
|
-
`<fetch mapping="logical"><entity name="account"><attribute name="accountid"/><attribute name="name"/><attribute name="accountnumber"/></entity></fetch>`,
|
|
12
|
-
);
|
|
13
|
-
});
|
|
14
|
-
|
|
15
|
-
test('parse fetchXml fails if invalid XML', () => {
|
|
16
|
-
const result = parseOData('?fetchXml=invalid');
|
|
17
|
-
expect(result.error).not.toBeNull();
|
|
18
|
-
console.log(result.error);
|
|
19
|
-
expect(result.error?.code).toEqual('0x80040201');
|
|
20
|
-
expect(result.error?.message).toEqual('Invalid XML.');
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
test('parse fetchXml fails if EntityName not specified', () => {
|
|
24
|
-
const result = parseOData('?fetchXml=<fetch><entity name=""></entity></fetch>');
|
|
25
|
-
expect(result.error).not.toBeNull();
|
|
26
|
-
console.log(result.error);
|
|
27
|
-
expect(result.error?.code).toEqual('0x80041102');
|
|
28
|
-
expect(result.error?.message).toEqual('Entity Name was not specified in FetchXml String.');
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
test('parse fetchXml fails if EntityName not specified', () => {
|
|
32
|
-
const result = parseOData('?fetchXml=<fetch><entity></entity></fetch>');
|
|
33
|
-
expect(result.error).not.toBeNull();
|
|
34
|
-
console.log(result.error);
|
|
35
|
-
expect(result.error?.code).toEqual('0x80041102');
|
|
36
|
-
expect(result.error?.message).toEqual('Entity Name was not specified in FetchXml String.');
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
test('parse fetchXml fails if EntityName not specified', () => {
|
|
40
|
-
const result = parseOData('?fetchXml=<entity></entity>');
|
|
41
|
-
expect(result.error).not.toBeNull();
|
|
42
|
-
console.log(result.error);
|
|
43
|
-
expect(result.error?.code).toEqual('0x80041102');
|
|
44
|
-
expect(result.error?.message).toEqual('Entity Name was not specified in FetchXml String.');
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
test('parse fetchXml fails if EntityName not specified', () => {
|
|
48
|
-
const result = parseOData('?fetchXml=<fetch></fetch>');
|
|
49
|
-
expect(result.error).not.toBeNull();
|
|
50
|
-
console.log(result.error);
|
|
51
|
-
expect(result.error?.code).toEqual('0x80041102');
|
|
52
|
-
expect(result.error?.message).toEqual('Entity Name was not specified in FetchXml String.');
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
test('parse fetchXml fails if invalid attribute specified', () => {
|
|
56
|
-
const result = parseOData('?fetchXml=<fetch><entity%20name="systemuser"><n%20/></entity></fetch>');
|
|
57
|
-
expect(result.error).not.toBeUndefined();
|
|
58
|
-
console.log(result.error);
|
|
59
|
-
expect(result.error?.code).toEqual('0x8004111c');
|
|
60
|
-
expect(result.error?.message).toEqual('Invalid Child Node, valid nodes are filter, order, link-entity, attribute, all-attributes, no-attrs. NodeName = n NodeXml = <n/>');
|
|
61
|
-
});
|
|
62
|
-
});
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { describe, expect, test } from '@jest/globals';
|
|
2
|
-
import { parseOData } from '../src';
|
|
3
|
-
|
|
4
|
-
describe('parse odata', () => {
|
|
5
|
-
test('parse $select', () => {
|
|
6
|
-
const result = parseOData('?$select=name,numberofemployees$top=5');
|
|
7
|
-
expect(result.$select).not.toBeNull();
|
|
8
|
-
expect(result.$select).toContain('name');
|
|
9
|
-
});
|
|
10
|
-
|
|
11
|
-
test('$select and $expand', () => {
|
|
12
|
-
const result = parseOData('?$select2=name,numberofemployees&$expand=Account_Leads($select=name)');
|
|
13
|
-
expect(result.$select).not.toBeNull();
|
|
14
|
-
expect(result.$expand).not.toBeNull();
|
|
15
|
-
expect(result.$expand?.Account_Leads).not.toBeNull();
|
|
16
|
-
});
|
|
17
|
-
});
|