sibujs 1.5.0 → 2.1.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/browser.cjs +332 -121
- package/dist/browser.d.cts +5 -0
- package/dist/browser.d.ts +5 -0
- package/dist/browser.js +6 -6
- package/dist/build.cjs +1049 -344
- package/dist/build.js +15 -13
- package/dist/cdn.global.js +17 -16
- package/dist/chunk-2RA7SHDA.js +65 -0
- package/dist/chunk-2UPRY23K.js +80 -0
- package/dist/{chunk-BMPL52BF.js → chunk-3DZP6OIT.js} +118 -66
- package/dist/chunk-3JHCYHWN.js +125 -0
- package/dist/{chunk-CZUGLNJS.js → chunk-45YP72ZQ.js} +3 -3
- package/dist/{chunk-JCDUJN2F.js → chunk-AMK2TYNW.js} +490 -153
- package/dist/{chunk-NHUC2QWH.js → chunk-CWBVQML6.js} +1 -1
- package/dist/{chunk-XHK6BDAJ.js → chunk-DRUZZAK4.js} +25 -8
- package/dist/{chunk-RJ46C3CS.js → chunk-GWWURC5M.js} +71 -20
- package/dist/{chunk-3X2YG6YM.js → chunk-JYD2PWXH.js} +59 -28
- package/dist/{chunk-2BYQDGN3.js → chunk-KGYT6UO6.js} +234 -63
- package/dist/{chunk-5X6PP2UK.js → chunk-LMLD24FC.js} +2 -2
- package/dist/{chunk-M4NLBH4I.js → chunk-LYTCUZ7H.js} +3 -2
- package/dist/{chunk-XUEEGU5O.js → chunk-NASX6ST2.js} +16 -4
- package/dist/{chunk-VQDZK23A.js → chunk-O6EFQ3KT.js} +181 -66
- package/dist/{chunk-BGN5ZMP4.js → chunk-OJ3P4ECI.js} +14 -2
- package/dist/chunk-ON5MMR2J.js +1327 -0
- package/dist/{chunk-SFKNRVCU.js → chunk-P2HSJDDN.js} +135 -79
- package/dist/chunk-QO3WC6FS.js +384 -0
- package/dist/{chunk-WZSPOOER.js → chunk-RDTDJCAB.js} +8 -5
- package/dist/{chunk-7GRNSCFT.js → chunk-TH2ILCYW.js} +312 -185
- package/dist/chunk-UCS6AMJ7.js +79 -0
- package/dist/{chunk-VAPYJN4X.js → chunk-V6C4FADE.js} +93 -23
- package/dist/{chunk-OUZZEE4S.js → chunk-WANSMF2L.js} +17 -11
- package/dist/{chunk-23VV7YD3.js → chunk-WIPZPFBQ.js} +25 -30
- package/dist/chunk-WZA53FXU.js +149 -0
- package/dist/{chunk-BGTHZHJ5.js → chunk-ZAQSMOED.js} +188 -44
- package/dist/{customElement-BL3Uo8dL.d.cts → customElement-CPfIrbvg.d.cts} +14 -10
- package/dist/{customElement-BL3Uo8dL.d.ts → customElement-CPfIrbvg.d.ts} +14 -10
- package/dist/data.cjs +536 -151
- package/dist/data.d.cts +20 -2
- package/dist/data.d.ts +20 -2
- package/dist/data.js +11 -9
- package/dist/devtools.cjs +613 -266
- package/dist/devtools.d.cts +1 -1
- package/dist/devtools.d.ts +1 -1
- package/dist/devtools.js +12 -6
- package/dist/ecosystem.cjs +602 -197
- package/dist/ecosystem.d.cts +9 -7
- package/dist/ecosystem.d.ts +9 -7
- package/dist/ecosystem.js +12 -11
- package/dist/extras.cjs +3500 -1608
- package/dist/extras.d.cts +9 -9
- package/dist/extras.d.ts +9 -9
- package/dist/extras.js +58 -45
- package/dist/index.cjs +1055 -344
- package/dist/index.d.cts +85 -8
- package/dist/index.d.ts +85 -8
- package/dist/index.js +32 -16
- package/dist/{introspect-BumjnBKr.d.cts → introspect-2TOlQ7oa.d.cts} +25 -3
- package/dist/{introspect-CZrlcaYy.d.ts → introspect-DnIpHQQz.d.ts} +25 -3
- package/dist/motion.cjs +122 -63
- package/dist/motion.js +4 -4
- package/dist/patterns.cjs +450 -110
- package/dist/patterns.d.cts +11 -12
- package/dist/patterns.d.ts +11 -12
- package/dist/patterns.js +7 -7
- package/dist/performance.cjs +373 -149
- package/dist/performance.d.cts +23 -16
- package/dist/performance.d.ts +23 -16
- package/dist/performance.js +13 -8
- package/dist/plugin-D30wlGW5.d.cts +71 -0
- package/dist/plugin-D30wlGW5.d.ts +71 -0
- package/dist/plugins.cjs +729 -301
- package/dist/plugins.d.cts +10 -3
- package/dist/plugins.d.ts +10 -3
- package/dist/plugins.js +106 -38
- package/dist/{ssr-Do_SiVoL.d.cts → ssr-CrVNy6Pa.d.cts} +9 -15
- package/dist/{ssr-Do_SiVoL.d.ts → ssr-CrVNy6Pa.d.ts} +9 -15
- package/dist/{ssr-4PBXAOO3.js → ssr-FXD2PPMC.js} +4 -3
- package/dist/ssr.cjs +736 -274
- package/dist/ssr.d.cts +26 -6
- package/dist/ssr.d.ts +26 -6
- package/dist/ssr.js +12 -11
- package/dist/{tagFactory-DaJ0YWX6.d.cts → tagFactory-S17H2qxu.d.cts} +9 -1
- package/dist/{tagFactory-DaJ0YWX6.d.ts → tagFactory-S17H2qxu.d.ts} +9 -1
- package/dist/testing.cjs +303 -76
- package/dist/testing.d.cts +17 -4
- package/dist/testing.d.ts +17 -4
- package/dist/testing.js +100 -44
- package/dist/ui.cjs +589 -178
- package/dist/ui.d.cts +1 -1
- package/dist/ui.d.ts +1 -1
- package/dist/ui.js +20 -17
- package/dist/widgets.cjs +1103 -146
- package/dist/widgets.d.cts +104 -2
- package/dist/widgets.d.ts +104 -2
- package/dist/widgets.js +9 -7
- package/package.json +8 -2
- package/dist/chunk-32DY64NT.js +0 -282
- package/dist/chunk-3AIRKM3B.js +0 -1263
- package/dist/chunk-3ARAQO7B.js +0 -398
- package/dist/chunk-3CRQALYP.js +0 -877
- package/dist/chunk-4EI4AG32.js +0 -482
- package/dist/chunk-4MYMUBRS.js +0 -21
- package/dist/chunk-5ZYQ6KDD.js +0 -154
- package/dist/chunk-6BMPXPUW.js +0 -26
- package/dist/chunk-6HLLIF3K.js +0 -398
- package/dist/chunk-6LSNVCS2.js +0 -937
- package/dist/chunk-6SA3QQES.js +0 -61
- package/dist/chunk-77L6NL3X.js +0 -1097
- package/dist/chunk-7BF6TK55.js +0 -1097
- package/dist/chunk-7TQKR4PP.js +0 -294
- package/dist/chunk-7V26P53V.js +0 -712
- package/dist/chunk-AZ3ISID5.js +0 -298
- package/dist/chunk-B7SWRFUT.js +0 -332
- package/dist/chunk-BTU3TJDS.js +0 -365
- package/dist/chunk-BW3WT46K.js +0 -937
- package/dist/chunk-C6KFWOFV.js +0 -616
- package/dist/chunk-CHF5OHIA.js +0 -61
- package/dist/chunk-CHJ27IGK.js +0 -26
- package/dist/chunk-CMBFNA7L.js +0 -27
- package/dist/chunk-DAHRH4ON.js +0 -331
- package/dist/chunk-DKOHBI74.js +0 -924
- package/dist/chunk-DTCOOBMX.js +0 -725
- package/dist/chunk-EBGIRKQY.js +0 -616
- package/dist/chunk-EUZND3CB.js +0 -27
- package/dist/chunk-EVCZO745.js +0 -365
- package/dist/chunk-EWFVA3TJ.js +0 -282
- package/dist/chunk-F3FA4F32.js +0 -292
- package/dist/chunk-FGOEVHY3.js +0 -60
- package/dist/chunk-G3BOQPVO.js +0 -365
- package/dist/chunk-GCOK2LC3.js +0 -282
- package/dist/chunk-GJPXRJ45.js +0 -37
- package/dist/chunk-HGMJFBC7.js +0 -654
- package/dist/chunk-JAKHTMQU.js +0 -1000
- package/dist/chunk-JCI5M6U6.js +0 -956
- package/dist/chunk-K4G4ZQNR.js +0 -286
- package/dist/chunk-K5ZUMYVS.js +0 -89
- package/dist/chunk-KQPDEVVS.js +0 -398
- package/dist/chunk-L6JRBDNS.js +0 -60
- package/dist/chunk-LA6KQEDU.js +0 -712
- package/dist/chunk-MB6QFH3I.js +0 -2776
- package/dist/chunk-MDVXJWFN.js +0 -304
- package/dist/chunk-MEZVEBPN.js +0 -2008
- package/dist/chunk-MK4ERFYL.js +0 -2249
- package/dist/chunk-MLKGABMK.js +0 -9
- package/dist/chunk-MQ5GOYPH.js +0 -2249
- package/dist/chunk-MYRV7VDM.js +0 -742
- package/dist/chunk-N6IZB6KJ.js +0 -567
- package/dist/chunk-NEKUBFPT.js +0 -60
- package/dist/chunk-NMRUZALC.js +0 -1097
- package/dist/chunk-NYVAC6P5.js +0 -37
- package/dist/chunk-NZIIMDWI.js +0 -84
- package/dist/chunk-OF7UZIVB.js +0 -725
- package/dist/chunk-P3XWXJZU.js +0 -282
- package/dist/chunk-P6W3STU4.js +0 -2249
- package/dist/chunk-PBHF5WKN.js +0 -616
- package/dist/chunk-PDZQY43A.js +0 -616
- package/dist/chunk-PTQJDMRT.js +0 -146
- package/dist/chunk-PZEGYCF5.js +0 -61
- package/dist/chunk-QBMDLBU2.js +0 -975
- package/dist/chunk-QWZG56ET.js +0 -2744
- package/dist/chunk-RQGQSLQK.js +0 -725
- package/dist/chunk-SDLZDHKP.js +0 -107
- package/dist/chunk-TDGZL5CU.js +0 -365
- package/dist/chunk-TNQWPPE6.js +0 -37
- package/dist/chunk-TSOKIX5Z.js +0 -654
- package/dist/chunk-UHNL42EF.js +0 -2730
- package/dist/chunk-UNXCEF6S.js +0 -21
- package/dist/chunk-V2XTI523.js +0 -347
- package/dist/chunk-VAU366PN.js +0 -2241
- package/dist/chunk-VMVDTCXB.js +0 -712
- package/dist/chunk-VQNQZCWJ.js +0 -61
- package/dist/chunk-VRW3FULF.js +0 -725
- package/dist/chunk-WADYRCO2.js +0 -304
- package/dist/chunk-WILQZRO4.js +0 -282
- package/dist/chunk-WR5D4EGH.js +0 -26
- package/dist/chunk-WUHJISPP.js +0 -298
- package/dist/chunk-XYU6TZOW.js +0 -182
- package/dist/chunk-Y6GP4QGG.js +0 -276
- package/dist/chunk-YECR7UIA.js +0 -347
- package/dist/chunk-YUTWTI4B.js +0 -654
- package/dist/chunk-Z65KYU7I.js +0 -26
- package/dist/chunk-Z6POF5YC.js +0 -975
- package/dist/chunk-ZBJP6WFL.js +0 -482
- package/dist/chunk-ZD6OAMTH.js +0 -277
- package/dist/chunk-ZWKZCBO6.js +0 -317
- package/dist/contracts-DDrwxvJ-.d.cts +0 -245
- package/dist/contracts-DDrwxvJ-.d.ts +0 -245
- package/dist/contracts-DOrhwbke.d.cts +0 -245
- package/dist/contracts-DOrhwbke.d.ts +0 -245
- package/dist/contracts-xo5ckdRP.d.cts +0 -240
- package/dist/contracts-xo5ckdRP.d.ts +0 -240
- package/dist/customElement-BKQfbSZQ.d.cts +0 -262
- package/dist/customElement-BKQfbSZQ.d.ts +0 -262
- package/dist/customElement-D2DJp_xn.d.cts +0 -313
- package/dist/customElement-D2DJp_xn.d.ts +0 -313
- package/dist/customElement-yz8uyk-0.d.cts +0 -308
- package/dist/customElement-yz8uyk-0.d.ts +0 -308
- package/dist/introspect-Cb0zgpi2.d.cts +0 -477
- package/dist/introspect-Y2xNXGSf.d.ts +0 -477
- package/dist/plugin-Bek4RhJY.d.cts +0 -43
- package/dist/plugin-Bek4RhJY.d.ts +0 -43
- package/dist/ssr-3RXHP5ES.js +0 -38
- package/dist/ssr-6GIMY5MX.js +0 -38
- package/dist/ssr-BA6sxxUd.d.cts +0 -135
- package/dist/ssr-BA6sxxUd.d.ts +0 -135
- package/dist/ssr-WKUPVSSK.js +0 -36
- package/dist/tagFactory-Dl8QCLga.d.cts +0 -23
- package/dist/tagFactory-Dl8QCLga.d.ts +0 -23
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
effect
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-WZA53FXU.js";
|
|
4
4
|
import {
|
|
5
5
|
signal
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-RDTDJCAB.js";
|
|
7
|
+
import {
|
|
8
|
+
devWarn,
|
|
9
|
+
isDev
|
|
10
|
+
} from "./chunk-LMLD24FC.js";
|
|
7
11
|
|
|
8
12
|
// src/performance/scheduler.ts
|
|
9
13
|
var Priority = {
|
|
@@ -16,7 +20,9 @@ var Priority = {
|
|
|
16
20
|
var taskIdCounter = 0;
|
|
17
21
|
var taskQueue = [];
|
|
18
22
|
var isProcessing = false;
|
|
19
|
-
var
|
|
23
|
+
var scheduledKind = null;
|
|
24
|
+
var scheduledHandle = null;
|
|
25
|
+
var microtaskScheduled = false;
|
|
20
26
|
function insertTask(task) {
|
|
21
27
|
let i = taskQueue.length;
|
|
22
28
|
while (i > 0 && taskQueue[i - 1].priority > task.priority) {
|
|
@@ -51,30 +57,38 @@ function processQueue() {
|
|
|
51
57
|
}
|
|
52
58
|
}
|
|
53
59
|
function scheduleFrame() {
|
|
54
|
-
if (
|
|
60
|
+
if (scheduledKind !== null || microtaskScheduled) return;
|
|
55
61
|
const nextTask = taskQueue.find((t) => !t.cancelled);
|
|
56
62
|
if (!nextTask) return;
|
|
57
63
|
if (nextTask.priority <= Priority.USER_BLOCKING) {
|
|
64
|
+
microtaskScheduled = true;
|
|
65
|
+
scheduledKind = "microtask";
|
|
58
66
|
queueMicrotask(() => {
|
|
59
|
-
|
|
67
|
+
microtaskScheduled = false;
|
|
68
|
+
scheduledKind = null;
|
|
60
69
|
processQueue();
|
|
61
70
|
});
|
|
62
|
-
frameId = -1;
|
|
63
71
|
} else if (nextTask.priority === Priority.IDLE) {
|
|
64
72
|
if (typeof requestIdleCallback !== "undefined") {
|
|
65
|
-
|
|
66
|
-
|
|
73
|
+
scheduledKind = "idle";
|
|
74
|
+
scheduledHandle = requestIdleCallback(() => {
|
|
75
|
+
scheduledKind = null;
|
|
76
|
+
scheduledHandle = null;
|
|
67
77
|
processQueue();
|
|
68
78
|
});
|
|
69
79
|
} else {
|
|
70
|
-
|
|
71
|
-
|
|
80
|
+
scheduledKind = "timeout";
|
|
81
|
+
scheduledHandle = setTimeout(() => {
|
|
82
|
+
scheduledKind = null;
|
|
83
|
+
scheduledHandle = null;
|
|
72
84
|
processQueue();
|
|
73
85
|
}, 50);
|
|
74
86
|
}
|
|
75
87
|
} else {
|
|
76
|
-
|
|
77
|
-
|
|
88
|
+
scheduledKind = "frame";
|
|
89
|
+
scheduledHandle = requestAnimationFrame(() => {
|
|
90
|
+
scheduledKind = null;
|
|
91
|
+
scheduledHandle = null;
|
|
78
92
|
processQueue();
|
|
79
93
|
});
|
|
80
94
|
}
|
|
@@ -102,6 +116,15 @@ function scheduleUpdate(priority, callback) {
|
|
|
102
116
|
};
|
|
103
117
|
}
|
|
104
118
|
function flushScheduler() {
|
|
119
|
+
if (scheduledHandle !== null) {
|
|
120
|
+
if (scheduledKind === "frame") cancelAnimationFrame(scheduledHandle);
|
|
121
|
+
else if (scheduledKind === "idle" && typeof cancelIdleCallback !== "undefined") {
|
|
122
|
+
cancelIdleCallback(scheduledHandle);
|
|
123
|
+
} else if (scheduledKind === "timeout") clearTimeout(scheduledHandle);
|
|
124
|
+
}
|
|
125
|
+
scheduledHandle = null;
|
|
126
|
+
scheduledKind = null;
|
|
127
|
+
microtaskScheduled = false;
|
|
105
128
|
while (taskQueue.length > 0) {
|
|
106
129
|
const task = taskQueue.shift();
|
|
107
130
|
if (!task) break;
|
|
@@ -110,7 +133,6 @@ function flushScheduler() {
|
|
|
110
133
|
}
|
|
111
134
|
}
|
|
112
135
|
isProcessing = false;
|
|
113
|
-
frameId = null;
|
|
114
136
|
}
|
|
115
137
|
function pendingTasks() {
|
|
116
138
|
return taskQueue.filter((t) => !t.cancelled).length;
|
|
@@ -172,6 +194,7 @@ function uniqueId(suffix) {
|
|
|
172
194
|
}
|
|
173
195
|
|
|
174
196
|
// src/performance/domRecycler.ts
|
|
197
|
+
var _isDev = isDev();
|
|
175
198
|
var DOMPool = class {
|
|
176
199
|
constructor(maxSize = 50) {
|
|
177
200
|
this.pools = /* @__PURE__ */ new Map();
|
|
@@ -191,8 +214,18 @@ var DOMPool = class {
|
|
|
191
214
|
/**
|
|
192
215
|
* Return an element to the pool for reuse.
|
|
193
216
|
* Clears attributes, children, and event listeners.
|
|
217
|
+
*
|
|
218
|
+
* Contract: the caller MUST detach the element from the DOM (and run any
|
|
219
|
+
* `dispose()` on bound reactive subscriptions) BEFORE calling `release()`.
|
|
220
|
+
* Releasing a connected element leaves it visible while it is mutated and
|
|
221
|
+
* is almost certainly a bug.
|
|
194
222
|
*/
|
|
195
223
|
release(element) {
|
|
224
|
+
if (_isDev && element.isConnected) {
|
|
225
|
+
devWarn(
|
|
226
|
+
"DOMPool.release() called on a still-connected element. Detach it from the DOM first (remove() / dispose())."
|
|
227
|
+
);
|
|
228
|
+
}
|
|
196
229
|
const tag = element.tagName.toLowerCase();
|
|
197
230
|
let pool = this.pools.get(tag);
|
|
198
231
|
if (!pool) {
|
|
@@ -228,7 +261,11 @@ var DOMPool = class {
|
|
|
228
261
|
return result;
|
|
229
262
|
}
|
|
230
263
|
};
|
|
231
|
-
var
|
|
264
|
+
var _defaultPool = null;
|
|
265
|
+
function getDOMPool() {
|
|
266
|
+
if (_defaultPool === null) _defaultPool = new DOMPool();
|
|
267
|
+
return _defaultPool;
|
|
268
|
+
}
|
|
232
269
|
var preloadedResources = /* @__PURE__ */ new Set();
|
|
233
270
|
function preloadResource(url, type = "fetch") {
|
|
234
271
|
if (preloadedResources.has(url)) return;
|
|
@@ -458,31 +495,45 @@ function createChunkRegistry(config = {}) {
|
|
|
458
495
|
const pending = /* @__PURE__ */ new Map();
|
|
459
496
|
const preloaded = /* @__PURE__ */ new Set();
|
|
460
497
|
function evict() {
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
498
|
+
while (cache.size >= maxCacheSize) {
|
|
499
|
+
let lru = null;
|
|
500
|
+
let lruTime = Infinity;
|
|
501
|
+
for (const [key, entry] of cache) {
|
|
502
|
+
if (entry.lastAccess < lruTime) {
|
|
503
|
+
lruTime = entry.lastAccess;
|
|
504
|
+
lru = key;
|
|
505
|
+
}
|
|
468
506
|
}
|
|
507
|
+
if (!lru) return;
|
|
508
|
+
cache.delete(lru);
|
|
469
509
|
}
|
|
470
|
-
if (oldest) cache.delete(oldest);
|
|
471
510
|
}
|
|
472
511
|
function isValid(entry) {
|
|
473
512
|
if (cacheTTL === 0) return true;
|
|
474
513
|
return Date.now() - entry.timestamp < cacheTTL;
|
|
475
514
|
}
|
|
476
515
|
async function loadWithRetry(id, loader, attempt = 0) {
|
|
516
|
+
let timeoutHandle = null;
|
|
477
517
|
try {
|
|
478
|
-
const result = await (timeout > 0 ? Promise
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
)
|
|
483
|
-
|
|
518
|
+
const result = await (timeout > 0 ? new Promise((resolve, reject) => {
|
|
519
|
+
timeoutHandle = setTimeout(
|
|
520
|
+
() => reject(new Error(`Chunk '${id}' loading timed out after ${timeout}ms`)),
|
|
521
|
+
timeout
|
|
522
|
+
);
|
|
523
|
+
loader().then(
|
|
524
|
+
(v) => {
|
|
525
|
+
if (timeoutHandle !== null) clearTimeout(timeoutHandle);
|
|
526
|
+
resolve(v);
|
|
527
|
+
},
|
|
528
|
+
(e) => {
|
|
529
|
+
if (timeoutHandle !== null) clearTimeout(timeoutHandle);
|
|
530
|
+
reject(e);
|
|
531
|
+
}
|
|
532
|
+
);
|
|
533
|
+
}) : loader());
|
|
484
534
|
return result;
|
|
485
535
|
} catch (err) {
|
|
536
|
+
if (timeoutHandle !== null) clearTimeout(timeoutHandle);
|
|
486
537
|
if (attempt < retries) {
|
|
487
538
|
await new Promise((r) => setTimeout(r, retryDelay * (attempt + 1)));
|
|
488
539
|
return loadWithRetry(id, loader, attempt + 1);
|
|
@@ -490,49 +541,48 @@ function createChunkRegistry(config = {}) {
|
|
|
490
541
|
throw err;
|
|
491
542
|
}
|
|
492
543
|
}
|
|
544
|
+
async function loadFn(id, loader) {
|
|
545
|
+
const cached = cache.get(id);
|
|
546
|
+
if (cached && isValid(cached)) {
|
|
547
|
+
cached.accessCount++;
|
|
548
|
+
cached.lastAccess = Date.now();
|
|
549
|
+
return cached.value;
|
|
550
|
+
}
|
|
551
|
+
const pendingLoad = pending.get(id);
|
|
552
|
+
if (pendingLoad) return pendingLoad;
|
|
553
|
+
onLoadStart?.(id);
|
|
554
|
+
const loadPromise = loadWithRetry(id, loader).then((value) => {
|
|
555
|
+
evict();
|
|
556
|
+
const now = Date.now();
|
|
557
|
+
cache.set(id, { value, timestamp: now, lastAccess: now, accessCount: 1 });
|
|
558
|
+
pending.delete(id);
|
|
559
|
+
onLoadEnd?.(id);
|
|
560
|
+
return value;
|
|
561
|
+
}).catch((err) => {
|
|
562
|
+
pending.delete(id);
|
|
563
|
+
const error = err instanceof Error ? err : new Error(String(err));
|
|
564
|
+
onLoadError?.(id, error);
|
|
565
|
+
throw error;
|
|
566
|
+
});
|
|
567
|
+
pending.set(id, loadPromise);
|
|
568
|
+
return loadPromise;
|
|
569
|
+
}
|
|
570
|
+
function preloadFn(id, loader) {
|
|
571
|
+
if (cache.has(id) || pending.has(id) || preloaded.has(id)) return;
|
|
572
|
+
preloaded.add(id);
|
|
573
|
+
loadFn(id, loader).catch(() => {
|
|
574
|
+
preloaded.delete(id);
|
|
575
|
+
});
|
|
576
|
+
}
|
|
493
577
|
return {
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
*/
|
|
497
|
-
async load(id, loader) {
|
|
498
|
-
const cached = cache.get(id);
|
|
499
|
-
if (cached && isValid(cached)) {
|
|
500
|
-
cached.accessCount++;
|
|
501
|
-
return cached.value;
|
|
502
|
-
}
|
|
503
|
-
const pendingLoad = pending.get(id);
|
|
504
|
-
if (pendingLoad) return pendingLoad;
|
|
505
|
-
onLoadStart?.(id);
|
|
506
|
-
const loadPromise = loadWithRetry(id, loader).then((value) => {
|
|
507
|
-
evict();
|
|
508
|
-
cache.set(id, { value, timestamp: Date.now(), accessCount: 1 });
|
|
509
|
-
pending.delete(id);
|
|
510
|
-
onLoadEnd?.(id);
|
|
511
|
-
return value;
|
|
512
|
-
}).catch((err) => {
|
|
513
|
-
pending.delete(id);
|
|
514
|
-
const error = err instanceof Error ? err : new Error(String(err));
|
|
515
|
-
onLoadError?.(id, error);
|
|
516
|
-
throw error;
|
|
517
|
-
});
|
|
518
|
-
pending.set(id, loadPromise);
|
|
519
|
-
return loadPromise;
|
|
520
|
-
},
|
|
521
|
-
/**
|
|
522
|
-
* Preload a chunk without blocking. Silently caches for later use.
|
|
523
|
-
*/
|
|
524
|
-
preload(id, loader) {
|
|
525
|
-
if (cache.has(id) || pending.has(id) || preloaded.has(id)) return;
|
|
526
|
-
preloaded.add(id);
|
|
527
|
-
this.load(id, loader).catch(() => {
|
|
528
|
-
});
|
|
529
|
-
},
|
|
578
|
+
load: loadFn,
|
|
579
|
+
preload: preloadFn,
|
|
530
580
|
/**
|
|
531
581
|
* Preload multiple chunks in parallel.
|
|
532
582
|
*/
|
|
533
583
|
preloadAll(entries) {
|
|
534
584
|
for (const entry of entries) {
|
|
535
|
-
|
|
585
|
+
preloadFn(entry.id, entry.loader);
|
|
536
586
|
}
|
|
537
587
|
},
|
|
538
588
|
/**
|
|
@@ -549,6 +599,7 @@ function createChunkRegistry(config = {}) {
|
|
|
549
599
|
const entry = cache.get(id);
|
|
550
600
|
if (entry && isValid(entry)) {
|
|
551
601
|
entry.accessCount++;
|
|
602
|
+
entry.lastAccess = Date.now();
|
|
552
603
|
return entry.value;
|
|
553
604
|
}
|
|
554
605
|
return void 0;
|
|
@@ -558,6 +609,7 @@ function createChunkRegistry(config = {}) {
|
|
|
558
609
|
*/
|
|
559
610
|
invalidate(id) {
|
|
560
611
|
cache.delete(id);
|
|
612
|
+
preloaded.delete(id);
|
|
561
613
|
},
|
|
562
614
|
/**
|
|
563
615
|
* Clear all cached chunks.
|
|
@@ -630,7 +682,7 @@ export {
|
|
|
630
682
|
setIdPrefix,
|
|
631
683
|
uniqueId,
|
|
632
684
|
DOMPool,
|
|
633
|
-
|
|
685
|
+
getDOMPool,
|
|
634
686
|
preloadResource,
|
|
635
687
|
prefetch,
|
|
636
688
|
preloadImage,
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
// src/plugins/plugin.ts
|
|
2
|
+
function createPluginRegistry() {
|
|
3
|
+
const installedPlugins = /* @__PURE__ */ new Set();
|
|
4
|
+
const hooks = { init: [], mount: [], unmount: [], error: [] };
|
|
5
|
+
const provided = /* @__PURE__ */ new Map();
|
|
6
|
+
const registry = {
|
|
7
|
+
installedPlugins,
|
|
8
|
+
hooks,
|
|
9
|
+
provided,
|
|
10
|
+
plugin(p, options) {
|
|
11
|
+
if (installedPlugins.has(p.name)) {
|
|
12
|
+
console.warn(`[Plugin] "${p.name}" is already installed.`);
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
const ctx = {
|
|
16
|
+
onInit: (cb) => hooks.init.push(cb),
|
|
17
|
+
onMount: (cb) => hooks.mount.push(cb),
|
|
18
|
+
onUnmount: (cb) => hooks.unmount.push(cb),
|
|
19
|
+
onError: (cb) => hooks.error.push(cb),
|
|
20
|
+
provide: (key, value) => provided.set(key, value)
|
|
21
|
+
};
|
|
22
|
+
const initHooksBefore = hooks.init.length;
|
|
23
|
+
p.install(ctx, options);
|
|
24
|
+
installedPlugins.add(p.name);
|
|
25
|
+
const justAdded = hooks.init.slice(initHooksBefore);
|
|
26
|
+
for (const cb of justAdded) {
|
|
27
|
+
try {
|
|
28
|
+
cb();
|
|
29
|
+
} catch (e) {
|
|
30
|
+
console.error(`[Plugin] "${p.name}" init error:`, e);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
inject(key, defaultValue) {
|
|
35
|
+
if (provided.has(key)) return provided.get(key);
|
|
36
|
+
if (defaultValue !== void 0) return defaultValue;
|
|
37
|
+
throw new Error(`[Plugin] No provider found for key "${key}"`);
|
|
38
|
+
},
|
|
39
|
+
triggerMount(element) {
|
|
40
|
+
const snapshot = hooks.mount.slice();
|
|
41
|
+
for (const hook of snapshot) {
|
|
42
|
+
try {
|
|
43
|
+
hook(element);
|
|
44
|
+
} catch (e) {
|
|
45
|
+
console.error("[Plugin] Mount hook error:", e);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
triggerUnmount(element) {
|
|
50
|
+
const snapshot = hooks.unmount.slice();
|
|
51
|
+
for (const hook of snapshot) {
|
|
52
|
+
try {
|
|
53
|
+
hook(element);
|
|
54
|
+
} catch (e) {
|
|
55
|
+
console.error("[Plugin] Unmount hook error:", e);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
triggerError(error) {
|
|
60
|
+
const snapshot = hooks.error.slice();
|
|
61
|
+
for (const hook of snapshot) {
|
|
62
|
+
try {
|
|
63
|
+
hook(error);
|
|
64
|
+
} catch (e) {
|
|
65
|
+
console.error("[Plugin] Error hook error:", e);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
reset() {
|
|
70
|
+
installedPlugins.clear();
|
|
71
|
+
hooks.init.length = 0;
|
|
72
|
+
hooks.mount.length = 0;
|
|
73
|
+
hooks.unmount.length = 0;
|
|
74
|
+
hooks.error.length = 0;
|
|
75
|
+
provided.clear();
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
return registry;
|
|
79
|
+
}
|
|
80
|
+
var defaultRegistry = createPluginRegistry();
|
|
81
|
+
var defaultRegistryTouched = false;
|
|
82
|
+
function createPlugin(name, install) {
|
|
83
|
+
return { name, install };
|
|
84
|
+
}
|
|
85
|
+
function plugin(plugin2, options) {
|
|
86
|
+
defaultRegistryTouched = true;
|
|
87
|
+
defaultRegistry.plugin(plugin2, options);
|
|
88
|
+
}
|
|
89
|
+
function inject(key, defaultValue) {
|
|
90
|
+
return defaultRegistry.inject(key, defaultValue);
|
|
91
|
+
}
|
|
92
|
+
function triggerPluginMount(element) {
|
|
93
|
+
defaultRegistry.triggerMount(element);
|
|
94
|
+
}
|
|
95
|
+
function triggerPluginUnmount(element) {
|
|
96
|
+
defaultRegistry.triggerUnmount(element);
|
|
97
|
+
}
|
|
98
|
+
function triggerPluginError(error) {
|
|
99
|
+
defaultRegistry.triggerError(error);
|
|
100
|
+
}
|
|
101
|
+
function resetPlugins() {
|
|
102
|
+
defaultRegistry.reset();
|
|
103
|
+
defaultRegistryTouched = false;
|
|
104
|
+
}
|
|
105
|
+
function setDefaultPluginRegistry(registry) {
|
|
106
|
+
if (defaultRegistryTouched && defaultRegistry.installedPlugins.size > 0) {
|
|
107
|
+
console.warn(
|
|
108
|
+
"[Plugin] Replacing default plugin registry while plugins are already installed on the singleton. This may indicate mixed singleton/registry usage."
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
defaultRegistry = registry;
|
|
112
|
+
defaultRegistryTouched = true;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
export {
|
|
116
|
+
createPluginRegistry,
|
|
117
|
+
createPlugin,
|
|
118
|
+
plugin,
|
|
119
|
+
inject,
|
|
120
|
+
triggerPluginMount,
|
|
121
|
+
triggerPluginUnmount,
|
|
122
|
+
triggerPluginError,
|
|
123
|
+
resetPlugins,
|
|
124
|
+
setDefaultPluginRegistry
|
|
125
|
+
};
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
isSSR
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-2RA7SHDA.js";
|
|
4
4
|
import {
|
|
5
5
|
track
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-QO3WC6FS.js";
|
|
7
7
|
import {
|
|
8
8
|
devAssert
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-LMLD24FC.js";
|
|
10
10
|
|
|
11
11
|
// src/core/signals/watch.ts
|
|
12
12
|
function watch(getter, callback) {
|