mirror of
https://github.com/BookStackApp/BookStack.git
synced 2026-02-05 00:29:48 +03:00
Packages: Updated npm packages
Spent way too many hours debugging through issues from jsdom changes.
This commit is contained in:
3179
package-lock.json
generated
3179
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
46
package.json
46
package.json
@@ -19,43 +19,43 @@
|
||||
"test": "jest"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@eslint/js": "^9.21.0",
|
||||
"@lezer/generator": "^1.7.2",
|
||||
"@eslint/js": "^9.34.0",
|
||||
"@lezer/generator": "^1.8.0",
|
||||
"@types/markdown-it": "^14.1.2",
|
||||
"@types/sortablejs": "^1.15.8",
|
||||
"chokidar-cli": "^3.0",
|
||||
"esbuild": "^0.25.0",
|
||||
"eslint": "^9.21.0",
|
||||
"eslint-plugin-import": "^2.31.0",
|
||||
"jest": "^29.7.0",
|
||||
"jest-environment-jsdom": "^29.7.0",
|
||||
"livereload": "^0.9.3",
|
||||
"esbuild": "^0.25.9",
|
||||
"eslint": "^9.34.0",
|
||||
"eslint-plugin-import": "^2.32.0",
|
||||
"jest": "^30.1.1",
|
||||
"jest-environment-jsdom": "^30.1.1",
|
||||
"livereload": "^0.10.3",
|
||||
"npm-run-all": "^4.1.5",
|
||||
"sass": "^1.85.0",
|
||||
"ts-jest": "^29.2.6",
|
||||
"sass": "^1.91.0",
|
||||
"ts-jest": "^29.4.1",
|
||||
"ts-node": "^10.9.2",
|
||||
"typescript": "5.7.*"
|
||||
"typescript": "5.9.*"
|
||||
},
|
||||
"dependencies": {
|
||||
"@codemirror/commands": "^6.8.0",
|
||||
"@codemirror/commands": "^6.8.1",
|
||||
"@codemirror/lang-css": "^6.3.1",
|
||||
"@codemirror/lang-html": "^6.4.9",
|
||||
"@codemirror/lang-javascript": "^6.2.3",
|
||||
"@codemirror/lang-json": "^6.0.1",
|
||||
"@codemirror/lang-markdown": "^6.3.2",
|
||||
"@codemirror/lang-php": "^6.0.1",
|
||||
"@codemirror/lang-javascript": "^6.2.4",
|
||||
"@codemirror/lang-json": "^6.0.2",
|
||||
"@codemirror/lang-markdown": "^6.3.4",
|
||||
"@codemirror/lang-php": "^6.0.2",
|
||||
"@codemirror/lang-xml": "^6.1.0",
|
||||
"@codemirror/language": "^6.10.8",
|
||||
"@codemirror/legacy-modes": "^6.4.3",
|
||||
"@codemirror/language": "^6.11.3",
|
||||
"@codemirror/legacy-modes": "^6.5.1",
|
||||
"@codemirror/state": "^6.5.2",
|
||||
"@codemirror/theme-one-dark": "^6.1.2",
|
||||
"@codemirror/view": "^6.36.3",
|
||||
"@codemirror/theme-one-dark": "^6.1.3",
|
||||
"@codemirror/view": "^6.38.1",
|
||||
"@lezer/highlight": "^1.2.1",
|
||||
"@ssddanbrown/codemirror-lang-smarty": "^1.0.0",
|
||||
"@ssddanbrown/codemirror-lang-twig": "^1.0.0",
|
||||
"@types/jest": "^29.5.14",
|
||||
"codemirror": "^6.0.1",
|
||||
"idb-keyval": "^6.2.1",
|
||||
"@types/jest": "^30.0.0",
|
||||
"codemirror": "^6.0.2",
|
||||
"idb-keyval": "^6.2.2",
|
||||
"markdown-it": "^14.1.0",
|
||||
"markdown-it-task-lists": "^2.1.1",
|
||||
"snabbdom": "^3.6.2",
|
||||
|
||||
@@ -2708,6 +2708,8 @@ export function updateDOMSelection(
|
||||
const range = document.createRange();
|
||||
range.selectNode(selectionTarget);
|
||||
selectionRect = range.getBoundingClientRect();
|
||||
} else if (selectionTarget instanceof Range) {
|
||||
selectionRect = selectionTarget.getBoundingClientRect();
|
||||
} else {
|
||||
selectionRect = selectionTarget.getBoundingClientRect();
|
||||
}
|
||||
|
||||
@@ -2510,8 +2510,8 @@ describe('LexicalEditor tests', () => {
|
||||
);
|
||||
});
|
||||
|
||||
expect(onError).toBeCalledWith(updateError);
|
||||
expect(textListener).toBeCalledWith('Hello\n\nworld');
|
||||
expect(onError).toHaveBeenCalledWith(updateError);
|
||||
expect(textListener).toHaveBeenCalledWith('Hello\n\nworld');
|
||||
expect(updateListener.mock.lastCall[0].prevEditorState).toBe(editorState);
|
||||
});
|
||||
|
||||
|
||||
@@ -138,7 +138,7 @@ describe('LexicalNode tests', () => {
|
||||
const validNode = new TextNode(textNode.__text, textNode.__key);
|
||||
expect(textNode.getLatest()).toBe(textNode);
|
||||
expect(validNode.getLatest()).toBe(textNode);
|
||||
expect(() => new TestNode(textNode.__key)).toThrowError(
|
||||
expect(() => new TestNode(textNode.__key)).toThrow(
|
||||
/TestNode.*re-use key.*TextNode/,
|
||||
);
|
||||
});
|
||||
|
||||
@@ -864,4 +864,26 @@ export function dispatchEditorMouseClick(editor: LexicalEditor, clientX: number,
|
||||
});
|
||||
dom?.dispatchEvent(event);
|
||||
editor.commitUpdates();
|
||||
}
|
||||
|
||||
export function patchRange() {
|
||||
const RangePrototype = Object.getPrototypeOf(document.createRange());
|
||||
RangePrototype.getBoundingClientRect = function (): DOMRect {
|
||||
const rect = {
|
||||
bottom: 0,
|
||||
height: 0,
|
||||
left: 0,
|
||||
right: 0,
|
||||
top: 0,
|
||||
width: 0,
|
||||
x: 0,
|
||||
y: 0,
|
||||
};
|
||||
return {
|
||||
...rect,
|
||||
toJSON() {
|
||||
return rect;
|
||||
},
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -18,10 +18,12 @@ import {
|
||||
} from 'lexical';
|
||||
|
||||
import {
|
||||
$createTestElementNode,
|
||||
createTestEditor,
|
||||
$createTestElementNode,
|
||||
createTestEditor, patchRange,
|
||||
} from '../../../__tests__/utils';
|
||||
|
||||
patchRange();
|
||||
|
||||
describe('LexicalElementNode tests', () => {
|
||||
let container: HTMLElement;
|
||||
|
||||
@@ -54,6 +56,7 @@ describe('LexicalElementNode tests', () => {
|
||||
|
||||
editor = createTestEditor();
|
||||
editor.setRootElement(root);
|
||||
root.focus();
|
||||
|
||||
// Insert initial block
|
||||
await update(() => {
|
||||
@@ -63,11 +66,11 @@ describe('LexicalElementNode tests', () => {
|
||||
// Prevent text nodes from combining.
|
||||
text2.setMode('segmented');
|
||||
const text3 = $createTextNode('Baz');
|
||||
// Some operations require a selection to exist, hence
|
||||
// we make a selection in the setup code.
|
||||
text.select(0, 0);
|
||||
block.append(text, text2, text3);
|
||||
$getRoot().append(block);
|
||||
// Some operations require a selection to exist, hence
|
||||
// we make a selection in the setup code.
|
||||
text.select(0, 0);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -146,12 +146,12 @@ describe('LexicalHeadlessEditor', () => {
|
||||
editor.dispatchCommand(CONTROLLED_TEXT_INSERTION_COMMAND, 'foo');
|
||||
});
|
||||
|
||||
expect(onUpdate).toBeCalled();
|
||||
expect(onCommand).toBeCalledWith('foo', expect.anything());
|
||||
expect(onTransform).toBeCalledWith(
|
||||
expect(onUpdate).toHaveBeenCalled();
|
||||
expect(onCommand).toHaveBeenCalledWith('foo', expect.anything());
|
||||
expect(onTransform).toHaveBeenCalledWith(
|
||||
expect.objectContaining({__type: 'paragraph'}),
|
||||
);
|
||||
expect(onTextContent).toBeCalledWith('Helloworld');
|
||||
expect(onTextContent).toHaveBeenCalledWith('Helloworld');
|
||||
});
|
||||
|
||||
it('can preserve selection for pending editor state (within update loop)', async () => {
|
||||
|
||||
@@ -37,12 +37,12 @@ import {
|
||||
TextNode,
|
||||
} from 'lexical';
|
||||
import {
|
||||
$assertRangeSelection,
|
||||
$createTestDecoratorNode,
|
||||
$createTestElementNode,
|
||||
createTestEditor,
|
||||
initializeClipboard,
|
||||
invariant,
|
||||
$assertRangeSelection,
|
||||
$createTestDecoratorNode,
|
||||
$createTestElementNode,
|
||||
createTestEditor,
|
||||
initializeClipboard,
|
||||
invariant, patchRange,
|
||||
} from 'lexical/__tests__/utils';
|
||||
|
||||
import {
|
||||
@@ -91,24 +91,7 @@ jest.mock('lexical/shared/environment', () => {
|
||||
return {...originalModule, IS_FIREFOX: true};
|
||||
});
|
||||
|
||||
Range.prototype.getBoundingClientRect = function (): DOMRect {
|
||||
const rect = {
|
||||
bottom: 0,
|
||||
height: 0,
|
||||
left: 0,
|
||||
right: 0,
|
||||
top: 0,
|
||||
width: 0,
|
||||
x: 0,
|
||||
y: 0,
|
||||
};
|
||||
return {
|
||||
...rect,
|
||||
toJSON() {
|
||||
return rect;
|
||||
},
|
||||
};
|
||||
};
|
||||
patchRange();
|
||||
|
||||
describe('LexicalSelection tests', () => {
|
||||
let container: HTMLElement;
|
||||
|
||||
@@ -422,9 +422,6 @@ export function setNativeSelection(
|
||||
range.setEnd(focusNode, focusOffset);
|
||||
domSelection.removeAllRanges();
|
||||
domSelection.addRange(range);
|
||||
Promise.resolve().then(() => {
|
||||
document.dispatchEvent(new Event('selectionchange'));
|
||||
});
|
||||
}
|
||||
|
||||
export function setNativeSelectionWithPaths(
|
||||
@@ -647,6 +644,8 @@ export async function applySelectionInputs(
|
||||
editor: LexicalEditor,
|
||||
) {
|
||||
const rootElement = editor.getRootElement()!;
|
||||
// Set initial focus as if we're in the editor
|
||||
rootElement.focus();
|
||||
|
||||
for (let i = 0; i < inputs.length; i++) {
|
||||
const input = inputs[i];
|
||||
|
||||
@@ -114,7 +114,7 @@ describe('LexicalTableNode tests', () => {
|
||||
});
|
||||
// Make sure paragraph is inserted inside empty cells
|
||||
expect(testEnv.innerHTML).toBe(
|
||||
`<table style="border-collapse: collapse; table-layout: fixed; width: 468pt;"><colgroup><col><col></colgroup><tr style="height: 22.015pt;"><td style="border-left: 1pt solid #000000; border-right: 1pt solid #000000; border-bottom: 1pt solid #000000; border-top: 1pt solid #000000; vertical-align: top; padding: 5pt 5pt 5pt 5pt; overflow: hidden; overflow-wrap: break-word;"><p><span style="color: rgb(0, 0, 0);" data-lexical-text="true">Hello there</span></p></td><td style="border-left: 1pt solid #000000; border-right: 1pt solid #000000; border-bottom: 1pt solid #000000; border-top: 1pt solid #000000; vertical-align: top; padding: 5pt 5pt 5pt 5pt; overflow: hidden; overflow-wrap: break-word;"><p><span style="color: rgb(0, 0, 0);" data-lexical-text="true">General Kenobi!</span></p></td></tr><tr style="height: 22.015pt;"><td style="border-left: 1pt solid #000000; border-right: 1pt solid #000000; border-bottom: 1pt solid #000000; border-top: 1pt solid #000000; vertical-align: top; padding: 5pt 5pt 5pt 5pt; overflow: hidden; overflow-wrap: break-word;"><p><span style="color: rgb(0, 0, 0);" data-lexical-text="true">Lexical is nice</span></p></td><td style="border-left: 1pt solid #000000; border-right: 1pt solid #000000; border-bottom: 1pt solid #000000; border-top: 1pt solid #000000; vertical-align: top; padding: 5pt 5pt 5pt 5pt; overflow: hidden; overflow-wrap: break-word;"><p><br></p></td></tr></table>`,
|
||||
`<table style="border-collapse: collapse; table-layout: fixed; width: 468pt;"><colgroup><col><col></colgroup><tr style="height: 22.015pt;"><td style="border-left: 1pt solid rgb(0, 0, 0); border-right: 1pt solid rgb(0, 0, 0); border-bottom: 1pt solid rgb(0, 0, 0); border-top: 1pt solid rgb(0, 0, 0); vertical-align: top; padding: 5pt 5pt 5pt 5pt; overflow: hidden; overflow-wrap: break-word;"><p><span style="color: rgb(0, 0, 0);" data-lexical-text="true">Hello there</span></p></td><td style="border-left: 1pt solid rgb(0, 0, 0); border-right: 1pt solid rgb(0, 0, 0); border-bottom: 1pt solid rgb(0, 0, 0); border-top: 1pt solid rgb(0, 0, 0); vertical-align: top; padding: 5pt 5pt 5pt 5pt; overflow: hidden; overflow-wrap: break-word;"><p><span style="color: rgb(0, 0, 0);" data-lexical-text="true">General Kenobi!</span></p></td></tr><tr style="height: 22.015pt;"><td style="border-left: 1pt solid rgb(0, 0, 0); border-right: 1pt solid rgb(0, 0, 0); border-bottom: 1pt solid rgb(0, 0, 0); border-top: 1pt solid rgb(0, 0, 0); vertical-align: top; padding: 5pt 5pt 5pt 5pt; overflow: hidden; overflow-wrap: break-word;"><p><span style="color: rgb(0, 0, 0);" data-lexical-text="true">Lexical is nice</span></p></td><td style="border-left: 1pt solid rgb(0, 0, 0); border-right: 1pt solid rgb(0, 0, 0); border-bottom: 1pt solid rgb(0, 0, 0); border-top: 1pt solid rgb(0, 0, 0); vertical-align: top; padding: 5pt 5pt 5pt 5pt; overflow: hidden; overflow-wrap: break-word;"><p><br></p></td></tr></table>`,
|
||||
);
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user