iocraft 0.2.4 → 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-UO5JQJD3.js → chunk-NNROA5P7.js} +93 -86
- package/dist/chunk-NNROA5P7.js.map +1 -0
- package/dist/{chunk-FPSHR5LZ.cjs → chunk-QQPHKYMR.cjs} +89 -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 -10
- package/dist/core.cjs.map +1 -1
- package/dist/core.d.cts +14 -39
- package/dist/core.d.ts +14 -39
- package/dist/core.js +15 -23
- package/package.json +9 -7
- package/dist/chunk-FPSHR5LZ.cjs.map +0 -1
- package/dist/chunk-UO5JQJD3.js.map +0 -1
- package/dist/helpers.cjs +0 -10
- package/dist/helpers.cjs.map +0 -1
- package/dist/helpers.d.cts +0 -24
- package/dist/helpers.d.ts +0 -24
- 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/injectors.ts
|
|
132
|
-
import { getCurrentInstance, inject, provide } from "vue";
|
|
133
|
-
|
|
134
134
|
// src/core/internals.ts
|
|
135
135
|
import {
|
|
136
136
|
onMounted,
|
|
@@ -149,6 +149,7 @@ import {
|
|
|
149
149
|
} from "vue";
|
|
150
150
|
var SERVICE_METADATA = /* @__PURE__ */ Symbol("IOCRAFT_SERVICE_METADATA");
|
|
151
151
|
var RootRegistry = /* @__PURE__ */ new Map();
|
|
152
|
+
var creationStack = /* @__PURE__ */ new Set();
|
|
152
153
|
var lifecycleHookMap = {
|
|
153
154
|
onMounted,
|
|
154
155
|
onUpdated,
|
|
@@ -176,7 +177,7 @@ function bindLifecycleHooks(instance) {
|
|
|
176
177
|
}
|
|
177
178
|
|
|
178
179
|
// src/core/utils.ts
|
|
179
|
-
function
|
|
180
|
+
function getServiceMeta(target) {
|
|
180
181
|
const ctor = typeof target === "function" ? target : target.constructor;
|
|
181
182
|
const meta = ctor[SERVICE_METADATA];
|
|
182
183
|
if (!meta?.token) {
|
|
@@ -184,63 +185,108 @@ function getServiceMetadata(target) {
|
|
|
184
185
|
}
|
|
185
186
|
return meta;
|
|
186
187
|
}
|
|
187
|
-
function HasService(serviceClass) {
|
|
188
|
-
const meta = getServiceMetadata(serviceClass);
|
|
189
|
-
return RootRegistry.has(meta.token);
|
|
190
|
-
}
|
|
191
|
-
function IsFacade(_serviceInstance) {
|
|
192
|
-
}
|
|
193
188
|
|
|
194
|
-
// src/core/
|
|
189
|
+
// src/core/obtainers.ts
|
|
195
190
|
function obtain(serviceClass) {
|
|
196
|
-
const serviceMeta =
|
|
197
|
-
if (
|
|
198
|
-
RootRegistry.
|
|
191
|
+
const serviceMeta = getServiceMeta(serviceClass);
|
|
192
|
+
if (RootRegistry.has(serviceMeta.token)) {
|
|
193
|
+
const instance = RootRegistry.get(serviceMeta.token);
|
|
194
|
+
return createFacadeObj(instance);
|
|
195
|
+
}
|
|
196
|
+
if (creationStack.has(serviceMeta.token)) {
|
|
197
|
+
throw new Error(`[IocRaft] Circular dependency detected on: ${serviceClass.name}
|
|
198
|
+
`);
|
|
199
|
+
}
|
|
200
|
+
creationStack.add(serviceMeta.token);
|
|
201
|
+
try {
|
|
202
|
+
const instance = new serviceClass();
|
|
203
|
+
RootRegistry.set(serviceMeta.token, instance);
|
|
204
|
+
return createFacadeObj(instance);
|
|
205
|
+
} finally {
|
|
206
|
+
creationStack.delete(serviceMeta.token);
|
|
199
207
|
}
|
|
200
|
-
const instance = RootRegistry.get(serviceMeta.token);
|
|
201
|
-
return createFacadeObj(instance);
|
|
202
208
|
}
|
|
203
209
|
function obtainRaw(serviceClass) {
|
|
204
|
-
const serviceMeta =
|
|
205
|
-
if (
|
|
206
|
-
RootRegistry.
|
|
210
|
+
const serviceMeta = getServiceMeta(serviceClass);
|
|
211
|
+
if (RootRegistry.has(serviceMeta.token)) {
|
|
212
|
+
return RootRegistry.get(serviceMeta.token);
|
|
213
|
+
}
|
|
214
|
+
if (creationStack.has(serviceMeta.token)) {
|
|
215
|
+
throw new Error(`[IocRaft] Circular dependency detected on: ${serviceClass.name}
|
|
216
|
+
`);
|
|
217
|
+
}
|
|
218
|
+
creationStack.add(serviceMeta.token);
|
|
219
|
+
try {
|
|
220
|
+
const instance = new serviceClass();
|
|
221
|
+
RootRegistry.set(serviceMeta.token, instance);
|
|
222
|
+
return instance;
|
|
223
|
+
} finally {
|
|
224
|
+
creationStack.delete(serviceMeta.token);
|
|
207
225
|
}
|
|
208
|
-
return RootRegistry.get(serviceMeta.token);
|
|
209
226
|
}
|
|
210
|
-
function
|
|
211
|
-
const
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
227
|
+
function obtainNew(serviceClass) {
|
|
228
|
+
const serviceMeta = getServiceMeta(serviceClass);
|
|
229
|
+
if (creationStack.has(serviceMeta.token)) {
|
|
230
|
+
throw new Error(`[IocRaft] Circular dependency detected on: ${serviceClass.name}
|
|
231
|
+
`);
|
|
232
|
+
}
|
|
233
|
+
creationStack.add(serviceMeta.token);
|
|
234
|
+
try {
|
|
235
|
+
const componentInstance = getCurrentInstance();
|
|
236
|
+
const instance = new serviceClass();
|
|
237
|
+
if (componentInstance) {
|
|
238
|
+
bindLifecycleHooks(instance);
|
|
239
|
+
}
|
|
240
|
+
return createFacadeObj(instance);
|
|
241
|
+
} finally {
|
|
242
|
+
creationStack.delete(serviceMeta.token);
|
|
215
243
|
}
|
|
216
|
-
return instance;
|
|
217
244
|
}
|
|
218
|
-
function
|
|
219
|
-
const
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
245
|
+
function obtainNewRaw(serviceClass) {
|
|
246
|
+
const serviceMeta = getServiceMeta(serviceClass);
|
|
247
|
+
if (creationStack.has(serviceMeta.token)) {
|
|
248
|
+
throw new Error(`[IocRaft] Circular dependency detected on: ${serviceClass.name}
|
|
249
|
+
`);
|
|
250
|
+
}
|
|
251
|
+
creationStack.add(serviceMeta.token);
|
|
252
|
+
try {
|
|
253
|
+
const componentInstance = getCurrentInstance();
|
|
254
|
+
const instance = new serviceClass();
|
|
255
|
+
if (componentInstance) {
|
|
256
|
+
bindLifecycleHooks(instance);
|
|
257
|
+
}
|
|
258
|
+
return instance;
|
|
259
|
+
} finally {
|
|
260
|
+
creationStack.delete(serviceMeta.token);
|
|
223
261
|
}
|
|
224
|
-
return createFacadeObj(instance);
|
|
225
262
|
}
|
|
226
|
-
function
|
|
227
|
-
const serviceMeta =
|
|
263
|
+
function exposeCtx(serviceInstance) {
|
|
264
|
+
const serviceMeta = getServiceMeta(serviceInstance);
|
|
228
265
|
provide(serviceMeta.token, serviceInstance);
|
|
229
266
|
}
|
|
230
|
-
function
|
|
231
|
-
const serviceMeta =
|
|
267
|
+
function obtainCtx(serviceClass) {
|
|
268
|
+
const serviceMeta = getServiceMeta(serviceClass);
|
|
232
269
|
return inject(serviceMeta.token);
|
|
233
270
|
}
|
|
234
271
|
|
|
235
272
|
// src/core/plugin.ts
|
|
236
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
|
|
237
283
|
var iocraft = (_app, options) => {
|
|
238
284
|
if (options?.router) {
|
|
239
|
-
RootRegistry.set(
|
|
285
|
+
RootRegistry.set(getServiceMeta(Nav).token, generateRouterFacade(options.router));
|
|
240
286
|
}
|
|
241
287
|
if (options?.eagerLoad) {
|
|
242
288
|
options.eagerLoad.forEach((service) => {
|
|
243
|
-
const serviceMeta =
|
|
289
|
+
const serviceMeta = getServiceMeta(service);
|
|
244
290
|
if (!RootRegistry.has(serviceMeta.token)) {
|
|
245
291
|
RootRegistry.set(serviceMeta.token, new service());
|
|
246
292
|
}
|
|
@@ -248,8 +294,8 @@ var iocraft = (_app, options) => {
|
|
|
248
294
|
}
|
|
249
295
|
};
|
|
250
296
|
|
|
251
|
-
// src/core/
|
|
252
|
-
function
|
|
297
|
+
// src/core/attach.ts
|
|
298
|
+
function attach() {
|
|
253
299
|
return function(constructor) {
|
|
254
300
|
if (constructor[SERVICE_METADATA]?.token) {
|
|
255
301
|
return constructor;
|
|
@@ -261,55 +307,16 @@ function Register() {
|
|
|
261
307
|
};
|
|
262
308
|
}
|
|
263
309
|
|
|
264
|
-
// src/helpers/Nav.service.ts
|
|
265
|
-
var Nav = class {
|
|
266
|
-
};
|
|
267
|
-
Nav = __decorateClass([
|
|
268
|
-
Register()
|
|
269
|
-
], Nav);
|
|
270
|
-
|
|
271
|
-
// src/helpers/Store.service.ts
|
|
272
|
-
function Store(initialState) {
|
|
273
|
-
return class {
|
|
274
|
-
state = initialState;
|
|
275
|
-
getState() {
|
|
276
|
-
}
|
|
277
|
-
setState(_partialState) {
|
|
278
|
-
}
|
|
279
|
-
select(_key) {
|
|
280
|
-
}
|
|
281
|
-
selectAll() {
|
|
282
|
-
}
|
|
283
|
-
computed() {
|
|
284
|
-
}
|
|
285
|
-
watch() {
|
|
286
|
-
}
|
|
287
|
-
watchEffect() {
|
|
288
|
-
}
|
|
289
|
-
reset() {
|
|
290
|
-
}
|
|
291
|
-
onInit() {
|
|
292
|
-
}
|
|
293
|
-
onDispose() {
|
|
294
|
-
}
|
|
295
|
-
};
|
|
296
|
-
}
|
|
297
|
-
|
|
298
310
|
export {
|
|
299
|
-
|
|
300
|
-
generateRouterFacade,
|
|
301
|
-
getServiceMetadata,
|
|
302
|
-
HasService,
|
|
303
|
-
IsFacade,
|
|
311
|
+
getServiceMeta,
|
|
304
312
|
obtain,
|
|
305
313
|
obtainRaw,
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
314
|
+
obtainNew,
|
|
315
|
+
obtainNewRaw,
|
|
316
|
+
exposeCtx,
|
|
317
|
+
obtainCtx,
|
|
310
318
|
Nav,
|
|
311
|
-
Store,
|
|
312
319
|
iocraft,
|
|
313
|
-
|
|
320
|
+
attach
|
|
314
321
|
};
|
|
315
|
-
//# 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/injectors.ts
|
|
132
|
-
var _vue = require('vue');
|
|
133
|
-
|
|
134
134
|
// src/core/internals.ts
|
|
135
135
|
|
|
136
136
|
|
|
@@ -149,6 +149,7 @@ var _vue = require('vue');
|
|
|
149
149
|
|
|
150
150
|
var SERVICE_METADATA = /* @__PURE__ */ Symbol("IOCRAFT_SERVICE_METADATA");
|
|
151
151
|
var RootRegistry = /* @__PURE__ */ new Map();
|
|
152
|
+
var creationStack = /* @__PURE__ */ new Set();
|
|
152
153
|
var lifecycleHookMap = {
|
|
153
154
|
onMounted: _vue.onMounted,
|
|
154
155
|
onUpdated: _vue.onUpdated,
|
|
@@ -176,7 +177,7 @@ function bindLifecycleHooks(instance) {
|
|
|
176
177
|
}
|
|
177
178
|
|
|
178
179
|
// src/core/utils.ts
|
|
179
|
-
function
|
|
180
|
+
function getServiceMeta(target) {
|
|
180
181
|
const ctor = typeof target === "function" ? target : target.constructor;
|
|
181
182
|
const meta = ctor[SERVICE_METADATA];
|
|
182
183
|
if (!_optionalChain([meta, 'optionalAccess', _ => _.token])) {
|
|
@@ -184,63 +185,108 @@ function getServiceMetadata(target) {
|
|
|
184
185
|
}
|
|
185
186
|
return meta;
|
|
186
187
|
}
|
|
187
|
-
function HasService(serviceClass) {
|
|
188
|
-
const meta = getServiceMetadata(serviceClass);
|
|
189
|
-
return RootRegistry.has(meta.token);
|
|
190
|
-
}
|
|
191
|
-
function IsFacade(_serviceInstance) {
|
|
192
|
-
}
|
|
193
188
|
|
|
194
|
-
// src/core/
|
|
189
|
+
// src/core/obtainers.ts
|
|
195
190
|
function obtain(serviceClass) {
|
|
196
|
-
const serviceMeta =
|
|
197
|
-
if (
|
|
198
|
-
RootRegistry.
|
|
191
|
+
const serviceMeta = getServiceMeta(serviceClass);
|
|
192
|
+
if (RootRegistry.has(serviceMeta.token)) {
|
|
193
|
+
const instance = RootRegistry.get(serviceMeta.token);
|
|
194
|
+
return createFacadeObj(instance);
|
|
195
|
+
}
|
|
196
|
+
if (creationStack.has(serviceMeta.token)) {
|
|
197
|
+
throw new Error(`[IocRaft] Circular dependency detected on: ${serviceClass.name}
|
|
198
|
+
`);
|
|
199
|
+
}
|
|
200
|
+
creationStack.add(serviceMeta.token);
|
|
201
|
+
try {
|
|
202
|
+
const instance = new serviceClass();
|
|
203
|
+
RootRegistry.set(serviceMeta.token, instance);
|
|
204
|
+
return createFacadeObj(instance);
|
|
205
|
+
} finally {
|
|
206
|
+
creationStack.delete(serviceMeta.token);
|
|
199
207
|
}
|
|
200
|
-
const instance = RootRegistry.get(serviceMeta.token);
|
|
201
|
-
return createFacadeObj(instance);
|
|
202
208
|
}
|
|
203
209
|
function obtainRaw(serviceClass) {
|
|
204
|
-
const serviceMeta =
|
|
205
|
-
if (
|
|
206
|
-
RootRegistry.
|
|
210
|
+
const serviceMeta = getServiceMeta(serviceClass);
|
|
211
|
+
if (RootRegistry.has(serviceMeta.token)) {
|
|
212
|
+
return RootRegistry.get(serviceMeta.token);
|
|
213
|
+
}
|
|
214
|
+
if (creationStack.has(serviceMeta.token)) {
|
|
215
|
+
throw new Error(`[IocRaft] Circular dependency detected on: ${serviceClass.name}
|
|
216
|
+
`);
|
|
217
|
+
}
|
|
218
|
+
creationStack.add(serviceMeta.token);
|
|
219
|
+
try {
|
|
220
|
+
const instance = new serviceClass();
|
|
221
|
+
RootRegistry.set(serviceMeta.token, instance);
|
|
222
|
+
return instance;
|
|
223
|
+
} finally {
|
|
224
|
+
creationStack.delete(serviceMeta.token);
|
|
207
225
|
}
|
|
208
|
-
return RootRegistry.get(serviceMeta.token);
|
|
209
226
|
}
|
|
210
|
-
function
|
|
211
|
-
const
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
227
|
+
function obtainNew(serviceClass) {
|
|
228
|
+
const serviceMeta = getServiceMeta(serviceClass);
|
|
229
|
+
if (creationStack.has(serviceMeta.token)) {
|
|
230
|
+
throw new Error(`[IocRaft] Circular dependency detected on: ${serviceClass.name}
|
|
231
|
+
`);
|
|
232
|
+
}
|
|
233
|
+
creationStack.add(serviceMeta.token);
|
|
234
|
+
try {
|
|
235
|
+
const componentInstance = _vue.getCurrentInstance.call(void 0, );
|
|
236
|
+
const instance = new serviceClass();
|
|
237
|
+
if (componentInstance) {
|
|
238
|
+
bindLifecycleHooks(instance);
|
|
239
|
+
}
|
|
240
|
+
return createFacadeObj(instance);
|
|
241
|
+
} finally {
|
|
242
|
+
creationStack.delete(serviceMeta.token);
|
|
215
243
|
}
|
|
216
|
-
return instance;
|
|
217
244
|
}
|
|
218
|
-
function
|
|
219
|
-
const
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
245
|
+
function obtainNewRaw(serviceClass) {
|
|
246
|
+
const serviceMeta = getServiceMeta(serviceClass);
|
|
247
|
+
if (creationStack.has(serviceMeta.token)) {
|
|
248
|
+
throw new Error(`[IocRaft] Circular dependency detected on: ${serviceClass.name}
|
|
249
|
+
`);
|
|
250
|
+
}
|
|
251
|
+
creationStack.add(serviceMeta.token);
|
|
252
|
+
try {
|
|
253
|
+
const componentInstance = _vue.getCurrentInstance.call(void 0, );
|
|
254
|
+
const instance = new serviceClass();
|
|
255
|
+
if (componentInstance) {
|
|
256
|
+
bindLifecycleHooks(instance);
|
|
257
|
+
}
|
|
258
|
+
return instance;
|
|
259
|
+
} finally {
|
|
260
|
+
creationStack.delete(serviceMeta.token);
|
|
223
261
|
}
|
|
224
|
-
return createFacadeObj(instance);
|
|
225
262
|
}
|
|
226
|
-
function
|
|
227
|
-
const serviceMeta =
|
|
263
|
+
function exposeCtx(serviceInstance) {
|
|
264
|
+
const serviceMeta = getServiceMeta(serviceInstance);
|
|
228
265
|
_vue.provide.call(void 0, serviceMeta.token, serviceInstance);
|
|
229
266
|
}
|
|
230
|
-
function
|
|
231
|
-
const serviceMeta =
|
|
267
|
+
function obtainCtx(serviceClass) {
|
|
268
|
+
const serviceMeta = getServiceMeta(serviceClass);
|
|
232
269
|
return _vue.inject.call(void 0, serviceMeta.token);
|
|
233
270
|
}
|
|
234
271
|
|
|
235
272
|
// src/core/plugin.ts
|
|
236
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
|
|
237
283
|
var iocraft = (_app, options) => {
|
|
238
284
|
if (_optionalChain([options, 'optionalAccess', _3 => _3.router])) {
|
|
239
|
-
RootRegistry.set(
|
|
285
|
+
RootRegistry.set(getServiceMeta(Nav).token, generateRouterFacade(options.router));
|
|
240
286
|
}
|
|
241
287
|
if (_optionalChain([options, 'optionalAccess', _4 => _4.eagerLoad])) {
|
|
242
288
|
options.eagerLoad.forEach((service) => {
|
|
243
|
-
const serviceMeta =
|
|
289
|
+
const serviceMeta = getServiceMeta(service);
|
|
244
290
|
if (!RootRegistry.has(serviceMeta.token)) {
|
|
245
291
|
RootRegistry.set(serviceMeta.token, new service());
|
|
246
292
|
}
|
|
@@ -248,8 +294,8 @@ var iocraft = (_app, options) => {
|
|
|
248
294
|
}
|
|
249
295
|
};
|
|
250
296
|
|
|
251
|
-
// src/core/
|
|
252
|
-
function
|
|
297
|
+
// src/core/attach.ts
|
|
298
|
+
function attach() {
|
|
253
299
|
return function(constructor) {
|
|
254
300
|
if (_optionalChain([constructor, 'access', _5 => _5[SERVICE_METADATA], 'optionalAccess', _6 => _6.token])) {
|
|
255
301
|
return constructor;
|
|
@@ -261,45 +307,6 @@ function Register() {
|
|
|
261
307
|
};
|
|
262
308
|
}
|
|
263
309
|
|
|
264
|
-
// src/helpers/Nav.service.ts
|
|
265
|
-
var Nav = class {
|
|
266
|
-
};
|
|
267
|
-
Nav = exports.Nav = __decorateClass([
|
|
268
|
-
Register()
|
|
269
|
-
], Nav);
|
|
270
|
-
|
|
271
|
-
// src/helpers/Store.service.ts
|
|
272
|
-
function Store(initialState) {
|
|
273
|
-
return (_class = class {constructor() { _class.prototype.__init.call(this); }
|
|
274
|
-
__init() {this.state = initialState}
|
|
275
|
-
getState() {
|
|
276
|
-
}
|
|
277
|
-
setState(_partialState) {
|
|
278
|
-
}
|
|
279
|
-
select(_key) {
|
|
280
|
-
}
|
|
281
|
-
selectAll() {
|
|
282
|
-
}
|
|
283
|
-
computed() {
|
|
284
|
-
}
|
|
285
|
-
watch() {
|
|
286
|
-
}
|
|
287
|
-
watchEffect() {
|
|
288
|
-
}
|
|
289
|
-
reset() {
|
|
290
|
-
}
|
|
291
|
-
onInit() {
|
|
292
|
-
}
|
|
293
|
-
onDispose() {
|
|
294
|
-
}
|
|
295
|
-
}, _class);
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
310
|
|
|
304
311
|
|
|
305
312
|
|
|
@@ -311,5 +318,5 @@ function Store(initialState) {
|
|
|
311
318
|
|
|
312
319
|
|
|
313
320
|
|
|
314
|
-
exports.
|
|
315
|
-
//# 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"]}
|