@neo4j-cypher/react-codemirror 2.0.0-next.2 → 2.0.0-next.21

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 (155) hide show
  1. package/CHANGELOG.md +174 -0
  2. package/dist/{types/CypherEditor.d.ts → CypherEditor.d.ts} +82 -3
  3. package/dist/CypherEditor.js +326 -0
  4. package/dist/CypherEditor.js.map +1 -0
  5. package/dist/CypherEditor.test.js +151 -0
  6. package/dist/CypherEditor.test.js.map +1 -0
  7. package/dist/constants.d.ts +1 -0
  8. package/dist/constants.js +2 -0
  9. package/dist/constants.js.map +1 -0
  10. package/dist/e2e_tests/autoCompletion.spec.js +318 -0
  11. package/dist/e2e_tests/autoCompletion.spec.js.map +1 -0
  12. package/dist/e2e_tests/configuration.spec.js +83 -0
  13. package/dist/e2e_tests/configuration.spec.js.map +1 -0
  14. package/dist/e2e_tests/debounce.spec.js +66 -0
  15. package/dist/e2e_tests/debounce.spec.js.map +1 -0
  16. package/dist/{types/e2e_tests/e2e-utils.d.ts → e2e_tests/e2eUtils.d.ts} +1 -0
  17. package/dist/e2e_tests/e2eUtils.js +71 -0
  18. package/dist/e2e_tests/e2eUtils.js.map +1 -0
  19. package/dist/e2e_tests/extraKeybindings.spec.js +43 -0
  20. package/dist/e2e_tests/extraKeybindings.spec.js.map +1 -0
  21. package/dist/e2e_tests/historyNavigation.spec.js +227 -0
  22. package/dist/e2e_tests/historyNavigation.spec.js.map +1 -0
  23. package/dist/e2e_tests/performanceTest.spec.d.ts +6 -0
  24. package/dist/e2e_tests/performanceTest.spec.js +97 -0
  25. package/dist/e2e_tests/performanceTest.spec.js.map +1 -0
  26. package/dist/e2e_tests/sanityChecks.spec.js +53 -0
  27. package/dist/e2e_tests/sanityChecks.spec.js.map +1 -0
  28. package/dist/e2e_tests/signatureHelp.spec.js +228 -0
  29. package/dist/e2e_tests/signatureHelp.spec.js.map +1 -0
  30. package/dist/e2e_tests/snippets.spec.js +62 -0
  31. package/dist/e2e_tests/snippets.spec.js.map +1 -0
  32. package/dist/e2e_tests/syntaxHighlighting.spec.d.ts +1 -0
  33. package/dist/e2e_tests/syntaxHighlighting.spec.js +90 -0
  34. package/dist/e2e_tests/syntaxHighlighting.spec.js.map +1 -0
  35. package/dist/e2e_tests/syntaxValidation.spec.d.ts +1 -0
  36. package/dist/e2e_tests/syntaxValidation.spec.js +116 -0
  37. package/dist/e2e_tests/syntaxValidation.spec.js.map +1 -0
  38. package/dist/historyNavigation.js +163 -0
  39. package/dist/historyNavigation.js.map +1 -0
  40. package/dist/{types/icons.d.ts → icons.d.ts} +1 -1
  41. package/dist/icons.js +62 -0
  42. package/dist/icons.js.map +1 -0
  43. package/dist/index.d.ts +4 -0
  44. package/dist/index.js +5 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/lang-cypher/autocomplete.d.ts +6 -0
  47. package/dist/lang-cypher/autocomplete.js +115 -0
  48. package/dist/lang-cypher/autocomplete.js.map +1 -0
  49. package/dist/{types/lang-cypher → lang-cypher}/constants.d.ts +11 -0
  50. package/dist/lang-cypher/constants.js +69 -0
  51. package/dist/lang-cypher/constants.js.map +1 -0
  52. package/dist/lang-cypher/contants.test.d.ts +1 -0
  53. package/dist/lang-cypher/contants.test.js +103 -0
  54. package/dist/lang-cypher/contants.test.js.map +1 -0
  55. package/dist/lang-cypher/createCypherTheme.js +182 -0
  56. package/dist/lang-cypher/createCypherTheme.js.map +1 -0
  57. package/dist/lang-cypher/langCypher.d.ts +14 -0
  58. package/dist/lang-cypher/langCypher.js +23 -0
  59. package/dist/lang-cypher/langCypher.js.map +1 -0
  60. package/dist/lang-cypher/lintWorker.d.ts +12 -0
  61. package/dist/lang-cypher/lintWorker.js +14 -0
  62. package/dist/lang-cypher/lintWorker.js.map +1 -0
  63. package/dist/lang-cypher/parser-adapter.d.ts +19 -0
  64. package/dist/lang-cypher/parser-adapter.js +113 -0
  65. package/dist/lang-cypher/parser-adapter.js.map +1 -0
  66. package/dist/lang-cypher/signatureHelp.d.ts +4 -0
  67. package/dist/lang-cypher/signatureHelp.js +109 -0
  68. package/dist/lang-cypher/signatureHelp.js.map +1 -0
  69. package/dist/{types/lang-cypher/syntax-validation.d.ts → lang-cypher/syntaxValidation.d.ts} +2 -1
  70. package/dist/lang-cypher/syntaxValidation.js +52 -0
  71. package/dist/lang-cypher/syntaxValidation.js.map +1 -0
  72. package/dist/lang-cypher/themeIcons.js +22 -0
  73. package/dist/lang-cypher/themeIcons.js.map +1 -0
  74. package/dist/lang-cypher/utils.d.ts +2 -0
  75. package/dist/lang-cypher/utils.js +10 -0
  76. package/dist/lang-cypher/utils.js.map +1 -0
  77. package/dist/ndlTokensCopy.d.ts +570 -0
  78. package/dist/ndlTokensCopy.js +571 -0
  79. package/dist/ndlTokensCopy.js.map +1 -0
  80. package/dist/ndlTokensCopy.test.d.ts +1 -0
  81. package/dist/ndlTokensCopy.test.js +12 -0
  82. package/dist/ndlTokensCopy.test.js.map +1 -0
  83. package/dist/neo4jSetup.d.ts +6 -0
  84. package/dist/neo4jSetup.js +120 -0
  85. package/dist/neo4jSetup.js.map +1 -0
  86. package/dist/{types/themes.d.ts → themes.d.ts} +1 -1
  87. package/dist/themes.js +93 -0
  88. package/dist/themes.js.map +1 -0
  89. package/dist/tsconfig.tsbuildinfo +1 -0
  90. package/package.json +32 -34
  91. package/src/CypherEditor.test.tsx +200 -0
  92. package/src/CypherEditor.tsx +311 -41
  93. package/src/constants.ts +1 -0
  94. package/src/e2e_tests/autoCompletion.spec.tsx +546 -0
  95. package/src/e2e_tests/configuration.spec.tsx +111 -0
  96. package/src/e2e_tests/debounce.spec.tsx +106 -0
  97. package/src/e2e_tests/{e2e-utils.ts → e2eUtils.ts} +24 -2
  98. package/src/e2e_tests/{extra-keybindings.spec.tsx → extraKeybindings.spec.tsx} +1 -3
  99. package/src/e2e_tests/{history-navigation.spec.tsx → historyNavigation.spec.tsx} +137 -18
  100. package/src/e2e_tests/performanceTest.spec.tsx +163 -0
  101. package/src/e2e_tests/{sanity-checks.spec.tsx → sanityChecks.spec.tsx} +7 -22
  102. package/src/e2e_tests/signatureHelp.spec.tsx +445 -0
  103. package/src/e2e_tests/snippets.spec.tsx +92 -0
  104. package/src/e2e_tests/{syntax-highlighting.spec.tsx → syntaxHighlighting.spec.tsx} +26 -24
  105. package/src/e2e_tests/{syntax-validation.spec.tsx → syntaxValidation.spec.tsx} +97 -10
  106. package/src/{history-navigation.ts → historyNavigation.ts} +1 -1
  107. package/src/icons.ts +3 -0
  108. package/src/index.ts +2 -2
  109. package/src/lang-cypher/autocomplete.ts +100 -18
  110. package/src/lang-cypher/constants.ts +27 -0
  111. package/src/lang-cypher/contants.test.ts +6 -2
  112. package/src/lang-cypher/{create-cypher-theme.ts → createCypherTheme.ts} +44 -2
  113. package/src/lang-cypher/langCypher.ts +43 -0
  114. package/src/lang-cypher/lintWorker.ts +31 -0
  115. package/src/lang-cypher/parser-adapter.ts +145 -0
  116. package/src/lang-cypher/signatureHelp.ts +151 -0
  117. package/src/lang-cypher/syntaxValidation.ts +66 -0
  118. package/src/lang-cypher/utils.ts +9 -0
  119. package/src/{ndl-tokens-copy.test.ts → ndlTokensCopy.test.ts} +2 -1
  120. package/src/ndlTokensCopy.ts +570 -0
  121. package/src/{neo4j-setup.tsx → neo4jSetup.tsx} +78 -17
  122. package/src/themes.ts +45 -70
  123. package/src/viteEnv.d.ts +1 -0
  124. package/dist/cjs/index.cjs +0 -1440
  125. package/dist/cjs/index.cjs.map +0 -7
  126. package/dist/esm/index.mjs +0 -1463
  127. package/dist/esm/index.mjs.map +0 -7
  128. package/dist/types/e2e_tests/mock-data.d.ts +0 -3779
  129. package/dist/types/index.d.ts +0 -4
  130. package/dist/types/lang-cypher/ParserAdapter.d.ts +0 -14
  131. package/dist/types/lang-cypher/autocomplete.d.ts +0 -3
  132. package/dist/types/lang-cypher/lang-cypher.d.ts +0 -7
  133. package/dist/types/ndl-tokens-copy.d.ts +0 -379
  134. package/dist/types/neo4j-setup.d.ts +0 -2
  135. package/dist/types/tsconfig.tsbuildinfo +0 -1
  136. package/src/e2e_tests/auto-completion.spec.tsx +0 -232
  137. package/src/e2e_tests/mock-data.ts +0 -4310
  138. package/src/e2e_tests/performance-test.spec.tsx +0 -71
  139. package/src/lang-cypher/ParserAdapter.ts +0 -92
  140. package/src/lang-cypher/lang-cypher.ts +0 -32
  141. package/src/lang-cypher/syntax-validation.ts +0 -24
  142. package/src/ndl-tokens-copy.ts +0 -379
  143. /package/dist/{types/e2e_tests/auto-completion.spec.d.ts → CypherEditor.test.d.ts} +0 -0
  144. /package/dist/{types/e2e_tests/extra-keybindings.spec.d.ts → e2e_tests/autoCompletion.spec.d.ts} +0 -0
  145. /package/dist/{types/e2e_tests/history-navigation.spec.d.ts → e2e_tests/configuration.spec.d.ts} +0 -0
  146. /package/dist/{types/e2e_tests/performance-test.spec.d.ts → e2e_tests/debounce.spec.d.ts} +0 -0
  147. /package/dist/{types/e2e_tests/sanity-checks.spec.d.ts → e2e_tests/extraKeybindings.spec.d.ts} +0 -0
  148. /package/dist/{types/e2e_tests/syntax-highlighting.spec.d.ts → e2e_tests/historyNavigation.spec.d.ts} +0 -0
  149. /package/dist/{types/e2e_tests/syntax-validation.spec.d.ts → e2e_tests/sanityChecks.spec.d.ts} +0 -0
  150. /package/dist/{types/lang-cypher/contants.test.d.ts → e2e_tests/signatureHelp.spec.d.ts} +0 -0
  151. /package/dist/{types/ndl-tokens-copy.test.d.ts → e2e_tests/snippets.spec.d.ts} +0 -0
  152. /package/dist/{types/history-navigation.d.ts → historyNavigation.d.ts} +0 -0
  153. /package/dist/{types/lang-cypher/create-cypher-theme.d.ts → lang-cypher/createCypherTheme.d.ts} +0 -0
  154. /package/dist/{types/lang-cypher/theme-icons.d.ts → lang-cypher/themeIcons.d.ts} +0 -0
  155. /package/src/lang-cypher/{theme-icons.ts → themeIcons.ts} +0 -0
@@ -0,0 +1,66 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { expect, test } from '@playwright/experimental-ct-react';
3
+ import { DEBOUNCE_TIME } from '../constants';
4
+ import { CypherEditor } from '../CypherEditor';
5
+ import { CypherEditorPage } from './e2eUtils';
6
+ const DEBOUNCE_TIME_WITH_MARGIN = DEBOUNCE_TIME + 100;
7
+ // value updates from outside onExecute are overwritten by pending updates
8
+ test.fail('external updates should override debounced updates', async ({ mount, page }) => {
9
+ const editorPage = new CypherEditorPage(page);
10
+ let value = '';
11
+ const onChange = (val) => {
12
+ value = val;
13
+ void component.update(_jsx(CypherEditor, { value: val, onChange: onChange }));
14
+ };
15
+ const component = await mount(_jsx(CypherEditor, { value: value, onChange: onChange }));
16
+ await editorPage.getEditor().pressSequentially('RETURN 1');
17
+ onChange('foo');
18
+ await page.waitForTimeout(DEBOUNCE_TIME_WITH_MARGIN);
19
+ await expect(component).toContainText('foo');
20
+ });
21
+ // TODO Fix this test
22
+ test.fixme('onExecute updates should override debounce updates', async ({ mount, page }) => {
23
+ const editorPage = new CypherEditorPage(page);
24
+ let value = '';
25
+ const onExecute = () => {
26
+ value = '';
27
+ void component.update(_jsx(CypherEditor, { value: value, onChange: onChange, onExecute: onExecute }));
28
+ };
29
+ const onChange = (val) => {
30
+ value = val;
31
+ void component.update(_jsx(CypherEditor, { value: val, onChange: onChange, onExecute: onExecute }));
32
+ };
33
+ const component = await mount(_jsx(CypherEditor, { value: value, onChange: onChange, onExecute: onExecute }));
34
+ await editorPage.getEditor().pressSequentially('RETURN 1');
35
+ await editorPage.getEditor().press('Enter');
36
+ await page.waitForTimeout(DEBOUNCE_TIME_WITH_MARGIN);
37
+ await expect(component).not.toContainText('RETURN 1');
38
+ await editorPage.getEditor().pressSequentially('RETURN 1');
39
+ await editorPage.getEditor().pressSequentially('');
40
+ await editorPage.getEditor().pressSequentially('RETURN 1');
41
+ await editorPage.getEditor().press('Enter');
42
+ await page.waitForTimeout(DEBOUNCE_TIME_WITH_MARGIN);
43
+ await expect(component).not.toContainText('RETURN 1');
44
+ });
45
+ test('onExecute should fire after debounced updates', async ({ mount, page, }) => {
46
+ const editorPage = new CypherEditorPage(page);
47
+ let value = '';
48
+ let executedCommand = '';
49
+ const onExecute = (cmd) => {
50
+ executedCommand = cmd;
51
+ void component.update(_jsx(CypherEditor, { value: value, onChange: onChange, onExecute: onExecute }));
52
+ };
53
+ const onChange = (val) => {
54
+ value = val;
55
+ void component.update(_jsx(CypherEditor, { value: val, onChange: onChange, onExecute: onExecute }));
56
+ };
57
+ const component = await mount(_jsx(CypherEditor, { value: value, onChange: onChange, onExecute: onExecute }));
58
+ await editorPage.getEditor().fill('RETURN 1');
59
+ await editorPage.getEditor().press('Enter');
60
+ await editorPage.getEditor().fill('RETURN 2');
61
+ await editorPage.getEditor().press('Enter');
62
+ await page.waitForTimeout(DEBOUNCE_TIME_WITH_MARGIN);
63
+ await expect(component).toContainText('RETURN 2');
64
+ expect(executedCommand).toBe('RETURN 2');
65
+ });
66
+ //# sourceMappingURL=debounce.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debounce.spec.js","sourceRoot":"","sources":["../../src/e2e_tests/debounce.spec.tsx"],"names":[],"mappings":"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"}
@@ -8,5 +8,6 @@ export declare class CypherEditorPage {
8
8
  getHexColorOfLocator(locator: Locator): Promise<string>;
9
9
  checkErrorMessage(queryChunk: string, expectedMsg: string): Promise<void>;
10
10
  checkWarningMessage(queryChunk: string, expectedMsg: string): Promise<void>;
11
+ checkNoNotificationMessage(type: 'error' | 'warning'): Promise<void>;
11
12
  private checkNotificationMessage;
12
13
  }
@@ -0,0 +1,71 @@
1
+ import { expect } from '@playwright/experimental-ct-react';
2
+ export class CypherEditorPage {
3
+ page;
4
+ constructor(page) {
5
+ this.page = page;
6
+ }
7
+ getEditor() {
8
+ return this.page.getByRole('textbox');
9
+ }
10
+ async focusEditor() {
11
+ await this.getEditor().focus();
12
+ }
13
+ editorBackgroundIsUnset() {
14
+ return this.page.locator('.cm-editor').evaluate((e) => {
15
+ const browserDefaultBackgroundColor = 'rgba(0, 0, 0, 0)';
16
+ return (window.getComputedStyle(e).getPropertyValue('background-color') ===
17
+ browserDefaultBackgroundColor);
18
+ });
19
+ }
20
+ getHexColorOfLocator(locator) {
21
+ return locator.evaluate((e) => {
22
+ // https://stackoverflow.com/questions/49974145/how-to-convert-rgba-to-hex-color-code-using-javascript
23
+ function RGBAToHexA(rgba, forceRemoveAlpha = false) {
24
+ return ('#' +
25
+ rgba
26
+ .replace(/^rgba?\(|\s+|\)$/g, '')
27
+ .split(',')
28
+ .filter((string, index) => !forceRemoveAlpha || index !== 3)
29
+ .map((string) => parseFloat(string))
30
+ .map((number, index) => index === 3 ? Math.round(number * 255) : number)
31
+ .map((number) => number.toString(16))
32
+ .map((string) => (string.length === 1 ? '0' + string : string))
33
+ .join(''));
34
+ }
35
+ const color = window.getComputedStyle(e).getPropertyValue('color');
36
+ return RGBAToHexA(color);
37
+ });
38
+ }
39
+ async checkErrorMessage(queryChunk, expectedMsg) {
40
+ return this.checkNotificationMessage('error', queryChunk, expectedMsg);
41
+ }
42
+ async checkWarningMessage(queryChunk, expectedMsg) {
43
+ return this.checkNotificationMessage('warning', queryChunk, expectedMsg);
44
+ }
45
+ async checkNoNotificationMessage(type) {
46
+ await this.page.waitForTimeout(10000);
47
+ await expect(this.page.locator('.cm-lintRange-' + type)).toHaveCount(0, {
48
+ timeout: 10000,
49
+ });
50
+ await expect(this.page.locator('.cm-lintPoint-' + type)).toHaveCount(0, {
51
+ timeout: 10000,
52
+ });
53
+ }
54
+ async checkNotificationMessage(type, queryChunk, expectedMsg) {
55
+ await expect(this.page.locator('.cm-lintRange-' + type).last()).toBeVisible({ timeout: 10000 });
56
+ await this.page.getByText(queryChunk, { exact: true }).hover();
57
+ await expect(this.page.locator('.cm-tooltip-hover').last()).toBeVisible({
58
+ timeout: 10000,
59
+ });
60
+ await expect(this.page.getByText(expectedMsg)).toBeVisible();
61
+ /* Return the mouse to the beginning of the query and
62
+ This is because if for example we have an overlay with a
63
+ first interaction that covers the element we want to perform
64
+ the second interaction on, we won't be able to see that second element
65
+ */
66
+ await this.page.mouse.move(0, 0);
67
+ // Make the sure the tooltip closed
68
+ await expect(this.page.locator('.cm-tooltip-hover').last()).not.toBeVisible();
69
+ }
70
+ }
71
+ //# sourceMappingURL=e2eUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"e2eUtils.js","sourceRoot":"","sources":["../../src/e2e_tests/e2eUtils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { expect, test } from '@playwright/experimental-ct-react';
3
+ import { CypherEditor } from '../CypherEditor';
4
+ import { CypherEditorPage } from './e2eUtils';
5
+ test('can add extra keybinding statically', async ({ mount, page }) => {
6
+ const editorPage = new CypherEditorPage(page);
7
+ let hasRun = false;
8
+ const component = await mount(_jsx(CypherEditor, { extraKeybindings: [
9
+ {
10
+ key: 'a',
11
+ preventDefault: true,
12
+ run: () => {
13
+ hasRun = true;
14
+ return true;
15
+ },
16
+ },
17
+ ] }));
18
+ await editorPage.getEditor().press('a');
19
+ await expect(component).not.toHaveText('a');
20
+ expect(hasRun).toBe(true);
21
+ });
22
+ test('can add extra keybinding dymanically', async ({ mount, page }) => {
23
+ const editorPage = new CypherEditorPage(page);
24
+ let hasRun = false;
25
+ const component = await mount(_jsx(CypherEditor, {}));
26
+ await editorPage.getEditor().press('a');
27
+ await editorPage.getEditor().press('Escape');
28
+ await expect(component).toContainText('a');
29
+ await component.update(_jsx(CypherEditor, { extraKeybindings: [
30
+ {
31
+ key: 'a',
32
+ preventDefault: true,
33
+ run: () => {
34
+ hasRun = true;
35
+ return true;
36
+ },
37
+ },
38
+ ] }));
39
+ await editorPage.getEditor().press('a');
40
+ await expect(component).not.toContainText('aa');
41
+ expect(hasRun).toBe(true);
42
+ });
43
+ //# sourceMappingURL=extraKeybindings.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extraKeybindings.spec.js","sourceRoot":"","sources":["../../src/e2e_tests/extraKeybindings.spec.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,IAAI,CAAC,qCAAqC,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE;IACpE,MAAM,UAAU,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC9C,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,MAAM,SAAS,GAAG,MAAM,KAAK,CAC3B,KAAC,YAAY,IACX,gBAAgB,EAAE;YAChB;gBACE,GAAG,EAAE,GAAG;gBACR,cAAc,EAAE,IAAI;gBACpB,GAAG,EAAE,GAAG,EAAE;oBACR,MAAM,GAAG,IAAI,CAAC;oBACd,OAAO,IAAI,CAAC;gBACd,CAAC;aACF;SACF,GACD,CACH,CAAC;IAEF,MAAM,UAAU,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAExC,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAC5C,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,sCAAsC,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE;IACrE,MAAM,UAAU,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC9C,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,KAAC,YAAY,KAAG,CAAC,CAAC;IAChD,MAAM,UAAU,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,UAAU,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAE3C,MAAM,SAAS,CAAC,MAAM,CACpB,KAAC,YAAY,IACX,gBAAgB,EAAE;YAChB;gBACE,GAAG,EAAE,GAAG;gBACR,cAAc,EAAE,IAAI;gBACpB,GAAG,EAAE,GAAG,EAAE;oBACR,MAAM,GAAG,IAAI,CAAC;oBACd,OAAO,IAAI,CAAC;gBACd,CAAC;aACF;SACF,GACD,CACH,CAAC;IAEF,MAAM,UAAU,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC,CAAC,CAAC"}
@@ -0,0 +1,227 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { expect, test } from '@playwright/experimental-ct-react';
3
+ import { CypherEditor } from '../CypherEditor';
4
+ import { CypherEditorPage } from './e2eUtils';
5
+ test('respects preloaded history', async ({ page, mount }) => {
6
+ const editorPage = new CypherEditorPage(page);
7
+ const initialValue = 'MATCH (n) RETURN n;';
8
+ await mount(_jsx(CypherEditor, { value: initialValue, history: ['first', 'second'], onExecute: () => {
9
+ /* needed to turn on history movements */
10
+ } }));
11
+ await editorPage.getEditor().press('ArrowUp');
12
+ await expect(page.getByText('first')).toBeVisible();
13
+ // First arrow up is to get to start of line
14
+ await editorPage.getEditor().press('ArrowUp');
15
+ await editorPage.getEditor().press('ArrowUp');
16
+ await expect(page.getByText('second')).toBeVisible();
17
+ // First arrow down is to get to end of line
18
+ await editorPage.getEditor().press('ArrowDown');
19
+ await editorPage.getEditor().press('ArrowDown');
20
+ await expect(page.getByText('first')).toBeVisible();
21
+ await editorPage.getEditor().press('ArrowDown');
22
+ await expect(page.getByText(initialValue)).toBeVisible();
23
+ });
24
+ test('can add new lines without onExecute', async ({ page, mount }) => {
25
+ const editorPage = new CypherEditorPage(page);
26
+ const editorComponent = await mount(_jsx(CypherEditor, {}));
27
+ // Ctrl-Enter does nothing when onExecute is false
28
+ await editorPage.getEditor().press('Control+Enter');
29
+ await expect(editorComponent).toHaveText('1\n', {
30
+ useInnerText: true,
31
+ });
32
+ // Enter adds new lines
33
+ await editorPage.getEditor().fill('Brock');
34
+ await editorPage.getEditor().press('Enter');
35
+ await editorPage.getEditor().press('Enter');
36
+ await expect(editorComponent).toHaveText('1\n2\n3\nBrock', {
37
+ useInnerText: true,
38
+ });
39
+ // Shift-Enter adds new lines
40
+ await editorPage.getEditor().press('Shift+Enter');
41
+ await editorPage.getEditor().press('Shift+Enter');
42
+ await expect(editorComponent).toHaveText('1\n2\n3\n4\n5\nBrock', {
43
+ useInnerText: true,
44
+ });
45
+ });
46
+ test('can add new lines with newLineOnEnter and without onExecute', async ({ page, mount, }) => {
47
+ const editorPage = new CypherEditorPage(page);
48
+ const editorComponent = await mount(_jsx(CypherEditor, { newLineOnEnter: true }));
49
+ // Ctrl-Enter does nothing when onExecute is false
50
+ await editorPage.getEditor().press('Control+Enter');
51
+ await expect(editorComponent).toHaveText('1\n', {
52
+ useInnerText: true,
53
+ });
54
+ // Enter adds new lines
55
+ await editorPage.getEditor().fill('Brock');
56
+ await editorPage.getEditor().press('Enter');
57
+ await editorPage.getEditor().press('Enter');
58
+ await expect(editorComponent).toHaveText('1\n2\n3\nBrock', {
59
+ useInnerText: true,
60
+ });
61
+ // Shift-Enter adds new lines
62
+ await editorPage.getEditor().press('Shift+Enter');
63
+ await editorPage.getEditor().press('Shift+Enter');
64
+ await expect(editorComponent).toHaveText('1\n2\n3\n4\n5\nBrock', {
65
+ useInnerText: true,
66
+ });
67
+ });
68
+ test('can execute queries and see them in history with newLineOnEnter', async ({ page, mount, }) => {
69
+ const editorPage = new CypherEditorPage(page);
70
+ const initialValue = `MATCH (n)
71
+ RETURN n;`;
72
+ const history = [];
73
+ const onExecute = (cmd) => {
74
+ history.unshift(cmd);
75
+ };
76
+ const editor = await mount(_jsx(CypherEditor, { value: initialValue, history: history, onExecute: onExecute, newLineOnEnter: true }));
77
+ // Execute initial query
78
+ await editorPage.getEditor().press('Control+Enter');
79
+ await editorPage.getEditor().press('Meta+Enter');
80
+ expect(history.length).toBe(1);
81
+ // Ensure query execution doesn't fire if the query is only whitespace
82
+ await editorPage.getEditor().fill(' ');
83
+ await editorPage.getEditor().press('Control+Enter');
84
+ await editorPage.getEditor().press('Meta+Enter');
85
+ expect(history.length).toBe(1);
86
+ // Ensure cmd+enter is required in multiline
87
+ await editorPage.getEditor().fill('multiline');
88
+ await editorPage.getEditor().press('Enter');
89
+ await editorPage.getEditor().press('Enter');
90
+ await editorPage.getEditor().press('Enter');
91
+ await editorPage.getEditor().press('Shift+Enter');
92
+ await page.keyboard.type('entry');
93
+ expect(history.length).toBe(1);
94
+ await editorPage.getEditor().press('Control+Enter');
95
+ await editorPage.getEditor().press('Meta+Enter');
96
+ expect(history.length).toBe(2);
97
+ // rerender with new history
98
+ await editor.update(_jsx(CypherEditor, { value: initialValue, history: history, onExecute: onExecute }));
99
+ // type a new query and make sure it's not lost when navigating history
100
+ await editorPage.getEditor().fill('draft');
101
+ await expect(page.getByText('draft')).toBeVisible();
102
+ expect(history.length).toBe(2);
103
+ // Navigate to the top of the editor before navigating history
104
+ await editorPage.getEditor().press('ArrowLeft');
105
+ await editorPage.getEditor().press('ArrowLeft');
106
+ await editorPage.getEditor().press('ArrowLeft');
107
+ await editorPage.getEditor().press('ArrowLeft');
108
+ await editorPage.getEditor().press('ArrowLeft');
109
+ await editorPage.getEditor().press('ArrowUp');
110
+ // Ensure moving down in the editor doesn't navigate history
111
+ await expect(page.getByText('multiline')).toBeVisible();
112
+ // arrow movements don't matter until bottom is hit
113
+ await editorPage.getEditor().press('ArrowDown');
114
+ await editorPage.getEditor().press('ArrowDown');
115
+ await editorPage.getEditor().press('ArrowUp');
116
+ await editorPage.getEditor().press('ArrowUp');
117
+ await editorPage.getEditor().press('ArrowDown');
118
+ await editorPage.getEditor().press('ArrowDown');
119
+ await editorPage.getEditor().press('ArrowDown');
120
+ await editorPage.getEditor().press('ArrowDown');
121
+ await editorPage.getEditor().press('ArrowDown');
122
+ // editor still multiline
123
+ await expect(page.getByText('multiline')).toBeVisible();
124
+ // until you hit the end where have the draft we created earlier
125
+ await editorPage.getEditor().press('ArrowDown');
126
+ await expect(page.getByText('draft')).toBeVisible();
127
+ });
128
+ test('can execute queries without newLineOnEnter', async ({ page, mount }) => {
129
+ const editorPage = new CypherEditorPage(page);
130
+ const initialValue = 'Brock';
131
+ const history = [];
132
+ const onExecute = (cmd) => {
133
+ history.unshift(cmd);
134
+ };
135
+ const editorComponent = await mount(_jsx(CypherEditor, { value: initialValue, onExecute: onExecute }));
136
+ // Cmd/Control still executes initial query
137
+ await editorPage.getEditor().press('Control+Enter');
138
+ await editorPage.getEditor().press('Meta+Enter');
139
+ expect(history.length).toBe(1);
140
+ // Ensure query execution doesn't fire if the query is only whitespace
141
+ await editorPage.getEditor().fill(' ');
142
+ await editorPage.getEditor().press('Control+Enter');
143
+ await editorPage.getEditor().press('Meta+Enter');
144
+ await editorPage.getEditor().press('Enter');
145
+ expect(history.length).toBe(1);
146
+ // Ensure enter executes query when in single line
147
+ await editorPage.getEditor().fill('Misty');
148
+ await editorPage.getEditor().press('Enter');
149
+ expect(history.length).toBe(2);
150
+ expect(history).toEqual(['Misty', 'Brock']);
151
+ // Ensure cmd+enter is required in multiline
152
+ await editorPage.getEditor().fill('multiline');
153
+ await editorPage.getEditor().press('Shift+Enter');
154
+ await editorPage.getEditor().press('Enter');
155
+ await editorPage.getEditor().press('A');
156
+ // line numbers and the text
157
+ await expect(editorComponent).toHaveText('1\n2\n3\nmultiline\nA', {
158
+ useInnerText: true,
159
+ });
160
+ await editorPage.getEditor().press('Enter');
161
+ await editorPage.getEditor().press('Enter');
162
+ await editorPage.getEditor().press('Enter');
163
+ await editorPage.getEditor().press('Enter');
164
+ expect(history.length).toBe(2);
165
+ await editorPage.getEditor().press('Control+Enter');
166
+ await editorPage.getEditor().press('Meta+Enter');
167
+ expect(history.length).toBe(3);
168
+ });
169
+ test('can navigate with cmd+up as well', async ({ page, mount }) => {
170
+ const editorPage = new CypherEditorPage(page);
171
+ const isMac = process.platform === 'darwin';
172
+ const metaUp = isMac ? 'Meta+ArrowUp' : 'Control+ArrowUp';
173
+ const metaDown = isMac ? 'Meta+ArrowDown' : 'Control+ArrowDown';
174
+ const initialValue = 'MATCH (n) RETURN n;';
175
+ await mount(_jsx(CypherEditor, { value: initialValue, history: [
176
+ 'first',
177
+ `one
178
+ multiline
179
+ entry
180
+ .`,
181
+ ], onExecute: () => {
182
+ /* needed to turn on history movements */
183
+ } }));
184
+ await editorPage.getEditor().press(metaUp);
185
+ await expect(page.getByText('first')).toBeVisible();
186
+ // move in history
187
+ await editorPage.getEditor().press(metaUp);
188
+ await expect(page.getByText('multiline')).toBeVisible();
189
+ // Single meta down moves all the way to top of editor on mac
190
+ if (isMac) {
191
+ await editorPage.getEditor().press(metaDown);
192
+ }
193
+ else {
194
+ await editorPage.getEditor().press('ArrowDown');
195
+ await editorPage.getEditor().press('ArrowDown');
196
+ await editorPage.getEditor().press('ArrowDown');
197
+ await editorPage.getEditor().press('ArrowDown');
198
+ }
199
+ await editorPage.getEditor().press(metaDown);
200
+ await expect(page.getByText('first')).toBeVisible();
201
+ });
202
+ test('test onExecute', async ({ page, mount }) => {
203
+ const editorPage = new CypherEditorPage(page);
204
+ const isMac = process.platform === 'darwin';
205
+ const execButton = isMac ? 'Meta+Enter' : 'Control+Enter';
206
+ const initialValue = 'MATCH (n) RETURN n;';
207
+ const history = [];
208
+ const onExecute = (cmd) => {
209
+ history.unshift(cmd);
210
+ };
211
+ const cypherEditor = await mount(_jsx(CypherEditor, { value: initialValue, onExecute: onExecute }));
212
+ await editorPage.getEditor().press(execButton);
213
+ expect(history).toEqual([initialValue]);
214
+ await editorPage.getEditor().press(execButton);
215
+ expect(history).toEqual([initialValue, initialValue]);
216
+ // can update onExecute
217
+ let newExecRan = false;
218
+ const newOnExecute = () => {
219
+ newExecRan = true;
220
+ };
221
+ await cypherEditor.update(_jsx(CypherEditor, { value: initialValue, onExecute: newOnExecute }));
222
+ await editorPage.getEditor().press(execButton);
223
+ expect(newExecRan).toEqual(true);
224
+ // old value should still be only 2
225
+ expect(history).toEqual([initialValue, initialValue]);
226
+ });
227
+ //# sourceMappingURL=historyNavigation.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"historyNavigation.spec.js","sourceRoot":"","sources":["../../src/e2e_tests/historyNavigation.spec.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ declare global {
2
+ interface Window {
3
+ longtasks: number[];
4
+ }
5
+ }
6
+ export {};
@@ -0,0 +1,97 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { testData } from '@neo4j-cypher/language-support';
3
+ import { expect, test } from '@playwright/experimental-ct-react';
4
+ import { CypherEditor } from '../CypherEditor';
5
+ import { CypherEditorPage } from './e2eUtils';
6
+ test.use({ viewport: { width: 1000, height: 500 } });
7
+ test('benchmarking & performance test session', async ({ browserName, mount, page, }) => {
8
+ test.skip(browserName !== 'chromium');
9
+ const client = await page.context().newCDPSession(page);
10
+ if (process.env.BENCHMARKING === 'true') {
11
+ test.setTimeout(1000000);
12
+ await client.send('Performance.enable');
13
+ await client.send('Emulation.setCPUThrottlingRate', { rate: 4 });
14
+ await client.send('Overlay.setShowFPSCounter', { show: true });
15
+ await page.evaluate(() => {
16
+ window.longtasks = [];
17
+ const observer = new PerformanceObserver((list) => {
18
+ window.longtasks.push(...list.getEntries().map((e) => e.duration));
19
+ });
20
+ observer.observe({ entryTypes: ['longtask'] });
21
+ });
22
+ }
23
+ else {
24
+ test.setTimeout(30 * 1000);
25
+ }
26
+ const editorPage = new CypherEditorPage(page);
27
+ const component = await mount(_jsx(CypherEditor, { prompt: "neo4j>", theme: "dark", lint: true, schema: testData.mockSchema }));
28
+ // pressSequentially is less efficient -> we want to test the performance of the editor
29
+ await editorPage.getEditor().pressSequentially(`
30
+ MATCH (n:Person) RETURN m;`);
31
+ await editorPage.checkErrorMessage('m', 'Variable `m` not defined');
32
+ // set and unset large query a few times
33
+ await component.update(_jsx(CypherEditor, { value: testData.largeQuery, schema: testData.mockSchema }));
34
+ await component.update(_jsx(CypherEditor, { value: "", schema: testData.mockSchema }));
35
+ await component.update(_jsx(CypherEditor, { value: testData.largeQuery, schema: testData.mockSchema }));
36
+ await component.update(_jsx(CypherEditor, { value: "" }));
37
+ await component.update(_jsx(CypherEditor, { value: testData.largeQuery, schema: testData.mockSchema }));
38
+ await component.update(_jsx(CypherEditor, { value: "", schema: testData.mockSchema }));
39
+ await component.update(_jsx(CypherEditor, { value: testData.largeQuery, schema: testData.mockSchema }));
40
+ await component.update(_jsx(CypherEditor, { value: "", schema: testData.mockSchema }));
41
+ await component.update(_jsx(CypherEditor, { value: testData.largeQuery, schema: testData.mockSchema }));
42
+ await editorPage.getEditor().pressSequentially(`
43
+ MATCH (n:P`);
44
+ await expect(page.locator('.cm-tooltip-autocomplete').getByText('Person')).toBeVisible();
45
+ await page.locator('.cm-tooltip-autocomplete').getByText('Person').click();
46
+ await expect(page.locator('.cm-tooltip-autocomplete')).not.toBeVisible();
47
+ await expect(component).toContainText('MATCH (n:Person');
48
+ await editorPage.getEditor().pressSequentially(') RETRN my');
49
+ await expect(component).toContainText('MATCH (n:Person) RETRN m');
50
+ await editorPage.checkErrorMessage('RETRN', `Invalid input 'RETRN': expected a graph pattern, 'FOREACH', ',', 'ORDER BY', 'CALL', 'CREATE', 'LOAD CSV', 'DELETE', 'DETACH', 'FINISH', 'INSERT', 'LIMIT', 'MATCH', 'MERGE', 'NODETACH', 'OFFSET', 'OPTIONAL', 'REMOVE', 'RETURN', 'SET', 'SKIP', 'UNION', 'UNWIND', 'USE', 'USING', 'WHERE', 'WITH' or <EOF>`);
51
+ await editorPage
52
+ .getEditor()
53
+ .pressSequentially('veryveryveryverylongvariable');
54
+ if (process.env.BENCHMARKING === 'true') {
55
+ const longtasks = await page.evaluate(() => window.longtasks);
56
+ const sortedLongTasks = longtasks.sort((a, b) => a - b);
57
+ const medianLongTask = sortedLongTasks[Math.floor(sortedLongTasks.length / 2)];
58
+ const averageLongTask = sortedLongTasks.reduce((a, b) => a + b, 0) / sortedLongTasks.length;
59
+ const over500 = sortedLongTasks.filter((t) => t > 500).length;
60
+ const nintyninethPercentile = sortedLongTasks[Math.floor(sortedLongTasks.length * 0.99)];
61
+ const longTaskCount = longtasks.length;
62
+ const totalLongTaskTime = longtasks.reduce((a, b) => a + b, 0);
63
+ const USER_ID = 1226722;
64
+ const API_KEY = process.env.GRAFANA_API_KEY;
65
+ if (!API_KEY) {
66
+ throw new Error('Missing grafana api key');
67
+ }
68
+ const metrics = {
69
+ medianLongTask,
70
+ averageLongTask,
71
+ over500,
72
+ nintyninethPercentile,
73
+ longTaskCount,
74
+ totalLongTaskTime,
75
+ };
76
+ const body = Object.entries(metrics)
77
+ .map(([key, value]) => `benchmark,bar_label=${key},source=playwright metric=${value}`)
78
+ .join('\n');
79
+ await fetch('https://influx-prod-39-prod-eu-north-0.grafana.net/api/v1/push/influx/write', {
80
+ method: 'post',
81
+ body,
82
+ headers: {
83
+ Authorization: `Bearer ${USER_ID}:${API_KEY}`,
84
+ 'Content-Type': 'text/plain',
85
+ },
86
+ }).then((res) => {
87
+ if (res.ok) {
88
+ // eslint-disable-next-line no-console
89
+ console.log('Metrics pushed to grafana successfully');
90
+ }
91
+ else {
92
+ throw new Error(`Failed to push metrics to grafana: ${res.statusText}`);
93
+ }
94
+ });
95
+ }
96
+ });
97
+ //# sourceMappingURL=performanceTest.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"performanceTest.spec.js","sourceRoot":"","sources":["../../src/e2e_tests/performanceTest.spec.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { expect, test } from '@playwright/experimental-ct-react';
3
+ import { CypherEditor } from '../CypherEditor';
4
+ test('can mount the editor with text', async ({ mount }) => {
5
+ const component = await mount(_jsx(CypherEditor, { value: "MATCH (n) RETURN n;" }));
6
+ await expect(component).toContainText('MATCH (n) RETURN n;');
7
+ });
8
+ test('the editors text can be externally controlled ', async ({ mount }) => {
9
+ const intitialValue = 'MATCH (n) RETURN n;';
10
+ const component = await mount(_jsx(CypherEditor, { value: intitialValue }));
11
+ await expect(component).toContainText(intitialValue);
12
+ const newValue = 'RETURN 123';
13
+ await component.update(_jsx(CypherEditor, { value: newValue }));
14
+ await expect(component).toContainText(newValue);
15
+ });
16
+ test('the editor can report changes to the text ', async ({ mount, page }) => {
17
+ const intitialValue = 'MATCH (n) ';
18
+ let editorValueCopy = intitialValue;
19
+ const onChange = (val) => {
20
+ editorValueCopy = val;
21
+ };
22
+ await mount(_jsx(CypherEditor, { value: intitialValue, onChange: onChange }));
23
+ const textField = page.getByRole('textbox');
24
+ await textField.fill('');
25
+ await textField.fill('RETURN 12');
26
+ await expect(textField).toHaveText('RETURN 12');
27
+ // editor update is debounced, retry wait for debounced
28
+ await expect(() => {
29
+ expect(editorValueCopy).toBe('RETURN 12');
30
+ }).toPass({ intervals: [300, 300, 1000] });
31
+ });
32
+ test('can complete RETURN', async ({ page, mount }) => {
33
+ await mount(_jsx(CypherEditor, {}));
34
+ const textField = page.getByRole('textbox');
35
+ await textField.fill('RETU');
36
+ await page.getByText('RETURN').click();
37
+ await expect(textField).toHaveText('RETURN');
38
+ });
39
+ test('can complete CALL/CREATE', async ({ page, mount }) => {
40
+ await mount(_jsx(CypherEditor, {}));
41
+ const textField = page.getByRole('textbox');
42
+ await textField.fill('C');
43
+ await expect(page.getByText('CALL')).toBeVisible();
44
+ await expect(page.getByText('CREATE')).toBeVisible();
45
+ await textField.fill('CA');
46
+ await expect(page.getByText('CALL')).toBeVisible();
47
+ await expect(page.getByText('CREATE')).not.toBeVisible();
48
+ // wait for the autocomplete interactivity
49
+ await page.waitForTimeout(500);
50
+ await textField.press('Enter');
51
+ await expect(textField).toHaveText('CALL');
52
+ });
53
+ //# sourceMappingURL=sanityChecks.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanityChecks.spec.js","sourceRoot":"","sources":["../../src/e2e_tests/sanityChecks.spec.tsx"],"names":[],"mappings":"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"}