ivue 0.1.0 → 0.1.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/.idea/modules.xml +1 -1
- package/PLAN.md +39 -0
- package/README.md +4 -1
- package/demo/components/IVueTest.vue +4 -1
- package/demo/components/SubComponent2.vue +1 -1
- package/demo/main.ts +3 -1
- package/demo/tests/IVueTests.ts +10 -0
- package/dist/index.es.js +119 -120
- package/dist/index.umd.js +1 -1
- package/dist/src/kernel.d.ts +4 -4
- package/package.json +4 -4
- package/src/App/App.ts +3 -0
- package/src/App/BlackBox.ts +11 -4
- package/src/App/Services/Routing/Router.ts +3 -2
- package/src/kernel.ts +23 -20
- package/src/tests/auth.spec.ts +52 -13
- package/src/types/core.ts +3 -1
- package/src/utils/extend.ts +4 -3
- /package/.idea/{infinite-vue.iml → ivue.iml} +0 -0
package/.idea/modules.xml
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
<project version="4">
|
|
3
3
|
<component name="ProjectModuleManager">
|
|
4
4
|
<modules>
|
|
5
|
-
<module fileurl="file://$PROJECT_DIR$/../
|
|
5
|
+
<module fileurl="file://$PROJECT_DIR$/../ivue/.idea/ivue.iml" filepath="$PROJECT_DIR$/../ivue/.idea/ivue.iml" />
|
|
6
6
|
</modules>
|
|
7
7
|
</component>
|
|
8
8
|
</project>
|
package/PLAN.md
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
## Test ivue
|
|
2
|
+
|
|
3
|
+
### Test basic reactivity
|
|
4
|
+
- make sure basic reactivity works
|
|
5
|
+
- primitives, objects, arrays
|
|
6
|
+
|
|
7
|
+
### Test nested component instantiation and unloading reactivity
|
|
8
|
+
- ☑ tested now to 2 levels deep
|
|
9
|
+
- test it to 3-4 levels deep
|
|
10
|
+
- if components using use(ClassName) function are mounted/unmounted properly
|
|
11
|
+
|
|
12
|
+
### Test traits
|
|
13
|
+
- convert existing inside component tests to real automated tests
|
|
14
|
+
|
|
15
|
+
### Test getter computeds
|
|
16
|
+
- test getter computeds to at least 3 levels deep
|
|
17
|
+
|
|
18
|
+
### Test getters with use() and init() inside
|
|
19
|
+
- the variables instantiated within init() method should not cause a recompute
|
|
20
|
+
|
|
21
|
+
### Test behaviors
|
|
22
|
+
- class initialization before/after
|
|
23
|
+
- method call before/after
|
|
24
|
+
- test conditional before/after class/method substitution
|
|
25
|
+
|
|
26
|
+
### Test Kernel
|
|
27
|
+
- test bind() points to bound object
|
|
28
|
+
- use() should instantiate a singleton
|
|
29
|
+
- init() should instantiate a transient
|
|
30
|
+
- get() should instantiate non-reactive js singleton
|
|
31
|
+
- make() should instantiate non-reactive js transient
|
|
32
|
+
|
|
33
|
+
### Test ivue utils
|
|
34
|
+
- test extend function as props assignment
|
|
35
|
+
- test extend with .props as a property
|
|
36
|
+
- or when extend, extends the base class properties
|
|
37
|
+
- which approach is better (the second one becomes closer to vue 2 options api)
|
|
38
|
+
- extend function should have 'extendClasses' option
|
|
39
|
+
- so we can enable extension of class based objects as well, by default we only extend simple objects not class objects
|
package/README.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
|
-
import { computed, provide, onUnmounted, onBeforeUnmount, getCurrentInstance, onMounted } from 'vue';
|
|
2
|
+
import { computed, provide, onUnmounted, onBeforeUnmount, getCurrentInstance, onMounted, markRaw } from 'vue';
|
|
3
3
|
import { IVueTests } from "../tests/IVueTests";
|
|
4
4
|
import { bind, ivue, use, init, pre, kernel } from '@/index'
|
|
5
5
|
import SubComponent2 from './SubComponent2.vue'
|
|
@@ -7,12 +7,15 @@ import TraitsComponent from './TraitsComponent.vue'
|
|
|
7
7
|
import { Mouse } from '../tests/Mouse';
|
|
8
8
|
import { getPrototypeGetters } from '../../src/utils/getters';
|
|
9
9
|
|
|
10
|
+
console.log('loaded')
|
|
10
11
|
let vm: IVueTests = use(IVueTests)
|
|
11
12
|
provide('mouse', ivue(Mouse))
|
|
12
13
|
const localComputedValue = computed(() => {
|
|
13
14
|
return vm.computedVariable?.[0]?.test + ' + local append'
|
|
14
15
|
})
|
|
15
16
|
|
|
17
|
+
vm.setTest('yes')
|
|
18
|
+
console.log(vm.test)
|
|
16
19
|
const hugeId = 2646049
|
|
17
20
|
|
|
18
21
|
function hey () {
|
|
@@ -8,7 +8,7 @@ export default {
|
|
|
8
8
|
import { getCurrentScope } from 'vue'
|
|
9
9
|
import { init } from '@/index';
|
|
10
10
|
import { Test } from '../tests/Test'
|
|
11
|
-
import { Mouse } from '
|
|
11
|
+
import { Mouse } from '../tests/Mouse';
|
|
12
12
|
import { inject, reactive, toRaw } from 'vue'
|
|
13
13
|
import { ivue } from '../../src/ivue';
|
|
14
14
|
const emit = defineEmits<{
|
package/demo/main.ts
CHANGED
|
@@ -7,12 +7,14 @@ import AppComponent from "./App.vue";
|
|
|
7
7
|
import { App } from '@/App/App';
|
|
8
8
|
import { Auth } from '@/App/Auth/Auth';
|
|
9
9
|
|
|
10
|
+
|
|
10
11
|
const app = use(App).load()
|
|
11
12
|
setup({ router: app.router, debug: true })
|
|
12
13
|
|
|
13
14
|
use(Auth)
|
|
15
|
+
export const vue = createApp(AppComponent);
|
|
14
16
|
|
|
15
|
-
|
|
17
|
+
console.log('vue', vue);
|
|
16
18
|
|
|
17
19
|
vue.use(app.router)
|
|
18
20
|
|
package/demo/tests/IVueTests.ts
CHANGED
|
@@ -8,9 +8,17 @@ import { onUnmounted, toRaw, watch, onBeforeUnmount } from "vue";
|
|
|
8
8
|
import { generateHugeArray } from "@/App/Generators/generators";
|
|
9
9
|
import { TField } from "./TField";
|
|
10
10
|
import { use, init, IVUE, unraw, before, ivue } from "@/index";
|
|
11
|
+
import type { ComponentPublicInstance } from 'vue';
|
|
11
12
|
|
|
12
13
|
export class IVueTests extends ParentIVueTests {
|
|
13
14
|
|
|
15
|
+
test = 1
|
|
16
|
+
setTest(value){
|
|
17
|
+
this.test = value
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
instance
|
|
21
|
+
|
|
14
22
|
static behavior = {
|
|
15
23
|
init: IVUE.SCOPED_INTERCEPT,
|
|
16
24
|
nonReactiveProp: IVUE.OFF
|
|
@@ -56,6 +64,8 @@ export class IVueTests extends ParentIVueTests {
|
|
|
56
64
|
|
|
57
65
|
init () {
|
|
58
66
|
|
|
67
|
+
console.log('init')
|
|
68
|
+
|
|
59
69
|
watch(() => this.primitive, newValue => {
|
|
60
70
|
if (newValue === 10) {
|
|
61
71
|
console.log('watch matched value: 10 =', newValue)
|
package/dist/index.es.js
CHANGED
|
@@ -24,7 +24,7 @@ function m(t2, e2, n2 = null) {
|
|
|
24
24
|
const r2 = e2.shift();
|
|
25
25
|
if (y(t2) && y(r2))
|
|
26
26
|
for (const e3 in r2)
|
|
27
|
-
y(r2[e3]) && "Object" === r2[e3].constructor.name ? n2.has(r2[e3]) || null !== (o2 = r2[e3]) && "object" == typeof o2 && "function" == typeof o2.then && "function" == typeof o2.catch || void 0 === t2[e3] ? t2[e3] = r2[e3] : y(t2[e3])
|
|
27
|
+
y(r2[e3]) && "Object" === r2[e3].constructor.name ? n2.has(r2[e3]) || null !== (o2 = r2[e3]) && "object" == typeof o2 && "function" == typeof o2.then && "function" == typeof o2.catch || void 0 === t2[e3] ? t2[e3] = r2[e3] : y(t2[e3]) && t2[e3].constructor === Object ? m(t2[e3], [r2[e3]], n2) : t2[e3] = r2[e3] : t2[e3] = r2[e3];
|
|
28
28
|
var o2;
|
|
29
29
|
return m(t2, e2, n2);
|
|
30
30
|
}
|
|
@@ -209,25 +209,22 @@ function J(t2, e2, n2, r2) {
|
|
|
209
209
|
return new Proxy(t2, { get: (e3, n3) => n3 in u2 ? u2[n3] : n3 in e3 ? e3[n3].bind(t2) : void 0 });
|
|
210
210
|
};
|
|
211
211
|
}
|
|
212
|
-
|
|
213
|
-
return !!e() && (i(t2), true);
|
|
214
|
-
}
|
|
215
|
-
const A = (t2) => {
|
|
212
|
+
const z = (t2) => {
|
|
216
213
|
let e2 = u(t2), n2 = Object.getOwnPropertyNames(e2);
|
|
217
214
|
for (let t3 = 0; t3 < n2.length; t3++)
|
|
218
215
|
delete e2[n2[t3]];
|
|
219
216
|
e2 = null, n2 = null;
|
|
220
217
|
};
|
|
221
|
-
class
|
|
218
|
+
class A {
|
|
222
219
|
constructor(t2) {
|
|
223
220
|
__publicField(this, "to");
|
|
224
221
|
__publicField(this, "scope", "singleton");
|
|
225
222
|
__publicField(this, "type", "generic");
|
|
226
|
-
__publicField(this, "onInit",
|
|
223
|
+
__publicField(this, "onInit", K);
|
|
227
224
|
this.from = t2, this.to = t2;
|
|
228
225
|
}
|
|
229
226
|
}
|
|
230
|
-
class
|
|
227
|
+
class U {
|
|
231
228
|
constructor() {
|
|
232
229
|
__publicField(this, "transients", /* @__PURE__ */ new WeakMap());
|
|
233
230
|
__publicField(this, "singletons", /* @__PURE__ */ new WeakMap());
|
|
@@ -237,7 +234,7 @@ class K {
|
|
|
237
234
|
__publicField(this, "current");
|
|
238
235
|
}
|
|
239
236
|
bind(t2) {
|
|
240
|
-
return this.current = new
|
|
237
|
+
return this.current = new A(t2), this;
|
|
241
238
|
}
|
|
242
239
|
to(t2) {
|
|
243
240
|
return this.current.to = t2, this;
|
|
@@ -270,97 +267,98 @@ class K {
|
|
|
270
267
|
let n2 = this.transients.get(t2);
|
|
271
268
|
return n2 || (this.bind(t2).transient(), n2 = this.transients.get(t2)), n2.onInit(n2, ...e2);
|
|
272
269
|
}
|
|
273
|
-
use(
|
|
274
|
-
let
|
|
275
|
-
|
|
270
|
+
use(s2, ...u2) {
|
|
271
|
+
let a2, f2, l2, h2, p2, b2, g2, d2 = e();
|
|
272
|
+
console.log("className", s2.name);
|
|
273
|
+
if (this.subscribers.set(s2, (this.subscribers.get(s2) || 0) + 1), d2 && i(() => {
|
|
276
274
|
var _a;
|
|
277
|
-
const t2 = (this.subscribers.get(
|
|
278
|
-
if (this.subscribers.set(
|
|
275
|
+
const t2 = (this.subscribers.get(s2) || 0) - 1;
|
|
276
|
+
if (this.subscribers.set(s2, t2), this.effectScopes.has(s2) && t2 <= 0) {
|
|
279
277
|
let t3;
|
|
280
|
-
if ((_a = this.effectScopes.get(
|
|
281
|
-
for (t3 in
|
|
282
|
-
delete
|
|
283
|
-
if (h2)
|
|
284
|
-
for (t3 in h2)
|
|
285
|
-
h2[t3] = null;
|
|
278
|
+
if ((_a = this.effectScopes.get(s2)) == null ? void 0 : _a.stop(), l2)
|
|
279
|
+
for (t3 in l2)
|
|
280
|
+
delete l2[t3];
|
|
286
281
|
if (p2)
|
|
287
282
|
for (t3 in p2)
|
|
288
|
-
p2[t3]
|
|
283
|
+
delete p2[t3];
|
|
289
284
|
if (b2)
|
|
290
285
|
for (t3 in b2)
|
|
291
|
-
b2[t3]
|
|
292
|
-
|
|
286
|
+
delete b2[t3];
|
|
287
|
+
if (g2)
|
|
288
|
+
for (t3 in g2)
|
|
289
|
+
delete g2[t3];
|
|
290
|
+
l2 && z(l2), d2 = a2 = f2 = l2 = p2 = b2 = g2 = t3 = null, this.effectScopes.delete(s2), this.instances.delete(s2), this.subscribers.delete(s2), F.debug && console.log("ivue.kernel: instance deleted:", s2.name);
|
|
293
291
|
}
|
|
294
|
-
}), this.instances.has(
|
|
295
|
-
return this.instances.get(
|
|
292
|
+
}), this.instances.has(s2))
|
|
293
|
+
return this.instances.get(s2);
|
|
296
294
|
{
|
|
297
|
-
if (
|
|
298
|
-
if ("ivue" !==
|
|
299
|
-
throw new Error("ivue.kernel: use(" + E(
|
|
295
|
+
if (f2 = this.singletons.get(s2), f2) {
|
|
296
|
+
if ("ivue" !== f2.type)
|
|
297
|
+
throw new Error("ivue.kernel: use(" + E(s2) + ") method should be used only with 'ivue' mappings, use get(" + E(s2) + ") method for standard JavaScript singleton Kernel mappings.");
|
|
300
298
|
} else
|
|
301
|
-
this.bind(
|
|
302
|
-
if (
|
|
303
|
-
return this.instances.set(
|
|
304
|
-
|
|
305
|
-
let
|
|
299
|
+
this.bind(s2).singleton().ivue(), f2 = this.singletons.get(s2);
|
|
300
|
+
if (a2 = n(!!d2), this.effectScopes.set(s2, a2), S.before.has(f2.to) && (b2 = { mapping: f2, self: null, return: null, name: f2.to.constructor.name, args: u2 }, true === k("before", f2.to, b2)))
|
|
301
|
+
return this.instances.set(s2, b2.return), b2.return;
|
|
302
|
+
h2 = P(f2.to.prototype), p2 = h2.size ? {} : null;
|
|
303
|
+
let i2 = new Proxy(r(new s2(...u2)), { get: (t2, e2) => {
|
|
306
304
|
var _a, _b;
|
|
307
|
-
return
|
|
305
|
+
return h2.has(e2) && ((_b = (_a = i2.constructor) == null ? void 0 : _a.behavior) == null ? void 0 : _b[e2]) !== R.OFF ? (e2 in p2 || (a2 == null ? void 0 : a2.run(() => p2[e2] = o(() => h2.get(e2).get.bind(i2)()))), p2[e2].value) : "toRefs" === e2 ? J(i2, h2, p2, a2) : t2[e2];
|
|
308
306
|
} });
|
|
309
|
-
if ("behavior" in
|
|
310
|
-
for (const e2 in
|
|
311
|
-
if (!
|
|
312
|
-
if ("function" == typeof
|
|
313
|
-
if (
|
|
307
|
+
if ("behavior" in i2.constructor) {
|
|
308
|
+
for (const e2 in i2.constructor.behavior)
|
|
309
|
+
if (!h2.has(e2))
|
|
310
|
+
if ("function" == typeof i2[e2]) {
|
|
311
|
+
if (i2.constructor.behavior[e2] === R.OFF)
|
|
314
312
|
continue;
|
|
315
|
-
y(
|
|
313
|
+
y(g2) || (g2 = {}), g2[e2] = i2[e2], $(f2, i2.constructor.behavior[e2], g2[e2], i2, e2, a2, b2);
|
|
316
314
|
} else
|
|
317
|
-
|
|
315
|
+
i2.constructor.behavior[e2] === R.OFF && (i2 == null ? void 0 : i2[e2]) && "object" == typeof i2[e2] && (i2[e2] = t(i2[e2]));
|
|
318
316
|
}
|
|
319
|
-
return S.after.has(
|
|
317
|
+
return S.after.has(f2.to) && (b2 = { mapping: f2, self: i2, name: f2.to.constructor.name, return: i2, args: u2 }, true === k("after", f2.to, b2)) ? (this.instances.set(s2, b2.return), b2.return) : ("init" in i2 && a2.run(() => i2.init()), this.instances.set(s2, i2), F.debug && console.log("ivue.kernel: instance created:", s2.name, "current scope", e(), "current instance", c()), i2);
|
|
320
318
|
}
|
|
321
319
|
}
|
|
322
|
-
init(
|
|
323
|
-
let
|
|
324
|
-
if (
|
|
325
|
-
if ("ivue" !==
|
|
326
|
-
throw new Error("ivue.kernel: init(" + E(
|
|
320
|
+
init(s2, ...u2) {
|
|
321
|
+
let c2 = this.transients.get(s2);
|
|
322
|
+
if (c2) {
|
|
323
|
+
if ("ivue" !== c2.type)
|
|
324
|
+
throw new Error("ivue.kernel: init(" + E(s2) + ") method should be used only with 'ivue' mappings, use make(" + E(s2) + ") method for standard JavaScript transient Kernel mappings.");
|
|
327
325
|
} else
|
|
328
|
-
this.bind(
|
|
329
|
-
let
|
|
330
|
-
if (S.before.has(
|
|
331
|
-
return
|
|
332
|
-
let
|
|
333
|
-
|
|
334
|
-
let
|
|
326
|
+
this.bind(s2).transient().ivue(), c2 = this.transients.get(s2);
|
|
327
|
+
let a2, f2, l2, h2 = e(), p2 = n(!!h2);
|
|
328
|
+
if (S.before.has(c2.to) && (a2 = { mapping: c2, self: null, return: null, name: c2.to.constructor.name, args: u2 }, true === k("before", c2.to, a2)))
|
|
329
|
+
return a2.return;
|
|
330
|
+
let b2 = P(c2.to.prototype);
|
|
331
|
+
f2 = b2.size ? {} : null;
|
|
332
|
+
let g2 = new Proxy(r(new s2(...u2)), { get: (t2, e2) => {
|
|
335
333
|
var _a, _b;
|
|
336
|
-
return
|
|
334
|
+
return b2.has(e2) && ((_b = (_a = g2.constructor) == null ? void 0 : _a.behavior) == null ? void 0 : _b[e2]) !== R.OFF ? (e2 in f2 || (p2 == null ? void 0 : p2.run(() => f2[e2] = o(() => b2.get(e2).get.bind(g2)()))), f2[e2].value) : "toRefs" === e2 ? J(g2, b2, f2, p2) : t2[e2];
|
|
337
335
|
} });
|
|
338
|
-
if ("behavior" in
|
|
339
|
-
for (const e2 in
|
|
340
|
-
if (!
|
|
341
|
-
if ("function" == typeof
|
|
342
|
-
if (
|
|
336
|
+
if ("behavior" in g2.constructor) {
|
|
337
|
+
for (const e2 in g2.constructor.behavior)
|
|
338
|
+
if (!b2.has(e2))
|
|
339
|
+
if ("function" == typeof g2[e2]) {
|
|
340
|
+
if (g2.constructor.behavior[e2] === R.OFF)
|
|
343
341
|
continue;
|
|
344
|
-
y(
|
|
342
|
+
y(l2) || (l2 = {}), l2[e2] = g2[e2], $(c2, g2.constructor.behavior[e2], l2[e2], g2, e2, p2, a2);
|
|
345
343
|
} else
|
|
346
|
-
|
|
344
|
+
g2.constructor.behavior[e2] === R.OFF && (g2 == null ? void 0 : g2[e2]) && "object" == typeof g2[e2] && (g2[e2] = t(g2[e2]));
|
|
347
345
|
}
|
|
348
|
-
return S.after.has(
|
|
346
|
+
return S.after.has(c2.to) && (a2 = { mapping: c2, self: g2, return: g2, name: c2.to.constructor.name, args: u2 }, true === k("after", c2.to, a2)) ? a2.return : ("init" in g2 && p2.run(() => g2.init()), h2 && i(() => {
|
|
349
347
|
let t2;
|
|
350
|
-
if (
|
|
351
|
-
for (t2 in c2)
|
|
352
|
-
c2[t2] = null;
|
|
353
|
-
if (a2)
|
|
348
|
+
if (p2 == null ? void 0 : p2.stop(), z(g2), a2)
|
|
354
349
|
for (t2 in a2)
|
|
355
|
-
a2[t2]
|
|
350
|
+
delete a2[t2];
|
|
356
351
|
if (f2)
|
|
357
352
|
for (t2 in f2)
|
|
358
|
-
f2[t2]
|
|
359
|
-
l2
|
|
360
|
-
|
|
353
|
+
delete f2[t2];
|
|
354
|
+
if (l2)
|
|
355
|
+
for (t2 in l2)
|
|
356
|
+
delete l2[t2];
|
|
357
|
+
h2 = p2 = g2 = c2 = f2 = a2 = l2 = t2 = null;
|
|
358
|
+
}), g2);
|
|
361
359
|
}
|
|
362
360
|
}
|
|
363
|
-
function
|
|
361
|
+
function K(t2, ...r2) {
|
|
364
362
|
if (S.before.has(t2.to)) {
|
|
365
363
|
const e2 = { mapping: t2, self: null, return: null, name: t2.to.constructor.name, args: r2 };
|
|
366
364
|
if (true === k("before", t2.to, e2))
|
|
@@ -383,48 +381,49 @@ function q(t2, ...r2) {
|
|
|
383
381
|
}
|
|
384
382
|
return i2;
|
|
385
383
|
}
|
|
386
|
-
function
|
|
387
|
-
let
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
384
|
+
function q(t2, o2, ...s2) {
|
|
385
|
+
let u2 = n(!!e()), c2 = P(Reflect.getPrototypeOf(o2)), a2 = c2.value ? {} : null, f2 = W(r(Object.create(o2)), c2, a2, u2, ...s2);
|
|
386
|
+
var l2;
|
|
387
|
+
return "function" == typeof f2.init && u2.run(() => f2.init()), l2 = () => {
|
|
388
|
+
u2 == null ? void 0 : u2.stop(), z(f2), u2 = f2 = null;
|
|
389
|
+
}, e() && i(l2), f2;
|
|
391
390
|
}
|
|
392
|
-
const
|
|
393
|
-
class
|
|
391
|
+
const B = new U(), G = B.bind.bind(B), H = B.get.bind(B), L = B.make.bind(B), Q = B.use.bind(B), V = B.init.bind(B);
|
|
392
|
+
class X {
|
|
394
393
|
constructor() {
|
|
395
394
|
__publicField(this, "$");
|
|
396
395
|
__publicField(this, "capsule");
|
|
397
396
|
}
|
|
398
397
|
useCapsule(e2 = []) {
|
|
399
|
-
this.$ =
|
|
398
|
+
this.$ = Q(this.capsule, this, ...e2), t(this.$);
|
|
400
399
|
}
|
|
401
400
|
initCapsule(e2 = []) {
|
|
402
|
-
this.$ =
|
|
401
|
+
this.$ = V(this.capsule, this, ...e2), t(this.$);
|
|
403
402
|
}
|
|
404
403
|
getCapsule(t2 = []) {
|
|
405
|
-
this.$ =
|
|
404
|
+
this.$ = H(this.capsule, this, ...t2);
|
|
406
405
|
}
|
|
407
406
|
makeCapsule(t2 = []) {
|
|
408
|
-
this.$ =
|
|
407
|
+
this.$ = L(this.capsule, this, ...t2);
|
|
409
408
|
}
|
|
410
409
|
}
|
|
411
|
-
function
|
|
410
|
+
function Y(t2, e2) {
|
|
412
411
|
t2.behavior = v(t2.behavior ?? {}, { $instance: R.OFF });
|
|
413
412
|
}
|
|
414
|
-
class
|
|
413
|
+
class Z {
|
|
415
414
|
get $instance() {
|
|
416
415
|
return c();
|
|
417
416
|
}
|
|
418
417
|
constructor(t2) {
|
|
419
|
-
|
|
418
|
+
Y(t2);
|
|
420
419
|
}
|
|
421
420
|
}
|
|
422
|
-
function
|
|
421
|
+
function tt(t2, e2) {
|
|
423
422
|
I(t2, ({ self: t3 }) => {
|
|
424
423
|
"beforeMount" in t3 && a(() => t3.beforeMount()), "mounted" in t3 && f(() => t3.mounted()), "beforeUnmount" in t3 && l(() => t3.beforeUnmount()), "unmounted" in t3 && h(() => t3.unmounted());
|
|
425
424
|
});
|
|
426
425
|
}
|
|
427
|
-
class
|
|
426
|
+
class et {
|
|
428
427
|
constructor(t2) {
|
|
429
428
|
__publicField(this, "beforeMount", function() {
|
|
430
429
|
});
|
|
@@ -434,85 +433,85 @@ class nt {
|
|
|
434
433
|
});
|
|
435
434
|
__publicField(this, "unmounted", function() {
|
|
436
435
|
});
|
|
437
|
-
|
|
436
|
+
tt(t2);
|
|
438
437
|
}
|
|
439
438
|
}
|
|
440
|
-
function
|
|
439
|
+
function nt(t2, e2) {
|
|
441
440
|
t2.behavior = v(t2.behavior ?? {}, { $refs: R.OFF });
|
|
442
441
|
}
|
|
443
|
-
class
|
|
442
|
+
class rt {
|
|
444
443
|
get $refs() {
|
|
445
444
|
var _a;
|
|
446
445
|
return (_a = c()) == null ? void 0 : _a.refs;
|
|
447
446
|
}
|
|
448
447
|
constructor(t2) {
|
|
449
|
-
|
|
448
|
+
nt(t2);
|
|
450
449
|
}
|
|
451
450
|
}
|
|
452
|
-
class
|
|
451
|
+
class ot {
|
|
453
452
|
get route() {
|
|
454
453
|
var _a;
|
|
455
454
|
return p((_a = F.router) == null ? void 0 : _a.currentRoute);
|
|
456
455
|
}
|
|
457
456
|
}
|
|
458
|
-
class
|
|
457
|
+
class it {
|
|
459
458
|
get router() {
|
|
460
459
|
return F.router;
|
|
461
460
|
}
|
|
462
461
|
}
|
|
463
|
-
class
|
|
462
|
+
class st {
|
|
464
463
|
}
|
|
465
|
-
O(
|
|
466
|
-
class
|
|
464
|
+
O(st, [it, ot]);
|
|
465
|
+
class ut {
|
|
467
466
|
constructor() {
|
|
468
467
|
__publicField(this, "$emit", (...t2) => {
|
|
469
468
|
});
|
|
470
469
|
}
|
|
471
470
|
}
|
|
472
|
-
class
|
|
471
|
+
class ct {
|
|
473
472
|
constructor() {
|
|
474
473
|
__publicField(this, "$nextTick", b);
|
|
475
474
|
}
|
|
476
475
|
}
|
|
477
|
-
class
|
|
476
|
+
class at {
|
|
478
477
|
constructor(t2) {
|
|
479
478
|
!function(t3, e2) {
|
|
480
|
-
|
|
479
|
+
Y(t3), nt(t3), tt(t3);
|
|
481
480
|
}(t2);
|
|
482
481
|
}
|
|
483
482
|
}
|
|
484
|
-
O(
|
|
483
|
+
O(at, [st, et, ut, ct, rt, Z]);
|
|
485
484
|
export {
|
|
486
485
|
R as IVUE,
|
|
487
|
-
|
|
488
|
-
|
|
486
|
+
U as Kernel,
|
|
487
|
+
A as Mapping,
|
|
489
488
|
O as Traits,
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
489
|
+
X as UseCapsule,
|
|
490
|
+
ut as UseEmit,
|
|
491
|
+
Z as UseInstance,
|
|
492
|
+
et as UseMounting,
|
|
493
|
+
rt as UseRefs,
|
|
494
|
+
ot as UseRoute,
|
|
495
|
+
it as UseRouter,
|
|
496
|
+
st as UseRouting,
|
|
497
|
+
ct as UseTick,
|
|
498
|
+
at as UseVue,
|
|
500
499
|
I as after,
|
|
501
500
|
_ as before,
|
|
502
|
-
|
|
501
|
+
G as bind,
|
|
503
502
|
F as config,
|
|
504
503
|
v as extend,
|
|
505
|
-
|
|
506
|
-
|
|
504
|
+
H as get,
|
|
505
|
+
V as init,
|
|
507
506
|
x as iobj,
|
|
508
507
|
D as ivue,
|
|
509
|
-
|
|
508
|
+
q as ivueInversify,
|
|
510
509
|
W as ivueTransform,
|
|
511
|
-
|
|
512
|
-
|
|
510
|
+
B as kernel,
|
|
511
|
+
L as make,
|
|
513
512
|
j as pre,
|
|
514
513
|
d as raw,
|
|
515
514
|
C as setup,
|
|
516
515
|
g as unraw,
|
|
517
|
-
|
|
516
|
+
Q as use
|
|
518
517
|
};
|
package/dist/index.umd.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var __defProp=Object.defineProperty,__defNormalProp=(e,t,n)=>t in e?__defProp(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,__publicField=(e,t,n)=>(__defNormalProp(e,"symbol"!=typeof t?t+"":t,n),n);!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("vue")):"function"==typeof define&&define.amd?define(["exports","vue"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).ivue={},e.Vue)}(this,(function(e,t){"use strict";function n(e){return e&&"object"==typeof e&&!Array.isArray(e)}function r(e,...t){return o(e,[...t],new WeakMap)}function o(e,t,r=null){if(!t.length)return e;r.set(e,!0);const i=t.shift();if(n(e)&&n(i))for(const u in i)n(i[u])&&"Object"===i[u].constructor.name?r.has(i[u])||null!==(s=i[u])&&"object"==typeof s&&"function"==typeof s.then&&"function"==typeof s.catch||void 0===e[u]?e[u]=i[u]:n(e[u])?"Object"!==e[u].constructor.name?e[u]=i[u]:o(e[u],[i[u]],r):e[u]=i[u]:e[u]=i[u];var s;return o(e,t,r)}function i(e,t){const n={},r=Object.getOwnPropertyNames(e.prototype).reduce(((t,r)=>{const o=Object.getOwnPropertyDescriptor(e.prototype,r);let i=!1;return(null==o?void 0:o.set)&&!(null==o?void 0:o.get)&&(n[r]=null==o?void 0:o.set,i=!0),i||(t[r]=!0),t}),{}),o={};t.reverse().forEach((t=>{const i=new t(e);for(const n in i)n in r||(o[n]=!0),n in o&&Object.defineProperty(e.prototype,n,{value:i[n],writable:!0});Object.getOwnPropertyNames(t.prototype).forEach((i=>{if("constructor"!==i&&(i in r||(o[i]=!0),i in o)){const r=Object.getOwnPropertyDescriptor(t.prototype,i)||Object.create(null);(null==r?void 0:r.set)&&!(i in n)&&(n[i]=null==r?void 0:r.set),(null==r?void 0:r.get)&&!(null==r?void 0:r.set)&&i in n&&(r.set=n[i]),Object.defineProperty(e.prototype,i,r)}}))}))}const s=new Map;function u(e){if(s.has(e))return s.get(e);const t=e,n=[];for(;e&&"Object"!==e.constructor.name;)n.push.apply(n,Object.entries(Object.getOwnPropertyDescriptors(e))),e=Object.getPrototypeOf(e.constructor.prototype);const r=new Map;for(let o=0;o<n.length;o++)"__proto__"!==n[o][0]&&"function"==typeof n[o][1].get&&r.set(n[o][0],n[o][1]);return s.set(t,r),r}function c(e){let t="";try{t=(null==e?void 0:e.name)||String(e)}catch(n){t="Unknown[failed to convert to string]"}return t}let l={router:null,debug:!1};const a={before:new Map,after:new Map};function f(e,t,n){const r=a[e].get(t);for(let o=0;o<(null==r?void 0:r.length);o++)if(!0===r[o](n,...n.args))return n.return}function p(e,t,n,r){var o;a[e].has(t)?null==(o=a[e].get(t))||o[r.top?"unshift":"push"](n):a[e].set(t,[n])}function h(e,t){var n;if(Array.isArray(e)){if("function"!=typeof e[0])throw new Error("ivue.kernel.behavior: Cannot autobind intercept to "+e[0]+". Supply a valid Class to autobind behavior.");if("function"==typeof e[1]){const n=e[1].toString();if("class"!==n.substring(0,5)){const r=n.indexOf("(");n.substring(0,r).split(" "),e[0].behavior={..."object"==typeof e[0].behavior?e[0].behavior:{},funcName:t?"SCOPED_INTERCEPT":"INTERCEPT"}}return e[1]}throw new Error('ivue.kernel.behavior: Cannot autobind intercept "'+e[1]+'" to '+((null==(n=e[0])?void 0:n.name)??e[0]))}return e}function b(e,t,n={top:!1,scoped:!1}){p("after",h(e,n.scoped),t,n)}function d(e,t,n,r,o){let i=a[e].get(t.constructor.prototype[n]);for(let s=0;s<(null==i?void 0:i.length);s++)if(!0===i[s](o,...r))return!0;i=a[e].get(t[n]);for(let s=0;s<(null==i?void 0:i.length);s++)if(!0===i[s](o,...r))return!0}var g,v=((g=v||{}).SCOPED="SCOPED",g.SCOPED_INTERCEPT="SCOPED_INTERCEPT",g.INTERCEPT="INTERCEPT",g.OFF="OFF",g);function m(e,t,n,r,o,i,s){let u;if("SCOPED"===t)return Object.defineProperty(r,o,{value:function(...e){return i.run((()=>u=n.bind(r)(...e))),u},writable:!0,configurable:!0,enumerable:!1});const c=(...t)=>(!0===d("before",r,o,t,s={mapping:e,self:r,return:u,name:o,args:t})||(u=n.bind(r)(...t),s.return=u,d("after",r,o,t,s)),s.return);switch(t){case"INTERCEPT":return Object.defineProperty(r,o,{value:function(...e){return c(...e)},writable:!0,configurable:!0,enumerable:!1});case"SCOPED_INTERCEPT":return Object.defineProperty(r,o,{value:function(...e){return i.run((()=>u=c(...e))),u},writable:!0,configurable:!0,enumerable:!1})}}function y(e,n,r,o,...i){return new Proxy(e,{get:(i,s)=>{var u,c;return n.has(s)&&(null==(c=null==(u=e.constructor)?void 0:u.behavior)?void 0:c[s])!==v.OFF?(s in r||(null==o||o.run((()=>r[s]=t.computed((()=>{var t;return null==(t=n.get(s))?void 0:t.get.bind(e)()}))))),r[s].value):"toRefs"===s?_(e,n,r,o):i[s]}})}function _(e,n,r,o){return function(...i){const s={};if(i.length)for(let u=0;u<i.length;u++){const c=i[u];n.has(c)?c in r?s[c]=r[c]:o.run((()=>s[c]=r[c]=t.computed((()=>{var t;return null==(t=n.get(c))?void 0:t.get.bind(e)()})))):"function"==typeof e[c]?s[c]=e[c].bind(e):s[c]=t.toRef(e,c)}else{for(const r in e)n.has(r)||("function"==typeof e[r]?s[r]=e[r].bind(e):s[r]=t.toRef(e,r));n.forEach(((n,i)=>{i in r?s[i]=r[i]:o.run((()=>s[i]=r[i]=t.computed((()=>n.get.bind(e)()))))}))}return new Proxy(e,{get:(t,n)=>n in s?s[n]:n in t?t[n].bind(e):void 0})}}function w(e){return!!t.getCurrentScope()&&(t.onScopeDispose(e),!0)}const O=e=>{let n=t.toRaw(e),r=Object.getOwnPropertyNames(n);for(let t=0;t<r.length;t++)delete n[r[t]];n=null,r=null};class F{constructor(e){__publicField(this,"to"),__publicField(this,"scope","singleton"),__publicField(this,"type","generic"),__publicField(this,"onInit",S),this.from=e,this.to=e}}class P{constructor(){__publicField(this,"transients",new WeakMap),__publicField(this,"singletons",new WeakMap),__publicField(this,"instances",new WeakMap),__publicField(this,"subscribers",new WeakMap),__publicField(this,"effectScopes",new WeakMap),__publicField(this,"current")}bind(e){return this.current=new F(e),this}to(e){return this.current.to=e,this}singleton(){return this.current.scope="singleton",this[this.current.scope+"s"].set(this.current.from,this.current),this}transient(){return this.current.scope="transient",this[this.current.scope+"s"].set(this.current.from,this.current),this}type(e){return this.current.type=e,this}ivue(){return this.current.type="ivue",this.current.onInit=()=>{},this}onInit(e){return this.current.onInit=e,this}get(e,...t){if(this.instances.has(e))return this.instances.get(e);let n=this.singletons.get(e);n||(this.bind(e).singleton(),n=this.singletons.get(e));const r=n.onInit(n,...t);return this.instances.set(e,r),r}make(e,...t){let n=this.transients.get(e);return n||(this.bind(e).transient(),n=this.transients.get(e)),n.onInit(n,...t)}use(e,...r){let o,i,s,p,h,b,d;if(this.subscribers.set(e,(this.subscribers.get(e)||0)+1),w((()=>{var t;const n=(this.subscribers.get(e)||0)-1;if(this.subscribers.set(e,n),this.effectScopes.has(e)&&n<=0){let n;if(null==(t=this.effectScopes.get(e))||t.stop(),s)for(n in s)delete s[n];if(h)for(n in h)h[n]=null;if(b)for(n in b)b[n]=null;if(d)for(n in d)d[n]=null;s&&O(s),o=i=s=h=b=d=n=null,this.effectScopes.delete(e),this.instances.delete(e),this.subscribers.delete(e),l.debug&&console.log("ivue.kernel: instance deleted:",e.name)}})),this.instances.has(e))return this.instances.get(e);{if(i=this.singletons.get(e),i){if("ivue"!==i.type)throw new Error("ivue.kernel: use("+c(e)+") method should be used only with 'ivue' mappings, use get("+c(e)+") method for standard JavaScript singleton Kernel mappings.")}else this.bind(e).singleton().ivue(),i=this.singletons.get(e);if(o=t.effectScope(!!t.getCurrentScope()),this.effectScopes.set(e,o),a.before.has(i.to)&&(b={mapping:i,self:null,return:null,name:i.to.constructor.name,args:r},!0===f("before",i.to,b)))return this.instances.set(e,b.return),b.return;p=u(i.to.prototype),h=p.size?{}:null;let s=new Proxy(t.reactive(new e(...r)),{get:(e,n)=>{var r,i;return p.has(n)&&(null==(i=null==(r=s.constructor)?void 0:r.behavior)?void 0:i[n])!==v.OFF?(n in h||(null==o||o.run((()=>h[n]=t.computed((()=>p.get(n).get.bind(s)()))))),h[n].value):"toRefs"===n?_(s,p,h,o):e[n]}});if("behavior"in s.constructor)for(const e in s.constructor.behavior)if(!p.has(e))if("function"==typeof s[e]){if(s.constructor.behavior[e]===v.OFF)continue;n(d)||(d={}),d[e]=s[e],m(i,s.constructor.behavior[e],d[e],s,e,o,b)}else s.constructor.behavior[e]===v.OFF&&(null==s?void 0:s[e])&&"object"==typeof s[e]&&(s[e]=t.markRaw(s[e]));return a.after.has(i.to)&&(b={mapping:i,self:s,name:i.to.constructor.name,return:s,args:r},!0===f("after",i.to,b))?(this.instances.set(e,b.return),b.return):("init"in s&&o.run((()=>s.init())),this.instances.set(e,s),l.debug&&console.log("ivue.kernel: instance created:",e.name,"current scope",t.getCurrentScope(),"current instance",t.getCurrentInstance()),s)}}init(e,...r){let o=this.transients.get(e);if(o){if("ivue"!==o.type)throw new Error("ivue.kernel: init("+c(e)+") method should be used only with 'ivue' mappings, use make("+c(e)+") method for standard JavaScript transient Kernel mappings.")}else this.bind(e).transient().ivue(),o=this.transients.get(e);let i,s,l,p=t.effectScope(!!t.getCurrentScope());if(a.before.has(o.to)&&(i={mapping:o,self:null,return:null,name:o.to.constructor.name,args:r},!0===f("before",o.to,i)))return i.return;let h=u(o.to.prototype);s=h.size?{}:null;let b=new Proxy(t.reactive(new e(...r)),{get:(e,n)=>{var r,o;return h.has(n)&&(null==(o=null==(r=b.constructor)?void 0:r.behavior)?void 0:o[n])!==v.OFF?(n in s||(null==p||p.run((()=>s[n]=t.computed((()=>h.get(n).get.bind(b)()))))),s[n].value):"toRefs"===n?_(b,h,s,p):e[n]}});if("behavior"in b.constructor)for(const u in b.constructor.behavior)if(!h.has(u))if("function"==typeof b[u]){if(b.constructor.behavior[u]===v.OFF)continue;n(l)||(l={}),l[u]=b[u],m(o,b.constructor.behavior[u],l[u],b,u,p,i)}else b.constructor.behavior[u]===v.OFF&&(null==b?void 0:b[u])&&"object"==typeof b[u]&&(b[u]=t.markRaw(b[u]));return a.after.has(o.to)&&(i={mapping:o,self:b,return:b,name:o.to.constructor.name,args:r},!0===f("after",o.to,i))?i.return:("init"in b&&p.run((()=>b.init())),w((()=>{let e;if(null==p||p.stop(),O(b),i)for(e in i)i[e]=null;if(s)for(e in s)s[e]=null;if(l)for(e in l)l[e]=null;p=b=o=s=i=l=e=null})),b)}}function S(e,...r){if(a.before.has(e.to)){const t={mapping:e,self:null,return:null,name:e.to.constructor.name,args:r};if(!0===f("before",e.to,t))return t.return}let o,i=new e.to(...r);const s=u(e.to.prototype);if("behavior"in i.constructor&&"object"==typeof i.constructor.behavior)for(const u in i.constructor.behavior)if(!s.has(u)&&"function"==typeof i[u]){if(i.constructor.behavior[u]===v.OFF)continue;n(o)||(o={}),o[u]=i[u],m(e,i.constructor.behavior[u],o[u],i,u,t.effectScope(!!t.getCurrentScope()),void 0)}if(a.after.has(e.to)){const t={mapping:e,self:i,return:i,name:e.to.constructor.name,args:r};if(!0===f("after",e.to,t))return t.return}return i}const C=new P,E=C.bind.bind(C),j=C.get.bind(C),k=C.make.bind(C),R=C.use.bind(C),T=C.init.bind(C);function I(e,t){e.behavior=r(e.behavior??{},{$instance:v.OFF})}class M{get $instance(){return t.getCurrentInstance()}constructor(e){I(e)}}function N(e,n){b(e,(({self:e})=>{"beforeMount"in e&&t.onBeforeMount((()=>e.beforeMount())),"mounted"in e&&t.onMounted((()=>e.mounted())),"beforeUnmount"in e&&t.onBeforeUnmount((()=>e.beforeUnmount())),"unmounted"in e&&t.onUnmounted((()=>e.unmounted()))}))}class U{constructor(e){__publicField(this,"beforeMount",(function(){})),__publicField(this,"mounted",(function(){})),__publicField(this,"beforeUnmount",(function(){})),__publicField(this,"unmounted",(function(){})),N(e)}}function D(e,t){e.behavior=r(e.behavior??{},{$refs:v.OFF})}class ${get $refs(){var e;return null==(e=t.getCurrentInstance())?void 0:e.refs}constructor(e){D(e)}}class x{get route(){var e;return t.toValue(null==(e=l.router)?void 0:e.currentRoute)}}class W{get router(){return l.router}}class J{}i(J,[W,x]);class z{constructor(){__publicField(this,"$emit",((...e)=>{}))}}class A{constructor(){__publicField(this,"$nextTick",t.nextTick)}}class V{constructor(e){var t;I(t=e),D(t),N(t)}}i(V,[J,U,z,A,$,M]),e.IVUE=v,e.Kernel=P,e.Mapping=F,e.Traits=i,e.UseCapsule=class{constructor(){__publicField(this,"$"),__publicField(this,"capsule")}useCapsule(e=[]){this.$=R(this.capsule,this,...e),t.markRaw(this.$)}initCapsule(e=[]){this.$=T(this.capsule,this,...e),t.markRaw(this.$)}getCapsule(e=[]){this.$=j(this.capsule,this,...e)}makeCapsule(e=[]){this.$=k(this.capsule,this,...e)}},e.UseEmit=z,e.UseInstance=M,e.UseMounting=U,e.UseRefs=$,e.UseRoute=x,e.UseRouter=W,e.UseRouting=J,e.UseTick=A,e.UseVue=V,e.after=b,e.before=function(e,t,n={top:!1,scoped:!1}){p("before",h(e,n.scoped),t,n)},e.bind=E,e.config=l,e.extend=r,e.get=j,e.init=T,e.iobj=function(e){let n=t.getCurrentScope(),r=t.effectScope(!!n),o=function(e){const t=new Map,n=Object.entries(Object.getOwnPropertyDescriptors(e));for(let r=0;r<n.length;r++)"function"==typeof n[r][1].get&&"__proto__"!==n[r][0]&&t.set(n[r][0],n[r][1]);return t}(e),i=o.size?{}:null,s=y(t.reactive(e),o,i,r);return"init"in s&&r.run((()=>s.init())),n&&t.onScopeDispose((()=>{let t;for(t in null==r||r.stop(),s)delete s[t];for(t in i)delete i[t];n=r=o=i=e=s=t=null})),s},e.ivue=function(e,...n){let r=t.getCurrentScope(),o=t.effectScope(!!r),i=u(e.prototype),s=i.size?{}:null,c=new Proxy(t.reactive(new e(...n)),{get:(e,n)=>{var r,u;return i.has(n)&&(null==(u=null==(r=c.constructor)?void 0:r.behavior)?void 0:u[n])!==v.OFF?(n in s||(null==o||o.run((()=>s[n]=t.computed((()=>i.get(n).get.bind(c)()))))),s[n].value):"toRefs"===n?_(c,i,s,o):e[n]}});return"init"in c&&o.run((()=>c.init())),r&&t.onScopeDispose((()=>{let e;for(e in null==o||o.stop(),c)delete c[e];for(e in s)delete s[e];r=o=i=s=c=e=null})),c},e.ivueInversify=function(e,n,...r){let o=t.effectScope(!!t.getCurrentScope()),i=u(Reflect.getPrototypeOf(n)),s=i.value?{}:null,c=y(t.reactive(Object.create(n)),i,s,o,...r);return"function"==typeof c.init&&o.run((()=>c.init())),w((()=>{null==o||o.stop(),O(c),o=c=null})),c},e.ivueTransform=y,e.kernel=C,e.make=k,e.pre=function(e,t=2){const n=new Set;return JSON.stringify(e,(function(e,t){if("object"==typeof t&&null!==t){if(n.has(t))try{return JSON.parse(JSON.stringify(t))}catch(r){return"[**circular**]"}n.add(t)}return t}),t)},e.raw=function(e){return t.markRaw(e)},e.setup=function(e={}){r(l,e)},e.unraw=function(e){delete e.__v_skip},e.use=R,Object.defineProperty(e,Symbol.toStringTag,{value:"Module"})}));
|
|
1
|
+
var __defProp=Object.defineProperty,__defNormalProp=(e,t,n)=>t in e?__defProp(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,__publicField=(e,t,n)=>(__defNormalProp(e,"symbol"!=typeof t?t+"":t,n),n);!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("vue")):"function"==typeof define&&define.amd?define(["exports","vue"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).ivue={},e.Vue)}(this,(function(e,t){"use strict";function n(e){return e&&"object"==typeof e&&!Array.isArray(e)}function r(e,...t){return o(e,[...t],new WeakMap)}function o(e,t,r=null){if(!t.length)return e;r.set(e,!0);const i=t.shift();if(n(e)&&n(i))for(const u in i)n(i[u])&&"Object"===i[u].constructor.name?r.has(i[u])||null!==(s=i[u])&&"object"==typeof s&&"function"==typeof s.then&&"function"==typeof s.catch||void 0===e[u]?e[u]=i[u]:n(e[u])&&e[u].constructor===Object?o(e[u],[i[u]],r):e[u]=i[u]:e[u]=i[u];var s;return o(e,t,r)}function i(e,t){const n={},r=Object.getOwnPropertyNames(e.prototype).reduce(((t,r)=>{const o=Object.getOwnPropertyDescriptor(e.prototype,r);let i=!1;return(null==o?void 0:o.set)&&!(null==o?void 0:o.get)&&(n[r]=null==o?void 0:o.set,i=!0),i||(t[r]=!0),t}),{}),o={};t.reverse().forEach((t=>{const i=new t(e);for(const n in i)n in r||(o[n]=!0),n in o&&Object.defineProperty(e.prototype,n,{value:i[n],writable:!0});Object.getOwnPropertyNames(t.prototype).forEach((i=>{if("constructor"!==i&&(i in r||(o[i]=!0),i in o)){const r=Object.getOwnPropertyDescriptor(t.prototype,i)||Object.create(null);(null==r?void 0:r.set)&&!(i in n)&&(n[i]=null==r?void 0:r.set),(null==r?void 0:r.get)&&!(null==r?void 0:r.set)&&i in n&&(r.set=n[i]),Object.defineProperty(e.prototype,i,r)}}))}))}const s=new Map;function u(e){if(s.has(e))return s.get(e);const t=e,n=[];for(;e&&"Object"!==e.constructor.name;)n.push.apply(n,Object.entries(Object.getOwnPropertyDescriptors(e))),e=Object.getPrototypeOf(e.constructor.prototype);const r=new Map;for(let o=0;o<n.length;o++)"__proto__"!==n[o][0]&&"function"==typeof n[o][1].get&&r.set(n[o][0],n[o][1]);return s.set(t,r),r}function c(e){let t="";try{t=(null==e?void 0:e.name)||String(e)}catch(n){t="Unknown[failed to convert to string]"}return t}let l={router:null,debug:!1};const a={before:new Map,after:new Map};function f(e,t,n){const r=a[e].get(t);for(let o=0;o<(null==r?void 0:r.length);o++)if(!0===r[o](n,...n.args))return n.return}function p(e,t,n,r){var o;a[e].has(t)?null==(o=a[e].get(t))||o[r.top?"unshift":"push"](n):a[e].set(t,[n])}function h(e,t){var n;if(Array.isArray(e)){if("function"!=typeof e[0])throw new Error("ivue.kernel.behavior: Cannot autobind intercept to "+e[0]+". Supply a valid Class to autobind behavior.");if("function"==typeof e[1]){const n=e[1].toString();if("class"!==n.substring(0,5)){const r=n.indexOf("(");n.substring(0,r).split(" "),e[0].behavior={..."object"==typeof e[0].behavior?e[0].behavior:{},funcName:t?"SCOPED_INTERCEPT":"INTERCEPT"}}return e[1]}throw new Error('ivue.kernel.behavior: Cannot autobind intercept "'+e[1]+'" to '+((null==(n=e[0])?void 0:n.name)??e[0]))}return e}function b(e,t,n={top:!1,scoped:!1}){p("after",h(e,n.scoped),t,n)}function d(e,t,n,r,o){let i=a[e].get(t.constructor.prototype[n]);for(let s=0;s<(null==i?void 0:i.length);s++)if(!0===i[s](o,...r))return!0;i=a[e].get(t[n]);for(let s=0;s<(null==i?void 0:i.length);s++)if(!0===i[s](o,...r))return!0}var g,v=((g=v||{}).SCOPED="SCOPED",g.SCOPED_INTERCEPT="SCOPED_INTERCEPT",g.INTERCEPT="INTERCEPT",g.OFF="OFF",g);function m(e,t,n,r,o,i,s){let u;if("SCOPED"===t)return Object.defineProperty(r,o,{value:function(...e){return i.run((()=>u=n.bind(r)(...e))),u},writable:!0,configurable:!0,enumerable:!1});const c=(...t)=>(!0===d("before",r,o,t,s={mapping:e,self:r,return:u,name:o,args:t})||(u=n.bind(r)(...t),s.return=u,d("after",r,o,t,s)),s.return);switch(t){case"INTERCEPT":return Object.defineProperty(r,o,{value:function(...e){return c(...e)},writable:!0,configurable:!0,enumerable:!1});case"SCOPED_INTERCEPT":return Object.defineProperty(r,o,{value:function(...e){return i.run((()=>u=c(...e))),u},writable:!0,configurable:!0,enumerable:!1})}}function y(e,n,r,o,...i){return new Proxy(e,{get:(i,s)=>{var u,c;return n.has(s)&&(null==(c=null==(u=e.constructor)?void 0:u.behavior)?void 0:c[s])!==v.OFF?(s in r||(null==o||o.run((()=>r[s]=t.computed((()=>{var t;return null==(t=n.get(s))?void 0:t.get.bind(e)()}))))),r[s].value):"toRefs"===s?_(e,n,r,o):i[s]}})}function _(e,n,r,o){return function(...i){const s={};if(i.length)for(let u=0;u<i.length;u++){const c=i[u];n.has(c)?c in r?s[c]=r[c]:o.run((()=>s[c]=r[c]=t.computed((()=>{var t;return null==(t=n.get(c))?void 0:t.get.bind(e)()})))):"function"==typeof e[c]?s[c]=e[c].bind(e):s[c]=t.toRef(e,c)}else{for(const r in e)n.has(r)||("function"==typeof e[r]?s[r]=e[r].bind(e):s[r]=t.toRef(e,r));n.forEach(((n,i)=>{i in r?s[i]=r[i]:o.run((()=>s[i]=r[i]=t.computed((()=>n.get.bind(e)()))))}))}return new Proxy(e,{get:(t,n)=>n in s?s[n]:n in t?t[n].bind(e):void 0})}}const w=e=>{let n=t.toRaw(e),r=Object.getOwnPropertyNames(n);for(let t=0;t<r.length;t++)delete n[r[t]];n=null,r=null};class O{constructor(e){__publicField(this,"to"),__publicField(this,"scope","singleton"),__publicField(this,"type","generic"),__publicField(this,"onInit",S),this.from=e,this.to=e}}class F{constructor(){__publicField(this,"transients",new WeakMap),__publicField(this,"singletons",new WeakMap),__publicField(this,"instances",new WeakMap),__publicField(this,"subscribers",new WeakMap),__publicField(this,"effectScopes",new WeakMap),__publicField(this,"current")}bind(e){return this.current=new O(e),this}to(e){return this.current.to=e,this}singleton(){return this.current.scope="singleton",this[this.current.scope+"s"].set(this.current.from,this.current),this}transient(){return this.current.scope="transient",this[this.current.scope+"s"].set(this.current.from,this.current),this}type(e){return this.current.type=e,this}ivue(){return this.current.type="ivue",this.current.onInit=()=>{},this}onInit(e){return this.current.onInit=e,this}get(e,...t){if(this.instances.has(e))return this.instances.get(e);let n=this.singletons.get(e);n||(this.bind(e).singleton(),n=this.singletons.get(e));const r=n.onInit(n,...t);return this.instances.set(e,r),r}make(e,...t){let n=this.transients.get(e);return n||(this.bind(e).transient(),n=this.transients.get(e)),n.onInit(n,...t)}use(e,...r){let o,i,s,p,h,b,d,g=t.getCurrentScope();if(console.log("className",e.name),this.subscribers.set(e,(this.subscribers.get(e)||0)+1),g&&t.onScopeDispose((()=>{var t;const n=(this.subscribers.get(e)||0)-1;if(this.subscribers.set(e,n),this.effectScopes.has(e)&&n<=0){let n;if(null==(t=this.effectScopes.get(e))||t.stop(),s)for(n in s)delete s[n];if(h)for(n in h)delete h[n];if(b)for(n in b)delete b[n];if(d)for(n in d)delete d[n];s&&w(s),g=o=i=s=h=b=d=n=null,this.effectScopes.delete(e),this.instances.delete(e),this.subscribers.delete(e),l.debug&&console.log("ivue.kernel: instance deleted:",e.name)}})),this.instances.has(e))return this.instances.get(e);{if(i=this.singletons.get(e),i){if("ivue"!==i.type)throw new Error("ivue.kernel: use("+c(e)+") method should be used only with 'ivue' mappings, use get("+c(e)+") method for standard JavaScript singleton Kernel mappings.")}else this.bind(e).singleton().ivue(),i=this.singletons.get(e);if(o=t.effectScope(!!g),this.effectScopes.set(e,o),a.before.has(i.to)&&(b={mapping:i,self:null,return:null,name:i.to.constructor.name,args:r},!0===f("before",i.to,b)))return this.instances.set(e,b.return),b.return;p=u(i.to.prototype),h=p.size?{}:null;let s=new Proxy(t.reactive(new e(...r)),{get:(e,n)=>{var r,i;return p.has(n)&&(null==(i=null==(r=s.constructor)?void 0:r.behavior)?void 0:i[n])!==v.OFF?(n in h||(null==o||o.run((()=>h[n]=t.computed((()=>p.get(n).get.bind(s)()))))),h[n].value):"toRefs"===n?_(s,p,h,o):e[n]}});if("behavior"in s.constructor)for(const e in s.constructor.behavior)if(!p.has(e))if("function"==typeof s[e]){if(s.constructor.behavior[e]===v.OFF)continue;n(d)||(d={}),d[e]=s[e],m(i,s.constructor.behavior[e],d[e],s,e,o,b)}else s.constructor.behavior[e]===v.OFF&&(null==s?void 0:s[e])&&"object"==typeof s[e]&&(s[e]=t.markRaw(s[e]));return a.after.has(i.to)&&(b={mapping:i,self:s,name:i.to.constructor.name,return:s,args:r},!0===f("after",i.to,b))?(this.instances.set(e,b.return),b.return):("init"in s&&o.run((()=>s.init())),this.instances.set(e,s),l.debug&&console.log("ivue.kernel: instance created:",e.name,"current scope",t.getCurrentScope(),"current instance",t.getCurrentInstance()),s)}}init(e,...r){let o=this.transients.get(e);if(o){if("ivue"!==o.type)throw new Error("ivue.kernel: init("+c(e)+") method should be used only with 'ivue' mappings, use make("+c(e)+") method for standard JavaScript transient Kernel mappings.")}else this.bind(e).transient().ivue(),o=this.transients.get(e);let i,s,l,p=t.getCurrentScope(),h=t.effectScope(!!p);if(a.before.has(o.to)&&(i={mapping:o,self:null,return:null,name:o.to.constructor.name,args:r},!0===f("before",o.to,i)))return i.return;let b=u(o.to.prototype);s=b.size?{}:null;let d=new Proxy(t.reactive(new e(...r)),{get:(e,n)=>{var r,o;return b.has(n)&&(null==(o=null==(r=d.constructor)?void 0:r.behavior)?void 0:o[n])!==v.OFF?(n in s||(null==h||h.run((()=>s[n]=t.computed((()=>b.get(n).get.bind(d)()))))),s[n].value):"toRefs"===n?_(d,b,s,h):e[n]}});if("behavior"in d.constructor)for(const u in d.constructor.behavior)if(!b.has(u))if("function"==typeof d[u]){if(d.constructor.behavior[u]===v.OFF)continue;n(l)||(l={}),l[u]=d[u],m(o,d.constructor.behavior[u],l[u],d,u,h,i)}else d.constructor.behavior[u]===v.OFF&&(null==d?void 0:d[u])&&"object"==typeof d[u]&&(d[u]=t.markRaw(d[u]));return a.after.has(o.to)&&(i={mapping:o,self:d,return:d,name:o.to.constructor.name,args:r},!0===f("after",o.to,i))?i.return:("init"in d&&h.run((()=>d.init())),p&&t.onScopeDispose((()=>{let e;if(null==h||h.stop(),w(d),i)for(e in i)delete i[e];if(s)for(e in s)delete s[e];if(l)for(e in l)delete l[e];p=h=d=o=s=i=l=e=null})),d)}}function S(e,...r){if(a.before.has(e.to)){const t={mapping:e,self:null,return:null,name:e.to.constructor.name,args:r};if(!0===f("before",e.to,t))return t.return}let o,i=new e.to(...r);const s=u(e.to.prototype);if("behavior"in i.constructor&&"object"==typeof i.constructor.behavior)for(const u in i.constructor.behavior)if(!s.has(u)&&"function"==typeof i[u]){if(i.constructor.behavior[u]===v.OFF)continue;n(o)||(o={}),o[u]=i[u],m(e,i.constructor.behavior[u],o[u],i,u,t.effectScope(!!t.getCurrentScope()),void 0)}if(a.after.has(e.to)){const t={mapping:e,self:i,return:i,name:e.to.constructor.name,args:r};if(!0===f("after",e.to,t))return t.return}return i}const P=new F,C=P.bind.bind(P),E=P.get.bind(P),j=P.make.bind(P),k=P.use.bind(P),R=P.init.bind(P);function T(e,t){e.behavior=r(e.behavior??{},{$instance:v.OFF})}class I{get $instance(){return t.getCurrentInstance()}constructor(e){T(e)}}function M(e,n){b(e,(({self:e})=>{"beforeMount"in e&&t.onBeforeMount((()=>e.beforeMount())),"mounted"in e&&t.onMounted((()=>e.mounted())),"beforeUnmount"in e&&t.onBeforeUnmount((()=>e.beforeUnmount())),"unmounted"in e&&t.onUnmounted((()=>e.unmounted()))}))}class N{constructor(e){__publicField(this,"beforeMount",(function(){})),__publicField(this,"mounted",(function(){})),__publicField(this,"beforeUnmount",(function(){})),__publicField(this,"unmounted",(function(){})),M(e)}}function U(e,t){e.behavior=r(e.behavior??{},{$refs:v.OFF})}class D{get $refs(){var e;return null==(e=t.getCurrentInstance())?void 0:e.refs}constructor(e){U(e)}}class ${get route(){var e;return t.toValue(null==(e=l.router)?void 0:e.currentRoute)}}class x{get router(){return l.router}}class W{}i(W,[x,$]);class J{constructor(){__publicField(this,"$emit",((...e)=>{}))}}class z{constructor(){__publicField(this,"$nextTick",t.nextTick)}}class A{constructor(e){var t;T(t=e),U(t),M(t)}}i(A,[W,N,J,z,D,I]),e.IVUE=v,e.Kernel=F,e.Mapping=O,e.Traits=i,e.UseCapsule=class{constructor(){__publicField(this,"$"),__publicField(this,"capsule")}useCapsule(e=[]){this.$=k(this.capsule,this,...e),t.markRaw(this.$)}initCapsule(e=[]){this.$=R(this.capsule,this,...e),t.markRaw(this.$)}getCapsule(e=[]){this.$=E(this.capsule,this,...e)}makeCapsule(e=[]){this.$=j(this.capsule,this,...e)}},e.UseEmit=J,e.UseInstance=I,e.UseMounting=N,e.UseRefs=D,e.UseRoute=$,e.UseRouter=x,e.UseRouting=W,e.UseTick=z,e.UseVue=A,e.after=b,e.before=function(e,t,n={top:!1,scoped:!1}){p("before",h(e,n.scoped),t,n)},e.bind=C,e.config=l,e.extend=r,e.get=E,e.init=R,e.iobj=function(e){let n=t.getCurrentScope(),r=t.effectScope(!!n),o=function(e){const t=new Map,n=Object.entries(Object.getOwnPropertyDescriptors(e));for(let r=0;r<n.length;r++)"function"==typeof n[r][1].get&&"__proto__"!==n[r][0]&&t.set(n[r][0],n[r][1]);return t}(e),i=o.size?{}:null,s=y(t.reactive(e),o,i,r);return"init"in s&&r.run((()=>s.init())),n&&t.onScopeDispose((()=>{let t;for(t in null==r||r.stop(),s)delete s[t];for(t in i)delete i[t];n=r=o=i=e=s=t=null})),s},e.ivue=function(e,...n){let r=t.getCurrentScope(),o=t.effectScope(!!r),i=u(e.prototype),s=i.size?{}:null,c=new Proxy(t.reactive(new e(...n)),{get:(e,n)=>{var r,u;return i.has(n)&&(null==(u=null==(r=c.constructor)?void 0:r.behavior)?void 0:u[n])!==v.OFF?(n in s||(null==o||o.run((()=>s[n]=t.computed((()=>i.get(n).get.bind(c)()))))),s[n].value):"toRefs"===n?_(c,i,s,o):e[n]}});return"init"in c&&o.run((()=>c.init())),r&&t.onScopeDispose((()=>{let e;for(e in null==o||o.stop(),c)delete c[e];for(e in s)delete s[e];r=o=i=s=c=e=null})),c},e.ivueInversify=function(e,n,...r){let o=t.effectScope(!!t.getCurrentScope()),i=u(Reflect.getPrototypeOf(n)),s=i.value?{}:null,c=y(t.reactive(Object.create(n)),i,s,o,...r);var l;return"function"==typeof c.init&&o.run((()=>c.init())),l=()=>{null==o||o.stop(),w(c),o=c=null},t.getCurrentScope()&&t.onScopeDispose(l),c},e.ivueTransform=y,e.kernel=P,e.make=j,e.pre=function(e,t=2){const n=new Set;return JSON.stringify(e,(function(e,t){if("object"==typeof t&&null!==t){if(n.has(t))try{return JSON.parse(JSON.stringify(t))}catch(r){return"[**circular**]"}n.add(t)}return t}),t)},e.raw=function(e){return t.markRaw(e)},e.setup=function(e={}){r(l,e)},e.unraw=function(e){delete e.__v_skip},e.use=k,Object.defineProperty(e,Symbol.toStringTag,{value:"Module"})}));
|
package/dist/src/kernel.d.ts
CHANGED
|
@@ -173,10 +173,10 @@ export declare const bind: any;
|
|
|
173
173
|
/**
|
|
174
174
|
* Kernel container getters for plain JavaScript classes.
|
|
175
175
|
*/
|
|
176
|
-
export declare const get:
|
|
177
|
-
export declare const make:
|
|
176
|
+
export declare const get: <T extends AnyClass>(className: T, ...args: InferredArgs<T>) => InstanceType<T>;
|
|
177
|
+
export declare const make: <T extends AnyClass>(className: T, ...args: InferredArgs<T>) => InstanceType<T>;
|
|
178
178
|
/**
|
|
179
179
|
* Kernel container getters for ivue reactive JavaScript classes.
|
|
180
180
|
*/
|
|
181
|
-
export declare const use:
|
|
182
|
-
export declare const init:
|
|
181
|
+
export declare const use: <T extends AnyClass>(className: T, ...args: InferredArgs<T>) => IVue<T>;
|
|
182
|
+
export declare const init: <T extends AnyClass>(className: T, ...args: InferredArgs<T>) => IVue<T>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ivue",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "ivue – Infinite Vue. Advanced State Management & Class Architecture for Vue 3+.",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": {
|
|
@@ -66,11 +66,11 @@
|
|
|
66
66
|
},
|
|
67
67
|
"repository": {
|
|
68
68
|
"type": "git",
|
|
69
|
-
"url": "https://github.com/infinite-system/
|
|
69
|
+
"url": "https://github.com/infinite-system/ivue"
|
|
70
70
|
},
|
|
71
|
-
"homepage": "https://github.com/infinite-system/
|
|
71
|
+
"homepage": "https://github.com/infinite-system/ivue",
|
|
72
72
|
"bugs": {
|
|
73
|
-
"url": "https://github.com/infinite-system/
|
|
73
|
+
"url": "https://github.com/infinite-system/ivue/issues",
|
|
74
74
|
"email": "ekalashnikov@gmail.com"
|
|
75
75
|
},
|
|
76
76
|
"keywords": [
|
package/src/App/App.ts
CHANGED
|
@@ -6,6 +6,7 @@ import { Router } from './Services/Routing/Router'
|
|
|
6
6
|
import routes from './Services/Routing/Routes'
|
|
7
7
|
import { Auth } from './Auth/Auth'
|
|
8
8
|
import { User } from './Auth/User'
|
|
9
|
+
import { IVueTests } from '../../demo/tests/IVueTests'
|
|
9
10
|
|
|
10
11
|
|
|
11
12
|
export class App {
|
|
@@ -18,6 +19,8 @@ export class App {
|
|
|
18
19
|
|
|
19
20
|
get message () { return use(Message) }
|
|
20
21
|
|
|
22
|
+
get ivue () { return use(IVueTests) }
|
|
23
|
+
|
|
21
24
|
load () {
|
|
22
25
|
this.router.$.register(routes)
|
|
23
26
|
return this
|
package/src/App/BlackBox.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createApp } from "vue";
|
|
2
|
+
import { mount, type VueWrapper} from '@vue/test-utils'
|
|
2
3
|
import { vi } from 'vitest'
|
|
3
4
|
import { setup, bind, use } from '@/index'
|
|
4
5
|
import AppComponent from "../../demo/App.vue";
|
|
@@ -11,6 +12,7 @@ import { Router } from './Services/Routing/Router'
|
|
|
11
12
|
import { Auth } from './Auth/Auth.js'
|
|
12
13
|
|
|
13
14
|
import { SingleBooksResultStub } from './Stubs/SingleBooksResultStub'
|
|
15
|
+
import { VueDd } from "vue-dd";
|
|
14
16
|
|
|
15
17
|
export class BlackBox {
|
|
16
18
|
|
|
@@ -22,7 +24,7 @@ export class BlackBox {
|
|
|
22
24
|
|
|
23
25
|
router!: Router
|
|
24
26
|
|
|
25
|
-
vue!:
|
|
27
|
+
vue!: VueWrapper
|
|
26
28
|
|
|
27
29
|
init() {
|
|
28
30
|
|
|
@@ -32,12 +34,17 @@ export class BlackBox {
|
|
|
32
34
|
this.app = use(App).load()
|
|
33
35
|
setup({ router: this.app.router })
|
|
34
36
|
|
|
35
|
-
|
|
37
|
+
this.vue = mount(AppComponent, {
|
|
38
|
+
global: {
|
|
39
|
+
components: {VueDd},
|
|
40
|
+
plugins: [this.app.router]
|
|
41
|
+
}
|
|
42
|
+
});
|
|
36
43
|
|
|
37
|
-
// console.log('router', this.app.router)
|
|
44
|
+
// // console.log('router', this.app.router)
|
|
38
45
|
// this.vue.use(this.app.router)
|
|
39
46
|
|
|
40
|
-
// this.vue.mount("
|
|
47
|
+
// this.vue.mount(document.createElement("div"));
|
|
41
48
|
|
|
42
49
|
|
|
43
50
|
// Object.defineProperty(Router.prototype, 'push', {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { unref } from 'vue';
|
|
1
|
+
import { getCurrentScope, unref } from 'vue';
|
|
2
2
|
import { createRouter, createWebHistory } from 'vue-router'
|
|
3
3
|
import { Traits, UseCapsule, use } from '@/index'
|
|
4
4
|
import { $Message } from '../Message/Message'
|
|
@@ -7,6 +7,7 @@ import type { RouteLocationNormalized } from 'vue-router';
|
|
|
7
7
|
import type { Null, AnyObj, Params } from '@/types/core';
|
|
8
8
|
import type { Router as VueRouter } from 'vue-router'
|
|
9
9
|
|
|
10
|
+
|
|
10
11
|
const __$Router__ = ($ = $Router.prototype) => ([
|
|
11
12
|
// Other
|
|
12
13
|
$.user,
|
|
@@ -63,7 +64,7 @@ export class $Router {
|
|
|
63
64
|
// console.log('this.flatRoutes', this.flatRoutes)
|
|
64
65
|
|
|
65
66
|
this.routeConfig = this.setup(this.routes)
|
|
66
|
-
console.log('routeConfig', this.routeConfig)
|
|
67
|
+
// console.log('routeConfig', this.routeConfig)
|
|
67
68
|
|
|
68
69
|
this.router = createRouter({ history: createWebHistory(), routes: this.routes })
|
|
69
70
|
|
package/src/kernel.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { reactive, markRaw, effectScope, type EffectScope, getCurrentScope, computed, getCurrentInstance } from 'vue';
|
|
1
|
+
import { reactive, markRaw, effectScope, type EffectScope, getCurrentScope, computed, getCurrentInstance, onScopeDispose } from 'vue';
|
|
2
2
|
|
|
3
3
|
import type { MappingScope, MappingType, IVue, AnyClass, InferredArgs, Intercept, Null, Getters, Computeds } from './types/core';
|
|
4
4
|
|
|
@@ -265,13 +265,15 @@ export class Kernel {
|
|
|
265
265
|
/**
|
|
266
266
|
* Define context variables.
|
|
267
267
|
*/
|
|
268
|
-
let
|
|
268
|
+
let current: Null<EffectScope | undefined> = getCurrentScope(),
|
|
269
|
+
scope: Null<EffectScope>,
|
|
269
270
|
mapping: Mapping | any,
|
|
270
271
|
vue: IVue<T> | any,
|
|
271
272
|
getters: Getters | any,
|
|
272
273
|
computeds: Computeds | any,
|
|
273
274
|
intercept: Intercept | any,
|
|
274
275
|
fns: any
|
|
276
|
+
console.log('className', className.name)
|
|
275
277
|
/**
|
|
276
278
|
* Advanced garabage collection and disposal mechanism.
|
|
277
279
|
*/
|
|
@@ -297,15 +299,15 @@ export class Kernel {
|
|
|
297
299
|
*/
|
|
298
300
|
let prop
|
|
299
301
|
if (vue) for (prop in vue) delete vue[prop]
|
|
300
|
-
if (computeds) for (prop in computeds) computeds[prop]
|
|
301
|
-
if (intercept) for (prop in intercept) intercept[prop]
|
|
302
|
-
if (fns) for (prop in fns) fns[prop]
|
|
302
|
+
if (computeds) for (prop in computeds) delete computeds[prop]
|
|
303
|
+
if (intercept) for (prop in intercept) delete intercept[prop]
|
|
304
|
+
if (fns) for (prop in fns) delete fns[prop]
|
|
303
305
|
|
|
304
306
|
if (vue) disposeGarbage(vue)
|
|
305
307
|
/**
|
|
306
308
|
* Dispose objects to null for gc to be able to collect and dispose.
|
|
307
309
|
*/
|
|
308
|
-
scope = mapping = vue = computeds = intercept = fns = prop = null
|
|
310
|
+
current = scope = mapping = vue = computeds = intercept = fns = prop = null
|
|
309
311
|
/**
|
|
310
312
|
* Delete data from WeakMaps.
|
|
311
313
|
*/
|
|
@@ -325,7 +327,7 @@ export class Kernel {
|
|
|
325
327
|
/**
|
|
326
328
|
* Add garbage disposal mechanism.
|
|
327
329
|
*/
|
|
328
|
-
|
|
330
|
+
current ? onScopeDispose(dispose) : null
|
|
329
331
|
/**
|
|
330
332
|
* Instance exists? Return it.
|
|
331
333
|
*/
|
|
@@ -359,7 +361,7 @@ export class Kernel {
|
|
|
359
361
|
/**
|
|
360
362
|
* Create & save effect scope.
|
|
361
363
|
*/
|
|
362
|
-
scope = effectScope(!!
|
|
364
|
+
scope = effectScope(!!current)
|
|
363
365
|
this.effectScopes.set(className, scope)
|
|
364
366
|
/**
|
|
365
367
|
* Run before constructor() intercept functions.
|
|
@@ -535,8 +537,8 @@ export class Kernel {
|
|
|
535
537
|
/**
|
|
536
538
|
* Define context variables.
|
|
537
539
|
*/
|
|
538
|
-
let
|
|
539
|
-
scope: Null<EffectScope> = effectScope(!!
|
|
540
|
+
let current: Null<EffectScope | undefined> = getCurrentScope(),
|
|
541
|
+
scope: Null<EffectScope> = effectScope(!!current),
|
|
540
542
|
intercept: Intercept | any,
|
|
541
543
|
computeds: Computeds | any,
|
|
542
544
|
fns: any
|
|
@@ -667,18 +669,18 @@ export class Kernel {
|
|
|
667
669
|
/**
|
|
668
670
|
* Advanced garabage collection and disposal mechanism.
|
|
669
671
|
*/
|
|
670
|
-
|
|
672
|
+
current ? onScopeDispose(() => {
|
|
671
673
|
scope?.stop();
|
|
672
674
|
let prop
|
|
673
675
|
// Dispose object props of object under the vue reactive proxy
|
|
674
676
|
disposeGarbage(vue)
|
|
675
677
|
// Dispose object props of utility objects properties
|
|
676
|
-
if (intercept) for (prop in intercept) intercept[prop]
|
|
677
|
-
if (computeds) for (prop in computeds) computeds[prop]
|
|
678
|
-
if (fns) for (prop in fns) fns[prop]
|
|
678
|
+
if (intercept) for (prop in intercept) delete intercept[prop]
|
|
679
|
+
if (computeds) for (prop in computeds) delete computeds[prop]
|
|
680
|
+
if (fns) for (prop in fns) delete fns[prop]
|
|
679
681
|
// Dispose all used objects to null
|
|
680
|
-
scope = vue = mapping = computeds = intercept = fns = prop = null
|
|
681
|
-
})
|
|
682
|
+
current = scope = vue = mapping = computeds = intercept = fns = prop = null
|
|
683
|
+
}) : null
|
|
682
684
|
/**
|
|
683
685
|
* Return instance.
|
|
684
686
|
*/
|
|
@@ -801,10 +803,11 @@ export const bind = kernel.bind.bind(kernel)
|
|
|
801
803
|
/**
|
|
802
804
|
* Kernel container getters for plain JavaScript classes.
|
|
803
805
|
*/
|
|
804
|
-
export
|
|
805
|
-
export
|
|
806
|
+
export const get: <T extends AnyClass> (className: T, ...args: InferredArgs<T>) => InstanceType<T> = kernel.get.bind(kernel)
|
|
807
|
+
export const make: <T extends AnyClass> (className: T, ...args: InferredArgs<T>) => InstanceType<T> = kernel.make.bind(kernel)
|
|
808
|
+
|
|
806
809
|
/**
|
|
807
810
|
* Kernel container getters for ivue reactive JavaScript classes.
|
|
808
811
|
*/
|
|
809
|
-
export
|
|
810
|
-
export
|
|
812
|
+
export const use: <T extends AnyClass>(className: T, ...args: InferredArgs<T>) => IVue<T> = kernel.use.bind(kernel);
|
|
813
|
+
export const init: <T extends AnyClass>(className: T, ...args: InferredArgs<T>) => IVue<T> = kernel.init.bind(kernel);
|
package/src/tests/auth.spec.ts
CHANGED
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
import { describe, it, beforeEach, expect, vi } from 'vitest'
|
|
2
2
|
import { BlackBox } from '../App/BlackBox'
|
|
3
3
|
import type { App } from '@/App/App';
|
|
4
|
+
import type { VueWrapper } from '@vue/test-utils';
|
|
5
|
+
|
|
6
|
+
export default function sleep (ms) {
|
|
7
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
8
|
+
}
|
|
4
9
|
|
|
5
10
|
let box: BlackBox
|
|
6
11
|
let app: App
|
|
12
|
+
let vue: VueWrapper
|
|
7
13
|
|
|
8
14
|
function wait () {
|
|
9
15
|
return setTimeout(() => {})
|
|
@@ -13,18 +19,44 @@ describe('--- auth test ----', () => {
|
|
|
13
19
|
|
|
14
20
|
beforeEach(() => {
|
|
15
21
|
box = new BlackBox().init()
|
|
22
|
+
vue = box.vue
|
|
16
23
|
app = box.app
|
|
17
24
|
})
|
|
18
25
|
|
|
19
|
-
it('root route redirects to login', async () => {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
26
|
+
// it('root route redirects to login', async () => {
|
|
27
|
+
// await app.router.push({ name: 'root' })
|
|
28
|
+
// // console.log(app.router)
|
|
29
|
+
// expect(app.router.active.name).toBe('login')
|
|
30
|
+
// })
|
|
31
|
+
|
|
32
|
+
// it('successful login redirects to homepage', async () => {
|
|
33
|
+
// await app.router.push({ name: 'root' })
|
|
34
|
+
|
|
35
|
+
// app.auth.email = 'ekalashnikov@gmail.com'
|
|
36
|
+
// app.auth.password = 'test1234'
|
|
37
|
+
|
|
38
|
+
// const spy = vi.spyOn(app.router, 'push')
|
|
39
|
+
|
|
40
|
+
// await app.auth.login()
|
|
41
|
+
|
|
42
|
+
// expect(spy).toHaveBeenCalledTimes(1)
|
|
43
|
+
// expect(spy).toHaveBeenCalledWith({ name: 'home' })
|
|
44
|
+
|
|
45
|
+
// expect(app.message.appMessages).toEqual(['User logged in'])
|
|
23
46
|
|
|
24
|
-
|
|
47
|
+
// expect(app.user.email).toBe('ekalashnikov@gmail.com')
|
|
48
|
+
// expect(app.user.token).toBe('1234ekalashnikov@gmail.com')
|
|
49
|
+
|
|
50
|
+
// await app.router.isLoaded()
|
|
51
|
+
|
|
52
|
+
// expect(app.router.currentRoute.name).toBe('home')
|
|
53
|
+
// })
|
|
54
|
+
|
|
55
|
+
it('load ivue component context', async () => {
|
|
25
56
|
await app.router.push({ name: 'root' })
|
|
26
57
|
|
|
27
|
-
|
|
58
|
+
// console.log('instance', app.ivue.test)
|
|
59
|
+
app.auth.email = 'ekalashnikov@gmail.com'
|
|
28
60
|
app.auth.password = 'test1234'
|
|
29
61
|
|
|
30
62
|
const spy = vi.spyOn(app.router, 'push')
|
|
@@ -33,15 +65,22 @@ describe('--- auth test ----', () => {
|
|
|
33
65
|
|
|
34
66
|
expect(spy).toHaveBeenCalledTimes(1)
|
|
35
67
|
expect(spy).toHaveBeenCalledWith({ name: 'home' })
|
|
36
|
-
|
|
37
|
-
expect(app.message.appMessages).toEqual(['User logged in'])
|
|
38
68
|
|
|
39
|
-
expect(app.
|
|
40
|
-
|
|
41
|
-
|
|
69
|
+
// expect(app.message.appMessages).toEqual(['User logged in'])
|
|
70
|
+
|
|
71
|
+
await app.router.push({ name: 'ivue' })
|
|
72
|
+
|
|
73
|
+
console.log('ivue', app.ivue.test)
|
|
42
74
|
await app.router.isLoaded()
|
|
43
|
-
|
|
44
|
-
|
|
75
|
+
|
|
76
|
+
const sub = vue.getComponent({ name: 'IVueTest' }).getComponent({ name: 'SubComponent2' })
|
|
77
|
+
console.log('sub.vm.v', sub.vm.v)
|
|
78
|
+
|
|
79
|
+
//console.log('IVueTest', )
|
|
80
|
+
|
|
81
|
+
// console.log('box.vue', box.vue)
|
|
82
|
+
|
|
83
|
+
expect(app.router.currentRoute.name).toBe('ivue')
|
|
45
84
|
})
|
|
46
85
|
|
|
47
86
|
})
|
package/src/types/core.ts
CHANGED
|
@@ -61,4 +61,6 @@ export type AnyObj = Record<string | number | symbol, any>
|
|
|
61
61
|
export type Params<T extends (...args: any) => any> = Parameters<T>
|
|
62
62
|
|
|
63
63
|
|
|
64
|
-
export type Computeds = Record<string | symbol | number, ComputedRef>
|
|
64
|
+
export type Computeds = Record<string | symbol | number, ComputedRef>
|
|
65
|
+
|
|
66
|
+
|
package/src/utils/extend.ts
CHANGED
|
@@ -39,6 +39,7 @@ function _extend<K, V> (target: any, sources: any[], parents: Map<K, V> | null |
|
|
|
39
39
|
if (isObject(target) && isObject(source)) {
|
|
40
40
|
|
|
41
41
|
for (const key in source) {
|
|
42
|
+
|
|
42
43
|
if (isObject(source[key]) && source[key].constructor.name === 'Object') {
|
|
43
44
|
// detect circular references using Map parents object
|
|
44
45
|
if (parents.has(source[key])) {
|
|
@@ -65,10 +66,10 @@ function _extend<K, V> (target: any, sources: any[], parents: Map<K, V> | null |
|
|
|
65
66
|
target[key] = source[key]
|
|
66
67
|
} else {
|
|
67
68
|
// Only simple objects can extend the target
|
|
68
|
-
if (target[key].constructor
|
|
69
|
-
target[key] = source[key]
|
|
70
|
-
} else {
|
|
69
|
+
if (target[key].constructor === Object) {
|
|
71
70
|
_extend(target[key], [source[key]], parents)
|
|
71
|
+
} else {
|
|
72
|
+
target[key] = source[key]
|
|
72
73
|
}
|
|
73
74
|
}
|
|
74
75
|
}
|
|
File without changes
|