@netrojs/fnetro 0.1.5 → 0.2.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/README.md +500 -897
- package/client.ts +220 -200
- package/core.ts +146 -644
- package/dist/client.d.ts +99 -155
- package/dist/client.js +177 -570
- package/dist/core.d.ts +69 -156
- package/dist/core.js +31 -452
- package/dist/server.d.ts +120 -179
- package/dist/server.js +278 -553
- package/package.json +17 -8
- package/server.ts +455 -247
package/dist/core.js
CHANGED
|
@@ -1,414 +1,4 @@
|
|
|
1
1
|
// core.ts
|
|
2
|
-
var RAW = /* @__PURE__ */ Symbol("raw");
|
|
3
|
-
var IS_REACTIVE = /* @__PURE__ */ Symbol("isReactive");
|
|
4
|
-
var IS_READONLY = /* @__PURE__ */ Symbol("isReadonly");
|
|
5
|
-
var IS_REF = /* @__PURE__ */ Symbol("isRef");
|
|
6
|
-
var MARK_RAW = /* @__PURE__ */ Symbol("markRaw");
|
|
7
|
-
var targetMap = /* @__PURE__ */ new WeakMap();
|
|
8
|
-
var activeEffect = null;
|
|
9
|
-
var shouldTrack = true;
|
|
10
|
-
var trackStack = [];
|
|
11
|
-
function pauseTracking() {
|
|
12
|
-
trackStack.push(shouldTrack);
|
|
13
|
-
shouldTrack = false;
|
|
14
|
-
}
|
|
15
|
-
function resetTracking() {
|
|
16
|
-
shouldTrack = trackStack.pop() ?? true;
|
|
17
|
-
}
|
|
18
|
-
function track(target, key) {
|
|
19
|
-
if (!shouldTrack || !activeEffect) return;
|
|
20
|
-
let depsMap = targetMap.get(target);
|
|
21
|
-
if (!depsMap) targetMap.set(target, depsMap = /* @__PURE__ */ new Map());
|
|
22
|
-
let dep = depsMap.get(key);
|
|
23
|
-
if (!dep) depsMap.set(key, dep = /* @__PURE__ */ new Set());
|
|
24
|
-
trackEffect(activeEffect, dep);
|
|
25
|
-
}
|
|
26
|
-
function trackEffect(effect2, dep) {
|
|
27
|
-
if (!dep.has(effect2)) {
|
|
28
|
-
dep.add(effect2);
|
|
29
|
-
effect2.deps.push(dep);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
function trigger(target, key, newVal, oldVal) {
|
|
33
|
-
const depsMap = targetMap.get(target);
|
|
34
|
-
if (!depsMap) return;
|
|
35
|
-
const effects = [];
|
|
36
|
-
const computedEffects = [];
|
|
37
|
-
depsMap.get(key)?.forEach((e) => {
|
|
38
|
-
if (e !== activeEffect) {
|
|
39
|
-
e.computed ? computedEffects.push(e) : effects.push(e);
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
[...computedEffects, ...effects].forEach((e) => {
|
|
43
|
-
if (e.active) e.scheduler ? e.scheduler() : e.run();
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
var ReactiveEffect = class {
|
|
47
|
-
constructor(fn, scheduler, scope) {
|
|
48
|
-
this.fn = fn;
|
|
49
|
-
this.scheduler = scheduler;
|
|
50
|
-
this.scope = scope;
|
|
51
|
-
scope?.effects.push(this);
|
|
52
|
-
}
|
|
53
|
-
deps = [];
|
|
54
|
-
active = true;
|
|
55
|
-
cleanup;
|
|
56
|
-
computed = false;
|
|
57
|
-
run() {
|
|
58
|
-
if (!this.active) return this.fn();
|
|
59
|
-
const prevEffect = activeEffect;
|
|
60
|
-
const prevShouldTrack = shouldTrack;
|
|
61
|
-
shouldTrack = true;
|
|
62
|
-
activeEffect = this;
|
|
63
|
-
this.cleanup?.();
|
|
64
|
-
this.cleanup = void 0;
|
|
65
|
-
this.deps.length = 0;
|
|
66
|
-
try {
|
|
67
|
-
const result = this.fn();
|
|
68
|
-
if (typeof result === "function") this.cleanup = result;
|
|
69
|
-
return result;
|
|
70
|
-
} finally {
|
|
71
|
-
activeEffect = prevEffect;
|
|
72
|
-
shouldTrack = prevShouldTrack;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
stop() {
|
|
76
|
-
if (this.active) {
|
|
77
|
-
cleanupEffect(this);
|
|
78
|
-
this.active = false;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
};
|
|
82
|
-
function cleanupEffect(e) {
|
|
83
|
-
e.deps.forEach((dep) => dep.delete(e));
|
|
84
|
-
e.deps.length = 0;
|
|
85
|
-
}
|
|
86
|
-
var activeScope;
|
|
87
|
-
var EffectScope = class {
|
|
88
|
-
effects = [];
|
|
89
|
-
cleanups = [];
|
|
90
|
-
active = true;
|
|
91
|
-
run(fn) {
|
|
92
|
-
const prev = activeScope;
|
|
93
|
-
activeScope = this;
|
|
94
|
-
try {
|
|
95
|
-
return fn();
|
|
96
|
-
} finally {
|
|
97
|
-
activeScope = prev;
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
stop() {
|
|
101
|
-
if (this.active) {
|
|
102
|
-
this.effects.forEach((e) => e.stop());
|
|
103
|
-
this.cleanups.forEach((fn) => fn());
|
|
104
|
-
this.active = false;
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
onCleanup(fn) {
|
|
108
|
-
this.cleanups.push(fn);
|
|
109
|
-
}
|
|
110
|
-
};
|
|
111
|
-
function effectScope() {
|
|
112
|
-
return new EffectScope();
|
|
113
|
-
}
|
|
114
|
-
function getCurrentScope() {
|
|
115
|
-
return activeScope;
|
|
116
|
-
}
|
|
117
|
-
function onScopeDispose(fn) {
|
|
118
|
-
activeScope?.onCleanup(fn);
|
|
119
|
-
}
|
|
120
|
-
function effect(fn) {
|
|
121
|
-
const e = new ReactiveEffect(fn, void 0, activeScope);
|
|
122
|
-
e.run();
|
|
123
|
-
return () => e.stop();
|
|
124
|
-
}
|
|
125
|
-
function watchEffect(fn, opts) {
|
|
126
|
-
const e = new ReactiveEffect(fn, void 0, activeScope);
|
|
127
|
-
e.run();
|
|
128
|
-
return () => e.stop();
|
|
129
|
-
}
|
|
130
|
-
var refTarget = /* @__PURE__ */ Symbol("refTarget");
|
|
131
|
-
var RefImpl = class {
|
|
132
|
-
constructor(value, shallow = false) {
|
|
133
|
-
this.shallow = shallow;
|
|
134
|
-
this._value = shallow ? value : toReactive(value);
|
|
135
|
-
}
|
|
136
|
-
[IS_REF] = true;
|
|
137
|
-
_value;
|
|
138
|
-
_subscribers = /* @__PURE__ */ new Set();
|
|
139
|
-
get value() {
|
|
140
|
-
track(this, refTarget);
|
|
141
|
-
this._subscribers.forEach((fn) => {
|
|
142
|
-
});
|
|
143
|
-
return this._value;
|
|
144
|
-
}
|
|
145
|
-
set value(next) {
|
|
146
|
-
const newVal = this.shallow ? next : toReactive(next);
|
|
147
|
-
if (!hasChanged(newVal, this._value)) return;
|
|
148
|
-
this._value = newVal;
|
|
149
|
-
trigger(this, refTarget, newVal, this._value);
|
|
150
|
-
this._subscribers.forEach((fn) => fn());
|
|
151
|
-
}
|
|
152
|
-
/** Subscribe for useSyncExternalStore */
|
|
153
|
-
subscribe(fn) {
|
|
154
|
-
this._subscribers.add(fn);
|
|
155
|
-
return () => this._subscribers.delete(fn);
|
|
156
|
-
}
|
|
157
|
-
peek() {
|
|
158
|
-
return this._value;
|
|
159
|
-
}
|
|
160
|
-
};
|
|
161
|
-
function ref(value) {
|
|
162
|
-
return isRef(value) ? value : new RefImpl(value);
|
|
163
|
-
}
|
|
164
|
-
function shallowRef(value) {
|
|
165
|
-
return new RefImpl(value, true);
|
|
166
|
-
}
|
|
167
|
-
function triggerRef(r) {
|
|
168
|
-
if (r instanceof RefImpl) {
|
|
169
|
-
trigger(r, refTarget);
|
|
170
|
-
r._subscribers.forEach((fn) => fn());
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
function isRef(r) {
|
|
174
|
-
return !!r && typeof r === "object" && r[IS_REF] === true;
|
|
175
|
-
}
|
|
176
|
-
function unref(r) {
|
|
177
|
-
return isRef(r) ? r.value : r;
|
|
178
|
-
}
|
|
179
|
-
function toRef(obj, key) {
|
|
180
|
-
const r = new RefImpl(void 0, false);
|
|
181
|
-
Object.defineProperty(r, "value", {
|
|
182
|
-
get() {
|
|
183
|
-
track(r, refTarget);
|
|
184
|
-
return obj[key];
|
|
185
|
-
},
|
|
186
|
-
set(v) {
|
|
187
|
-
obj[key] = v;
|
|
188
|
-
trigger(r, refTarget, v, obj[key]);
|
|
189
|
-
}
|
|
190
|
-
});
|
|
191
|
-
return r;
|
|
192
|
-
}
|
|
193
|
-
function toRefs(obj) {
|
|
194
|
-
const result = {};
|
|
195
|
-
for (const key in obj) result[key] = toRef(obj, key);
|
|
196
|
-
return result;
|
|
197
|
-
}
|
|
198
|
-
var ComputedRefImpl = class {
|
|
199
|
-
constructor(getter, setter) {
|
|
200
|
-
this.setter = setter;
|
|
201
|
-
this.effect = new ReactiveEffect(getter, () => {
|
|
202
|
-
if (!this._dirty) {
|
|
203
|
-
this._dirty = true;
|
|
204
|
-
trigger(this, refTarget);
|
|
205
|
-
this._subscribers.forEach((fn) => fn());
|
|
206
|
-
}
|
|
207
|
-
}, activeScope);
|
|
208
|
-
this.effect.computed = true;
|
|
209
|
-
}
|
|
210
|
-
[IS_REF] = true;
|
|
211
|
-
effect;
|
|
212
|
-
_value;
|
|
213
|
-
_dirty = true;
|
|
214
|
-
_subscribers = /* @__PURE__ */ new Set();
|
|
215
|
-
get value() {
|
|
216
|
-
track(this, refTarget);
|
|
217
|
-
if (this._dirty) {
|
|
218
|
-
this._dirty = false;
|
|
219
|
-
this._value = this.effect.run();
|
|
220
|
-
}
|
|
221
|
-
return this._value;
|
|
222
|
-
}
|
|
223
|
-
set value(v) {
|
|
224
|
-
this.setter?.(v);
|
|
225
|
-
}
|
|
226
|
-
subscribe(fn) {
|
|
227
|
-
this._subscribers.add(fn);
|
|
228
|
-
return () => this._subscribers.delete(fn);
|
|
229
|
-
}
|
|
230
|
-
peek() {
|
|
231
|
-
return this._value;
|
|
232
|
-
}
|
|
233
|
-
};
|
|
234
|
-
function computed(arg) {
|
|
235
|
-
if (typeof arg === "function") {
|
|
236
|
-
return new ComputedRefImpl(arg);
|
|
237
|
-
}
|
|
238
|
-
return new ComputedRefImpl(arg.get, arg.set);
|
|
239
|
-
}
|
|
240
|
-
var reactiveMap = /* @__PURE__ */ new WeakMap();
|
|
241
|
-
var readonlyMap = /* @__PURE__ */ new WeakMap();
|
|
242
|
-
var shallowReactiveMap = /* @__PURE__ */ new WeakMap();
|
|
243
|
-
function toReactive(value) {
|
|
244
|
-
return value !== null && typeof value === "object" ? reactive(value) : value;
|
|
245
|
-
}
|
|
246
|
-
var arrayInstrumentations = {};
|
|
247
|
-
["includes", "indexOf", "lastIndexOf"].forEach((method) => {
|
|
248
|
-
arrayInstrumentations[method] = function(...args) {
|
|
249
|
-
const arr = toRaw(this);
|
|
250
|
-
for (let i = 0; i < this.length; i++) track(arr, i);
|
|
251
|
-
let res = arr[method](...args);
|
|
252
|
-
if (res === -1 || res === false) res = arr[method](...args.map(toRaw));
|
|
253
|
-
return res;
|
|
254
|
-
};
|
|
255
|
-
});
|
|
256
|
-
["push", "pop", "shift", "unshift", "splice"].forEach((method) => {
|
|
257
|
-
arrayInstrumentations[method] = function(...args) {
|
|
258
|
-
pauseTracking();
|
|
259
|
-
const res = toRaw(this)[method].apply(this, args);
|
|
260
|
-
resetTracking();
|
|
261
|
-
return res;
|
|
262
|
-
};
|
|
263
|
-
});
|
|
264
|
-
function createHandler(shallow = false, readonly2 = false) {
|
|
265
|
-
return {
|
|
266
|
-
get(target, key, receiver) {
|
|
267
|
-
if (key === RAW) return target;
|
|
268
|
-
if (key === IS_REACTIVE) return !readonly2;
|
|
269
|
-
if (key === IS_READONLY) return readonly2;
|
|
270
|
-
if (key === MARK_RAW) return target[MARK_RAW];
|
|
271
|
-
const isArray = Array.isArray(target);
|
|
272
|
-
if (!readonly2 && isArray && hasOwn(arrayInstrumentations, key)) {
|
|
273
|
-
return Reflect.get(arrayInstrumentations, key, receiver);
|
|
274
|
-
}
|
|
275
|
-
const res = Reflect.get(target, key, receiver);
|
|
276
|
-
if (typeof key === "symbol" || key === "__proto__") return res;
|
|
277
|
-
if (!readonly2) track(target, key);
|
|
278
|
-
if (shallow) return res;
|
|
279
|
-
if (isRef(res)) return isArray ? res : res.value;
|
|
280
|
-
return res !== null && typeof res === "object" && !res[MARK_RAW] ? readonly2 ? readonlyProxy(res) : reactive(res) : res;
|
|
281
|
-
},
|
|
282
|
-
set(target, key, value, receiver) {
|
|
283
|
-
if (readonly2) {
|
|
284
|
-
console.warn(`[fnetro] Cannot set "${String(key)}" on readonly object`);
|
|
285
|
-
return true;
|
|
286
|
-
}
|
|
287
|
-
const oldVal = target[key];
|
|
288
|
-
const result = Reflect.set(target, key, value, receiver);
|
|
289
|
-
if (hasChanged(value, oldVal)) trigger(target, key, value, oldVal);
|
|
290
|
-
return result;
|
|
291
|
-
},
|
|
292
|
-
deleteProperty(target, key) {
|
|
293
|
-
if (readonly2) return true;
|
|
294
|
-
const hadKey = hasOwn(target, key);
|
|
295
|
-
const result = Reflect.deleteProperty(target, key);
|
|
296
|
-
if (hadKey && result) trigger(target, key);
|
|
297
|
-
return result;
|
|
298
|
-
},
|
|
299
|
-
has(target, key) {
|
|
300
|
-
const res = Reflect.has(target, key);
|
|
301
|
-
track(target, key);
|
|
302
|
-
return res;
|
|
303
|
-
},
|
|
304
|
-
ownKeys(target) {
|
|
305
|
-
track(target, Array.isArray(target) ? "length" : "__iterate__");
|
|
306
|
-
return Reflect.ownKeys(target);
|
|
307
|
-
}
|
|
308
|
-
};
|
|
309
|
-
}
|
|
310
|
-
function reactive(target) {
|
|
311
|
-
if (isReadonly(target)) return target;
|
|
312
|
-
if (target[MARK_RAW]) return target;
|
|
313
|
-
if (reactiveMap.has(target)) return reactiveMap.get(target);
|
|
314
|
-
const proxy = new Proxy(target, createHandler());
|
|
315
|
-
reactiveMap.set(target, proxy);
|
|
316
|
-
return proxy;
|
|
317
|
-
}
|
|
318
|
-
function shallowReactive(target) {
|
|
319
|
-
if (shallowReactiveMap.has(target)) return shallowReactiveMap.get(target);
|
|
320
|
-
const proxy = new Proxy(target, createHandler(true));
|
|
321
|
-
shallowReactiveMap.set(target, proxy);
|
|
322
|
-
return proxy;
|
|
323
|
-
}
|
|
324
|
-
function readonlyProxy(target) {
|
|
325
|
-
if (readonlyMap.has(target)) return readonlyMap.get(target);
|
|
326
|
-
const proxy = new Proxy(target, createHandler(false, true));
|
|
327
|
-
readonlyMap.set(target, proxy);
|
|
328
|
-
return proxy;
|
|
329
|
-
}
|
|
330
|
-
function readonly(target) {
|
|
331
|
-
return readonlyProxy(target);
|
|
332
|
-
}
|
|
333
|
-
function markRaw(value) {
|
|
334
|
-
;
|
|
335
|
-
value[MARK_RAW] = true;
|
|
336
|
-
return value;
|
|
337
|
-
}
|
|
338
|
-
function toRaw(observed) {
|
|
339
|
-
const raw = observed?.[RAW];
|
|
340
|
-
return raw ? toRaw(raw) : observed;
|
|
341
|
-
}
|
|
342
|
-
function isReactive(value) {
|
|
343
|
-
if (isReadonly(value)) return isReactive(value[RAW]);
|
|
344
|
-
return !!(value && value[IS_REACTIVE]);
|
|
345
|
-
}
|
|
346
|
-
function isReadonly(value) {
|
|
347
|
-
return !!(value && value[IS_READONLY]);
|
|
348
|
-
}
|
|
349
|
-
function traverse(value, seen = /* @__PURE__ */ new Set()) {
|
|
350
|
-
if (!value || typeof value !== "object" || seen.has(value)) return value;
|
|
351
|
-
seen.add(value);
|
|
352
|
-
if (isRef(value)) {
|
|
353
|
-
traverse(value.value, seen);
|
|
354
|
-
return value;
|
|
355
|
-
}
|
|
356
|
-
if (Array.isArray(value)) {
|
|
357
|
-
value.forEach((v) => traverse(v, seen));
|
|
358
|
-
return value;
|
|
359
|
-
}
|
|
360
|
-
for (const key in value) traverse(value[key], seen);
|
|
361
|
-
return value;
|
|
362
|
-
}
|
|
363
|
-
function normalizeSource(src) {
|
|
364
|
-
if (Array.isArray(src)) return () => src.map((s) => isRef(s) ? s.value : s());
|
|
365
|
-
if (isRef(src)) return () => src.value;
|
|
366
|
-
return src;
|
|
367
|
-
}
|
|
368
|
-
function watch(source, cb, opts = {}) {
|
|
369
|
-
const getter = opts.deep ? () => traverse(normalizeSource(source)()) : normalizeSource(source);
|
|
370
|
-
let oldVal = void 0;
|
|
371
|
-
let cleanupFn;
|
|
372
|
-
const cleanup = (fn) => {
|
|
373
|
-
cleanupFn = fn;
|
|
374
|
-
};
|
|
375
|
-
const job = () => {
|
|
376
|
-
if (!effect2.active) return;
|
|
377
|
-
cleanupFn?.();
|
|
378
|
-
cleanupFn = void 0;
|
|
379
|
-
const newVal = effect2.run();
|
|
380
|
-
if (opts.deep || hasChanged(newVal, oldVal)) {
|
|
381
|
-
cb(newVal, oldVal, cleanup);
|
|
382
|
-
oldVal = newVal;
|
|
383
|
-
}
|
|
384
|
-
if (opts.once) effect2.stop();
|
|
385
|
-
};
|
|
386
|
-
const effect2 = new ReactiveEffect(getter, job, activeScope);
|
|
387
|
-
if (opts.immediate) {
|
|
388
|
-
cleanupFn?.();
|
|
389
|
-
cleanupFn = void 0;
|
|
390
|
-
const val = effect2.run();
|
|
391
|
-
cb(val, oldVal, cleanup);
|
|
392
|
-
oldVal = val;
|
|
393
|
-
} else {
|
|
394
|
-
oldVal = effect2.run();
|
|
395
|
-
}
|
|
396
|
-
return () => effect2.stop();
|
|
397
|
-
}
|
|
398
|
-
var __hooks = {
|
|
399
|
-
useValue: (r) => isRef(r) ? r.value : r(),
|
|
400
|
-
useLocalRef: (init) => ref(init),
|
|
401
|
-
useLocalReactive: (init) => reactive(init)
|
|
402
|
-
};
|
|
403
|
-
function use(source) {
|
|
404
|
-
return __hooks.useValue(source);
|
|
405
|
-
}
|
|
406
|
-
function useLocalRef(init) {
|
|
407
|
-
return __hooks.useLocalRef(init);
|
|
408
|
-
}
|
|
409
|
-
function useLocalReactive(init) {
|
|
410
|
-
return __hooks.useLocalReactive(init);
|
|
411
|
-
}
|
|
412
2
|
function definePage(def) {
|
|
413
3
|
return { __type: "page", ...def };
|
|
414
4
|
}
|
|
@@ -418,9 +8,6 @@ function defineGroup(def) {
|
|
|
418
8
|
function defineLayout(Component) {
|
|
419
9
|
return { __type: "layout", Component };
|
|
420
10
|
}
|
|
421
|
-
function defineMiddleware(handler) {
|
|
422
|
-
return { __type: "middleware", handler };
|
|
423
|
-
}
|
|
424
11
|
function defineApiRoute(path, register) {
|
|
425
12
|
return { __type: "api", path, register };
|
|
426
13
|
}
|
|
@@ -438,58 +25,50 @@ function resolveRoutes(routes, options = {}) {
|
|
|
438
25
|
pages.push(...sub.pages);
|
|
439
26
|
apis.push(...sub.apis);
|
|
440
27
|
} else {
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
28
|
+
pages.push({
|
|
29
|
+
fullPath: (options.prefix ?? "") + route.path,
|
|
30
|
+
page: route,
|
|
31
|
+
layout: route.layout !== void 0 ? route.layout : options.layout,
|
|
32
|
+
middleware: [...options.middleware ?? [], ...route.middleware ?? []]
|
|
33
|
+
});
|
|
445
34
|
}
|
|
446
35
|
}
|
|
447
36
|
return { pages, apis };
|
|
448
37
|
}
|
|
38
|
+
function compilePath(path) {
|
|
39
|
+
const keys = [];
|
|
40
|
+
const src = path.replace(/\[\.\.\.([^\]]+)\]/g, (_, k) => {
|
|
41
|
+
keys.push(k);
|
|
42
|
+
return "(.*)";
|
|
43
|
+
}).replace(/\[([^\]]+)\]/g, (_, k) => {
|
|
44
|
+
keys.push(k);
|
|
45
|
+
return "([^/]+)";
|
|
46
|
+
}).replace(/\*/g, "(.*)");
|
|
47
|
+
return { re: new RegExp(`^${src}$`), keys };
|
|
48
|
+
}
|
|
49
|
+
function matchPath(compiled, pathname) {
|
|
50
|
+
const m = pathname.match(compiled.re);
|
|
51
|
+
if (!m) return null;
|
|
52
|
+
const params = {};
|
|
53
|
+
compiled.keys.forEach((k, i) => {
|
|
54
|
+
params[k] = decodeURIComponent(m[i + 1] ?? "");
|
|
55
|
+
});
|
|
56
|
+
return params;
|
|
57
|
+
}
|
|
449
58
|
var SPA_HEADER = "x-fnetro-spa";
|
|
450
59
|
var STATE_KEY = "__FNETRO_STATE__";
|
|
451
60
|
var PARAMS_KEY = "__FNETRO_PARAMS__";
|
|
452
|
-
|
|
453
|
-
return !Object.is(a, b);
|
|
454
|
-
}
|
|
455
|
-
function hasOwn(obj, key) {
|
|
456
|
-
return Object.prototype.hasOwnProperty.call(obj, key);
|
|
457
|
-
}
|
|
61
|
+
var SEO_KEY = "__FNETRO_SEO__";
|
|
458
62
|
export {
|
|
459
|
-
EffectScope,
|
|
460
63
|
PARAMS_KEY,
|
|
461
|
-
|
|
64
|
+
SEO_KEY,
|
|
462
65
|
SPA_HEADER,
|
|
463
66
|
STATE_KEY,
|
|
464
|
-
|
|
465
|
-
computed,
|
|
67
|
+
compilePath,
|
|
466
68
|
defineApiRoute,
|
|
467
69
|
defineGroup,
|
|
468
70
|
defineLayout,
|
|
469
|
-
defineMiddleware,
|
|
470
71
|
definePage,
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
getCurrentScope,
|
|
474
|
-
isReactive,
|
|
475
|
-
isReadonly,
|
|
476
|
-
isRef,
|
|
477
|
-
markRaw,
|
|
478
|
-
onScopeDispose,
|
|
479
|
-
reactive,
|
|
480
|
-
readonly,
|
|
481
|
-
ref,
|
|
482
|
-
resolveRoutes,
|
|
483
|
-
shallowReactive,
|
|
484
|
-
shallowRef,
|
|
485
|
-
toRaw,
|
|
486
|
-
toRef,
|
|
487
|
-
toRefs,
|
|
488
|
-
triggerRef,
|
|
489
|
-
unref,
|
|
490
|
-
use,
|
|
491
|
-
useLocalReactive,
|
|
492
|
-
useLocalRef,
|
|
493
|
-
watch,
|
|
494
|
-
watchEffect
|
|
72
|
+
matchPath,
|
|
73
|
+
resolveRoutes
|
|
495
74
|
};
|