@speclynx/apidom-parser-adapter-json 1.12.2 → 2.0.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.
Files changed (33) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/NOTICE +16 -7
  3. package/README.md +36 -25
  4. package/dist/167.apidom-parser-adapter-json.browser.min.js +1 -1
  5. package/dist/451.apidom-parser-adapter-json.browser.min.js +1 -1
  6. package/dist/apidom-parser-adapter-json.browser.js +3101 -12890
  7. package/dist/apidom-parser-adapter-json.browser.min.js +1 -1
  8. package/package.json +7 -11
  9. package/src/adapter.cjs +29 -34
  10. package/src/adapter.mjs +26 -31
  11. package/src/native/index.cjs +30 -0
  12. package/src/native/index.mjs +25 -0
  13. package/src/tree-sitter/index.cjs +54 -0
  14. package/src/tree-sitter/index.mjs +48 -0
  15. package/src/{lexical-analysis → tree-sitter/lexical-analysis}/index.cjs +1 -1
  16. package/src/{lexical-analysis → tree-sitter/lexical-analysis}/index.mjs +1 -1
  17. package/src/tree-sitter/syntactic-analysis/index.cjs +223 -0
  18. package/src/tree-sitter/syntactic-analysis/index.mjs +219 -0
  19. package/types/apidom-parser-adapter-json.d.ts +14 -33
  20. package/src/syntactic-analysis/TreeCursorIterator.cjs +0 -62
  21. package/src/syntactic-analysis/TreeCursorIterator.mjs +0 -57
  22. package/src/syntactic-analysis/TreeCursorSyntaxNode.cjs +0 -51
  23. package/src/syntactic-analysis/TreeCursorSyntaxNode.mjs +0 -47
  24. package/src/syntactic-analysis/direct/index.cjs +0 -64
  25. package/src/syntactic-analysis/direct/index.mjs +0 -59
  26. package/src/syntactic-analysis/direct/visitors/CstVisitor.cjs +0 -163
  27. package/src/syntactic-analysis/direct/visitors/CstVisitor.mjs +0 -158
  28. package/src/syntactic-analysis/indirect/index.cjs +0 -56
  29. package/src/syntactic-analysis/indirect/index.mjs +0 -49
  30. package/src/syntactic-analysis/indirect/visitors/CstVisitor.cjs +0 -177
  31. package/src/syntactic-analysis/indirect/visitors/CstVisitor.mjs +0 -172
  32. package/src/syntactic-analysis/indirect/visitors/JsonAstVisitor.cjs +0 -189
  33. 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.12.2",
3
+ "version": "2.0.1",
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/index.ts --out-file ./test/perf/index.mjs --root-mode 'upward' && cross-env NODE_ENV=test node ./test/perf/index.mjs",
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:parse-syntactic-analysis-direct": "cross-env BABEL_ENV=es babel ./test/perf/parse-syntactic-analysis-direct.ts --out-file ./test/perf/parse-syntactic-analysis-direct.mjs --root-mode 'upward' && cross-env NODE_ENV=test node ./test/perf/parse-syntactic-analysis-direct.mjs",
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-ast": "^1.12.2",
47
- "@speclynx/apidom-core": "^1.12.2",
48
- "@speclynx/apidom-error": "^1.12.2",
49
- "@types/ramda": "~0.30.0",
50
- "ramda": "~0.32.0",
51
- "ramda-adjunct": "^6.0.0",
45
+ "@speclynx/apidom-core": "^2.0.1",
46
+ "@speclynx/apidom-datamodel": "^2.0.1",
47
+ "@speclynx/apidom-error": "^2.0.1",
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": "8c77c8183cb058797925e09a0b5399612e3a2e39"
64
+ "gitHead": "6a9caf87f445f76ffd69afa760990ffa784bc82d"
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 _apidomCore = require("@speclynx/apidom-core");
7
- var _index = _interopRequireDefault(require("./lexical-analysis/index.cjs"));
8
- exports.lexicalAnalysis = _index.default;
9
- var _index2 = _interopRequireDefault(require("./syntactic-analysis/direct/index.cjs"));
10
- exports.syntacticAnalysis = _index2.default;
11
- exports.syntacticAnalysisDirect = _index2.default;
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 = (0, _apidomCore.createNamespace)();
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
- const detect = async source => {
36
- if (!detectionRegExp.test(source)) {
37
- return false;
38
- }
39
- try {
40
- const cst = await (0, _index.default)(source);
41
- return cst.rootNode.type !== 'ERROR';
42
- } catch {
43
- return false;
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
- syntacticAnalysis = 'direct'
58
+ strict = false
61
59
  } = {}) => {
62
- const cst = await (0, _index.default)(source);
63
- let apiDOM;
64
- if (syntacticAnalysis === 'indirect') {
65
- apiDOM = (0, _index3.default)(cst, {
66
- sourceMap
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 apiDOM;
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 { createNamespace } from '@speclynx/apidom-core';
2
- import lexicalAnalysis from "./lexical-analysis/index.mjs";
3
- import syntacticAnalysisDirect from "./syntactic-analysis/direct/index.mjs";
4
- import syntacticAnalysisIndirect from "./syntactic-analysis/indirect/index.mjs";
5
- export { lexicalAnalysis, syntacticAnalysisDirect as syntacticAnalysis, syntacticAnalysisDirect, syntacticAnalysisIndirect };
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 = createNamespace();
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
- export const detect = async source => {
27
- if (!detectionRegExp.test(source)) {
28
- return false;
29
- }
30
- try {
31
- const cst = await lexicalAnalysis(source);
32
- return cst.rootNode.type !== 'ERROR';
33
- } catch {
34
- return false;
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
- syntacticAnalysis = 'direct'
49
+ strict = false
52
50
  } = {}) => {
53
- const cst = await lexicalAnalysis(source);
54
- let apiDOM;
55
- if (syntacticAnalysis === 'indirect') {
56
- apiDOM = syntacticAnalysisIndirect(cst, {
57
- sourceMap
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 apiDOM;
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
+ };