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 CHANGED
@@ -2,7 +2,7 @@
2
2
  <project version="4">
3
3
  <component name="ProjectModuleManager">
4
4
  <modules>
5
- <module fileurl="file://$PROJECT_DIR$/../infinite-vue/.idea/infinite-vue.iml" filepath="$PROJECT_DIR$/../infinite-vue/.idea/infinite-vue.iml" />
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
+ - &#9745; 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
@@ -5,7 +5,10 @@ Advanced State Management & Class Architecture for Vue 3+.
5
5
  ## Install
6
6
 
7
7
  ```sh
8
- yarn add infinite-vue
8
+ # Using npm
9
+ npm i ivue
10
+ # or yarn
11
+ yarn add ivue
9
12
  ```
10
13
 
11
14
  ## Run Dev Server
@@ -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 'demo/tests/Mouse';
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
- const vue = createApp(AppComponent);
17
+ console.log('vue', vue);
16
18
 
17
19
  vue.use(app.router)
18
20
 
@@ -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]) ? "Object" !== t2[e3].constructor.name ? t2[e3] = r2[e3] : m(t2[e3], [r2[e3]], n2) : t2[e3] = r2[e3] : t2[e3] = r2[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
- function z(t2) {
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 U {
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", q);
223
+ __publicField(this, "onInit", K);
227
224
  this.from = t2, this.to = t2;
228
225
  }
229
226
  }
230
- class K {
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 U(t2), this;
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(i2, ...s2) {
274
- let u2, a2, f2, l2, h2, p2, b2;
275
- if (this.subscribers.set(i2, (this.subscribers.get(i2) || 0) + 1), z(() => {
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(i2) || 0) - 1;
278
- if (this.subscribers.set(i2, t2), this.effectScopes.has(i2) && t2 <= 0) {
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(i2)) == null ? void 0 : _a.stop(), f2)
281
- for (t3 in f2)
282
- delete f2[t3];
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] = null;
283
+ delete p2[t3];
289
284
  if (b2)
290
285
  for (t3 in b2)
291
- b2[t3] = null;
292
- f2 && A(f2), u2 = a2 = f2 = h2 = p2 = b2 = t3 = null, this.effectScopes.delete(i2), this.instances.delete(i2), this.subscribers.delete(i2), F.debug && console.log("ivue.kernel: instance deleted:", i2.name);
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(i2))
295
- return this.instances.get(i2);
292
+ }), this.instances.has(s2))
293
+ return this.instances.get(s2);
296
294
  {
297
- if (a2 = this.singletons.get(i2), a2) {
298
- if ("ivue" !== a2.type)
299
- throw new Error("ivue.kernel: use(" + E(i2) + ") method should be used only with 'ivue' mappings, use get(" + E(i2) + ") method for standard JavaScript singleton Kernel mappings.");
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(i2).singleton().ivue(), a2 = this.singletons.get(i2);
302
- if (u2 = n(!!e()), this.effectScopes.set(i2, u2), S.before.has(a2.to) && (p2 = { mapping: a2, self: null, return: null, name: a2.to.constructor.name, args: s2 }, true === k("before", a2.to, p2)))
303
- return this.instances.set(i2, p2.return), p2.return;
304
- l2 = P(a2.to.prototype), h2 = l2.size ? {} : null;
305
- let f3 = new Proxy(r(new i2(...s2)), { get: (t2, e2) => {
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 l2.has(e2) && ((_b = (_a = f3.constructor) == null ? void 0 : _a.behavior) == null ? void 0 : _b[e2]) !== R.OFF ? (e2 in h2 || (u2 == null ? void 0 : u2.run(() => h2[e2] = o(() => l2.get(e2).get.bind(f3)()))), h2[e2].value) : "toRefs" === e2 ? J(f3, l2, h2, u2) : t2[e2];
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 f3.constructor) {
310
- for (const e2 in f3.constructor.behavior)
311
- if (!l2.has(e2))
312
- if ("function" == typeof f3[e2]) {
313
- if (f3.constructor.behavior[e2] === R.OFF)
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(b2) || (b2 = {}), b2[e2] = f3[e2], $(a2, f3.constructor.behavior[e2], b2[e2], f3, e2, u2, p2);
313
+ y(g2) || (g2 = {}), g2[e2] = i2[e2], $(f2, i2.constructor.behavior[e2], g2[e2], i2, e2, a2, b2);
316
314
  } else
317
- f3.constructor.behavior[e2] === R.OFF && (f3 == null ? void 0 : f3[e2]) && "object" == typeof f3[e2] && (f3[e2] = t(f3[e2]));
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(a2.to) && (p2 = { mapping: a2, self: f3, name: a2.to.constructor.name, return: f3, args: s2 }, true === k("after", a2.to, p2)) ? (this.instances.set(i2, p2.return), p2.return) : ("init" in f3 && u2.run(() => f3.init()), this.instances.set(i2, f3), F.debug && console.log("ivue.kernel: instance created:", i2.name, "current scope", e(), "current instance", c()), f3);
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(i2, ...s2) {
323
- let u2 = this.transients.get(i2);
324
- if (u2) {
325
- if ("ivue" !== u2.type)
326
- throw new Error("ivue.kernel: init(" + E(i2) + ") method should be used only with 'ivue' mappings, use make(" + E(i2) + ") method for standard JavaScript transient Kernel mappings.");
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(i2).transient().ivue(), u2 = this.transients.get(i2);
329
- let c2, a2, f2, l2 = n(!!e());
330
- if (S.before.has(u2.to) && (c2 = { mapping: u2, self: null, return: null, name: u2.to.constructor.name, args: s2 }, true === k("before", u2.to, c2)))
331
- return c2.return;
332
- let h2 = P(u2.to.prototype);
333
- a2 = h2.size ? {} : null;
334
- let p2 = new Proxy(r(new i2(...s2)), { get: (t2, e2) => {
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 h2.has(e2) && ((_b = (_a = p2.constructor) == null ? void 0 : _a.behavior) == null ? void 0 : _b[e2]) !== R.OFF ? (e2 in a2 || (l2 == null ? void 0 : l2.run(() => a2[e2] = o(() => h2.get(e2).get.bind(p2)()))), a2[e2].value) : "toRefs" === e2 ? J(p2, h2, a2, l2) : t2[e2];
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 p2.constructor) {
339
- for (const e2 in p2.constructor.behavior)
340
- if (!h2.has(e2))
341
- if ("function" == typeof p2[e2]) {
342
- if (p2.constructor.behavior[e2] === R.OFF)
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(f2) || (f2 = {}), f2[e2] = p2[e2], $(u2, p2.constructor.behavior[e2], f2[e2], p2, e2, l2, c2);
342
+ y(l2) || (l2 = {}), l2[e2] = g2[e2], $(c2, g2.constructor.behavior[e2], l2[e2], g2, e2, p2, a2);
345
343
  } else
346
- p2.constructor.behavior[e2] === R.OFF && (p2 == null ? void 0 : p2[e2]) && "object" == typeof p2[e2] && (p2[e2] = t(p2[e2]));
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(u2.to) && (c2 = { mapping: u2, self: p2, return: p2, name: u2.to.constructor.name, args: s2 }, true === k("after", u2.to, c2)) ? c2.return : ("init" in p2 && l2.run(() => p2.init()), z(() => {
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 (l2 == null ? void 0 : l2.stop(), A(p2), c2)
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] = null;
350
+ delete a2[t2];
356
351
  if (f2)
357
352
  for (t2 in f2)
358
- f2[t2] = null;
359
- l2 = p2 = u2 = a2 = c2 = f2 = t2 = null;
360
- }), p2);
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 q(t2, ...r2) {
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 B(t2, o2, ...i2) {
387
- let s2 = n(!!e()), u2 = P(Reflect.getPrototypeOf(o2)), c2 = u2.value ? {} : null, a2 = W(r(Object.create(o2)), u2, c2, s2, ...i2);
388
- return "function" == typeof a2.init && s2.run(() => a2.init()), z(() => {
389
- s2 == null ? void 0 : s2.stop(), A(a2), s2 = a2 = null;
390
- }), a2;
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 G = new K(), H = G.bind.bind(G), L = G.get.bind(G), Q = G.make.bind(G), V = G.use.bind(G), X = G.init.bind(G);
393
- class Y {
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.$ = V(this.capsule, this, ...e2), t(this.$);
398
+ this.$ = Q(this.capsule, this, ...e2), t(this.$);
400
399
  }
401
400
  initCapsule(e2 = []) {
402
- this.$ = X(this.capsule, this, ...e2), t(this.$);
401
+ this.$ = V(this.capsule, this, ...e2), t(this.$);
403
402
  }
404
403
  getCapsule(t2 = []) {
405
- this.$ = L(this.capsule, this, ...t2);
404
+ this.$ = H(this.capsule, this, ...t2);
406
405
  }
407
406
  makeCapsule(t2 = []) {
408
- this.$ = Q(this.capsule, this, ...t2);
407
+ this.$ = L(this.capsule, this, ...t2);
409
408
  }
410
409
  }
411
- function Z(t2, e2) {
410
+ function Y(t2, e2) {
412
411
  t2.behavior = v(t2.behavior ?? {}, { $instance: R.OFF });
413
412
  }
414
- class tt {
413
+ class Z {
415
414
  get $instance() {
416
415
  return c();
417
416
  }
418
417
  constructor(t2) {
419
- Z(t2);
418
+ Y(t2);
420
419
  }
421
420
  }
422
- function et(t2, e2) {
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 nt {
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
- et(t2);
436
+ tt(t2);
438
437
  }
439
438
  }
440
- function rt(t2, e2) {
439
+ function nt(t2, e2) {
441
440
  t2.behavior = v(t2.behavior ?? {}, { $refs: R.OFF });
442
441
  }
443
- class ot {
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
- rt(t2);
448
+ nt(t2);
450
449
  }
451
450
  }
452
- class it {
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 st {
457
+ class it {
459
458
  get router() {
460
459
  return F.router;
461
460
  }
462
461
  }
463
- class ut {
462
+ class st {
464
463
  }
465
- O(ut, [st, it]);
466
- class ct {
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 at {
471
+ class ct {
473
472
  constructor() {
474
473
  __publicField(this, "$nextTick", b);
475
474
  }
476
475
  }
477
- class ft {
476
+ class at {
478
477
  constructor(t2) {
479
478
  !function(t3, e2) {
480
- Z(t3), rt(t3), et(t3);
479
+ Y(t3), nt(t3), tt(t3);
481
480
  }(t2);
482
481
  }
483
482
  }
484
- O(ft, [ut, nt, ct, at, ot, tt]);
483
+ O(at, [st, et, ut, ct, rt, Z]);
485
484
  export {
486
485
  R as IVUE,
487
- K as Kernel,
488
- U as Mapping,
486
+ U as Kernel,
487
+ A as Mapping,
489
488
  O as Traits,
490
- Y as UseCapsule,
491
- ct as UseEmit,
492
- tt as UseInstance,
493
- nt as UseMounting,
494
- ot as UseRefs,
495
- it as UseRoute,
496
- st as UseRouter,
497
- ut as UseRouting,
498
- at as UseTick,
499
- ft as UseVue,
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
- H as bind,
501
+ G as bind,
503
502
  F as config,
504
503
  v as extend,
505
- L as get,
506
- X as init,
504
+ H as get,
505
+ V as init,
507
506
  x as iobj,
508
507
  D as ivue,
509
- B as ivueInversify,
508
+ q as ivueInversify,
510
509
  W as ivueTransform,
511
- G as kernel,
512
- Q as make,
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
- V as use
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"})}));
@@ -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: any;
177
- export declare const make: any;
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: any;
182
- export declare const init: any;
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.0",
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/infinite-vue"
69
+ "url": "https://github.com/infinite-system/ivue"
70
70
  },
71
- "homepage": "https://github.com/infinite-system/infinite-vue",
71
+ "homepage": "https://github.com/infinite-system/ivue",
72
72
  "bugs": {
73
- "url": "https://github.com/infinite-system/infinite-vue/issues",
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
@@ -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!: ReturnType<typeof createApp>
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
- // this.vue = createApp(AppComponent);
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("#app");
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 scope: Null<EffectScope>,
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] = null
301
- if (intercept) for (prop in intercept) intercept[prop] = null
302
- if (fns) for (prop in fns) fns[prop] = null
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
- tryOnScopeDispose(dispose)
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(!!getCurrentScope())
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(!!getCurrentScope()),
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
- tryOnScopeDispose(() => {
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] = null
677
- if (computeds) for (prop in computeds) computeds[prop] = null
678
- if (fns) for (prop in fns) fns[prop] = null
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 const get = kernel.get.bind(kernel) // for singletons
805
- export const make = kernel.make.bind(kernel) // for transients
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 const use = kernel.use.bind(kernel) // for singletons
810
- export const init = kernel.init.bind(kernel) // for transients
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);
@@ -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
- await app.router.push({ name: 'root' })
21
- expect(app.router.active.name).toBe('login')
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
- it('successful login redirects to homepage', async () => {
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
- app.auth.email = 'ekalashnikov@gmail.com'
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.user.email).toBe('ekalashnikov@gmail.com')
40
- expect(app.user.token).toBe('1234ekalashnikov@gmail.com')
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
- expect(app.router.currentRoute.name).toBe('home')
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
+
@@ -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.name !== 'Object') {
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