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

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 (108) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/{types/CypherEditor.d.ts → CypherEditor.d.ts} +10 -1
  3. package/dist/CypherEditor.js +206 -0
  4. package/dist/CypherEditor.js.map +1 -0
  5. package/dist/e2e_tests/auto-completion.spec.js +129 -0
  6. package/dist/e2e_tests/auto-completion.spec.js.map +1 -0
  7. package/dist/e2e_tests/e2e-utils.js +52 -0
  8. package/dist/e2e_tests/e2e-utils.js.map +1 -0
  9. package/dist/e2e_tests/extra-keybindings.spec.js +44 -0
  10. package/dist/e2e_tests/extra-keybindings.spec.js.map +1 -0
  11. package/dist/e2e_tests/history-navigation.spec.js +136 -0
  12. package/dist/e2e_tests/history-navigation.spec.js.map +1 -0
  13. package/dist/e2e_tests/performance-test.spec.d.ts +6 -0
  14. package/dist/e2e_tests/performance-test.spec.js +96 -0
  15. package/dist/e2e_tests/performance-test.spec.js.map +1 -0
  16. package/dist/e2e_tests/sanity-checks.spec.js +65 -0
  17. package/dist/e2e_tests/sanity-checks.spec.js.map +1 -0
  18. package/dist/e2e_tests/signature-help.spec.js +151 -0
  19. package/dist/e2e_tests/signature-help.spec.js.map +1 -0
  20. package/dist/e2e_tests/syntax-highlighting.spec.js +91 -0
  21. package/dist/e2e_tests/syntax-highlighting.spec.js.map +1 -0
  22. package/dist/e2e_tests/syntax-validation.spec.js +79 -0
  23. package/dist/e2e_tests/syntax-validation.spec.js.map +1 -0
  24. package/dist/history-navigation.js +163 -0
  25. package/dist/history-navigation.js.map +1 -0
  26. package/dist/{types/icons.d.ts → icons.d.ts} +1 -1
  27. package/dist/icons.js +62 -0
  28. package/dist/icons.js.map +1 -0
  29. package/dist/{types/index.d.ts → index.d.ts} +1 -1
  30. package/dist/index.js +5 -0
  31. package/dist/index.js.map +1 -0
  32. package/dist/lang-cypher/autocomplete.js +56 -0
  33. package/dist/lang-cypher/autocomplete.js.map +1 -0
  34. package/dist/{types/lang-cypher → lang-cypher}/constants.d.ts +9 -0
  35. package/dist/lang-cypher/constants.js +65 -0
  36. package/dist/lang-cypher/constants.js.map +1 -0
  37. package/dist/lang-cypher/contants.test.js +102 -0
  38. package/dist/lang-cypher/contants.test.js.map +1 -0
  39. package/dist/lang-cypher/create-cypher-theme.js +144 -0
  40. package/dist/lang-cypher/create-cypher-theme.js.map +1 -0
  41. package/dist/{types/lang-cypher → lang-cypher}/lang-cypher.d.ts +3 -1
  42. package/dist/lang-cypher/lang-cypher.js +24 -0
  43. package/dist/lang-cypher/lang-cypher.js.map +1 -0
  44. package/dist/lang-cypher/lint-worker.d.ts +8 -0
  45. package/dist/lang-cypher/lint-worker.js +4 -0
  46. package/dist/lang-cypher/lint-worker.js.map +1 -0
  47. package/dist/lang-cypher/parser-adapter.d.ts +19 -0
  48. package/dist/lang-cypher/parser-adapter.js +113 -0
  49. package/dist/lang-cypher/parser-adapter.js.map +1 -0
  50. package/dist/lang-cypher/signature-help.d.ts +4 -0
  51. package/dist/lang-cypher/signature-help.js +77 -0
  52. package/dist/lang-cypher/signature-help.js.map +1 -0
  53. package/dist/{types/lang-cypher → lang-cypher}/syntax-validation.d.ts +2 -0
  54. package/dist/lang-cypher/syntax-validation.js +68 -0
  55. package/dist/lang-cypher/syntax-validation.js.map +1 -0
  56. package/dist/lang-cypher/theme-icons.js +22 -0
  57. package/dist/lang-cypher/theme-icons.js.map +1 -0
  58. package/dist/ndl-tokens-copy.js +380 -0
  59. package/dist/ndl-tokens-copy.js.map +1 -0
  60. package/dist/ndl-tokens-copy.test.js +11 -0
  61. package/dist/ndl-tokens-copy.test.js.map +1 -0
  62. package/dist/neo4j-setup.js +86 -0
  63. package/dist/neo4j-setup.js.map +1 -0
  64. package/dist/themes.js +114 -0
  65. package/dist/themes.js.map +1 -0
  66. package/dist/tsconfig.tsbuildinfo +1 -0
  67. package/package.json +15 -18
  68. package/src/CypherEditor.tsx +31 -5
  69. package/src/e2e_tests/performance-test.spec.tsx +100 -13
  70. package/src/e2e_tests/sanity-checks.spec.tsx +8 -3
  71. package/src/e2e_tests/signature-help.spec.tsx +312 -0
  72. package/src/icons.ts +3 -0
  73. package/src/index.ts +1 -1
  74. package/src/lang-cypher/autocomplete.ts +6 -1
  75. package/src/lang-cypher/constants.ts +23 -0
  76. package/src/lang-cypher/create-cypher-theme.ts +4 -0
  77. package/src/lang-cypher/lang-cypher.ts +16 -7
  78. package/src/lang-cypher/lint-worker.ts +14 -0
  79. package/src/lang-cypher/parser-adapter.ts +145 -0
  80. package/src/lang-cypher/signature-help.ts +102 -0
  81. package/src/lang-cypher/syntax-validation.ts +70 -4
  82. package/src/themes.ts +2 -0
  83. package/dist/cjs/index.cjs +0 -1441
  84. package/dist/cjs/index.cjs.map +0 -7
  85. package/dist/esm/index.mjs +0 -1464
  86. package/dist/esm/index.mjs.map +0 -7
  87. package/dist/types/e2e_tests/mock-data.d.ts +0 -3779
  88. package/dist/types/lang-cypher/ParserAdapter.d.ts +0 -14
  89. package/dist/types/tsconfig.tsbuildinfo +0 -1
  90. package/src/e2e_tests/mock-data.ts +0 -4310
  91. package/src/lang-cypher/ParserAdapter.ts +0 -92
  92. /package/dist/{types/e2e_tests → e2e_tests}/auto-completion.spec.d.ts +0 -0
  93. /package/dist/{types/e2e_tests → e2e_tests}/e2e-utils.d.ts +0 -0
  94. /package/dist/{types/e2e_tests → e2e_tests}/extra-keybindings.spec.d.ts +0 -0
  95. /package/dist/{types/e2e_tests → e2e_tests}/history-navigation.spec.d.ts +0 -0
  96. /package/dist/{types/e2e_tests → e2e_tests}/sanity-checks.spec.d.ts +0 -0
  97. /package/dist/{types/e2e_tests/performance-test.spec.d.ts → e2e_tests/signature-help.spec.d.ts} +0 -0
  98. /package/dist/{types/e2e_tests → e2e_tests}/syntax-highlighting.spec.d.ts +0 -0
  99. /package/dist/{types/e2e_tests → e2e_tests}/syntax-validation.spec.d.ts +0 -0
  100. /package/dist/{types/history-navigation.d.ts → history-navigation.d.ts} +0 -0
  101. /package/dist/{types/lang-cypher → lang-cypher}/autocomplete.d.ts +0 -0
  102. /package/dist/{types/lang-cypher → lang-cypher}/contants.test.d.ts +0 -0
  103. /package/dist/{types/lang-cypher → lang-cypher}/create-cypher-theme.d.ts +0 -0
  104. /package/dist/{types/lang-cypher → lang-cypher}/theme-icons.d.ts +0 -0
  105. /package/dist/{types/ndl-tokens-copy.d.ts → ndl-tokens-copy.d.ts} +0 -0
  106. /package/dist/{types/ndl-tokens-copy.test.d.ts → ndl-tokens-copy.test.d.ts} +0 -0
  107. /package/dist/{types/neo4j-setup.d.ts → neo4j-setup.d.ts} +0 -0
  108. /package/dist/{types/themes.d.ts → themes.d.ts} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history-navigation.spec.js","sourceRoot":"","sources":["../../src/e2e_tests/history-navigation.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,96 @@
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 './e2e-utils';
6
+ test.use({ viewport: { width: 1000, height: 500 } });
7
+ test('benchmarking & performance test session', async ({ mount, page }) => {
8
+ const client = await page.context().newCDPSession(page);
9
+ if (process.env.BENCHMARKING === 'true') {
10
+ test.setTimeout(1000000);
11
+ await client.send('Performance.enable');
12
+ await client.send('Emulation.setCPUThrottlingRate', { rate: 4 });
13
+ await client.send('Overlay.setShowFPSCounter', { show: true });
14
+ await page.evaluate(() => {
15
+ window.longtasks = [];
16
+ const observer = new PerformanceObserver((list) => {
17
+ window.longtasks.push(...list.getEntries().map((e) => e.duration));
18
+ });
19
+ observer.observe({ entryTypes: ['longtask'] });
20
+ });
21
+ }
22
+ else {
23
+ test.setTimeout(30 * 1000);
24
+ }
25
+ const editorPage = new CypherEditorPage(page);
26
+ const component = await mount(_jsx(CypherEditor, { prompt: "neo4j>", theme: "dark", lint: true, schema: testData.mockSchema }));
27
+ // pressSequentially is less efficient -> we want to test the performance of the editor
28
+ await editorPage.getEditor().pressSequentially(`
29
+ MATCH (n:Person) RETURN m;`);
30
+ await editorPage.checkErrorMessage('m', 'Variable `m` not defined');
31
+ // set and unset large query a few times
32
+ await component.update(_jsx(CypherEditor, { value: testData.largeQuery, schema: testData.mockSchema }));
33
+ await component.update(_jsx(CypherEditor, { value: "", schema: testData.mockSchema }));
34
+ await component.update(_jsx(CypherEditor, { value: testData.largeQuery, schema: testData.mockSchema }));
35
+ await component.update(_jsx(CypherEditor, { value: "" }));
36
+ await component.update(_jsx(CypherEditor, { value: testData.largeQuery, schema: testData.mockSchema }));
37
+ await component.update(_jsx(CypherEditor, { value: "", schema: testData.mockSchema }));
38
+ await component.update(_jsx(CypherEditor, { value: testData.largeQuery, schema: testData.mockSchema }));
39
+ await component.update(_jsx(CypherEditor, { value: "", schema: testData.mockSchema }));
40
+ await component.update(_jsx(CypherEditor, { value: testData.largeQuery, schema: testData.mockSchema }));
41
+ await editorPage.getEditor().pressSequentially(`
42
+ MATCH (n:P`);
43
+ await expect(page.locator('.cm-tooltip-autocomplete').getByText('Person')).toBeVisible();
44
+ await page.locator('.cm-tooltip-autocomplete').getByText('Person').click();
45
+ await expect(page.locator('.cm-tooltip-autocomplete')).not.toBeVisible();
46
+ await expect(component).toContainText('MATCH (n:Person');
47
+ await editorPage.getEditor().pressSequentially(') RETRN my');
48
+ await expect(component).toContainText('MATCH (n:Person) RETRN m');
49
+ await editorPage.checkErrorMessage('RETRN', 'Unexpected token. Did you mean RETURN?');
50
+ await editorPage
51
+ .getEditor()
52
+ .pressSequentially('veryveryveryverylongvariable');
53
+ if (process.env.BENCHMARKING === 'true') {
54
+ const longtasks = await page.evaluate(() => window.longtasks);
55
+ const sortedLongTasks = longtasks.sort((a, b) => a - b);
56
+ const medianLongTask = sortedLongTasks[Math.floor(sortedLongTasks.length / 2)];
57
+ const averageLongTask = sortedLongTasks.reduce((a, b) => a + b, 0) / sortedLongTasks.length;
58
+ const over500 = sortedLongTasks.filter((t) => t > 500).length;
59
+ const nintyninethPercentile = sortedLongTasks[Math.floor(sortedLongTasks.length * 0.99)];
60
+ const longTaskCount = longtasks.length;
61
+ const totalLongTaskTime = longtasks.reduce((a, b) => a + b, 0);
62
+ const USER_ID = 1226722;
63
+ const API_KEY = process.env.GRAFANA_API_KEY;
64
+ if (!API_KEY) {
65
+ throw new Error('Missing grafana api key');
66
+ }
67
+ const metrics = {
68
+ medianLongTask,
69
+ averageLongTask,
70
+ over500,
71
+ nintyninethPercentile,
72
+ longTaskCount,
73
+ totalLongTaskTime,
74
+ };
75
+ const body = Object.entries(metrics)
76
+ .map(([key, value]) => `benchmark,bar_label=${key},source=playwright metric=${value}`)
77
+ .join('\n');
78
+ await fetch('https://influx-prod-39-prod-eu-north-0.grafana.net/api/v1/push/influx/write', {
79
+ method: 'post',
80
+ body,
81
+ headers: {
82
+ Authorization: `Bearer ${USER_ID}:${API_KEY}`,
83
+ 'Content-Type': 'text/plain',
84
+ },
85
+ }).then((res) => {
86
+ if (res.ok) {
87
+ // eslint-disable-next-line no-console
88
+ console.log('Metrics pushed to grafana successfully');
89
+ }
90
+ else {
91
+ throw new Error(`Failed to push metrics to grafana: ${res.statusText}`);
92
+ }
93
+ });
94
+ }
95
+ });
96
+ //# sourceMappingURL=performance-test.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"performance-test.spec.js","sourceRoot":"","sources":["../../src/e2e_tests/performance-test.spec.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
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.use({ viewport: { width: 500, height: 500 } });
5
+ test('can mount the editor with text', async ({ mount }) => {
6
+ const component = await mount(_jsx(CypherEditor, { value: "MATCH (n) RETURN n;" }));
7
+ await expect(component).toContainText('MATCH (n) RETURN n;');
8
+ });
9
+ test('the editors text can be externally controlled ', async ({ mount }) => {
10
+ const intitialValue = 'MATCH (n) RETURN n;';
11
+ const component = await mount(_jsx(CypherEditor, { value: intitialValue }));
12
+ await expect(component).toContainText(intitialValue);
13
+ const newValue = 'RETURN 123';
14
+ await component.update(_jsx(CypherEditor, { value: newValue }));
15
+ await expect(component).toContainText(newValue);
16
+ });
17
+ test('the editor can report changes to the text ', async ({ mount, page }) => {
18
+ const intitialValue = 'MATCH (n) ';
19
+ let editorValueCopy = intitialValue;
20
+ const onChange = (val) => {
21
+ editorValueCopy = val;
22
+ };
23
+ await mount(_jsx(CypherEditor, { value: intitialValue, onChange: onChange }));
24
+ const textField = page.getByRole('textbox');
25
+ await textField.fill('RETURN 12');
26
+ // editor update is debounced, retry wait for debounced
27
+ await expect(() => {
28
+ expect(editorValueCopy).toBe('RETURN 12');
29
+ }).toPass({ intervals: [300, 300, 1000] });
30
+ await page.keyboard.type('34');
31
+ await expect(() => {
32
+ expect(editorValueCopy).toBe('RETURN 12');
33
+ }).toPass({ intervals: [300, 300, 1000] });
34
+ });
35
+ test('can complete RETURN', async ({ page, mount }) => {
36
+ await mount(_jsx(CypherEditor, {}));
37
+ const textField = page.getByRole('textbox');
38
+ await textField.fill('RETU');
39
+ await page.getByText('RETURN').click();
40
+ await expect(textField).toHaveText('RETURN');
41
+ });
42
+ test('can complete CALL/CREATE', async ({ page, mount }) => {
43
+ await mount(_jsx(CypherEditor, {}));
44
+ const textField = page.getByRole('textbox');
45
+ await textField.fill('C');
46
+ await expect(page.getByText('CALL')).toBeVisible();
47
+ await expect(page.getByText('CREATE')).toBeVisible();
48
+ await textField.fill('CA');
49
+ await expect(page.getByText('CALL')).toBeVisible();
50
+ await expect(page.getByText('CREATE')).not.toBeVisible();
51
+ // wait for the autocomplete interactivity
52
+ await page.waitForTimeout(500);
53
+ await textField.press('Enter');
54
+ await expect(textField).toHaveText('CALL');
55
+ });
56
+ test('prompt shows up', async ({ mount, page }) => {
57
+ const component = await mount(_jsx(CypherEditor, { prompt: "neo4j>" }));
58
+ await expect(component).toContainText('neo4j>');
59
+ await component.update(_jsx(CypherEditor, { prompt: "test>" }));
60
+ await expect(component).toContainText('test>');
61
+ const textField = page.getByRole('textbox');
62
+ await textField.press('a');
63
+ await expect(textField).toHaveText('a');
64
+ });
65
+ //# sourceMappingURL=sanity-checks.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanity-checks.spec.js","sourceRoot":"","sources":["../../src/e2e_tests/sanity-checks.spec.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,IAAI,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;AAEpD,IAAI,CAAC,gCAAgC,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;IACzD,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,KAAC,YAAY,IAAC,KAAK,EAAC,qBAAqB,GAAG,CAAC,CAAC;IAE5E,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC;AAC/D,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,gDAAgD,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;IACzE,MAAM,aAAa,GAAG,qBAAqB,CAAC;IAE5C,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,KAAC,YAAY,IAAC,KAAK,EAAE,aAAa,GAAI,CAAC,CAAC;IAEtE,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;IAErD,MAAM,QAAQ,GAAG,YAAY,CAAC;IAC9B,MAAM,SAAS,CAAC,MAAM,CAAC,KAAC,YAAY,IAAC,KAAK,EAAE,QAAQ,GAAI,CAAC,CAAC;IAE1D,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AAClD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,4CAA4C,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE;IAC3E,MAAM,aAAa,GAAG,YAAY,CAAC;IAEnC,IAAI,eAAe,GAAG,aAAa,CAAC;IACpC,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,EAAE;QAC/B,eAAe,GAAG,GAAG,CAAC;IACxB,CAAC,CAAC;IAEF,MAAM,KAAK,CAAC,KAAC,YAAY,IAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,GAAI,CAAC,CAAC;IAExE,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAE5C,MAAM,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAElC,uDAAuD;IACvD,MAAM,MAAM,CAAC,GAAG,EAAE;QAChB,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAE3C,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE/B,MAAM,MAAM,CAAC,GAAG,EAAE;QAChB,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;AAC7C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,qBAAqB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;IACpD,MAAM,KAAK,CAAC,KAAC,YAAY,KAAG,CAAC,CAAC;IAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAE5C,MAAM,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAE7B,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC;IACvC,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC/C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,0BAA0B,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;IACzD,MAAM,KAAK,CAAC,KAAC,YAAY,KAAG,CAAC,CAAC;IAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAE5C,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,MAAM,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACnD,MAAM,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAErD,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,MAAM,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACnD,MAAM,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;IAEzD,0CAA0C;IAC1C,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAE/B,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAC7C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,iBAAiB,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE;IAChD,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,KAAC,YAAY,IAAC,MAAM,EAAC,QAAQ,GAAG,CAAC,CAAC;IAEhE,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAEhD,MAAM,SAAS,CAAC,MAAM,CAAC,KAAC,YAAY,IAAC,MAAM,EAAC,OAAO,GAAG,CAAC,CAAC;IACxD,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAE/C,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAC5C,MAAM,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE3B,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AAC1C,CAAC,CAAC,CAAC"}
@@ -0,0 +1,151 @@
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
+ test.use({ viewport: { width: 1000, height: 500 } });
6
+ function testTooltip(tooltip, expectations) {
7
+ const includes = expectations.includes ?? [];
8
+ const excludes = expectations.excludes ?? [];
9
+ const included = Promise.all(includes.map((text) => {
10
+ return expect(tooltip).toContainText(text, {
11
+ timeout: 2000,
12
+ });
13
+ }));
14
+ const excluded = Promise.all(excludes.map((text) => {
15
+ return expect(tooltip).not.toContainText(text, {
16
+ timeout: 2000,
17
+ });
18
+ }));
19
+ return Promise.all([included, excluded]);
20
+ }
21
+ test('Signature help works for functions', async ({ page, mount }) => {
22
+ const query = 'RETURN abs(';
23
+ await mount(_jsx(CypherEditor, { value: query, schema: testData.mockSchema, autofocus: true }));
24
+ await expect(page.locator('.cm-tooltip-signature-help').last()).toBeVisible({
25
+ timeout: 2000,
26
+ });
27
+ });
28
+ test('Signature help works for procedures', async ({ page, mount }) => {
29
+ const query = 'CALL apoc.import.csv(';
30
+ await mount(_jsx(CypherEditor, { value: query, schema: testData.mockSchema, autofocus: true }));
31
+ await expect(page.locator('.cm-tooltip-signature-help').last()).toBeVisible({
32
+ timeout: 2000,
33
+ });
34
+ });
35
+ test('Signature help shows the description for the first argument', async ({ page, mount, }) => {
36
+ const query = 'CALL apoc.import.csv(';
37
+ await mount(_jsx(CypherEditor, { value: query, schema: testData.mockSchema, autofocus: true }));
38
+ const tooltip = page.locator('.cm-tooltip-signature-help').last();
39
+ await testTooltip(tooltip, {
40
+ includes: [
41
+ 'nodes :: LIST<MAP>',
42
+ 'Imports `NODE` and `RELATIONSHIP` values with the given labels and types from the provided CSV file',
43
+ ],
44
+ });
45
+ });
46
+ test('Signature help shows the description for the first argument when the cursor is at that position', async ({ page, mount, }) => {
47
+ const query = 'CALL apoc.import.csv()';
48
+ await mount(_jsx(CypherEditor, { value: query, schema: testData.mockSchema, offset: 21 }));
49
+ const tooltip = page.locator('.cm-tooltip-signature-help').last();
50
+ await testTooltip(tooltip, {
51
+ includes: [
52
+ 'nodes :: LIST<MAP>',
53
+ 'Imports `NODE` and `RELATIONSHIP` values with the given labels and types from the provided CSV file',
54
+ ],
55
+ });
56
+ });
57
+ test('Signature help shows the description for the second argument', async ({ page, mount, }) => {
58
+ const query = 'CALL apoc.import.csv(nodes,';
59
+ await mount(_jsx(CypherEditor, { value: query, schema: testData.mockSchema, autofocus: true }));
60
+ const tooltip = page.locator('.cm-tooltip-signature-help').last();
61
+ await testTooltip(tooltip, {
62
+ includes: [
63
+ 'rels :: LIST<MAP>',
64
+ 'Imports `NODE` and `RELATIONSHIP` values with the given labels and types from the provided CSV file',
65
+ ],
66
+ });
67
+ });
68
+ test('Signature help shows the description for the second argument when the cursor is at that position', async ({ page, mount, }) => {
69
+ const query = 'CALL apoc.import.csv(nodes,)';
70
+ await mount(_jsx(CypherEditor, { value: query, schema: testData.mockSchema, offset: 27 }));
71
+ const tooltip = page.locator('.cm-tooltip-signature-help').last();
72
+ await testTooltip(tooltip, {
73
+ includes: [
74
+ 'rels :: LIST<MAP>',
75
+ 'Imports `NODE` and `RELATIONSHIP` values with the given labels and types from the provided CSV file',
76
+ ],
77
+ });
78
+ });
79
+ test('Signature help shows the description for the second argument when the cursor is at that position, even after whitespaces', async ({ page, mount, }) => {
80
+ const query = 'CALL apoc.import.csv(nodes, )';
81
+ await mount(_jsx(CypherEditor, { value: query, schema: testData.mockSchema, offset: 28 }));
82
+ const tooltip = page.locator('.cm-tooltip-signature-help').last();
83
+ await testTooltip(tooltip, {
84
+ includes: [
85
+ 'rels :: LIST<MAP>',
86
+ 'Imports `NODE` and `RELATIONSHIP` values with the given labels and types from the provided CSV file',
87
+ ],
88
+ });
89
+ });
90
+ test('Signature help shows description for arguments with a space following a separator', async ({ page, mount, }) => {
91
+ const query = 'CALL apoc.import.csv(nodes, ';
92
+ await mount(_jsx(CypherEditor, { value: query, schema: testData.mockSchema, autofocus: true }));
93
+ const tooltip = page.locator('.cm-tooltip-signature-help').last();
94
+ await testTooltip(tooltip, {
95
+ includes: [
96
+ 'rels :: LIST<MAP>',
97
+ 'Imports `NODE` and `RELATIONSHIP` values with the given labels and types from the provided CSV file',
98
+ ],
99
+ });
100
+ });
101
+ test('Signature help shows the description for the third argument', async ({ page, mount, }) => {
102
+ const query = 'CALL apoc.import.csv(nodes, rels,';
103
+ await mount(_jsx(CypherEditor, { value: query, schema: testData.mockSchema, autofocus: true }));
104
+ const tooltip = page.locator('.cm-tooltip-signature-help').last();
105
+ await testTooltip(tooltip, {
106
+ includes: [
107
+ 'config :: MAP',
108
+ 'Imports `NODE` and `RELATIONSHIP` values with the given labels and types from the provided CSV file',
109
+ ],
110
+ });
111
+ });
112
+ test('Signature help works on multiline queries', async ({ page, mount }) => {
113
+ const query = `CALL apoc.import.csv(
114
+ nodes,
115
+ rels,
116
+ `;
117
+ await mount(_jsx(CypherEditor, { value: query, schema: testData.mockSchema, autofocus: true }));
118
+ const tooltip = page.locator('.cm-tooltip-signature-help').last();
119
+ await testTooltip(tooltip, {
120
+ includes: [
121
+ 'config :: MAP',
122
+ 'Imports `NODE` and `RELATIONSHIP` values with the given labels and types from the provided CSV file',
123
+ ],
124
+ });
125
+ });
126
+ test('Signature help only shows the description past the last argument', async ({ page, mount, }) => {
127
+ const query = 'CALL apoc.import.csv(nodes, rels, config,';
128
+ await mount(_jsx(CypherEditor, { value: query, schema: testData.mockSchema, autofocus: true }));
129
+ const tooltip = page.locator('.cm-tooltip-signature-help').last();
130
+ await testTooltip(tooltip, {
131
+ includes: [
132
+ 'Imports `NODE` and `RELATIONSHIP` values with the given labels and types from the provided CSV file',
133
+ ],
134
+ excludes: ['config :: MAP'],
135
+ });
136
+ });
137
+ test('Signature help does not show any help when method finished', async ({ page, mount, }) => {
138
+ const query = 'CALL apoc.import.csv(nodes, rels, config)';
139
+ await mount(_jsx(CypherEditor, { value: query, schema: testData.mockSchema, autofocus: true }));
140
+ await expect(page.locator('.cm-tooltip-signature-help').last()).not.toBeVisible({
141
+ timeout: 2000,
142
+ });
143
+ });
144
+ test('Signature help does not blow up on empty query', async ({ page, mount, }) => {
145
+ const query = '';
146
+ await mount(_jsx(CypherEditor, { value: query, schema: testData.mockSchema, autofocus: true }));
147
+ await expect(page.locator('.cm-tooltip-signature-help').last()).not.toBeVisible({
148
+ timeout: 2000,
149
+ });
150
+ });
151
+ //# sourceMappingURL=signature-help.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signature-help.spec.js","sourceRoot":"","sources":["../../src/e2e_tests/signature-help.spec.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
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 { darkThemeConstants, lightThemeConstants } from '../themes';
5
+ import { CypherEditorPage } from './e2e-utils';
6
+ test.use({ viewport: { width: 500, height: 500 } });
7
+ test('light theme highlighting', async ({ page, mount }) => {
8
+ const editorPage = new CypherEditorPage(page);
9
+ const query = `
10
+ MATCH (variable :Label)-[:REL_TYPE]->()
11
+ WHERE variable.property = "String"
12
+ OR namespaced.function() = false
13
+ // comment
14
+ OR $parameter > 1234
15
+ RETURN variable;`;
16
+ await mount(_jsx(CypherEditor, { value: query, theme: "light" }));
17
+ const keywordcolors = await Promise.all(['MATCH', 'WHERE', 'RETURN'].map((kw) => editorPage.getHexColorOfLocator(page.getByText(kw))));
18
+ keywordcolors.every((kw) => expect(kw).toEqual(lightThemeConstants.highlightStyles.keyword));
19
+ const labelReltype = await Promise.all(['Label', 'REL_TYPE'].map((kw) => editorPage.getHexColorOfLocator(page.getByText(kw))));
20
+ labelReltype.every((kw) => expect(kw).toEqual(lightThemeConstants.highlightStyles.label));
21
+ expect(await editorPage.getHexColorOfLocator(page.getByText('parameter'))).toEqual(lightThemeConstants.highlightStyles.paramValue);
22
+ expect(await editorPage.getHexColorOfLocator(page.getByText('property'))).toEqual(lightThemeConstants.highlightStyles.property);
23
+ expect(await editorPage.getHexColorOfLocator(page.getByText('false'))).toEqual(lightThemeConstants.highlightStyles.booleanLiteral);
24
+ expect(await editorPage.getHexColorOfLocator(page.getByText('String'))).toEqual(lightThemeConstants.highlightStyles.stringLiteral);
25
+ expect(await editorPage.getHexColorOfLocator(page.getByText('comment'))).toEqual(lightThemeConstants.highlightStyles.comment);
26
+ expect(await editorPage.getHexColorOfLocator(page.getByText('1234', { exact: true }))).toEqual(lightThemeConstants.highlightStyles.numberLiteral);
27
+ expect(await editorPage.editorBackgroundIsUnset()).toEqual(false);
28
+ });
29
+ test('dark theme highlighting', async ({ page, mount }) => {
30
+ const editorPage = new CypherEditorPage(page);
31
+ const query = `
32
+ MATCH (variable :Label)-[:REL_TYPE]->()
33
+ WHERE variable.property = "String"
34
+ OR namespaced.function() = false
35
+ // comment
36
+ OR $parameter > 1234
37
+ RETURN variable;`;
38
+ await mount(_jsx(CypherEditor, { value: query, theme: "dark" }));
39
+ const keywordcolors = await Promise.all(['MATCH', 'WHERE', 'RETURN'].map((kw) => editorPage.getHexColorOfLocator(page.getByText(kw))));
40
+ keywordcolors.every((kw) => expect(kw).toEqual(darkThemeConstants.highlightStyles.keyword));
41
+ const labelReltype = await Promise.all(['Label', 'REL_TYPE'].map((kw) => editorPage.getHexColorOfLocator(page.getByText(kw))));
42
+ labelReltype.every((kw) => expect(kw).toEqual(darkThemeConstants.highlightStyles.label));
43
+ expect(await editorPage.getHexColorOfLocator(page.getByText('parameter'))).toEqual(darkThemeConstants.highlightStyles.paramValue);
44
+ expect(await editorPage.getHexColorOfLocator(page.getByText('property'))).toEqual(darkThemeConstants.highlightStyles.property);
45
+ expect(await editorPage.getHexColorOfLocator(page.getByText('false'))).toEqual(darkThemeConstants.highlightStyles.booleanLiteral);
46
+ expect(await editorPage.getHexColorOfLocator(page.getByText('String'))).toEqual(darkThemeConstants.highlightStyles.stringLiteral);
47
+ expect(await editorPage.getHexColorOfLocator(page.getByText('comment'))).toEqual(darkThemeConstants.highlightStyles.comment);
48
+ expect(await editorPage.getHexColorOfLocator(page.getByText('1234', { exact: true }))).toEqual(darkThemeConstants.highlightStyles.numberLiteral);
49
+ expect(await editorPage.editorBackgroundIsUnset()).toEqual(false);
50
+ });
51
+ test('can live switch theme ', async ({ page, mount }) => {
52
+ const editorPage = new CypherEditorPage(page);
53
+ const component = await mount(_jsx(CypherEditor, { theme: "light", value: "RETURN" }));
54
+ expect(await editorPage.getHexColorOfLocator(page.getByText('RETURN', { exact: true }))).toEqual(lightThemeConstants.highlightStyles.keyword);
55
+ await component.update(_jsx(CypherEditor, { theme: "dark", value: "RETURN" }));
56
+ expect(await editorPage.getHexColorOfLocator(page.getByText('RETURN', { exact: true }))).toEqual(darkThemeConstants.highlightStyles.keyword);
57
+ });
58
+ test('respects prop to allow overriding bkg color', async ({ page, mount }) => {
59
+ const editorPage = new CypherEditorPage(page);
60
+ await mount(_jsx(CypherEditor, { theme: "light", value: "text", overrideThemeBackgroundColor: true }));
61
+ expect(await editorPage.editorBackgroundIsUnset()).toEqual(true);
62
+ });
63
+ test('highlights multiline string literal correctly', async ({ page, mount, }) => {
64
+ const editorPage = new CypherEditorPage(page);
65
+ const query = `
66
+ RETURN "
67
+ multilinestring";`;
68
+ await mount(_jsx(CypherEditor, { theme: "light", value: query }));
69
+ expect(await editorPage.getHexColorOfLocator(page.getByText('multilinestring'))).toEqual(lightThemeConstants.highlightStyles.stringLiteral);
70
+ });
71
+ test('highlights multiline label correctly', async ({ page, mount }) => {
72
+ const editorPage = new CypherEditorPage(page);
73
+ const query = `
74
+ MATCH (v:\`
75
+
76
+ Label\`)
77
+ `;
78
+ await mount(_jsx(CypherEditor, { theme: "light", value: query }));
79
+ expect(await editorPage.getHexColorOfLocator(page.getByText('Label'))).toEqual(lightThemeConstants.highlightStyles.label);
80
+ });
81
+ test('highlights multiline comment correctly', async ({ page, mount }) => {
82
+ const editorPage = new CypherEditorPage(page);
83
+ const query = `
84
+ /*
85
+
86
+ comment
87
+ */";`;
88
+ await mount(_jsx(CypherEditor, { theme: "light", value: query }));
89
+ expect(await editorPage.getHexColorOfLocator(page.getByText('comment'))).toEqual(lightThemeConstants.highlightStyles.comment);
90
+ });
91
+ //# sourceMappingURL=syntax-highlighting.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syntax-highlighting.spec.js","sourceRoot":"","sources":["../../src/e2e_tests/syntax-highlighting.spec.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
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 './e2e-utils';
5
+ test.use({ viewport: { width: 1000, height: 500 } });
6
+ test('Prop lint set to false disables syntax validation', async ({ page, mount, }) => {
7
+ const query = 'METCH (n) RETURN n';
8
+ await mount(_jsx(CypherEditor, { value: query, lint: false }));
9
+ await expect(page.locator('.cm-lintRange-error').last()).not.toBeVisible({
10
+ timeout: 2000,
11
+ });
12
+ });
13
+ test.skip('Can turn linting back on', async ({ page, mount }) => {
14
+ const editorPage = new CypherEditorPage(page);
15
+ const query = 'METCH (n) RETURN n';
16
+ const component = await mount(_jsx(CypherEditor, { value: query, lint: false }));
17
+ await expect(page.locator('.cm-lintRange-error').last()).not.toBeVisible({
18
+ timeout: 2000,
19
+ });
20
+ await component.update(_jsx(CypherEditor, { value: query, lint: true }));
21
+ await editorPage.getEditor().fill('METCH (n) RETURN n');
22
+ await editorPage.checkErrorMessage('METCH', 'Unrecognized keyword. Did you mean MATCH?');
23
+ });
24
+ test('Syntactic errors are surfaced', async ({ page, mount }) => {
25
+ const editorPage = new CypherEditorPage(page);
26
+ const query = 'METCH (n) RETURN n';
27
+ await mount(_jsx(CypherEditor, { value: query }));
28
+ await editorPage.checkErrorMessage('METCH', 'Unrecognized keyword. Did you mean MATCH?');
29
+ });
30
+ test('Errors for undefined labels are surfaced', async ({ page, mount }) => {
31
+ const editorPage = new CypherEditorPage(page);
32
+ const query = 'MATCH (n: Person) RETURN n';
33
+ await mount(_jsx(CypherEditor, { value: query, schema: { labels: ['Movie'], relationshipTypes: [] } }));
34
+ await editorPage.checkWarningMessage('Person', "Label Person is not present in the database. Make sure you didn't misspell it or that it is available when you run this statement in your application");
35
+ });
36
+ test('Errors for multiline undefined labels are highlighted correctly', async ({ page, mount, }) => {
37
+ const editorPage = new CypherEditorPage(page);
38
+ const query = `MATCH (n:\`Foo
39
+ Bar\`) RETURN n`;
40
+ const expectedMsg = `Label \`Foo
41
+ Bar\` is not present in the database. Make sure you didn't misspell it or that it is available when you run this statement in your application`;
42
+ await mount(_jsx(CypherEditor, { value: query, schema: { labels: ['Movie'], relationshipTypes: [] } }));
43
+ await editorPage.checkWarningMessage('`Foo', expectedMsg);
44
+ await editorPage.checkWarningMessage('Bar`', expectedMsg);
45
+ });
46
+ test('Semantic errors are surfaced when there are no syntactic errors', async ({ page, mount, }) => {
47
+ const editorPage = new CypherEditorPage(page);
48
+ const query = 'MATCH (n) RETURN m';
49
+ await mount(_jsx(CypherEditor, { value: query }));
50
+ await editorPage.checkErrorMessage('m', 'Variable `m` not defined');
51
+ });
52
+ test('Semantic errors are correctly accumulated', async ({ page, mount }) => {
53
+ const editorPage = new CypherEditorPage(page);
54
+ const query = 'CALL { MATCH (n) } IN TRANSACTIONS OF -1 ROWS';
55
+ await mount(_jsx(CypherEditor, { value: query }));
56
+ await editorPage.checkErrorMessage('MATCH (n)', 'Query cannot conclude with MATCH (must be a RETURN clause, an update clause, a unit subquery call, or a procedure call with no YIELD)');
57
+ await editorPage.checkErrorMessage('-1', "Invalid input. '-1' is not a valid value. Must be a positive integer");
58
+ });
59
+ test('Multiline errors are correctly placed', async ({ page, mount }) => {
60
+ const editorPage = new CypherEditorPage(page);
61
+ const query = `CALL {
62
+ MATCH (n)
63
+ } IN TRANSACTIONS
64
+ OF -1 ROWS`;
65
+ await mount(_jsx(CypherEditor, { value: query }));
66
+ await editorPage.checkErrorMessage('MATCH (n)', 'Query cannot conclude with MATCH (must be a RETURN clause, an update clause, a unit subquery call, or a procedure call with no YIELD)');
67
+ await editorPage.checkErrorMessage('-1', "Invalid input. '-1' is not a valid value. Must be a positive integer");
68
+ });
69
+ test('Validation errors are correctly overlapped', async ({ page, mount }) => {
70
+ const editorPage = new CypherEditorPage(page);
71
+ const query = `CALL { MATCH (n)
72
+ RETURN n
73
+ } IN TRANSACTIONS
74
+ OF -1 ROWS`;
75
+ await mount(_jsx(CypherEditor, { value: query }));
76
+ await editorPage.checkErrorMessage('-1', 'Query cannot conclude with CALL (must be a RETURN clause, an update clause, a unit subquery call, or a procedure call with no YIELD)');
77
+ await editorPage.checkErrorMessage('-1', "Invalid input. '-1' is not a valid value. Must be a positive integer");
78
+ });
79
+ //# sourceMappingURL=syntax-validation.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syntax-validation.spec.js","sourceRoot":"","sources":["../../src/e2e_tests/syntax-validation.spec.tsx"],"names":[],"mappings":"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"}