@lvce-editor/panel-worker 2.13.4 → 2.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/panelWorkerMain.js +160 -200
- package/package.json +1 -1
package/dist/panelWorkerMain.js
CHANGED
|
@@ -657,6 +657,9 @@ const restoreExistingError = (error, currentStack) => {
|
|
|
657
657
|
};
|
|
658
658
|
const restoreMethodNotFoundError = (error, currentStack) => {
|
|
659
659
|
const restoredError = new JsonRpcError(error.message);
|
|
660
|
+
Object.assign(restoredError, {
|
|
661
|
+
code: error.code
|
|
662
|
+
});
|
|
660
663
|
const parentStack = getParentStack(error);
|
|
661
664
|
setStack(restoredError, `${parentStack}${NewLine}${currentStack}`);
|
|
662
665
|
return restoredError;
|
|
@@ -676,9 +679,13 @@ const applyDataProperties = (restoredError, error) => {
|
|
|
676
679
|
// @ts-ignore
|
|
677
680
|
restoredError.codeFrame = error.data.codeFrame;
|
|
678
681
|
}
|
|
679
|
-
if (error.data.code) {
|
|
682
|
+
if (typeof error.data.code === 'string' || typeof error.data.code === 'number') {
|
|
680
683
|
// @ts-ignore
|
|
681
|
-
restoredError
|
|
684
|
+
Object.defineProperty(restoredError, 'code', {
|
|
685
|
+
configurable: true,
|
|
686
|
+
value: error.data.code,
|
|
687
|
+
writable: true
|
|
688
|
+
});
|
|
682
689
|
}
|
|
683
690
|
if (error.data.type) {
|
|
684
691
|
// @ts-ignore
|
|
@@ -699,7 +706,14 @@ const applyDirectProperties = (restoredError, error) => {
|
|
|
699
706
|
}
|
|
700
707
|
};
|
|
701
708
|
const restoreMessageError = (error, _currentStack) => {
|
|
702
|
-
const restoredError = constructError(error.message, error.type, error.name);
|
|
709
|
+
const restoredError = constructError(error.message, error.type || error.data?.type, error.name);
|
|
710
|
+
if (typeof error.code === 'string' || typeof error.code === 'number') {
|
|
711
|
+
Object.defineProperty(restoredError, 'code', {
|
|
712
|
+
configurable: true,
|
|
713
|
+
value: error.code,
|
|
714
|
+
writable: true
|
|
715
|
+
});
|
|
716
|
+
}
|
|
703
717
|
if (error.data) {
|
|
704
718
|
applyDataProperties(restoredError, error);
|
|
705
719
|
} else {
|
|
@@ -707,6 +721,23 @@ const restoreMessageError = (error, _currentStack) => {
|
|
|
707
721
|
}
|
|
708
722
|
return restoredError;
|
|
709
723
|
};
|
|
724
|
+
const getFallbackMessage = error => {
|
|
725
|
+
if (error && typeof error.message === 'string' && error.message) {
|
|
726
|
+
return error.message;
|
|
727
|
+
}
|
|
728
|
+
if (error && error.data) {
|
|
729
|
+
return getFallbackMessage(error.data);
|
|
730
|
+
}
|
|
731
|
+
const stringified = String(error);
|
|
732
|
+
if (stringified !== '[object Object]') {
|
|
733
|
+
return stringified;
|
|
734
|
+
}
|
|
735
|
+
try {
|
|
736
|
+
return JSON.stringify(error);
|
|
737
|
+
} catch {
|
|
738
|
+
return stringified;
|
|
739
|
+
}
|
|
740
|
+
};
|
|
710
741
|
const restoreJsonRpcError = error => {
|
|
711
742
|
const currentStack = getCurrentStack();
|
|
712
743
|
if (error && error instanceof Error) {
|
|
@@ -715,13 +746,13 @@ const restoreJsonRpcError = error => {
|
|
|
715
746
|
if (error && error.code && error.code === MethodNotFound) {
|
|
716
747
|
return restoreMethodNotFoundError(error, currentStack);
|
|
717
748
|
}
|
|
749
|
+
if (error && error.error) {
|
|
750
|
+
return restoreJsonRpcError(error.error);
|
|
751
|
+
}
|
|
718
752
|
if (error && error.message) {
|
|
719
753
|
return restoreMessageError(error);
|
|
720
754
|
}
|
|
721
|
-
|
|
722
|
-
return new Error(`JsonRpc Error: ${error}`);
|
|
723
|
-
}
|
|
724
|
-
return new Error(`JsonRpc Error: ${error}`);
|
|
755
|
+
return new Error(`JsonRpc Error: ${getFallbackMessage(error)}`);
|
|
725
756
|
};
|
|
726
757
|
const unwrapJsonRpcResult = responseMessage => {
|
|
727
758
|
if ('error' in responseMessage) {
|
|
@@ -778,9 +809,9 @@ const getErrorProperty = (error, prettyError) => {
|
|
|
778
809
|
return {
|
|
779
810
|
code: Custom,
|
|
780
811
|
data: {
|
|
781
|
-
code: prettyError.code,
|
|
812
|
+
code: prettyError.code ?? error?.code,
|
|
782
813
|
codeFrame: prettyError.codeFrame,
|
|
783
|
-
name: prettyError.name,
|
|
814
|
+
name: prettyError.name ?? error?.name,
|
|
784
815
|
stack: getStack(prettyError),
|
|
785
816
|
type: getErrorType(prettyError)
|
|
786
817
|
},
|
|
@@ -815,7 +846,12 @@ const getErrorResponseSimple = (id, error) => {
|
|
|
815
846
|
return {
|
|
816
847
|
error: {
|
|
817
848
|
code: Custom,
|
|
818
|
-
data: error
|
|
849
|
+
data: error instanceof Error ? {
|
|
850
|
+
...error,
|
|
851
|
+
code: 'code' in error ? error.code : undefined,
|
|
852
|
+
stack: error.stack,
|
|
853
|
+
type: error.name
|
|
854
|
+
} : error,
|
|
819
855
|
// @ts-ignore
|
|
820
856
|
message: error.message
|
|
821
857
|
},
|
|
@@ -997,6 +1033,9 @@ const logError = () => {
|
|
|
997
1033
|
// handled by renderer worker
|
|
998
1034
|
};
|
|
999
1035
|
const handleMessage = event => {
|
|
1036
|
+
if (event.data === 'ready') {
|
|
1037
|
+
return Promise.resolve();
|
|
1038
|
+
}
|
|
1000
1039
|
const actualRequiresSocket = event?.target?.requiresSocket || requiresSocket;
|
|
1001
1040
|
const actualExecute = event?.target?.execute || execute;
|
|
1002
1041
|
return handleJsonRpcMessage(event.target, event.data, actualExecute, event.target._resolve, preparePrettyError, logError, actualRequiresSocket);
|
|
@@ -1121,175 +1160,11 @@ const Tab$1 = 'tab';
|
|
|
1121
1160
|
const TabList = 'tablist';
|
|
1122
1161
|
const ToolBar = 'toolbar';
|
|
1123
1162
|
|
|
1124
|
-
const Audio = 0;
|
|
1125
1163
|
const Button$1 = 1;
|
|
1126
|
-
const Col = 2;
|
|
1127
|
-
const ColGroup = 3;
|
|
1128
1164
|
const Div = 4;
|
|
1129
|
-
const H1 = 5;
|
|
1130
|
-
const Input = 6;
|
|
1131
|
-
const Kbd = 7;
|
|
1132
|
-
const Span = 8;
|
|
1133
|
-
const Table = 9;
|
|
1134
|
-
const TBody = 10;
|
|
1135
|
-
const Td = 11;
|
|
1136
1165
|
const Text = 12;
|
|
1137
|
-
const Th = 13;
|
|
1138
|
-
const THead = 14;
|
|
1139
|
-
const Tr = 15;
|
|
1140
|
-
const I = 16;
|
|
1141
|
-
const Img = 17;
|
|
1142
|
-
const Root = 0;
|
|
1143
|
-
const Ins = 20;
|
|
1144
|
-
const Del = 21;
|
|
1145
|
-
const H2 = 22;
|
|
1146
|
-
const H3 = 23;
|
|
1147
|
-
const H4 = 24;
|
|
1148
|
-
const H5 = 25;
|
|
1149
|
-
const H6 = 26;
|
|
1150
|
-
const Article = 27;
|
|
1151
|
-
const Aside = 28;
|
|
1152
|
-
const Footer = 29;
|
|
1153
|
-
const Header = 30;
|
|
1154
|
-
const Nav = 40;
|
|
1155
|
-
const Section = 41;
|
|
1156
|
-
const Search = 42;
|
|
1157
|
-
const Dd = 43;
|
|
1158
|
-
const Dl = 44;
|
|
1159
|
-
const Figcaption = 45;
|
|
1160
|
-
const Figure = 46;
|
|
1161
|
-
const Hr = 47;
|
|
1162
|
-
const Li = 48;
|
|
1163
|
-
const Ol = 49;
|
|
1164
|
-
const P = 50;
|
|
1165
|
-
const Pre = 51;
|
|
1166
|
-
const A = 53;
|
|
1167
|
-
const Abbr = 54;
|
|
1168
|
-
const Br = 55;
|
|
1169
|
-
const Cite = 56;
|
|
1170
|
-
const Data = 57;
|
|
1171
|
-
const Time = 58;
|
|
1172
|
-
const Tfoot = 59;
|
|
1173
|
-
const Ul = 60;
|
|
1174
|
-
const Video = 61;
|
|
1175
|
-
const TextArea = 62;
|
|
1176
|
-
const Select = 63;
|
|
1177
|
-
const Option = 64;
|
|
1178
|
-
const Code = 65;
|
|
1179
|
-
const Label = 66;
|
|
1180
|
-
const Dt = 67;
|
|
1181
|
-
const Iframe = 68;
|
|
1182
|
-
const Main = 69;
|
|
1183
|
-
const Strong = 70;
|
|
1184
|
-
const Em = 71;
|
|
1185
|
-
const Style = 72;
|
|
1186
|
-
const Html = 73;
|
|
1187
|
-
const Head = 74;
|
|
1188
|
-
const Title = 75;
|
|
1189
|
-
const Meta = 76;
|
|
1190
|
-
const Canvas = 77;
|
|
1191
|
-
const Form = 78;
|
|
1192
|
-
const BlockQuote = 79;
|
|
1193
|
-
const Quote = 80;
|
|
1194
|
-
const Circle = 81;
|
|
1195
|
-
const Defs = 82;
|
|
1196
|
-
const Ellipse = 83;
|
|
1197
|
-
const G = 84;
|
|
1198
|
-
const Line = 85;
|
|
1199
|
-
const Path = 86;
|
|
1200
|
-
const Polygon = 87;
|
|
1201
|
-
const Polyline = 88;
|
|
1202
|
-
const Rect = 89;
|
|
1203
|
-
const Svg = 90;
|
|
1204
|
-
const Use = 91;
|
|
1205
1166
|
const Reference = 100;
|
|
1206
1167
|
|
|
1207
|
-
const VirtualDomElements = {
|
|
1208
|
-
__proto__: null,
|
|
1209
|
-
A,
|
|
1210
|
-
Abbr,
|
|
1211
|
-
Article,
|
|
1212
|
-
Aside,
|
|
1213
|
-
Audio,
|
|
1214
|
-
BlockQuote,
|
|
1215
|
-
Br,
|
|
1216
|
-
Button: Button$1,
|
|
1217
|
-
Canvas,
|
|
1218
|
-
Circle,
|
|
1219
|
-
Cite,
|
|
1220
|
-
Code,
|
|
1221
|
-
Col,
|
|
1222
|
-
ColGroup,
|
|
1223
|
-
Data,
|
|
1224
|
-
Dd,
|
|
1225
|
-
Defs,
|
|
1226
|
-
Del,
|
|
1227
|
-
Div,
|
|
1228
|
-
Dl,
|
|
1229
|
-
Dt,
|
|
1230
|
-
Ellipse,
|
|
1231
|
-
Em,
|
|
1232
|
-
Figcaption,
|
|
1233
|
-
Figure,
|
|
1234
|
-
Footer,
|
|
1235
|
-
Form,
|
|
1236
|
-
G,
|
|
1237
|
-
H1,
|
|
1238
|
-
H2,
|
|
1239
|
-
H3,
|
|
1240
|
-
H4,
|
|
1241
|
-
H5,
|
|
1242
|
-
H6,
|
|
1243
|
-
Head,
|
|
1244
|
-
Header,
|
|
1245
|
-
Hr,
|
|
1246
|
-
Html,
|
|
1247
|
-
I,
|
|
1248
|
-
Iframe,
|
|
1249
|
-
Img,
|
|
1250
|
-
Input,
|
|
1251
|
-
Ins,
|
|
1252
|
-
Kbd,
|
|
1253
|
-
Label,
|
|
1254
|
-
Li,
|
|
1255
|
-
Line,
|
|
1256
|
-
Main,
|
|
1257
|
-
Meta,
|
|
1258
|
-
Nav,
|
|
1259
|
-
Ol,
|
|
1260
|
-
Option,
|
|
1261
|
-
P,
|
|
1262
|
-
Path,
|
|
1263
|
-
Polygon,
|
|
1264
|
-
Polyline,
|
|
1265
|
-
Pre,
|
|
1266
|
-
Quote,
|
|
1267
|
-
Rect,
|
|
1268
|
-
Reference,
|
|
1269
|
-
Root,
|
|
1270
|
-
Search,
|
|
1271
|
-
Section,
|
|
1272
|
-
Select,
|
|
1273
|
-
Span,
|
|
1274
|
-
Strong,
|
|
1275
|
-
Style,
|
|
1276
|
-
Svg,
|
|
1277
|
-
TBody,
|
|
1278
|
-
THead,
|
|
1279
|
-
Table,
|
|
1280
|
-
Td,
|
|
1281
|
-
Text,
|
|
1282
|
-
TextArea,
|
|
1283
|
-
Tfoot,
|
|
1284
|
-
Th,
|
|
1285
|
-
Time,
|
|
1286
|
-
Title,
|
|
1287
|
-
Tr,
|
|
1288
|
-
Ul,
|
|
1289
|
-
Use,
|
|
1290
|
-
Video
|
|
1291
|
-
};
|
|
1292
|
-
|
|
1293
1168
|
const Button = 'event.button';
|
|
1294
1169
|
const ClientX = 'event.clientX';
|
|
1295
1170
|
const ClientY = 'event.clientY';
|
|
@@ -1332,7 +1207,8 @@ const create$1 = () => {
|
|
|
1332
1207
|
const commandQueues = new Map();
|
|
1333
1208
|
const generations = Object.create(null);
|
|
1334
1209
|
const states = Object.create(null);
|
|
1335
|
-
const commandMapRef =
|
|
1210
|
+
const commandMapRef = Object.create(null);
|
|
1211
|
+
const commandsById = Object.create(null);
|
|
1336
1212
|
const getGeneration = uid => generations[uid] || 0;
|
|
1337
1213
|
const isCurrentGeneration = (uid, generation) => {
|
|
1338
1214
|
return states[uid] !== undefined && getGeneration(uid) === generation;
|
|
@@ -1394,6 +1270,18 @@ const create$1 = () => {
|
|
|
1394
1270
|
delete states[key];
|
|
1395
1271
|
}
|
|
1396
1272
|
},
|
|
1273
|
+
createDirectEventCommandMap(requestRender) {
|
|
1274
|
+
return {
|
|
1275
|
+
async 'Viewlet.executeViewletCommand'(uid, command, ...args) {
|
|
1276
|
+
const fn = commandsById[command];
|
|
1277
|
+
if (!fn) {
|
|
1278
|
+
throw new Error(`Viewlet command not found: ${command}`);
|
|
1279
|
+
}
|
|
1280
|
+
await fn(uid, ...args);
|
|
1281
|
+
await requestRender(uid);
|
|
1282
|
+
}
|
|
1283
|
+
};
|
|
1284
|
+
},
|
|
1397
1285
|
diff(uid, modules, numbers) {
|
|
1398
1286
|
const {
|
|
1399
1287
|
oldState,
|
|
@@ -1425,6 +1313,9 @@ const create$1 = () => {
|
|
|
1425
1313
|
},
|
|
1426
1314
|
registerCommands(commandMap) {
|
|
1427
1315
|
Object.assign(commandMapRef, commandMap);
|
|
1316
|
+
for (const [key, fn] of Object.entries(commandMap)) {
|
|
1317
|
+
commandsById[toCommandId(key)] = fn;
|
|
1318
|
+
}
|
|
1428
1319
|
},
|
|
1429
1320
|
set(uid, oldState, newState, scheduledState) {
|
|
1430
1321
|
const current = states[uid];
|
|
@@ -1851,9 +1742,10 @@ const handleFilterInput = async (state, value) => {
|
|
|
1851
1742
|
};
|
|
1852
1743
|
|
|
1853
1744
|
const remoteSshWorkspacePrefix = 'remote-ssh://';
|
|
1745
|
+
const devContainerWorkspacePrefix = 'devcontainers:///';
|
|
1854
1746
|
const getPanelViews = (workspaceUri = '') => {
|
|
1855
1747
|
const views = [Problems, Output, DebugConsole, Terminals];
|
|
1856
|
-
if (workspaceUri.startsWith(remoteSshWorkspacePrefix)) {
|
|
1748
|
+
if (workspaceUri.startsWith(remoteSshWorkspacePrefix) || workspaceUri.startsWith(devContainerWorkspacePrefix)) {
|
|
1857
1749
|
views.push(Ports);
|
|
1858
1750
|
}
|
|
1859
1751
|
return views;
|
|
@@ -2034,8 +1926,6 @@ const text = data => {
|
|
|
2034
1926
|
};
|
|
2035
1927
|
};
|
|
2036
1928
|
|
|
2037
|
-
new Set(Object.values(VirtualDomElements));
|
|
2038
|
-
|
|
2039
1929
|
const SetText = 1;
|
|
2040
1930
|
const Replace = 2;
|
|
2041
1931
|
const SetAttribute = 3;
|
|
@@ -2046,6 +1936,7 @@ const NavigateParent = 8;
|
|
|
2046
1936
|
const RemoveChild = 9;
|
|
2047
1937
|
const NavigateSibling = 10;
|
|
2048
1938
|
const SetReferenceNodeUid = 11;
|
|
1939
|
+
const MultiNavigation = 18;
|
|
2049
1940
|
|
|
2050
1941
|
const isKey = key => {
|
|
2051
1942
|
return key !== 'type' && key !== 'childCount';
|
|
@@ -2106,6 +1997,55 @@ const getChildrenWithCount = (nodes, startIndex, childCount) => {
|
|
|
2106
1997
|
};
|
|
2107
1998
|
};
|
|
2108
1999
|
|
|
2000
|
+
const isNavigationPatch = patch => {
|
|
2001
|
+
switch (patch.type) {
|
|
2002
|
+
case NavigateChild:
|
|
2003
|
+
case NavigateParent:
|
|
2004
|
+
case NavigateSibling:
|
|
2005
|
+
return true;
|
|
2006
|
+
default:
|
|
2007
|
+
return false;
|
|
2008
|
+
}
|
|
2009
|
+
};
|
|
2010
|
+
const getNavigationIndex = patch => {
|
|
2011
|
+
switch (patch.type) {
|
|
2012
|
+
case NavigateChild:
|
|
2013
|
+
case NavigateSibling:
|
|
2014
|
+
return patch.index;
|
|
2015
|
+
default:
|
|
2016
|
+
return 0;
|
|
2017
|
+
}
|
|
2018
|
+
};
|
|
2019
|
+
const appendNavigationPatch = (patches, type, index) => {
|
|
2020
|
+
const previousPatch = patches.at(-1);
|
|
2021
|
+
if (!previousPatch) {
|
|
2022
|
+
patches.push(type === NavigateParent ? {
|
|
2023
|
+
type
|
|
2024
|
+
} : {
|
|
2025
|
+
index,
|
|
2026
|
+
type
|
|
2027
|
+
});
|
|
2028
|
+
return;
|
|
2029
|
+
}
|
|
2030
|
+
if (previousPatch.type === MultiNavigation) {
|
|
2031
|
+
previousPatch.navigations.push(type, index);
|
|
2032
|
+
return;
|
|
2033
|
+
}
|
|
2034
|
+
if (isNavigationPatch(previousPatch)) {
|
|
2035
|
+
patches[patches.length - 1] = {
|
|
2036
|
+
navigations: [previousPatch.type, getNavigationIndex(previousPatch), type, index],
|
|
2037
|
+
type: MultiNavigation
|
|
2038
|
+
};
|
|
2039
|
+
return;
|
|
2040
|
+
}
|
|
2041
|
+
patches.push(type === NavigateParent ? {
|
|
2042
|
+
type
|
|
2043
|
+
} : {
|
|
2044
|
+
index,
|
|
2045
|
+
type
|
|
2046
|
+
});
|
|
2047
|
+
};
|
|
2048
|
+
|
|
2109
2049
|
const compareNodes = (oldNode, newNode) => {
|
|
2110
2050
|
// Check if node type changed - return null to signal incompatible nodes
|
|
2111
2051
|
// (caller should handle this with a Replace operation)
|
|
@@ -2156,34 +2096,31 @@ const compareNodes = (oldNode, newNode) => {
|
|
|
2156
2096
|
};
|
|
2157
2097
|
|
|
2158
2098
|
const treeToArray = node => {
|
|
2159
|
-
const result = [
|
|
2160
|
-
|
|
2161
|
-
|
|
2099
|
+
const result = [];
|
|
2100
|
+
const stack = [node];
|
|
2101
|
+
while (stack.length > 0) {
|
|
2102
|
+
const current = stack.pop();
|
|
2103
|
+
result.push(current.node);
|
|
2104
|
+
for (let i = current.children.length - 1; i >= 0; i--) {
|
|
2105
|
+
stack.push(current.children[i]);
|
|
2106
|
+
}
|
|
2162
2107
|
}
|
|
2163
2108
|
return result;
|
|
2164
2109
|
};
|
|
2165
2110
|
|
|
2166
2111
|
const navigateToChild = (patches, currentChildIndex, index) => {
|
|
2167
2112
|
if (currentChildIndex === -1) {
|
|
2168
|
-
patches
|
|
2169
|
-
type: NavigateChild,
|
|
2170
|
-
index
|
|
2171
|
-
});
|
|
2113
|
+
appendNavigationPatch(patches, NavigateChild, index);
|
|
2172
2114
|
return index;
|
|
2173
2115
|
}
|
|
2174
2116
|
if (currentChildIndex !== index) {
|
|
2175
|
-
patches
|
|
2176
|
-
type: NavigateSibling,
|
|
2177
|
-
index
|
|
2178
|
-
});
|
|
2117
|
+
appendNavigationPatch(patches, NavigateSibling, index);
|
|
2179
2118
|
}
|
|
2180
2119
|
return index;
|
|
2181
2120
|
};
|
|
2182
2121
|
const navigateToParent = (patches, currentChildIndex) => {
|
|
2183
2122
|
if (currentChildIndex >= 0) {
|
|
2184
|
-
patches
|
|
2185
|
-
type: NavigateParent
|
|
2186
|
-
});
|
|
2123
|
+
appendNavigationPatch(patches, NavigateParent, 0);
|
|
2187
2124
|
}
|
|
2188
2125
|
return -1;
|
|
2189
2126
|
};
|
|
@@ -2199,6 +2136,29 @@ const replaceTree = (newNode, patches) => {
|
|
|
2199
2136
|
nodes: treeToArray(newNode)
|
|
2200
2137
|
});
|
|
2201
2138
|
};
|
|
2139
|
+
const appendPatch = (patches, patch) => {
|
|
2140
|
+
switch (patch.type) {
|
|
2141
|
+
case MultiNavigation:
|
|
2142
|
+
for (let i = 0; i < patch.navigations.length; i += 2) {
|
|
2143
|
+
appendNavigationPatch(patches, patch.navigations[i], patch.navigations[i + 1]);
|
|
2144
|
+
}
|
|
2145
|
+
return;
|
|
2146
|
+
case NavigateChild:
|
|
2147
|
+
case NavigateSibling:
|
|
2148
|
+
appendNavigationPatch(patches, patch.type, patch.index);
|
|
2149
|
+
return;
|
|
2150
|
+
case NavigateParent:
|
|
2151
|
+
appendNavigationPatch(patches, patch.type, 0);
|
|
2152
|
+
return;
|
|
2153
|
+
default:
|
|
2154
|
+
patches.push(patch);
|
|
2155
|
+
}
|
|
2156
|
+
};
|
|
2157
|
+
const appendPatches = (patches, newPatches) => {
|
|
2158
|
+
for (const patch of newPatches) {
|
|
2159
|
+
appendPatch(patches, patch);
|
|
2160
|
+
}
|
|
2161
|
+
};
|
|
2202
2162
|
const diffExistingChild = (oldNode, newNode, patches, currentChildIndex, index) => {
|
|
2203
2163
|
const nodePatches = compareNodes(oldNode.node, newNode.node);
|
|
2204
2164
|
if (nodePatches === null) {
|
|
@@ -2207,16 +2167,16 @@ const diffExistingChild = (oldNode, newNode, patches, currentChildIndex, index)
|
|
|
2207
2167
|
return nextChildIndex;
|
|
2208
2168
|
}
|
|
2209
2169
|
const hasChildrenToCompare = oldNode.children.length > 0 || newNode.children.length > 0;
|
|
2210
|
-
|
|
2170
|
+
const childPatches = [];
|
|
2171
|
+
if (hasChildrenToCompare) {
|
|
2172
|
+
diffChildren(oldNode.children, newNode.children, childPatches);
|
|
2173
|
+
}
|
|
2174
|
+
if (nodePatches.length === 0 && childPatches.length === 0) {
|
|
2211
2175
|
return currentChildIndex;
|
|
2212
2176
|
}
|
|
2213
2177
|
const nextChildIndex = navigateToChild(patches, currentChildIndex, index);
|
|
2214
|
-
|
|
2215
|
-
|
|
2216
|
-
}
|
|
2217
|
-
if (hasChildrenToCompare) {
|
|
2218
|
-
diffChildren(oldNode.children, newNode.children, patches);
|
|
2219
|
-
}
|
|
2178
|
+
patches.push(...nodePatches);
|
|
2179
|
+
appendPatches(patches, childPatches);
|
|
2220
2180
|
return nextChildIndex;
|
|
2221
2181
|
};
|
|
2222
2182
|
const diffRootNode = (oldNode, newNode, patches) => {
|
|
@@ -2272,7 +2232,7 @@ const diffTrees = (oldTree, newTree, patches, path) => {
|
|
|
2272
2232
|
const removeTrailingNavigationPatches = patches => {
|
|
2273
2233
|
while (patches.length > 0) {
|
|
2274
2234
|
const patch = patches.at(-1);
|
|
2275
|
-
if (patch.type !== NavigateChild && patch.type !== NavigateParent && patch.type !== NavigateSibling) {
|
|
2235
|
+
if (patch.type !== NavigateChild && patch.type !== NavigateParent && patch.type !== NavigateSibling && patch.type !== MultiNavigation) {
|
|
2276
2236
|
break;
|
|
2277
2237
|
}
|
|
2278
2238
|
patches.pop();
|