@vobs/resource 1.2.1 → 1.2.2

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/plugin.cjs CHANGED
@@ -1,381 +1,40 @@
1
- 'use strict';
2
-
1
+ var __VOBS_CJS_FILE_URL = require("url").pathToFileURL(__filename).href;
2
+ "use strict";
3
3
  var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
4
7
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
5
-
6
- // packages/reactivity/src/debug.ts
7
- var activeDebugHooks = null;
8
- var signalNames = /* @__PURE__ */ new WeakMap();
9
- function hasDebugHooks() {
10
- return activeDebugHooks !== null;
11
- }
12
- __name(hasDebugHooks, "hasDebugHooks");
13
- function setSignalDebugName(signal, name) {
14
- signalNames.set(signal, name);
15
- invokeDebug("signalNamed", signal, name);
16
- }
17
- __name(setSignalDebugName, "setSignalDebugName");
18
- function invokeDebug(name, ...args) {
19
- return;
20
- }
21
- __name(invokeDebug, "invokeDebug");
22
-
23
- // packages/reactivity/src/owner.ts
24
- var currentOwner = null;
25
- var nextOwnerId = 1;
26
- function createOwner() {
27
- const parent = currentOwner;
28
- let disposed = parent?.disposed ?? false;
29
- const children = [];
30
- const cleanups = [];
31
- const errorHandlers = /* @__PURE__ */ new Set();
32
- const owner = {
33
- id: `owner-${nextOwnerId++}`,
34
- parent,
35
- children,
36
- depth: (parent?.depth ?? -1) + 1,
37
- get disposed() {
38
- return disposed;
39
- },
40
- run(fn) {
41
- if (disposed) throw new Error("Vobs: \u5DF2\u9500\u6BC1\u7684 Owner \u4E0D\u80FD\u7EE7\u7EED\u8FD0\u884C");
42
- const previous = currentOwner;
43
- currentOwner = owner;
44
- try {
45
- return fn();
46
- } finally {
47
- currentOwner = previous;
48
- }
49
- },
50
- addCleanup(cleanup) {
51
- if (disposed) {
52
- cleanup();
53
- return;
54
- }
55
- cleanups.push(cleanup);
56
- },
57
- onDispose(cleanup) {
58
- owner.addCleanup(cleanup);
59
- },
60
- onError(handler) {
61
- errorHandlers.add(handler);
62
- const remove = /* @__PURE__ */ __name(() => errorHandlers.delete(handler), "remove");
63
- owner.addCleanup(remove);
64
- return remove;
65
- },
66
- handleError(error) {
67
- for (const handler of [...errorHandlers].reverse()) {
68
- try {
69
- handler(error);
70
- return true;
71
- } catch (handlerError) {
72
- return parent?.handleError(handlerError) ?? false;
73
- }
74
- }
75
- return parent?.handleError(error) ?? false;
76
- },
77
- dispose() {
78
- if (disposed) return;
79
- disposed = true;
80
- for (const child of [...children]) child.dispose();
81
- children.length = 0;
82
- let firstError;
83
- for (let index = cleanups.length - 1; index >= 0; index--) {
84
- try {
85
- cleanups[index]();
86
- } catch (error) {
87
- firstError ?? (firstError = error);
88
- }
89
- }
90
- cleanups.length = 0;
91
- if (parent) {
92
- const index = parent.children.indexOf(owner);
93
- if (index >= 0) parent.children.splice(index, 1);
94
- }
95
- if (firstError) throw firstError;
96
- }
97
- };
98
- if (parent && !parent.disposed) parent.children.push(owner);
99
- return owner;
100
- }
101
- __name(createOwner, "createOwner");
102
- function getCurrentOwner() {
103
- return currentOwner;
104
- }
105
- __name(getCurrentOwner, "getCurrentOwner");
106
-
107
- // packages/reactivity/src/signal.ts
108
- var currentSubscriber = null;
109
- function getCurrentSubscriber() {
110
- return currentSubscriber;
111
- }
112
- __name(getCurrentSubscriber, "getCurrentSubscriber");
113
- function setCurrentSubscriber(subscriber) {
114
- currentSubscriber = subscriber;
115
- }
116
- __name(setCurrentSubscriber, "setCurrentSubscriber");
117
- function trackDependency(dependency) {
118
- if (!currentSubscriber || currentSubscriber.disposed) return;
119
- !currentSubscriber.dependencies.has(dependency);
120
- currentSubscriber.dependencies.add(dependency);
121
- }
122
- __name(trackDependency, "trackDependency");
123
- function state(initialValue, debugName) {
124
- let value = initialValue;
125
- let disposed = false;
126
- const subscribers = /* @__PURE__ */ new Set();
127
- const signalInstance = {
128
- get value() {
129
- const subscriber = getCurrentSubscriber();
130
- if (subscriber && !subscriber.disposed) {
131
- subscribers.add(subscriber);
132
- trackDependency(signalInstance);
133
- }
134
- return value;
135
- },
136
- set value(nextValue) {
137
- if (disposed || Object.is(value, nextValue)) return;
138
- value = nextValue;
139
- for (const subscriber of [...subscribers]) subscriber.notify();
140
- },
141
- unsubscribe(subscriber) {
142
- subscribers.delete(subscriber);
143
- },
144
- // 与 `.value =` 赋值同一条路径:判等短路、debug hook、notify 全部一致。
145
- // 以闭包实现,可安全地作为回调直接传递(无 this 绑定问题)。
146
- set(next) {
147
- signalInstance.value = next;
148
- },
149
- dispose() {
150
- if (disposed) return;
151
- disposed = true;
152
- subscribers.clear();
153
- }
154
- };
155
- const owner = getCurrentOwner();
156
- owner?.addCleanup(signalInstance.dispose);
157
- if (debugName?.trim()) setSignalDebugName(signalInstance, debugName.trim());
158
- return signalInstance;
159
- }
160
- __name(state, "state");
161
-
162
- // packages/reactivity/src/scheduler.ts
163
- var _Scheduler = class _Scheduler {
164
- constructor() {
165
- this.dirtyEffects = /* @__PURE__ */ new Set();
166
- this.lowPriorityEffects = /* @__PURE__ */ new Set();
167
- // flush 不可重入(flushing 标志保证),缓冲数组可在轮次间安全复用,避免每轮分配。
168
- this.normalBuffer = [];
169
- this.lowBuffer = [];
170
- this.flushing = false;
171
- this.scheduled = false;
172
- this.batchDepth = 0;
173
- }
174
- schedule(effect2) {
175
- if (effect2.disposed) return;
176
- this.dirtyEffects.add(effect2);
177
- this.lowPriorityEffects.delete(effect2);
178
- this.ensureScheduled();
179
- }
180
- /** Queue an effect behind normal updates while preserving deterministic order. */
181
- scheduleLow(effect2) {
182
- if (effect2.disposed) return;
183
- if (!this.dirtyEffects.has(effect2)) this.lowPriorityEffects.add(effect2);
184
- this.ensureScheduled();
185
- }
186
- ensureScheduled() {
187
- if (this.batchDepth === 0 && !this.flushing && !this.scheduled) {
188
- this.scheduled = true;
189
- queueMicrotask(() => {
190
- this.scheduled = false;
191
- this.flush();
192
- });
193
- }
194
- }
195
- remove(effect2) {
196
- this.dirtyEffects.delete(effect2);
197
- this.lowPriorityEffects.delete(effect2);
198
- }
199
- batch(fn) {
200
- this.batchDepth++;
201
- try {
202
- return fn();
203
- } finally {
204
- this.batchDepth--;
205
- if (this.batchDepth === 0) this.flush();
206
- }
207
- }
208
- flush() {
209
- if (this.flushing || this.batchDepth > 0) return;
210
- this.flushing = true;
211
- let rounds = 0;
212
- let firstError;
213
- let hasError = false;
214
- try {
215
- while (this.dirtyEffects.size > 0 || this.lowPriorityEffects.size > 0) {
216
- if (++rounds > 100) {
217
- this.dirtyEffects.clear();
218
- this.lowPriorityEffects.clear();
219
- throw new Error("Vobs: \u54CD\u5E94\u5F0F\u66F4\u65B0\u8D85\u8FC7 100 \u8F6E\uFF0C\u53EF\u80FD\u5B58\u5728\u5FAA\u73AF\u4F9D\u8D56");
220
- }
221
- this.collectRunnable(this.dirtyEffects, this.normalBuffer);
222
- this.collectRunnable(this.lowPriorityEffects, this.lowBuffer);
223
- sortEffects(this.normalBuffer);
224
- sortEffects(this.lowBuffer);
225
- for (const effect2 of this.normalBuffer) {
226
- try {
227
- effect2.run();
228
- } catch (error) {
229
- if (!hasError) {
230
- firstError = error;
231
- hasError = true;
232
- }
233
- }
234
- }
235
- for (const effect2 of this.lowBuffer) {
236
- try {
237
- effect2.run();
238
- } catch (error) {
239
- if (!hasError) {
240
- firstError = error;
241
- hasError = true;
242
- }
243
- }
244
- }
245
- this.normalBuffer.length = 0;
246
- this.lowBuffer.length = 0;
247
- }
248
- } finally {
249
- this.normalBuffer.length = 0;
250
- this.lowBuffer.length = 0;
251
- this.flushing = false;
252
- }
253
- if (hasError) throw firstError;
254
- }
255
- /** 收集未 disposed 的 effect 并清空源集合;run() 期间新调度的 effect 留给下一轮。 */
256
- collectRunnable(source, target) {
257
- for (const effect2 of source) {
258
- if (!effect2.disposed) target.push(effect2);
259
- }
260
- source.clear();
261
- }
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
262
11
  };
263
- __name(_Scheduler, "Scheduler");
264
- var Scheduler = _Scheduler;
265
- function sortEffects(effects) {
266
- if (effects.length > 1) {
267
- effects.sort((a, b) => b.depth - a.depth || a.order - b.order);
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
268
17
  }
269
- }
270
- __name(sortEffects, "sortEffects");
271
- var scheduler = new Scheduler();
272
-
273
- // packages/reactivity/src/effect.ts
274
- var nextEffectOrder = 1;
275
- function cleanupDependencies(subscriber) {
276
- for (const dependency of subscriber.dependencies) {
277
- dependency.unsubscribe(subscriber);
278
- }
279
- subscriber.dependencies.clear();
280
- }
281
- __name(cleanupDependencies, "cleanupDependencies");
282
- function effect(callback) {
283
- const owner = getCurrentOwner();
284
- let cleanup;
285
- let dirty = true;
286
- let disposed = false;
287
- const eff = {
288
- order: nextEffectOrder++,
289
- depth: owner?.depth ?? 0,
290
- dependencies: /* @__PURE__ */ new Set(),
291
- get disposed() {
292
- return disposed;
293
- },
294
- notify() {
295
- if (disposed || dirty) return;
296
- dirty = true;
297
- scheduler.schedule(eff);
298
- },
299
- run() {
300
- if (disposed || !dirty) return;
301
- dirty = false;
302
- const previousCleanup = cleanup;
303
- cleanup = void 0;
304
- let cleanupError;
305
- if (previousCleanup) {
306
- try {
307
- previousCleanup();
308
- } catch (error) {
309
- const handled2 = owner?.handleError(error) ?? false;
310
- if (!handled2) cleanupError = error;
311
- }
312
- }
313
- cleanupDependencies(eff);
314
- const previous = getCurrentSubscriber();
315
- setCurrentSubscriber(eff);
316
- let thrown;
317
- let handled = false;
318
- try {
319
- const result = owner ? owner.run(callback) : callback();
320
- cleanup = typeof result === "function" ? result : void 0;
321
- } catch (error) {
322
- thrown = error;
323
- handled = owner?.handleError(error) ?? false;
324
- if (!handled) throw error;
325
- } finally {
326
- setCurrentSubscriber(previous);
327
- }
328
- if (cleanupError && !thrown) throw cleanupError;
329
- },
330
- scheduleLow() {
331
- if (disposed || dirty) return;
332
- dirty = true;
333
- scheduler.scheduleLow(eff);
334
- },
335
- dispose() {
336
- if (disposed) return;
337
- disposed = true;
338
- dirty = false;
339
- scheduler.remove(eff);
340
- const previousCleanup = cleanup;
341
- cleanup = void 0;
342
- let cleanupError;
343
- if (previousCleanup) {
344
- try {
345
- previousCleanup();
346
- } catch (error) {
347
- const handled = owner?.handleError(error) ?? false;
348
- if (!handled) cleanupError = error;
349
- }
350
- }
351
- cleanupDependencies(eff);
352
- if (cleanupError) throw cleanupError;
353
- }
354
- };
355
- owner?.addCleanup(eff.dispose);
356
- eff.run();
357
- return eff;
358
- }
359
- __name(effect, "effect");
360
-
361
- // packages/runtime/src/hmr.ts
362
- var globalTarget = globalThis;
363
- var hmrGlobal = globalTarget.__VOBS_HMR__ ?? { modules: /* @__PURE__ */ new Map() };
364
- globalTarget.__VOBS_HMR__ = hmrGlobal;
365
-
366
- // packages/vobs/src/app.ts
367
- function createInjectionKey(description) {
368
- return Symbol(description);
369
- }
370
- __name(createInjectionKey, "createInjectionKey");
18
+ return to;
19
+ };
20
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
371
21
 
372
- // packages/router/src/index.ts
373
- var ROUTER_KEY = createInjectionKey("vobs.router");
22
+ // packages/resource/src/plugin.ts
23
+ var plugin_exports = {};
24
+ __export(plugin_exports, {
25
+ RESOURCE_KEY: () => RESOURCE_KEY,
26
+ resourcePlugin: () => resourcePlugin,
27
+ resourceRouterPlugin: () => resourceRouterPlugin
28
+ });
29
+ module.exports = __toCommonJS(plugin_exports);
30
+ var import_vobs = require("@vobs/vobs");
31
+ var import_router = require("@vobs/router");
374
32
 
375
33
  // packages/resource/src/resource.ts
376
- createResourceClient();
34
+ var import_reactivity = require("@vobs/reactivity");
35
+ var defaultClient = createResourceClient();
377
36
  function createResourceClient(options = {}) {
378
- let owner = createOwner();
37
+ let owner = (0, import_reactivity.createOwner)();
379
38
  const cache = /* @__PURE__ */ new Map();
380
39
  const entries = /* @__PURE__ */ new Set();
381
40
  const defaultStaleTime = validateStaleTime(options.staleTime ?? 0);
@@ -384,9 +43,9 @@ function createResourceClient(options = {}) {
384
43
  function createEntry(key, staleTime) {
385
44
  const entry = owner.run(() => ({
386
45
  key,
387
- data: state(null),
388
- error: state(null),
389
- loading: state(false),
46
+ data: (0, import_reactivity.state)(null),
47
+ error: (0, import_reactivity.state)(null),
48
+ loading: (0, import_reactivity.state)(false),
390
49
  staleTime,
391
50
  subscribers: /* @__PURE__ */ new Set(),
392
51
  updatedAt: 0,
@@ -463,7 +122,7 @@ function createResourceClient(options = {}) {
463
122
  if (!entry?.subscribers.delete(resourceHandle)) return;
464
123
  if (entry.subscribers.size === 0) entry.controller?.abort();
465
124
  }, "dispose");
466
- getCurrentOwner()?.onDispose(dispose);
125
+ (0, import_reactivity.getCurrentOwner)()?.onDispose(dispose);
467
126
  return {
468
127
  key: staticKey,
469
128
  data: entry.data,
@@ -513,9 +172,9 @@ function createResourceClient(options = {}) {
513
172
  }
514
173
  };
515
174
  function createReactiveResource(reactiveConfig) {
516
- const data = state(null);
517
- const error = state(null);
518
- const loading = state(false);
175
+ const data = (0, import_reactivity.state)(null);
176
+ const error = (0, import_reactivity.state)(null);
177
+ const loading = (0, import_reactivity.state)(false);
519
178
  const handle = {};
520
179
  let activeEntry;
521
180
  let activeKey;
@@ -547,7 +206,7 @@ function createResourceClient(options = {}) {
547
206
  sync();
548
207
  void request2(false).catch(() => void 0);
549
208
  }, "switchKey");
550
- const stop = effect(() => {
209
+ const stop = (0, import_reactivity.effect)(() => {
551
210
  if (disposed) return;
552
211
  const nextKey = resolveKey(reactiveConfig.key);
553
212
  if (!nextKey) throw new Error("resource: \u54CD\u5E94\u5F0F key \u4E0D\u80FD\u662F undefined");
@@ -564,7 +223,7 @@ function createResourceClient(options = {}) {
564
223
  }
565
224
  activeEntry = void 0;
566
225
  }, "dispose");
567
- getCurrentOwner()?.onDispose(dispose2);
226
+ (0, import_reactivity.getCurrentOwner)()?.onDispose(dispose2);
568
227
  return {
569
228
  get key() {
570
229
  return activeKey;
@@ -602,7 +261,9 @@ function createResourceClient(options = {}) {
602
261
  }
603
262
  return execute(activeEntry, reactiveConfig.fetcher, reactiveConfig.retry, reactiveConfig.retryDelay);
604
263
  }
264
+ __name(request2, "request");
605
265
  }
266
+ __name(createReactiveResource, "createReactiveResource");
606
267
  function createOptimistic(target, next, action) {
607
268
  const previous = { data: target.data.value, error: target.error.value, updatedAt: target.updatedAt };
608
269
  const value = typeof next === "function" ? next(target.data.value) : next;
@@ -622,6 +283,7 @@ function createResourceClient(options = {}) {
622
283
  throw failure;
623
284
  });
624
285
  }
286
+ __name(createOptimistic, "createOptimistic");
625
287
  }
626
288
  __name(createResource, "createResource");
627
289
  return {
@@ -673,7 +335,7 @@ function createResourceClient(options = {}) {
673
335
  cache.clear();
674
336
  entries.clear();
675
337
  owner.dispose();
676
- owner = createOwner();
338
+ owner = (0, import_reactivity.createOwner)();
677
339
  }
678
340
  };
679
341
  }
@@ -811,6 +473,8 @@ function serialize(value, stack) {
811
473
  case "function":
812
474
  case "symbol":
813
475
  throw new Error(`resource: key \u4E0D\u80FD\u5305\u542B ${typeof value}`);
476
+ case "object":
477
+ break;
814
478
  }
815
479
  const object = value;
816
480
  if (stack.has(object)) throw new Error("resource: key \u4E0D\u80FD\u5305\u542B\u5FAA\u73AF\u5F15\u7528");
@@ -830,7 +494,7 @@ function serialize(value, stack) {
830
494
  __name(serialize, "serialize");
831
495
 
832
496
  // packages/resource/src/plugin.ts
833
- var RESOURCE_KEY = createInjectionKey("vobs.resource");
497
+ var RESOURCE_KEY = (0, import_vobs.createInjectionKey)("vobs.resource");
834
498
  function resourcePlugin(options = {}) {
835
499
  return {
836
500
  name: "@vobs/resource",
@@ -850,7 +514,7 @@ function resourceRouterPlugin(options = {}) {
850
514
  name: "@vobs/resource-router",
851
515
  version: "0.1.0",
852
516
  install(context) {
853
- const router = options.router ?? context.inject(ROUTER_KEY);
517
+ const router = options.router ?? context.inject(import_router.ROUTER_KEY);
854
518
  const client = options.client ?? context.inject(RESOURCE_KEY);
855
519
  if (!router) throw new Error("Vobs Resource Router: \u627E\u4E0D\u5230 Router\uFF0C\u8BF7\u5B89\u88C5 routerPlugin \u6216\u4F20\u5165 router");
856
520
  if (!client) throw new Error("Vobs Resource Router: \u627E\u4E0D\u5230 ResourceClient\uFF0C\u8BF7\u5B89\u88C5 resourcePlugin \u6216\u4F20\u5165 client");
@@ -877,9 +541,10 @@ function readPrefetch(route) {
877
541
  return value;
878
542
  }
879
543
  __name(readPrefetch, "readPrefetch");
880
-
881
- exports.RESOURCE_KEY = RESOURCE_KEY;
882
- exports.resourcePlugin = resourcePlugin;
883
- exports.resourceRouterPlugin = resourceRouterPlugin;
884
- //# sourceMappingURL=plugin.cjs.map
544
+ // Annotate the CommonJS export names for ESM import in node:
545
+ 0 && (module.exports = {
546
+ RESOURCE_KEY,
547
+ resourcePlugin,
548
+ resourceRouterPlugin
549
+ });
885
550
  //# sourceMappingURL=plugin.cjs.map