@neo4j-cypher/react-codemirror 2.0.0-next.4 → 2.0.0-next.40

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 (181) hide show
  1. package/CHANGELOG.md +350 -0
  2. package/README.md +3 -2
  3. package/dist/src/CypherEditor.d.ts +243 -0
  4. package/dist/src/CypherEditor.js +513 -0
  5. package/dist/src/CypherEditor.js.map +1 -0
  6. package/dist/src/CypherEditor.test.js +154 -0
  7. package/dist/src/CypherEditor.test.js.map +1 -0
  8. package/dist/src/constants.d.ts +1 -0
  9. package/dist/src/constants.js +2 -0
  10. package/dist/src/constants.js.map +1 -0
  11. package/dist/src/diffView.d.ts +13 -0
  12. package/dist/src/diffView.js +11 -0
  13. package/dist/src/diffView.js.map +1 -0
  14. package/dist/src/e2e_tests/autoCompletion.spec.js +335 -0
  15. package/dist/src/e2e_tests/autoCompletion.spec.js.map +1 -0
  16. package/dist/src/e2e_tests/configuration.spec.js +83 -0
  17. package/dist/src/e2e_tests/configuration.spec.js.map +1 -0
  18. package/dist/src/e2e_tests/debounce.spec.js +66 -0
  19. package/dist/src/e2e_tests/debounce.spec.js.map +1 -0
  20. package/dist/{types/e2e_tests/e2e-utils.d.ts → src/e2e_tests/e2eUtils.d.ts} +2 -0
  21. package/dist/src/e2e_tests/e2eUtils.js +79 -0
  22. package/dist/src/e2e_tests/e2eUtils.js.map +1 -0
  23. package/dist/src/e2e_tests/extraKeybindings.spec.js +43 -0
  24. package/dist/src/e2e_tests/extraKeybindings.spec.js.map +1 -0
  25. package/dist/src/e2e_tests/historyNavigation.spec.js +227 -0
  26. package/dist/src/e2e_tests/historyNavigation.spec.js.map +1 -0
  27. package/dist/src/e2e_tests/performanceTest.spec.d.ts +6 -0
  28. package/dist/src/e2e_tests/performanceTest.spec.js +97 -0
  29. package/dist/src/e2e_tests/performanceTest.spec.js.map +1 -0
  30. package/dist/src/e2e_tests/sanityChecks.spec.js +64 -0
  31. package/dist/src/e2e_tests/sanityChecks.spec.js.map +1 -0
  32. package/dist/src/e2e_tests/signatureHelp.spec.js +227 -0
  33. package/dist/src/e2e_tests/signatureHelp.spec.js.map +1 -0
  34. package/dist/src/e2e_tests/snippets.spec.js +14 -0
  35. package/dist/src/e2e_tests/snippets.spec.js.map +1 -0
  36. package/dist/src/e2e_tests/syntaxHighlighting.spec.d.ts +1 -0
  37. package/dist/src/e2e_tests/syntaxHighlighting.spec.js +90 -0
  38. package/dist/src/e2e_tests/syntaxHighlighting.spec.js.map +1 -0
  39. package/dist/src/e2e_tests/syntaxValidation.spec.d.ts +1 -0
  40. package/dist/src/e2e_tests/syntaxValidation.spec.js +129 -0
  41. package/dist/src/e2e_tests/syntaxValidation.spec.js.map +1 -0
  42. package/dist/src/editorActions.d.ts +17 -0
  43. package/dist/src/editorActions.js +194 -0
  44. package/dist/src/editorActions.js.map +1 -0
  45. package/dist/src/historyNavigation.js +163 -0
  46. package/dist/src/historyNavigation.js.map +1 -0
  47. package/dist/src/hostCallbacks.d.ts +9 -0
  48. package/dist/src/hostCallbacks.js +2 -0
  49. package/dist/src/hostCallbacks.js.map +1 -0
  50. package/dist/{types → src}/icons.d.ts +1 -1
  51. package/dist/src/icons.js +62 -0
  52. package/dist/src/icons.js.map +1 -0
  53. package/dist/src/index.d.ts +6 -0
  54. package/dist/src/index.js +5 -0
  55. package/dist/src/index.js.map +1 -0
  56. package/dist/src/inlinePanel.d.ts +27 -0
  57. package/dist/src/inlinePanel.js +86 -0
  58. package/dist/src/inlinePanel.js.map +1 -0
  59. package/dist/src/lang-cypher/autocomplete.d.ts +6 -0
  60. package/dist/src/lang-cypher/autocomplete.js +116 -0
  61. package/dist/src/lang-cypher/autocomplete.js.map +1 -0
  62. package/dist/{types → src}/lang-cypher/constants.d.ts +13 -0
  63. package/dist/src/lang-cypher/constants.js +74 -0
  64. package/dist/src/lang-cypher/constants.js.map +1 -0
  65. package/dist/src/lang-cypher/contants.test.d.ts +1 -0
  66. package/dist/src/lang-cypher/contants.test.js +103 -0
  67. package/dist/src/lang-cypher/contants.test.js.map +1 -0
  68. package/dist/{types/lang-cypher/create-cypher-theme.d.ts → src/lang-cypher/createCypherTheme.d.ts} +12 -1
  69. package/dist/src/lang-cypher/createCypherTheme.js +202 -0
  70. package/dist/src/lang-cypher/createCypherTheme.js.map +1 -0
  71. package/dist/src/lang-cypher/langCypher.d.ts +14 -0
  72. package/dist/src/lang-cypher/langCypher.js +23 -0
  73. package/dist/src/lang-cypher/langCypher.js.map +1 -0
  74. package/dist/src/lang-cypher/lintWorker.mjs +2035 -0
  75. package/dist/src/lang-cypher/parser-adapter.d.ts +19 -0
  76. package/dist/src/lang-cypher/parser-adapter.js +112 -0
  77. package/dist/src/lang-cypher/parser-adapter.js.map +1 -0
  78. package/dist/src/lang-cypher/signatureHelp.d.ts +4 -0
  79. package/dist/src/lang-cypher/signatureHelp.js +108 -0
  80. package/dist/src/lang-cypher/signatureHelp.js.map +1 -0
  81. package/dist/{types/lang-cypher/syntax-validation.d.ts → src/lang-cypher/syntaxValidation.d.ts} +2 -1
  82. package/dist/src/lang-cypher/syntaxValidation.js +60 -0
  83. package/dist/src/lang-cypher/syntaxValidation.js.map +1 -0
  84. package/dist/src/lang-cypher/themeIcons.js +22 -0
  85. package/dist/src/lang-cypher/themeIcons.js.map +1 -0
  86. package/dist/src/lang-cypher/utils.d.ts +2 -0
  87. package/dist/src/lang-cypher/utils.js +10 -0
  88. package/dist/src/lang-cypher/utils.js.map +1 -0
  89. package/dist/src/ndlTokensCopy.d.ts +570 -0
  90. package/dist/src/ndlTokensCopy.js +571 -0
  91. package/dist/src/ndlTokensCopy.js.map +1 -0
  92. package/dist/src/ndlTokensCopy.test.d.ts +1 -0
  93. package/dist/src/ndlTokensCopy.test.js +12 -0
  94. package/dist/src/ndlTokensCopy.test.js.map +1 -0
  95. package/dist/src/neo4jSetup.d.ts +6 -0
  96. package/dist/src/neo4jSetup.js +120 -0
  97. package/dist/src/neo4jSetup.js.map +1 -0
  98. package/dist/src/richClipboardCopier.d.ts +4 -0
  99. package/dist/src/richClipboardCopier.js +78 -0
  100. package/dist/src/richClipboardCopier.js.map +1 -0
  101. package/dist/src/richClipboardCopier.test.d.ts +1 -0
  102. package/dist/src/richClipboardCopier.test.js +53 -0
  103. package/dist/src/richClipboardCopier.test.js.map +1 -0
  104. package/dist/src/themes.d.ts +5 -0
  105. package/dist/src/themes.js +107 -0
  106. package/dist/src/themes.js.map +1 -0
  107. package/dist/tsconfig.tsbuildinfo +1 -0
  108. package/package.json +62 -62
  109. package/src/CypherEditor.test.tsx +203 -0
  110. package/src/CypherEditor.tsx +584 -48
  111. package/src/constants.ts +1 -0
  112. package/src/diffView.ts +24 -0
  113. package/src/e2e_tests/autoCompletion.spec.tsx +577 -0
  114. package/src/e2e_tests/configuration.spec.tsx +111 -0
  115. package/src/e2e_tests/debounce.spec.tsx +102 -0
  116. package/src/e2e_tests/{e2e-utils.ts → e2eUtils.ts} +41 -3
  117. package/src/e2e_tests/{extra-keybindings.spec.tsx → extraKeybindings.spec.tsx} +1 -3
  118. package/src/e2e_tests/{history-navigation.spec.tsx → historyNavigation.spec.tsx} +137 -18
  119. package/src/e2e_tests/performanceTest.spec.tsx +163 -0
  120. package/src/e2e_tests/{sanity-checks.spec.tsx → sanityChecks.spec.tsx} +28 -20
  121. package/src/e2e_tests/signatureHelp.spec.tsx +443 -0
  122. package/src/e2e_tests/snippets.spec.tsx +19 -0
  123. package/src/e2e_tests/{syntax-highlighting.spec.tsx → syntaxHighlighting.spec.tsx} +26 -24
  124. package/src/e2e_tests/syntaxValidation.spec.tsx +252 -0
  125. package/src/editorActions.ts +253 -0
  126. package/src/{history-navigation.ts → historyNavigation.ts} +1 -1
  127. package/src/hostCallbacks.ts +9 -0
  128. package/src/icons.ts +3 -0
  129. package/src/index.ts +4 -2
  130. package/src/inlinePanel.ts +140 -0
  131. package/src/lang-cypher/autocomplete.ts +98 -18
  132. package/src/lang-cypher/constants.ts +32 -0
  133. package/src/lang-cypher/contants.test.ts +7 -3
  134. package/src/lang-cypher/{create-cypher-theme.ts → createCypherTheme.ts} +85 -23
  135. package/src/lang-cypher/langCypher.ts +46 -0
  136. package/src/lang-cypher/lintWorker.mjs +2035 -0
  137. package/src/lang-cypher/parser-adapter.ts +145 -0
  138. package/src/lang-cypher/signatureHelp.ts +154 -0
  139. package/src/lang-cypher/syntaxValidation.ts +76 -0
  140. package/src/lang-cypher/utils.ts +9 -0
  141. package/src/{ndl-tokens-copy.test.ts → ndlTokensCopy.test.ts} +2 -1
  142. package/src/ndlTokensCopy.ts +570 -0
  143. package/src/{neo4j-setup.tsx → neo4jSetup.tsx} +78 -17
  144. package/src/richClipboardCopier.test.ts +65 -0
  145. package/src/richClipboardCopier.ts +99 -0
  146. package/src/themes.ts +61 -69
  147. package/src/viteEnv.d.ts +1 -0
  148. package/dist/cjs/index.cjs +0 -1441
  149. package/dist/cjs/index.cjs.map +0 -7
  150. package/dist/esm/index.mjs +0 -1464
  151. package/dist/esm/index.mjs.map +0 -7
  152. package/dist/types/CypherEditor.d.ts +0 -113
  153. package/dist/types/e2e_tests/mock-data.d.ts +0 -3779
  154. package/dist/types/index.d.ts +0 -4
  155. package/dist/types/lang-cypher/ParserAdapter.d.ts +0 -14
  156. package/dist/types/lang-cypher/autocomplete.d.ts +0 -3
  157. package/dist/types/lang-cypher/lang-cypher.d.ts +0 -7
  158. package/dist/types/ndl-tokens-copy.d.ts +0 -379
  159. package/dist/types/neo4j-setup.d.ts +0 -2
  160. package/dist/types/themes.d.ts +0 -11
  161. package/dist/types/tsconfig.tsbuildinfo +0 -1
  162. package/src/e2e_tests/auto-completion.spec.tsx +0 -232
  163. package/src/e2e_tests/mock-data.ts +0 -4310
  164. package/src/e2e_tests/performance-test.spec.tsx +0 -71
  165. package/src/e2e_tests/syntax-validation.spec.tsx +0 -156
  166. package/src/lang-cypher/ParserAdapter.ts +0 -92
  167. package/src/lang-cypher/lang-cypher.ts +0 -32
  168. package/src/lang-cypher/syntax-validation.ts +0 -24
  169. package/src/ndl-tokens-copy.ts +0 -379
  170. /package/dist/{types/e2e_tests/auto-completion.spec.d.ts → src/CypherEditor.test.d.ts} +0 -0
  171. /package/dist/{types/e2e_tests/extra-keybindings.spec.d.ts → src/e2e_tests/autoCompletion.spec.d.ts} +0 -0
  172. /package/dist/{types/e2e_tests/history-navigation.spec.d.ts → src/e2e_tests/configuration.spec.d.ts} +0 -0
  173. /package/dist/{types/e2e_tests/performance-test.spec.d.ts → src/e2e_tests/debounce.spec.d.ts} +0 -0
  174. /package/dist/{types/e2e_tests/sanity-checks.spec.d.ts → src/e2e_tests/extraKeybindings.spec.d.ts} +0 -0
  175. /package/dist/{types/e2e_tests/syntax-highlighting.spec.d.ts → src/e2e_tests/historyNavigation.spec.d.ts} +0 -0
  176. /package/dist/{types/e2e_tests/syntax-validation.spec.d.ts → src/e2e_tests/sanityChecks.spec.d.ts} +0 -0
  177. /package/dist/{types/lang-cypher/contants.test.d.ts → src/e2e_tests/signatureHelp.spec.d.ts} +0 -0
  178. /package/dist/{types/ndl-tokens-copy.test.d.ts → src/e2e_tests/snippets.spec.d.ts} +0 -0
  179. /package/dist/{types/history-navigation.d.ts → src/historyNavigation.d.ts} +0 -0
  180. /package/dist/{types/lang-cypher/theme-icons.d.ts → src/lang-cypher/themeIcons.d.ts} +0 -0
  181. /package/src/lang-cypher/{theme-icons.ts → themeIcons.ts} +0 -0
@@ -0,0 +1,27 @@
1
+ import { StateEffect, type Extension } from '@codemirror/state';
2
+ import type { HostPortalCallbacks } from './hostCallbacks';
3
+ /** Lifecycle callbacks for an inline panel. See {@link HostPortalCallbacks}. */
4
+ export type InlinePanelCallbacks = HostPortalCallbacks;
5
+ type InlinePanelShowOptions = {
6
+ /** Document position the panel anchors to. */
7
+ pos: number;
8
+ /**
9
+ * Where to render the panel relative to the line at `pos`. `'above'`
10
+ * places it before the line, `'below'` after it.
11
+ *
12
+ * @default 'above'
13
+ */
14
+ placement?: 'above' | 'below';
15
+ } & InlinePanelCallbacks;
16
+ type ShowPayload = InlinePanelShowOptions | null;
17
+ export type InlinePanelController = {
18
+ /** CodeMirror extension to register on the editor. */
19
+ extension: Extension;
20
+ /** Build an effect that mounts the panel with the given options. */
21
+ show: (options: InlinePanelShowOptions) => StateEffect<ShowPayload>;
22
+ /** Build an effect that unmounts the panel. */
23
+ hide: () => StateEffect<ShowPayload>;
24
+ updateCallbacks: (callbacks: InlinePanelCallbacks) => void;
25
+ };
26
+ export declare function createInlinePanelController(): InlinePanelController;
27
+ export {};
@@ -0,0 +1,86 @@
1
+ import { StateEffect, StateField } from '@codemirror/state';
2
+ import { Decoration, EditorView, WidgetType, } from '@codemirror/view';
3
+ export function createInlinePanelController() {
4
+ const showEffect = StateEffect.define();
5
+ let callbacksRef = null;
6
+ class InlinePanelWidget extends WidgetType {
7
+ options;
8
+ resizeObserver = null;
9
+ constructor(options) {
10
+ super();
11
+ this.options = options;
12
+ }
13
+ toDOM(view) {
14
+ const container = document.createElement('div');
15
+ container.className = 'cm-inline-panel';
16
+ this.resizeObserver = new ResizeObserver(() => view.requestMeasure());
17
+ this.resizeObserver.observe(container);
18
+ callbacksRef?.onMount(container);
19
+ return container;
20
+ }
21
+ destroy() {
22
+ this.resizeObserver?.disconnect();
23
+ this.resizeObserver = null;
24
+ callbacksRef?.onUnmount();
25
+ }
26
+ eq(other) {
27
+ return (other.options.pos === this.options.pos &&
28
+ other.options.placement === this.options.placement);
29
+ }
30
+ ignoreEvent() {
31
+ return true;
32
+ }
33
+ }
34
+ const buildDecoration = (options) => Decoration.set([
35
+ Decoration.widget({
36
+ widget: new InlinePanelWidget(options),
37
+ block: true,
38
+ side: options.placement === 'below' ? 1 : -1,
39
+ }).range(options.pos),
40
+ ]);
41
+ const readOptions = (decorations) => {
42
+ const widget = decorations.iter().value?.spec?.widget;
43
+ return widget instanceof InlinePanelWidget ? widget.options : null;
44
+ };
45
+ const field = StateField.define({
46
+ create() {
47
+ return Decoration.none;
48
+ },
49
+ update(decorations, transaction) {
50
+ for (const effect of transaction.effects) {
51
+ if (effect.is(showEffect)) {
52
+ return effect.value === null
53
+ ? Decoration.none
54
+ : buildDecoration(effect.value);
55
+ }
56
+ }
57
+ // Nothing to do when the panel is closed, or when the document is unchanged
58
+ if (decorations.size === 0 || !transaction.docChanged) {
59
+ return decorations.map(transaction.changes);
60
+ }
61
+ // Re-anchor manually because CodeMirror's default mapping silently drops
62
+ // block-widget decorations when their anchor line is deleted
63
+ const options = readOptions(decorations);
64
+ if (options === null) {
65
+ return decorations.map(transaction.changes);
66
+ }
67
+ const side = options.placement === 'below' ? 1 : -1;
68
+ const lineNumber = Math.min(transaction.startState.doc.lineAt(options.pos).number, transaction.newDoc.lines);
69
+ const line = transaction.newDoc.line(lineNumber);
70
+ return buildDecoration({
71
+ ...options,
72
+ pos: side === 1 ? line.to : line.from,
73
+ });
74
+ },
75
+ provide: (f) => EditorView.decorations.from(f),
76
+ });
77
+ return {
78
+ extension: field,
79
+ show: (options) => showEffect.of(options),
80
+ hide: () => showEffect.of(null),
81
+ updateCallbacks: (callbacks) => {
82
+ callbacksRef = callbacks;
83
+ },
84
+ };
85
+ }
86
+ //# sourceMappingURL=inlinePanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inlinePanel.js","sourceRoot":"","sources":["../../src/inlinePanel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { Completion, CompletionSource } from '@codemirror/autocomplete';
2
+ import type { CypherConfig } from './langCypher';
3
+ export declare const completionStyles: (completion: Completion & {
4
+ deprecated?: boolean;
5
+ }) => string;
6
+ export declare const cypherAutocomplete: (config: CypherConfig) => CompletionSource;
@@ -0,0 +1,116 @@
1
+ import { snippet, } from '@codemirror/autocomplete';
2
+ import { shouldAutoCompleteYield } from '@neo4j-cypher/language-support';
3
+ import { CompletionItemKind, CompletionItemTag, } from 'vscode-languageserver-types';
4
+ import { getDocString } from './utils';
5
+ const completionKindToCodemirrorIcon = (c) => {
6
+ const map = {
7
+ [CompletionItemKind.Text]: 'Text',
8
+ [CompletionItemKind.Method]: 'Method',
9
+ [CompletionItemKind.Function]: 'Function',
10
+ [CompletionItemKind.Constructor]: 'Constructor',
11
+ [CompletionItemKind.Field]: 'Field',
12
+ [CompletionItemKind.Variable]: 'Variable',
13
+ [CompletionItemKind.Class]: 'Class',
14
+ [CompletionItemKind.Interface]: 'Interface',
15
+ [CompletionItemKind.Module]: 'Module',
16
+ [CompletionItemKind.Property]: 'Property',
17
+ [CompletionItemKind.Unit]: 'Unit',
18
+ [CompletionItemKind.Value]: 'Value',
19
+ [CompletionItemKind.Enum]: 'Enum',
20
+ [CompletionItemKind.Keyword]: 'Keyword',
21
+ [CompletionItemKind.Snippet]: 'Snippet',
22
+ [CompletionItemKind.Color]: 'Color',
23
+ [CompletionItemKind.File]: 'File',
24
+ [CompletionItemKind.Reference]: 'Reference',
25
+ [CompletionItemKind.Folder]: 'Folder',
26
+ [CompletionItemKind.EnumMember]: 'EnumMember',
27
+ [CompletionItemKind.Constant]: 'Constant',
28
+ [CompletionItemKind.Struct]: 'Struct',
29
+ // we're miss-using the enum here as there is no `Console` kind in the predefined list
30
+ [CompletionItemKind.Event]: 'Console',
31
+ [CompletionItemKind.Operator]: 'Operator',
32
+ [CompletionItemKind.TypeParameter]: 'TypeParameter',
33
+ };
34
+ return map[c];
35
+ };
36
+ export const completionStyles = (completion) => {
37
+ if (completion.deprecated) {
38
+ return 'cm-deprecated-element';
39
+ }
40
+ else {
41
+ return null;
42
+ }
43
+ };
44
+ export const cypherAutocomplete = (config) => (context) => {
45
+ const documentText = context.state.doc.toString();
46
+ const offset = context.pos;
47
+ const triggerCharacters = ['.', ':', '{', '$', ')', ']', '-', '<'];
48
+ const lastCharacter = documentText.at(offset - 1);
49
+ const yieldTriggered = shouldAutoCompleteYield(documentText, offset);
50
+ const lastWord = context.matchBefore(/\w*/);
51
+ const inWord = lastWord.from !== lastWord.to;
52
+ const shouldTriggerCompletion = inWord ||
53
+ context.explicit ||
54
+ triggerCharacters.includes(lastCharacter) ||
55
+ yieldTriggered;
56
+ if (config.useLightVersion && !context.explicit) {
57
+ return null;
58
+ }
59
+ if (!shouldTriggerCompletion) {
60
+ return null;
61
+ }
62
+ const options = config.languageService.autocomplete(documentText, config.schema ?? {}, {
63
+ caretPosition: offset,
64
+ manual: context.explicit,
65
+ });
66
+ return {
67
+ from: context.matchBefore(/(\w)*$/).from,
68
+ options: options.map((o) => {
69
+ let maybeInfo = {};
70
+ let emptyInfo = true;
71
+ const newDiv = document.createElement('div');
72
+ if (o.signature) {
73
+ const header = document.createElement('p');
74
+ header.setAttribute('class', 'cm-completionInfo-signature');
75
+ header.textContent = o.signature;
76
+ if (header.textContent.length > 0) {
77
+ emptyInfo = false;
78
+ newDiv.appendChild(header);
79
+ }
80
+ }
81
+ if (o.documentation) {
82
+ const paragraph = document.createElement('p');
83
+ paragraph.textContent = getDocString(o.documentation);
84
+ if (paragraph.textContent.length > 0) {
85
+ emptyInfo = false;
86
+ newDiv.appendChild(paragraph);
87
+ }
88
+ }
89
+ if (!emptyInfo) {
90
+ maybeInfo = {
91
+ info: () => Promise.resolve(newDiv),
92
+ };
93
+ }
94
+ const deprecated = o.tags?.find((tag) => tag === CompletionItemTag.Deprecated) ?? false;
95
+ // The negative boost moves the deprecation down the list
96
+ // so we offer the user the completions that are
97
+ // deprecated the last
98
+ const maybeDeprecated = deprecated
99
+ ? { boost: -99, deprecated: true }
100
+ : {};
101
+ return {
102
+ label: o.insertText ? o.insertText : o.label,
103
+ displayLabel: o.label,
104
+ type: completionKindToCodemirrorIcon(o.kind),
105
+ apply: o.kind === CompletionItemKind.Snippet
106
+ ? // codemirror requires an empty snippet space to be able to tab out of the completion
107
+ snippet((o.insertText ?? o.label) + '${}')
108
+ : undefined,
109
+ detail: o.detail,
110
+ ...maybeDeprecated,
111
+ ...maybeInfo,
112
+ };
113
+ }),
114
+ };
115
+ };
116
+ //# sourceMappingURL=autocomplete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autocomplete.js","sourceRoot":"","sources":["../../../src/lang-cypher/autocomplete.ts"],"names":[],"mappings":"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"}
@@ -25,7 +25,20 @@ export declare const cypherTokenTypeToNode: (facet: Facet<unknown>) => {
25
25
  none: NodeType;
26
26
  separator: NodeType;
27
27
  punctuation: NodeType;
28
+ consoleCommand: NodeType;
29
+ 'class-name': NodeType;
30
+ identifier: NodeType;
31
+ string: NodeType;
32
+ relationship: NodeType;
33
+ boolean: NodeType;
34
+ number: NodeType;
35
+ setting: NodeType;
36
+ settingValue: NodeType;
37
+ interpolationDelimiter: NodeType;
28
38
  };
39
+ type PrismSpecificTokenType = 'class-name' | 'identifier' | 'string' | 'relationship' | 'boolean' | 'number';
40
+ export type CodemirrorParseTokenType = CypherTokenType | PrismSpecificTokenType | 'topNode';
29
41
  export type HighlightedCypherTokenTypes = Exclude<CypherTokenType, 'none'>;
30
42
  export declare const tokenTypeToStyleTag: Record<HighlightedCypherTokenTypes, Tag>;
31
43
  export declare const parserAdapterNodeSet: (nodes: Record<string, NodeType>) => NodeSet;
44
+ export {};
@@ -0,0 +1,74 @@
1
+ import { languageDataProp } from '@codemirror/language';
2
+ import { NodeSet, NodeType } from '@lezer/common';
3
+ import { styleTags, tags } from '@lezer/highlight';
4
+ export const cypherTokenTypeToNode = (facet) => ({
5
+ topNode: NodeType.define({
6
+ id: 0,
7
+ name: 'topNode',
8
+ props: [languageDataProp.add({ topNode: facet })],
9
+ }),
10
+ comment: NodeType.define({ id: 1, name: 'comment' }),
11
+ keyword: NodeType.define({ id: 2, name: 'keyword' }),
12
+ label: NodeType.define({ id: 3, name: 'label' }),
13
+ predicateFunction: NodeType.define({ id: 4, name: 'predicateFunction' }),
14
+ function: NodeType.define({ id: 5, name: 'function' }),
15
+ procedure: NodeType.define({ id: 6, name: 'procedure' }),
16
+ variable: NodeType.define({ id: 7, name: 'variable' }),
17
+ paramDollar: NodeType.define({ id: 8, name: 'paramDollar' }),
18
+ paramValue: NodeType.define({ id: 9, name: 'paramValue' }),
19
+ symbolicName: NodeType.define({ id: 10, name: 'symbolicName' }),
20
+ operator: NodeType.define({ id: 11, name: 'operator' }),
21
+ stringLiteral: NodeType.define({ id: 12, name: 'stringLiteral' }),
22
+ numberLiteral: NodeType.define({ id: 13, name: 'numberLiteral' }),
23
+ booleanLiteral: NodeType.define({ id: 14, name: 'booleanLiteral' }),
24
+ keywordLiteral: NodeType.define({ id: 15, name: 'keywordLiteral' }),
25
+ property: NodeType.define({ id: 16, name: 'property' }),
26
+ namespace: NodeType.define({ id: 17, name: 'namespace' }),
27
+ bracket: NodeType.define({ id: 18, name: 'bracket' }),
28
+ none: NodeType.define({ id: 19, name: 'none' }),
29
+ separator: NodeType.define({ id: 20, name: 'separator' }),
30
+ punctuation: NodeType.define({ id: 21, name: 'punctuation' }),
31
+ consoleCommand: NodeType.define({ id: 22, name: 'consoleCommand' }),
32
+ // also include prism token types
33
+ 'class-name': NodeType.define({ id: 23, name: 'label' }),
34
+ // this is escaped variables
35
+ identifier: NodeType.define({ id: 24, name: 'variable' }),
36
+ string: NodeType.define({ id: 25, name: 'stringLiteral' }),
37
+ relationship: NodeType.define({ id: 26, name: 'label' }),
38
+ boolean: NodeType.define({ id: 27, name: 'booleanLiteral' }),
39
+ number: NodeType.define({ id: 28, name: 'numberLiteral' }),
40
+ setting: NodeType.define({ id: 29, name: 'setting' }),
41
+ settingValue: NodeType.define({ id: 30, name: 'settingValue' }),
42
+ interpolationDelimiter: NodeType.define({
43
+ id: 31,
44
+ name: 'interpolationDelimiter',
45
+ }),
46
+ });
47
+ export const tokenTypeToStyleTag = {
48
+ comment: tags.comment,
49
+ keyword: tags.keyword,
50
+ label: tags.typeName,
51
+ predicateFunction: tags.function(tags.variableName),
52
+ function: tags.function(tags.variableName),
53
+ procedure: tags.function(tags.variableName),
54
+ variable: tags.variableName,
55
+ paramDollar: tags.atom,
56
+ paramValue: tags.atom,
57
+ interpolationDelimiter: tags.atom,
58
+ symbolicName: tags.variableName,
59
+ operator: tags.operator,
60
+ stringLiteral: tags.string,
61
+ numberLiteral: tags.number,
62
+ booleanLiteral: tags.bool,
63
+ keywordLiteral: tags.operatorKeyword,
64
+ property: tags.propertyName,
65
+ namespace: tags.namespace,
66
+ bracket: tags.bracket,
67
+ punctuation: tags.punctuation,
68
+ separator: tags.separator,
69
+ consoleCommand: tags.macroName,
70
+ setting: tags.attributeName,
71
+ settingValue: tags.attributeValue,
72
+ };
73
+ export const parserAdapterNodeSet = (nodes) => new NodeSet(Object.values(nodes)).extend(styleTags(tokenTypeToStyleTag));
74
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/lang-cypher/constants.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,103 @@
1
+ import { tags } from '@lezer/highlight';
2
+ import { highlightSyntax, CypherTokenType, } from '@neo4j-cypher/language-support';
3
+ import { expect, test } from 'vitest';
4
+ import { tokenTypeToStyleTag } from './constants';
5
+ const cypherQueryWithAllTokenTypes = `MATCH (variable :Label)-[:REL_TYPE]->()
6
+ WHERE variable.property = "String"
7
+ OR namespaced.function() = false
8
+ // comment
9
+ OR $parameter > 2
10
+ RETURN variable;`;
11
+ test('correctly parses all cypher token types to style tags', () => {
12
+ const tokens = highlightSyntax(cypherQueryWithAllTokenTypes);
13
+ const tokenTypes = tokens.map((token) => token.tokenType);
14
+ expect(tokenTypes).toEqual([
15
+ 'keyword',
16
+ 'bracket',
17
+ 'variable',
18
+ 'operator',
19
+ 'label',
20
+ 'bracket',
21
+ 'separator',
22
+ 'bracket',
23
+ 'operator',
24
+ 'label',
25
+ 'bracket',
26
+ 'separator',
27
+ 'separator',
28
+ 'bracket',
29
+ 'bracket',
30
+ 'keyword',
31
+ 'variable',
32
+ 'operator',
33
+ 'property',
34
+ 'operator',
35
+ 'stringLiteral',
36
+ 'keyword',
37
+ 'function',
38
+ 'operator',
39
+ 'function',
40
+ 'bracket',
41
+ 'bracket',
42
+ 'operator',
43
+ 'booleanLiteral',
44
+ 'comment',
45
+ 'keyword',
46
+ 'paramDollar',
47
+ 'paramValue',
48
+ 'operator',
49
+ 'numberLiteral',
50
+ 'keyword',
51
+ 'variable',
52
+ 'punctuation',
53
+ ]);
54
+ const styleTags = tokenTypes.map((tokenType) => {
55
+ if (tokenType === CypherTokenType.none)
56
+ return undefined;
57
+ return tokenTypeToStyleTag[tokenType];
58
+ });
59
+ const correctTags = [
60
+ tags.keyword,
61
+ tags.bracket,
62
+ tags.variableName,
63
+ tags.operator,
64
+ tags.typeName,
65
+ tags.bracket,
66
+ tags.separator,
67
+ tags.bracket,
68
+ tags.operator,
69
+ tags.typeName,
70
+ tags.bracket,
71
+ tags.separator,
72
+ tags.separator,
73
+ tags.bracket,
74
+ tags.bracket,
75
+ tags.keyword,
76
+ tags.variableName,
77
+ tags.operator,
78
+ tags.propertyName,
79
+ tags.operator,
80
+ tags.string,
81
+ tags.keyword,
82
+ tags.function(tags.variableName),
83
+ tags.operator,
84
+ tags.function(tags.variableName),
85
+ tags.bracket,
86
+ tags.bracket,
87
+ tags.operator,
88
+ tags.bool,
89
+ tags.comment,
90
+ tags.keyword,
91
+ tags.atom,
92
+ tags.atom,
93
+ tags.operator,
94
+ tags.number,
95
+ tags.keyword,
96
+ tags.variableName,
97
+ tags.punctuation,
98
+ ];
99
+ styleTags.forEach((styleTag, index) => {
100
+ expect(styleTag).toEqual(correctTags[index]);
101
+ });
102
+ });
103
+ //# sourceMappingURL=contants.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contants.test.js","sourceRoot":"","sources":["../../../src/lang-cypher/contants.test.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,15 @@
1
1
  import { Extension } from '@codemirror/state';
2
2
  import { HighlightedCypherTokenTypes } from './constants';
3
+ export interface DiffColors {
4
+ /** Background fill for the whole inserted/changed line. */
5
+ insertedLine: string;
6
+ /** Highlight for the exact inserted text within a changed line. */
7
+ insertedText: string;
8
+ /** Background fill for the whole deleted line widget. */
9
+ deletedLine: string;
10
+ /** Highlight for the exact deleted text within a deleted chunk. */
11
+ deletedText: string;
12
+ }
3
13
  export interface ThemeOptions {
4
14
  dark: boolean;
5
15
  editorSettings: {
@@ -22,5 +32,6 @@ export interface ThemeOptions {
22
32
  };
23
33
  highlightStyles: Partial<Record<HighlightedCypherTokenTypes, string>>;
24
34
  inheritBgColor?: boolean;
35
+ diffColors?: DiffColors;
25
36
  }
26
- export declare const createCypherTheme: ({ dark, editorSettings: settings, highlightStyles, inheritBgColor, }: ThemeOptions) => Extension;
37
+ export declare const createCypherTheme: ({ dark, editorSettings: settings, highlightStyles, inheritBgColor, diffColors, }: ThemeOptions) => Extension;