@speclynx/apidom-parser-adapter-json 1.12.2 → 2.1.0
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/CHANGELOG.md +24 -0
- package/NOTICE +16 -7
- package/README.md +36 -25
- package/dist/167.apidom-parser-adapter-json.browser.min.js +1 -1
- package/dist/451.apidom-parser-adapter-json.browser.min.js +1 -1
- package/dist/apidom-parser-adapter-json.browser.js +3101 -12890
- package/dist/apidom-parser-adapter-json.browser.min.js +1 -1
- package/package.json +7 -11
- package/src/adapter.cjs +29 -34
- package/src/adapter.mjs +26 -31
- package/src/native/index.cjs +30 -0
- package/src/native/index.mjs +25 -0
- package/src/tree-sitter/index.cjs +54 -0
- package/src/tree-sitter/index.mjs +48 -0
- package/src/{lexical-analysis → tree-sitter/lexical-analysis}/index.cjs +1 -1
- package/src/{lexical-analysis → tree-sitter/lexical-analysis}/index.mjs +1 -1
- package/src/tree-sitter/syntactic-analysis/index.cjs +223 -0
- package/src/tree-sitter/syntactic-analysis/index.mjs +219 -0
- package/types/apidom-parser-adapter-json.d.ts +14 -33
- package/src/syntactic-analysis/TreeCursorIterator.cjs +0 -62
- package/src/syntactic-analysis/TreeCursorIterator.mjs +0 -57
- package/src/syntactic-analysis/TreeCursorSyntaxNode.cjs +0 -51
- package/src/syntactic-analysis/TreeCursorSyntaxNode.mjs +0 -47
- package/src/syntactic-analysis/direct/index.cjs +0 -64
- package/src/syntactic-analysis/direct/index.mjs +0 -59
- package/src/syntactic-analysis/direct/visitors/CstVisitor.cjs +0 -163
- package/src/syntactic-analysis/direct/visitors/CstVisitor.mjs +0 -158
- package/src/syntactic-analysis/indirect/index.cjs +0 -56
- package/src/syntactic-analysis/indirect/index.mjs +0 -49
- package/src/syntactic-analysis/indirect/visitors/CstVisitor.cjs +0 -177
- package/src/syntactic-analysis/indirect/visitors/CstVisitor.mjs +0 -172
- package/src/syntactic-analysis/indirect/visitors/JsonAstVisitor.cjs +0 -189
- package/src/syntactic-analysis/indirect/visitors/JsonAstVisitor.mjs +0 -183
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@speclynx/apidom-parser-adapter-json",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"description": "Parser adapter for parsing JSON documents into base namespace.",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public",
|
|
@@ -28,10 +28,9 @@
|
|
|
28
28
|
"typescript:check-types": "tsc --noEmit && tsc -p ./test/tsconfig.json --noEmit",
|
|
29
29
|
"typescript:declaration": "tsc -p tsconfig.declaration.json && api-extractor run -l -c ./config/api-extractor/api-extractor.json",
|
|
30
30
|
"test": "npm run build:es && cross-env BABEL_ENV=es babel test --out-dir test --extensions '.ts' --out-file-extension '.mjs' --root-mode 'upward' && cross-env NODE_ENV=test NODE_NO_WARNINGS=1 mocha",
|
|
31
|
-
"perf": "cross-env BABEL_ENV=es babel ./test/perf
|
|
31
|
+
"perf": "cross-env BABEL_ENV=es babel ./test/perf --out-dir ./test/perf --extensions '.ts' --out-file-extension '.mjs' --root-mode 'upward' && cross-env NODE_ENV=test node ./test/perf/index.mjs",
|
|
32
32
|
"perf:lexical-analysis": "cross-env BABEL_ENV=es babel ./test/perf/lexical-analysis.ts --out-file ./test/perf/lexical-analysis.mjs --root-mode 'upward' && cross-env NODE_ENV=test node ./test/perf/lexical-analysis.mjs",
|
|
33
|
-
"perf:
|
|
34
|
-
"perf:parse-syntactic-analysis-indirect": "cross-env BABEL_ENV=es babel ./test/perf/parse-syntactic-analysis-indirect.ts --out-file ./test/perf/parse-syntactic-analysis-indirect.mjs --root-mode 'upward' && cross-env NODE_ENV=test node ./test/perf/parse-syntactic-analysis-indirect.mjs",
|
|
33
|
+
"perf:syntactic-analysis": "cross-env BABEL_ENV=es babel ./test/perf/syntactic-analysis.ts --out-file ./test/perf/syntactic-analysis.mjs --root-mode 'upward' && cross-env NODE_ENV=test node ./test/perf/syntactic-analysis.mjs",
|
|
35
34
|
"prepack": "copyfiles -u 3 ../../LICENSES/* LICENSES && copyfiles -u 2 ../../NOTICE .",
|
|
36
35
|
"postpack": "rimraf NOTICE LICENSES"
|
|
37
36
|
},
|
|
@@ -43,12 +42,9 @@
|
|
|
43
42
|
"license": "Apache-2.0",
|
|
44
43
|
"dependencies": {
|
|
45
44
|
"@babel/runtime-corejs3": "^7.28.4",
|
|
46
|
-
"@speclynx/apidom-
|
|
47
|
-
"@speclynx/apidom-
|
|
48
|
-
"@speclynx/apidom-error": "^1.
|
|
49
|
-
"@types/ramda": "~0.30.0",
|
|
50
|
-
"ramda": "~0.32.0",
|
|
51
|
-
"ramda-adjunct": "^6.0.0",
|
|
45
|
+
"@speclynx/apidom-core": "^2.1.0",
|
|
46
|
+
"@speclynx/apidom-datamodel": "^2.1.0",
|
|
47
|
+
"@speclynx/apidom-error": "^2.1.0",
|
|
52
48
|
"web-tree-sitter": "=0.25.10"
|
|
53
49
|
},
|
|
54
50
|
"devDependencies": {
|
|
@@ -65,5 +61,5 @@
|
|
|
65
61
|
"README.md",
|
|
66
62
|
"CHANGELOG.md"
|
|
67
63
|
],
|
|
68
|
-
"gitHead": "
|
|
64
|
+
"gitHead": "dd02cfbbe82b0a31c6e7c444cec140e740e1c6e9"
|
|
69
65
|
}
|
package/src/adapter.cjs
CHANGED
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
|
|
4
|
+
var _interopRequireWildcard = require("@babel/runtime-corejs3/helpers/interopRequireWildcard").default;
|
|
4
5
|
exports.__esModule = true;
|
|
5
|
-
exports.parse = exports.namespace = exports.mediaTypes = exports.detectionRegExp = exports.detect = void 0;
|
|
6
|
-
var
|
|
7
|
-
var
|
|
8
|
-
|
|
9
|
-
var
|
|
10
|
-
exports.
|
|
11
|
-
exports.
|
|
12
|
-
var _index3 = _interopRequireDefault(require("./syntactic-analysis/indirect/index.cjs"));
|
|
13
|
-
exports.syntacticAnalysisIndirect = _index3.default;
|
|
6
|
+
exports.syntacticAnalysis = exports.parse = exports.namespace = exports.mediaTypes = exports.lexicalAnalysis = exports.detectionRegExp = exports.detect = void 0;
|
|
7
|
+
var _apidomDatamodel = require("@speclynx/apidom-datamodel");
|
|
8
|
+
var _apidomError = require("@speclynx/apidom-error");
|
|
9
|
+
var native = _interopRequireWildcard(require("./native/index.cjs"));
|
|
10
|
+
var treeSitter = _interopRequireWildcard(require("./tree-sitter/index.cjs"));
|
|
11
|
+
exports.lexicalAnalysis = treeSitter.lexicalAnalysis;
|
|
12
|
+
exports.syntacticAnalysis = treeSitter.syntacticAnalysis;
|
|
14
13
|
var _mediaTypes = _interopRequireDefault(require("./media-types.cjs"));
|
|
15
14
|
exports.mediaTypes = _mediaTypes.default;
|
|
16
15
|
/**
|
|
@@ -20,28 +19,27 @@ exports.mediaTypes = _mediaTypes.default;
|
|
|
20
19
|
/**
|
|
21
20
|
* @public
|
|
22
21
|
*/
|
|
23
|
-
const namespace = exports.namespace =
|
|
22
|
+
const namespace = exports.namespace = new _apidomDatamodel.Namespace();
|
|
24
23
|
|
|
25
24
|
/**
|
|
26
25
|
* @public
|
|
27
26
|
*/
|
|
28
|
-
const detectionRegExp = exports.detectionRegExp =
|
|
29
|
-
// eslint-disable-next-line no-control-regex
|
|
30
|
-
/(?<true>^\s*true\s*$)|(?<false>^\s*false\s*$)|(?<null>^\s*null\s*$)|(?<number>^\s*\d+\s*$)|(?<object>^\s*{\s*)|(?<array>^\s*\[\s*)|(?<string>^\s*"(((?=\\)\\(["\\/bfnrt]|u[0-9a-fA-F]{4}))|[^"\\\x00-\x1F\x7F])*"\s*$)/;
|
|
27
|
+
const detectionRegExp = exports.detectionRegExp = treeSitter.detectionRegExp;
|
|
31
28
|
|
|
32
29
|
/**
|
|
33
30
|
* @public
|
|
34
31
|
*/
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
return
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* @public
|
|
35
|
+
*/
|
|
36
|
+
const detect = async (source, {
|
|
37
|
+
strict = false
|
|
38
|
+
} = {}) => {
|
|
39
|
+
if (strict) {
|
|
40
|
+
return native.detect(source);
|
|
44
41
|
}
|
|
42
|
+
return treeSitter.detect(source);
|
|
45
43
|
};
|
|
46
44
|
|
|
47
45
|
/**
|
|
@@ -57,19 +55,16 @@ exports.detect = detect;
|
|
|
57
55
|
*/
|
|
58
56
|
const parse = async (source, {
|
|
59
57
|
sourceMap = false,
|
|
60
|
-
|
|
58
|
+
strict = false
|
|
61
59
|
} = {}) => {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
});
|
|
68
|
-
} else {
|
|
69
|
-
apiDOM = (0, _index2.default)(cst, {
|
|
70
|
-
sourceMap
|
|
71
|
-
});
|
|
60
|
+
if (strict && sourceMap) {
|
|
61
|
+
throw new _apidomError.ApiDOMError('Cannot use sourceMap with strict parsing. Strict parsing does not support source maps.');
|
|
62
|
+
}
|
|
63
|
+
if (strict) {
|
|
64
|
+
return native.parse(source);
|
|
72
65
|
}
|
|
73
|
-
return
|
|
66
|
+
return treeSitter.parse(source, {
|
|
67
|
+
sourceMap
|
|
68
|
+
});
|
|
74
69
|
};
|
|
75
70
|
exports.parse = parse;
|
package/src/adapter.mjs
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
export { lexicalAnalysis,
|
|
6
|
-
|
|
1
|
+
import { Namespace } from '@speclynx/apidom-datamodel';
|
|
2
|
+
import { ApiDOMError } from '@speclynx/apidom-error';
|
|
3
|
+
import * as native from "./native/index.mjs";
|
|
4
|
+
import * as treeSitter from "./tree-sitter/index.mjs";
|
|
5
|
+
export { lexicalAnalysis, syntacticAnalysis } from "./tree-sitter/index.mjs";
|
|
7
6
|
/**
|
|
8
7
|
* @public
|
|
9
8
|
*/
|
|
@@ -11,28 +10,27 @@ export { default as mediaTypes } from "./media-types.mjs";
|
|
|
11
10
|
/**
|
|
12
11
|
* @public
|
|
13
12
|
*/
|
|
14
|
-
export const namespace =
|
|
13
|
+
export const namespace = new Namespace();
|
|
15
14
|
|
|
16
15
|
/**
|
|
17
16
|
* @public
|
|
18
17
|
*/
|
|
19
|
-
export const detectionRegExp =
|
|
20
|
-
// eslint-disable-next-line no-control-regex
|
|
21
|
-
/(?<true>^\s*true\s*$)|(?<false>^\s*false\s*$)|(?<null>^\s*null\s*$)|(?<number>^\s*\d+\s*$)|(?<object>^\s*{\s*)|(?<array>^\s*\[\s*)|(?<string>^\s*"(((?=\\)\\(["\\/bfnrt]|u[0-9a-fA-F]{4}))|[^"\\\x00-\x1F\x7F])*"\s*$)/;
|
|
18
|
+
export const detectionRegExp = treeSitter.detectionRegExp;
|
|
22
19
|
|
|
23
20
|
/**
|
|
24
21
|
* @public
|
|
25
22
|
*/
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
return
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* @public
|
|
26
|
+
*/
|
|
27
|
+
export const detect = async (source, {
|
|
28
|
+
strict = false
|
|
29
|
+
} = {}) => {
|
|
30
|
+
if (strict) {
|
|
31
|
+
return native.detect(source);
|
|
35
32
|
}
|
|
33
|
+
return treeSitter.detect(source);
|
|
36
34
|
};
|
|
37
35
|
|
|
38
36
|
/**
|
|
@@ -48,18 +46,15 @@ export const detect = async source => {
|
|
|
48
46
|
*/
|
|
49
47
|
export const parse = async (source, {
|
|
50
48
|
sourceMap = false,
|
|
51
|
-
|
|
49
|
+
strict = false
|
|
52
50
|
} = {}) => {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
});
|
|
59
|
-
} else {
|
|
60
|
-
apiDOM = syntacticAnalysisDirect(cst, {
|
|
61
|
-
sourceMap
|
|
62
|
-
});
|
|
51
|
+
if (strict && sourceMap) {
|
|
52
|
+
throw new ApiDOMError('Cannot use sourceMap with strict parsing. Strict parsing does not support source maps.');
|
|
53
|
+
}
|
|
54
|
+
if (strict) {
|
|
55
|
+
return native.parse(source);
|
|
63
56
|
}
|
|
64
|
-
return
|
|
57
|
+
return treeSitter.parse(source, {
|
|
58
|
+
sourceMap
|
|
59
|
+
});
|
|
65
60
|
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.parse = exports.detect = void 0;
|
|
5
|
+
var _apidomDatamodel = require("@speclynx/apidom-datamodel");
|
|
6
|
+
/**
|
|
7
|
+
* @public
|
|
8
|
+
*/
|
|
9
|
+
const detect = async source => {
|
|
10
|
+
try {
|
|
11
|
+
JSON.parse(source);
|
|
12
|
+
return true;
|
|
13
|
+
} catch {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* @public
|
|
20
|
+
*/
|
|
21
|
+
exports.detect = detect;
|
|
22
|
+
const parse = async source => {
|
|
23
|
+
const pojo = JSON.parse(source);
|
|
24
|
+
const element = (0, _apidomDatamodel.refract)(pojo);
|
|
25
|
+
const parseResult = new _apidomDatamodel.ParseResultElement();
|
|
26
|
+
element.classes.push('result');
|
|
27
|
+
parseResult.push(element);
|
|
28
|
+
return parseResult;
|
|
29
|
+
};
|
|
30
|
+
exports.parse = parse;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ParseResultElement, refract } from '@speclynx/apidom-datamodel';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @public
|
|
5
|
+
*/
|
|
6
|
+
export const detect = async source => {
|
|
7
|
+
try {
|
|
8
|
+
JSON.parse(source);
|
|
9
|
+
return true;
|
|
10
|
+
} catch {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* @public
|
|
17
|
+
*/
|
|
18
|
+
export const parse = async source => {
|
|
19
|
+
const pojo = JSON.parse(source);
|
|
20
|
+
const element = refract(pojo);
|
|
21
|
+
const parseResult = new ParseResultElement();
|
|
22
|
+
element.classes.push('result');
|
|
23
|
+
parseResult.push(element);
|
|
24
|
+
return parseResult;
|
|
25
|
+
};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
|
|
4
|
+
exports.__esModule = true;
|
|
5
|
+
exports.parse = exports.detectionRegExp = exports.detect = void 0;
|
|
6
|
+
var _index = _interopRequireDefault(require("./lexical-analysis/index.cjs"));
|
|
7
|
+
exports.lexicalAnalysis = _index.default;
|
|
8
|
+
var _index2 = _interopRequireDefault(require("./syntactic-analysis/index.cjs"));
|
|
9
|
+
exports.syntacticAnalysis = _index2.default;
|
|
10
|
+
/**
|
|
11
|
+
* @public
|
|
12
|
+
*/
|
|
13
|
+
const detectionRegExp = exports.detectionRegExp =
|
|
14
|
+
// eslint-disable-next-line no-control-regex
|
|
15
|
+
/(?<true>^\s*true\s*$)|(?<false>^\s*false\s*$)|(?<null>^\s*null\s*$)|(?<number>^\s*\d+\s*$)|(?<object>^\s*{\s*)|(?<array>^\s*\[\s*)|(?<string>^\s*"(((?=\\)\\(["\\/bfnrt]|u[0-9a-fA-F]{4}))|[^"\\\x00-\x1F\x7F])*"\s*$)/;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* @public
|
|
19
|
+
*/
|
|
20
|
+
const detect = async source => {
|
|
21
|
+
if (!detectionRegExp.test(source)) {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
let cst = null;
|
|
25
|
+
try {
|
|
26
|
+
cst = await (0, _index.default)(source);
|
|
27
|
+
return cst.rootNode.type !== 'ERROR';
|
|
28
|
+
} catch {
|
|
29
|
+
return false;
|
|
30
|
+
} finally {
|
|
31
|
+
cst?.delete();
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* @public
|
|
37
|
+
*/
|
|
38
|
+
exports.detect = detect;
|
|
39
|
+
/**
|
|
40
|
+
* @public
|
|
41
|
+
*/
|
|
42
|
+
const parse = async (source, {
|
|
43
|
+
sourceMap = false
|
|
44
|
+
} = {}) => {
|
|
45
|
+
const cst = await (0, _index.default)(source);
|
|
46
|
+
try {
|
|
47
|
+
return (0, _index2.default)(cst, {
|
|
48
|
+
sourceMap
|
|
49
|
+
});
|
|
50
|
+
} finally {
|
|
51
|
+
cst.delete();
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
exports.parse = parse;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import lexicalAnalysis from "./lexical-analysis/index.mjs";
|
|
2
|
+
import syntacticAnalysis from "./syntactic-analysis/index.mjs";
|
|
3
|
+
export { lexicalAnalysis, syntacticAnalysis };
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @public
|
|
7
|
+
*/
|
|
8
|
+
export const detectionRegExp =
|
|
9
|
+
// eslint-disable-next-line no-control-regex
|
|
10
|
+
/(?<true>^\s*true\s*$)|(?<false>^\s*false\s*$)|(?<null>^\s*null\s*$)|(?<number>^\s*\d+\s*$)|(?<object>^\s*{\s*)|(?<array>^\s*\[\s*)|(?<string>^\s*"(((?=\\)\\(["\\/bfnrt]|u[0-9a-fA-F]{4}))|[^"\\\x00-\x1F\x7F])*"\s*$)/;
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @public
|
|
14
|
+
*/
|
|
15
|
+
export const detect = async source => {
|
|
16
|
+
if (!detectionRegExp.test(source)) {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
let cst = null;
|
|
20
|
+
try {
|
|
21
|
+
cst = await lexicalAnalysis(source);
|
|
22
|
+
return cst.rootNode.type !== 'ERROR';
|
|
23
|
+
} catch {
|
|
24
|
+
return false;
|
|
25
|
+
} finally {
|
|
26
|
+
cst?.delete();
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* @public
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* @public
|
|
36
|
+
*/
|
|
37
|
+
export const parse = async (source, {
|
|
38
|
+
sourceMap = false
|
|
39
|
+
} = {}) => {
|
|
40
|
+
const cst = await lexicalAnalysis(source);
|
|
41
|
+
try {
|
|
42
|
+
return syntacticAnalysis(cst, {
|
|
43
|
+
sourceMap
|
|
44
|
+
});
|
|
45
|
+
} finally {
|
|
46
|
+
cst.delete();
|
|
47
|
+
}
|
|
48
|
+
};
|