iocraft 0.2.3 → 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/chunk-NJJ6QKII.cjs +374 -0
- package/dist/chunk-NJJ6QKII.cjs.map +1 -0
- package/dist/{chunk-LNDE6TCH.js → chunk-OLY3RJCX.js} +174 -79
- package/dist/chunk-OLY3RJCX.js.map +1 -0
- package/dist/core.cjs +10 -2
- package/dist/core.cjs.map +1 -1
- package/dist/core.d.cts +145 -23
- package/dist/core.d.ts +145 -23
- package/dist/core.js +27 -19
- package/dist/helpers.cjs +2 -2
- package/dist/helpers.d.cts +9 -10
- package/dist/helpers.d.ts +9 -10
- package/dist/helpers.js +1 -1
- package/package.json +3 -2
- package/dist/chunk-LNDE6TCH.js.map +0 -1
- package/dist/chunk-MV4CFG6R.cjs +0 -279
- package/dist/chunk-MV4CFG6R.cjs.map +0 -1
package/README.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
On Progress...
|
|
@@ -0,0 +1,374 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _class;"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __decorateClass = (decorators, target, key, kind) => {
|
|
5
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
|
|
6
|
+
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
7
|
+
if (decorator = decorators[i])
|
|
8
|
+
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
9
|
+
if (kind && result) __defProp(target, key, result);
|
|
10
|
+
return result;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
// src/core/facade.ts
|
|
14
|
+
function hasKey(obj, key) {
|
|
15
|
+
if (typeof key === "symbol") {
|
|
16
|
+
return Object.getOwnPropertySymbols(obj).includes(key);
|
|
17
|
+
}
|
|
18
|
+
return Object.hasOwn(obj, key);
|
|
19
|
+
}
|
|
20
|
+
var NativeKeys = /* @__PURE__ */ new Set([
|
|
21
|
+
...Object.getOwnPropertyNames(Object.prototype),
|
|
22
|
+
...Object.getOwnPropertySymbols(Object.prototype),
|
|
23
|
+
...Object.getOwnPropertyNames(Function.prototype),
|
|
24
|
+
...Object.getOwnPropertySymbols(Function.prototype),
|
|
25
|
+
...Object.getOwnPropertyNames(Array.prototype),
|
|
26
|
+
...Object.getOwnPropertySymbols(Array.prototype)
|
|
27
|
+
]);
|
|
28
|
+
function addInstanceProperties(serviceInstance, targetObj) {
|
|
29
|
+
const ownKeys = [...Object.getOwnPropertyNames(serviceInstance), ...Object.getOwnPropertySymbols(serviceInstance)];
|
|
30
|
+
for (const key of ownKeys) {
|
|
31
|
+
if (hasKey(targetObj, key)) continue;
|
|
32
|
+
const descriptor = Object.getOwnPropertyDescriptor(serviceInstance, key);
|
|
33
|
+
if (typeof descriptor.value === "function") {
|
|
34
|
+
console.warn(`[IOCRAFT]: Instance method "${String(key)}" found as own property. Consider moving to prototype.`);
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
if (descriptor.get || descriptor.set) {
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
Object.defineProperty(targetObj, key, {
|
|
41
|
+
get() {
|
|
42
|
+
return serviceInstance[key];
|
|
43
|
+
},
|
|
44
|
+
set(v) {
|
|
45
|
+
serviceInstance[key] = v;
|
|
46
|
+
},
|
|
47
|
+
enumerable: true,
|
|
48
|
+
configurable: true
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function addPrototypeProperties(serviceInstance, targetObj) {
|
|
53
|
+
let currentProto = Object.getPrototypeOf(serviceInstance);
|
|
54
|
+
while (currentProto && currentProto !== Object.prototype) {
|
|
55
|
+
const protoKeys = [...Object.getOwnPropertyNames(currentProto), ...Object.getOwnPropertySymbols(currentProto)];
|
|
56
|
+
for (const key of protoKeys) {
|
|
57
|
+
if (hasKey(targetObj, key)) continue;
|
|
58
|
+
if (NativeKeys.has(key)) continue;
|
|
59
|
+
const descriptor = Object.getOwnPropertyDescriptor(currentProto, key);
|
|
60
|
+
if (descriptor.get || descriptor.set) {
|
|
61
|
+
Object.defineProperty(targetObj, key, {
|
|
62
|
+
get: descriptor.get ? () => descriptor.get.call(serviceInstance) : void 0,
|
|
63
|
+
set: descriptor.set ? (v) => descriptor.set.call(serviceInstance, v) : void 0,
|
|
64
|
+
enumerable: true,
|
|
65
|
+
configurable: true
|
|
66
|
+
});
|
|
67
|
+
} else if (typeof descriptor.value === "function") {
|
|
68
|
+
targetObj[key] = descriptor.value.bind(serviceInstance);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
currentProto = Object.getPrototypeOf(currentProto);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
function createFacadeObj(serviceInstance) {
|
|
75
|
+
const targetObj = {};
|
|
76
|
+
addInstanceProperties(serviceInstance, targetObj);
|
|
77
|
+
addPrototypeProperties(serviceInstance, targetObj);
|
|
78
|
+
return targetObj;
|
|
79
|
+
}
|
|
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
|
+
|
|
134
|
+
// src/core/internals.ts
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
var SERVICE_METADATA = /* @__PURE__ */ Symbol("IOCRAFT_SERVICE_METADATA");
|
|
151
|
+
var RootRegistry = /* @__PURE__ */ new Map();
|
|
152
|
+
var creationStack = /* @__PURE__ */ new Set();
|
|
153
|
+
var lifecycleHookMap = {
|
|
154
|
+
onMounted: _vue.onMounted,
|
|
155
|
+
onUpdated: _vue.onUpdated,
|
|
156
|
+
onUnmounted: _vue.onUnmounted,
|
|
157
|
+
onBeforeMount: _vue.onBeforeMount,
|
|
158
|
+
onBeforeUpdate: _vue.onBeforeUpdate,
|
|
159
|
+
onBeforeUnmount: _vue.onBeforeUnmount,
|
|
160
|
+
onErrorCaptured: _vue.onErrorCaptured,
|
|
161
|
+
onRenderTracked: _vue.onRenderTracked,
|
|
162
|
+
onRenderTriggered: _vue.onRenderTriggered,
|
|
163
|
+
onActivated: _vue.onActivated,
|
|
164
|
+
onDeactivated: _vue.onDeactivated,
|
|
165
|
+
onServerPrefetch: _vue.onServerPrefetch,
|
|
166
|
+
onScopeDispose: _vue.onScopeDispose
|
|
167
|
+
};
|
|
168
|
+
function bindLifecycleHooks(instance) {
|
|
169
|
+
for (const key in lifecycleHookMap) {
|
|
170
|
+
const hookName = key;
|
|
171
|
+
const vueHook = lifecycleHookMap[hookName];
|
|
172
|
+
const handler = instance[hookName];
|
|
173
|
+
if (typeof handler === "function") {
|
|
174
|
+
vueHook(handler.bind(instance));
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// src/core/utils.ts
|
|
180
|
+
function getServiceMetadata(target) {
|
|
181
|
+
const ctor = typeof target === "function" ? target : target.constructor;
|
|
182
|
+
const meta = ctor[SERVICE_METADATA];
|
|
183
|
+
if (!_optionalChain([meta, 'optionalAccess', _ => _.token])) {
|
|
184
|
+
throw new Error(`[IOCRAFT]: ${_optionalChain([ctor, 'optionalAccess', _2 => _2.name]) || "Unknown"} is not decorated with @Register()`);
|
|
185
|
+
}
|
|
186
|
+
return meta;
|
|
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
|
+
|
|
205
|
+
// src/core/obtainers.ts
|
|
206
|
+
function obtain(serviceClass) {
|
|
207
|
+
const serviceMeta = getServiceMetadata(serviceClass);
|
|
208
|
+
if (RootRegistry.has(serviceMeta.token)) {
|
|
209
|
+
const instance = RootRegistry.get(serviceMeta.token);
|
|
210
|
+
return createFacadeObj(instance);
|
|
211
|
+
}
|
|
212
|
+
if (creationStack.has(serviceMeta.token)) {
|
|
213
|
+
throw new Error(`[IocRaft] Circular dependency detected on: ${serviceClass.name}
|
|
214
|
+
`);
|
|
215
|
+
}
|
|
216
|
+
creationStack.add(serviceMeta.token);
|
|
217
|
+
try {
|
|
218
|
+
const instance = new serviceClass();
|
|
219
|
+
RootRegistry.set(serviceMeta.token, instance);
|
|
220
|
+
return createFacadeObj(instance);
|
|
221
|
+
} finally {
|
|
222
|
+
creationStack.delete(serviceMeta.token);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
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);
|
|
245
|
+
if (creationStack.has(serviceMeta.token)) {
|
|
246
|
+
throw new Error(`[IocRaft] Circular dependency detected on: ${serviceClass.name}
|
|
247
|
+
`);
|
|
248
|
+
}
|
|
249
|
+
creationStack.add(serviceMeta.token);
|
|
250
|
+
try {
|
|
251
|
+
const componentInstance = _vue.getCurrentInstance.call(void 0, );
|
|
252
|
+
const instance = new serviceClass();
|
|
253
|
+
if (componentInstance) {
|
|
254
|
+
bindLifecycleHooks(instance);
|
|
255
|
+
}
|
|
256
|
+
return createFacadeObj(instance);
|
|
257
|
+
} finally {
|
|
258
|
+
creationStack.delete(serviceMeta.token);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
function obtainRawInstance(serviceClass) {
|
|
262
|
+
const serviceMeta = getServiceMetadata(serviceClass);
|
|
263
|
+
if (creationStack.has(serviceMeta.token)) {
|
|
264
|
+
throw new Error(`[IocRaft] Circular dependency detected on: ${serviceClass.name}
|
|
265
|
+
`);
|
|
266
|
+
}
|
|
267
|
+
creationStack.add(serviceMeta.token);
|
|
268
|
+
try {
|
|
269
|
+
const componentInstance = _vue.getCurrentInstance.call(void 0, );
|
|
270
|
+
const instance = new serviceClass();
|
|
271
|
+
if (componentInstance) {
|
|
272
|
+
bindLifecycleHooks(instance);
|
|
273
|
+
}
|
|
274
|
+
return instance;
|
|
275
|
+
} finally {
|
|
276
|
+
creationStack.delete(serviceMeta.token);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
function exposeToContext(serviceInstance) {
|
|
280
|
+
const serviceMeta = getServiceMetadata(serviceInstance);
|
|
281
|
+
_vue.provide.call(void 0, serviceMeta.token, serviceInstance);
|
|
282
|
+
}
|
|
283
|
+
function obtainFromContext(serviceClass) {
|
|
284
|
+
const serviceMeta = getServiceMetadata(serviceClass);
|
|
285
|
+
return _vue.inject.call(void 0, serviceMeta.token);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
// src/core/plugin.ts
|
|
289
|
+
|
|
290
|
+
var iocraft = (_app, options) => {
|
|
291
|
+
if (_optionalChain([options, 'optionalAccess', _3 => _3.router])) {
|
|
292
|
+
RootRegistry.set(getServiceMetadata(Nav).token, generateRouterFacade(options.router));
|
|
293
|
+
}
|
|
294
|
+
if (_optionalChain([options, 'optionalAccess', _4 => _4.eagerLoad])) {
|
|
295
|
+
options.eagerLoad.forEach((service) => {
|
|
296
|
+
const serviceMeta = getServiceMetadata(service);
|
|
297
|
+
if (!RootRegistry.has(serviceMeta.token)) {
|
|
298
|
+
RootRegistry.set(serviceMeta.token, new service());
|
|
299
|
+
}
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
};
|
|
303
|
+
|
|
304
|
+
// src/core/register.ts
|
|
305
|
+
function Register() {
|
|
306
|
+
return function(constructor) {
|
|
307
|
+
if (_optionalChain([constructor, 'access', _5 => _5[SERVICE_METADATA], 'optionalAccess', _6 => _6.token])) {
|
|
308
|
+
return constructor;
|
|
309
|
+
}
|
|
310
|
+
constructor[SERVICE_METADATA] = {
|
|
311
|
+
token: /* @__PURE__ */ Symbol(`[IOCRAFT]: Service - ${constructor.name || "Anonymous"}`)
|
|
312
|
+
};
|
|
313
|
+
return constructor;
|
|
314
|
+
};
|
|
315
|
+
}
|
|
316
|
+
|
|
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
|
+
|
|
365
|
+
|
|
366
|
+
|
|
367
|
+
|
|
368
|
+
|
|
369
|
+
|
|
370
|
+
|
|
371
|
+
|
|
372
|
+
|
|
373
|
+
exports.createFacadeObj = createFacadeObj; exports.generateRouterFacade = generateRouterFacade; exports.getServiceMetadata = getServiceMetadata; exports.hasService = hasService; exports.unRegister = unRegister; exports.clearRegistry = clearRegistry; exports.obtain = obtain; exports.obtainRaw = obtainRaw; exports.obtainInstance = obtainInstance; exports.obtainRawInstance = obtainRawInstance; exports.exposeToContext = exposeToContext; exports.obtainFromContext = obtainFromContext; exports.Nav = Nav; exports.Store = Store; exports.iocraft = iocraft; exports.Register = Register;
|
|
374
|
+
//# sourceMappingURL=chunk-NJJ6QKII.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/iocraft/iocraft/packages/iocraft/dist/chunk-NJJ6QKII.cjs","../src/core/facade.ts","../src/core/obtainers.ts","../src/core/internals.ts","../src/core/utils.ts","../src/core/plugin.ts","../src/core/register.ts","../src/helpers/Nav.service.ts","../src/helpers/store.ts"],"names":[],"mappings":"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","file":"/home/runner/work/iocraft/iocraft/packages/iocraft/dist/chunk-NJJ6QKII.cjs","sourcesContent":[null,"import type { Router } from 'vue-router';\nimport type { ServiceConstructor } from './types';\n\nfunction hasKey(obj: Record<PropertyKey, unknown>, key: PropertyKey): boolean {\n if (typeof key === 'symbol') {\n return Object.getOwnPropertySymbols(obj).includes(key);\n }\n return Object.hasOwn(obj, key);\n}\n\nconst NativeKeys = new Set([\n ...Object.getOwnPropertyNames(Object.prototype),\n ...Object.getOwnPropertySymbols(Object.prototype),\n ...Object.getOwnPropertyNames(Function.prototype),\n ...Object.getOwnPropertySymbols(Function.prototype),\n ...Object.getOwnPropertyNames(Array.prototype),\n ...Object.getOwnPropertySymbols(Array.prototype),\n]);\n\nfunction addInstanceProperties<T extends object>(\n serviceInstance: InstanceType<ServiceConstructor<T>>,\n targetObj: Record<PropertyKey, unknown>\n) {\n const ownKeys = [...Object.getOwnPropertyNames(serviceInstance), ...Object.getOwnPropertySymbols(serviceInstance)];\n\n for (const key of ownKeys) {\n if (hasKey(targetObj, key)) continue;\n\n const descriptor = Object.getOwnPropertyDescriptor(serviceInstance, key)!;\n\n if (typeof descriptor.value === 'function') {\n console.warn(`[IOCRAFT]: Instance method \"${String(key)}\" found as own property. Consider moving to prototype.`);\n continue;\n }\n\n if (descriptor.get || descriptor.set) {\n continue;\n }\n\n Object.defineProperty(targetObj, key, {\n get() {\n return serviceInstance[key as keyof typeof serviceInstance];\n },\n set(v) {\n serviceInstance[key as keyof typeof serviceInstance] = v;\n },\n enumerable: true,\n configurable: true,\n });\n }\n}\n\nfunction addPrototypeProperties<T extends object>(\n serviceInstance: InstanceType<ServiceConstructor<T>>,\n targetObj: Record<PropertyKey, unknown>\n) {\n let currentProto = Object.getPrototypeOf(serviceInstance);\n\n while (currentProto && currentProto !== Object.prototype) {\n const protoKeys = [...Object.getOwnPropertyNames(currentProto), ...Object.getOwnPropertySymbols(currentProto)];\n\n for (const key of protoKeys) {\n if (hasKey(targetObj, key)) continue;\n\n if (NativeKeys.has(key)) continue;\n\n const descriptor = Object.getOwnPropertyDescriptor(currentProto, key)!;\n\n if (descriptor.get || descriptor.set) {\n Object.defineProperty(targetObj, key, {\n get: descriptor.get ? () => descriptor.get!.call(serviceInstance) : undefined,\n set: descriptor.set ? (v: any) => descriptor.set!.call(serviceInstance, v) : undefined,\n enumerable: true,\n configurable: true,\n });\n } else if (typeof descriptor.value === 'function') {\n targetObj[key] = descriptor.value.bind(serviceInstance);\n }\n }\n\n currentProto = Object.getPrototypeOf(currentProto);\n }\n}\n\n/**\n * CREATES A FACADE OBJECT\n *\n * @export\n * @template {object} T\n * @param {ServiceConstructor<T>} serviceClass\n * @param {InstanceType<ServiceConstructor<T>>} serviceInstance\n * @returns {{}}\n */\nexport function createFacadeObj<T extends object>(serviceInstance: object) {\n const targetObj = {};\n\n addInstanceProperties(serviceInstance, targetObj);\n addPrototypeProperties(serviceInstance, targetObj);\n return targetObj as T;\n}\n\nexport function generateRouterFacade(router: Router): Record<string, any> {\n return {\n get path() {\n return router.currentRoute.value.path;\n },\n get name() {\n return router.currentRoute.value.name;\n },\n get params() {\n return router.currentRoute.value.params;\n },\n get query() {\n return router.currentRoute.value.query;\n },\n get hash() {\n return router.currentRoute.value.hash;\n },\n get fullPath() {\n return router.currentRoute.value.fullPath;\n },\n get matched() {\n return router.currentRoute.value.matched;\n },\n get meta() {\n return router.currentRoute.value.meta;\n },\n push: router.push.bind(router),\n replace: router.replace.bind(router),\n go: router.go.bind(router),\n back: router.back.bind(router),\n forward: router.forward.bind(router),\n resolve: router.resolve.bind(router),\n getRoutes: router.getRoutes.bind(router),\n hasRoute: router.hasRoute.bind(router),\n\n // Router guards\n beforeEach: router.beforeEach.bind(router),\n beforeResolve: router.beforeResolve.bind(router),\n afterEach: router.afterEach.bind(router),\n onError: router.onError.bind(router),\n\n // Dynamic routing\n addRoute: router.addRoute.bind(router),\n removeRoute: router.removeRoute.bind(router),\n clearRoutes: router.clearRoutes.bind(router),\n\n // State\n isReady: router.isReady.bind(router),\n get currentRoute() {\n return router.currentRoute;\n },\n };\n}\n","import { getCurrentInstance, inject, provide } from 'vue';\nimport { createFacadeObj } from './facade';\nimport { bindLifecycleHooks, creationStack, RootRegistry } from './internals';\nimport type { ServiceConstructor } from './types';\nimport { getServiceMetadata } from './utils';\n\n/**\n * obtain Facade of a global singleton service From Root Registry\n *\n * @export\n * @template {ServiceConstructor} T\n * @param {T} serviceClass\n * @returns {InstanceType<T>}\n */\nexport function obtain<T extends ServiceConstructor>(serviceClass: T) {\n const serviceMeta = getServiceMetadata(serviceClass);\n\n if (RootRegistry.has(serviceMeta.token)) {\n const instance = RootRegistry.get(serviceMeta.token)!;\n return createFacadeObj<InstanceType<T>>(instance);\n }\n\n if (creationStack.has(serviceMeta.token)) {\n throw new Error(`[IocRaft] Circular dependency detected on: ${serviceClass.name}\\n`);\n }\n\n creationStack.add(serviceMeta.token);\n\n try {\n const instance = new serviceClass();\n RootRegistry.set(serviceMeta.token, instance);\n return createFacadeObj<InstanceType<T>>(instance);\n } finally {\n creationStack.delete(serviceMeta.token);\n }\n}\n\n/**\n * obtain a global singleton service From Root Registry\n *\n * @export\n * @template {ServiceConstructor} T\n * @param {T} serviceClass\n * @returns {InstanceType<T>}\n */\nexport function obtainRaw<T extends ServiceConstructor>(serviceClass: T) {\n const serviceMeta = getServiceMetadata(serviceClass);\n\n if (RootRegistry.has(serviceMeta.token)) {\n return RootRegistry.get(serviceMeta.token) as InstanceType<T>;\n }\n\n if (creationStack.has(serviceMeta.token)) {\n throw new Error(`[IocRaft] Circular dependency detected on: ${serviceClass.name}\\n`);\n }\n\n creationStack.add(serviceMeta.token);\n\n try {\n const instance = new serviceClass();\n RootRegistry.set(serviceMeta.token, instance);\n return instance as InstanceType<T>;\n } finally {\n creationStack.delete(serviceMeta.token);\n }\n}\n\n/**\n * obtain a facade of a new Service Instance\n *\n * @export\n * @template {ServiceConstructor} T\n * @param {T} serviceClass\n * @returns {InstanceType<T>}\n */\nexport function obtainInstance<T extends ServiceConstructor>(serviceClass: T) {\n const serviceMeta = getServiceMetadata(serviceClass);\n\n if (creationStack.has(serviceMeta.token)) {\n throw new Error(`[IocRaft] Circular dependency detected on: ${serviceClass.name}\\n`);\n }\n\n creationStack.add(serviceMeta.token);\n\n try {\n const componentInstance = getCurrentInstance();\n const instance = new serviceClass();\n\n if (componentInstance) {\n bindLifecycleHooks(instance);\n }\n\n return createFacadeObj<InstanceType<T>>(instance);\n } finally {\n creationStack.delete(serviceMeta.token);\n }\n}\n\n\n\n\n\n/**\n * obtain a new Service Instance\n *\n * @export\n * @template {ServiceConstructor} T\n * @param {T} serviceClass\n * @returns {InstanceType<T>}\n */\nexport function obtainRawInstance<T extends ServiceConstructor>(serviceClass: T) {\n const serviceMeta = getServiceMetadata(serviceClass);\n\n if (creationStack.has(serviceMeta.token)) {\n throw new Error(`[IocRaft] Circular dependency detected on: ${serviceClass.name}\\n`);\n }\n\n creationStack.add(serviceMeta.token);\n\n try {\n const componentInstance = getCurrentInstance();\n const instance = new serviceClass();\n\n if (componentInstance) {\n bindLifecycleHooks(instance);\n }\n return instance as InstanceType<T>;\n } finally {\n creationStack.delete(serviceMeta.token);\n }\n}\n\n\n\n/**\n * Expose a service to context\n *\n * @export\n * @template {ServiceConstructor} T\n * @param {InstanceType<T>} serviceInstance\n */\nexport function exposeToContext<T extends ServiceConstructor>(serviceInstance: InstanceType<T>) {\n const serviceMeta = getServiceMetadata(serviceInstance);\n provide(serviceMeta.token, serviceInstance);\n}\n\n/**\n * obtain A Service From Context\n *\n * @export\n * @template {ServiceConstructor} T\n * @param {T} serviceClass\n * @returns {*}\n */\nexport function obtainFromContext<T extends ServiceConstructor>(serviceClass: T) {\n const serviceMeta = getServiceMetadata(serviceClass);\n return inject<InstanceType<T>>(serviceMeta.token);\n}\n","import {\n onMounted,\n onUpdated,\n onUnmounted,\n onBeforeMount,\n onBeforeUpdate,\n onBeforeUnmount,\n onErrorCaptured,\n onRenderTracked,\n onRenderTriggered,\n onActivated,\n onDeactivated,\n onServerPrefetch,\n onScopeDispose,\n} from 'vue';\n\nexport const SERVICE_METADATA = Symbol('IOCRAFT_SERVICE_METADATA');\nexport const RootRegistry = new Map<symbol, object>();\nexport const creationStack = new Set<symbol>();\nconst lifecycleHookMap = {\n onMounted,\n onUpdated,\n onUnmounted,\n onBeforeMount,\n onBeforeUpdate,\n onBeforeUnmount,\n onErrorCaptured,\n onRenderTracked,\n onRenderTriggered,\n onActivated,\n onDeactivated,\n onServerPrefetch,\n onScopeDispose,\n} as const;\n\nexport function bindLifecycleHooks(instance: any) {\n for (const key in lifecycleHookMap) {\n const hookName = key as keyof typeof lifecycleHookMap;\n const vueHook = lifecycleHookMap[hookName];\n\n const handler = instance[hookName];\n\n if (typeof handler === 'function') {\n vueHook(handler.bind(instance));\n }\n }\n}\n","import { RootRegistry, SERVICE_METADATA } from './internals';\nimport type { ServiceConstructor, ServiceMetadata } from './types';\n\n/**\n * get service metadata\n *\n * @export\n * @param {(ServiceConstructor | object)} target\n * @returns {ServiceMetadata}\n */\nexport function getServiceMetadata(target: ServiceConstructor | object) {\n const ctor = typeof target === 'function' ? target : target.constructor;\n\n const meta = (ctor as any)[SERVICE_METADATA] as ServiceMetadata;\n if (!meta?.token) {\n throw new Error(`[IOCRAFT]: ${ctor?.name || 'Unknown'} is not decorated with @Register()`);\n }\n return meta;\n}\n\n\n/**\n * Check if a service is present in registry\n *\n * @export\n * @param {ServiceConstructor} serviceClass \n * @returns {*} \n */\nexport function hasService(serviceClass: ServiceConstructor) {\n const meta = getServiceMetadata(serviceClass);\n return RootRegistry.has(meta.token);\n}\n\n\n/**\n * unRegister (remove) a service from registry\n *\n * @export\n * @param {ServiceConstructor} serviceClass \n * @returns {*} \n */\nexport function unRegister<T extends InstanceType<ServiceConstructor>>(serviceInstance: T) {\n const meta = getServiceMetadata(serviceInstance);\n const exist = RootRegistry.has(meta.token);\n if (!exist) return false;\n\n\n if (typeof serviceInstance === 'object' &&\n serviceInstance !== null &&\n 'onUnRegister' in serviceInstance &&\n typeof serviceInstance.onUnRegister === 'function'\n ) {\n serviceInstance.onUnRegister()\n }\n\n return RootRegistry.delete(meta.token)\n}\n\n\n\n\n\n/**\n * clear service registry\n *\n * @export\n */\nexport function clearRegistry() {\n RootRegistry.clear()\n}","import { type FunctionPlugin } from 'vue';\nimport { Nav } from '../helpers';\nimport { generateRouterFacade } from './facade';\nimport { RootRegistry } from './internals';\nimport type { PluginOptions } from './types';\nimport { getServiceMetadata } from './utils';\n\nexport const iocraft: FunctionPlugin<[Partial<PluginOptions>?]> = (_app, options?: Partial<PluginOptions>) => {\n if (options?.router) {\n RootRegistry.set(getServiceMetadata(Nav).token, generateRouterFacade(options.router));\n }\n\n // Eagerly create Service instances\n if (options?.eagerLoad) {\n options.eagerLoad.forEach(service => {\n const serviceMeta = getServiceMetadata(service);\n\n if (!RootRegistry.has(serviceMeta.token)) {\n RootRegistry.set(serviceMeta.token, new service());\n }\n });\n }\n};\n","import { SERVICE_METADATA } from './internals';\nimport type { ServiceConstructor, ServiceMetadata } from './types';\n\n/**\n * Registers A Class as Service\n *\n * @export\n * @returns {<C extends ServiceConstructor>(constructor: C) => C}\n */\nexport function Register() {\n return function <C extends ServiceConstructor>(constructor: C) {\n if ((constructor as any)[SERVICE_METADATA]?.token) {\n return constructor;\n }\n\n // Add more metadata here if needed\n (constructor as any)[SERVICE_METADATA] = {\n token: Symbol(`[IOCRAFT]: Service - ${constructor.name || 'Anonymous'}`),\n } satisfies ServiceMetadata;\n\n return constructor;\n };\n}\n","import type { RouteLocationNormalizedGeneric, Router } from 'vue-router';\nimport { Register } from '../core';\n\nexport interface Nav\n extends\n Omit<Router, 'install' | 'options' | 'currentRoute'>,\n Pick<\n RouteLocationNormalizedGeneric,\n 'path' | 'name' | 'params' | 'query' | 'hash' | 'fullPath' | 'matched' | 'meta'\n > {}\n\n@Register()\nexport class Nav {}\n","import { reactive, computed, watch, watchEffect, type ComputedRef, type WatchStopHandle, toRaw } from \"vue\";\n\nexport function Store<T extends Record<string, any>>(initialState: T) {\n const state = reactive(initialState) as T;\n const initial = structuredClone(initialState);\n\n return class {\n readonly state = state;\n\n get snapshot(): T {\n return structuredClone(toRaw(state));\n }\n\n update(changes: Partial<T>): void {\n Object.assign(state, changes);\n }\n\n pick<K extends keyof T>(key: K): T[K] {\n return state[key]\n }\n\n compute<R>(fn: (state: T) => R): ComputedRef<R> {\n return computed(() => fn(state));\n }\n\n observe<K extends keyof T>(\n source: K,\n callback: (newValue: T[K], oldValue: T[K]) => void\n ): WatchStopHandle;\n\n observe<R>(\n source: (state: T) => R,\n callback: (newValue: R, oldValue: R) => void\n ): WatchStopHandle;\n\n observe<K extends keyof T, R>(\n source: K | ((state: T) => R),\n callback: (newValue: any, oldValue: any) => void\n ): WatchStopHandle {\n const getter = typeof source === 'function'\n ? () => source(state)\n : () => state[source as K];\n\n return watch(getter, callback);\n }\n\n effect(fn: (state: T) => void): WatchStopHandle {\n return watchEffect(() => fn(state));\n }\n\n reset(): void {\n Object.assign(state, structuredClone(initial));\n }\n };\n}\n\n"]}
|