iocraft 0.2.5 → 0.2.6
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 +45 -1
- package/dist/{chunk-OLY3RJCX.js → chunk-NNROA5P7.js} +34 -86
- package/dist/chunk-NNROA5P7.js.map +1 -0
- package/dist/{chunk-NJJ6QKII.cjs → chunk-QQPHKYMR.cjs} +30 -82
- package/dist/chunk-QQPHKYMR.cjs.map +1 -0
- package/dist/common.cjs +248 -0
- package/dist/common.cjs.map +1 -0
- package/dist/common.d.cts +86 -0
- package/dist/common.d.ts +86 -0
- package/dist/common.js +248 -0
- package/dist/common.js.map +1 -0
- package/dist/core.cjs +2 -12
- package/dist/core.cjs.map +1 -1
- package/dist/core.d.cts +12 -57
- package/dist/core.d.ts +12 -57
- package/dist/core.js +15 -25
- package/package.json +7 -5
- package/dist/chunk-NJJ6QKII.cjs.map +0 -1
- package/dist/chunk-OLY3RJCX.js.map +0 -1
- package/dist/helpers.cjs +0 -10
- package/dist/helpers.cjs.map +0 -1
- package/dist/helpers.d.cts +0 -23
- package/dist/helpers.d.ts +0 -23
- package/dist/helpers.js +0 -10
- package/dist/helpers.js.map +0 -1
package/README.md
CHANGED
|
@@ -1 +1,45 @@
|
|
|
1
|
-
|
|
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
|
|
@@ -10,6 +10,9 @@ var __decorateClass = (decorators, target, key, kind) => {
|
|
|
10
10
|
return result;
|
|
11
11
|
};
|
|
12
12
|
|
|
13
|
+
// src/core/obtainers.ts
|
|
14
|
+
import { getCurrentInstance, inject, provide } from "vue";
|
|
15
|
+
|
|
13
16
|
// src/core/facade.ts
|
|
14
17
|
function hasKey(obj, key) {
|
|
15
18
|
if (typeof key === "symbol") {
|
|
@@ -128,9 +131,6 @@ function generateRouterFacade(router) {
|
|
|
128
131
|
};
|
|
129
132
|
}
|
|
130
133
|
|
|
131
|
-
// src/core/obtainers.ts
|
|
132
|
-
import { getCurrentInstance, inject, provide } from "vue";
|
|
133
|
-
|
|
134
134
|
// src/core/internals.ts
|
|
135
135
|
import {
|
|
136
136
|
onMounted,
|
|
@@ -177,7 +177,7 @@ function bindLifecycleHooks(instance) {
|
|
|
177
177
|
}
|
|
178
178
|
|
|
179
179
|
// src/core/utils.ts
|
|
180
|
-
function
|
|
180
|
+
function getServiceMeta(target) {
|
|
181
181
|
const ctor = typeof target === "function" ? target : target.constructor;
|
|
182
182
|
const meta = ctor[SERVICE_METADATA];
|
|
183
183
|
if (!meta?.token) {
|
|
@@ -185,26 +185,10 @@ function getServiceMetadata(target) {
|
|
|
185
185
|
}
|
|
186
186
|
return meta;
|
|
187
187
|
}
|
|
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
188
|
|
|
205
189
|
// src/core/obtainers.ts
|
|
206
190
|
function obtain(serviceClass) {
|
|
207
|
-
const serviceMeta =
|
|
191
|
+
const serviceMeta = getServiceMeta(serviceClass);
|
|
208
192
|
if (RootRegistry.has(serviceMeta.token)) {
|
|
209
193
|
const instance = RootRegistry.get(serviceMeta.token);
|
|
210
194
|
return createFacadeObj(instance);
|
|
@@ -223,7 +207,7 @@ function obtain(serviceClass) {
|
|
|
223
207
|
}
|
|
224
208
|
}
|
|
225
209
|
function obtainRaw(serviceClass) {
|
|
226
|
-
const serviceMeta =
|
|
210
|
+
const serviceMeta = getServiceMeta(serviceClass);
|
|
227
211
|
if (RootRegistry.has(serviceMeta.token)) {
|
|
228
212
|
return RootRegistry.get(serviceMeta.token);
|
|
229
213
|
}
|
|
@@ -240,8 +224,8 @@ function obtainRaw(serviceClass) {
|
|
|
240
224
|
creationStack.delete(serviceMeta.token);
|
|
241
225
|
}
|
|
242
226
|
}
|
|
243
|
-
function
|
|
244
|
-
const serviceMeta =
|
|
227
|
+
function obtainNew(serviceClass) {
|
|
228
|
+
const serviceMeta = getServiceMeta(serviceClass);
|
|
245
229
|
if (creationStack.has(serviceMeta.token)) {
|
|
246
230
|
throw new Error(`[IocRaft] Circular dependency detected on: ${serviceClass.name}
|
|
247
231
|
`);
|
|
@@ -258,8 +242,8 @@ function obtainInstance(serviceClass) {
|
|
|
258
242
|
creationStack.delete(serviceMeta.token);
|
|
259
243
|
}
|
|
260
244
|
}
|
|
261
|
-
function
|
|
262
|
-
const serviceMeta =
|
|
245
|
+
function obtainNewRaw(serviceClass) {
|
|
246
|
+
const serviceMeta = getServiceMeta(serviceClass);
|
|
263
247
|
if (creationStack.has(serviceMeta.token)) {
|
|
264
248
|
throw new Error(`[IocRaft] Circular dependency detected on: ${serviceClass.name}
|
|
265
249
|
`);
|
|
@@ -276,24 +260,33 @@ function obtainRawInstance(serviceClass) {
|
|
|
276
260
|
creationStack.delete(serviceMeta.token);
|
|
277
261
|
}
|
|
278
262
|
}
|
|
279
|
-
function
|
|
280
|
-
const serviceMeta =
|
|
263
|
+
function exposeCtx(serviceInstance) {
|
|
264
|
+
const serviceMeta = getServiceMeta(serviceInstance);
|
|
281
265
|
provide(serviceMeta.token, serviceInstance);
|
|
282
266
|
}
|
|
283
|
-
function
|
|
284
|
-
const serviceMeta =
|
|
267
|
+
function obtainCtx(serviceClass) {
|
|
268
|
+
const serviceMeta = getServiceMeta(serviceClass);
|
|
285
269
|
return inject(serviceMeta.token);
|
|
286
270
|
}
|
|
287
271
|
|
|
288
272
|
// src/core/plugin.ts
|
|
289
273
|
import "vue";
|
|
274
|
+
|
|
275
|
+
// src/common/nav.ts
|
|
276
|
+
var Nav = class {
|
|
277
|
+
};
|
|
278
|
+
Nav = __decorateClass([
|
|
279
|
+
attach()
|
|
280
|
+
], Nav);
|
|
281
|
+
|
|
282
|
+
// src/core/plugin.ts
|
|
290
283
|
var iocraft = (_app, options) => {
|
|
291
284
|
if (options?.router) {
|
|
292
|
-
RootRegistry.set(
|
|
285
|
+
RootRegistry.set(getServiceMeta(Nav).token, generateRouterFacade(options.router));
|
|
293
286
|
}
|
|
294
287
|
if (options?.eagerLoad) {
|
|
295
288
|
options.eagerLoad.forEach((service) => {
|
|
296
|
-
const serviceMeta =
|
|
289
|
+
const serviceMeta = getServiceMeta(service);
|
|
297
290
|
if (!RootRegistry.has(serviceMeta.token)) {
|
|
298
291
|
RootRegistry.set(serviceMeta.token, new service());
|
|
299
292
|
}
|
|
@@ -301,8 +294,8 @@ var iocraft = (_app, options) => {
|
|
|
301
294
|
}
|
|
302
295
|
};
|
|
303
296
|
|
|
304
|
-
// src/core/
|
|
305
|
-
function
|
|
297
|
+
// src/core/attach.ts
|
|
298
|
+
function attach() {
|
|
306
299
|
return function(constructor) {
|
|
307
300
|
if (constructor[SERVICE_METADATA]?.token) {
|
|
308
301
|
return constructor;
|
|
@@ -314,61 +307,16 @@ function Register() {
|
|
|
314
307
|
};
|
|
315
308
|
}
|
|
316
309
|
|
|
317
|
-
// src/helpers/Nav.service.ts
|
|
318
|
-
var Nav = class {
|
|
319
|
-
};
|
|
320
|
-
Nav = __decorateClass([
|
|
321
|
-
Register()
|
|
322
|
-
], Nav);
|
|
323
|
-
|
|
324
|
-
// src/helpers/store.ts
|
|
325
|
-
import { reactive, computed, watch, watchEffect, toRaw } from "vue";
|
|
326
|
-
function Store(initialState) {
|
|
327
|
-
const state = reactive(initialState);
|
|
328
|
-
const initial = structuredClone(initialState);
|
|
329
|
-
return class {
|
|
330
|
-
state = state;
|
|
331
|
-
get snapshot() {
|
|
332
|
-
return structuredClone(toRaw(state));
|
|
333
|
-
}
|
|
334
|
-
update(changes) {
|
|
335
|
-
Object.assign(state, changes);
|
|
336
|
-
}
|
|
337
|
-
pick(key) {
|
|
338
|
-
return state[key];
|
|
339
|
-
}
|
|
340
|
-
compute(fn) {
|
|
341
|
-
return computed(() => fn(state));
|
|
342
|
-
}
|
|
343
|
-
observe(source, callback) {
|
|
344
|
-
const getter = typeof source === "function" ? () => source(state) : () => state[source];
|
|
345
|
-
return watch(getter, callback);
|
|
346
|
-
}
|
|
347
|
-
effect(fn) {
|
|
348
|
-
return watchEffect(() => fn(state));
|
|
349
|
-
}
|
|
350
|
-
reset() {
|
|
351
|
-
Object.assign(state, structuredClone(initial));
|
|
352
|
-
}
|
|
353
|
-
};
|
|
354
|
-
}
|
|
355
|
-
|
|
356
310
|
export {
|
|
357
|
-
|
|
358
|
-
generateRouterFacade,
|
|
359
|
-
getServiceMetadata,
|
|
360
|
-
hasService,
|
|
361
|
-
unRegister,
|
|
362
|
-
clearRegistry,
|
|
311
|
+
getServiceMeta,
|
|
363
312
|
obtain,
|
|
364
313
|
obtainRaw,
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
314
|
+
obtainNew,
|
|
315
|
+
obtainNewRaw,
|
|
316
|
+
exposeCtx,
|
|
317
|
+
obtainCtx,
|
|
369
318
|
Nav,
|
|
370
|
-
Store,
|
|
371
319
|
iocraft,
|
|
372
|
-
|
|
320
|
+
attach
|
|
373
321
|
};
|
|
374
|
-
//# sourceMappingURL=chunk-
|
|
322
|
+
//# sourceMappingURL=chunk-NNROA5P7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../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"],"sourcesContent":["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 * @returns {InstanceType<T>}\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 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 = getServiceMeta(serviceClass);\n\n if (RootRegistry.has(serviceMeta.token)) {\n return RootRegistry.get(serviceMeta.token) as InstanceType<T>;\n }\n\n if (creationStack.has(serviceMeta.token)) {\n throw new Error(`[IocRaft] Circular dependency detected on: ${serviceClass.name}\\n`);\n }\n\n creationStack.add(serviceMeta.token);\n\n try {\n const instance = new serviceClass();\n RootRegistry.set(serviceMeta.token, instance);\n return instance as InstanceType<T>;\n } finally {\n creationStack.delete(serviceMeta.token);\n }\n}\n\n/**\n * obtain a facade of a new Service Instance\n *\n * @export\n * @template {ServiceConstructor} T\n * @param {T} serviceClass\n * @returns {InstanceType<T>}\n */\nexport function 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 * obtain a new Service Instance\n *\n * @export\n * @template {ServiceConstructor} T\n * @param {T} serviceClass\n * @returns {InstanceType<T>}\n */\nexport function obtainNewRaw<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 return instance as InstanceType<T>;\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 { Router } from 'vue-router';\nimport type { ServiceConstructor } from './types';\n\nfunction hasKey(obj: Record<PropertyKey, unknown>, key: PropertyKey): boolean {\n if (typeof key === 'symbol') {\n return Object.getOwnPropertySymbols(obj).includes(key);\n }\n return Object.hasOwn(obj, key);\n}\n\nconst NativeKeys = new Set([\n ...Object.getOwnPropertyNames(Object.prototype),\n ...Object.getOwnPropertySymbols(Object.prototype),\n ...Object.getOwnPropertyNames(Function.prototype),\n ...Object.getOwnPropertySymbols(Function.prototype),\n ...Object.getOwnPropertyNames(Array.prototype),\n ...Object.getOwnPropertySymbols(Array.prototype),\n]);\n\nfunction addInstanceProperties<T extends object>(\n serviceInstance: InstanceType<ServiceConstructor<T>>,\n targetObj: Record<PropertyKey, unknown>\n) {\n const ownKeys = [...Object.getOwnPropertyNames(serviceInstance), ...Object.getOwnPropertySymbols(serviceInstance)];\n\n for (const key of ownKeys) {\n if (hasKey(targetObj, key)) continue;\n\n const descriptor = Object.getOwnPropertyDescriptor(serviceInstance, key)!;\n\n if (typeof descriptor.value === 'function') {\n console.warn(`[IOCRAFT]: Instance method \"${String(key)}\" found as own property. Consider moving to prototype.`);\n continue;\n }\n\n if (descriptor.get || descriptor.set) {\n continue;\n }\n\n Object.defineProperty(targetObj, key, {\n get() {\n return serviceInstance[key as keyof typeof serviceInstance];\n },\n set(v) {\n serviceInstance[key as keyof typeof serviceInstance] = v;\n },\n enumerable: true,\n configurable: true,\n });\n }\n}\n\nfunction addPrototypeProperties<T extends object>(\n serviceInstance: InstanceType<ServiceConstructor<T>>,\n targetObj: Record<PropertyKey, unknown>\n) {\n let currentProto = Object.getPrototypeOf(serviceInstance);\n\n while (currentProto && currentProto !== Object.prototype) {\n const protoKeys = [...Object.getOwnPropertyNames(currentProto), ...Object.getOwnPropertySymbols(currentProto)];\n\n for (const key of protoKeys) {\n if (hasKey(targetObj, key)) continue;\n\n if (NativeKeys.has(key)) continue;\n\n const descriptor = Object.getOwnPropertyDescriptor(currentProto, key)!;\n\n if (descriptor.get || descriptor.set) {\n Object.defineProperty(targetObj, key, {\n get: descriptor.get ? () => descriptor.get!.call(serviceInstance) : undefined,\n set: descriptor.set ? (v: any) => descriptor.set!.call(serviceInstance, v) : undefined,\n enumerable: true,\n configurable: true,\n });\n } else if (typeof descriptor.value === 'function') {\n targetObj[key] = descriptor.value.bind(serviceInstance);\n }\n }\n\n currentProto = Object.getPrototypeOf(currentProto);\n }\n}\n\n/**\n * CREATES A FACADE OBJECT\n *\n * @export\n * @template {object} T\n * @param {ServiceConstructor<T>} serviceClass\n * @param {InstanceType<ServiceConstructor<T>>} serviceInstance\n * @returns {{}}\n */\nexport function createFacadeObj<T extends object>(serviceInstance: object) {\n const targetObj = {};\n\n addInstanceProperties(serviceInstance, targetObj);\n addPrototypeProperties(serviceInstance, targetObj);\n return targetObj as T;\n}\n\nexport function generateRouterFacade(router: Router): Record<string, any> {\n return {\n get path() {\n return router.currentRoute.value.path;\n },\n get name() {\n return router.currentRoute.value.name;\n },\n get params() {\n return router.currentRoute.value.params;\n },\n get query() {\n return router.currentRoute.value.query;\n },\n get hash() {\n return router.currentRoute.value.hash;\n },\n get fullPath() {\n return router.currentRoute.value.fullPath;\n },\n get matched() {\n return router.currentRoute.value.matched;\n },\n get meta() {\n return router.currentRoute.value.meta;\n },\n push: router.push.bind(router),\n replace: router.replace.bind(router),\n go: router.go.bind(router),\n back: router.back.bind(router),\n forward: router.forward.bind(router),\n resolve: router.resolve.bind(router),\n getRoutes: router.getRoutes.bind(router),\n hasRoute: router.hasRoute.bind(router),\n\n // Router guards\n beforeEach: router.beforeEach.bind(router),\n beforeResolve: router.beforeResolve.bind(router),\n afterEach: router.afterEach.bind(router),\n onError: router.onError.bind(router),\n\n // Dynamic routing\n addRoute: router.addRoute.bind(router),\n removeRoute: router.removeRoute.bind(router),\n clearRoutes: router.clearRoutes.bind(router),\n\n // State\n isReady: router.isReady.bind(router),\n get currentRoute() {\n return router.currentRoute;\n },\n };\n}\n","import {\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 } from \"../common/nav\";\nimport { generateRouterFacade } from \"./facade\";\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, 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 }\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","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"],"mappings":"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","names":[]}
|
|
@@ -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; }
|
|
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") {
|
|
@@ -128,9 +131,6 @@ function generateRouterFacade(router) {
|
|
|
128
131
|
};
|
|
129
132
|
}
|
|
130
133
|
|
|
131
|
-
// src/core/obtainers.ts
|
|
132
|
-
var _vue = require('vue');
|
|
133
|
-
|
|
134
134
|
// src/core/internals.ts
|
|
135
135
|
|
|
136
136
|
|
|
@@ -177,7 +177,7 @@ function bindLifecycleHooks(instance) {
|
|
|
177
177
|
}
|
|
178
178
|
|
|
179
179
|
// src/core/utils.ts
|
|
180
|
-
function
|
|
180
|
+
function getServiceMeta(target) {
|
|
181
181
|
const ctor = typeof target === "function" ? target : target.constructor;
|
|
182
182
|
const meta = ctor[SERVICE_METADATA];
|
|
183
183
|
if (!_optionalChain([meta, 'optionalAccess', _ => _.token])) {
|
|
@@ -185,26 +185,10 @@ function getServiceMetadata(target) {
|
|
|
185
185
|
}
|
|
186
186
|
return meta;
|
|
187
187
|
}
|
|
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
188
|
|
|
205
189
|
// src/core/obtainers.ts
|
|
206
190
|
function obtain(serviceClass) {
|
|
207
|
-
const serviceMeta =
|
|
191
|
+
const serviceMeta = getServiceMeta(serviceClass);
|
|
208
192
|
if (RootRegistry.has(serviceMeta.token)) {
|
|
209
193
|
const instance = RootRegistry.get(serviceMeta.token);
|
|
210
194
|
return createFacadeObj(instance);
|
|
@@ -223,7 +207,7 @@ function obtain(serviceClass) {
|
|
|
223
207
|
}
|
|
224
208
|
}
|
|
225
209
|
function obtainRaw(serviceClass) {
|
|
226
|
-
const serviceMeta =
|
|
210
|
+
const serviceMeta = getServiceMeta(serviceClass);
|
|
227
211
|
if (RootRegistry.has(serviceMeta.token)) {
|
|
228
212
|
return RootRegistry.get(serviceMeta.token);
|
|
229
213
|
}
|
|
@@ -240,8 +224,8 @@ function obtainRaw(serviceClass) {
|
|
|
240
224
|
creationStack.delete(serviceMeta.token);
|
|
241
225
|
}
|
|
242
226
|
}
|
|
243
|
-
function
|
|
244
|
-
const serviceMeta =
|
|
227
|
+
function obtainNew(serviceClass) {
|
|
228
|
+
const serviceMeta = getServiceMeta(serviceClass);
|
|
245
229
|
if (creationStack.has(serviceMeta.token)) {
|
|
246
230
|
throw new Error(`[IocRaft] Circular dependency detected on: ${serviceClass.name}
|
|
247
231
|
`);
|
|
@@ -258,8 +242,8 @@ function obtainInstance(serviceClass) {
|
|
|
258
242
|
creationStack.delete(serviceMeta.token);
|
|
259
243
|
}
|
|
260
244
|
}
|
|
261
|
-
function
|
|
262
|
-
const serviceMeta =
|
|
245
|
+
function obtainNewRaw(serviceClass) {
|
|
246
|
+
const serviceMeta = getServiceMeta(serviceClass);
|
|
263
247
|
if (creationStack.has(serviceMeta.token)) {
|
|
264
248
|
throw new Error(`[IocRaft] Circular dependency detected on: ${serviceClass.name}
|
|
265
249
|
`);
|
|
@@ -276,24 +260,33 @@ function obtainRawInstance(serviceClass) {
|
|
|
276
260
|
creationStack.delete(serviceMeta.token);
|
|
277
261
|
}
|
|
278
262
|
}
|
|
279
|
-
function
|
|
280
|
-
const serviceMeta =
|
|
263
|
+
function exposeCtx(serviceInstance) {
|
|
264
|
+
const serviceMeta = getServiceMeta(serviceInstance);
|
|
281
265
|
_vue.provide.call(void 0, serviceMeta.token, serviceInstance);
|
|
282
266
|
}
|
|
283
|
-
function
|
|
284
|
-
const serviceMeta =
|
|
267
|
+
function obtainCtx(serviceClass) {
|
|
268
|
+
const serviceMeta = getServiceMeta(serviceClass);
|
|
285
269
|
return _vue.inject.call(void 0, serviceMeta.token);
|
|
286
270
|
}
|
|
287
271
|
|
|
288
272
|
// src/core/plugin.ts
|
|
289
273
|
|
|
274
|
+
|
|
275
|
+
// src/common/nav.ts
|
|
276
|
+
var Nav = class {
|
|
277
|
+
};
|
|
278
|
+
Nav = exports.Nav = __decorateClass([
|
|
279
|
+
attach()
|
|
280
|
+
], Nav);
|
|
281
|
+
|
|
282
|
+
// src/core/plugin.ts
|
|
290
283
|
var iocraft = (_app, options) => {
|
|
291
284
|
if (_optionalChain([options, 'optionalAccess', _3 => _3.router])) {
|
|
292
|
-
RootRegistry.set(
|
|
285
|
+
RootRegistry.set(getServiceMeta(Nav).token, generateRouterFacade(options.router));
|
|
293
286
|
}
|
|
294
287
|
if (_optionalChain([options, 'optionalAccess', _4 => _4.eagerLoad])) {
|
|
295
288
|
options.eagerLoad.forEach((service) => {
|
|
296
|
-
const serviceMeta =
|
|
289
|
+
const serviceMeta = getServiceMeta(service);
|
|
297
290
|
if (!RootRegistry.has(serviceMeta.token)) {
|
|
298
291
|
RootRegistry.set(serviceMeta.token, new service());
|
|
299
292
|
}
|
|
@@ -301,8 +294,8 @@ var iocraft = (_app, options) => {
|
|
|
301
294
|
}
|
|
302
295
|
};
|
|
303
296
|
|
|
304
|
-
// src/core/
|
|
305
|
-
function
|
|
297
|
+
// src/core/attach.ts
|
|
298
|
+
function attach() {
|
|
306
299
|
return function(constructor) {
|
|
307
300
|
if (_optionalChain([constructor, 'access', _5 => _5[SERVICE_METADATA], 'optionalAccess', _6 => _6.token])) {
|
|
308
301
|
return constructor;
|
|
@@ -314,51 +307,6 @@ function Register() {
|
|
|
314
307
|
};
|
|
315
308
|
}
|
|
316
309
|
|
|
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
310
|
|
|
363
311
|
|
|
364
312
|
|
|
@@ -370,5 +318,5 @@ function Store(initialState) {
|
|
|
370
318
|
|
|
371
319
|
|
|
372
320
|
|
|
373
|
-
exports.
|
|
374
|
-
//# sourceMappingURL=chunk-
|
|
321
|
+
exports.getServiceMeta = getServiceMeta; exports.obtain = obtain; exports.obtainRaw = obtainRaw; exports.obtainNew = obtainNew; exports.obtainNewRaw = obtainNewRaw; exports.exposeCtx = exposeCtx; exports.obtainCtx = obtainCtx; exports.Nav = Nav; exports.iocraft = iocraft; exports.attach = attach;
|
|
322
|
+
//# sourceMappingURL=chunk-QQPHKYMR.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/iocraft/iocraft/packages/iocraft/dist/chunk-QQPHKYMR.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-QQPHKYMR.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 * @returns {InstanceType<T>}\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 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 = getServiceMeta(serviceClass);\n\n if (RootRegistry.has(serviceMeta.token)) {\n return RootRegistry.get(serviceMeta.token) as InstanceType<T>;\n }\n\n if (creationStack.has(serviceMeta.token)) {\n throw new Error(`[IocRaft] Circular dependency detected on: ${serviceClass.name}\\n`);\n }\n\n creationStack.add(serviceMeta.token);\n\n try {\n const instance = new serviceClass();\n RootRegistry.set(serviceMeta.token, instance);\n return instance as InstanceType<T>;\n } finally {\n creationStack.delete(serviceMeta.token);\n }\n}\n\n/**\n * obtain a facade of a new Service Instance\n *\n * @export\n * @template {ServiceConstructor} T\n * @param {T} serviceClass\n * @returns {InstanceType<T>}\n */\nexport function 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 * obtain a new Service Instance\n *\n * @export\n * @template {ServiceConstructor} T\n * @param {T} serviceClass\n * @returns {InstanceType<T>}\n */\nexport function obtainNewRaw<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 return instance as InstanceType<T>;\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 { Router } from 'vue-router';\nimport type { ServiceConstructor } from './types';\n\nfunction hasKey(obj: Record<PropertyKey, unknown>, key: PropertyKey): boolean {\n if (typeof key === 'symbol') {\n return Object.getOwnPropertySymbols(obj).includes(key);\n }\n return Object.hasOwn(obj, key);\n}\n\nconst NativeKeys = new Set([\n ...Object.getOwnPropertyNames(Object.prototype),\n ...Object.getOwnPropertySymbols(Object.prototype),\n ...Object.getOwnPropertyNames(Function.prototype),\n ...Object.getOwnPropertySymbols(Function.prototype),\n ...Object.getOwnPropertyNames(Array.prototype),\n ...Object.getOwnPropertySymbols(Array.prototype),\n]);\n\nfunction addInstanceProperties<T extends object>(\n serviceInstance: InstanceType<ServiceConstructor<T>>,\n targetObj: Record<PropertyKey, unknown>\n) {\n const ownKeys = [...Object.getOwnPropertyNames(serviceInstance), ...Object.getOwnPropertySymbols(serviceInstance)];\n\n for (const key of ownKeys) {\n if (hasKey(targetObj, key)) continue;\n\n const descriptor = Object.getOwnPropertyDescriptor(serviceInstance, key)!;\n\n if (typeof descriptor.value === 'function') {\n console.warn(`[IOCRAFT]: Instance method \"${String(key)}\" found as own property. Consider moving to prototype.`);\n continue;\n }\n\n if (descriptor.get || descriptor.set) {\n continue;\n }\n\n Object.defineProperty(targetObj, key, {\n get() {\n return serviceInstance[key as keyof typeof serviceInstance];\n },\n set(v) {\n serviceInstance[key as keyof typeof serviceInstance] = v;\n },\n enumerable: true,\n configurable: true,\n });\n }\n}\n\nfunction addPrototypeProperties<T extends object>(\n serviceInstance: InstanceType<ServiceConstructor<T>>,\n targetObj: Record<PropertyKey, unknown>\n) {\n let currentProto = Object.getPrototypeOf(serviceInstance);\n\n while (currentProto && currentProto !== Object.prototype) {\n const protoKeys = [...Object.getOwnPropertyNames(currentProto), ...Object.getOwnPropertySymbols(currentProto)];\n\n for (const key of protoKeys) {\n if (hasKey(targetObj, key)) continue;\n\n if (NativeKeys.has(key)) continue;\n\n const descriptor = Object.getOwnPropertyDescriptor(currentProto, key)!;\n\n if (descriptor.get || descriptor.set) {\n Object.defineProperty(targetObj, key, {\n get: descriptor.get ? () => descriptor.get!.call(serviceInstance) : undefined,\n set: descriptor.set ? (v: any) => descriptor.set!.call(serviceInstance, v) : undefined,\n enumerable: true,\n configurable: true,\n });\n } else if (typeof descriptor.value === 'function') {\n targetObj[key] = descriptor.value.bind(serviceInstance);\n }\n }\n\n currentProto = Object.getPrototypeOf(currentProto);\n }\n}\n\n/**\n * CREATES A FACADE OBJECT\n *\n * @export\n * @template {object} T\n * @param {ServiceConstructor<T>} serviceClass\n * @param {InstanceType<ServiceConstructor<T>>} serviceInstance\n * @returns {{}}\n */\nexport function createFacadeObj<T extends object>(serviceInstance: object) {\n const targetObj = {};\n\n addInstanceProperties(serviceInstance, targetObj);\n addPrototypeProperties(serviceInstance, targetObj);\n return targetObj as T;\n}\n\nexport function generateRouterFacade(router: Router): Record<string, any> {\n return {\n get path() {\n return router.currentRoute.value.path;\n },\n get name() {\n return router.currentRoute.value.name;\n },\n get params() {\n return router.currentRoute.value.params;\n },\n get query() {\n return router.currentRoute.value.query;\n },\n get hash() {\n return router.currentRoute.value.hash;\n },\n get fullPath() {\n return router.currentRoute.value.fullPath;\n },\n get matched() {\n return router.currentRoute.value.matched;\n },\n get meta() {\n return router.currentRoute.value.meta;\n },\n push: router.push.bind(router),\n replace: router.replace.bind(router),\n go: router.go.bind(router),\n back: router.back.bind(router),\n forward: router.forward.bind(router),\n resolve: router.resolve.bind(router),\n getRoutes: router.getRoutes.bind(router),\n hasRoute: router.hasRoute.bind(router),\n\n // Router guards\n beforeEach: router.beforeEach.bind(router),\n beforeResolve: router.beforeResolve.bind(router),\n afterEach: router.afterEach.bind(router),\n onError: router.onError.bind(router),\n\n // Dynamic routing\n addRoute: router.addRoute.bind(router),\n removeRoute: router.removeRoute.bind(router),\n clearRoutes: router.clearRoutes.bind(router),\n\n // State\n isReady: router.isReady.bind(router),\n get currentRoute() {\n return router.currentRoute;\n },\n };\n}\n","import {\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 } from \"../common/nav\";\nimport { generateRouterFacade } from \"./facade\";\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, 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 }\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","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"]}
|