iocraft 0.2.5 → 0.2.7

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 CHANGED
@@ -1 +1,45 @@
1
- On Progress...
1
+ # iocraft
2
+
3
+ Dependency Injection for Vue 3.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install iocraft
9
+ ```
10
+
11
+ ## Quick Start
12
+
13
+ ### Create a Service
14
+
15
+ ```typescript
16
+ import { attach } from "iocraft";
17
+ import { ref } from "vue";
18
+
19
+ @attach()
20
+ export class CounterService {
21
+ count = ref(0);
22
+
23
+ increment() {
24
+ this.count.value++;
25
+ }
26
+ }
27
+ ```
28
+
29
+ ### Use in Components
30
+
31
+ ```vue
32
+ <script setup>
33
+ import { obtain } from "iocraft";
34
+
35
+ const { count, increment } = obtain(CounterService);
36
+ </script>
37
+
38
+ <template>
39
+ <button @click="increment">{{ count }}</button>
40
+ </template>
41
+ ```
42
+
43
+ ## License
44
+
45
+ MIT
@@ -1,4 +1,4 @@
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";
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; }"use strict";
2
2
  var __defProp = Object.defineProperty;
3
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __decorateClass = (decorators, target, key, kind) => {
@@ -10,6 +10,9 @@ var __decorateClass = (decorators, target, key, kind) => {
10
10
  return result;
11
11
  };
12
12
 
13
+ // src/core/obtainers.ts
14
+ var _vue = require('vue');
15
+
13
16
  // src/core/facade.ts
14
17
  function hasKey(obj, key) {
15
18
  if (typeof key === "symbol") {
@@ -77,59 +80,6 @@ function createFacadeObj(serviceInstance) {
77
80
  addPrototypeProperties(serviceInstance, targetObj);
78
81
  return targetObj;
79
82
  }
80
- function generateRouterFacade(router) {
81
- return {
82
- get path() {
83
- return router.currentRoute.value.path;
84
- },
85
- get name() {
86
- return router.currentRoute.value.name;
87
- },
88
- get params() {
89
- return router.currentRoute.value.params;
90
- },
91
- get query() {
92
- return router.currentRoute.value.query;
93
- },
94
- get hash() {
95
- return router.currentRoute.value.hash;
96
- },
97
- get fullPath() {
98
- return router.currentRoute.value.fullPath;
99
- },
100
- get matched() {
101
- return router.currentRoute.value.matched;
102
- },
103
- get meta() {
104
- return router.currentRoute.value.meta;
105
- },
106
- push: router.push.bind(router),
107
- replace: router.replace.bind(router),
108
- go: router.go.bind(router),
109
- back: router.back.bind(router),
110
- forward: router.forward.bind(router),
111
- resolve: router.resolve.bind(router),
112
- getRoutes: router.getRoutes.bind(router),
113
- hasRoute: router.hasRoute.bind(router),
114
- // Router guards
115
- beforeEach: router.beforeEach.bind(router),
116
- beforeResolve: router.beforeResolve.bind(router),
117
- afterEach: router.afterEach.bind(router),
118
- onError: router.onError.bind(router),
119
- // Dynamic routing
120
- addRoute: router.addRoute.bind(router),
121
- removeRoute: router.removeRoute.bind(router),
122
- clearRoutes: router.clearRoutes.bind(router),
123
- // State
124
- isReady: router.isReady.bind(router),
125
- get currentRoute() {
126
- return router.currentRoute;
127
- }
128
- };
129
- }
130
-
131
- // src/core/obtainers.ts
132
- var _vue = require('vue');
133
83
 
134
84
  // src/core/internals.ts
135
85
 
@@ -177,7 +127,7 @@ function bindLifecycleHooks(instance) {
177
127
  }
178
128
 
179
129
  // src/core/utils.ts
180
- function getServiceMetadata(target) {
130
+ function getServiceMeta(target) {
181
131
  const ctor = typeof target === "function" ? target : target.constructor;
182
132
  const meta = ctor[SERVICE_METADATA];
183
133
  if (!_optionalChain([meta, 'optionalAccess', _ => _.token])) {
@@ -185,26 +135,10 @@ function getServiceMetadata(target) {
185
135
  }
186
136
  return meta;
187
137
  }
188
- function hasService(serviceClass) {
189
- const meta = getServiceMetadata(serviceClass);
190
- return RootRegistry.has(meta.token);
191
- }
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();
203
- }
204
138
 
205
139
  // src/core/obtainers.ts
206
140
  function obtain(serviceClass) {
207
- const serviceMeta = getServiceMetadata(serviceClass);
141
+ const serviceMeta = getServiceMeta(serviceClass);
208
142
  if (RootRegistry.has(serviceMeta.token)) {
209
143
  const instance = RootRegistry.get(serviceMeta.token);
210
144
  return createFacadeObj(instance);
@@ -222,26 +156,8 @@ function obtain(serviceClass) {
222
156
  creationStack.delete(serviceMeta.token);
223
157
  }
224
158
  }
225
- function obtainRaw(serviceClass) {
226
- const serviceMeta = getServiceMetadata(serviceClass);
227
- if (RootRegistry.has(serviceMeta.token)) {
228
- return RootRegistry.get(serviceMeta.token);
229
- }
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);
241
- }
242
- }
243
- function obtainInstance(serviceClass) {
244
- const serviceMeta = getServiceMetadata(serviceClass);
159
+ function obtainNew(serviceClass) {
160
+ const serviceMeta = getServiceMeta(serviceClass);
245
161
  if (creationStack.has(serviceMeta.token)) {
246
162
  throw new Error(`[IocRaft] Circular dependency detected on: ${serviceClass.name}
247
163
  `);
@@ -258,42 +174,132 @@ function obtainInstance(serviceClass) {
258
174
  creationStack.delete(serviceMeta.token);
259
175
  }
260
176
  }
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);
277
- }
278
- }
279
- function exposeToContext(serviceInstance) {
280
- const serviceMeta = getServiceMetadata(serviceInstance);
177
+ function exposeCtx(serviceInstance) {
178
+ const serviceMeta = getServiceMeta(serviceInstance);
281
179
  _vue.provide.call(void 0, serviceMeta.token, serviceInstance);
282
180
  }
283
- function obtainFromContext(serviceClass) {
284
- const serviceMeta = getServiceMetadata(serviceClass);
181
+ function obtainCtx(serviceClass) {
182
+ const serviceMeta = getServiceMeta(serviceClass);
285
183
  return _vue.inject.call(void 0, serviceMeta.token);
286
184
  }
287
185
 
288
186
  // src/core/plugin.ts
289
187
 
188
+
189
+ // src/common/nav.ts
190
+ var Nav = class {
191
+ };
192
+ Nav = exports.Nav = __decorateClass([
193
+ attach()
194
+ ], Nav);
195
+ var RouterFacade = class {
196
+ constructor(router) {
197
+ this.router = router;
198
+ }
199
+ // ─── Flattened current route getters
200
+ get path() {
201
+ return this.router.currentRoute.value.path;
202
+ }
203
+ get name() {
204
+ return this.router.currentRoute.value.name;
205
+ }
206
+ get params() {
207
+ return this.router.currentRoute.value.params;
208
+ }
209
+ get query() {
210
+ return this.router.currentRoute.value.query;
211
+ }
212
+ get hash() {
213
+ return this.router.currentRoute.value.hash;
214
+ }
215
+ get fullPath() {
216
+ return this.router.currentRoute.value.fullPath;
217
+ }
218
+ get matched() {
219
+ return this.router.currentRoute.value.matched;
220
+ }
221
+ get meta() {
222
+ return this.router.currentRoute.value.meta;
223
+ }
224
+ get redirectedFrom() {
225
+ return this.router.currentRoute.value.redirectedFrom;
226
+ }
227
+ // ─── Router state
228
+ get currentRoute() {
229
+ return this.router.currentRoute;
230
+ }
231
+ get options() {
232
+ return this.router.options;
233
+ }
234
+ get listening() {
235
+ return this.router.listening;
236
+ }
237
+ set listening(value) {
238
+ this.router.listening = value;
239
+ }
240
+ // ─── Navigation
241
+ push(...args) {
242
+ return this.router.push(...args);
243
+ }
244
+ replace(...args) {
245
+ return this.router.replace(...args);
246
+ }
247
+ go(delta) {
248
+ return this.router.go(delta);
249
+ }
250
+ back() {
251
+ return this.router.back();
252
+ }
253
+ forward() {
254
+ return this.router.forward();
255
+ }
256
+ // ─── Route resolution
257
+ resolve(...args) {
258
+ return this.router.resolve(...args);
259
+ }
260
+ // ─── Route registry
261
+ getRoutes() {
262
+ return this.router.getRoutes();
263
+ }
264
+ hasRoute(...args) {
265
+ return this.router.hasRoute(...args);
266
+ }
267
+ addRoute(...args) {
268
+ return this.router.addRoute(...args);
269
+ }
270
+ removeRoute(...args) {
271
+ return this.router.removeRoute(...args);
272
+ }
273
+ clearRoutes() {
274
+ return this.router.clearRoutes();
275
+ }
276
+ // ─── Navigation guards
277
+ beforeEach(...args) {
278
+ return this.router.beforeEach(...args);
279
+ }
280
+ beforeResolve(...args) {
281
+ return this.router.beforeResolve(...args);
282
+ }
283
+ afterEach(...args) {
284
+ return this.router.afterEach(...args);
285
+ }
286
+ onError(...args) {
287
+ return this.router.onError(...args);
288
+ }
289
+ // ─── Lifecycle
290
+ isReady() {
291
+ return this.router.isReady();
292
+ }
293
+ };
294
+
295
+ // src/core/plugin.ts
290
296
  var iocraft = (_app, options) => {
291
297
  if (_optionalChain([options, 'optionalAccess', _3 => _3.router])) {
292
- RootRegistry.set(getServiceMetadata(Nav).token, generateRouterFacade(options.router));
298
+ RootRegistry.set(getServiceMeta(Nav).token, new RouterFacade(options.router));
293
299
  }
294
300
  if (_optionalChain([options, 'optionalAccess', _4 => _4.eagerLoad])) {
295
301
  options.eagerLoad.forEach((service) => {
296
- const serviceMeta = getServiceMetadata(service);
302
+ const serviceMeta = getServiceMeta(service);
297
303
  if (!RootRegistry.has(serviceMeta.token)) {
298
304
  RootRegistry.set(serviceMeta.token, new service());
299
305
  }
@@ -301,8 +307,8 @@ var iocraft = (_app, options) => {
301
307
  }
302
308
  };
303
309
 
304
- // src/core/register.ts
305
- function Register() {
310
+ // src/core/attach.ts
311
+ function attach() {
306
312
  return function(constructor) {
307
313
  if (_optionalChain([constructor, 'access', _5 => _5[SERVICE_METADATA], 'optionalAccess', _6 => _6.token])) {
308
314
  return constructor;
@@ -314,53 +320,6 @@ function Register() {
314
320
  };
315
321
  }
316
322
 
317
- // src/helpers/Nav.service.ts
318
- var Nav = class {
319
- };
320
- Nav = exports.Nav = __decorateClass([
321
- Register()
322
- ], Nav);
323
-
324
- // src/helpers/store.ts
325
-
326
- function Store(initialState) {
327
- const state = _vue.reactive.call(void 0, initialState);
328
- const initial = structuredClone(initialState);
329
- return (_class = class {constructor() { _class.prototype.__init.call(this); }
330
- __init() {this.state = state}
331
- get snapshot() {
332
- return structuredClone(_vue.toRaw.call(void 0, state));
333
- }
334
- update(changes) {
335
- Object.assign(state, changes);
336
- }
337
- pick(key) {
338
- return state[key];
339
- }
340
- compute(fn) {
341
- return _vue.computed.call(void 0, () => fn(state));
342
- }
343
- observe(source, callback) {
344
- const getter = typeof source === "function" ? () => source(state) : () => state[source];
345
- return _vue.watch.call(void 0, getter, callback);
346
- }
347
- effect(fn) {
348
- return _vue.watchEffect.call(void 0, () => fn(state));
349
- }
350
- reset() {
351
- Object.assign(state, structuredClone(initial));
352
- }
353
- }, _class);
354
- }
355
-
356
-
357
-
358
-
359
-
360
-
361
-
362
-
363
-
364
323
 
365
324
 
366
325
 
@@ -370,5 +329,5 @@ function Store(initialState) {
370
329
 
371
330
 
372
331
 
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
332
+ exports.getServiceMeta = getServiceMeta; exports.obtain = obtain; exports.obtainNew = obtainNew; exports.exposeCtx = exposeCtx; exports.obtainCtx = obtainCtx; exports.Nav = Nav; exports.iocraft = iocraft; exports.attach = attach;
333
+ //# sourceMappingURL=chunk-4PDVPTG3.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/iocraft/iocraft/packages/iocraft/dist/chunk-4PDVPTG3.cjs","../src/core/obtainers.ts","../src/core/facade.ts","../src/core/internals.ts","../src/core/utils.ts","../src/core/plugin.ts","../src/common/nav.ts","../src/core/attach.ts"],"names":[],"mappings":"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","file":"/home/runner/work/iocraft/iocraft/packages/iocraft/dist/chunk-4PDVPTG3.cjs","sourcesContent":[null,"import { getCurrentInstance, inject, provide } from \"vue\";\nimport { createFacadeObj } from \"./facade\";\nimport { bindLifecycleHooks, creationStack, RootRegistry } from \"./internals\";\nimport type { ServiceConstructor } from \"./types\";\nimport { getServiceMeta } 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 */\nexport function obtain<T extends ServiceConstructor>(serviceClass: T) {\n const serviceMeta = getServiceMeta(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 facade of a new Service Instance\n *\n * @export\n * @template {ServiceConstructor} T\n * @param {T} serviceClass\n */\nexport function obtainNew<T extends ServiceConstructor>(serviceClass: T) {\n const serviceMeta = getServiceMeta(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 * Expose a service to context\n *\n * @export\n * @template {ServiceConstructor} T\n * @param {InstanceType<T>} serviceInstance\n */\nexport function exposeCtx<T extends ServiceConstructor>(serviceInstance: InstanceType<T>) {\n const serviceMeta = getServiceMeta(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 */\nexport function obtainCtx<T extends ServiceConstructor>(serviceClass: T) {\n const serviceMeta = getServiceMeta(serviceClass);\n return inject<InstanceType<T>>(serviceMeta.token);\n}\n","import 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}","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 { SERVICE_METADATA } from \"./internals\";\nimport type { ServiceConstructor, ServiceMetadata } from \"./types\";\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 @Register()`);\n }\n return meta;\n}\n","import { type FunctionPlugin } from \"vue\";\nimport { Nav, RouterFacade } from \"../common/nav\";\nimport { RootRegistry } from \"./internals\";\nimport type { PluginOptions } from \"./types\";\nimport { getServiceMeta } from \"./utils\";\n\nexport const iocraft: FunctionPlugin<[Partial<PluginOptions>?]> = (_app, options?: Partial<PluginOptions>) => {\n if (options?.router) {\n RootRegistry.set(getServiceMeta(Nav).token, new RouterFacade(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 }\n};\n","import type { RouteLocationNormalizedGeneric, Router } from \"vue-router\";\nimport { attach } from \"../core\";\n\nexport interface Nav\n extends\n Omit<Router, \"install\" | \"options\" | \"currentRoute\">,\n Pick<RouteLocationNormalizedGeneric, \"path\" | \"name\" | \"params\" | \"query\" | \"hash\" | \"fullPath\" | \"matched\" | \"meta\"> {}\n\n@attach()\nexport class Nav {}\n\nexport class RouterFacade {\n constructor(private router: Router) {}\n\n // ─── Flattened current route getters\n get path() {\n return this.router.currentRoute.value.path;\n }\n get name() {\n return this.router.currentRoute.value.name;\n }\n get params() {\n return this.router.currentRoute.value.params;\n }\n get query() {\n return this.router.currentRoute.value.query;\n }\n get hash() {\n return this.router.currentRoute.value.hash;\n }\n get fullPath() {\n return this.router.currentRoute.value.fullPath;\n }\n get matched() {\n return this.router.currentRoute.value.matched;\n }\n get meta() {\n return this.router.currentRoute.value.meta;\n }\n get redirectedFrom() {\n return this.router.currentRoute.value.redirectedFrom;\n }\n\n // ─── Router state\n get currentRoute() {\n return this.router.currentRoute;\n }\n get options() {\n return this.router.options;\n }\n\n get listening() {\n return this.router.listening;\n }\n set listening(value: boolean) {\n this.router.listening = value;\n }\n\n // ─── Navigation\n push(...args: Parameters<Router[\"push\"]>) {\n return this.router.push(...args);\n }\n replace(...args: Parameters<Router[\"replace\"]>) {\n return this.router.replace(...args);\n }\n go(delta: number) {\n return this.router.go(delta);\n }\n back() {\n return this.router.back();\n }\n forward() {\n return this.router.forward();\n }\n\n // ─── Route resolution\n resolve(...args: Parameters<Router[\"resolve\"]>) {\n return this.router.resolve(...args);\n }\n\n // ─── Route registry\n getRoutes() {\n return this.router.getRoutes();\n }\n hasRoute(...args: Parameters<Router[\"hasRoute\"]>) {\n return this.router.hasRoute(...args);\n }\n addRoute(...args: Parameters<Router[\"addRoute\"]>) {\n return this.router.addRoute(...args);\n }\n removeRoute(...args: Parameters<Router[\"removeRoute\"]>) {\n return this.router.removeRoute(...args);\n }\n clearRoutes() {\n return this.router.clearRoutes();\n }\n\n // ─── Navigation guards\n beforeEach(...args: Parameters<Router[\"beforeEach\"]>) {\n return this.router.beforeEach(...args);\n }\n beforeResolve(...args: Parameters<Router[\"beforeResolve\"]>) {\n return this.router.beforeResolve(...args);\n }\n afterEach(...args: Parameters<Router[\"afterEach\"]>) {\n return this.router.afterEach(...args);\n }\n onError(...args: Parameters<Router[\"onError\"]>) {\n return this.router.onError(...args);\n }\n\n // ─── Lifecycle\n isReady() {\n return this.router.isReady();\n }\n}\n","import { SERVICE_METADATA } from \"./internals\";\nimport type { ServiceConstructor, ServiceMetadata } from \"./types\";\n\n/**\n * Attaches some internal meta data to a class that is needed for di system\n *\n */\nexport function attach(){\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"]}