@v-ibe/core 0.1.0
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/LICENSE +21 -0
- package/README.md +40 -0
- package/dist/DI/__tests__/scoped-container-dependencies.test.d.ts +1 -0
- package/dist/DI/bootstrap.d.ts +18 -0
- package/dist/DI/decorators/inject.d.ts +37 -0
- package/dist/DI/decorators/inject.js +45 -0
- package/dist/DI/decorators/service.d.ts +24 -0
- package/dist/DI/decorators/service.js +13 -0
- package/dist/DI/di-container.d.ts +53 -0
- package/dist/DI/di-container.js +158 -0
- package/dist/DI/lifecycle.d.ts +37 -0
- package/dist/DI/lifecycle.js +6 -0
- package/dist/DI/scoped-container.d.ts +68 -0
- package/dist/DI/scoped-container.js +193 -0
- package/dist/DI/service-metadata.d.ts +32 -0
- package/dist/DI/service-metadata.js +31 -0
- package/dist/DI/types.d.ts +4 -0
- package/dist/behaviors/__tests__/behavior-system.test.d.ts +1 -0
- package/dist/behaviors/behavior-manager.d.ts +60 -0
- package/dist/behaviors/behavior-manager.js +131 -0
- package/dist/behaviors/behavior-registry.d.ts +68 -0
- package/dist/behaviors/behavior-registry.js +105 -0
- package/dist/behaviors/constants.d.ts +16 -0
- package/dist/behaviors/constants.js +8 -0
- package/dist/behaviors/decorators.d.ts +87 -0
- package/dist/behaviors/decorators.js +46 -0
- package/dist/behaviors/index.d.ts +4 -0
- package/dist/components/__tests__/host.test.d.ts +1 -0
- package/dist/components/app-tree.d.ts +49 -0
- package/dist/components/app-tree.js +122 -0
- package/dist/components/base-component.d.ts +85 -0
- package/dist/components/base-component.js +438 -0
- package/dist/components/decorators/component.d.ts +27 -0
- package/dist/components/decorators/component.js +47 -0
- package/dist/components/decorators/prop.d.ts +14 -0
- package/dist/components/decorators/prop.js +37 -0
- package/dist/components/types.d.ts +26 -0
- package/dist/core.d.ts +23 -0
- package/dist/core.js +8 -0
- package/dist/custom-components/__tests__/for.test.d.ts +1 -0
- package/dist/custom-components/__tests__/show.test.d.ts +1 -0
- package/dist/custom-components/for.d.ts +58 -0
- package/dist/custom-components/for.js +313 -0
- package/dist/custom-components/index.d.ts +2 -0
- package/dist/custom-components/show.d.ts +78 -0
- package/dist/custom-components/show.js +88 -0
- package/dist/data-management/cache/cache-invalidate.decorator.d.ts +35 -0
- package/dist/data-management/cache/cache-invalidate.decorator.js +21 -0
- package/dist/data-management/cache/cache-metadata.d.ts +15 -0
- package/dist/data-management/cache/cache-provider.interface.d.ts +67 -0
- package/dist/data-management/cache/cache-tags.decorator.d.ts +52 -0
- package/dist/data-management/cache/cache-tags.decorator.js +13 -0
- package/dist/data-management/cache/cache-update.decorator.d.ts +28 -0
- package/dist/data-management/cache/cache-update.decorator.js +21 -0
- package/dist/data-management/cache/cache.decorator.d.ts +28 -0
- package/dist/data-management/cache/cache.decorator.js +13 -0
- package/dist/data-management/cache/index.d.ts +11 -0
- package/dist/data-management/cache/local-storage-cache.d.ts +40 -0
- package/dist/data-management/cache/local-storage-cache.js +268 -0
- package/dist/data-management/cache/memory-cache.d.ts +37 -0
- package/dist/data-management/cache/memory-cache.js +149 -0
- package/dist/data-management/cache/session-storage-cache.d.ts +35 -0
- package/dist/data-management/cache/session-storage-cache.js +242 -0
- package/dist/data-management/cache/ttl.decorator.d.ts +31 -0
- package/dist/data-management/cache/ttl.decorator.js +34 -0
- package/dist/data-management/decorators/consume.d.ts +29 -0
- package/dist/data-management/decorators/consume.js +28 -0
- package/dist/data-management/decorators/id.d.ts +28 -0
- package/dist/data-management/decorators/id.js +19 -0
- package/dist/data-management/decorators/model.d.ts +48 -0
- package/dist/data-management/decorators/model.js +24 -0
- package/dist/data-management/decorators/prop.d.ts +43 -0
- package/dist/data-management/decorators/prop.js +32 -0
- package/dist/data-management/index.d.ts +13 -0
- package/dist/data-management/store/json-to-model.d.ts +45 -0
- package/dist/data-management/store/json-to-model.js +36 -0
- package/dist/data-management/store/store.d.ts +108 -0
- package/dist/data-management/store/store.js +207 -0
- package/dist/data-management/store/types.d.ts +53 -0
- package/dist/events-handler/decorators/emit.d.ts +29 -0
- package/dist/events-handler/decorators/emit.js +51 -0
- package/dist/events-handler/event-decorators.d.ts +1 -0
- package/dist/events-handler/event-emitter.service.d.ts +21 -0
- package/dist/events-handler/event-emitter.service.js +85 -0
- package/dist/events-handler/event-types.d.ts +12 -0
- package/dist/index.d.ts +55 -0
- package/dist/index.js +121 -0
- package/dist/jsx/dynamic/__tests__/granular-array-renderer.test.d.ts +1 -0
- package/dist/jsx/dynamic/__tests__/jsx-array-rendering.test.d.ts +1 -0
- package/dist/jsx/dynamic/array-renderer.d.ts +2 -0
- package/dist/jsx/dynamic/array-renderer.js +133 -0
- package/dist/jsx/dynamic/child-renderer.d.ts +1 -0
- package/dist/jsx/dynamic/child-renderer.js +180 -0
- package/dist/jsx/dynamic/dom-utils.d.ts +5 -0
- package/dist/jsx/dynamic/dom-utils.js +22 -0
- package/dist/jsx/dynamic/granular-array-renderer.d.ts +16 -0
- package/dist/jsx/dynamic/granular-array-renderer.js +153 -0
- package/dist/jsx/dynamic/node-renderer.d.ts +2 -0
- package/dist/jsx/dynamic/props-handler.d.ts +3 -0
- package/dist/jsx/dynamic/props-handler.js +281 -0
- package/dist/jsx/dynamic/text-renderer.d.ts +2 -0
- package/dist/jsx/jsx-dev-runtime.d.ts +2 -0
- package/dist/jsx/jsx-runtime.d.ts +3 -0
- package/dist/jsx/types.d.ts +35 -0
- package/dist/jsx/types.js +4 -0
- package/dist/jsx-dev-runtime.d.ts +2 -0
- package/dist/jsx-dev-runtime.js +8 -0
- package/dist/jsx-runtime.d.ts +2 -0
- package/dist/jsx-runtime.js +11 -0
- package/dist/reactivity/__tests__/context-stack.test.d.ts +1 -0
- package/dist/reactivity/__tests__/nested-effects-untrack.test.d.ts +22 -0
- package/dist/reactivity/context-scope.d.ts +57 -0
- package/dist/reactivity/context-scope.js +35 -0
- package/dist/reactivity/decorators/__tests__/ctx-integration.test.d.ts +5 -0
- package/dist/reactivity/decorators/__tests__/ctx-loop.test.d.ts +10 -0
- package/dist/reactivity/decorators/__tests__/state-intelligent.test.d.ts +1 -0
- package/dist/reactivity/decorators/computed.d.ts +6 -0
- package/dist/reactivity/decorators/computed.js +17 -0
- package/dist/reactivity/decorators/create-event-decorator.d.ts +5 -0
- package/dist/reactivity/decorators/create-event-decorator.js +28 -0
- package/dist/reactivity/decorators/ctx.d.ts +9 -0
- package/dist/reactivity/decorators/ctx.js +91 -0
- package/dist/reactivity/decorators/effect.d.ts +9 -0
- package/dist/reactivity/decorators/effect.js +24 -0
- package/dist/reactivity/decorators/resource.d.ts +48 -0
- package/dist/reactivity/decorators/resource.js +20 -0
- package/dist/reactivity/decorators/state.d.ts +8 -0
- package/dist/reactivity/decorators/state.js +68 -0
- package/dist/reactivity/decorators/store.d.ts +6 -0
- package/dist/reactivity/decorators/store.js +25 -0
- package/dist/reactivity/phase-scheduler.d.ts +81 -0
- package/dist/reactivity/phase-scheduler.js +88 -0
- package/dist/reactivity/phase-scheduler.test.d.ts +1 -0
- package/dist/reactivity/reactive-cache.d.ts +21 -0
- package/dist/reactivity/reactive-cache.js +31 -0
- package/dist/reactivity/reactive-cache.test.d.ts +1 -0
- package/dist/reactivity/reactive-context.d.ts +152 -0
- package/dist/reactivity/reactive-context.js +184 -0
- package/dist/reactivity/signals/__tests__/composicion-automatica.test.d.ts +1 -0
- package/dist/reactivity/signals/__tests__/composite/nivel-1-estructura-basica.test.d.ts +1 -0
- package/dist/reactivity/signals/__tests__/composite/nivel-2-registro-subscribers.test.d.ts +1 -0
- package/dist/reactivity/signals/__tests__/composite/nivel-3-notificaciones-basicas.test.d.ts +1 -0
- package/dist/reactivity/signals/__tests__/composite/nivel-4-comparacion-valores.test.d.ts +1 -0
- package/dist/reactivity/signals/__tests__/composite/nivel-5-tracking-automatico.test.d.ts +1 -0
- package/dist/reactivity/signals/__tests__/composite/nivel-6-anti-glitch.test.d.ts +1 -0
- package/dist/reactivity/signals/__tests__/composite/nivel-7-objetos-anidados.test.d.ts +1 -0
- package/dist/reactivity/signals/__tests__/composite/nivel-8-observable-array-support.test.d.ts +1 -0
- package/dist/reactivity/signals/__tests__/composite-shallow-tracking.test.d.ts +1 -0
- package/dist/reactivity/signals/__tests__/effect.test.d.ts +1 -0
- package/dist/reactivity/signals/__tests__/reactive-array/nivel-1-estructura-basica.test.d.ts +1 -0
- package/dist/reactivity/signals/__tests__/reactive-array/nivel-2-metodos-mutadores.test.d.ts +1 -0
- package/dist/reactivity/signals/__tests__/reactive-array/nivel-3-tracking-por-indice.test.d.ts +1 -0
- package/dist/reactivity/signals/__tests__/reactive-array/nivel-4-tracking-length.test.d.ts +1 -0
- package/dist/reactivity/signals/__tests__/reactive-array/nivel-5-tracking-mutation.test.d.ts +1 -0
- package/dist/reactivity/signals/__tests__/reactive-array/nivel-6-metodos-no-mutadores.test.d.ts +1 -0
- package/dist/reactivity/signals/__tests__/reactive-array/nivel-7-composicion-bidireccional.test.d.ts +1 -0
- package/dist/reactivity/signals/__tests__/reactive-array/nivel-8-proxies.test.d.ts +1 -0
- package/dist/reactivity/signals/__tests__/reactive-array/nivel-9-derived-cache-optimization.test.d.ts +1 -0
- package/dist/reactivity/signals/__tests__/resource.test.d.ts +1 -0
- package/dist/reactivity/signals/__tests__/signal.test.d.ts +1 -0
- package/dist/reactivity/signals/array-strategies.d.ts +120 -0
- package/dist/reactivity/signals/array-strategies.js +261 -0
- package/dist/reactivity/signals/composite.d.ts +89 -0
- package/dist/reactivity/signals/composite.js +145 -0
- package/dist/reactivity/signals/computed.d.ts +61 -0
- package/dist/reactivity/signals/computed.js +107 -0
- package/dist/reactivity/signals/computed.test.d.ts +1 -0
- package/dist/reactivity/signals/derived.d.ts +10 -0
- package/dist/reactivity/signals/derived.js +24 -0
- package/dist/reactivity/signals/effect.d.ts +27 -0
- package/dist/reactivity/signals/effect.js +46 -0
- package/dist/reactivity/signals/event.d.ts +9 -0
- package/dist/reactivity/signals/event.js +15 -0
- package/dist/reactivity/signals/reactive-array.d.ts +133 -0
- package/dist/reactivity/signals/reactive-array.js +490 -0
- package/dist/reactivity/signals/reactive-proxy.d.ts +54 -0
- package/dist/reactivity/signals/reactive-proxy.js +299 -0
- package/dist/reactivity/signals/reactive-tracking.test.d.ts +1 -0
- package/dist/reactivity/signals/resource.d.ts +9 -0
- package/dist/reactivity/signals/resource.js +58 -0
- package/dist/reactivity/signals/signal.d.ts +39 -0
- package/dist/reactivity/signals/signal.js +56 -0
- package/dist/reactivity/signals/subscription-management.test.d.ts +1 -0
- package/dist/reactivity/types.d.ts +12 -0
- package/dist/router/__tests__/link-behavior-active-class.test.d.ts +1 -0
- package/dist/router/__tests__/loop-detector.test.d.ts +1 -0
- package/dist/router/__tests__/params-container-resolution.test.d.ts +1 -0
- package/dist/router/__tests__/router-generated-routes.test.d.ts +1 -0
- package/dist/router/__tests__/router-params-granular.test.d.ts +1 -0
- package/dist/router/__tests__/router-params-simple.test.d.ts +1 -0
- package/dist/router/__tests__/router-query-params.test.d.ts +1 -0
- package/dist/router/__tests__/router-route-candidates.test.d.ts +1 -0
- package/dist/router/__tests__/routeview-app-articles.test.d.ts +1 -0
- package/dist/router/__tests__/routeview-debug.test.d.ts +1 -0
- package/dist/router/__tests__/routeview-integration.test.d.ts +1 -0
- package/dist/router/__tests__/routeview-this.test.d.ts +1 -0
- package/dist/router/decorators/base-policy.d.ts +141 -0
- package/dist/router/decorators/base-policy.js +63 -0
- package/dist/router/decorators/index.d.ts +6 -0
- package/dist/router/decorators/params.d.ts +31 -0
- package/dist/router/decorators/params.js +97 -0
- package/dist/router/decorators/route-metadata.d.ts +11 -0
- package/dist/router/decorators/route-metadata.js +23 -0
- package/dist/router/decorators/route.d.ts +39 -0
- package/dist/router/decorators/route.js +7 -0
- package/dist/router/link.behavior.d.ts +87 -0
- package/dist/router/link.behavior.js +227 -0
- package/dist/router/policy-evaluator.d.ts +81 -0
- package/dist/router/policy-evaluator.js +209 -0
- package/dist/router/route-view.d.ts +56 -0
- package/dist/router/route-view.js +156 -0
- package/dist/router/router.d.ts +67 -0
- package/dist/router/router.js +308 -0
- package/dist/router/static-analysis/index.d.ts +37 -0
- package/dist/router/static-analysis/parser.d.ts +14 -0
- package/dist/router/static-analysis/parser.js +147 -0
- package/dist/router/static-analysis/scanner.d.ts +27 -0
- package/dist/router/static-analysis/scanner.js +91 -0
- package/dist/router/trie.d.ts +14 -0
- package/dist/router/trie.js +126 -0
- package/dist/router/trie.types.d.ts +36 -0
- package/dist/styles/base-style-sheet.d.ts +96 -0
- package/dist/styles/base-style-sheet.js +149 -0
- package/dist/styles/decorators/factories.d.ts +76 -0
- package/dist/styles/decorators/factories.js +11 -0
- package/dist/styles/decorators/keyframes.d.ts +238 -0
- package/dist/styles/decorators/keyframes.js +79 -0
- package/dist/styles/decorators/rule.d.ts +177 -0
- package/dist/styles/decorators/rule.js +72 -0
- package/dist/styles/decorators/scope.d.ts +66 -0
- package/dist/styles/decorators/scope.js +17 -0
- package/dist/styles/decorators/style.d.ts +1 -0
- package/dist/styles/decorators/style.js +20 -0
- package/dist/styles/decorators/useStyles.d.ts +5 -0
- package/dist/styles/decorators/useStyles.js +29 -0
- package/dist/styles/global-styles-registry.d.ts +72 -0
- package/dist/styles/global-styles-registry.js +155 -0
- package/dist/types.d.ts +1 -0
- package/dist/vite-plugins/__tests__/jsx-control-flow-transform.test.d.ts +1 -0
- package/dist/vite-plugins/index.d.ts +4 -0
- package/dist/vite-plugins/index.js +10 -0
- package/dist/vite-plugins/jsx-contextual.d.ts +7 -0
- package/dist/vite-plugins/jsx-contextual.js +53 -0
- package/dist/vite-plugins/jsx-control-flow-transform.d.ts +60 -0
- package/dist/vite-plugins/jsx-control-flow-transform.js +180 -0
- package/dist/vite-plugins/jsx-signals.d.ts +2 -0
- package/dist/vite-plugins/jsx-signals.js +124 -0
- package/dist/vite-plugins/router/route-generator-plugin.d.ts +63 -0
- package/dist/vite-plugins/router/route-generator-plugin.js +310 -0
- package/package.json +85 -0
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import { Service } from "../DI/decorators/service.js";
|
|
2
|
+
import { getPolicyRules } from "./decorators/base-policy.js";
|
|
3
|
+
import { reactiveContext } from "../reactivity/reactive-context.js";
|
|
4
|
+
var __create = Object.create;
|
|
5
|
+
var __defProp = Object.defineProperty;
|
|
6
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
7
|
+
var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : Symbol.for("Symbol." + name);
|
|
8
|
+
var __typeError = (msg) => {
|
|
9
|
+
throw TypeError(msg);
|
|
10
|
+
};
|
|
11
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
12
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
13
|
+
var __decoratorStart = (base) => [, , , __create(null)];
|
|
14
|
+
var __decoratorStrings = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
|
|
15
|
+
var __expectFn = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError("Function expected") : fn;
|
|
16
|
+
var __decoratorContext = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError("Already initialized") : fns.push(__expectFn(fn || null)) });
|
|
17
|
+
var __decoratorMetadata = (array, target) => __defNormalProp(target, __knownSymbol("metadata"), array[3]);
|
|
18
|
+
var __runInitializers = (array, flags, self, value) => {
|
|
19
|
+
for (var i = 0, fns = array[flags >> 1], n = fns && fns.length; i < n; i++) fns[i].call(self);
|
|
20
|
+
return value;
|
|
21
|
+
};
|
|
22
|
+
var __decorateElement = (array, flags, name, decorators, target, extra) => {
|
|
23
|
+
var it, done, ctx, k = flags & 7, p = false;
|
|
24
|
+
var j = 0;
|
|
25
|
+
var extraInitializers = array[j] || (array[j] = []);
|
|
26
|
+
var desc = k && (target = target.prototype, k < 5 && (k > 3 || !p) && __getOwnPropDesc(target, name));
|
|
27
|
+
__name(target, name);
|
|
28
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
29
|
+
ctx = __decoratorContext(k, name, done = {}, array[3], extraInitializers);
|
|
30
|
+
it = (0, decorators[i])(target, ctx), done._ = 1;
|
|
31
|
+
__expectFn(it) && (target = it);
|
|
32
|
+
}
|
|
33
|
+
return __decoratorMetadata(array, target), desc && __defProp(target, name, desc), p ? k ^ 4 ? extra : desc : target;
|
|
34
|
+
};
|
|
35
|
+
var _PolicyEvaluator_decorators, _init;
|
|
36
|
+
_PolicyEvaluator_decorators = [Service];
|
|
37
|
+
class PolicyEvaluator {
|
|
38
|
+
/**
|
|
39
|
+
* Evalúa una instancia de política ejecutando sus reglas decoradas en orden.
|
|
40
|
+
*
|
|
41
|
+
* @param policyInstance La instancia de la política a evaluar
|
|
42
|
+
* @param signal Optional AbortSignal para cancelar la evaluación
|
|
43
|
+
* @returns Una decisión sobre qué hacer con la navegación
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```typescript
|
|
47
|
+
* const decision = await evaluator.evaluate(authPolicyInstance);
|
|
48
|
+
*
|
|
49
|
+
* if (decision.type === 'skip') {
|
|
50
|
+
* // Esta política no opina, intentar la siguiente
|
|
51
|
+
* } else if (decision.type === 'allow') {
|
|
52
|
+
* // Permitir la navegación
|
|
53
|
+
* } else if (decision.type === 'block') {
|
|
54
|
+
* // Bloquear la navegación
|
|
55
|
+
* }
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
async evaluate(policyInstance, signal) {
|
|
59
|
+
const rules = getPolicyRules(policyInstance.constructor);
|
|
60
|
+
if (rules.length === 0) {
|
|
61
|
+
return {
|
|
62
|
+
type: "skip",
|
|
63
|
+
matched: false
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
for (const rule of rules) {
|
|
67
|
+
if (signal?.aborted) {
|
|
68
|
+
return {
|
|
69
|
+
type: "block",
|
|
70
|
+
matched: false
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
try {
|
|
74
|
+
const result = rule.handler.call(policyInstance);
|
|
75
|
+
const resolvedResult = await Promise.resolve(result);
|
|
76
|
+
if (!resolvedResult) {
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
if (rule.type === "skip") {
|
|
80
|
+
return {
|
|
81
|
+
type: "skip",
|
|
82
|
+
matched: true,
|
|
83
|
+
matchedRule: rule.methodName
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
type: rule.type,
|
|
88
|
+
matched: true,
|
|
89
|
+
matchedRule: rule.methodName
|
|
90
|
+
};
|
|
91
|
+
} catch (error) {
|
|
92
|
+
console.error(
|
|
93
|
+
`Error in policy rule '${String(rule.methodName)}':`,
|
|
94
|
+
error
|
|
95
|
+
);
|
|
96
|
+
return {
|
|
97
|
+
type: "block",
|
|
98
|
+
matched: true,
|
|
99
|
+
matchedRule: rule.methodName
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return {
|
|
104
|
+
type: "skip",
|
|
105
|
+
matched: false
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Evalúa una cadena de políticas en orden hasta que una tome una decisión.
|
|
110
|
+
*
|
|
111
|
+
* Este método implementa la composición de políticas:
|
|
112
|
+
* - Si una política retorna 'skip' (o ninguna regla coincide), pasa a la siguiente
|
|
113
|
+
* - Si una política retorna 'allow', 'block', o 'redirect', se detiene y retorna esa decisión
|
|
114
|
+
* - Si todas las políticas hacen skip, retorna la decisión por defecto
|
|
115
|
+
*
|
|
116
|
+
* @param policyInstances Array de instancias de políticas a evaluar en orden
|
|
117
|
+
* @param defaultDecision La decisión a tomar si todas las políticas hacen skip (default: allow)
|
|
118
|
+
* @param signal Optional AbortSignal para cancelar la evaluación
|
|
119
|
+
* @returns La decisión tomada por la primera política que no hizo skip
|
|
120
|
+
*
|
|
121
|
+
* @example
|
|
122
|
+
* ```typescript
|
|
123
|
+
* const decision = await evaluator.evaluateChain([
|
|
124
|
+
* authPolicyInstance,
|
|
125
|
+
* featureFlagPolicyInstance,
|
|
126
|
+
* rolePolicyInstance
|
|
127
|
+
* ]);
|
|
128
|
+
* ```
|
|
129
|
+
*/
|
|
130
|
+
async evaluateChain(policyInstances, defaultDecision = "allow", signal) {
|
|
131
|
+
console.log(`[PolicyEvaluator] Evaluating chain of ${policyInstances.length} policies`);
|
|
132
|
+
for (const policyInstance of policyInstances) {
|
|
133
|
+
const policyName = policyInstance.constructor.name;
|
|
134
|
+
console.log(`[PolicyEvaluator] Evaluating policy: ${policyName}`);
|
|
135
|
+
if (signal?.aborted) {
|
|
136
|
+
console.log("[PolicyEvaluator] Signal aborted, stopping chain evaluation");
|
|
137
|
+
return {
|
|
138
|
+
type: "block",
|
|
139
|
+
matched: false
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
const decision = await this.evaluate(policyInstance, signal);
|
|
143
|
+
console.log(`[PolicyEvaluator] Policy ${policyName} decision: ${decision.type}${decision.matched ? ` (matched rule: ${String(decision.matchedRule)})` : ""}`);
|
|
144
|
+
if (decision.type !== "skip") {
|
|
145
|
+
console.log(`[PolicyEvaluator] Chain stopped at policy ${policyName} with decision: ${decision.type}`);
|
|
146
|
+
return decision;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
console.log(`[PolicyEvaluator] All policies skipped, using default decision: ${defaultDecision}`);
|
|
150
|
+
return {
|
|
151
|
+
type: defaultDecision,
|
|
152
|
+
matched: false
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Evalúa una lista de candidatos y retorna el primero que pase las policies.
|
|
157
|
+
*
|
|
158
|
+
* Este método maneja:
|
|
159
|
+
* - Candidatos sin policies (permitir por defecto)
|
|
160
|
+
* - Instanciación de policies desde el DI container
|
|
161
|
+
* - Inyección de metadata
|
|
162
|
+
* - Evaluación secuencial hasta encontrar un allow
|
|
163
|
+
*
|
|
164
|
+
* @param candidates Lista de candidatos a evaluar
|
|
165
|
+
* @param signal Optional AbortSignal para cancelar
|
|
166
|
+
* @returns Decisión con el candidato ganador o block/redirect
|
|
167
|
+
*/
|
|
168
|
+
async evaluateCandidates(candidates, signal) {
|
|
169
|
+
for (const candidate of candidates) {
|
|
170
|
+
if (signal?.aborted) {
|
|
171
|
+
return { type: "block", matched: false };
|
|
172
|
+
}
|
|
173
|
+
if (!candidate.policies || candidate.policies.length === 0) {
|
|
174
|
+
console.log(`[PolicyEvaluator] No policies for ${candidate.path}, allowing by default`);
|
|
175
|
+
return {
|
|
176
|
+
type: "allow",
|
|
177
|
+
matched: true,
|
|
178
|
+
candidate
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
const policyInstances = candidate.policies.map((PolicyClass) => {
|
|
182
|
+
const instance = this.__container.get(PolicyClass);
|
|
183
|
+
if (candidate.metadata) {
|
|
184
|
+
instance.__routeMetadata = candidate.metadata;
|
|
185
|
+
}
|
|
186
|
+
return instance;
|
|
187
|
+
});
|
|
188
|
+
const decision = await reactiveContext.untrack(async () => {
|
|
189
|
+
return await this.evaluateChain(policyInstances, "allow", signal);
|
|
190
|
+
});
|
|
191
|
+
if (decision.type === "allow") {
|
|
192
|
+
return {
|
|
193
|
+
...decision,
|
|
194
|
+
candidate
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
if (decision.type === "redirect") {
|
|
198
|
+
return decision;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
return { type: "block", matched: false };
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
_init = __decoratorStart();
|
|
205
|
+
PolicyEvaluator = __decorateElement(_init, 0, "PolicyEvaluator", _PolicyEvaluator_decorators, PolicyEvaluator);
|
|
206
|
+
__runInitializers(_init, 1, PolicyEvaluator);
|
|
207
|
+
export {
|
|
208
|
+
PolicyEvaluator
|
|
209
|
+
};
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { Router } from './router';
|
|
2
|
+
import { BaseComponent } from '../components/base-component';
|
|
3
|
+
import { IResource } from '../reactivity/signals/resource';
|
|
4
|
+
import { PolicyEvaluator } from './policy-evaluator';
|
|
5
|
+
import { RouteCandidate } from './trie.types';
|
|
6
|
+
export declare class RouteView extends BaseComponent {
|
|
7
|
+
router: Router;
|
|
8
|
+
policyEvaluator: PolicyEvaluator;
|
|
9
|
+
routeSlot?: string;
|
|
10
|
+
navigationLevel: number;
|
|
11
|
+
/**
|
|
12
|
+
* Contexto que mantiene el historial de slots desde la raíz hasta el nivel actual.
|
|
13
|
+
* Cada RouteView agrega su slot al array, preservando el historial de los padres.
|
|
14
|
+
*
|
|
15
|
+
* Ejemplo: ['@main', '@sidebar', '@panel']
|
|
16
|
+
*
|
|
17
|
+
* Los componentes pueden acceder a este array para saber:
|
|
18
|
+
* - En qué slot se renderizaron (último elemento)
|
|
19
|
+
* - Toda la cadena de slots desde la raíz
|
|
20
|
+
*/
|
|
21
|
+
slotPath: string[];
|
|
22
|
+
/**
|
|
23
|
+
* Contexto que provee el patrón de ruta base desde la cual se renderiza este nivel.
|
|
24
|
+
* Los componentes y behaviors hijos pueden usar esta ruta base para resolver rutas relativas.
|
|
25
|
+
*
|
|
26
|
+
* Se actualiza reactivamente cuando cambian los candidatos de este nivel.
|
|
27
|
+
* Los hijos heredan este valor de forma reactiva (señal derivada).
|
|
28
|
+
*
|
|
29
|
+
* Ejemplo: Si este RouteView renderiza "/store/:storeId", los links hijos
|
|
30
|
+
* que usen "sales" se resolverán como "/store/:storeId/sales" (con params resueltos)
|
|
31
|
+
*/
|
|
32
|
+
routeBasePath: string;
|
|
33
|
+
/**
|
|
34
|
+
* Computed que retorna los candidatos para este nivel de navegación,
|
|
35
|
+
* filtrados por el slot especificado en la prop routeSlot.
|
|
36
|
+
*
|
|
37
|
+
* Solo se re-ejecuta cuando cambian los candidatos de ESTE nivel específico.
|
|
38
|
+
* Esto es granularidad perfecta: cambios en otros niveles NO afectan este computed.
|
|
39
|
+
*/
|
|
40
|
+
get levelCandidates(): readonly RouteCandidate[];
|
|
41
|
+
/**
|
|
42
|
+
* Effect que sincroniza routeBasePath con los candidatos actuales.
|
|
43
|
+
* Se ejecuta automáticamente cuando cambian los candidatos de este nivel.
|
|
44
|
+
*
|
|
45
|
+
* Si hay candidatos, actualiza routeBasePath con el path del primer candidato.
|
|
46
|
+
* Si no hay candidatos, mantiene el valor actual (que puede ser '/' o heredado).
|
|
47
|
+
*/
|
|
48
|
+
private syncRouteBasePath;
|
|
49
|
+
/**
|
|
50
|
+
* Resource que carga el componente asociado
|
|
51
|
+
* SOLO cuando cambia el segmento de este nivel
|
|
52
|
+
* Evalúa policies de todos los candidatos y toma el primero que pase
|
|
53
|
+
*/
|
|
54
|
+
componentClass: IResource<any>;
|
|
55
|
+
view(): any;
|
|
56
|
+
}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { Fragment } from "../jsx/types.js";
|
|
2
|
+
import { Component } from "../components/decorators/component.js";
|
|
3
|
+
import { Inject } from "../DI/decorators/inject.js";
|
|
4
|
+
import { Router } from "./router.js";
|
|
5
|
+
import { BaseComponent } from "../components/base-component.js";
|
|
6
|
+
import { Ctx } from "../reactivity/decorators/ctx.js";
|
|
7
|
+
import { Prop } from "../components/decorators/prop.js";
|
|
8
|
+
import { Resource } from "../reactivity/decorators/resource.js";
|
|
9
|
+
import { Computed } from "../reactivity/decorators/computed.js";
|
|
10
|
+
import { Effect } from "../reactivity/decorators/effect.js";
|
|
11
|
+
import { Show } from "../custom-components/show.js";
|
|
12
|
+
import { PolicyEvaluator } from "./policy-evaluator.js";
|
|
13
|
+
var __create = Object.create;
|
|
14
|
+
var __defProp = Object.defineProperty;
|
|
15
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
16
|
+
var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : Symbol.for("Symbol." + name);
|
|
17
|
+
var __typeError = (msg) => {
|
|
18
|
+
throw TypeError(msg);
|
|
19
|
+
};
|
|
20
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
21
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
22
|
+
var __decoratorStart = (base) => [, , , __create(base?.[__knownSymbol("metadata")] ?? null)];
|
|
23
|
+
var __decoratorStrings = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"];
|
|
24
|
+
var __expectFn = (fn) => fn !== void 0 && typeof fn !== "function" ? __typeError("Function expected") : fn;
|
|
25
|
+
var __decoratorContext = (kind, name, done, metadata, fns) => ({ kind: __decoratorStrings[kind], name, metadata, addInitializer: (fn) => done._ ? __typeError("Already initialized") : fns.push(__expectFn(fn || null)) });
|
|
26
|
+
var __decoratorMetadata = (array, target) => __defNormalProp(target, __knownSymbol("metadata"), array[3]);
|
|
27
|
+
var __runInitializers = (array, flags, self, value) => {
|
|
28
|
+
for (var i = 0, fns = array[flags >> 1], n = fns && fns.length; i < n; i++)
|
|
29
|
+
flags & 1 ? fns[i].call(self) : value = fns[i].call(self, value);
|
|
30
|
+
return value;
|
|
31
|
+
};
|
|
32
|
+
var __decorateElement = (array, flags, name, decorators, target, extra) => {
|
|
33
|
+
var fn, it, done, ctx, access, k = flags & 7, s = !!(flags & 8), p = !!(flags & 16);
|
|
34
|
+
var j = k > 3 ? array.length + 1 : k ? s ? 1 : 2 : 0, key = __decoratorStrings[k + 5];
|
|
35
|
+
var initializers = k > 3 && (array[j - 1] = []), extraInitializers = array[j] || (array[j] = []);
|
|
36
|
+
var desc = k && (!p && !s && (target = target.prototype), k < 5 && (k > 3 || !p) && __getOwnPropDesc(k < 4 ? target : { get [name]() {
|
|
37
|
+
return __privateGet(this, extra);
|
|
38
|
+
}, set [name](x) {
|
|
39
|
+
return __privateSet(this, extra, x);
|
|
40
|
+
} }, name));
|
|
41
|
+
k ? p && k < 4 && __name(extra, (k > 2 ? "set " : k > 1 ? "get " : "") + name) : __name(target, name);
|
|
42
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
43
|
+
ctx = __decoratorContext(k, name, done = {}, array[3], extraInitializers);
|
|
44
|
+
if (k) {
|
|
45
|
+
ctx.static = s, ctx.private = p, access = ctx.access = { has: p ? (x) => __privateIn(target, x) : (x) => name in x };
|
|
46
|
+
if (k ^ 3)
|
|
47
|
+
access.get = p ? (x) => (k ^ 1 ? __privateGet : __privateMethod)(x, target, k ^ 4 ? extra : desc.get) : (x) => x[name];
|
|
48
|
+
if (k > 2)
|
|
49
|
+
access.set = p ? (x, y) => __privateSet(x, target, y, k ^ 4 ? extra : desc.set) : (x, y) => x[name] = y;
|
|
50
|
+
}
|
|
51
|
+
it = (0, decorators[i])(k ? k < 4 ? p ? extra : desc[key] : k > 4 ? void 0 : { get: desc.get, set: desc.set } : target, ctx), done._ = 1;
|
|
52
|
+
if (k ^ 4 || it === void 0)
|
|
53
|
+
__expectFn(it) && (k > 4 ? initializers.unshift(it) : k ? p ? extra = it : desc[key] = it : target = it);
|
|
54
|
+
else if (typeof it !== "object" || it === null)
|
|
55
|
+
__typeError("Object expected");
|
|
56
|
+
else
|
|
57
|
+
__expectFn(fn = it.get) && (desc.get = fn), __expectFn(fn = it.set) && (desc.set = fn), __expectFn(fn = it.init) && initializers.unshift(fn);
|
|
58
|
+
}
|
|
59
|
+
return k || __decoratorMetadata(array, target), desc && __defProp(target, name, desc), p ? k ^ 4 ? extra : desc : target;
|
|
60
|
+
};
|
|
61
|
+
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
62
|
+
var __privateIn = (member, obj) => Object(obj) !== obj ? __typeError('Cannot use the "in" operator on this value') : member.has(obj);
|
|
63
|
+
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
64
|
+
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
|
|
65
|
+
var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
|
|
66
|
+
var _componentClass_dec, _syncRouteBasePath_dec, _levelCandidates_dec, _routeBasePath_dec, _slotPath_dec, _navigationLevel_dec, _routeSlot_dec, _policyEvaluator_dec, _router_dec, _a, _RouteView_decorators, _init;
|
|
67
|
+
const EMPTY_ARRAY = [];
|
|
68
|
+
_RouteView_decorators = [Component()];
|
|
69
|
+
class RouteView extends (_a = BaseComponent, _router_dec = [Inject(Router)], _policyEvaluator_dec = [Inject(PolicyEvaluator)], _routeSlot_dec = [Prop], _navigationLevel_dec = [Ctx((v) => v === void 0 ? 0 : v + 1)], _slotPath_dec = [Ctx((parentSlots, self) => {
|
|
70
|
+
const slots = parentSlots ? [...parentSlots] : [];
|
|
71
|
+
if (self.routeSlot) {
|
|
72
|
+
slots.push(self.routeSlot);
|
|
73
|
+
}
|
|
74
|
+
return slots;
|
|
75
|
+
})], _routeBasePath_dec = [Ctx()], _levelCandidates_dec = [Computed], _syncRouteBasePath_dec = [Effect], _componentClass_dec = [Resource(async function(signal) {
|
|
76
|
+
try {
|
|
77
|
+
const candidates = this.levelCandidates;
|
|
78
|
+
if (!candidates || candidates.length === 0) {
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
const decision = await this.policyEvaluator.evaluateCandidates(candidates, signal);
|
|
82
|
+
if (!decision.candidate) {
|
|
83
|
+
console.log("[RouteView] No candidate passed policy evaluation");
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
const candidate = decision.candidate;
|
|
87
|
+
const module = await candidate.loader(signal);
|
|
88
|
+
if (module?.default) {
|
|
89
|
+
return module.default;
|
|
90
|
+
}
|
|
91
|
+
} catch (err) {
|
|
92
|
+
console.error("[RouteView] Error loading component:", err);
|
|
93
|
+
}
|
|
94
|
+
return null;
|
|
95
|
+
})], _a) {
|
|
96
|
+
constructor() {
|
|
97
|
+
super(...arguments);
|
|
98
|
+
__runInitializers(_init, 5, this);
|
|
99
|
+
this.router = __runInitializers(_init, 8, this), __runInitializers(_init, 11, this);
|
|
100
|
+
this.policyEvaluator = __runInitializers(_init, 12, this), __runInitializers(_init, 15, this);
|
|
101
|
+
this.routeSlot = __runInitializers(_init, 16, this), __runInitializers(_init, 19, this);
|
|
102
|
+
this.navigationLevel = __runInitializers(_init, 20, this), __runInitializers(_init, 23, this);
|
|
103
|
+
this.slotPath = __runInitializers(_init, 24, this), __runInitializers(_init, 27, this);
|
|
104
|
+
this.routeBasePath = __runInitializers(_init, 28, this, "/"), __runInitializers(_init, 31, this);
|
|
105
|
+
this.componentClass = __runInitializers(_init, 32, this), __runInitializers(_init, 35, this);
|
|
106
|
+
}
|
|
107
|
+
get levelCandidates() {
|
|
108
|
+
const level = this.navigationLevel;
|
|
109
|
+
const candidates = this.router.$routeCandidates[level];
|
|
110
|
+
if (candidates === void 0) {
|
|
111
|
+
return EMPTY_ARRAY;
|
|
112
|
+
}
|
|
113
|
+
if (!candidates || candidates.length === 0) {
|
|
114
|
+
return EMPTY_ARRAY;
|
|
115
|
+
}
|
|
116
|
+
const filtered = candidates.filter((candidate) => {
|
|
117
|
+
if (!this.routeSlot) {
|
|
118
|
+
return !candidate.slot;
|
|
119
|
+
}
|
|
120
|
+
return candidate.slot === this.routeSlot;
|
|
121
|
+
});
|
|
122
|
+
return filtered.length > 0 ? filtered : EMPTY_ARRAY;
|
|
123
|
+
}
|
|
124
|
+
syncRouteBasePath() {
|
|
125
|
+
const candidates = this.levelCandidates;
|
|
126
|
+
if (candidates && candidates.length > 0) {
|
|
127
|
+
this.routeBasePath = candidates[0].path;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
view() {
|
|
131
|
+
return /* @__PURE__ */ this.jsxs(Fragment, { children: [
|
|
132
|
+
/* @__PURE__ */ this.jsx(Show, { when: () => this.componentClass.state === "pending", children: () => /* @__PURE__ */ this.jsx("div", { children: "Cargando..." }) }),
|
|
133
|
+
/* @__PURE__ */ this.jsx(Show, { when: () => this.componentClass.state === "error", children: () => /* @__PURE__ */ this.jsxs("div", { children: [
|
|
134
|
+
"Error al cargar la página:",
|
|
135
|
+
" ",
|
|
136
|
+
() => this.componentClass.error
|
|
137
|
+
] }) }),
|
|
138
|
+
/* @__PURE__ */ this.jsx(Show, { when: () => this.componentClass.state === "ready", children: () => this.jsx(this.componentClass.get() ?? null, {}) })
|
|
139
|
+
] });
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
_init = __decoratorStart(_a);
|
|
143
|
+
__decorateElement(_init, 2, "levelCandidates", _levelCandidates_dec, RouteView);
|
|
144
|
+
__decorateElement(_init, 1, "syncRouteBasePath", _syncRouteBasePath_dec, RouteView);
|
|
145
|
+
__decorateElement(_init, 5, "router", _router_dec, RouteView);
|
|
146
|
+
__decorateElement(_init, 5, "policyEvaluator", _policyEvaluator_dec, RouteView);
|
|
147
|
+
__decorateElement(_init, 5, "routeSlot", _routeSlot_dec, RouteView);
|
|
148
|
+
__decorateElement(_init, 5, "navigationLevel", _navigationLevel_dec, RouteView);
|
|
149
|
+
__decorateElement(_init, 5, "slotPath", _slotPath_dec, RouteView);
|
|
150
|
+
__decorateElement(_init, 5, "routeBasePath", _routeBasePath_dec, RouteView);
|
|
151
|
+
__decorateElement(_init, 5, "componentClass", _componentClass_dec, RouteView);
|
|
152
|
+
RouteView = __decorateElement(_init, 0, "RouteView", _RouteView_decorators, RouteView);
|
|
153
|
+
__runInitializers(_init, 1, RouteView);
|
|
154
|
+
export {
|
|
155
|
+
RouteView
|
|
156
|
+
};
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { Trie } from './trie';
|
|
2
|
+
import { LifeCycle } from '../DI/lifecycle';
|
|
3
|
+
import { PolicyEvaluator } from './policy-evaluator';
|
|
4
|
+
import { Constructor } from '../DI/types';
|
|
5
|
+
import { RouteCandidate } from './trie.types';
|
|
6
|
+
/**
|
|
7
|
+
* Interfaz para rutas generadas por el plugin de Vite
|
|
8
|
+
*/
|
|
9
|
+
export interface GeneratedRoute {
|
|
10
|
+
id: string;
|
|
11
|
+
path: string;
|
|
12
|
+
className: string;
|
|
13
|
+
loader: (signal?: AbortSignal) => Promise<{
|
|
14
|
+
default: any;
|
|
15
|
+
}>;
|
|
16
|
+
metadata?: Record<string, any>;
|
|
17
|
+
policies?: Constructor<any>[];
|
|
18
|
+
slot?: string;
|
|
19
|
+
}
|
|
20
|
+
export declare class Router implements LifeCycle {
|
|
21
|
+
pathname: string;
|
|
22
|
+
search: string;
|
|
23
|
+
get currentPath(): string;
|
|
24
|
+
get activePatterns(): string[];
|
|
25
|
+
routeTrie: Trie;
|
|
26
|
+
policyEvaluator: PolicyEvaluator;
|
|
27
|
+
$params: Record<string, string>;
|
|
28
|
+
$queryParams: Record<string, string>;
|
|
29
|
+
$routeCandidates: RouteCandidate[][];
|
|
30
|
+
private hasInitialized;
|
|
31
|
+
private routesLoaded;
|
|
32
|
+
constructor();
|
|
33
|
+
onBootstrap(): Promise<void>;
|
|
34
|
+
private syncRouteParams;
|
|
35
|
+
private syncQueryParams;
|
|
36
|
+
private syncRouteCandidates;
|
|
37
|
+
/**
|
|
38
|
+
* Compara dos arrays de candidatos para determinar si son iguales
|
|
39
|
+
* Usa comparación por id para determinar identidad
|
|
40
|
+
*/
|
|
41
|
+
private candidatesAreEqual;
|
|
42
|
+
/**
|
|
43
|
+
* Fuerza la re-evaluación de todos los route candidates
|
|
44
|
+
* recalculando los candidatos desde el Trie.
|
|
45
|
+
*
|
|
46
|
+
* Esto hace que todos los RouteView detecten el cambio y re-ejecuten
|
|
47
|
+
* sus Resources, incluyendo la evaluación de policies.
|
|
48
|
+
*
|
|
49
|
+
* Útil después de cambios de estado que afectan autorización (ej: OAuth login)
|
|
50
|
+
*/
|
|
51
|
+
private revalidateRouteCandidates;
|
|
52
|
+
navigate(to: string, options?: {
|
|
53
|
+
revalidate?: boolean;
|
|
54
|
+
replace?: boolean;
|
|
55
|
+
external?: 'allow' | 'block' | 'native';
|
|
56
|
+
}): void;
|
|
57
|
+
/**
|
|
58
|
+
* Carga las rutas generadas por el plugin de Vite
|
|
59
|
+
* Intenta múltiples rutas posibles donde el archivo puede estar generado
|
|
60
|
+
*/
|
|
61
|
+
private loadGeneratedRoutes;
|
|
62
|
+
/**
|
|
63
|
+
* Registra un array de rutas generadas en el Trie
|
|
64
|
+
* @param routes Array de rutas generadas por el plugin
|
|
65
|
+
*/
|
|
66
|
+
registerGeneratedRoutes(routes: GeneratedRoute[]): void;
|
|
67
|
+
}
|