@surrealdb/codemirror 1.0.0-beta.14 → 1.0.0-beta.16

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/dist/index.cjs CHANGED
@@ -1,9 +1,11 @@
1
1
  'use strict';
2
2
 
3
3
  var language = require('@codemirror/language');
4
- var lezer = require('@surrealdb/lezer');
4
+ var lint = require('@codemirror/lint');
5
5
  var common = require('@lezer/common');
6
6
  var javascript = require('@lezer/javascript');
7
+ var lezer = require('@surrealdb/lezer');
8
+ var compareVersions = require('compare-versions');
7
9
 
8
10
  const surrealqlLanguage = language.LRLanguage.define({
9
11
  name: "surrealql",
@@ -33,6 +35,45 @@ const scopeMap = new Map([
33
35
  ["combined-results", "CombinedResults"],
34
36
  ["syntax", "Syntax"],
35
37
  ]);
38
+ /**
39
+ * A linter that checks if the syntax tree uses features that are not available in the given SurrealDB version
40
+ *
41
+ * @param version The SurrealDB version to check against (e.g. "2.0.0")
42
+ */
43
+ function surrealqlVersionLinter(version) {
44
+ if (!compareVersions.validate(version)) {
45
+ throw new Error(`Invalid SurrealDB version: ${version}`);
46
+ }
47
+ return lint.linter((view) => {
48
+ const diagnostics = [];
49
+ language.syntaxTree(view.state)
50
+ .cursor()
51
+ .iterate((node) => {
52
+ if (node.from === node.to) {
53
+ return;
54
+ }
55
+ const sinceVersionProp = node.type.prop(lezer.sinceProp);
56
+ const untilVersionProp = node.type.prop(lezer.untilProp);
57
+ if (sinceVersionProp && compareVersions.compareVersions(version, sinceVersionProp) < 0) {
58
+ diagnostics.push({
59
+ from: node.from,
60
+ to: node.to,
61
+ severity: "error",
62
+ message: `This syntax is only available on SurrealDB ${sinceVersionProp} and up`,
63
+ });
64
+ }
65
+ if (untilVersionProp && compareVersions.compareVersions(version, untilVersionProp) >= 0) {
66
+ diagnostics.push({
67
+ from: node.from,
68
+ to: node.to,
69
+ severity: "error",
70
+ message: `This syntax is only available until SurrealDB ${untilVersionProp}`,
71
+ });
72
+ }
73
+ });
74
+ return diagnostics;
75
+ });
76
+ }
36
77
  /**
37
78
  * The CodeMirror extension used to add support for the SurrealQL language
38
79
  *
@@ -51,3 +92,4 @@ function surrealql(scope) {
51
92
 
52
93
  exports.surrealql = surrealql;
53
94
  exports.surrealqlLanguage = surrealqlLanguage;
95
+ exports.surrealqlVersionLinter = surrealqlVersionLinter;
package/dist/index.d.cts CHANGED
@@ -1,7 +1,14 @@
1
1
  import { LRLanguage, LanguageSupport } from '@codemirror/language';
2
+ import { Extension } from '@codemirror/state';
2
3
 
3
4
  declare const surrealqlLanguage: LRLanguage;
4
5
  type Scope = "permission" | "index" | "combined-results" | "syntax";
6
+ /**
7
+ * A linter that checks if the syntax tree uses features that are not available in the given SurrealDB version
8
+ *
9
+ * @param version The SurrealDB version to check against (e.g. "2.0.0")
10
+ */
11
+ declare function surrealqlVersionLinter(version: string): Extension;
5
12
  /**
6
13
  * The CodeMirror extension used to add support for the SurrealQL language
7
14
  *
@@ -9,4 +16,4 @@ type Scope = "permission" | "index" | "combined-results" | "syntax";
9
16
  */
10
17
  declare function surrealql(scope?: Scope): LanguageSupport;
11
18
 
12
- export { surrealql, surrealqlLanguage };
19
+ export { surrealql, surrealqlLanguage, surrealqlVersionLinter };
package/dist/index.d.ts CHANGED
@@ -1,7 +1,14 @@
1
1
  import { LRLanguage, LanguageSupport } from '@codemirror/language';
2
+ import { Extension } from '@codemirror/state';
2
3
 
3
4
  declare const surrealqlLanguage: LRLanguage;
4
5
  type Scope = "permission" | "index" | "combined-results" | "syntax";
6
+ /**
7
+ * A linter that checks if the syntax tree uses features that are not available in the given SurrealDB version
8
+ *
9
+ * @param version The SurrealDB version to check against (e.g. "2.0.0")
10
+ */
11
+ declare function surrealqlVersionLinter(version: string): Extension;
5
12
  /**
6
13
  * The CodeMirror extension used to add support for the SurrealQL language
7
14
  *
@@ -9,4 +16,4 @@ type Scope = "permission" | "index" | "combined-results" | "syntax";
9
16
  */
10
17
  declare function surrealql(scope?: Scope): LanguageSupport;
11
18
 
12
- export { surrealql, surrealqlLanguage };
19
+ export { surrealql, surrealqlLanguage, surrealqlVersionLinter };
package/dist/index.js CHANGED
@@ -1,7 +1,9 @@
1
- import { LRLanguage, indentNodeProp, continuedIndent, foldNodeProp, foldInside, LanguageSupport } from '@codemirror/language';
2
- import { parser } from '@surrealdb/lezer';
1
+ import { LRLanguage, indentNodeProp, continuedIndent, foldNodeProp, foldInside, syntaxTree, LanguageSupport } from '@codemirror/language';
2
+ import { linter } from '@codemirror/lint';
3
3
  import { parseMixed } from '@lezer/common';
4
4
  import { parser as parser$1 } from '@lezer/javascript';
5
+ import { parser, sinceProp, untilProp } from '@surrealdb/lezer';
6
+ import { validate, compareVersions } from 'compare-versions';
5
7
 
6
8
  const surrealqlLanguage = /*@__PURE__*/LRLanguage.define({
7
9
  name: "surrealql",
@@ -31,6 +33,45 @@ const scopeMap = /*@__PURE__*/new Map([
31
33
  ["combined-results", "CombinedResults"],
32
34
  ["syntax", "Syntax"],
33
35
  ]);
36
+ /**
37
+ * A linter that checks if the syntax tree uses features that are not available in the given SurrealDB version
38
+ *
39
+ * @param version The SurrealDB version to check against (e.g. "2.0.0")
40
+ */
41
+ function surrealqlVersionLinter(version) {
42
+ if (!validate(version)) {
43
+ throw new Error(`Invalid SurrealDB version: ${version}`);
44
+ }
45
+ return linter((view) => {
46
+ const diagnostics = [];
47
+ syntaxTree(view.state)
48
+ .cursor()
49
+ .iterate((node) => {
50
+ if (node.from === node.to) {
51
+ return;
52
+ }
53
+ const sinceVersionProp = node.type.prop(sinceProp);
54
+ const untilVersionProp = node.type.prop(untilProp);
55
+ if (sinceVersionProp && compareVersions(version, sinceVersionProp) < 0) {
56
+ diagnostics.push({
57
+ from: node.from,
58
+ to: node.to,
59
+ severity: "error",
60
+ message: `This syntax is only available on SurrealDB ${sinceVersionProp} and up`,
61
+ });
62
+ }
63
+ if (untilVersionProp && compareVersions(version, untilVersionProp) >= 0) {
64
+ diagnostics.push({
65
+ from: node.from,
66
+ to: node.to,
67
+ severity: "error",
68
+ message: `This syntax is only available until SurrealDB ${untilVersionProp}`,
69
+ });
70
+ }
71
+ });
72
+ return diagnostics;
73
+ });
74
+ }
34
75
  /**
35
76
  * The CodeMirror extension used to add support for the SurrealQL language
36
77
  *
@@ -47,4 +88,4 @@ function surrealql(scope) {
47
88
  return new LanguageSupport(surrealqlLanguage.configure({ top: scopeId }));
48
89
  }
49
90
 
50
- export { surrealql, surrealqlLanguage };
91
+ export { surrealql, surrealqlLanguage, surrealqlVersionLinter };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@surrealdb/codemirror",
3
- "version": "1.0.0-beta.14",
3
+ "version": "1.0.0-beta.16",
4
4
  "author": "SurrealDB",
5
5
  "description": "SurrealQL language support for CodeMirror",
6
6
  "type": "module",
@@ -13,9 +13,11 @@
13
13
  "module": "dist/index.js",
14
14
  "dependencies": {
15
15
  "@codemirror/language": "^6.10.3",
16
+ "@codemirror/lint": "^6.8.2",
16
17
  "@lezer/common": "^1.2.3",
17
18
  "@lezer/javascript": "^1.4.19",
18
- "@surrealdb/lezer": ""
19
+ "@surrealdb/lezer": "",
20
+ "compare-versions": "^6.1.1"
19
21
  },
20
22
  "devDependencies": {
21
23
  "@codemirror/buildhelper": "^1.0.0"
package/src/surrealql.ts CHANGED
@@ -1,15 +1,18 @@
1
1
  import {
2
- continuedIndent,
3
- indentNodeProp,
4
- foldNodeProp,
5
- foldInside,
6
2
  LRLanguage,
7
3
  LanguageSupport,
4
+ continuedIndent,
5
+ foldInside,
6
+ foldNodeProp,
7
+ indentNodeProp,
8
+ syntaxTree,
8
9
  } from "@codemirror/language";
9
-
10
- import { parser } from "@surrealdb/lezer";
10
+ import { type Diagnostic, linter } from "@codemirror/lint";
11
+ import type { Extension } from "@codemirror/state";
11
12
  import { parseMixed } from "@lezer/common";
12
13
  import { parser as jsParser } from "@lezer/javascript";
14
+ import { parser, sinceProp, untilProp } from "@surrealdb/lezer";
15
+ import { compareVersions, validate } from "compare-versions";
13
16
 
14
17
  export const surrealqlLanguage = LRLanguage.define({
15
18
  name: "surrealql",
@@ -34,7 +37,7 @@ export const surrealqlLanguage = LRLanguage.define({
34
37
  },
35
38
  });
36
39
 
37
- type Scope ="permission" | "index" | "combined-results" | "syntax";
40
+ type Scope = "permission" | "index" | "combined-results" | "syntax";
38
41
 
39
42
  const scopeMap = new Map<Scope, string>([
40
43
  ["permission", "PermissionInput"],
@@ -43,12 +46,58 @@ const scopeMap = new Map<Scope, string>([
43
46
  ["syntax", "Syntax"],
44
47
  ]);
45
48
 
49
+ /**
50
+ * A linter that checks if the syntax tree uses features that are not available in the given SurrealDB version
51
+ *
52
+ * @param version The SurrealDB version to check against (e.g. "2.0.0")
53
+ */
54
+ export function surrealqlVersionLinter(version: string): Extension {
55
+ if (!validate(version)) {
56
+ throw new Error(`Invalid SurrealDB version: ${version}`);
57
+ }
58
+
59
+ return linter((view) => {
60
+ const diagnostics: Diagnostic[] = [];
61
+
62
+ syntaxTree(view.state)
63
+ .cursor()
64
+ .iterate((node) => {
65
+ if (node.from === node.to) {
66
+ return;
67
+ }
68
+
69
+ const sinceVersionProp = node.type.prop(sinceProp);
70
+ const untilVersionProp = node.type.prop(untilProp);
71
+
72
+ if (sinceVersionProp && compareVersions(version, sinceVersionProp) < 0) {
73
+ diagnostics.push({
74
+ from: node.from,
75
+ to: node.to,
76
+ severity: "error",
77
+ message: `This syntax is only available on SurrealDB ${sinceVersionProp} and up`,
78
+ });
79
+ }
80
+
81
+ if (untilVersionProp && compareVersions(version, untilVersionProp) >= 0) {
82
+ diagnostics.push({
83
+ from: node.from,
84
+ to: node.to,
85
+ severity: "error",
86
+ message: `This syntax is only available until SurrealDB ${untilVersionProp}`,
87
+ });
88
+ }
89
+ });
90
+
91
+ return diagnostics;
92
+ });
93
+ }
94
+
46
95
  /**
47
96
  * The CodeMirror extension used to add support for the SurrealQL language
48
- *
97
+ *
49
98
  * @param scope Limit the scope of the highlighting
50
99
  */
51
- export function surrealql(scope?: Scope) {
100
+ export function surrealql(scope?: Scope): LanguageSupport {
52
101
  if (!scope) {
53
102
  return new LanguageSupport(surrealqlLanguage);
54
103
  }