@shko.online/dataverse-odata 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.vscode/settings.json +3 -0
- package/CHANGELOG.md +7 -0
- package/azure-pipelines.yml +2 -2
- package/lib/cjs/getFetchXmlFromParser.js +1 -1
- package/lib/cjs/getFilterFromParser.js +7 -5
- package/lib/cjs/index.js +21 -3
- package/lib/esm/getFetchXmlFromParser.js +1 -1
- package/lib/esm/getFilterFromParser.js +7 -5
- package/lib/esm/index.js +3 -3
- package/lib/modern/getFetchXmlFromParser.js +1 -1
- package/lib/modern/getFilterFromParser.js +7 -5
- package/lib/modern/index.js +3 -3
- package/lib/ts3.4/index.d.ts +4 -4
- package/lib/ts3.9/index.d.ts +4 -4
- package/lib/ts4.2/getFilterFromParser.d.ts.map +1 -1
- package/lib/ts4.2/index.d.ts +4 -4
- package/lib/ts4.2/index.d.ts.map +1 -1
- package/package.json +8 -8
- package/src/getFetchXmlFromParser.ts +1 -1
- package/src/getFilterFromParser.ts +8 -6
- package/src/index.ts +11 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
## [0.2.1](https://github.com/Shko-Online/dataverse-odata/compare/v0.2.0...v0.2.1) (2026-05-13)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* Fixed exports for index ([d623a40](https://github.com/Shko-Online/dataverse-odata/commit/d623a40515dec7888997634cbf5d043ebbf91461))
|
|
7
|
+
|
|
1
8
|
# [0.2.0](https://github.com/Shko-Online/dataverse-odata/compare/v0.1.6...v0.2.0) (2026-04-11)
|
|
2
9
|
|
|
3
10
|
|
package/azure-pipelines.yml
CHANGED
|
@@ -31,7 +31,7 @@ const getFetchXmlFromParser = (parser, result) => {
|
|
|
31
31
|
return false;
|
|
32
32
|
}
|
|
33
33
|
const entity = fetchXmlDocument.evaluate('fetch/entity', fetchXmlDocument, null, XPathResult.ANY_TYPE, null).iterateNext();
|
|
34
|
-
if (fetchXmlDocument.documentElement.children.length != 1 || !entity
|
|
34
|
+
if (fetchXmlDocument.documentElement.children.length != 1 || !entity?.getAttribute('name')) {
|
|
35
35
|
result.error = {
|
|
36
36
|
code: '0x80041102',
|
|
37
37
|
message: 'Entity Name was not specified in FetchXml String.'
|
|
@@ -67,7 +67,7 @@ function tokenize(input) {
|
|
|
67
67
|
value: input.slice(i, i + 36)
|
|
68
68
|
});
|
|
69
69
|
i += 36;
|
|
70
|
-
} else if (
|
|
70
|
+
} else if (/\d/.test(input[i]) || input[i] === '-' && /\d/.test(input[i + 1] ?? '')) {
|
|
71
71
|
let j = i;
|
|
72
72
|
if (input[j] === '-') j++;
|
|
73
73
|
while (j < input.length && /[0-9.]/.test(input[j])) j++;
|
|
@@ -78,7 +78,7 @@ function tokenize(input) {
|
|
|
78
78
|
i = j;
|
|
79
79
|
} else if (/[a-zA-Z_]/.test(input[i])) {
|
|
80
80
|
let j = i;
|
|
81
|
-
while (j < input.length &&
|
|
81
|
+
while (j < input.length && /\w/.test(input[j])) j++;
|
|
82
82
|
tokens.push({
|
|
83
83
|
type: 'word',
|
|
84
84
|
value: input.slice(i, j)
|
|
@@ -101,13 +101,15 @@ class FilterParser {
|
|
|
101
101
|
}
|
|
102
102
|
consume(expected) {
|
|
103
103
|
const token = this.tokens[this.pos++];
|
|
104
|
-
|
|
104
|
+
const expectedString = expected ? `, expected ${expected}` : '';
|
|
105
|
+
if (!token) throw new Error(`Unexpected end of filter expression${expectedString}`);
|
|
105
106
|
return token;
|
|
106
107
|
}
|
|
107
108
|
expect(type, value) {
|
|
108
|
-
const
|
|
109
|
+
const valueString = value ? ` '${value}'` : '';
|
|
110
|
+
const token = this.consume(`${type}${valueString}`);
|
|
109
111
|
if (token.type !== type || value !== undefined && token.value !== value) {
|
|
110
|
-
throw new Error(`Expected ${type}${
|
|
112
|
+
throw new Error(`Expected ${type}${valueString} but got ${token.type} '${token.value}'`);
|
|
111
113
|
}
|
|
112
114
|
return token;
|
|
113
115
|
}
|
package/lib/cjs/index.js
CHANGED
|
@@ -3,7 +3,18 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports
|
|
6
|
+
Object.defineProperty(exports, "default", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _parseOData.parseOData;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
Object.defineProperty(exports, "getAliasedProperty", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function () {
|
|
15
|
+
return _getAliasedProperty.getAliasedProperty;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
7
18
|
Object.defineProperty(exports, "getExpandFromParser", {
|
|
8
19
|
enumerable: true,
|
|
9
20
|
get: function () {
|
|
@@ -16,6 +27,12 @@ Object.defineProperty(exports, "getFetchXmlFromParser", {
|
|
|
16
27
|
return _getFetchXmlFromParser.getFetchXmlFromParser;
|
|
17
28
|
}
|
|
18
29
|
});
|
|
30
|
+
Object.defineProperty(exports, "getFilterFromParser", {
|
|
31
|
+
enumerable: true,
|
|
32
|
+
get: function () {
|
|
33
|
+
return _getFilterFromParser.getFilterFromParser;
|
|
34
|
+
}
|
|
35
|
+
});
|
|
19
36
|
Object.defineProperty(exports, "getOrderByFromParser", {
|
|
20
37
|
enumerable: true,
|
|
21
38
|
get: function () {
|
|
@@ -46,11 +63,12 @@ Object.defineProperty(exports, "parseOData", {
|
|
|
46
63
|
return _parseOData.parseOData;
|
|
47
64
|
}
|
|
48
65
|
});
|
|
66
|
+
var _getAliasedProperty = require("./getAliasedProperty");
|
|
49
67
|
var _getExpandFromParser = require("./getExpandFromParser");
|
|
50
68
|
var _getFetchXmlFromParser = require("./getFetchXmlFromParser");
|
|
69
|
+
var _getFilterFromParser = require("./getFilterFromParser");
|
|
51
70
|
var _getOrderByFromParser = require("./getOrderByFromParser");
|
|
52
71
|
var _getSelectFromParser = require("./getSelectFromParser");
|
|
53
72
|
var _getTopFromParser = require("./getTopFromParser");
|
|
54
73
|
var _getXQueryFromParser = require("./getXQueryFromParser");
|
|
55
|
-
var _parseOData = require("./parseOData");
|
|
56
|
-
var _default = exports.default = _parseOData.parseOData;
|
|
74
|
+
var _parseOData = require("./parseOData");
|
|
@@ -25,7 +25,7 @@ export const getFetchXmlFromParser = (parser, result) => {
|
|
|
25
25
|
return false;
|
|
26
26
|
}
|
|
27
27
|
const entity = fetchXmlDocument.evaluate('fetch/entity', fetchXmlDocument, null, XPathResult.ANY_TYPE, null).iterateNext();
|
|
28
|
-
if (fetchXmlDocument.documentElement.children.length != 1 || !entity
|
|
28
|
+
if (fetchXmlDocument.documentElement.children.length != 1 || !entity?.getAttribute('name')) {
|
|
29
29
|
result.error = {
|
|
30
30
|
code: '0x80041102',
|
|
31
31
|
message: 'Entity Name was not specified in FetchXml String.'
|
|
@@ -61,7 +61,7 @@ function tokenize(input) {
|
|
|
61
61
|
value: input.slice(i, i + 36)
|
|
62
62
|
});
|
|
63
63
|
i += 36;
|
|
64
|
-
} else if (
|
|
64
|
+
} else if (/\d/.test(input[i]) || input[i] === '-' && /\d/.test(input[i + 1] ?? '')) {
|
|
65
65
|
let j = i;
|
|
66
66
|
if (input[j] === '-') j++;
|
|
67
67
|
while (j < input.length && /[0-9.]/.test(input[j])) j++;
|
|
@@ -72,7 +72,7 @@ function tokenize(input) {
|
|
|
72
72
|
i = j;
|
|
73
73
|
} else if (/[a-zA-Z_]/.test(input[i])) {
|
|
74
74
|
let j = i;
|
|
75
|
-
while (j < input.length &&
|
|
75
|
+
while (j < input.length && /\w/.test(input[j])) j++;
|
|
76
76
|
tokens.push({
|
|
77
77
|
type: 'word',
|
|
78
78
|
value: input.slice(i, j)
|
|
@@ -95,13 +95,15 @@ class FilterParser {
|
|
|
95
95
|
}
|
|
96
96
|
consume(expected) {
|
|
97
97
|
const token = this.tokens[this.pos++];
|
|
98
|
-
|
|
98
|
+
const expectedString = expected ? `, expected ${expected}` : '';
|
|
99
|
+
if (!token) throw new Error(`Unexpected end of filter expression${expectedString}`);
|
|
99
100
|
return token;
|
|
100
101
|
}
|
|
101
102
|
expect(type, value) {
|
|
102
|
-
const
|
|
103
|
+
const valueString = value ? ` '${value}'` : '';
|
|
104
|
+
const token = this.consume(`${type}${valueString}`);
|
|
103
105
|
if (token.type !== type || value !== undefined && token.value !== value) {
|
|
104
|
-
throw new Error(`Expected ${type}${
|
|
106
|
+
throw new Error(`Expected ${type}${valueString} but got ${token.type} '${token.value}'`);
|
|
105
107
|
}
|
|
106
108
|
return token;
|
|
107
109
|
}
|
package/lib/esm/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
+
export { getAliasedProperty } from './getAliasedProperty';
|
|
1
2
|
export { getExpandFromParser } from './getExpandFromParser';
|
|
2
3
|
export { getFetchXmlFromParser } from './getFetchXmlFromParser';
|
|
4
|
+
export { getFilterFromParser } from './getFilterFromParser';
|
|
3
5
|
export { getOrderByFromParser } from './getOrderByFromParser';
|
|
4
6
|
export { getSelectFromParser } from './getSelectFromParser';
|
|
5
7
|
export { getTopFromParser } from './getTopFromParser';
|
|
6
8
|
export { getXQueryFromParser } from './getXQueryFromParser';
|
|
7
|
-
export { parseOData } from './parseOData';
|
|
8
|
-
import { parseOData } from './parseOData';
|
|
9
|
-
export default parseOData;
|
|
9
|
+
export { parseOData, parseOData as default } from './parseOData';
|
|
@@ -25,7 +25,7 @@ export const getFetchXmlFromParser = (parser, result) => {
|
|
|
25
25
|
return false;
|
|
26
26
|
}
|
|
27
27
|
const entity = fetchXmlDocument.evaluate('fetch/entity', fetchXmlDocument, null, XPathResult.ANY_TYPE, null).iterateNext();
|
|
28
|
-
if (fetchXmlDocument.documentElement.children.length != 1 || !entity
|
|
28
|
+
if (fetchXmlDocument.documentElement.children.length != 1 || !(entity !== null && entity !== void 0 && entity.getAttribute('name'))) {
|
|
29
29
|
result.error = {
|
|
30
30
|
code: '0x80041102',
|
|
31
31
|
message: 'Entity Name was not specified in FetchXml String.'
|
|
@@ -62,7 +62,7 @@ function tokenize(input) {
|
|
|
62
62
|
value: input.slice(i, i + 36)
|
|
63
63
|
});
|
|
64
64
|
i += 36;
|
|
65
|
-
} else if (
|
|
65
|
+
} else if (/\d/.test(input[i]) || input[i] === '-' && /\d/.test((_input = input[i + 1]) !== null && _input !== void 0 ? _input : '')) {
|
|
66
66
|
let j = i;
|
|
67
67
|
if (input[j] === '-') j++;
|
|
68
68
|
while (j < input.length && /[0-9.]/.test(input[j])) j++;
|
|
@@ -73,7 +73,7 @@ function tokenize(input) {
|
|
|
73
73
|
i = j;
|
|
74
74
|
} else if (/[a-zA-Z_]/.test(input[i])) {
|
|
75
75
|
let j = i;
|
|
76
|
-
while (j < input.length &&
|
|
76
|
+
while (j < input.length && /\w/.test(input[j])) j++;
|
|
77
77
|
tokens.push({
|
|
78
78
|
type: 'word',
|
|
79
79
|
value: input.slice(i, j)
|
|
@@ -97,13 +97,15 @@ class FilterParser {
|
|
|
97
97
|
}
|
|
98
98
|
consume(expected) {
|
|
99
99
|
const token = this.tokens[this.pos++];
|
|
100
|
-
|
|
100
|
+
const expectedString = expected ? `, expected ${expected}` : '';
|
|
101
|
+
if (!token) throw new Error(`Unexpected end of filter expression${expectedString}`);
|
|
101
102
|
return token;
|
|
102
103
|
}
|
|
103
104
|
expect(type, value) {
|
|
104
|
-
const
|
|
105
|
+
const valueString = value ? ` '${value}'` : '';
|
|
106
|
+
const token = this.consume(`${type}${valueString}`);
|
|
105
107
|
if (token.type !== type || value !== undefined && token.value !== value) {
|
|
106
|
-
throw new Error(`Expected ${type}${
|
|
108
|
+
throw new Error(`Expected ${type}${valueString} but got ${token.type} '${token.value}'`);
|
|
107
109
|
}
|
|
108
110
|
return token;
|
|
109
111
|
}
|
package/lib/modern/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
+
export { getAliasedProperty } from './getAliasedProperty';
|
|
1
2
|
export { getExpandFromParser } from './getExpandFromParser';
|
|
2
3
|
export { getFetchXmlFromParser } from './getFetchXmlFromParser';
|
|
4
|
+
export { getFilterFromParser } from './getFilterFromParser';
|
|
3
5
|
export { getOrderByFromParser } from './getOrderByFromParser';
|
|
4
6
|
export { getSelectFromParser } from './getSelectFromParser';
|
|
5
7
|
export { getTopFromParser } from './getTopFromParser';
|
|
6
8
|
export { getXQueryFromParser } from './getXQueryFromParser';
|
|
7
|
-
export { parseOData } from './parseOData';
|
|
8
|
-
import { parseOData } from './parseOData';
|
|
9
|
-
export default parseOData;
|
|
9
|
+
export { parseOData, parseOData as default } from './parseOData';
|
package/lib/ts3.4/index.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
export { BinaryOperator, ODataError, ODataExpand, ODataExpandQuery, ODataFetch, ODataFilter, ODataQuery, ODataSelect, ODataTop, StandardOperator, StandardOperators, } from './OData.types';
|
|
1
|
+
export { BinaryOperator, ColumnOperator, FilterOperator, ODataError, ODataExpand, ODataExpandQuery, ODataFetch, ODataFilter, ODataOrderBy, ODataQuery, ODataSavedQuery, ODataSelect, ODataTop, ODataUserQuery, QueryFunctionOperator, QueryFunctionOperators, StandardOperator, StandardOperators, UnaryOperator, } from './OData.types';
|
|
2
|
+
export { getAliasedProperty } from './getAliasedProperty';
|
|
2
3
|
export { getExpandFromParser } from './getExpandFromParser';
|
|
3
4
|
export { getFetchXmlFromParser } from './getFetchXmlFromParser';
|
|
5
|
+
export { getFilterFromParser } from './getFilterFromParser';
|
|
4
6
|
export { getOrderByFromParser } from './getOrderByFromParser';
|
|
5
7
|
export { getSelectFromParser } from './getSelectFromParser';
|
|
6
8
|
export { getTopFromParser } from './getTopFromParser';
|
|
7
9
|
export { getXQueryFromParser } from './getXQueryFromParser';
|
|
8
|
-
export { parseOData } from './parseOData';
|
|
9
|
-
import { parseOData } from './parseOData';
|
|
10
|
-
export default parseOData;
|
|
10
|
+
export { parseOData, parseOData as default } from './parseOData';
|
|
11
11
|
//# sourceMappingURL=index.d.ts.map
|
package/lib/ts3.9/index.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
export type { BinaryOperator, ODataError, ODataExpand, ODataExpandQuery, ODataFetch, ODataFilter, ODataQuery, ODataSelect, ODataTop, StandardOperator, StandardOperators, } from './OData.types';
|
|
1
|
+
export type { BinaryOperator, ColumnOperator, FilterOperator, ODataError, ODataExpand, ODataExpandQuery, ODataFetch, ODataFilter, ODataOrderBy, ODataQuery, ODataSavedQuery, ODataSelect, ODataTop, ODataUserQuery, QueryFunctionOperator, QueryFunctionOperators, StandardOperator, StandardOperators, UnaryOperator, } from './OData.types';
|
|
2
|
+
export { getAliasedProperty } from './getAliasedProperty';
|
|
2
3
|
export { getExpandFromParser } from './getExpandFromParser';
|
|
3
4
|
export { getFetchXmlFromParser } from './getFetchXmlFromParser';
|
|
5
|
+
export { getFilterFromParser } from './getFilterFromParser';
|
|
4
6
|
export { getOrderByFromParser } from './getOrderByFromParser';
|
|
5
7
|
export { getSelectFromParser } from './getSelectFromParser';
|
|
6
8
|
export { getTopFromParser } from './getTopFromParser';
|
|
7
9
|
export { getXQueryFromParser } from './getXQueryFromParser';
|
|
8
|
-
export { parseOData } from './parseOData';
|
|
9
|
-
import { parseOData } from './parseOData';
|
|
10
|
-
export default parseOData;
|
|
10
|
+
export { parseOData, parseOData as default } from './parseOData';
|
|
11
11
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getFilterFromParser.d.ts","sourceRoot":"","sources":["../../src/getFilterFromParser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAkB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"getFilterFromParser.d.ts","sourceRoot":"","sources":["../../src/getFilterFromParser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAkB,MAAM,eAAe,CAAC;AAyMhE;;;GAGG;AACH,eAAO,MAAM,mBAAmB,GAAI,QAAQ,eAAe,EAAE,QAAQ,UAAU,KAAG,OAoBjF,CAAC"}
|
package/lib/ts4.2/index.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
export type { BinaryOperator, ODataError, ODataExpand, ODataExpandQuery, ODataFetch, ODataFilter, ODataQuery, ODataSelect, ODataTop, StandardOperator, StandardOperators, } from './OData.types';
|
|
1
|
+
export type { BinaryOperator, ColumnOperator, FilterOperator, ODataError, ODataExpand, ODataExpandQuery, ODataFetch, ODataFilter, ODataOrderBy, ODataQuery, ODataSavedQuery, ODataSelect, ODataTop, ODataUserQuery, QueryFunctionOperator, QueryFunctionOperators, StandardOperator, StandardOperators, UnaryOperator, } from './OData.types';
|
|
2
|
+
export { getAliasedProperty } from './getAliasedProperty';
|
|
2
3
|
export { getExpandFromParser } from './getExpandFromParser';
|
|
3
4
|
export { getFetchXmlFromParser } from './getFetchXmlFromParser';
|
|
5
|
+
export { getFilterFromParser } from './getFilterFromParser';
|
|
4
6
|
export { getOrderByFromParser } from './getOrderByFromParser';
|
|
5
7
|
export { getSelectFromParser } from './getSelectFromParser';
|
|
6
8
|
export { getTopFromParser } from './getTopFromParser';
|
|
7
9
|
export { getXQueryFromParser } from './getXQueryFromParser';
|
|
8
|
-
export { parseOData } from './parseOData';
|
|
9
|
-
import { parseOData } from './parseOData';
|
|
10
|
-
export default parseOData;
|
|
10
|
+
export { parseOData, parseOData as default } from './parseOData';
|
|
11
11
|
//# sourceMappingURL=index.d.ts.map
|
package/lib/ts4.2/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACR,cAAc,EACd,cAAc,EACd,cAAc,EACd,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,YAAY,EACZ,UAAU,EACV,eAAe,EACf,WAAW,EACX,QAAQ,EACR,cAAc,EACd,qBAAqB,EACrB,sBAAsB,EACtB,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,GAChB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,UAAU,EAAE,UAAU,IAAI,OAAO,EAAE,MAAM,cAAc,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shko.online/dataverse-odata",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "This package will help parse OData strings (only the Microsoft Dataverse subset). It can be used as a validator, or you can build some javascript library which consumes the output of this library.",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"build": "npm run lint && build-npm-package",
|
|
@@ -43,8 +43,8 @@
|
|
|
43
43
|
},
|
|
44
44
|
"homepage": "https://github.com/shko-online/dataverse-odata#readme",
|
|
45
45
|
"devDependencies": {
|
|
46
|
-
"@babel/cli": "^7.
|
|
47
|
-
"@babel/core": "^7.
|
|
46
|
+
"@babel/cli": "^7.28.6",
|
|
47
|
+
"@babel/core": "^7.29.0",
|
|
48
48
|
"@babel/plugin-proposal-class-properties": "^7.18.6",
|
|
49
49
|
"@babel/plugin-proposal-decorators": "^7.20.13",
|
|
50
50
|
"@babel/plugin-proposal-export-default-from": "^7.18.10",
|
|
@@ -53,11 +53,11 @@
|
|
|
53
53
|
"@babel/plugin-proposal-private-property-in-object": "^7.20.5",
|
|
54
54
|
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
|
|
55
55
|
"@babel/plugin-transform-runtime": "^7.19.6",
|
|
56
|
-
"@babel/preset-env": "^7.
|
|
57
|
-
"@babel/preset-flow": "^7.
|
|
58
|
-
"@babel/preset-react": "^7.
|
|
59
|
-
"@babel/preset-typescript": "^7.
|
|
60
|
-
"@emotion/babel-plugin": "^11.
|
|
56
|
+
"@babel/preset-env": "^7.29.2",
|
|
57
|
+
"@babel/preset-flow": "^7.27.1",
|
|
58
|
+
"@babel/preset-react": "^7.28.5",
|
|
59
|
+
"@babel/preset-typescript": "^7.28.5",
|
|
60
|
+
"@emotion/babel-plugin": "^11.13.5",
|
|
61
61
|
"@jest/globals": "^29.4.2",
|
|
62
62
|
"@semantic-release/changelog": "^6.0.3",
|
|
63
63
|
"@semantic-release/commit-analyzer": "^13.0.1",
|
|
@@ -30,7 +30,7 @@ export const getFetchXmlFromParser = (parser: URLSearchParams, result: ODataQuer
|
|
|
30
30
|
const entity = fetchXmlDocument
|
|
31
31
|
.evaluate('fetch/entity', fetchXmlDocument, null, XPathResult.ANY_TYPE, null)
|
|
32
32
|
.iterateNext() as Element;
|
|
33
|
-
if (fetchXmlDocument.documentElement.children.length != 1 || !entity
|
|
33
|
+
if (fetchXmlDocument.documentElement.children.length != 1 || !entity?.getAttribute('name')) {
|
|
34
34
|
result.error = {
|
|
35
35
|
code: '0x80041102',
|
|
36
36
|
message: 'Entity Name was not specified in FetchXml String.',
|
|
@@ -63,7 +63,7 @@ function tokenize(input: string): Token[] {
|
|
|
63
63
|
} else if (/[0-9a-fA-F]/.test(input[i]) && GUID_REGEX.test(input.slice(i))) {
|
|
64
64
|
tokens.push({ type: 'string', value: input.slice(i, i + 36) });
|
|
65
65
|
i += 36;
|
|
66
|
-
} else if (
|
|
66
|
+
} else if (/\d/.test(input[i]) || (input[i] === '-' && /\d/.test(input[i + 1] ?? ''))) {
|
|
67
67
|
let j = i;
|
|
68
68
|
if (input[j] === '-') j++;
|
|
69
69
|
while (j < input.length && /[0-9.]/.test(input[j])) j++;
|
|
@@ -71,7 +71,7 @@ function tokenize(input: string): Token[] {
|
|
|
71
71
|
i = j;
|
|
72
72
|
} else if (/[a-zA-Z_]/.test(input[i])) {
|
|
73
73
|
let j = i;
|
|
74
|
-
while (j < input.length &&
|
|
74
|
+
while (j < input.length && /\w/.test(input[j])) j++;
|
|
75
75
|
tokens.push({ type: 'word', value: input.slice(i, j) });
|
|
76
76
|
i = j;
|
|
77
77
|
} else {
|
|
@@ -82,7 +82,7 @@ function tokenize(input: string): Token[] {
|
|
|
82
82
|
}
|
|
83
83
|
|
|
84
84
|
class FilterParser {
|
|
85
|
-
private tokens: Token[];
|
|
85
|
+
private readonly tokens: Token[];
|
|
86
86
|
private pos = 0;
|
|
87
87
|
|
|
88
88
|
constructor(tokens: Token[]) {
|
|
@@ -95,15 +95,17 @@ class FilterParser {
|
|
|
95
95
|
|
|
96
96
|
private consume(expected?: string): Token {
|
|
97
97
|
const token = this.tokens[this.pos++];
|
|
98
|
-
|
|
98
|
+
const expectedString = expected ? `, expected ${expected}` : '';
|
|
99
|
+
if (!token) throw new Error(`Unexpected end of filter expression${expectedString}`);
|
|
99
100
|
return token;
|
|
100
101
|
}
|
|
101
102
|
|
|
102
103
|
private expect(type: TokenType, value?: string): Token {
|
|
103
|
-
|
|
104
|
+
const valueString = value ? ` '${value}'` : '';
|
|
105
|
+
const token = this.consume(`${type}${valueString}`);
|
|
104
106
|
if (token.type !== type || (value !== undefined && token.value !== value)) {
|
|
105
107
|
throw new Error(
|
|
106
|
-
`Expected ${type}${
|
|
108
|
+
`Expected ${type}${valueString} but got ${token.type} '${token.value}'`,
|
|
107
109
|
);
|
|
108
110
|
}
|
|
109
111
|
return token;
|
package/src/index.ts
CHANGED
|
@@ -1,24 +1,32 @@
|
|
|
1
1
|
export type {
|
|
2
2
|
BinaryOperator,
|
|
3
|
+
ColumnOperator,
|
|
4
|
+
FilterOperator,
|
|
3
5
|
ODataError,
|
|
4
6
|
ODataExpand,
|
|
5
7
|
ODataExpandQuery,
|
|
6
8
|
ODataFetch,
|
|
7
9
|
ODataFilter,
|
|
10
|
+
ODataOrderBy,
|
|
8
11
|
ODataQuery,
|
|
12
|
+
ODataSavedQuery,
|
|
9
13
|
ODataSelect,
|
|
10
14
|
ODataTop,
|
|
15
|
+
ODataUserQuery,
|
|
16
|
+
QueryFunctionOperator,
|
|
17
|
+
QueryFunctionOperators,
|
|
11
18
|
StandardOperator,
|
|
12
19
|
StandardOperators,
|
|
20
|
+
UnaryOperator,
|
|
13
21
|
} from './OData.types';
|
|
14
22
|
|
|
23
|
+
export { getAliasedProperty } from './getAliasedProperty';
|
|
15
24
|
export { getExpandFromParser } from './getExpandFromParser';
|
|
16
25
|
export { getFetchXmlFromParser } from './getFetchXmlFromParser';
|
|
26
|
+
export { getFilterFromParser } from './getFilterFromParser';
|
|
17
27
|
export { getOrderByFromParser } from './getOrderByFromParser';
|
|
18
28
|
export { getSelectFromParser } from './getSelectFromParser';
|
|
19
29
|
export { getTopFromParser } from './getTopFromParser';
|
|
20
30
|
export { getXQueryFromParser } from './getXQueryFromParser';
|
|
21
31
|
|
|
22
|
-
export { parseOData } from './parseOData';
|
|
23
|
-
import { parseOData } from './parseOData';
|
|
24
|
-
export default parseOData;
|
|
32
|
+
export { parseOData, parseOData as default } from './parseOData';
|