iocraft 0.2.3 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1 @@
1
+ On Progress...
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _class;"use strict";
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _class;"use strict";
2
2
  var __defProp = Object.defineProperty;
3
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __decorateClass = (decorators, target, key, kind) => {
@@ -131,96 +131,131 @@ function generateRouterFacade(router) {
131
131
  // src/core/injectors.ts
132
132
  var _vue = require('vue');
133
133
 
134
- // src/utils/core.utils.ts
134
+ // src/core/internals.ts
135
+
136
+
137
+
138
+
139
+
140
+
141
+
142
+
143
+
144
+
145
+
146
+
147
+
148
+
149
+
135
150
  var SERVICE_METADATA = /* @__PURE__ */ Symbol("IOCRAFT_SERVICE_METADATA");
136
151
  var RootRegistry = /* @__PURE__ */ new Map();
137
- var TempRegistry = /* @__PURE__ */ new Map();
138
- function getServiceMeta(target) {
152
+ var lifecycleHookMap = {
153
+ onMounted: _vue.onMounted,
154
+ onUpdated: _vue.onUpdated,
155
+ onUnmounted: _vue.onUnmounted,
156
+ onBeforeMount: _vue.onBeforeMount,
157
+ onBeforeUpdate: _vue.onBeforeUpdate,
158
+ onBeforeUnmount: _vue.onBeforeUnmount,
159
+ onErrorCaptured: _vue.onErrorCaptured,
160
+ onRenderTracked: _vue.onRenderTracked,
161
+ onRenderTriggered: _vue.onRenderTriggered,
162
+ onActivated: _vue.onActivated,
163
+ onDeactivated: _vue.onDeactivated,
164
+ onServerPrefetch: _vue.onServerPrefetch,
165
+ onScopeDispose: _vue.onScopeDispose
166
+ };
167
+ function bindLifecycleHooks(instance) {
168
+ for (const key in lifecycleHookMap) {
169
+ const hookName = key;
170
+ const vueHook = lifecycleHookMap[hookName];
171
+ const handler = instance[hookName];
172
+ if (typeof handler === "function") {
173
+ vueHook(handler.bind(instance));
174
+ }
175
+ }
176
+ }
177
+
178
+ // src/core/utils.ts
179
+ function getServiceMetadata(target) {
139
180
  const ctor = typeof target === "function" ? target : target.constructor;
140
181
  const meta = ctor[SERVICE_METADATA];
141
182
  if (!_optionalChain([meta, 'optionalAccess', _ => _.token])) {
142
- throw new Error(`[IOCRAFT]: ${_optionalChain([ctor, 'optionalAccess', _2 => _2.name]) || "Unknown"} is not decorated with @Provide()`);
183
+ throw new Error(`[IOCRAFT]: ${_optionalChain([ctor, 'optionalAccess', _2 => _2.name]) || "Unknown"} is not decorated with @Register()`);
143
184
  }
144
185
  return meta;
145
186
  }
187
+ function HasService(serviceClass) {
188
+ const meta = getServiceMetadata(serviceClass);
189
+ return RootRegistry.has(meta.token);
190
+ }
191
+ function IsFacade(_serviceInstance) {
192
+ }
146
193
 
147
194
  // src/core/injectors.ts
148
- function Inject(serviceClass) {
149
- const serviceMeta = getServiceMeta(serviceClass);
195
+ function obtain(serviceClass) {
196
+ const serviceMeta = getServiceMetadata(serviceClass);
150
197
  if (!RootRegistry.has(serviceMeta.token)) {
151
198
  RootRegistry.set(serviceMeta.token, new serviceClass());
152
199
  }
153
- let instance = RootRegistry.get(serviceMeta.token);
154
- if (serviceMeta.facade) {
155
- if (!TempRegistry.has(serviceMeta.token)) {
156
- TempRegistry.set(serviceMeta.token, createFacadeObj(instance));
157
- }
158
- instance = TempRegistry.get(serviceMeta.token);
200
+ const instance = RootRegistry.get(serviceMeta.token);
201
+ return createFacadeObj(instance);
202
+ }
203
+ function obtainRaw(serviceClass) {
204
+ const serviceMeta = getServiceMetadata(serviceClass);
205
+ if (!RootRegistry.has(serviceMeta.token)) {
206
+ RootRegistry.set(serviceMeta.token, new serviceClass());
159
207
  }
160
- return instance;
208
+ return RootRegistry.get(serviceMeta.token);
161
209
  }
162
- function InjectInstance(serviceClass) {
163
- let instance = new serviceClass();
210
+ function obtainRawInstance(serviceClass) {
164
211
  const componentInstance = _vue.getCurrentInstance.call(void 0, );
212
+ let instance = new serviceClass();
165
213
  if (componentInstance) {
166
- _vue.onScopeDispose.call(void 0, () => {
167
- console.error("[IocRaft]: Scope Dispose Run");
168
- });
214
+ bindLifecycleHooks(instance);
169
215
  }
170
216
  return instance;
171
217
  }
172
- function InjectFromContext(serviceClass) {
173
- const serviceMeta = getServiceMeta(serviceClass);
174
- return _vue.inject.call(void 0, serviceMeta.token);
175
- }
176
- function ExposeToContext(_classOrInstance) {
177
- let ownsInstance = false;
178
- if (ownsInstance) {
179
- const componentInstance = _vue.getCurrentInstance.call(void 0, );
180
- if (componentInstance) {
181
- _vue.onScopeDispose.call(void 0, () => {
182
- });
183
- }
218
+ function obtainInstance(serviceClass) {
219
+ const componentInstance = _vue.getCurrentInstance.call(void 0, );
220
+ let instance = new serviceClass();
221
+ if (componentInstance) {
222
+ bindLifecycleHooks(instance);
184
223
  }
224
+ return createFacadeObj(instance);
185
225
  }
186
- function RemoveFromRegistry() {
187
- console.log("removing from registry");
226
+ function exposeToContext(serviceInstance) {
227
+ const serviceMeta = getServiceMetadata(serviceInstance);
228
+ _vue.provide.call(void 0, serviceMeta.token, serviceInstance);
188
229
  }
189
- function InstanceOf() {
190
- console.log("deciding instance");
230
+ function obtainFromContext(serviceClass) {
231
+ const serviceMeta = getServiceMetadata(serviceClass);
232
+ return _vue.inject.call(void 0, serviceMeta.token);
191
233
  }
192
234
 
193
235
  // src/core/plugin.ts
194
236
 
195
- var IocRaftPlugin = (_app, options) => {
237
+ var iocraft = (_app, options) => {
196
238
  if (_optionalChain([options, 'optionalAccess', _3 => _3.router])) {
197
- RootRegistry.set(getServiceMeta(Nav).token, generateRouterFacade(options.router));
239
+ RootRegistry.set(getServiceMetadata(Nav).token, generateRouterFacade(options.router));
198
240
  }
199
- if (_optionalChain([options, 'optionalAccess', _4 => _4.EagerLoad])) {
200
- options.EagerLoad.forEach((service) => {
201
- const serviceMeta = getServiceMeta(service);
241
+ if (_optionalChain([options, 'optionalAccess', _4 => _4.eagerLoad])) {
242
+ options.eagerLoad.forEach((service) => {
243
+ const serviceMeta = getServiceMetadata(service);
202
244
  if (!RootRegistry.has(serviceMeta.token)) {
203
245
  RootRegistry.set(serviceMeta.token, new service());
204
246
  }
205
- const instance = RootRegistry.get(serviceMeta.token);
206
- if (serviceMeta.facade) {
207
- if (!TempRegistry.has(serviceMeta.token)) {
208
- TempRegistry.set(serviceMeta.token, createFacadeObj(instance));
209
- }
210
- }
211
247
  });
212
248
  }
213
249
  };
214
250
 
215
- // src/core/providers.ts
216
- function Provide(options) {
251
+ // src/core/register.ts
252
+ function Register() {
217
253
  return function(constructor) {
218
254
  if (_optionalChain([constructor, 'access', _5 => _5[SERVICE_METADATA], 'optionalAccess', _6 => _6.token])) {
219
255
  return constructor;
220
256
  }
221
257
  constructor[SERVICE_METADATA] = {
222
- token: /* @__PURE__ */ Symbol(`[IOCRAFT]: Service - ${constructor.name || "Anonymous"}`),
223
- facade: _nullishCoalesce(_optionalChain([options, 'optionalAccess', _7 => _7.facade]), () => ( true))
258
+ token: /* @__PURE__ */ Symbol(`[IOCRAFT]: Service - ${constructor.name || "Anonymous"}`)
224
259
  };
225
260
  return constructor;
226
261
  };
@@ -230,9 +265,7 @@ function Provide(options) {
230
265
  var Nav = class {
231
266
  };
232
267
  Nav = exports.Nav = __decorateClass([
233
- Provide({
234
- facade: false
235
- })
268
+ Register()
236
269
  ], Nav);
237
270
 
238
271
  // src/helpers/Store.service.ts
@@ -275,5 +308,8 @@ function Store(initialState) {
275
308
 
276
309
 
277
310
 
278
- exports.createFacadeObj = createFacadeObj; exports.generateRouterFacade = generateRouterFacade; exports.Inject = Inject; exports.InjectInstance = InjectInstance; exports.InjectFromContext = InjectFromContext; exports.ExposeToContext = ExposeToContext; exports.RemoveFromRegistry = RemoveFromRegistry; exports.InstanceOf = InstanceOf; exports.Nav = Nav; exports.Store = Store; exports.IocRaftPlugin = IocRaftPlugin; exports.Provide = Provide;
279
- //# sourceMappingURL=chunk-MV4CFG6R.cjs.map
311
+
312
+
313
+
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
@@ -0,0 +1 @@
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":"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","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"]}
@@ -129,98 +129,133 @@ function generateRouterFacade(router) {
129
129
  }
130
130
 
131
131
  // src/core/injectors.ts
132
- import { getCurrentInstance, inject, onScopeDispose } from "vue";
132
+ import { getCurrentInstance, inject, provide } from "vue";
133
133
 
134
- // src/utils/core.utils.ts
134
+ // src/core/internals.ts
135
+ import {
136
+ onMounted,
137
+ onUpdated,
138
+ onUnmounted,
139
+ onBeforeMount,
140
+ onBeforeUpdate,
141
+ onBeforeUnmount,
142
+ onErrorCaptured,
143
+ onRenderTracked,
144
+ onRenderTriggered,
145
+ onActivated,
146
+ onDeactivated,
147
+ onServerPrefetch,
148
+ onScopeDispose
149
+ } from "vue";
135
150
  var SERVICE_METADATA = /* @__PURE__ */ Symbol("IOCRAFT_SERVICE_METADATA");
136
151
  var RootRegistry = /* @__PURE__ */ new Map();
137
- var TempRegistry = /* @__PURE__ */ new Map();
138
- function getServiceMeta(target) {
152
+ var lifecycleHookMap = {
153
+ onMounted,
154
+ onUpdated,
155
+ onUnmounted,
156
+ onBeforeMount,
157
+ onBeforeUpdate,
158
+ onBeforeUnmount,
159
+ onErrorCaptured,
160
+ onRenderTracked,
161
+ onRenderTriggered,
162
+ onActivated,
163
+ onDeactivated,
164
+ onServerPrefetch,
165
+ onScopeDispose
166
+ };
167
+ function bindLifecycleHooks(instance) {
168
+ for (const key in lifecycleHookMap) {
169
+ const hookName = key;
170
+ const vueHook = lifecycleHookMap[hookName];
171
+ const handler = instance[hookName];
172
+ if (typeof handler === "function") {
173
+ vueHook(handler.bind(instance));
174
+ }
175
+ }
176
+ }
177
+
178
+ // src/core/utils.ts
179
+ function getServiceMetadata(target) {
139
180
  const ctor = typeof target === "function" ? target : target.constructor;
140
181
  const meta = ctor[SERVICE_METADATA];
141
182
  if (!meta?.token) {
142
- throw new Error(`[IOCRAFT]: ${ctor?.name || "Unknown"} is not decorated with @Provide()`);
183
+ throw new Error(`[IOCRAFT]: ${ctor?.name || "Unknown"} is not decorated with @Register()`);
143
184
  }
144
185
  return meta;
145
186
  }
187
+ function HasService(serviceClass) {
188
+ const meta = getServiceMetadata(serviceClass);
189
+ return RootRegistry.has(meta.token);
190
+ }
191
+ function IsFacade(_serviceInstance) {
192
+ }
146
193
 
147
194
  // src/core/injectors.ts
148
- function Inject(serviceClass) {
149
- const serviceMeta = getServiceMeta(serviceClass);
195
+ function obtain(serviceClass) {
196
+ const serviceMeta = getServiceMetadata(serviceClass);
150
197
  if (!RootRegistry.has(serviceMeta.token)) {
151
198
  RootRegistry.set(serviceMeta.token, new serviceClass());
152
199
  }
153
- let instance = RootRegistry.get(serviceMeta.token);
154
- if (serviceMeta.facade) {
155
- if (!TempRegistry.has(serviceMeta.token)) {
156
- TempRegistry.set(serviceMeta.token, createFacadeObj(instance));
157
- }
158
- instance = TempRegistry.get(serviceMeta.token);
200
+ const instance = RootRegistry.get(serviceMeta.token);
201
+ return createFacadeObj(instance);
202
+ }
203
+ function obtainRaw(serviceClass) {
204
+ const serviceMeta = getServiceMetadata(serviceClass);
205
+ if (!RootRegistry.has(serviceMeta.token)) {
206
+ RootRegistry.set(serviceMeta.token, new serviceClass());
159
207
  }
160
- return instance;
208
+ return RootRegistry.get(serviceMeta.token);
161
209
  }
162
- function InjectInstance(serviceClass) {
163
- let instance = new serviceClass();
210
+ function obtainRawInstance(serviceClass) {
164
211
  const componentInstance = getCurrentInstance();
212
+ let instance = new serviceClass();
165
213
  if (componentInstance) {
166
- onScopeDispose(() => {
167
- console.error("[IocRaft]: Scope Dispose Run");
168
- });
214
+ bindLifecycleHooks(instance);
169
215
  }
170
216
  return instance;
171
217
  }
172
- function InjectFromContext(serviceClass) {
173
- const serviceMeta = getServiceMeta(serviceClass);
174
- return inject(serviceMeta.token);
175
- }
176
- function ExposeToContext(_classOrInstance) {
177
- let ownsInstance = false;
178
- if (ownsInstance) {
179
- const componentInstance = getCurrentInstance();
180
- if (componentInstance) {
181
- onScopeDispose(() => {
182
- });
183
- }
218
+ function obtainInstance(serviceClass) {
219
+ const componentInstance = getCurrentInstance();
220
+ let instance = new serviceClass();
221
+ if (componentInstance) {
222
+ bindLifecycleHooks(instance);
184
223
  }
224
+ return createFacadeObj(instance);
185
225
  }
186
- function RemoveFromRegistry() {
187
- console.log("removing from registry");
226
+ function exposeToContext(serviceInstance) {
227
+ const serviceMeta = getServiceMetadata(serviceInstance);
228
+ provide(serviceMeta.token, serviceInstance);
188
229
  }
189
- function InstanceOf() {
190
- console.log("deciding instance");
230
+ function obtainFromContext(serviceClass) {
231
+ const serviceMeta = getServiceMetadata(serviceClass);
232
+ return inject(serviceMeta.token);
191
233
  }
192
234
 
193
235
  // src/core/plugin.ts
194
236
  import "vue";
195
- var IocRaftPlugin = (_app, options) => {
237
+ var iocraft = (_app, options) => {
196
238
  if (options?.router) {
197
- RootRegistry.set(getServiceMeta(Nav).token, generateRouterFacade(options.router));
239
+ RootRegistry.set(getServiceMetadata(Nav).token, generateRouterFacade(options.router));
198
240
  }
199
- if (options?.EagerLoad) {
200
- options.EagerLoad.forEach((service) => {
201
- const serviceMeta = getServiceMeta(service);
241
+ if (options?.eagerLoad) {
242
+ options.eagerLoad.forEach((service) => {
243
+ const serviceMeta = getServiceMetadata(service);
202
244
  if (!RootRegistry.has(serviceMeta.token)) {
203
245
  RootRegistry.set(serviceMeta.token, new service());
204
246
  }
205
- const instance = RootRegistry.get(serviceMeta.token);
206
- if (serviceMeta.facade) {
207
- if (!TempRegistry.has(serviceMeta.token)) {
208
- TempRegistry.set(serviceMeta.token, createFacadeObj(instance));
209
- }
210
- }
211
247
  });
212
248
  }
213
249
  };
214
250
 
215
- // src/core/providers.ts
216
- function Provide(options) {
251
+ // src/core/register.ts
252
+ function Register() {
217
253
  return function(constructor) {
218
254
  if (constructor[SERVICE_METADATA]?.token) {
219
255
  return constructor;
220
256
  }
221
257
  constructor[SERVICE_METADATA] = {
222
- token: /* @__PURE__ */ Symbol(`[IOCRAFT]: Service - ${constructor.name || "Anonymous"}`),
223
- facade: options?.facade ?? true
258
+ token: /* @__PURE__ */ Symbol(`[IOCRAFT]: Service - ${constructor.name || "Anonymous"}`)
224
259
  };
225
260
  return constructor;
226
261
  };
@@ -230,9 +265,7 @@ function Provide(options) {
230
265
  var Nav = class {
231
266
  };
232
267
  Nav = __decorateClass([
233
- Provide({
234
- facade: false
235
- })
268
+ Register()
236
269
  ], Nav);
237
270
 
238
271
  // src/helpers/Store.service.ts
@@ -265,15 +298,18 @@ function Store(initialState) {
265
298
  export {
266
299
  createFacadeObj,
267
300
  generateRouterFacade,
268
- Inject,
269
- InjectInstance,
270
- InjectFromContext,
271
- ExposeToContext,
272
- RemoveFromRegistry,
273
- InstanceOf,
301
+ getServiceMetadata,
302
+ HasService,
303
+ IsFacade,
304
+ obtain,
305
+ obtainRaw,
306
+ obtainRawInstance,
307
+ obtainInstance,
308
+ exposeToContext,
309
+ obtainFromContext,
274
310
  Nav,
275
311
  Store,
276
- IocRaftPlugin,
277
- Provide
312
+ iocraft,
313
+ Register
278
314
  };
279
- //# sourceMappingURL=chunk-LNDE6TCH.js.map
315
+ //# sourceMappingURL=chunk-UO5JQJD3.js.map
@@ -0,0 +1 @@
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":[]}
package/dist/core.cjs CHANGED
@@ -10,10 +10,10 @@
10
10
 
11
11
 
12
12
 
13
- var _chunkMV4CFG6Rcjs = require('./chunk-MV4CFG6R.cjs');
14
13
 
15
14
 
16
15
 
16
+ var _chunkFPSHR5LZcjs = require('./chunk-FPSHR5LZ.cjs');
17
17
 
18
18
 
19
19
 
@@ -22,5 +22,11 @@ var _chunkMV4CFG6Rcjs = require('./chunk-MV4CFG6R.cjs');
22
22
 
23
23
 
24
24
 
25
- exports.ExposeToContext = _chunkMV4CFG6Rcjs.ExposeToContext; exports.Inject = _chunkMV4CFG6Rcjs.Inject; exports.InjectFromContext = _chunkMV4CFG6Rcjs.InjectFromContext; exports.InjectInstance = _chunkMV4CFG6Rcjs.InjectInstance; exports.InstanceOf = _chunkMV4CFG6Rcjs.InstanceOf; exports.IocRaftPlugin = _chunkMV4CFG6Rcjs.IocRaftPlugin; exports.Provide = _chunkMV4CFG6Rcjs.Provide; exports.RemoveFromRegistry = _chunkMV4CFG6Rcjs.RemoveFromRegistry; exports.createFacadeObj = _chunkMV4CFG6Rcjs.createFacadeObj; exports.generateRouterFacade = _chunkMV4CFG6Rcjs.generateRouterFacade;
25
+
26
+
27
+
28
+
29
+
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;
26
32
  //# 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;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,mkBAAC","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;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"}
package/dist/core.d.cts CHANGED
@@ -1,15 +1,68 @@
1
1
  import { Router } from 'vue-router';
2
2
  import { FunctionPlugin } from 'vue';
3
3
 
4
- type ServiceConstructor<T extends object = object> = new (...args: any[]) => T;
4
+ type ServiceConstructor<T extends object = object> = new () => T;
5
5
 
6
6
  type PluginOptions = {
7
- EagerLoad: ServiceConstructor[];
7
+ eagerLoad: ServiceConstructor[];
8
8
  router: Router;
9
9
  };
10
10
 
11
- interface ServiceOptions {
12
- facade?: boolean;
11
+ type ServiceMetadata = {
12
+ token: symbol;
13
+ };
14
+
15
+
16
+ interface OnMounted {
17
+ onMounted(): void;
18
+ }
19
+
20
+ interface OnUpdated {
21
+ onUpdated(): void;
22
+ }
23
+
24
+ interface OnUnmounted {
25
+ onUnmounted(): void;
26
+ }
27
+
28
+ interface OnBeforeMount {
29
+ onBeforeMount(): void;
30
+ }
31
+
32
+ interface OnBeforeUpdate {
33
+ onBeforeUpdate(): void;
34
+ }
35
+
36
+ interface OnBeforeUnmount {
37
+ onBeforeUnmount(): void;
38
+ }
39
+
40
+ interface OnErrorCaptured {
41
+ onErrorCaptured(): void;
42
+ }
43
+
44
+ interface OnRenderTracked {
45
+ onRenderTracked(): void;
46
+ }
47
+
48
+ interface OnRenderTriggered {
49
+ onRenderTriggered(): void;
50
+ }
51
+
52
+ interface OnActivated {
53
+ onActivated(): void;
54
+ }
55
+
56
+ interface OnDeactivated {
57
+ onDeactivated(): void;
58
+ }
59
+
60
+ interface OnServerPrefetch {
61
+ onServerPrefetch(): void;
62
+ }
63
+
64
+ interface OnScopeDispose {
65
+ onScopeDispose(): void;
13
66
  }
14
67
 
15
68
  /**
@@ -25,29 +78,78 @@ declare function createFacadeObj<T extends object>(serviceInstance: InstanceType
25
78
  declare function generateRouterFacade(router: Router): Record<string, any>;
26
79
 
27
80
  /**
28
- * Injects a global singleton service From Root Registry;
81
+ * obtain Facade of a global singleton service From Root Registry
82
+ *
83
+ * @export
84
+ * @template {ServiceConstructor} T
85
+ * @param {T} serviceClass
86
+ * @returns {InstanceType<T>}
87
+ */
88
+ declare function obtain<T extends ServiceConstructor>(serviceClass: T): InstanceType<T>;
89
+ /**
90
+ * obtain a global singleton service From Root Registry
91
+ *
92
+ * @export
93
+ * @template {ServiceConstructor} T
94
+ * @param {T} serviceClass
95
+ * @returns {InstanceType<T>}
96
+ */
97
+ declare function obtainRaw<T extends ServiceConstructor>(serviceClass: T): InstanceType<T>;
98
+ /**
99
+ * obtain a new Service Instance
100
+ *
101
+ * @export
102
+ * @template {ServiceConstructor} T
103
+ * @param {T} serviceClass
104
+ * @returns {InstanceType<T>}
105
+ */
106
+ declare function obtainRawInstance<T extends ServiceConstructor>(serviceClass: T): InstanceType<T>;
107
+ /**
108
+ * obtain a facade of a new Service Instance
29
109
  *
30
110
  * @export
31
111
  * @template {ServiceConstructor} T
32
112
  * @param {T} serviceClass
33
113
  * @returns {InstanceType<T>}
34
114
  */
35
- declare function Inject<T extends ServiceConstructor>(serviceClass: T): InstanceType<T>;
36
- declare function InjectInstance<T extends ServiceConstructor>(serviceClass: T): InstanceType<T>;
37
- declare function InjectFromContext<T extends ServiceConstructor>(serviceClass: T): InstanceType<T> | undefined;
38
- declare function ExposeToContext<T extends ServiceConstructor>(_classOrInstance: InstanceType<T>): void;
39
- declare function RemoveFromRegistry(): void;
40
- declare function InstanceOf(): void;
115
+ declare function obtainInstance<T extends ServiceConstructor>(serviceClass: T): InstanceType<T>;
116
+ /**
117
+ * Expose a service to context
118
+ *
119
+ * @export
120
+ * @template {ServiceConstructor} T
121
+ * @param {InstanceType<T>} serviceInstance
122
+ */
123
+ declare function exposeToContext<T extends ServiceConstructor>(serviceInstance: InstanceType<T>): void;
124
+ /**
125
+ * obtain A Service From Context
126
+ *
127
+ * @export
128
+ * @template {ServiceConstructor} T
129
+ * @param {T} serviceClass
130
+ * @returns {*}
131
+ */
132
+ declare function obtainFromContext<T extends ServiceConstructor>(serviceClass: T): InstanceType<T> | undefined;
41
133
 
42
- declare const IocRaftPlugin: FunctionPlugin<[Partial<PluginOptions>?]>;
134
+ declare const iocraft: FunctionPlugin<[Partial<PluginOptions>?]>;
43
135
 
44
136
  /**
45
137
  * Registers A Class as Service
46
138
  *
47
139
  * @export
48
- * @param {?ServiceOptions} [options]
49
140
  * @returns {<C extends ServiceConstructor>(constructor: C) => C}
50
141
  */
51
- declare function Provide(options?: ServiceOptions): <C extends ServiceConstructor>(constructor: C) => C;
142
+ declare function Register(): <C extends ServiceConstructor>(constructor: C) => C;
143
+
144
+ /**
145
+ * get service metadata
146
+ *
147
+ * @export
148
+ * @param {(ServiceConstructor | object)} target
149
+ * @returns {ServiceMetadata}
150
+ */
151
+ declare function getServiceMetadata(target: ServiceConstructor | object): ServiceMetadata;
152
+ declare function HasService(serviceClass: ServiceConstructor): boolean;
153
+ declare function IsFacade(_serviceInstance: object): void;
52
154
 
53
- export { ExposeToContext, Inject, InjectFromContext, InjectInstance, InstanceOf, IocRaftPlugin, Provide, RemoveFromRegistry, createFacadeObj, generateRouterFacade };
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 };
package/dist/core.d.ts CHANGED
@@ -1,15 +1,68 @@
1
1
  import { Router } from 'vue-router';
2
2
  import { FunctionPlugin } from 'vue';
3
3
 
4
- type ServiceConstructor<T extends object = object> = new (...args: any[]) => T;
4
+ type ServiceConstructor<T extends object = object> = new () => T;
5
5
 
6
6
  type PluginOptions = {
7
- EagerLoad: ServiceConstructor[];
7
+ eagerLoad: ServiceConstructor[];
8
8
  router: Router;
9
9
  };
10
10
 
11
- interface ServiceOptions {
12
- facade?: boolean;
11
+ type ServiceMetadata = {
12
+ token: symbol;
13
+ };
14
+
15
+
16
+ interface OnMounted {
17
+ onMounted(): void;
18
+ }
19
+
20
+ interface OnUpdated {
21
+ onUpdated(): void;
22
+ }
23
+
24
+ interface OnUnmounted {
25
+ onUnmounted(): void;
26
+ }
27
+
28
+ interface OnBeforeMount {
29
+ onBeforeMount(): void;
30
+ }
31
+
32
+ interface OnBeforeUpdate {
33
+ onBeforeUpdate(): void;
34
+ }
35
+
36
+ interface OnBeforeUnmount {
37
+ onBeforeUnmount(): void;
38
+ }
39
+
40
+ interface OnErrorCaptured {
41
+ onErrorCaptured(): void;
42
+ }
43
+
44
+ interface OnRenderTracked {
45
+ onRenderTracked(): void;
46
+ }
47
+
48
+ interface OnRenderTriggered {
49
+ onRenderTriggered(): void;
50
+ }
51
+
52
+ interface OnActivated {
53
+ onActivated(): void;
54
+ }
55
+
56
+ interface OnDeactivated {
57
+ onDeactivated(): void;
58
+ }
59
+
60
+ interface OnServerPrefetch {
61
+ onServerPrefetch(): void;
62
+ }
63
+
64
+ interface OnScopeDispose {
65
+ onScopeDispose(): void;
13
66
  }
14
67
 
15
68
  /**
@@ -25,29 +78,78 @@ declare function createFacadeObj<T extends object>(serviceInstance: InstanceType
25
78
  declare function generateRouterFacade(router: Router): Record<string, any>;
26
79
 
27
80
  /**
28
- * Injects a global singleton service From Root Registry;
81
+ * obtain Facade of a global singleton service From Root Registry
82
+ *
83
+ * @export
84
+ * @template {ServiceConstructor} T
85
+ * @param {T} serviceClass
86
+ * @returns {InstanceType<T>}
87
+ */
88
+ declare function obtain<T extends ServiceConstructor>(serviceClass: T): InstanceType<T>;
89
+ /**
90
+ * obtain a global singleton service From Root Registry
91
+ *
92
+ * @export
93
+ * @template {ServiceConstructor} T
94
+ * @param {T} serviceClass
95
+ * @returns {InstanceType<T>}
96
+ */
97
+ declare function obtainRaw<T extends ServiceConstructor>(serviceClass: T): InstanceType<T>;
98
+ /**
99
+ * obtain a new Service Instance
100
+ *
101
+ * @export
102
+ * @template {ServiceConstructor} T
103
+ * @param {T} serviceClass
104
+ * @returns {InstanceType<T>}
105
+ */
106
+ declare function obtainRawInstance<T extends ServiceConstructor>(serviceClass: T): InstanceType<T>;
107
+ /**
108
+ * obtain a facade of a new Service Instance
29
109
  *
30
110
  * @export
31
111
  * @template {ServiceConstructor} T
32
112
  * @param {T} serviceClass
33
113
  * @returns {InstanceType<T>}
34
114
  */
35
- declare function Inject<T extends ServiceConstructor>(serviceClass: T): InstanceType<T>;
36
- declare function InjectInstance<T extends ServiceConstructor>(serviceClass: T): InstanceType<T>;
37
- declare function InjectFromContext<T extends ServiceConstructor>(serviceClass: T): InstanceType<T> | undefined;
38
- declare function ExposeToContext<T extends ServiceConstructor>(_classOrInstance: InstanceType<T>): void;
39
- declare function RemoveFromRegistry(): void;
40
- declare function InstanceOf(): void;
115
+ declare function obtainInstance<T extends ServiceConstructor>(serviceClass: T): InstanceType<T>;
116
+ /**
117
+ * Expose a service to context
118
+ *
119
+ * @export
120
+ * @template {ServiceConstructor} T
121
+ * @param {InstanceType<T>} serviceInstance
122
+ */
123
+ declare function exposeToContext<T extends ServiceConstructor>(serviceInstance: InstanceType<T>): void;
124
+ /**
125
+ * obtain A Service From Context
126
+ *
127
+ * @export
128
+ * @template {ServiceConstructor} T
129
+ * @param {T} serviceClass
130
+ * @returns {*}
131
+ */
132
+ declare function obtainFromContext<T extends ServiceConstructor>(serviceClass: T): InstanceType<T> | undefined;
41
133
 
42
- declare const IocRaftPlugin: FunctionPlugin<[Partial<PluginOptions>?]>;
134
+ declare const iocraft: FunctionPlugin<[Partial<PluginOptions>?]>;
43
135
 
44
136
  /**
45
137
  * Registers A Class as Service
46
138
  *
47
139
  * @export
48
- * @param {?ServiceOptions} [options]
49
140
  * @returns {<C extends ServiceConstructor>(constructor: C) => C}
50
141
  */
51
- declare function Provide(options?: ServiceOptions): <C extends ServiceConstructor>(constructor: C) => C;
142
+ declare function Register(): <C extends ServiceConstructor>(constructor: C) => C;
143
+
144
+ /**
145
+ * get service metadata
146
+ *
147
+ * @export
148
+ * @param {(ServiceConstructor | object)} target
149
+ * @returns {ServiceMetadata}
150
+ */
151
+ declare function getServiceMetadata(target: ServiceConstructor | object): ServiceMetadata;
152
+ declare function HasService(serviceClass: ServiceConstructor): boolean;
153
+ declare function IsFacade(_serviceInstance: object): void;
52
154
 
53
- export { ExposeToContext, Inject, InjectFromContext, InjectInstance, InstanceOf, IocRaftPlugin, Provide, RemoveFromRegistry, createFacadeObj, generateRouterFacade };
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 };
package/dist/core.js CHANGED
@@ -1,26 +1,32 @@
1
1
  "use strict";
2
2
  import {
3
- ExposeToContext,
4
- Inject,
5
- InjectFromContext,
6
- InjectInstance,
7
- InstanceOf,
8
- IocRaftPlugin,
9
- Provide,
10
- RemoveFromRegistry,
3
+ HasService,
4
+ IsFacade,
5
+ Register,
11
6
  createFacadeObj,
12
- generateRouterFacade
13
- } from "./chunk-LNDE6TCH.js";
7
+ exposeToContext,
8
+ generateRouterFacade,
9
+ getServiceMetadata,
10
+ iocraft,
11
+ obtain,
12
+ obtainFromContext,
13
+ obtainInstance,
14
+ obtainRaw,
15
+ obtainRawInstance
16
+ } from "./chunk-UO5JQJD3.js";
14
17
  export {
15
- ExposeToContext,
16
- Inject,
17
- InjectFromContext,
18
- InjectInstance,
19
- InstanceOf,
20
- IocRaftPlugin,
21
- Provide,
22
- RemoveFromRegistry,
18
+ HasService,
19
+ IsFacade,
20
+ Register,
23
21
  createFacadeObj,
24
- generateRouterFacade
22
+ exposeToContext,
23
+ generateRouterFacade,
24
+ getServiceMetadata,
25
+ iocraft,
26
+ obtain,
27
+ obtainFromContext,
28
+ obtainInstance,
29
+ obtainRaw,
30
+ obtainRawInstance
25
31
  };
26
32
  //# sourceMappingURL=core.js.map
package/dist/helpers.cjs CHANGED
@@ -2,9 +2,9 @@
2
2
 
3
3
 
4
4
 
5
- var _chunkMV4CFG6Rcjs = require('./chunk-MV4CFG6R.cjs');
5
+ var _chunkFPSHR5LZcjs = require('./chunk-FPSHR5LZ.cjs');
6
6
 
7
7
 
8
8
 
9
- exports.Nav = _chunkMV4CFG6Rcjs.Nav; exports.Store = _chunkMV4CFG6Rcjs.Store;
9
+ exports.Nav = _chunkFPSHR5LZcjs.Nav; exports.Store = _chunkFPSHR5LZcjs.Store;
10
10
  //# sourceMappingURL=helpers.cjs.map
package/dist/helpers.js CHANGED
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  Nav,
4
4
  Store
5
- } from "./chunk-LNDE6TCH.js";
5
+ } from "./chunk-UO5JQJD3.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.3",
3
+ "version": "0.2.4",
4
4
  "description": "A lightweight IOC container for Vue 3 using the Composition API.",
5
5
  "keywords": [
6
6
  "vue",
@@ -48,6 +48,7 @@
48
48
  "vue-router": "^4.0.0"
49
49
  },
50
50
  "devDependencies": {
51
+ "tinybench": "^6.0.0",
51
52
  "tsup": "^8.5.1",
52
53
  "typescript": "~5.9.3",
53
54
  "vitest": "^4.0.16",
@@ -65,6 +66,6 @@
65
66
  "build": "tsup",
66
67
  "dev": "tsup --watch",
67
68
  "typecheck": "tsc --noEmit",
68
- "test": "vitest"
69
+ "test": "vitest bench"
69
70
  }
70
71
  }
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/core/facade.ts","../src/core/injectors.ts","../src/utils/core.utils.ts","../src/core/plugin.ts","../src/core/providers.ts","../src/helpers/Nav.service.ts","../src/helpers/Store.service.ts"],"sourcesContent":["import type { Router } from 'vue-router';\nimport type { ServiceConstructor } from '../utils/core.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\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>(\n serviceInstance: InstanceType<ServiceConstructor<T>>\n) {\n const targetObj = {};\n\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, onScopeDispose } from 'vue';\nimport type { ServiceConstructor } from '../utils/core.types';\nimport { getServiceMeta, RootRegistry, TempRegistry } from '../utils/core.utils';\nimport { createFacadeObj } from './facade';\n\n/**\n * Injects 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 Inject<T extends ServiceConstructor>(serviceClass: T): InstanceType<T> {\n const serviceMeta = getServiceMeta(serviceClass);\n\n // Ensure singleton\n if (!RootRegistry.has(serviceMeta.token)) {\n RootRegistry.set(serviceMeta.token, new serviceClass());\n }\n\n let instance = RootRegistry.get(serviceMeta.token)!;\n\n if (serviceMeta.facade) {\n if (!TempRegistry.has(serviceMeta.token)) {\n TempRegistry.set(serviceMeta.token, createFacadeObj(instance));\n }\n\n instance = TempRegistry.get(serviceMeta.token)!;\n }\n\n return instance as InstanceType<T>;\n}\n\nexport function InjectInstance<T extends ServiceConstructor>(serviceClass: T) {\n let instance = new serviceClass();\n const componentInstance = getCurrentInstance();\n\n if (componentInstance) {\n onScopeDispose(() => {\n console.error('[IocRaft]: Scope Dispose Run');\n });\n }\n return instance as InstanceType<T>;\n}\n\nexport function InjectFromContext<T extends ServiceConstructor>(serviceClass: T) {\n const serviceMeta = getServiceMeta(serviceClass);\n return inject<InstanceType<T>>(serviceMeta.token);\n}\n\nexport function ExposeToContext<T extends ServiceConstructor>(_classOrInstance: InstanceType<T>) {\n let ownsInstance = false;\n\n if (ownsInstance) {\n const componentInstance = getCurrentInstance();\n if (componentInstance) {\n onScopeDispose(() => {});\n }\n }\n}\n\nexport function RemoveFromRegistry() {\n console.log('removing from registry');\n}\n\nexport function InstanceOf() {\n console.log('deciding instance');\n}\n","import type { ServiceConstructor, ServiceMetadata } from './core.types';\n\nexport const SERVICE_METADATA = Symbol('IOCRAFT_SERVICE_METADATA');\nexport const RootRegistry = new Map<symbol, object>();\nexport const TempRegistry = new Map<symbol, object>();\n\nexport function getServiceMeta(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 @Provide()`);\n }\n return meta;\n}\n","import { type FunctionPlugin } from 'vue';\nimport type { PluginOptions } from '../utils/core.types';\nimport { getServiceMeta, RootRegistry, TempRegistry } from '../utils/core.utils';\nimport { createFacadeObj, generateRouterFacade } from './facade';\nimport { Nav } from '../helpers';\n\nexport const IocRaftPlugin: FunctionPlugin<[Partial<PluginOptions>?]> = (_app, options?: Partial<PluginOptions>) => {\n if (options?.router) {\n RootRegistry.set(getServiceMeta(Nav).token, generateRouterFacade(options.router));\n }\n\n ///Eagerly create Service instances\n if (options?.EagerLoad) {\n options.EagerLoad.forEach(service => {\n const serviceMeta = getServiceMeta(service);\n\n if (!RootRegistry.has(serviceMeta.token)) {\n RootRegistry.set(serviceMeta.token, new service());\n }\n\n const instance = RootRegistry.get(serviceMeta.token)!;\n\n if (serviceMeta.facade) {\n if (!TempRegistry.has(serviceMeta.token)) {\n TempRegistry.set(serviceMeta.token, createFacadeObj(instance));\n }\n }\n });\n }\n};\n","import type { ServiceConstructor, ServiceMetadata, ServiceOptions } from '../utils/core.types';\nimport { SERVICE_METADATA } from '../utils/core.utils';\n\n/**\n * Registers A Class as Service\n *\n * @export\n * @param {?ServiceOptions} [options]\n * @returns {<C extends ServiceConstructor>(constructor: C) => C}\n */\nexport function Provide(options?: ServiceOptions): <C extends ServiceConstructor>(constructor: C) => C {\n return function <C extends ServiceConstructor>(constructor: C) {\n if ((constructor as any)[SERVICE_METADATA]?.token) {\n return constructor;\n }\n\n (constructor as any)[SERVICE_METADATA] = {\n token: Symbol(`[IOCRAFT]: Service - ${constructor.name || 'Anonymous'}`),\n facade: options?.facade ?? true,\n } satisfies ServiceMetadata;\n\n return constructor;\n };\n}\n","import type { RouteLocationNormalizedGeneric, Router } from 'vue-router';\nimport { Provide } 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@Provide({\n facade: false,\n})\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":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/home/runner/work/iocraft/iocraft/packages/iocraft/dist/chunk-MV4CFG6R.cjs","../src/core/facade.ts","../src/core/injectors.ts","../src/utils/core.utils.ts","../src/core/plugin.ts","../src/core/providers.ts","../src/helpers/Nav.service.ts","../src/helpers/Store.service.ts"],"names":[],"mappings":"AAAA,ysBAAY;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;AAGA,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,CACd,eAAA,EACA;AACA,EAAA,MAAM,UAAA,EAAY,CAAC,CAAA;AAGnB,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;AD5BA;AACA;AElIA,0BAA2D;AFoI3D;AACA;AGnIO,IAAM,iBAAA,kBAAmB,MAAA,CAAO,0BAA0B,CAAA;AAC1D,IAAM,aAAA,kBAAe,IAAI,GAAA,CAAoB,CAAA;AAC7C,IAAM,aAAA,kBAAe,IAAI,GAAA,CAAoB,CAAA;AAE7C,SAAS,cAAA,CAAe,MAAA,EAAqC;AAClE,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,iCAAA,CAAmC,CAAA;AAAA,EAC1F;AACA,EAAA,OAAO,IAAA;AACT;AHmIA;AACA;AErIO,SAAS,MAAA,CAAqC,YAAA,EAAkC;AACrF,EAAA,MAAM,YAAA,EAAc,cAAA,CAAe,YAAY,CAAA;AAG/C,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,IAAI,SAAA,EAAW,YAAA,CAAa,GAAA,CAAI,WAAA,CAAY,KAAK,CAAA;AAEjD,EAAA,GAAA,CAAI,WAAA,CAAY,MAAA,EAAQ;AACtB,IAAA,GAAA,CAAI,CAAC,YAAA,CAAa,GAAA,CAAI,WAAA,CAAY,KAAK,CAAA,EAAG;AACxC,MAAA,YAAA,CAAa,GAAA,CAAI,WAAA,CAAY,KAAA,EAAO,eAAA,CAAgB,QAAQ,CAAC,CAAA;AAAA,IAC/D;AAEA,IAAA,SAAA,EAAW,YAAA,CAAa,GAAA,CAAI,WAAA,CAAY,KAAK,CAAA;AAAA,EAC/C;AAEA,EAAA,OAAO,QAAA;AACT;AAEO,SAAS,cAAA,CAA6C,YAAA,EAAiB;AAC5E,EAAA,IAAI,SAAA,EAAW,IAAI,YAAA,CAAa,CAAA;AAChC,EAAA,MAAM,kBAAA,EAAoB,qCAAA,CAAmB;AAE7C,EAAA,GAAA,CAAI,iBAAA,EAAmB;AACrB,IAAA,iCAAA,CAAe,EAAA,GAAM;AACnB,MAAA,OAAA,CAAQ,KAAA,CAAM,8BAA8B,CAAA;AAAA,IAC9C,CAAC,CAAA;AAAA,EACH;AACA,EAAA,OAAO,QAAA;AACT;AAEO,SAAS,iBAAA,CAAgD,YAAA,EAAiB;AAC/E,EAAA,MAAM,YAAA,EAAc,cAAA,CAAe,YAAY,CAAA;AAC/C,EAAA,OAAO,yBAAA,WAAwB,CAAY,KAAK,CAAA;AAClD;AAEO,SAAS,eAAA,CAA8C,gBAAA,EAAmC;AAC/F,EAAA,IAAI,aAAA,EAAe,KAAA;AAEnB,EAAA,GAAA,CAAI,YAAA,EAAc;AAChB,IAAA,MAAM,kBAAA,EAAoB,qCAAA,CAAmB;AAC7C,IAAA,GAAA,CAAI,iBAAA,EAAmB;AACrB,MAAA,iCAAA,CAAe,EAAA,GAAM;AAAA,MAAC,CAAC,CAAA;AAAA,IACzB;AAAA,EACF;AACF;AAEO,SAAS,kBAAA,CAAA,EAAqB;AACnC,EAAA,OAAA,CAAQ,GAAA,CAAI,wBAAwB,CAAA;AACtC;AAEO,SAAS,UAAA,CAAA,EAAa;AAC3B,EAAA,OAAA,CAAQ,GAAA,CAAI,mBAAmB,CAAA;AACjC;AF2HA;AACA;AIhMA;AAMO,IAAM,cAAA,EAA2D,CAAC,IAAA,EAAM,OAAA,EAAA,GAAqC;AAClH,EAAA,GAAA,iBAAI,OAAA,6BAAS,QAAA,EAAQ;AACnB,IAAA,YAAA,CAAa,GAAA,CAAI,cAAA,CAAe,GAAG,CAAA,CAAE,KAAA,EAAO,oBAAA,CAAqB,OAAA,CAAQ,MAAM,CAAC,CAAA;AAAA,EAClF;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,cAAA,CAAe,OAAO,CAAA;AAE1C,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;AAEA,MAAA,MAAM,SAAA,EAAW,YAAA,CAAa,GAAA,CAAI,WAAA,CAAY,KAAK,CAAA;AAEnD,MAAA,GAAA,CAAI,WAAA,CAAY,MAAA,EAAQ;AACtB,QAAA,GAAA,CAAI,CAAC,YAAA,CAAa,GAAA,CAAI,WAAA,CAAY,KAAK,CAAA,EAAG;AACxC,UAAA,YAAA,CAAa,GAAA,CAAI,WAAA,CAAY,KAAA,EAAO,eAAA,CAAgB,QAAQ,CAAC,CAAA;AAAA,QAC/D;AAAA,MACF;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AACF,CAAA;AJwLA;AACA;AK5MO,SAAS,OAAA,CAAQ,OAAA,EAA+E;AACrG,EAAA,OAAO,QAAA,CAAwC,WAAA,EAAgB;AAC7D,IAAA,GAAA,iBAAK,WAAA,qBAAoB,gBAAgB,CAAA,6BAAG,OAAA,EAAO;AACjD,MAAA,OAAO,WAAA;AAAA,IACT;AAEA,IAAC,WAAA,CAAoB,gBAAgB,EAAA,EAAI;AAAA,MACvC,KAAA,kBAAO,MAAA,CAAO,CAAA,qBAAA,EAAwB,WAAA,CAAY,KAAA,GAAQ,WAAW,CAAA,CAAA;AAC1C,MAAA;AAC7B,IAAA;AAEO,IAAA;AACT,EAAA;AACF;AL4M4F;AACA;AMtN3E;AAAC;AAAX;AAHE,EAAA;AACC,IAAA;AACT,EAAA;AACY;AN8N+E;AACA;AO7OtB;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;AP+O4F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"/home/runner/work/iocraft/iocraft/packages/iocraft/dist/chunk-MV4CFG6R.cjs","sourcesContent":[null,"import type { Router } from 'vue-router';\nimport type { ServiceConstructor } from '../utils/core.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\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>(\n serviceInstance: InstanceType<ServiceConstructor<T>>\n) {\n const targetObj = {};\n\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, onScopeDispose } from 'vue';\nimport type { ServiceConstructor } from '../utils/core.types';\nimport { getServiceMeta, RootRegistry, TempRegistry } from '../utils/core.utils';\nimport { createFacadeObj } from './facade';\n\n/**\n * Injects 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 Inject<T extends ServiceConstructor>(serviceClass: T): InstanceType<T> {\n const serviceMeta = getServiceMeta(serviceClass);\n\n // Ensure singleton\n if (!RootRegistry.has(serviceMeta.token)) {\n RootRegistry.set(serviceMeta.token, new serviceClass());\n }\n\n let instance = RootRegistry.get(serviceMeta.token)!;\n\n if (serviceMeta.facade) {\n if (!TempRegistry.has(serviceMeta.token)) {\n TempRegistry.set(serviceMeta.token, createFacadeObj(instance));\n }\n\n instance = TempRegistry.get(serviceMeta.token)!;\n }\n\n return instance as InstanceType<T>;\n}\n\nexport function InjectInstance<T extends ServiceConstructor>(serviceClass: T) {\n let instance = new serviceClass();\n const componentInstance = getCurrentInstance();\n\n if (componentInstance) {\n onScopeDispose(() => {\n console.error('[IocRaft]: Scope Dispose Run');\n });\n }\n return instance as InstanceType<T>;\n}\n\nexport function InjectFromContext<T extends ServiceConstructor>(serviceClass: T) {\n const serviceMeta = getServiceMeta(serviceClass);\n return inject<InstanceType<T>>(serviceMeta.token);\n}\n\nexport function ExposeToContext<T extends ServiceConstructor>(_classOrInstance: InstanceType<T>) {\n let ownsInstance = false;\n\n if (ownsInstance) {\n const componentInstance = getCurrentInstance();\n if (componentInstance) {\n onScopeDispose(() => {});\n }\n }\n}\n\nexport function RemoveFromRegistry() {\n console.log('removing from registry');\n}\n\nexport function InstanceOf() {\n console.log('deciding instance');\n}\n","import type { ServiceConstructor, ServiceMetadata } from './core.types';\n\nexport const SERVICE_METADATA = Symbol('IOCRAFT_SERVICE_METADATA');\nexport const RootRegistry = new Map<symbol, object>();\nexport const TempRegistry = new Map<symbol, object>();\n\nexport function getServiceMeta(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 @Provide()`);\n }\n return meta;\n}\n","import { type FunctionPlugin } from 'vue';\nimport type { PluginOptions } from '../utils/core.types';\nimport { getServiceMeta, RootRegistry, TempRegistry } from '../utils/core.utils';\nimport { createFacadeObj, generateRouterFacade } from './facade';\nimport { Nav } from '../helpers';\n\nexport const IocRaftPlugin: FunctionPlugin<[Partial<PluginOptions>?]> = (_app, options?: Partial<PluginOptions>) => {\n if (options?.router) {\n RootRegistry.set(getServiceMeta(Nav).token, generateRouterFacade(options.router));\n }\n\n ///Eagerly create Service instances\n if (options?.EagerLoad) {\n options.EagerLoad.forEach(service => {\n const serviceMeta = getServiceMeta(service);\n\n if (!RootRegistry.has(serviceMeta.token)) {\n RootRegistry.set(serviceMeta.token, new service());\n }\n\n const instance = RootRegistry.get(serviceMeta.token)!;\n\n if (serviceMeta.facade) {\n if (!TempRegistry.has(serviceMeta.token)) {\n TempRegistry.set(serviceMeta.token, createFacadeObj(instance));\n }\n }\n });\n }\n};\n","import type { ServiceConstructor, ServiceMetadata, ServiceOptions } from '../utils/core.types';\nimport { SERVICE_METADATA } from '../utils/core.utils';\n\n/**\n * Registers A Class as Service\n *\n * @export\n * @param {?ServiceOptions} [options]\n * @returns {<C extends ServiceConstructor>(constructor: C) => C}\n */\nexport function Provide(options?: ServiceOptions): <C extends ServiceConstructor>(constructor: C) => C {\n return function <C extends ServiceConstructor>(constructor: C) {\n if ((constructor as any)[SERVICE_METADATA]?.token) {\n return constructor;\n }\n\n (constructor as any)[SERVICE_METADATA] = {\n token: Symbol(`[IOCRAFT]: Service - ${constructor.name || 'Anonymous'}`),\n facade: options?.facade ?? true,\n } satisfies ServiceMetadata;\n\n return constructor;\n };\n}\n","import type { RouteLocationNormalizedGeneric, Router } from 'vue-router';\nimport { Provide } 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@Provide({\n facade: false,\n})\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"]}