iocraft 0.2.4 → 0.2.5

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.
@@ -128,7 +128,7 @@ function generateRouterFacade(router) {
128
128
  };
129
129
  }
130
130
 
131
- // src/core/injectors.ts
131
+ // src/core/obtainers.ts
132
132
  var _vue = require('vue');
133
133
 
134
134
  // src/core/internals.ts
@@ -149,6 +149,7 @@ var _vue = require('vue');
149
149
 
150
150
  var SERVICE_METADATA = /* @__PURE__ */ Symbol("IOCRAFT_SERVICE_METADATA");
151
151
  var RootRegistry = /* @__PURE__ */ new Map();
152
+ var creationStack = /* @__PURE__ */ new Set();
152
153
  var lifecycleHookMap = {
153
154
  onMounted: _vue.onMounted,
154
155
  onUpdated: _vue.onUpdated,
@@ -184,44 +185,96 @@ function getServiceMetadata(target) {
184
185
  }
185
186
  return meta;
186
187
  }
187
- function HasService(serviceClass) {
188
+ function hasService(serviceClass) {
188
189
  const meta = getServiceMetadata(serviceClass);
189
190
  return RootRegistry.has(meta.token);
190
191
  }
191
- function IsFacade(_serviceInstance) {
192
+ function unRegister(serviceInstance) {
193
+ const meta = getServiceMetadata(serviceInstance);
194
+ const exist = RootRegistry.has(meta.token);
195
+ if (!exist) return false;
196
+ if (typeof serviceInstance === "object" && serviceInstance !== null && "onUnRegister" in serviceInstance && typeof serviceInstance.onUnRegister === "function") {
197
+ serviceInstance.onUnRegister();
198
+ }
199
+ return RootRegistry.delete(meta.token);
200
+ }
201
+ function clearRegistry() {
202
+ RootRegistry.clear();
192
203
  }
193
204
 
194
- // src/core/injectors.ts
205
+ // src/core/obtainers.ts
195
206
  function obtain(serviceClass) {
196
207
  const serviceMeta = getServiceMetadata(serviceClass);
197
- if (!RootRegistry.has(serviceMeta.token)) {
198
- RootRegistry.set(serviceMeta.token, new serviceClass());
208
+ if (RootRegistry.has(serviceMeta.token)) {
209
+ const instance = RootRegistry.get(serviceMeta.token);
210
+ return createFacadeObj(instance);
211
+ }
212
+ if (creationStack.has(serviceMeta.token)) {
213
+ throw new Error(`[IocRaft] Circular dependency detected on: ${serviceClass.name}
214
+ `);
215
+ }
216
+ creationStack.add(serviceMeta.token);
217
+ try {
218
+ const instance = new serviceClass();
219
+ RootRegistry.set(serviceMeta.token, instance);
220
+ return createFacadeObj(instance);
221
+ } finally {
222
+ creationStack.delete(serviceMeta.token);
199
223
  }
200
- const instance = RootRegistry.get(serviceMeta.token);
201
- return createFacadeObj(instance);
202
224
  }
203
225
  function obtainRaw(serviceClass) {
204
226
  const serviceMeta = getServiceMetadata(serviceClass);
205
- if (!RootRegistry.has(serviceMeta.token)) {
206
- RootRegistry.set(serviceMeta.token, new serviceClass());
227
+ if (RootRegistry.has(serviceMeta.token)) {
228
+ return RootRegistry.get(serviceMeta.token);
207
229
  }
208
- return RootRegistry.get(serviceMeta.token);
209
- }
210
- function obtainRawInstance(serviceClass) {
211
- const componentInstance = _vue.getCurrentInstance.call(void 0, );
212
- let instance = new serviceClass();
213
- if (componentInstance) {
214
- bindLifecycleHooks(instance);
230
+ if (creationStack.has(serviceMeta.token)) {
231
+ throw new Error(`[IocRaft] Circular dependency detected on: ${serviceClass.name}
232
+ `);
233
+ }
234
+ creationStack.add(serviceMeta.token);
235
+ try {
236
+ const instance = new serviceClass();
237
+ RootRegistry.set(serviceMeta.token, instance);
238
+ return instance;
239
+ } finally {
240
+ creationStack.delete(serviceMeta.token);
215
241
  }
216
- return instance;
217
242
  }
218
243
  function obtainInstance(serviceClass) {
219
- const componentInstance = _vue.getCurrentInstance.call(void 0, );
220
- let instance = new serviceClass();
221
- if (componentInstance) {
222
- bindLifecycleHooks(instance);
244
+ const serviceMeta = getServiceMetadata(serviceClass);
245
+ if (creationStack.has(serviceMeta.token)) {
246
+ throw new Error(`[IocRaft] Circular dependency detected on: ${serviceClass.name}
247
+ `);
248
+ }
249
+ creationStack.add(serviceMeta.token);
250
+ try {
251
+ const componentInstance = _vue.getCurrentInstance.call(void 0, );
252
+ const instance = new serviceClass();
253
+ if (componentInstance) {
254
+ bindLifecycleHooks(instance);
255
+ }
256
+ return createFacadeObj(instance);
257
+ } finally {
258
+ creationStack.delete(serviceMeta.token);
259
+ }
260
+ }
261
+ function obtainRawInstance(serviceClass) {
262
+ const serviceMeta = getServiceMetadata(serviceClass);
263
+ if (creationStack.has(serviceMeta.token)) {
264
+ throw new Error(`[IocRaft] Circular dependency detected on: ${serviceClass.name}
265
+ `);
266
+ }
267
+ creationStack.add(serviceMeta.token);
268
+ try {
269
+ const componentInstance = _vue.getCurrentInstance.call(void 0, );
270
+ const instance = new serviceClass();
271
+ if (componentInstance) {
272
+ bindLifecycleHooks(instance);
273
+ }
274
+ return instance;
275
+ } finally {
276
+ creationStack.delete(serviceMeta.token);
223
277
  }
224
- return createFacadeObj(instance);
225
278
  }
226
279
  function exposeToContext(serviceInstance) {
227
280
  const serviceMeta = getServiceMetadata(serviceInstance);
@@ -268,29 +321,34 @@ Nav = exports.Nav = __decorateClass([
268
321
  Register()
269
322
  ], Nav);
270
323
 
271
- // src/helpers/Store.service.ts
324
+ // src/helpers/store.ts
325
+
272
326
  function Store(initialState) {
327
+ const state = _vue.reactive.call(void 0, initialState);
328
+ const initial = structuredClone(initialState);
273
329
  return (_class = class {constructor() { _class.prototype.__init.call(this); }
274
- __init() {this.state = initialState}
275
- getState() {
276
- }
277
- setState(_partialState) {
330
+ __init() {this.state = state}
331
+ get snapshot() {
332
+ return structuredClone(_vue.toRaw.call(void 0, state));
278
333
  }
279
- select(_key) {
334
+ update(changes) {
335
+ Object.assign(state, changes);
280
336
  }
281
- selectAll() {
337
+ pick(key) {
338
+ return state[key];
282
339
  }
283
- computed() {
340
+ compute(fn) {
341
+ return _vue.computed.call(void 0, () => fn(state));
284
342
  }
285
- watch() {
343
+ observe(source, callback) {
344
+ const getter = typeof source === "function" ? () => source(state) : () => state[source];
345
+ return _vue.watch.call(void 0, getter, callback);
286
346
  }
287
- watchEffect() {
347
+ effect(fn) {
348
+ return _vue.watchEffect.call(void 0, () => fn(state));
288
349
  }
289
350
  reset() {
290
- }
291
- onInit() {
292
- }
293
- onDispose() {
351
+ Object.assign(state, structuredClone(initial));
294
352
  }
295
353
  }, _class);
296
354
  }
@@ -311,5 +369,6 @@ function Store(initialState) {
311
369
 
312
370
 
313
371
 
314
- exports.createFacadeObj = createFacadeObj; exports.generateRouterFacade = generateRouterFacade; exports.getServiceMetadata = getServiceMetadata; exports.HasService = HasService; exports.IsFacade = IsFacade; exports.obtain = obtain; exports.obtainRaw = obtainRaw; exports.obtainRawInstance = obtainRawInstance; exports.obtainInstance = obtainInstance; exports.exposeToContext = exposeToContext; exports.obtainFromContext = obtainFromContext; exports.Nav = Nav; exports.Store = Store; exports.iocraft = iocraft; exports.Register = Register;
315
- //# sourceMappingURL=chunk-FPSHR5LZ.cjs.map
372
+
373
+ exports.createFacadeObj = createFacadeObj; exports.generateRouterFacade = generateRouterFacade; exports.getServiceMetadata = getServiceMetadata; exports.hasService = hasService; exports.unRegister = unRegister; exports.clearRegistry = clearRegistry; exports.obtain = obtain; exports.obtainRaw = obtainRaw; exports.obtainInstance = obtainInstance; exports.obtainRawInstance = obtainRawInstance; exports.exposeToContext = exposeToContext; exports.obtainFromContext = obtainFromContext; exports.Nav = Nav; exports.Store = Store; exports.iocraft = iocraft; exports.Register = Register;
374
+ //# sourceMappingURL=chunk-NJJ6QKII.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/iocraft/iocraft/packages/iocraft/dist/chunk-NJJ6QKII.cjs","../src/core/facade.ts","../src/core/obtainers.ts","../src/core/internals.ts","../src/core/utils.ts","../src/core/plugin.ts","../src/core/register.ts","../src/helpers/Nav.service.ts","../src/helpers/store.ts"],"names":[],"mappings":"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","file":"/home/runner/work/iocraft/iocraft/packages/iocraft/dist/chunk-NJJ6QKII.cjs","sourcesContent":[null,"import type { Router } from 'vue-router';\nimport type { ServiceConstructor } from './types';\n\nfunction hasKey(obj: Record<PropertyKey, unknown>, key: PropertyKey): boolean {\n if (typeof key === 'symbol') {\n return Object.getOwnPropertySymbols(obj).includes(key);\n }\n return Object.hasOwn(obj, key);\n}\n\nconst NativeKeys = new Set([\n ...Object.getOwnPropertyNames(Object.prototype),\n ...Object.getOwnPropertySymbols(Object.prototype),\n ...Object.getOwnPropertyNames(Function.prototype),\n ...Object.getOwnPropertySymbols(Function.prototype),\n ...Object.getOwnPropertyNames(Array.prototype),\n ...Object.getOwnPropertySymbols(Array.prototype),\n]);\n\nfunction addInstanceProperties<T extends object>(\n serviceInstance: InstanceType<ServiceConstructor<T>>,\n targetObj: Record<PropertyKey, unknown>\n) {\n const ownKeys = [...Object.getOwnPropertyNames(serviceInstance), ...Object.getOwnPropertySymbols(serviceInstance)];\n\n for (const key of ownKeys) {\n if (hasKey(targetObj, key)) continue;\n\n const descriptor = Object.getOwnPropertyDescriptor(serviceInstance, key)!;\n\n if (typeof descriptor.value === 'function') {\n console.warn(`[IOCRAFT]: Instance method \"${String(key)}\" found as own property. Consider moving to prototype.`);\n continue;\n }\n\n if (descriptor.get || descriptor.set) {\n continue;\n }\n\n Object.defineProperty(targetObj, key, {\n get() {\n return serviceInstance[key as keyof typeof serviceInstance];\n },\n set(v) {\n serviceInstance[key as keyof typeof serviceInstance] = v;\n },\n enumerable: true,\n configurable: true,\n });\n }\n}\n\nfunction addPrototypeProperties<T extends object>(\n serviceInstance: InstanceType<ServiceConstructor<T>>,\n targetObj: Record<PropertyKey, unknown>\n) {\n let currentProto = Object.getPrototypeOf(serviceInstance);\n\n while (currentProto && currentProto !== Object.prototype) {\n const protoKeys = [...Object.getOwnPropertyNames(currentProto), ...Object.getOwnPropertySymbols(currentProto)];\n\n for (const key of protoKeys) {\n if (hasKey(targetObj, key)) continue;\n\n if (NativeKeys.has(key)) continue;\n\n const descriptor = Object.getOwnPropertyDescriptor(currentProto, key)!;\n\n if (descriptor.get || descriptor.set) {\n Object.defineProperty(targetObj, key, {\n get: descriptor.get ? () => descriptor.get!.call(serviceInstance) : undefined,\n set: descriptor.set ? (v: any) => descriptor.set!.call(serviceInstance, v) : undefined,\n enumerable: true,\n configurable: true,\n });\n } else if (typeof descriptor.value === 'function') {\n targetObj[key] = descriptor.value.bind(serviceInstance);\n }\n }\n\n currentProto = Object.getPrototypeOf(currentProto);\n }\n}\n\n/**\n * CREATES A FACADE OBJECT\n *\n * @export\n * @template {object} T\n * @param {ServiceConstructor<T>} serviceClass\n * @param {InstanceType<ServiceConstructor<T>>} serviceInstance\n * @returns {{}}\n */\nexport function createFacadeObj<T extends object>(serviceInstance: object) {\n const targetObj = {};\n\n addInstanceProperties(serviceInstance, targetObj);\n addPrototypeProperties(serviceInstance, targetObj);\n return targetObj as T;\n}\n\nexport function generateRouterFacade(router: Router): Record<string, any> {\n return {\n get path() {\n return router.currentRoute.value.path;\n },\n get name() {\n return router.currentRoute.value.name;\n },\n get params() {\n return router.currentRoute.value.params;\n },\n get query() {\n return router.currentRoute.value.query;\n },\n get hash() {\n return router.currentRoute.value.hash;\n },\n get fullPath() {\n return router.currentRoute.value.fullPath;\n },\n get matched() {\n return router.currentRoute.value.matched;\n },\n get meta() {\n return router.currentRoute.value.meta;\n },\n push: router.push.bind(router),\n replace: router.replace.bind(router),\n go: router.go.bind(router),\n back: router.back.bind(router),\n forward: router.forward.bind(router),\n resolve: router.resolve.bind(router),\n getRoutes: router.getRoutes.bind(router),\n hasRoute: router.hasRoute.bind(router),\n\n // Router guards\n beforeEach: router.beforeEach.bind(router),\n beforeResolve: router.beforeResolve.bind(router),\n afterEach: router.afterEach.bind(router),\n onError: router.onError.bind(router),\n\n // Dynamic routing\n addRoute: router.addRoute.bind(router),\n removeRoute: router.removeRoute.bind(router),\n clearRoutes: router.clearRoutes.bind(router),\n\n // State\n isReady: router.isReady.bind(router),\n get currentRoute() {\n return router.currentRoute;\n },\n };\n}\n","import { getCurrentInstance, inject, provide } from 'vue';\nimport { createFacadeObj } from './facade';\nimport { bindLifecycleHooks, creationStack, RootRegistry } from './internals';\nimport type { ServiceConstructor } from './types';\nimport { getServiceMetadata } from './utils';\n\n/**\n * obtain Facade of a global singleton service From Root Registry\n *\n * @export\n * @template {ServiceConstructor} T\n * @param {T} serviceClass\n * @returns {InstanceType<T>}\n */\nexport function obtain<T extends ServiceConstructor>(serviceClass: T) {\n const serviceMeta = getServiceMetadata(serviceClass);\n\n if (RootRegistry.has(serviceMeta.token)) {\n const instance = RootRegistry.get(serviceMeta.token)!;\n return createFacadeObj<InstanceType<T>>(instance);\n }\n\n if (creationStack.has(serviceMeta.token)) {\n throw new Error(`[IocRaft] Circular dependency detected on: ${serviceClass.name}\\n`);\n }\n\n creationStack.add(serviceMeta.token);\n\n try {\n const instance = new serviceClass();\n RootRegistry.set(serviceMeta.token, instance);\n return createFacadeObj<InstanceType<T>>(instance);\n } finally {\n creationStack.delete(serviceMeta.token);\n }\n}\n\n/**\n * obtain a global singleton service From Root Registry\n *\n * @export\n * @template {ServiceConstructor} T\n * @param {T} serviceClass\n * @returns {InstanceType<T>}\n */\nexport function obtainRaw<T extends ServiceConstructor>(serviceClass: T) {\n const serviceMeta = getServiceMetadata(serviceClass);\n\n if (RootRegistry.has(serviceMeta.token)) {\n return RootRegistry.get(serviceMeta.token) as InstanceType<T>;\n }\n\n if (creationStack.has(serviceMeta.token)) {\n throw new Error(`[IocRaft] Circular dependency detected on: ${serviceClass.name}\\n`);\n }\n\n creationStack.add(serviceMeta.token);\n\n try {\n const instance = new serviceClass();\n RootRegistry.set(serviceMeta.token, instance);\n return instance as InstanceType<T>;\n } finally {\n creationStack.delete(serviceMeta.token);\n }\n}\n\n/**\n * obtain a facade of a new Service Instance\n *\n * @export\n * @template {ServiceConstructor} T\n * @param {T} serviceClass\n * @returns {InstanceType<T>}\n */\nexport function obtainInstance<T extends ServiceConstructor>(serviceClass: T) {\n const serviceMeta = getServiceMetadata(serviceClass);\n\n if (creationStack.has(serviceMeta.token)) {\n throw new Error(`[IocRaft] Circular dependency detected on: ${serviceClass.name}\\n`);\n }\n\n creationStack.add(serviceMeta.token);\n\n try {\n const componentInstance = getCurrentInstance();\n const instance = new serviceClass();\n\n if (componentInstance) {\n bindLifecycleHooks(instance);\n }\n\n return createFacadeObj<InstanceType<T>>(instance);\n } finally {\n creationStack.delete(serviceMeta.token);\n }\n}\n\n\n\n\n\n/**\n * obtain a new Service Instance\n *\n * @export\n * @template {ServiceConstructor} T\n * @param {T} serviceClass\n * @returns {InstanceType<T>}\n */\nexport function obtainRawInstance<T extends ServiceConstructor>(serviceClass: T) {\n const serviceMeta = getServiceMetadata(serviceClass);\n\n if (creationStack.has(serviceMeta.token)) {\n throw new Error(`[IocRaft] Circular dependency detected on: ${serviceClass.name}\\n`);\n }\n\n creationStack.add(serviceMeta.token);\n\n try {\n const componentInstance = getCurrentInstance();\n const instance = new serviceClass();\n\n if (componentInstance) {\n bindLifecycleHooks(instance);\n }\n return instance as InstanceType<T>;\n } finally {\n creationStack.delete(serviceMeta.token);\n }\n}\n\n\n\n/**\n * Expose a service to context\n *\n * @export\n * @template {ServiceConstructor} T\n * @param {InstanceType<T>} serviceInstance\n */\nexport function exposeToContext<T extends ServiceConstructor>(serviceInstance: InstanceType<T>) {\n const serviceMeta = getServiceMetadata(serviceInstance);\n provide(serviceMeta.token, serviceInstance);\n}\n\n/**\n * obtain A Service From Context\n *\n * @export\n * @template {ServiceConstructor} T\n * @param {T} serviceClass\n * @returns {*}\n */\nexport function obtainFromContext<T extends ServiceConstructor>(serviceClass: T) {\n const serviceMeta = getServiceMetadata(serviceClass);\n return inject<InstanceType<T>>(serviceMeta.token);\n}\n","import {\n onMounted,\n onUpdated,\n onUnmounted,\n onBeforeMount,\n onBeforeUpdate,\n onBeforeUnmount,\n onErrorCaptured,\n onRenderTracked,\n onRenderTriggered,\n onActivated,\n onDeactivated,\n onServerPrefetch,\n onScopeDispose,\n} from 'vue';\n\nexport const SERVICE_METADATA = Symbol('IOCRAFT_SERVICE_METADATA');\nexport const RootRegistry = new Map<symbol, object>();\nexport const creationStack = new Set<symbol>();\nconst lifecycleHookMap = {\n onMounted,\n onUpdated,\n onUnmounted,\n onBeforeMount,\n onBeforeUpdate,\n onBeforeUnmount,\n onErrorCaptured,\n onRenderTracked,\n onRenderTriggered,\n onActivated,\n onDeactivated,\n onServerPrefetch,\n onScopeDispose,\n} as const;\n\nexport function bindLifecycleHooks(instance: any) {\n for (const key in lifecycleHookMap) {\n const hookName = key as keyof typeof lifecycleHookMap;\n const vueHook = lifecycleHookMap[hookName];\n\n const handler = instance[hookName];\n\n if (typeof handler === 'function') {\n vueHook(handler.bind(instance));\n }\n }\n}\n","import { RootRegistry, SERVICE_METADATA } from './internals';\nimport type { ServiceConstructor, ServiceMetadata } from './types';\n\n/**\n * get service metadata\n *\n * @export\n * @param {(ServiceConstructor | object)} target\n * @returns {ServiceMetadata}\n */\nexport function getServiceMetadata(target: ServiceConstructor | object) {\n const ctor = typeof target === 'function' ? target : target.constructor;\n\n const meta = (ctor as any)[SERVICE_METADATA] as ServiceMetadata;\n if (!meta?.token) {\n throw new Error(`[IOCRAFT]: ${ctor?.name || 'Unknown'} is not decorated with @Register()`);\n }\n return meta;\n}\n\n\n/**\n * Check if a service is present in registry\n *\n * @export\n * @param {ServiceConstructor} serviceClass \n * @returns {*} \n */\nexport function hasService(serviceClass: ServiceConstructor) {\n const meta = getServiceMetadata(serviceClass);\n return RootRegistry.has(meta.token);\n}\n\n\n/**\n * unRegister (remove) a service from registry\n *\n * @export\n * @param {ServiceConstructor} serviceClass \n * @returns {*} \n */\nexport function unRegister<T extends InstanceType<ServiceConstructor>>(serviceInstance: T) {\n const meta = getServiceMetadata(serviceInstance);\n const exist = RootRegistry.has(meta.token);\n if (!exist) return false;\n\n\n if (typeof serviceInstance === 'object' &&\n serviceInstance !== null &&\n 'onUnRegister' in serviceInstance &&\n typeof serviceInstance.onUnRegister === 'function'\n ) {\n serviceInstance.onUnRegister()\n }\n\n return RootRegistry.delete(meta.token)\n}\n\n\n\n\n\n/**\n * clear service registry\n *\n * @export\n */\nexport function clearRegistry() {\n RootRegistry.clear()\n}","import { type FunctionPlugin } from 'vue';\nimport { Nav } from '../helpers';\nimport { generateRouterFacade } from './facade';\nimport { RootRegistry } from './internals';\nimport type { PluginOptions } from './types';\nimport { getServiceMetadata } from './utils';\n\nexport const iocraft: FunctionPlugin<[Partial<PluginOptions>?]> = (_app, options?: Partial<PluginOptions>) => {\n if (options?.router) {\n RootRegistry.set(getServiceMetadata(Nav).token, generateRouterFacade(options.router));\n }\n\n // Eagerly create Service instances\n if (options?.eagerLoad) {\n options.eagerLoad.forEach(service => {\n const serviceMeta = getServiceMetadata(service);\n\n if (!RootRegistry.has(serviceMeta.token)) {\n RootRegistry.set(serviceMeta.token, new service());\n }\n });\n }\n};\n","import { SERVICE_METADATA } from './internals';\nimport type { ServiceConstructor, ServiceMetadata } from './types';\n\n/**\n * Registers A Class as Service\n *\n * @export\n * @returns {<C extends ServiceConstructor>(constructor: C) => C}\n */\nexport function Register() {\n return function <C extends ServiceConstructor>(constructor: C) {\n if ((constructor as any)[SERVICE_METADATA]?.token) {\n return constructor;\n }\n\n // Add more metadata here if needed\n (constructor as any)[SERVICE_METADATA] = {\n token: Symbol(`[IOCRAFT]: Service - ${constructor.name || 'Anonymous'}`),\n } satisfies ServiceMetadata;\n\n return constructor;\n };\n}\n","import type { RouteLocationNormalizedGeneric, Router } from 'vue-router';\nimport { Register } from '../core';\n\nexport interface Nav\n extends\n Omit<Router, 'install' | 'options' | 'currentRoute'>,\n Pick<\n RouteLocationNormalizedGeneric,\n 'path' | 'name' | 'params' | 'query' | 'hash' | 'fullPath' | 'matched' | 'meta'\n > {}\n\n@Register()\nexport class Nav {}\n","import { reactive, computed, watch, watchEffect, type ComputedRef, type WatchStopHandle, toRaw } from \"vue\";\n\nexport function Store<T extends Record<string, any>>(initialState: T) {\n const state = reactive(initialState) as T;\n const initial = structuredClone(initialState);\n\n return class {\n readonly state = state;\n\n get snapshot(): T {\n return structuredClone(toRaw(state));\n }\n\n update(changes: Partial<T>): void {\n Object.assign(state, changes);\n }\n\n pick<K extends keyof T>(key: K): T[K] {\n return state[key]\n }\n\n compute<R>(fn: (state: T) => R): ComputedRef<R> {\n return computed(() => fn(state));\n }\n\n observe<K extends keyof T>(\n source: K,\n callback: (newValue: T[K], oldValue: T[K]) => void\n ): WatchStopHandle;\n\n observe<R>(\n source: (state: T) => R,\n callback: (newValue: R, oldValue: R) => void\n ): WatchStopHandle;\n\n observe<K extends keyof T, R>(\n source: K | ((state: T) => R),\n callback: (newValue: any, oldValue: any) => void\n ): WatchStopHandle {\n const getter = typeof source === 'function'\n ? () => source(state)\n : () => state[source as K];\n\n return watch(getter, callback);\n }\n\n effect(fn: (state: T) => void): WatchStopHandle {\n return watchEffect(() => fn(state));\n }\n\n reset(): void {\n Object.assign(state, structuredClone(initial));\n }\n };\n}\n\n"]}
@@ -128,7 +128,7 @@ function generateRouterFacade(router) {
128
128
  };
129
129
  }
130
130
 
131
- // src/core/injectors.ts
131
+ // src/core/obtainers.ts
132
132
  import { getCurrentInstance, inject, provide } from "vue";
133
133
 
134
134
  // src/core/internals.ts
@@ -149,6 +149,7 @@ import {
149
149
  } from "vue";
150
150
  var SERVICE_METADATA = /* @__PURE__ */ Symbol("IOCRAFT_SERVICE_METADATA");
151
151
  var RootRegistry = /* @__PURE__ */ new Map();
152
+ var creationStack = /* @__PURE__ */ new Set();
152
153
  var lifecycleHookMap = {
153
154
  onMounted,
154
155
  onUpdated,
@@ -184,44 +185,96 @@ function getServiceMetadata(target) {
184
185
  }
185
186
  return meta;
186
187
  }
187
- function HasService(serviceClass) {
188
+ function hasService(serviceClass) {
188
189
  const meta = getServiceMetadata(serviceClass);
189
190
  return RootRegistry.has(meta.token);
190
191
  }
191
- function IsFacade(_serviceInstance) {
192
+ function unRegister(serviceInstance) {
193
+ const meta = getServiceMetadata(serviceInstance);
194
+ const exist = RootRegistry.has(meta.token);
195
+ if (!exist) return false;
196
+ if (typeof serviceInstance === "object" && serviceInstance !== null && "onUnRegister" in serviceInstance && typeof serviceInstance.onUnRegister === "function") {
197
+ serviceInstance.onUnRegister();
198
+ }
199
+ return RootRegistry.delete(meta.token);
200
+ }
201
+ function clearRegistry() {
202
+ RootRegistry.clear();
192
203
  }
193
204
 
194
- // src/core/injectors.ts
205
+ // src/core/obtainers.ts
195
206
  function obtain(serviceClass) {
196
207
  const serviceMeta = getServiceMetadata(serviceClass);
197
- if (!RootRegistry.has(serviceMeta.token)) {
198
- RootRegistry.set(serviceMeta.token, new serviceClass());
208
+ if (RootRegistry.has(serviceMeta.token)) {
209
+ const instance = RootRegistry.get(serviceMeta.token);
210
+ return createFacadeObj(instance);
211
+ }
212
+ if (creationStack.has(serviceMeta.token)) {
213
+ throw new Error(`[IocRaft] Circular dependency detected on: ${serviceClass.name}
214
+ `);
215
+ }
216
+ creationStack.add(serviceMeta.token);
217
+ try {
218
+ const instance = new serviceClass();
219
+ RootRegistry.set(serviceMeta.token, instance);
220
+ return createFacadeObj(instance);
221
+ } finally {
222
+ creationStack.delete(serviceMeta.token);
199
223
  }
200
- const instance = RootRegistry.get(serviceMeta.token);
201
- return createFacadeObj(instance);
202
224
  }
203
225
  function obtainRaw(serviceClass) {
204
226
  const serviceMeta = getServiceMetadata(serviceClass);
205
- if (!RootRegistry.has(serviceMeta.token)) {
206
- RootRegistry.set(serviceMeta.token, new serviceClass());
227
+ if (RootRegistry.has(serviceMeta.token)) {
228
+ return RootRegistry.get(serviceMeta.token);
207
229
  }
208
- return RootRegistry.get(serviceMeta.token);
209
- }
210
- function obtainRawInstance(serviceClass) {
211
- const componentInstance = getCurrentInstance();
212
- let instance = new serviceClass();
213
- if (componentInstance) {
214
- bindLifecycleHooks(instance);
230
+ if (creationStack.has(serviceMeta.token)) {
231
+ throw new Error(`[IocRaft] Circular dependency detected on: ${serviceClass.name}
232
+ `);
233
+ }
234
+ creationStack.add(serviceMeta.token);
235
+ try {
236
+ const instance = new serviceClass();
237
+ RootRegistry.set(serviceMeta.token, instance);
238
+ return instance;
239
+ } finally {
240
+ creationStack.delete(serviceMeta.token);
215
241
  }
216
- return instance;
217
242
  }
218
243
  function obtainInstance(serviceClass) {
219
- const componentInstance = getCurrentInstance();
220
- let instance = new serviceClass();
221
- if (componentInstance) {
222
- bindLifecycleHooks(instance);
244
+ const serviceMeta = getServiceMetadata(serviceClass);
245
+ if (creationStack.has(serviceMeta.token)) {
246
+ throw new Error(`[IocRaft] Circular dependency detected on: ${serviceClass.name}
247
+ `);
248
+ }
249
+ creationStack.add(serviceMeta.token);
250
+ try {
251
+ const componentInstance = getCurrentInstance();
252
+ const instance = new serviceClass();
253
+ if (componentInstance) {
254
+ bindLifecycleHooks(instance);
255
+ }
256
+ return createFacadeObj(instance);
257
+ } finally {
258
+ creationStack.delete(serviceMeta.token);
259
+ }
260
+ }
261
+ function obtainRawInstance(serviceClass) {
262
+ const serviceMeta = getServiceMetadata(serviceClass);
263
+ if (creationStack.has(serviceMeta.token)) {
264
+ throw new Error(`[IocRaft] Circular dependency detected on: ${serviceClass.name}
265
+ `);
266
+ }
267
+ creationStack.add(serviceMeta.token);
268
+ try {
269
+ const componentInstance = getCurrentInstance();
270
+ const instance = new serviceClass();
271
+ if (componentInstance) {
272
+ bindLifecycleHooks(instance);
273
+ }
274
+ return instance;
275
+ } finally {
276
+ creationStack.delete(serviceMeta.token);
223
277
  }
224
- return createFacadeObj(instance);
225
278
  }
226
279
  function exposeToContext(serviceInstance) {
227
280
  const serviceMeta = getServiceMetadata(serviceInstance);
@@ -268,29 +321,34 @@ Nav = __decorateClass([
268
321
  Register()
269
322
  ], Nav);
270
323
 
271
- // src/helpers/Store.service.ts
324
+ // src/helpers/store.ts
325
+ import { reactive, computed, watch, watchEffect, toRaw } from "vue";
272
326
  function Store(initialState) {
327
+ const state = reactive(initialState);
328
+ const initial = structuredClone(initialState);
273
329
  return class {
274
- state = initialState;
275
- getState() {
330
+ state = state;
331
+ get snapshot() {
332
+ return structuredClone(toRaw(state));
276
333
  }
277
- setState(_partialState) {
334
+ update(changes) {
335
+ Object.assign(state, changes);
278
336
  }
279
- select(_key) {
337
+ pick(key) {
338
+ return state[key];
280
339
  }
281
- selectAll() {
340
+ compute(fn) {
341
+ return computed(() => fn(state));
282
342
  }
283
- computed() {
343
+ observe(source, callback) {
344
+ const getter = typeof source === "function" ? () => source(state) : () => state[source];
345
+ return watch(getter, callback);
284
346
  }
285
- watch() {
286
- }
287
- watchEffect() {
347
+ effect(fn) {
348
+ return watchEffect(() => fn(state));
288
349
  }
289
350
  reset() {
290
- }
291
- onInit() {
292
- }
293
- onDispose() {
351
+ Object.assign(state, structuredClone(initial));
294
352
  }
295
353
  };
296
354
  }
@@ -299,12 +357,13 @@ export {
299
357
  createFacadeObj,
300
358
  generateRouterFacade,
301
359
  getServiceMetadata,
302
- HasService,
303
- IsFacade,
360
+ hasService,
361
+ unRegister,
362
+ clearRegistry,
304
363
  obtain,
305
364
  obtainRaw,
306
- obtainRawInstance,
307
365
  obtainInstance,
366
+ obtainRawInstance,
308
367
  exposeToContext,
309
368
  obtainFromContext,
310
369
  Nav,
@@ -312,4 +371,4 @@ export {
312
371
  iocraft,
313
372
  Register
314
373
  };
315
- //# sourceMappingURL=chunk-UO5JQJD3.js.map
374
+ //# sourceMappingURL=chunk-OLY3RJCX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/facade.ts","../src/core/obtainers.ts","../src/core/internals.ts","../src/core/utils.ts","../src/core/plugin.ts","../src/core/register.ts","../src/helpers/Nav.service.ts","../src/helpers/store.ts"],"sourcesContent":["import type { Router } from 'vue-router';\nimport type { ServiceConstructor } from './types';\n\nfunction hasKey(obj: Record<PropertyKey, unknown>, key: PropertyKey): boolean {\n if (typeof key === 'symbol') {\n return Object.getOwnPropertySymbols(obj).includes(key);\n }\n return Object.hasOwn(obj, key);\n}\n\nconst NativeKeys = new Set([\n ...Object.getOwnPropertyNames(Object.prototype),\n ...Object.getOwnPropertySymbols(Object.prototype),\n ...Object.getOwnPropertyNames(Function.prototype),\n ...Object.getOwnPropertySymbols(Function.prototype),\n ...Object.getOwnPropertyNames(Array.prototype),\n ...Object.getOwnPropertySymbols(Array.prototype),\n]);\n\nfunction addInstanceProperties<T extends object>(\n serviceInstance: InstanceType<ServiceConstructor<T>>,\n targetObj: Record<PropertyKey, unknown>\n) {\n const ownKeys = [...Object.getOwnPropertyNames(serviceInstance), ...Object.getOwnPropertySymbols(serviceInstance)];\n\n for (const key of ownKeys) {\n if (hasKey(targetObj, key)) continue;\n\n const descriptor = Object.getOwnPropertyDescriptor(serviceInstance, key)!;\n\n if (typeof descriptor.value === 'function') {\n console.warn(`[IOCRAFT]: Instance method \"${String(key)}\" found as own property. Consider moving to prototype.`);\n continue;\n }\n\n if (descriptor.get || descriptor.set) {\n continue;\n }\n\n Object.defineProperty(targetObj, key, {\n get() {\n return serviceInstance[key as keyof typeof serviceInstance];\n },\n set(v) {\n serviceInstance[key as keyof typeof serviceInstance] = v;\n },\n enumerable: true,\n configurable: true,\n });\n }\n}\n\nfunction addPrototypeProperties<T extends object>(\n serviceInstance: InstanceType<ServiceConstructor<T>>,\n targetObj: Record<PropertyKey, unknown>\n) {\n let currentProto = Object.getPrototypeOf(serviceInstance);\n\n while (currentProto && currentProto !== Object.prototype) {\n const protoKeys = [...Object.getOwnPropertyNames(currentProto), ...Object.getOwnPropertySymbols(currentProto)];\n\n for (const key of protoKeys) {\n if (hasKey(targetObj, key)) continue;\n\n if (NativeKeys.has(key)) continue;\n\n const descriptor = Object.getOwnPropertyDescriptor(currentProto, key)!;\n\n if (descriptor.get || descriptor.set) {\n Object.defineProperty(targetObj, key, {\n get: descriptor.get ? () => descriptor.get!.call(serviceInstance) : undefined,\n set: descriptor.set ? (v: any) => descriptor.set!.call(serviceInstance, v) : undefined,\n enumerable: true,\n configurable: true,\n });\n } else if (typeof descriptor.value === 'function') {\n targetObj[key] = descriptor.value.bind(serviceInstance);\n }\n }\n\n currentProto = Object.getPrototypeOf(currentProto);\n }\n}\n\n/**\n * CREATES A FACADE OBJECT\n *\n * @export\n * @template {object} T\n * @param {ServiceConstructor<T>} serviceClass\n * @param {InstanceType<ServiceConstructor<T>>} serviceInstance\n * @returns {{}}\n */\nexport function createFacadeObj<T extends object>(serviceInstance: object) {\n const targetObj = {};\n\n addInstanceProperties(serviceInstance, targetObj);\n addPrototypeProperties(serviceInstance, targetObj);\n return targetObj as T;\n}\n\nexport function generateRouterFacade(router: Router): Record<string, any> {\n return {\n get path() {\n return router.currentRoute.value.path;\n },\n get name() {\n return router.currentRoute.value.name;\n },\n get params() {\n return router.currentRoute.value.params;\n },\n get query() {\n return router.currentRoute.value.query;\n },\n get hash() {\n return router.currentRoute.value.hash;\n },\n get fullPath() {\n return router.currentRoute.value.fullPath;\n },\n get matched() {\n return router.currentRoute.value.matched;\n },\n get meta() {\n return router.currentRoute.value.meta;\n },\n push: router.push.bind(router),\n replace: router.replace.bind(router),\n go: router.go.bind(router),\n back: router.back.bind(router),\n forward: router.forward.bind(router),\n resolve: router.resolve.bind(router),\n getRoutes: router.getRoutes.bind(router),\n hasRoute: router.hasRoute.bind(router),\n\n // Router guards\n beforeEach: router.beforeEach.bind(router),\n beforeResolve: router.beforeResolve.bind(router),\n afterEach: router.afterEach.bind(router),\n onError: router.onError.bind(router),\n\n // Dynamic routing\n addRoute: router.addRoute.bind(router),\n removeRoute: router.removeRoute.bind(router),\n clearRoutes: router.clearRoutes.bind(router),\n\n // State\n isReady: router.isReady.bind(router),\n get currentRoute() {\n return router.currentRoute;\n },\n };\n}\n","import { getCurrentInstance, inject, provide } from 'vue';\nimport { createFacadeObj } from './facade';\nimport { bindLifecycleHooks, creationStack, RootRegistry } from './internals';\nimport type { ServiceConstructor } from './types';\nimport { getServiceMetadata } from './utils';\n\n/**\n * obtain Facade of a global singleton service From Root Registry\n *\n * @export\n * @template {ServiceConstructor} T\n * @param {T} serviceClass\n * @returns {InstanceType<T>}\n */\nexport function obtain<T extends ServiceConstructor>(serviceClass: T) {\n const serviceMeta = getServiceMetadata(serviceClass);\n\n if (RootRegistry.has(serviceMeta.token)) {\n const instance = RootRegistry.get(serviceMeta.token)!;\n return createFacadeObj<InstanceType<T>>(instance);\n }\n\n if (creationStack.has(serviceMeta.token)) {\n throw new Error(`[IocRaft] Circular dependency detected on: ${serviceClass.name}\\n`);\n }\n\n creationStack.add(serviceMeta.token);\n\n try {\n const instance = new serviceClass();\n RootRegistry.set(serviceMeta.token, instance);\n return createFacadeObj<InstanceType<T>>(instance);\n } finally {\n creationStack.delete(serviceMeta.token);\n }\n}\n\n/**\n * obtain a global singleton service From Root Registry\n *\n * @export\n * @template {ServiceConstructor} T\n * @param {T} serviceClass\n * @returns {InstanceType<T>}\n */\nexport function obtainRaw<T extends ServiceConstructor>(serviceClass: T) {\n const serviceMeta = getServiceMetadata(serviceClass);\n\n if (RootRegistry.has(serviceMeta.token)) {\n return RootRegistry.get(serviceMeta.token) as InstanceType<T>;\n }\n\n if (creationStack.has(serviceMeta.token)) {\n throw new Error(`[IocRaft] Circular dependency detected on: ${serviceClass.name}\\n`);\n }\n\n creationStack.add(serviceMeta.token);\n\n try {\n const instance = new serviceClass();\n RootRegistry.set(serviceMeta.token, instance);\n return instance as InstanceType<T>;\n } finally {\n creationStack.delete(serviceMeta.token);\n }\n}\n\n/**\n * obtain a facade of a new Service Instance\n *\n * @export\n * @template {ServiceConstructor} T\n * @param {T} serviceClass\n * @returns {InstanceType<T>}\n */\nexport function obtainInstance<T extends ServiceConstructor>(serviceClass: T) {\n const serviceMeta = getServiceMetadata(serviceClass);\n\n if (creationStack.has(serviceMeta.token)) {\n throw new Error(`[IocRaft] Circular dependency detected on: ${serviceClass.name}\\n`);\n }\n\n creationStack.add(serviceMeta.token);\n\n try {\n const componentInstance = getCurrentInstance();\n const instance = new serviceClass();\n\n if (componentInstance) {\n bindLifecycleHooks(instance);\n }\n\n return createFacadeObj<InstanceType<T>>(instance);\n } finally {\n creationStack.delete(serviceMeta.token);\n }\n}\n\n\n\n\n\n/**\n * obtain a new Service Instance\n *\n * @export\n * @template {ServiceConstructor} T\n * @param {T} serviceClass\n * @returns {InstanceType<T>}\n */\nexport function obtainRawInstance<T extends ServiceConstructor>(serviceClass: T) {\n const serviceMeta = getServiceMetadata(serviceClass);\n\n if (creationStack.has(serviceMeta.token)) {\n throw new Error(`[IocRaft] Circular dependency detected on: ${serviceClass.name}\\n`);\n }\n\n creationStack.add(serviceMeta.token);\n\n try {\n const componentInstance = getCurrentInstance();\n const instance = new serviceClass();\n\n if (componentInstance) {\n bindLifecycleHooks(instance);\n }\n return instance as InstanceType<T>;\n } finally {\n creationStack.delete(serviceMeta.token);\n }\n}\n\n\n\n/**\n * Expose a service to context\n *\n * @export\n * @template {ServiceConstructor} T\n * @param {InstanceType<T>} serviceInstance\n */\nexport function exposeToContext<T extends ServiceConstructor>(serviceInstance: InstanceType<T>) {\n const serviceMeta = getServiceMetadata(serviceInstance);\n provide(serviceMeta.token, serviceInstance);\n}\n\n/**\n * obtain A Service From Context\n *\n * @export\n * @template {ServiceConstructor} T\n * @param {T} serviceClass\n * @returns {*}\n */\nexport function obtainFromContext<T extends ServiceConstructor>(serviceClass: T) {\n const serviceMeta = getServiceMetadata(serviceClass);\n return inject<InstanceType<T>>(serviceMeta.token);\n}\n","import {\n onMounted,\n onUpdated,\n onUnmounted,\n onBeforeMount,\n onBeforeUpdate,\n onBeforeUnmount,\n onErrorCaptured,\n onRenderTracked,\n onRenderTriggered,\n onActivated,\n onDeactivated,\n onServerPrefetch,\n onScopeDispose,\n} from 'vue';\n\nexport const SERVICE_METADATA = Symbol('IOCRAFT_SERVICE_METADATA');\nexport const RootRegistry = new Map<symbol, object>();\nexport const creationStack = new Set<symbol>();\nconst lifecycleHookMap = {\n onMounted,\n onUpdated,\n onUnmounted,\n onBeforeMount,\n onBeforeUpdate,\n onBeforeUnmount,\n onErrorCaptured,\n onRenderTracked,\n onRenderTriggered,\n onActivated,\n onDeactivated,\n onServerPrefetch,\n onScopeDispose,\n} as const;\n\nexport function bindLifecycleHooks(instance: any) {\n for (const key in lifecycleHookMap) {\n const hookName = key as keyof typeof lifecycleHookMap;\n const vueHook = lifecycleHookMap[hookName];\n\n const handler = instance[hookName];\n\n if (typeof handler === 'function') {\n vueHook(handler.bind(instance));\n }\n }\n}\n","import { RootRegistry, SERVICE_METADATA } from './internals';\nimport type { ServiceConstructor, ServiceMetadata } from './types';\n\n/**\n * get service metadata\n *\n * @export\n * @param {(ServiceConstructor | object)} target\n * @returns {ServiceMetadata}\n */\nexport function getServiceMetadata(target: ServiceConstructor | object) {\n const ctor = typeof target === 'function' ? target : target.constructor;\n\n const meta = (ctor as any)[SERVICE_METADATA] as ServiceMetadata;\n if (!meta?.token) {\n throw new Error(`[IOCRAFT]: ${ctor?.name || 'Unknown'} is not decorated with @Register()`);\n }\n return meta;\n}\n\n\n/**\n * Check if a service is present in registry\n *\n * @export\n * @param {ServiceConstructor} serviceClass \n * @returns {*} \n */\nexport function hasService(serviceClass: ServiceConstructor) {\n const meta = getServiceMetadata(serviceClass);\n return RootRegistry.has(meta.token);\n}\n\n\n/**\n * unRegister (remove) a service from registry\n *\n * @export\n * @param {ServiceConstructor} serviceClass \n * @returns {*} \n */\nexport function unRegister<T extends InstanceType<ServiceConstructor>>(serviceInstance: T) {\n const meta = getServiceMetadata(serviceInstance);\n const exist = RootRegistry.has(meta.token);\n if (!exist) return false;\n\n\n if (typeof serviceInstance === 'object' &&\n serviceInstance !== null &&\n 'onUnRegister' in serviceInstance &&\n typeof serviceInstance.onUnRegister === 'function'\n ) {\n serviceInstance.onUnRegister()\n }\n\n return RootRegistry.delete(meta.token)\n}\n\n\n\n\n\n/**\n * clear service registry\n *\n * @export\n */\nexport function clearRegistry() {\n RootRegistry.clear()\n}","import { type FunctionPlugin } from 'vue';\nimport { Nav } from '../helpers';\nimport { generateRouterFacade } from './facade';\nimport { RootRegistry } from './internals';\nimport type { PluginOptions } from './types';\nimport { getServiceMetadata } from './utils';\n\nexport const iocraft: FunctionPlugin<[Partial<PluginOptions>?]> = (_app, options?: Partial<PluginOptions>) => {\n if (options?.router) {\n RootRegistry.set(getServiceMetadata(Nav).token, generateRouterFacade(options.router));\n }\n\n // Eagerly create Service instances\n if (options?.eagerLoad) {\n options.eagerLoad.forEach(service => {\n const serviceMeta = getServiceMetadata(service);\n\n if (!RootRegistry.has(serviceMeta.token)) {\n RootRegistry.set(serviceMeta.token, new service());\n }\n });\n }\n};\n","import { SERVICE_METADATA } from './internals';\nimport type { ServiceConstructor, ServiceMetadata } from './types';\n\n/**\n * Registers A Class as Service\n *\n * @export\n * @returns {<C extends ServiceConstructor>(constructor: C) => C}\n */\nexport function Register() {\n return function <C extends ServiceConstructor>(constructor: C) {\n if ((constructor as any)[SERVICE_METADATA]?.token) {\n return constructor;\n }\n\n // Add more metadata here if needed\n (constructor as any)[SERVICE_METADATA] = {\n token: Symbol(`[IOCRAFT]: Service - ${constructor.name || 'Anonymous'}`),\n } satisfies ServiceMetadata;\n\n return constructor;\n };\n}\n","import type { RouteLocationNormalizedGeneric, Router } from 'vue-router';\nimport { Register } from '../core';\n\nexport interface Nav\n extends\n Omit<Router, 'install' | 'options' | 'currentRoute'>,\n Pick<\n RouteLocationNormalizedGeneric,\n 'path' | 'name' | 'params' | 'query' | 'hash' | 'fullPath' | 'matched' | 'meta'\n > {}\n\n@Register()\nexport class Nav {}\n","import { reactive, computed, watch, watchEffect, type ComputedRef, type WatchStopHandle, toRaw } from \"vue\";\n\nexport function Store<T extends Record<string, any>>(initialState: T) {\n const state = reactive(initialState) as T;\n const initial = structuredClone(initialState);\n\n return class {\n readonly state = state;\n\n get snapshot(): T {\n return structuredClone(toRaw(state));\n }\n\n update(changes: Partial<T>): void {\n Object.assign(state, changes);\n }\n\n pick<K extends keyof T>(key: K): T[K] {\n return state[key]\n }\n\n compute<R>(fn: (state: T) => R): ComputedRef<R> {\n return computed(() => fn(state));\n }\n\n observe<K extends keyof T>(\n source: K,\n callback: (newValue: T[K], oldValue: T[K]) => void\n ): WatchStopHandle;\n\n observe<R>(\n source: (state: T) => R,\n callback: (newValue: R, oldValue: R) => void\n ): WatchStopHandle;\n\n observe<K extends keyof T, R>(\n source: K | ((state: T) => R),\n callback: (newValue: any, oldValue: any) => void\n ): WatchStopHandle {\n const getter = typeof source === 'function'\n ? () => source(state)\n : () => state[source as K];\n\n return watch(getter, callback);\n }\n\n effect(fn: (state: T) => void): WatchStopHandle {\n return watchEffect(() => fn(state));\n }\n\n reset(): void {\n Object.assign(state, structuredClone(initial));\n }\n };\n}\n\n"],"mappings":"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","names":[]}
package/dist/core.cjs CHANGED
@@ -13,8 +13,8 @@
13
13
 
14
14
 
15
15
 
16
- var _chunkFPSHR5LZcjs = require('./chunk-FPSHR5LZ.cjs');
17
16
 
17
+ var _chunkNJJ6QKIIcjs = require('./chunk-NJJ6QKII.cjs');
18
18
 
19
19
 
20
20
 
@@ -28,5 +28,7 @@ var _chunkFPSHR5LZcjs = require('./chunk-FPSHR5LZ.cjs');
28
28
 
29
29
 
30
30
 
31
- exports.HasService = _chunkFPSHR5LZcjs.HasService; exports.IsFacade = _chunkFPSHR5LZcjs.IsFacade; exports.Register = _chunkFPSHR5LZcjs.Register; exports.createFacadeObj = _chunkFPSHR5LZcjs.createFacadeObj; exports.exposeToContext = _chunkFPSHR5LZcjs.exposeToContext; exports.generateRouterFacade = _chunkFPSHR5LZcjs.generateRouterFacade; exports.getServiceMetadata = _chunkFPSHR5LZcjs.getServiceMetadata; exports.iocraft = _chunkFPSHR5LZcjs.iocraft; exports.obtain = _chunkFPSHR5LZcjs.obtain; exports.obtainFromContext = _chunkFPSHR5LZcjs.obtainFromContext; exports.obtainInstance = _chunkFPSHR5LZcjs.obtainInstance; exports.obtainRaw = _chunkFPSHR5LZcjs.obtainRaw; exports.obtainRawInstance = _chunkFPSHR5LZcjs.obtainRawInstance;
31
+
32
+
33
+ exports.Register = _chunkNJJ6QKIIcjs.Register; exports.clearRegistry = _chunkNJJ6QKIIcjs.clearRegistry; exports.createFacadeObj = _chunkNJJ6QKIIcjs.createFacadeObj; exports.exposeToContext = _chunkNJJ6QKIIcjs.exposeToContext; exports.generateRouterFacade = _chunkNJJ6QKIIcjs.generateRouterFacade; exports.getServiceMetadata = _chunkNJJ6QKIIcjs.getServiceMetadata; exports.hasService = _chunkNJJ6QKIIcjs.hasService; exports.iocraft = _chunkNJJ6QKIIcjs.iocraft; exports.obtain = _chunkNJJ6QKIIcjs.obtain; exports.obtainFromContext = _chunkNJJ6QKIIcjs.obtainFromContext; exports.obtainInstance = _chunkNJJ6QKIIcjs.obtainInstance; exports.obtainRaw = _chunkNJJ6QKIIcjs.obtainRaw; exports.obtainRawInstance = _chunkNJJ6QKIIcjs.obtainRawInstance; exports.unRegister = _chunkNJJ6QKIIcjs.unRegister;
32
34
  //# sourceMappingURL=core.cjs.map
package/dist/core.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/iocraft/iocraft/packages/iocraft/dist/core.cjs"],"names":[],"mappings":"AAAA,qFAAY;AACZ;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,0tBAAC","file":"/home/runner/work/iocraft/iocraft/packages/iocraft/dist/core.cjs"}
1
+ {"version":3,"sources":["/home/runner/work/iocraft/iocraft/packages/iocraft/dist/core.cjs"],"names":[],"mappings":"AAAA,qFAAY;AACZ;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,uxBAAC","file":"/home/runner/work/iocraft/iocraft/packages/iocraft/dist/core.cjs"}
package/dist/core.d.cts CHANGED
@@ -1,6 +1,18 @@
1
1
  import { Router } from 'vue-router';
2
2
  import { FunctionPlugin } from 'vue';
3
3
 
4
+ /**
5
+ * CREATES A FACADE OBJECT
6
+ *
7
+ * @export
8
+ * @template {object} T
9
+ * @param {ServiceConstructor<T>} serviceClass
10
+ * @param {InstanceType<ServiceConstructor<T>>} serviceInstance
11
+ * @returns {{}}
12
+ */
13
+ declare function createFacadeObj<T extends object>(serviceInstance: object): T;
14
+ declare function generateRouterFacade(router: Router): Record<string, any>;
15
+
4
16
  type ServiceConstructor<T extends object = object> = new () => T;
5
17
 
6
18
  type PluginOptions = {
@@ -65,18 +77,6 @@ interface OnScopeDispose {
65
77
  onScopeDispose(): void;
66
78
  }
67
79
 
68
- /**
69
- * CREATES A FACADE OBJECT
70
- *
71
- * @export
72
- * @template {object} T
73
- * @param {ServiceConstructor<T>} serviceClass
74
- * @param {InstanceType<ServiceConstructor<T>>} serviceInstance
75
- * @returns {{}}
76
- */
77
- declare function createFacadeObj<T extends object>(serviceInstance: InstanceType<ServiceConstructor<T>>): {};
78
- declare function generateRouterFacade(router: Router): Record<string, any>;
79
-
80
80
  /**
81
81
  * obtain Facade of a global singleton service From Root Registry
82
82
  *
@@ -96,23 +96,23 @@ declare function obtain<T extends ServiceConstructor>(serviceClass: T): Instance
96
96
  */
97
97
  declare function obtainRaw<T extends ServiceConstructor>(serviceClass: T): InstanceType<T>;
98
98
  /**
99
- * obtain a new Service Instance
99
+ * obtain a facade of a new Service Instance
100
100
  *
101
101
  * @export
102
102
  * @template {ServiceConstructor} T
103
103
  * @param {T} serviceClass
104
104
  * @returns {InstanceType<T>}
105
105
  */
106
- declare function obtainRawInstance<T extends ServiceConstructor>(serviceClass: T): InstanceType<T>;
106
+ declare function obtainInstance<T extends ServiceConstructor>(serviceClass: T): InstanceType<T>;
107
107
  /**
108
- * obtain a facade of a new Service Instance
108
+ * obtain a new Service Instance
109
109
  *
110
110
  * @export
111
111
  * @template {ServiceConstructor} T
112
112
  * @param {T} serviceClass
113
113
  * @returns {InstanceType<T>}
114
114
  */
115
- declare function obtainInstance<T extends ServiceConstructor>(serviceClass: T): InstanceType<T>;
115
+ declare function obtainRawInstance<T extends ServiceConstructor>(serviceClass: T): InstanceType<T>;
116
116
  /**
117
117
  * Expose a service to context
118
118
  *
@@ -149,7 +149,27 @@ declare function Register(): <C extends ServiceConstructor>(constructor: C) => C
149
149
  * @returns {ServiceMetadata}
150
150
  */
151
151
  declare function getServiceMetadata(target: ServiceConstructor | object): ServiceMetadata;
152
- declare function HasService(serviceClass: ServiceConstructor): boolean;
153
- declare function IsFacade(_serviceInstance: object): void;
152
+ /**
153
+ * Check if a service is present in registry
154
+ *
155
+ * @export
156
+ * @param {ServiceConstructor} serviceClass
157
+ * @returns {*}
158
+ */
159
+ declare function hasService(serviceClass: ServiceConstructor): boolean;
160
+ /**
161
+ * unRegister (remove) a service from registry
162
+ *
163
+ * @export
164
+ * @param {ServiceConstructor} serviceClass
165
+ * @returns {*}
166
+ */
167
+ declare function unRegister<T extends InstanceType<ServiceConstructor>>(serviceInstance: T): boolean;
168
+ /**
169
+ * clear service registry
170
+ *
171
+ * @export
172
+ */
173
+ declare function clearRegistry(): void;
154
174
 
155
- export { HasService, IsFacade, type OnActivated, type OnBeforeMount, type OnBeforeUnmount, type OnBeforeUpdate, type OnDeactivated, type OnErrorCaptured, type OnMounted, type OnRenderTracked, type OnRenderTriggered, type OnScopeDispose, type OnServerPrefetch, type OnUnmounted, type OnUpdated, Register, createFacadeObj, exposeToContext, generateRouterFacade, getServiceMetadata, iocraft, obtain, obtainFromContext, obtainInstance, obtainRaw, obtainRawInstance };
175
+ export { type OnActivated, type OnBeforeMount, type OnBeforeUnmount, type OnBeforeUpdate, type OnDeactivated, type OnErrorCaptured, type OnMounted, type OnRenderTracked, type OnRenderTriggered, type OnScopeDispose, type OnServerPrefetch, type OnUnmounted, type OnUpdated, Register, clearRegistry, createFacadeObj, exposeToContext, generateRouterFacade, getServiceMetadata, hasService, iocraft, obtain, obtainFromContext, obtainInstance, obtainRaw, obtainRawInstance, unRegister };
package/dist/core.d.ts CHANGED
@@ -1,6 +1,18 @@
1
1
  import { Router } from 'vue-router';
2
2
  import { FunctionPlugin } from 'vue';
3
3
 
4
+ /**
5
+ * CREATES A FACADE OBJECT
6
+ *
7
+ * @export
8
+ * @template {object} T
9
+ * @param {ServiceConstructor<T>} serviceClass
10
+ * @param {InstanceType<ServiceConstructor<T>>} serviceInstance
11
+ * @returns {{}}
12
+ */
13
+ declare function createFacadeObj<T extends object>(serviceInstance: object): T;
14
+ declare function generateRouterFacade(router: Router): Record<string, any>;
15
+
4
16
  type ServiceConstructor<T extends object = object> = new () => T;
5
17
 
6
18
  type PluginOptions = {
@@ -65,18 +77,6 @@ interface OnScopeDispose {
65
77
  onScopeDispose(): void;
66
78
  }
67
79
 
68
- /**
69
- * CREATES A FACADE OBJECT
70
- *
71
- * @export
72
- * @template {object} T
73
- * @param {ServiceConstructor<T>} serviceClass
74
- * @param {InstanceType<ServiceConstructor<T>>} serviceInstance
75
- * @returns {{}}
76
- */
77
- declare function createFacadeObj<T extends object>(serviceInstance: InstanceType<ServiceConstructor<T>>): {};
78
- declare function generateRouterFacade(router: Router): Record<string, any>;
79
-
80
80
  /**
81
81
  * obtain Facade of a global singleton service From Root Registry
82
82
  *
@@ -96,23 +96,23 @@ declare function obtain<T extends ServiceConstructor>(serviceClass: T): Instance
96
96
  */
97
97
  declare function obtainRaw<T extends ServiceConstructor>(serviceClass: T): InstanceType<T>;
98
98
  /**
99
- * obtain a new Service Instance
99
+ * obtain a facade of a new Service Instance
100
100
  *
101
101
  * @export
102
102
  * @template {ServiceConstructor} T
103
103
  * @param {T} serviceClass
104
104
  * @returns {InstanceType<T>}
105
105
  */
106
- declare function obtainRawInstance<T extends ServiceConstructor>(serviceClass: T): InstanceType<T>;
106
+ declare function obtainInstance<T extends ServiceConstructor>(serviceClass: T): InstanceType<T>;
107
107
  /**
108
- * obtain a facade of a new Service Instance
108
+ * obtain a new Service Instance
109
109
  *
110
110
  * @export
111
111
  * @template {ServiceConstructor} T
112
112
  * @param {T} serviceClass
113
113
  * @returns {InstanceType<T>}
114
114
  */
115
- declare function obtainInstance<T extends ServiceConstructor>(serviceClass: T): InstanceType<T>;
115
+ declare function obtainRawInstance<T extends ServiceConstructor>(serviceClass: T): InstanceType<T>;
116
116
  /**
117
117
  * Expose a service to context
118
118
  *
@@ -149,7 +149,27 @@ declare function Register(): <C extends ServiceConstructor>(constructor: C) => C
149
149
  * @returns {ServiceMetadata}
150
150
  */
151
151
  declare function getServiceMetadata(target: ServiceConstructor | object): ServiceMetadata;
152
- declare function HasService(serviceClass: ServiceConstructor): boolean;
153
- declare function IsFacade(_serviceInstance: object): void;
152
+ /**
153
+ * Check if a service is present in registry
154
+ *
155
+ * @export
156
+ * @param {ServiceConstructor} serviceClass
157
+ * @returns {*}
158
+ */
159
+ declare function hasService(serviceClass: ServiceConstructor): boolean;
160
+ /**
161
+ * unRegister (remove) a service from registry
162
+ *
163
+ * @export
164
+ * @param {ServiceConstructor} serviceClass
165
+ * @returns {*}
166
+ */
167
+ declare function unRegister<T extends InstanceType<ServiceConstructor>>(serviceInstance: T): boolean;
168
+ /**
169
+ * clear service registry
170
+ *
171
+ * @export
172
+ */
173
+ declare function clearRegistry(): void;
154
174
 
155
- export { HasService, IsFacade, type OnActivated, type OnBeforeMount, type OnBeforeUnmount, type OnBeforeUpdate, type OnDeactivated, type OnErrorCaptured, type OnMounted, type OnRenderTracked, type OnRenderTriggered, type OnScopeDispose, type OnServerPrefetch, type OnUnmounted, type OnUpdated, Register, createFacadeObj, exposeToContext, generateRouterFacade, getServiceMetadata, iocraft, obtain, obtainFromContext, obtainInstance, obtainRaw, obtainRawInstance };
175
+ export { type OnActivated, type OnBeforeMount, type OnBeforeUnmount, type OnBeforeUpdate, type OnDeactivated, type OnErrorCaptured, type OnMounted, type OnRenderTracked, type OnRenderTriggered, type OnScopeDispose, type OnServerPrefetch, type OnUnmounted, type OnUpdated, Register, clearRegistry, createFacadeObj, exposeToContext, generateRouterFacade, getServiceMetadata, hasService, iocraft, obtain, obtainFromContext, obtainInstance, obtainRaw, obtainRawInstance, unRegister };
package/dist/core.js CHANGED
@@ -1,32 +1,34 @@
1
1
  "use strict";
2
2
  import {
3
- HasService,
4
- IsFacade,
5
3
  Register,
4
+ clearRegistry,
6
5
  createFacadeObj,
7
6
  exposeToContext,
8
7
  generateRouterFacade,
9
8
  getServiceMetadata,
9
+ hasService,
10
10
  iocraft,
11
11
  obtain,
12
12
  obtainFromContext,
13
13
  obtainInstance,
14
14
  obtainRaw,
15
- obtainRawInstance
16
- } from "./chunk-UO5JQJD3.js";
15
+ obtainRawInstance,
16
+ unRegister
17
+ } from "./chunk-OLY3RJCX.js";
17
18
  export {
18
- HasService,
19
- IsFacade,
20
19
  Register,
20
+ clearRegistry,
21
21
  createFacadeObj,
22
22
  exposeToContext,
23
23
  generateRouterFacade,
24
24
  getServiceMetadata,
25
+ hasService,
25
26
  iocraft,
26
27
  obtain,
27
28
  obtainFromContext,
28
29
  obtainInstance,
29
30
  obtainRaw,
30
- obtainRawInstance
31
+ obtainRawInstance,
32
+ unRegister
31
33
  };
32
34
  //# sourceMappingURL=core.js.map
package/dist/helpers.cjs CHANGED
@@ -2,9 +2,9 @@
2
2
 
3
3
 
4
4
 
5
- var _chunkFPSHR5LZcjs = require('./chunk-FPSHR5LZ.cjs');
5
+ var _chunkNJJ6QKIIcjs = require('./chunk-NJJ6QKII.cjs');
6
6
 
7
7
 
8
8
 
9
- exports.Nav = _chunkFPSHR5LZcjs.Nav; exports.Store = _chunkFPSHR5LZcjs.Store;
9
+ exports.Nav = _chunkNJJ6QKIIcjs.Nav; exports.Store = _chunkNJJ6QKIIcjs.Store;
10
10
  //# sourceMappingURL=helpers.cjs.map
@@ -1,4 +1,5 @@
1
1
  import { Router, RouteLocationNormalizedGeneric } from 'vue-router';
2
+ import { ComputedRef, WatchStopHandle } from 'vue';
2
3
 
3
4
  interface Nav extends Omit<Router, 'install' | 'options' | 'currentRoute'>, Pick<RouteLocationNormalizedGeneric, 'path' | 'name' | 'params' | 'query' | 'hash' | 'fullPath' | 'matched' | 'meta'> {
4
5
  }
@@ -7,17 +8,15 @@ declare class Nav {
7
8
 
8
9
  declare function Store<T extends Record<string, any>>(initialState: T): {
9
10
  new (): {
10
- state: T;
11
- getState(): void;
12
- setState(_partialState: Partial<T>): void;
13
- select<K extends keyof T>(_key: K): void;
14
- selectAll(): void;
15
- computed(): void;
16
- watch(): void;
17
- watchEffect(): void;
11
+ readonly state: T;
12
+ get snapshot(): T;
13
+ update(changes: Partial<T>): void;
14
+ pick<K extends keyof T>(key: K): T[K];
15
+ compute<R>(fn: (state: T) => R): ComputedRef<R>;
16
+ observe<K extends keyof T>(source: K, callback: (newValue: T[K], oldValue: T[K]) => void): WatchStopHandle;
17
+ observe<R>(source: (state: T) => R, callback: (newValue: R, oldValue: R) => void): WatchStopHandle;
18
+ effect(fn: (state: T) => void): WatchStopHandle;
18
19
  reset(): void;
19
- onInit(): void;
20
- onDispose(): void;
21
20
  };
22
21
  };
23
22
 
package/dist/helpers.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { Router, RouteLocationNormalizedGeneric } from 'vue-router';
2
+ import { ComputedRef, WatchStopHandle } from 'vue';
2
3
 
3
4
  interface Nav extends Omit<Router, 'install' | 'options' | 'currentRoute'>, Pick<RouteLocationNormalizedGeneric, 'path' | 'name' | 'params' | 'query' | 'hash' | 'fullPath' | 'matched' | 'meta'> {
4
5
  }
@@ -7,17 +8,15 @@ declare class Nav {
7
8
 
8
9
  declare function Store<T extends Record<string, any>>(initialState: T): {
9
10
  new (): {
10
- state: T;
11
- getState(): void;
12
- setState(_partialState: Partial<T>): void;
13
- select<K extends keyof T>(_key: K): void;
14
- selectAll(): void;
15
- computed(): void;
16
- watch(): void;
17
- watchEffect(): void;
11
+ readonly state: T;
12
+ get snapshot(): T;
13
+ update(changes: Partial<T>): void;
14
+ pick<K extends keyof T>(key: K): T[K];
15
+ compute<R>(fn: (state: T) => R): ComputedRef<R>;
16
+ observe<K extends keyof T>(source: K, callback: (newValue: T[K], oldValue: T[K]) => void): WatchStopHandle;
17
+ observe<R>(source: (state: T) => R, callback: (newValue: R, oldValue: R) => void): WatchStopHandle;
18
+ effect(fn: (state: T) => void): WatchStopHandle;
18
19
  reset(): void;
19
- onInit(): void;
20
- onDispose(): void;
21
20
  };
22
21
  };
23
22
 
package/dist/helpers.js CHANGED
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  Nav,
4
4
  Store
5
- } from "./chunk-UO5JQJD3.js";
5
+ } from "./chunk-OLY3RJCX.js";
6
6
  export {
7
7
  Nav,
8
8
  Store
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iocraft",
3
- "version": "0.2.4",
3
+ "version": "0.2.5",
4
4
  "description": "A lightweight IOC container for Vue 3 using the Composition API.",
5
5
  "keywords": [
6
6
  "vue",
@@ -48,7 +48,6 @@
48
48
  "vue-router": "^4.0.0"
49
49
  },
50
50
  "devDependencies": {
51
- "tinybench": "^6.0.0",
52
51
  "tsup": "^8.5.1",
53
52
  "typescript": "~5.9.3",
54
53
  "vitest": "^4.0.16",
@@ -66,6 +65,7 @@
66
65
  "build": "tsup",
67
66
  "dev": "tsup --watch",
68
67
  "typecheck": "tsc --noEmit",
69
- "test": "vitest bench"
68
+ "test": "vitest",
69
+ "bench": "vitest bench"
70
70
  }
71
71
  }
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/home/runner/work/iocraft/iocraft/packages/iocraft/dist/chunk-FPSHR5LZ.cjs","../src/core/facade.ts","../src/core/injectors.ts","../src/core/internals.ts","../src/core/utils.ts","../src/core/plugin.ts","../src/core/register.ts","../src/helpers/Nav.service.ts","../src/helpers/Store.service.ts"],"names":[],"mappings":"AAAA,qmBAAY;AACZ,IAAI,UAAU,EAAE,MAAM,CAAC,cAAc;AACrC,IAAI,iBAAiB,EAAE,MAAM,CAAC,wBAAwB;AACtD,IAAI,gBAAgB,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG;AACzD,EAAE,IAAI,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,MAAM;AAChF,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE;AAC5D,IAAI,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;AACjC,MAAM,OAAO,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM;AACpF,EAAE,GAAG,CAAC,KAAK,GAAG,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC;AACpD,EAAE,OAAO,MAAM;AACf,CAAC;AACD;AACA;ACTA,SAAS,MAAA,CAAO,GAAA,EAAmC,GAAA,EAA2B;AAC5E,EAAA,GAAA,CAAI,OAAO,IAAA,IAAQ,QAAA,EAAU;AAC3B,IAAA,OAAO,MAAA,CAAO,qBAAA,CAAsB,GAAG,CAAA,CAAE,QAAA,CAAS,GAAG,CAAA;AAAA,EACvD;AACA,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,GAAA,EAAK,GAAG,CAAA;AAC/B;AAEA,IAAM,WAAA,kBAAa,IAAI,GAAA,CAAI;AAAA,EACzB,GAAG,MAAA,CAAO,mBAAA,CAAoB,MAAA,CAAO,SAAS,CAAA;AAAA,EAC9C,GAAG,MAAA,CAAO,qBAAA,CAAsB,MAAA,CAAO,SAAS,CAAA;AAAA,EAChD,GAAG,MAAA,CAAO,mBAAA,CAAoB,QAAA,CAAS,SAAS,CAAA;AAAA,EAChD,GAAG,MAAA,CAAO,qBAAA,CAAsB,QAAA,CAAS,SAAS,CAAA;AAAA,EAClD,GAAG,MAAA,CAAO,mBAAA,CAAoB,KAAA,CAAM,SAAS,CAAA;AAAA,EAC7C,GAAG,MAAA,CAAO,qBAAA,CAAsB,KAAA,CAAM,SAAS;AACjD,CAAC,CAAA;AAED,SAAS,qBAAA,CACP,eAAA,EACA,SAAA,EACA;AACA,EAAA,MAAM,QAAA,EAAU,CAAC,GAAG,MAAA,CAAO,mBAAA,CAAoB,eAAe,CAAA,EAAG,GAAG,MAAA,CAAO,qBAAA,CAAsB,eAAe,CAAC,CAAA;AAEjH,EAAA,IAAA,CAAA,MAAW,IAAA,GAAO,OAAA,EAAS;AACzB,IAAA,GAAA,CAAI,MAAA,CAAO,SAAA,EAAW,GAAG,CAAA,EAAG,QAAA;AAE5B,IAAA,MAAM,WAAA,EAAa,MAAA,CAAO,wBAAA,CAAyB,eAAA,EAAiB,GAAG,CAAA;AAEvE,IAAA,GAAA,CAAI,OAAO,UAAA,CAAW,MAAA,IAAU,UAAA,EAAY;AAC1C,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,4BAAA,EAA+B,MAAA,CAAO,GAAG,CAAC,CAAA,sDAAA,CAAwD,CAAA;AAC/G,MAAA,QAAA;AAAA,IACF;AAEA,IAAA,GAAA,CAAI,UAAA,CAAW,IAAA,GAAO,UAAA,CAAW,GAAA,EAAK;AACpC,MAAA,QAAA;AAAA,IACF;AAEA,IAAA,MAAA,CAAO,cAAA,CAAe,SAAA,EAAW,GAAA,EAAK;AAAA,MACpC,GAAA,CAAA,EAAM;AACJ,QAAA,OAAO,eAAA,CAAgB,GAAmC,CAAA;AAAA,MAC5D,CAAA;AAAA,MACA,GAAA,CAAI,CAAA,EAAG;AACL,QAAA,eAAA,CAAgB,GAAmC,EAAA,EAAI,CAAA;AAAA,MACzD,CAAA;AAAA,MACA,UAAA,EAAY,IAAA;AAAA,MACZ,YAAA,EAAc;AAAA,IAChB,CAAC,CAAA;AAAA,EACH;AACF;AAEA,SAAS,sBAAA,CACP,eAAA,EACA,SAAA,EACA;AACA,EAAA,IAAI,aAAA,EAAe,MAAA,CAAO,cAAA,CAAe,eAAe,CAAA;AAExD,EAAA,MAAA,CAAO,aAAA,GAAgB,aAAA,IAAiB,MAAA,CAAO,SAAA,EAAW;AACxD,IAAA,MAAM,UAAA,EAAY,CAAC,GAAG,MAAA,CAAO,mBAAA,CAAoB,YAAY,CAAA,EAAG,GAAG,MAAA,CAAO,qBAAA,CAAsB,YAAY,CAAC,CAAA;AAE7G,IAAA,IAAA,CAAA,MAAW,IAAA,GAAO,SAAA,EAAW;AAC3B,MAAA,GAAA,CAAI,MAAA,CAAO,SAAA,EAAW,GAAG,CAAA,EAAG,QAAA;AAE5B,MAAA,GAAA,CAAI,UAAA,CAAW,GAAA,CAAI,GAAG,CAAA,EAAG,QAAA;AAEzB,MAAA,MAAM,WAAA,EAAa,MAAA,CAAO,wBAAA,CAAyB,YAAA,EAAc,GAAG,CAAA;AAEpE,MAAA,GAAA,CAAI,UAAA,CAAW,IAAA,GAAO,UAAA,CAAW,GAAA,EAAK;AACpC,QAAA,MAAA,CAAO,cAAA,CAAe,SAAA,EAAW,GAAA,EAAK;AAAA,UACpC,GAAA,EAAK,UAAA,CAAW,IAAA,EAAM,CAAA,EAAA,GAAM,UAAA,CAAW,GAAA,CAAK,IAAA,CAAK,eAAe,EAAA,EAAI,KAAA,CAAA;AAAA,UACpE,GAAA,EAAK,UAAA,CAAW,IAAA,EAAM,CAAC,CAAA,EAAA,GAAW,UAAA,CAAW,GAAA,CAAK,IAAA,CAAK,eAAA,EAAiB,CAAC,EAAA,EAAI,KAAA,CAAA;AAAA,UAC7E,UAAA,EAAY,IAAA;AAAA,UACZ,YAAA,EAAc;AAAA,QAChB,CAAC,CAAA;AAAA,MACH,EAAA,KAAA,GAAA,CAAW,OAAO,UAAA,CAAW,MAAA,IAAU,UAAA,EAAY;AACjD,QAAA,SAAA,CAAU,GAAG,EAAA,EAAI,UAAA,CAAW,KAAA,CAAM,IAAA,CAAK,eAAe,CAAA;AAAA,MACxD;AAAA,IACF;AAEA,IAAA,aAAA,EAAe,MAAA,CAAO,cAAA,CAAe,YAAY,CAAA;AAAA,EACnD;AACF;AAWO,SAAS,eAAA,CAAkC,eAAA,EAAsD;AACtG,EAAA,MAAM,UAAA,EAAY,CAAC,CAAA;AAEnB,EAAA,qBAAA,CAAsB,eAAA,EAAiB,SAAS,CAAA;AAChD,EAAA,sBAAA,CAAuB,eAAA,EAAiB,SAAS,CAAA;AACjD,EAAA,OAAO,SAAA;AACT;AAEO,SAAS,oBAAA,CAAqB,MAAA,EAAqC;AACxE,EAAA,OAAO;AAAA,IACL,IAAI,IAAA,CAAA,EAAO;AACT,MAAA,OAAO,MAAA,CAAO,YAAA,CAAa,KAAA,CAAM,IAAA;AAAA,IACnC,CAAA;AAAA,IACA,IAAI,IAAA,CAAA,EAAO;AACT,MAAA,OAAO,MAAA,CAAO,YAAA,CAAa,KAAA,CAAM,IAAA;AAAA,IACnC,CAAA;AAAA,IACA,IAAI,MAAA,CAAA,EAAS;AACX,MAAA,OAAO,MAAA,CAAO,YAAA,CAAa,KAAA,CAAM,MAAA;AAAA,IACnC,CAAA;AAAA,IACA,IAAI,KAAA,CAAA,EAAQ;AACV,MAAA,OAAO,MAAA,CAAO,YAAA,CAAa,KAAA,CAAM,KAAA;AAAA,IACnC,CAAA;AAAA,IACA,IAAI,IAAA,CAAA,EAAO;AACT,MAAA,OAAO,MAAA,CAAO,YAAA,CAAa,KAAA,CAAM,IAAA;AAAA,IACnC,CAAA;AAAA,IACA,IAAI,QAAA,CAAA,EAAW;AACb,MAAA,OAAO,MAAA,CAAO,YAAA,CAAa,KAAA,CAAM,QAAA;AAAA,IACnC,CAAA;AAAA,IACA,IAAI,OAAA,CAAA,EAAU;AACZ,MAAA,OAAO,MAAA,CAAO,YAAA,CAAa,KAAA,CAAM,OAAA;AAAA,IACnC,CAAA;AAAA,IACA,IAAI,IAAA,CAAA,EAAO;AACT,MAAA,OAAO,MAAA,CAAO,YAAA,CAAa,KAAA,CAAM,IAAA;AAAA,IACnC,CAAA;AAAA,IACA,IAAA,EAAM,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,MAAM,CAAA;AAAA,IAC7B,OAAA,EAAS,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAA;AAAA,IACnC,EAAA,EAAI,MAAA,CAAO,EAAA,CAAG,IAAA,CAAK,MAAM,CAAA;AAAA,IACzB,IAAA,EAAM,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,MAAM,CAAA;AAAA,IAC7B,OAAA,EAAS,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAA;AAAA,IACnC,OAAA,EAAS,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAA;AAAA,IACnC,SAAA,EAAW,MAAA,CAAO,SAAA,CAAU,IAAA,CAAK,MAAM,CAAA;AAAA,IACvC,QAAA,EAAU,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,MAAM,CAAA;AAAA;AAAA,IAGrC,UAAA,EAAY,MAAA,CAAO,UAAA,CAAW,IAAA,CAAK,MAAM,CAAA;AAAA,IACzC,aAAA,EAAe,MAAA,CAAO,aAAA,CAAc,IAAA,CAAK,MAAM,CAAA;AAAA,IAC/C,SAAA,EAAW,MAAA,CAAO,SAAA,CAAU,IAAA,CAAK,MAAM,CAAA;AAAA,IACvC,OAAA,EAAS,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAA;AAAA;AAAA,IAGnC,QAAA,EAAU,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,MAAM,CAAA;AAAA,IACrC,WAAA,EAAa,MAAA,CAAO,WAAA,CAAY,IAAA,CAAK,MAAM,CAAA;AAAA,IAC3C,WAAA,EAAa,MAAA,CAAO,WAAA,CAAY,IAAA,CAAK,MAAM,CAAA;AAAA;AAAA,IAG3C,OAAA,EAAS,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAA;AAAA,IACnC,IAAI,YAAA,CAAA,EAAe;AACjB,MAAA,OAAO,MAAA,CAAO,YAAA;AAAA,IAChB;AAAA,EACF,CAAA;AACF;ADxBA;AACA;AElIA,0BAAoD;AFoIpD;AACA;AGrIA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGK,IAAM,iBAAA,kBAAmB,MAAA,CAAO,0BAA0B,CAAA;AAC1D,IAAM,aAAA,kBAAe,IAAI,GAAA,CAAoB,CAAA;AAEpD,IAAM,iBAAA,EAAmB;AAAA,EACvB,yBAAA;AAAA,EACA,yBAAA;AAAA,EACA,6BAAA;AAAA,EACA,iCAAA;AAAA,EACA,mCAAA;AAAA,EACA,qCAAA;AAAA,EACA,qCAAA;AAAA,EACA,qCAAA;AAAA,EACA,yCAAA;AAAA,EACA,6BAAA;AAAA,EACA,iCAAA;AAAA,EACA,uCAAA;AAAA,EACA;AACF,CAAA;AAEO,SAAS,kBAAA,CAAmB,QAAA,EAAe;AAChD,EAAA,IAAA,CAAA,MAAW,IAAA,GAAO,gBAAA,EAAkB;AAClC,IAAA,MAAM,SAAA,EAAW,GAAA;AACjB,IAAA,MAAM,QAAA,EAAU,gBAAA,CAAiB,QAAQ,CAAA;AAEzC,IAAA,MAAM,QAAA,EAAU,QAAA,CAAS,QAAQ,CAAA;AAEjC,IAAA,GAAA,CAAI,OAAO,QAAA,IAAY,UAAA,EAAY;AACjC,MAAA,OAAA,CAAQ,OAAA,CAAQ,IAAA,CAAK,QAAQ,CAAC,CAAA;AAAA,IAChC;AAAA,EACF;AACF;AHkIA;AACA;AIvKO,SAAS,kBAAA,CAAmB,MAAA,EAAqC;AACtE,EAAA,MAAM,KAAA,EAAO,OAAO,OAAA,IAAW,WAAA,EAAa,OAAA,EAAS,MAAA,CAAO,WAAA;AAE5D,EAAA,MAAM,KAAA,EAAQ,IAAA,CAAa,gBAAgB,CAAA;AAC3C,EAAA,GAAA,CAAI,iBAAC,IAAA,2BAAM,OAAA,EAAO;AAChB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,WAAA,kBAAc,IAAA,6BAAM,OAAA,GAAQ,SAAS,CAAA,kCAAA,CAAoC,CAAA;AAAA,EAC3F;AACA,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,UAAA,CAAW,YAAA,EAAkC;AAC3D,EAAA,MAAM,KAAA,EAAO,kBAAA,CAAmB,YAAY,CAAA;AAC5C,EAAA,OAAO,YAAA,CAAa,GAAA,CAAI,IAAA,CAAK,KAAK,CAAA;AACpC;AAEO,SAAS,QAAA,CAAS,gBAAA,EAA0B;AAAC;AJuKpD;AACA;AEnLO,SAAS,MAAA,CAAqC,YAAA,EAAiB;AACpE,EAAA,MAAM,YAAA,EAAc,kBAAA,CAAmB,YAAY,CAAA;AAEnD,EAAA,GAAA,CAAI,CAAC,YAAA,CAAa,GAAA,CAAI,WAAA,CAAY,KAAK,CAAA,EAAG;AACxC,IAAA,YAAA,CAAa,GAAA,CAAI,WAAA,CAAY,KAAA,EAAO,IAAI,YAAA,CAAa,CAAC,CAAA;AAAA,EACxD;AAEA,EAAA,MAAM,SAAA,EAAW,YAAA,CAAa,GAAA,CAAI,WAAA,CAAY,KAAK,CAAA;AACnD,EAAA,OAAO,eAAA,CAAgB,QAAQ,CAAA;AACjC;AAUO,SAAS,SAAA,CAAwC,YAAA,EAAiB;AACvE,EAAA,MAAM,YAAA,EAAc,kBAAA,CAAmB,YAAY,CAAA;AAEnD,EAAA,GAAA,CAAI,CAAC,YAAA,CAAa,GAAA,CAAI,WAAA,CAAY,KAAK,CAAA,EAAG;AACxC,IAAA,YAAA,CAAa,GAAA,CAAI,WAAA,CAAY,KAAA,EAAO,IAAI,YAAA,CAAa,CAAC,CAAA;AAAA,EACxD;AAEA,EAAA,OAAO,YAAA,CAAa,GAAA,CAAI,WAAA,CAAY,KAAK,CAAA;AAC3C;AAUO,SAAS,iBAAA,CAAgD,YAAA,EAAiB;AAC/E,EAAA,MAAM,kBAAA,EAAoB,qCAAA,CAAmB;AAC7C,EAAA,IAAI,SAAA,EAAW,IAAI,YAAA,CAAa,CAAA;AAChC,EAAA,GAAA,CAAI,iBAAA,EAAmB;AACrB,IAAA,kBAAA,CAAmB,QAAQ,CAAA;AAAA,EAC7B;AAEA,EAAA,OAAO,QAAA;AACT;AAUO,SAAS,cAAA,CAA6C,YAAA,EAAiB;AAC5E,EAAA,MAAM,kBAAA,EAAoB,qCAAA,CAAmB;AAC7C,EAAA,IAAI,SAAA,EAAW,IAAI,YAAA,CAAa,CAAA;AAEhC,EAAA,GAAA,CAAI,iBAAA,EAAmB;AACrB,IAAA,kBAAA,CAAmB,QAAQ,CAAA;AAAA,EAC7B;AAEA,EAAA,OAAO,eAAA,CAAgB,QAAQ,CAAA;AACjC;AASO,SAAS,eAAA,CAA8C,eAAA,EAAkC;AAC9F,EAAA,MAAM,YAAA,EAAc,kBAAA,CAAmB,eAAe,CAAA;AACtD,EAAA,0BAAA,WAAQ,CAAY,KAAA,EAAO,eAAe,CAAA;AAC5C;AAUO,SAAS,iBAAA,CAAgD,YAAA,EAAiB;AAC/E,EAAA,MAAM,YAAA,EAAc,kBAAA,CAAmB,YAAY,CAAA;AACnD,EAAA,OAAO,yBAAA,WAAwB,CAAY,KAAK,CAAA;AAClD;AFkIA;AACA;AK1OA;AAOO,IAAM,QAAA,EAAqD,CAAC,IAAA,EAAM,OAAA,EAAA,GAAqC;AAC5G,EAAA,GAAA,iBAAI,OAAA,6BAAS,QAAA,EAAQ;AACnB,IAAA,YAAA,CAAa,GAAA,CAAI,kBAAA,CAAmB,GAAG,CAAA,CAAE,KAAA,EAAO,oBAAA,CAAqB,OAAA,CAAQ,MAAM,CAAC,CAAA;AAAA,EACtF;AAGA,EAAA,GAAA,iBAAI,OAAA,6BAAS,WAAA,EAAW;AACtB,IAAA,OAAA,CAAQ,SAAA,CAAU,OAAA,CAAQ,CAAA,OAAA,EAAA,GAAW;AACnC,MAAA,MAAM,YAAA,EAAc,kBAAA,CAAmB,OAAO,CAAA;AAE9C,MAAA,GAAA,CAAI,CAAC,YAAA,CAAa,GAAA,CAAI,WAAA,CAAY,KAAK,CAAA,EAAG;AACxC,QAAA,YAAA,CAAa,GAAA,CAAI,WAAA,CAAY,KAAA,EAAO,IAAI,OAAA,CAAQ,CAAC,CAAA;AAAA,MACnD;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AACF,CAAA;ALmOA;AACA;AMjPO,SAAS,QAAA,CAAA,EAAW;AACzB,EAAA,OAAO,QAAA,CAAwC,WAAA,EAAgB;AAC7D,IAAA,GAAA,iBAAK,WAAA,qBAAoB,gBAAgB,CAAA,6BAAG,OAAA,EAAO;AACjD,MAAA,OAAO,WAAA;AAAA,IACT;AAGA,IAAC,WAAA,CAAoB,gBAAgB,EAAA,EAAI;AAAA,MACvC,KAAA,kBAAO,MAAA,CAAO,CAAA,qBAAA,EAAwB,WAAA,CAAY,KAAA,GAAQ,WAAW,CAAA,CAAA;AACvE,IAAA;AAEO,IAAA;AACT,EAAA;AACF;ANgP4F;AACA;AO3P3E;AAAC;AAAX;AADG,EAAA;AACG;APiQ+E;AACA;AQ9QtB;AACvD,EAAA;AACH,mBAAA;AAEG,IAAA;AAAC,IAAA;AAEwB,IAAA;AAAC,IAAA;AAEF,IAAA;AAAC,IAAA;AAEzB,IAAA;AAAC,IAAA;AAED,IAAA;AAAC,IAAA;AAEJ,IAAA;AAAC,IAAA;AAEK,IAAA;AAAC,IAAA;AAED,IAAA;AAAC,IAAA;AAEN,IAAA;AAAC,IAAA;AAEE,IAAA;AAAC,IAAA;AACf,EAAA;AACF;ARgR4F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"/home/runner/work/iocraft/iocraft/packages/iocraft/dist/chunk-FPSHR5LZ.cjs","sourcesContent":[null,"import type { Router } from 'vue-router';\nimport type { ServiceConstructor } from './types';\n\nfunction hasKey(obj: Record<PropertyKey, unknown>, key: PropertyKey): boolean {\n if (typeof key === 'symbol') {\n return Object.getOwnPropertySymbols(obj).includes(key);\n }\n return Object.hasOwn(obj, key);\n}\n\nconst NativeKeys = new Set([\n ...Object.getOwnPropertyNames(Object.prototype),\n ...Object.getOwnPropertySymbols(Object.prototype),\n ...Object.getOwnPropertyNames(Function.prototype),\n ...Object.getOwnPropertySymbols(Function.prototype),\n ...Object.getOwnPropertyNames(Array.prototype),\n ...Object.getOwnPropertySymbols(Array.prototype),\n]);\n\nfunction addInstanceProperties<T extends object>(\n serviceInstance: InstanceType<ServiceConstructor<T>>,\n targetObj: Record<PropertyKey, unknown>\n) {\n const ownKeys = [...Object.getOwnPropertyNames(serviceInstance), ...Object.getOwnPropertySymbols(serviceInstance)];\n\n for (const key of ownKeys) {\n if (hasKey(targetObj, key)) continue;\n\n const descriptor = Object.getOwnPropertyDescriptor(serviceInstance, key)!;\n\n if (typeof descriptor.value === 'function') {\n console.warn(`[IOCRAFT]: Instance method \"${String(key)}\" found as own property. Consider moving to prototype.`);\n continue;\n }\n\n if (descriptor.get || descriptor.set) {\n continue;\n }\n\n Object.defineProperty(targetObj, key, {\n get() {\n return serviceInstance[key as keyof typeof serviceInstance];\n },\n set(v) {\n serviceInstance[key as keyof typeof serviceInstance] = v;\n },\n enumerable: true,\n configurable: true,\n });\n }\n}\n\nfunction addPrototypeProperties<T extends object>(\n serviceInstance: InstanceType<ServiceConstructor<T>>,\n targetObj: Record<PropertyKey, unknown>\n) {\n let currentProto = Object.getPrototypeOf(serviceInstance);\n\n while (currentProto && currentProto !== Object.prototype) {\n const protoKeys = [...Object.getOwnPropertyNames(currentProto), ...Object.getOwnPropertySymbols(currentProto)];\n\n for (const key of protoKeys) {\n if (hasKey(targetObj, key)) continue;\n\n if (NativeKeys.has(key)) continue;\n\n const descriptor = Object.getOwnPropertyDescriptor(currentProto, key)!;\n\n if (descriptor.get || descriptor.set) {\n Object.defineProperty(targetObj, key, {\n get: descriptor.get ? () => descriptor.get!.call(serviceInstance) : undefined,\n set: descriptor.set ? (v: any) => descriptor.set!.call(serviceInstance, v) : undefined,\n enumerable: true,\n configurable: true,\n });\n } else if (typeof descriptor.value === 'function') {\n targetObj[key] = descriptor.value.bind(serviceInstance);\n }\n }\n\n currentProto = Object.getPrototypeOf(currentProto);\n }\n}\n\n/**\n * CREATES A FACADE OBJECT\n *\n * @export\n * @template {object} T\n * @param {ServiceConstructor<T>} serviceClass\n * @param {InstanceType<ServiceConstructor<T>>} serviceInstance\n * @returns {{}}\n */\nexport function createFacadeObj<T extends object>(serviceInstance: InstanceType<ServiceConstructor<T>>) {\n const targetObj = {};\n\n addInstanceProperties(serviceInstance, targetObj);\n addPrototypeProperties(serviceInstance, targetObj);\n return targetObj;\n}\n\nexport function generateRouterFacade(router: Router): Record<string, any> {\n return {\n get path() {\n return router.currentRoute.value.path;\n },\n get name() {\n return router.currentRoute.value.name;\n },\n get params() {\n return router.currentRoute.value.params;\n },\n get query() {\n return router.currentRoute.value.query;\n },\n get hash() {\n return router.currentRoute.value.hash;\n },\n get fullPath() {\n return router.currentRoute.value.fullPath;\n },\n get matched() {\n return router.currentRoute.value.matched;\n },\n get meta() {\n return router.currentRoute.value.meta;\n },\n push: router.push.bind(router),\n replace: router.replace.bind(router),\n go: router.go.bind(router),\n back: router.back.bind(router),\n forward: router.forward.bind(router),\n resolve: router.resolve.bind(router),\n getRoutes: router.getRoutes.bind(router),\n hasRoute: router.hasRoute.bind(router),\n\n // Router guards\n beforeEach: router.beforeEach.bind(router),\n beforeResolve: router.beforeResolve.bind(router),\n afterEach: router.afterEach.bind(router),\n onError: router.onError.bind(router),\n\n // Dynamic routing\n addRoute: router.addRoute.bind(router),\n removeRoute: router.removeRoute.bind(router),\n clearRoutes: router.clearRoutes.bind(router),\n\n // State\n isReady: router.isReady.bind(router),\n get currentRoute() {\n return router.currentRoute;\n },\n };\n}\n","import { getCurrentInstance, inject, provide } from 'vue';\nimport { createFacadeObj } from './facade';\nimport { bindLifecycleHooks, RootRegistry } from './internals';\nimport type { ServiceConstructor } from './types';\nimport { getServiceMetadata } from './utils';\n\n/**\n * obtain Facade of a global singleton service From Root Registry\n *\n * @export\n * @template {ServiceConstructor} T\n * @param {T} serviceClass\n * @returns {InstanceType<T>}\n */\nexport function obtain<T extends ServiceConstructor>(serviceClass: T) {\n const serviceMeta = getServiceMetadata(serviceClass);\n\n if (!RootRegistry.has(serviceMeta.token)) {\n RootRegistry.set(serviceMeta.token, new serviceClass());\n }\n\n const instance = RootRegistry.get(serviceMeta.token)!;\n return createFacadeObj(instance) as InstanceType<T>;\n}\n\n/**\n * obtain a global singleton service From Root Registry\n *\n * @export\n * @template {ServiceConstructor} T\n * @param {T} serviceClass\n * @returns {InstanceType<T>}\n */\nexport function obtainRaw<T extends ServiceConstructor>(serviceClass: T) {\n const serviceMeta = getServiceMetadata(serviceClass);\n\n if (!RootRegistry.has(serviceMeta.token)) {\n RootRegistry.set(serviceMeta.token, new serviceClass());\n }\n\n return RootRegistry.get(serviceMeta.token) as InstanceType<T>;\n}\n\n/**\n * obtain a new Service Instance\n *\n * @export\n * @template {ServiceConstructor} T\n * @param {T} serviceClass\n * @returns {InstanceType<T>}\n */\nexport function obtainRawInstance<T extends ServiceConstructor>(serviceClass: T) {\n const componentInstance = getCurrentInstance();\n let instance = new serviceClass();\n if (componentInstance) {\n bindLifecycleHooks(instance);\n }\n\n return instance as InstanceType<T>;\n}\n\n/**\n * obtain a facade of a new Service Instance\n *\n * @export\n * @template {ServiceConstructor} T\n * @param {T} serviceClass\n * @returns {InstanceType<T>}\n */\nexport function obtainInstance<T extends ServiceConstructor>(serviceClass: T) {\n const componentInstance = getCurrentInstance();\n let instance = new serviceClass();\n\n if (componentInstance) {\n bindLifecycleHooks(instance);\n }\n\n return createFacadeObj(instance) as InstanceType<T>;\n}\n\n/**\n * Expose a service to context\n *\n * @export\n * @template {ServiceConstructor} T\n * @param {InstanceType<T>} serviceInstance\n */\nexport function exposeToContext<T extends ServiceConstructor>(serviceInstance: InstanceType<T>) {\n const serviceMeta = getServiceMetadata(serviceInstance);\n provide(serviceMeta.token, serviceInstance);\n}\n\n/**\n * obtain A Service From Context\n *\n * @export\n * @template {ServiceConstructor} T\n * @param {T} serviceClass\n * @returns {*}\n */\nexport function obtainFromContext<T extends ServiceConstructor>(serviceClass: T) {\n const serviceMeta = getServiceMetadata(serviceClass);\n return inject<InstanceType<T>>(serviceMeta.token);\n}\n","import {\n onMounted,\n onUpdated,\n onUnmounted,\n onBeforeMount,\n onBeforeUpdate,\n onBeforeUnmount,\n onErrorCaptured,\n onRenderTracked,\n onRenderTriggered,\n onActivated,\n onDeactivated,\n onServerPrefetch,\n onScopeDispose,\n} from 'vue';\n\nexport const SERVICE_METADATA = Symbol('IOCRAFT_SERVICE_METADATA');\nexport const RootRegistry = new Map<symbol, object>();\n\nconst lifecycleHookMap = {\n onMounted,\n onUpdated,\n onUnmounted,\n onBeforeMount,\n onBeforeUpdate,\n onBeforeUnmount,\n onErrorCaptured,\n onRenderTracked,\n onRenderTriggered,\n onActivated,\n onDeactivated,\n onServerPrefetch,\n onScopeDispose,\n} as const;\n\nexport function bindLifecycleHooks(instance: any) {\n for (const key in lifecycleHookMap) {\n const hookName = key as keyof typeof lifecycleHookMap;\n const vueHook = lifecycleHookMap[hookName];\n\n const handler = instance[hookName];\n\n if (typeof handler === 'function') {\n vueHook(handler.bind(instance));\n }\n }\n}\n","import { RootRegistry, SERVICE_METADATA } from './internals';\nimport type { ServiceConstructor, ServiceMetadata } from './types';\n\n/**\n * get service metadata\n *\n * @export\n * @param {(ServiceConstructor | object)} target\n * @returns {ServiceMetadata}\n */\nexport function getServiceMetadata(target: ServiceConstructor | object) {\n const ctor = typeof target === 'function' ? target : target.constructor;\n\n const meta = (ctor as any)[SERVICE_METADATA] as ServiceMetadata;\n if (!meta?.token) {\n throw new Error(`[IOCRAFT]: ${ctor?.name || 'Unknown'} is not decorated with @Register()`);\n }\n return meta;\n}\n\nexport function HasService(serviceClass: ServiceConstructor) {\n const meta = getServiceMetadata(serviceClass);\n return RootRegistry.has(meta.token);\n}\n\nexport function IsFacade(_serviceInstance: object) {}\n\n","import { type FunctionPlugin } from 'vue';\nimport { Nav } from '../helpers';\nimport { generateRouterFacade } from './facade';\nimport { RootRegistry } from './internals';\nimport type { PluginOptions } from './types';\nimport { getServiceMetadata } from './utils';\n\nexport const iocraft: FunctionPlugin<[Partial<PluginOptions>?]> = (_app, options?: Partial<PluginOptions>) => {\n if (options?.router) {\n RootRegistry.set(getServiceMetadata(Nav).token, generateRouterFacade(options.router));\n }\n\n // Eagerly create Service instances\n if (options?.eagerLoad) {\n options.eagerLoad.forEach(service => {\n const serviceMeta = getServiceMetadata(service);\n\n if (!RootRegistry.has(serviceMeta.token)) {\n RootRegistry.set(serviceMeta.token, new service());\n }\n });\n }\n};\n","import { SERVICE_METADATA } from './internals';\nimport type { ServiceConstructor, ServiceMetadata } from './types';\n\n/**\n * Registers A Class as Service\n *\n * @export\n * @returns {<C extends ServiceConstructor>(constructor: C) => C}\n */\nexport function Register() {\n return function <C extends ServiceConstructor>(constructor: C) {\n if ((constructor as any)[SERVICE_METADATA]?.token) {\n return constructor;\n }\n\n // Add more metadata here if needed\n (constructor as any)[SERVICE_METADATA] = {\n token: Symbol(`[IOCRAFT]: Service - ${constructor.name || 'Anonymous'}`),\n } satisfies ServiceMetadata;\n\n return constructor;\n };\n}\n","import type { RouteLocationNormalizedGeneric, Router } from 'vue-router';\nimport { Register } from '../core';\n\nexport interface Nav\n extends\n Omit<Router, 'install' | 'options' | 'currentRoute'>,\n Pick<\n RouteLocationNormalizedGeneric,\n 'path' | 'name' | 'params' | 'query' | 'hash' | 'fullPath' | 'matched' | 'meta'\n > {}\n\n@Register()\nexport class Nav {}\n","export function Store<T extends Record<string, any>>(initialState: T) {\n return class {\n state = initialState;\n\n getState() {}\n\n setState(_partialState: Partial<T>) {}\n\n select<K extends keyof T>(_key: K) {}\n\n selectAll(){}\n\n computed() {}\n\n watch() {}\n\n watchEffect() {}\n\n reset(): void {}\n\n onInit() {}\n\n onDispose() {}\n };\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/core/facade.ts","../src/core/injectors.ts","../src/core/internals.ts","../src/core/utils.ts","../src/core/plugin.ts","../src/core/register.ts","../src/helpers/Nav.service.ts","../src/helpers/Store.service.ts"],"sourcesContent":["import type { Router } from 'vue-router';\nimport type { ServiceConstructor } from './types';\n\nfunction hasKey(obj: Record<PropertyKey, unknown>, key: PropertyKey): boolean {\n if (typeof key === 'symbol') {\n return Object.getOwnPropertySymbols(obj).includes(key);\n }\n return Object.hasOwn(obj, key);\n}\n\nconst NativeKeys = new Set([\n ...Object.getOwnPropertyNames(Object.prototype),\n ...Object.getOwnPropertySymbols(Object.prototype),\n ...Object.getOwnPropertyNames(Function.prototype),\n ...Object.getOwnPropertySymbols(Function.prototype),\n ...Object.getOwnPropertyNames(Array.prototype),\n ...Object.getOwnPropertySymbols(Array.prototype),\n]);\n\nfunction addInstanceProperties<T extends object>(\n serviceInstance: InstanceType<ServiceConstructor<T>>,\n targetObj: Record<PropertyKey, unknown>\n) {\n const ownKeys = [...Object.getOwnPropertyNames(serviceInstance), ...Object.getOwnPropertySymbols(serviceInstance)];\n\n for (const key of ownKeys) {\n if (hasKey(targetObj, key)) continue;\n\n const descriptor = Object.getOwnPropertyDescriptor(serviceInstance, key)!;\n\n if (typeof descriptor.value === 'function') {\n console.warn(`[IOCRAFT]: Instance method \"${String(key)}\" found as own property. Consider moving to prototype.`);\n continue;\n }\n\n if (descriptor.get || descriptor.set) {\n continue;\n }\n\n Object.defineProperty(targetObj, key, {\n get() {\n return serviceInstance[key as keyof typeof serviceInstance];\n },\n set(v) {\n serviceInstance[key as keyof typeof serviceInstance] = v;\n },\n enumerable: true,\n configurable: true,\n });\n }\n}\n\nfunction addPrototypeProperties<T extends object>(\n serviceInstance: InstanceType<ServiceConstructor<T>>,\n targetObj: Record<PropertyKey, unknown>\n) {\n let currentProto = Object.getPrototypeOf(serviceInstance);\n\n while (currentProto && currentProto !== Object.prototype) {\n const protoKeys = [...Object.getOwnPropertyNames(currentProto), ...Object.getOwnPropertySymbols(currentProto)];\n\n for (const key of protoKeys) {\n if (hasKey(targetObj, key)) continue;\n\n if (NativeKeys.has(key)) continue;\n\n const descriptor = Object.getOwnPropertyDescriptor(currentProto, key)!;\n\n if (descriptor.get || descriptor.set) {\n Object.defineProperty(targetObj, key, {\n get: descriptor.get ? () => descriptor.get!.call(serviceInstance) : undefined,\n set: descriptor.set ? (v: any) => descriptor.set!.call(serviceInstance, v) : undefined,\n enumerable: true,\n configurable: true,\n });\n } else if (typeof descriptor.value === 'function') {\n targetObj[key] = descriptor.value.bind(serviceInstance);\n }\n }\n\n currentProto = Object.getPrototypeOf(currentProto);\n }\n}\n\n/**\n * CREATES A FACADE OBJECT\n *\n * @export\n * @template {object} T\n * @param {ServiceConstructor<T>} serviceClass\n * @param {InstanceType<ServiceConstructor<T>>} serviceInstance\n * @returns {{}}\n */\nexport function createFacadeObj<T extends object>(serviceInstance: InstanceType<ServiceConstructor<T>>) {\n const targetObj = {};\n\n addInstanceProperties(serviceInstance, targetObj);\n addPrototypeProperties(serviceInstance, targetObj);\n return targetObj;\n}\n\nexport function generateRouterFacade(router: Router): Record<string, any> {\n return {\n get path() {\n return router.currentRoute.value.path;\n },\n get name() {\n return router.currentRoute.value.name;\n },\n get params() {\n return router.currentRoute.value.params;\n },\n get query() {\n return router.currentRoute.value.query;\n },\n get hash() {\n return router.currentRoute.value.hash;\n },\n get fullPath() {\n return router.currentRoute.value.fullPath;\n },\n get matched() {\n return router.currentRoute.value.matched;\n },\n get meta() {\n return router.currentRoute.value.meta;\n },\n push: router.push.bind(router),\n replace: router.replace.bind(router),\n go: router.go.bind(router),\n back: router.back.bind(router),\n forward: router.forward.bind(router),\n resolve: router.resolve.bind(router),\n getRoutes: router.getRoutes.bind(router),\n hasRoute: router.hasRoute.bind(router),\n\n // Router guards\n beforeEach: router.beforeEach.bind(router),\n beforeResolve: router.beforeResolve.bind(router),\n afterEach: router.afterEach.bind(router),\n onError: router.onError.bind(router),\n\n // Dynamic routing\n addRoute: router.addRoute.bind(router),\n removeRoute: router.removeRoute.bind(router),\n clearRoutes: router.clearRoutes.bind(router),\n\n // State\n isReady: router.isReady.bind(router),\n get currentRoute() {\n return router.currentRoute;\n },\n };\n}\n","import { getCurrentInstance, inject, provide } from 'vue';\nimport { createFacadeObj } from './facade';\nimport { bindLifecycleHooks, RootRegistry } from './internals';\nimport type { ServiceConstructor } from './types';\nimport { getServiceMetadata } from './utils';\n\n/**\n * obtain Facade of a global singleton service From Root Registry\n *\n * @export\n * @template {ServiceConstructor} T\n * @param {T} serviceClass\n * @returns {InstanceType<T>}\n */\nexport function obtain<T extends ServiceConstructor>(serviceClass: T) {\n const serviceMeta = getServiceMetadata(serviceClass);\n\n if (!RootRegistry.has(serviceMeta.token)) {\n RootRegistry.set(serviceMeta.token, new serviceClass());\n }\n\n const instance = RootRegistry.get(serviceMeta.token)!;\n return createFacadeObj(instance) as InstanceType<T>;\n}\n\n/**\n * obtain a global singleton service From Root Registry\n *\n * @export\n * @template {ServiceConstructor} T\n * @param {T} serviceClass\n * @returns {InstanceType<T>}\n */\nexport function obtainRaw<T extends ServiceConstructor>(serviceClass: T) {\n const serviceMeta = getServiceMetadata(serviceClass);\n\n if (!RootRegistry.has(serviceMeta.token)) {\n RootRegistry.set(serviceMeta.token, new serviceClass());\n }\n\n return RootRegistry.get(serviceMeta.token) as InstanceType<T>;\n}\n\n/**\n * obtain a new Service Instance\n *\n * @export\n * @template {ServiceConstructor} T\n * @param {T} serviceClass\n * @returns {InstanceType<T>}\n */\nexport function obtainRawInstance<T extends ServiceConstructor>(serviceClass: T) {\n const componentInstance = getCurrentInstance();\n let instance = new serviceClass();\n if (componentInstance) {\n bindLifecycleHooks(instance);\n }\n\n return instance as InstanceType<T>;\n}\n\n/**\n * obtain a facade of a new Service Instance\n *\n * @export\n * @template {ServiceConstructor} T\n * @param {T} serviceClass\n * @returns {InstanceType<T>}\n */\nexport function obtainInstance<T extends ServiceConstructor>(serviceClass: T) {\n const componentInstance = getCurrentInstance();\n let instance = new serviceClass();\n\n if (componentInstance) {\n bindLifecycleHooks(instance);\n }\n\n return createFacadeObj(instance) as InstanceType<T>;\n}\n\n/**\n * Expose a service to context\n *\n * @export\n * @template {ServiceConstructor} T\n * @param {InstanceType<T>} serviceInstance\n */\nexport function exposeToContext<T extends ServiceConstructor>(serviceInstance: InstanceType<T>) {\n const serviceMeta = getServiceMetadata(serviceInstance);\n provide(serviceMeta.token, serviceInstance);\n}\n\n/**\n * obtain A Service From Context\n *\n * @export\n * @template {ServiceConstructor} T\n * @param {T} serviceClass\n * @returns {*}\n */\nexport function obtainFromContext<T extends ServiceConstructor>(serviceClass: T) {\n const serviceMeta = getServiceMetadata(serviceClass);\n return inject<InstanceType<T>>(serviceMeta.token);\n}\n","import {\n onMounted,\n onUpdated,\n onUnmounted,\n onBeforeMount,\n onBeforeUpdate,\n onBeforeUnmount,\n onErrorCaptured,\n onRenderTracked,\n onRenderTriggered,\n onActivated,\n onDeactivated,\n onServerPrefetch,\n onScopeDispose,\n} from 'vue';\n\nexport const SERVICE_METADATA = Symbol('IOCRAFT_SERVICE_METADATA');\nexport const RootRegistry = new Map<symbol, object>();\n\nconst lifecycleHookMap = {\n onMounted,\n onUpdated,\n onUnmounted,\n onBeforeMount,\n onBeforeUpdate,\n onBeforeUnmount,\n onErrorCaptured,\n onRenderTracked,\n onRenderTriggered,\n onActivated,\n onDeactivated,\n onServerPrefetch,\n onScopeDispose,\n} as const;\n\nexport function bindLifecycleHooks(instance: any) {\n for (const key in lifecycleHookMap) {\n const hookName = key as keyof typeof lifecycleHookMap;\n const vueHook = lifecycleHookMap[hookName];\n\n const handler = instance[hookName];\n\n if (typeof handler === 'function') {\n vueHook(handler.bind(instance));\n }\n }\n}\n","import { RootRegistry, SERVICE_METADATA } from './internals';\nimport type { ServiceConstructor, ServiceMetadata } from './types';\n\n/**\n * get service metadata\n *\n * @export\n * @param {(ServiceConstructor | object)} target\n * @returns {ServiceMetadata}\n */\nexport function getServiceMetadata(target: ServiceConstructor | object) {\n const ctor = typeof target === 'function' ? target : target.constructor;\n\n const meta = (ctor as any)[SERVICE_METADATA] as ServiceMetadata;\n if (!meta?.token) {\n throw new Error(`[IOCRAFT]: ${ctor?.name || 'Unknown'} is not decorated with @Register()`);\n }\n return meta;\n}\n\nexport function HasService(serviceClass: ServiceConstructor) {\n const meta = getServiceMetadata(serviceClass);\n return RootRegistry.has(meta.token);\n}\n\nexport function IsFacade(_serviceInstance: object) {}\n\n","import { type FunctionPlugin } from 'vue';\nimport { Nav } from '../helpers';\nimport { generateRouterFacade } from './facade';\nimport { RootRegistry } from './internals';\nimport type { PluginOptions } from './types';\nimport { getServiceMetadata } from './utils';\n\nexport const iocraft: FunctionPlugin<[Partial<PluginOptions>?]> = (_app, options?: Partial<PluginOptions>) => {\n if (options?.router) {\n RootRegistry.set(getServiceMetadata(Nav).token, generateRouterFacade(options.router));\n }\n\n // Eagerly create Service instances\n if (options?.eagerLoad) {\n options.eagerLoad.forEach(service => {\n const serviceMeta = getServiceMetadata(service);\n\n if (!RootRegistry.has(serviceMeta.token)) {\n RootRegistry.set(serviceMeta.token, new service());\n }\n });\n }\n};\n","import { SERVICE_METADATA } from './internals';\nimport type { ServiceConstructor, ServiceMetadata } from './types';\n\n/**\n * Registers A Class as Service\n *\n * @export\n * @returns {<C extends ServiceConstructor>(constructor: C) => C}\n */\nexport function Register() {\n return function <C extends ServiceConstructor>(constructor: C) {\n if ((constructor as any)[SERVICE_METADATA]?.token) {\n return constructor;\n }\n\n // Add more metadata here if needed\n (constructor as any)[SERVICE_METADATA] = {\n token: Symbol(`[IOCRAFT]: Service - ${constructor.name || 'Anonymous'}`),\n } satisfies ServiceMetadata;\n\n return constructor;\n };\n}\n","import type { RouteLocationNormalizedGeneric, Router } from 'vue-router';\nimport { Register } from '../core';\n\nexport interface Nav\n extends\n Omit<Router, 'install' | 'options' | 'currentRoute'>,\n Pick<\n RouteLocationNormalizedGeneric,\n 'path' | 'name' | 'params' | 'query' | 'hash' | 'fullPath' | 'matched' | 'meta'\n > {}\n\n@Register()\nexport class Nav {}\n","export function Store<T extends Record<string, any>>(initialState: T) {\n return class {\n state = initialState;\n\n getState() {}\n\n setState(_partialState: Partial<T>) {}\n\n select<K extends keyof T>(_key: K) {}\n\n selectAll(){}\n\n computed() {}\n\n watch() {}\n\n watchEffect() {}\n\n reset(): void {}\n\n onInit() {}\n\n onDispose() {}\n };\n}\n"],"mappings":"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","names":[]}