@yakuzaa/jade-runtime 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/dist/apis/audit_service.d.ts +43 -0
- package/dist/apis/audit_service.d.ts.map +1 -0
- package/dist/apis/audit_service.js +73 -0
- package/dist/apis/audit_service.js.map +1 -0
- package/dist/apis/auth_service.d.ts +51 -0
- package/dist/apis/auth_service.d.ts.map +1 -0
- package/dist/apis/auth_service.js +120 -0
- package/dist/apis/auth_service.js.map +1 -0
- package/dist/apis/console_api.d.ts +34 -0
- package/dist/apis/console_api.d.ts.map +1 -0
- package/dist/apis/console_api.js +90 -0
- package/dist/apis/console_api.js.map +1 -0
- package/dist/apis/datetime_api.d.ts +13 -0
- package/dist/apis/datetime_api.d.ts.map +1 -0
- package/dist/apis/datetime_api.js +89 -0
- package/dist/apis/datetime_api.js.map +1 -0
- package/dist/apis/http_client.d.ts +32 -0
- package/dist/apis/http_client.d.ts.map +1 -0
- package/dist/apis/http_client.js +83 -0
- package/dist/apis/http_client.js.map +1 -0
- package/dist/apis/permission_service.d.ts +18 -0
- package/dist/apis/permission_service.d.ts.map +1 -0
- package/dist/apis/permission_service.js +56 -0
- package/dist/apis/permission_service.js.map +1 -0
- package/dist/core/event_loop.d.ts +14 -0
- package/dist/core/event_loop.d.ts.map +1 -0
- package/dist/core/event_loop.js +60 -0
- package/dist/core/event_loop.js.map +1 -0
- package/dist/core/memory_manager.d.ts +43 -0
- package/dist/core/memory_manager.d.ts.map +1 -0
- package/dist/core/memory_manager.js +218 -0
- package/dist/core/memory_manager.js.map +1 -0
- package/dist/core/runtime.d.ts +18 -0
- package/dist/core/runtime.d.ts.map +1 -0
- package/dist/core/runtime.js +116 -0
- package/dist/core/runtime.js.map +1 -0
- package/dist/persistence/local_datastore.d.ts +34 -0
- package/dist/persistence/local_datastore.d.ts.map +1 -0
- package/dist/persistence/local_datastore.js +112 -0
- package/dist/persistence/local_datastore.js.map +1 -0
- package/dist/persistence/sync_manager.d.ts +49 -0
- package/dist/persistence/sync_manager.d.ts.map +1 -0
- package/dist/persistence/sync_manager.js +187 -0
- package/dist/persistence/sync_manager.js.map +1 -0
- package/dist/pwa/pwa_generator.d.ts +16 -0
- package/dist/pwa/pwa_generator.d.ts.map +1 -0
- package/dist/pwa/pwa_generator.js +107 -0
- package/dist/pwa/pwa_generator.js.map +1 -0
- package/dist/stdlib/matematica.d.ts +121 -0
- package/dist/stdlib/matematica.d.ts.map +1 -0
- package/dist/stdlib/matematica.js +250 -0
- package/dist/stdlib/matematica.js.map +1 -0
- package/dist/stdlib/moeda.d.ts +129 -0
- package/dist/stdlib/moeda.d.ts.map +1 -0
- package/dist/stdlib/moeda.js +212 -0
- package/dist/stdlib/moeda.js.map +1 -0
- package/dist/stdlib/texto.d.ts +101 -0
- package/dist/stdlib/texto.d.ts.map +1 -0
- package/dist/stdlib/texto.js +205 -0
- package/dist/stdlib/texto.js.map +1 -0
- package/dist/stdlib/xml.d.ts +77 -0
- package/dist/stdlib/xml.d.ts.map +1 -0
- package/dist/stdlib/xml.js +212 -0
- package/dist/stdlib/xml.js.map +1 -0
- package/dist/ui/binding.d.ts +22 -0
- package/dist/ui/binding.d.ts.map +1 -0
- package/dist/ui/binding.js +62 -0
- package/dist/ui/binding.js.map +1 -0
- package/dist/ui/components/botao.d.ts +4 -0
- package/dist/ui/components/botao.d.ts.map +1 -0
- package/dist/ui/components/botao.js +4 -0
- package/dist/ui/components/botao.js.map +1 -0
- package/dist/ui/components/campo.d.ts +8 -0
- package/dist/ui/components/campo.d.ts.map +1 -0
- package/dist/ui/components/campo.js +9 -0
- package/dist/ui/components/campo.js.map +1 -0
- package/dist/ui/components/card.d.ts +4 -0
- package/dist/ui/components/card.d.ts.map +1 -0
- package/dist/ui/components/card.js +4 -0
- package/dist/ui/components/card.js.map +1 -0
- package/dist/ui/components/formulario.d.ts +4 -0
- package/dist/ui/components/formulario.d.ts.map +1 -0
- package/dist/ui/components/formulario.js +4 -0
- package/dist/ui/components/formulario.js.map +1 -0
- package/dist/ui/components/tabela.d.ts +3 -0
- package/dist/ui/components/tabela.d.ts.map +1 -0
- package/dist/ui/components/tabela.js +4 -0
- package/dist/ui/components/tabela.js.map +1 -0
- package/dist/ui/reactive.d.ts +61 -0
- package/dist/ui/reactive.d.ts.map +1 -0
- package/dist/ui/reactive.js +149 -0
- package/dist/ui/reactive.js.map +1 -0
- package/dist/ui/refs.d.ts +13 -0
- package/dist/ui/refs.d.ts.map +1 -0
- package/dist/ui/refs.js +32 -0
- package/dist/ui/refs.js.map +1 -0
- package/dist/ui/router.d.ts +39 -0
- package/dist/ui/router.d.ts.map +1 -0
- package/dist/ui/router.js +74 -0
- package/dist/ui/router.js.map +1 -0
- package/dist/ui/theme.d.ts +19 -0
- package/dist/ui/theme.d.ts.map +1 -0
- package/dist/ui/theme.js +183 -0
- package/dist/ui/theme.js.map +1 -0
- package/dist/ui/ui_engine.d.ts +89 -0
- package/dist/ui/ui_engine.d.ts.map +1 -0
- package/dist/ui/ui_engine.js +406 -0
- package/dist/ui/ui_engine.js.map +1 -0
- package/dist/ui/virtual_list.d.ts +29 -0
- package/dist/ui/virtual_list.d.ts.map +1 -0
- package/dist/ui/virtual_list.js +88 -0
- package/dist/ui/virtual_list.js.map +1 -0
- package/package.json +76 -0
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
export class HttpClient {
|
|
2
|
+
defaultHeaders = {
|
|
3
|
+
'Content-Type': 'application/json'
|
|
4
|
+
};
|
|
5
|
+
interceptors = [];
|
|
6
|
+
// Define headers padrão (ex: Authorization)
|
|
7
|
+
setDefaultHeaders(headers) {
|
|
8
|
+
this.defaultHeaders = { ...this.defaultHeaders, ...headers };
|
|
9
|
+
}
|
|
10
|
+
// Adiciona interceptor de request
|
|
11
|
+
addInterceptor(fn) {
|
|
12
|
+
this.interceptors.push(fn);
|
|
13
|
+
}
|
|
14
|
+
async get(url, options) {
|
|
15
|
+
return this.request({ method: 'GET', url, ...options });
|
|
16
|
+
}
|
|
17
|
+
async post(url, data, options) {
|
|
18
|
+
return this.request({ method: 'POST', url, data, ...options });
|
|
19
|
+
}
|
|
20
|
+
async put(url, data, options) {
|
|
21
|
+
return this.request({ method: 'PUT', url, data, ...options });
|
|
22
|
+
}
|
|
23
|
+
async delete(url, options) {
|
|
24
|
+
return this.request({ method: 'DELETE', url, ...options });
|
|
25
|
+
}
|
|
26
|
+
async request(config) {
|
|
27
|
+
// Aplicar interceptors
|
|
28
|
+
let finalConfig = { ...config };
|
|
29
|
+
for (const interceptor of this.interceptors) {
|
|
30
|
+
finalConfig = interceptor(finalConfig);
|
|
31
|
+
}
|
|
32
|
+
// Montar URL com query params
|
|
33
|
+
let url = finalConfig.url;
|
|
34
|
+
if (finalConfig.params) {
|
|
35
|
+
const query = new URLSearchParams(Object.fromEntries(Object.entries(finalConfig.params).map(([k, v]) => [k, String(v)]))).toString();
|
|
36
|
+
url += (url.includes('?') ? '&' : '?') + query;
|
|
37
|
+
}
|
|
38
|
+
const headers = { ...this.defaultHeaders, ...(finalConfig.headers || {}) };
|
|
39
|
+
const retries = finalConfig.retries ?? 0;
|
|
40
|
+
let lastError = null;
|
|
41
|
+
for (let attempt = 0; attempt <= retries; attempt++) {
|
|
42
|
+
try {
|
|
43
|
+
const controller = new AbortController();
|
|
44
|
+
const timeoutMs = finalConfig.timeout ?? 30000;
|
|
45
|
+
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
46
|
+
const response = await fetch(url, {
|
|
47
|
+
method: finalConfig.method,
|
|
48
|
+
headers,
|
|
49
|
+
body: finalConfig.data ? JSON.stringify(finalConfig.data) : undefined,
|
|
50
|
+
signal: controller.signal
|
|
51
|
+
});
|
|
52
|
+
clearTimeout(timer);
|
|
53
|
+
const responseHeaders = {};
|
|
54
|
+
response.headers.forEach((value, key) => {
|
|
55
|
+
responseHeaders[key] = value;
|
|
56
|
+
});
|
|
57
|
+
let data;
|
|
58
|
+
const contentType = response.headers.get('content-type') || '';
|
|
59
|
+
if (contentType.includes('application/json')) {
|
|
60
|
+
data = await response.json();
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
data = await response.text();
|
|
64
|
+
}
|
|
65
|
+
return {
|
|
66
|
+
data,
|
|
67
|
+
status: response.status,
|
|
68
|
+
headers: responseHeaders,
|
|
69
|
+
ok: response.ok
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
catch (e) {
|
|
73
|
+
lastError = e;
|
|
74
|
+
if (attempt < retries) {
|
|
75
|
+
// Espera exponencial entre tentativas
|
|
76
|
+
await new Promise(r => setTimeout(r, Math.pow(2, attempt) * 100));
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
throw lastError ?? new Error('Requisição falhou');
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=http_client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http_client.js","sourceRoot":"","sources":["../../apis/http_client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export declare class PermissionService {
|
|
2
|
+
private currentUser;
|
|
3
|
+
private temporaryPermissions;
|
|
4
|
+
setCurrentUser(user: {
|
|
5
|
+
roles: string[];
|
|
6
|
+
permissions: string[];
|
|
7
|
+
}): void;
|
|
8
|
+
clearCurrentUser(): void;
|
|
9
|
+
hasPermission(permission: string): boolean;
|
|
10
|
+
hasRole(role: string): boolean;
|
|
11
|
+
hasAllPermissions(permissions: string[]): boolean;
|
|
12
|
+
hasAnyPermission(permissions: string[]): boolean;
|
|
13
|
+
getUserPermissions(): string[];
|
|
14
|
+
getUserRoles(): string[];
|
|
15
|
+
addTemporaryPermission(permission: string, durationMs: number): void;
|
|
16
|
+
private hasWildcardPermission;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=permission_service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permission_service.d.ts","sourceRoot":"","sources":["../../apis/permission_service.ts"],"names":[],"mappings":"AAAA,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,WAAW,CAGH;IAEhB,OAAO,CAAC,oBAAoB,CAAkC;IAG9D,cAAc,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,WAAW,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI;IAKtE,gBAAgB,IAAI,IAAI;IAMxB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAY1C,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAK9B,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO;IAKjD,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO;IAIhD,kBAAkB,IAAI,MAAM,EAAE;IAI9B,YAAY,IAAI,MAAM,EAAE;IAKxB,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAIpE,OAAO,CAAC,qBAAqB;CAQ9B"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
export class PermissionService {
|
|
2
|
+
currentUser = null;
|
|
3
|
+
temporaryPermissions = new Map(); // permissão → expiresAt
|
|
4
|
+
// Configura usuário atual (chamado após login)
|
|
5
|
+
setCurrentUser(user) {
|
|
6
|
+
this.currentUser = user;
|
|
7
|
+
this.temporaryPermissions.clear();
|
|
8
|
+
}
|
|
9
|
+
clearCurrentUser() {
|
|
10
|
+
this.currentUser = null;
|
|
11
|
+
this.temporaryPermissions.clear();
|
|
12
|
+
}
|
|
13
|
+
// Verifica se tem permissão específica
|
|
14
|
+
hasPermission(permission) {
|
|
15
|
+
if (!this.currentUser)
|
|
16
|
+
return false;
|
|
17
|
+
// Verificar permissões temporárias
|
|
18
|
+
const tempExp = this.temporaryPermissions.get(permission);
|
|
19
|
+
if (tempExp && tempExp > Date.now())
|
|
20
|
+
return true;
|
|
21
|
+
return this.currentUser.permissions.includes(permission) ||
|
|
22
|
+
this.hasWildcardPermission(permission);
|
|
23
|
+
}
|
|
24
|
+
// Verifica se tem papel específico
|
|
25
|
+
hasRole(role) {
|
|
26
|
+
return this.currentUser?.roles.includes(role) ?? false;
|
|
27
|
+
}
|
|
28
|
+
// Verifica se tem TODAS as permissões
|
|
29
|
+
hasAllPermissions(permissions) {
|
|
30
|
+
return permissions.every(p => this.hasPermission(p));
|
|
31
|
+
}
|
|
32
|
+
// Verifica se tem ALGUMA das permissões
|
|
33
|
+
hasAnyPermission(permissions) {
|
|
34
|
+
return permissions.some(p => this.hasPermission(p));
|
|
35
|
+
}
|
|
36
|
+
getUserPermissions() {
|
|
37
|
+
return [...(this.currentUser?.permissions ?? [])];
|
|
38
|
+
}
|
|
39
|
+
getUserRoles() {
|
|
40
|
+
return [...(this.currentUser?.roles ?? [])];
|
|
41
|
+
}
|
|
42
|
+
// Adiciona permissão temporária por `durationMs` milissegundos
|
|
43
|
+
addTemporaryPermission(permission, durationMs) {
|
|
44
|
+
this.temporaryPermissions.set(permission, Date.now() + durationMs);
|
|
45
|
+
}
|
|
46
|
+
hasWildcardPermission(permission) {
|
|
47
|
+
const parts = permission.split('.');
|
|
48
|
+
for (let i = parts.length - 1; i >= 0; i--) {
|
|
49
|
+
const wildcard = [...parts.slice(0, i), '*'].join('.');
|
|
50
|
+
if (this.currentUser?.permissions.includes(wildcard))
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=permission_service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permission_service.js","sourceRoot":"","sources":["../../apis/permission_service.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,iBAAiB;IACpB,WAAW,GAGR,IAAI,CAAC;IAER,oBAAoB,GAAwB,IAAI,GAAG,EAAE,CAAC,CAAC,wBAAwB;IAEvF,+CAA+C;IAC/C,cAAc,CAAC,IAAgD;QAC7D,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;IACpC,CAAC;IAED,gBAAgB;QACd,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;IACpC,CAAC;IAED,uCAAuC;IACvC,aAAa,CAAC,UAAkB;QAC9B,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO,KAAK,CAAC;QAEpC,mCAAmC;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC1D,IAAI,OAAO,IAAI,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE;YAAE,OAAO,IAAI,CAAC;QAEjD,OAAO,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC;YACjD,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;IAChD,CAAC;IAED,mCAAmC;IACnC,OAAO,CAAC,IAAY;QAClB,OAAO,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;IACzD,CAAC;IAED,sCAAsC;IACtC,iBAAiB,CAAC,WAAqB;QACrC,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IACvD,CAAC;IAED,wCAAwC;IACxC,gBAAgB,CAAC,WAAqB;QACpC,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,CAAC;IAED,kBAAkB;QAChB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,YAAY;QACV,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,+DAA+D;IAC/D,sBAAsB,CAAC,UAAkB,EAAE,UAAkB;QAC3D,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,CAAC;IACrE,CAAC;IAEO,qBAAqB,CAAC,UAAkB;QAC9C,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACpC,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,MAAM,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACvD,IAAI,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAAE,OAAO,IAAI,CAAC;QACpE,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type EventHandler = (...args: any[]) => void | Promise<void>;
|
|
2
|
+
export declare class EventLoop {
|
|
3
|
+
private handlers;
|
|
4
|
+
private queue;
|
|
5
|
+
private running;
|
|
6
|
+
private profundidade;
|
|
7
|
+
private readonly MAX_PROFUNDIDADE;
|
|
8
|
+
on(event: string, handler: EventHandler): void;
|
|
9
|
+
off(event: string, handler: EventHandler): void;
|
|
10
|
+
emit(event: string, ...args: any[]): void;
|
|
11
|
+
emitSync(event: string, ...args: any[]): void;
|
|
12
|
+
private processQueue;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=event_loop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event_loop.d.ts","sourceRoot":"","sources":["../../core/event_loop.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAEpE,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAA0C;IAC1D,OAAO,CAAC,KAAK,CAA6C;IAC1D,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAO;IAGxC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI;IAQ9C,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI;IAS/C,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAgBzC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;YAO/B,YAAY;CAe3B"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
export class EventLoop {
|
|
2
|
+
handlers = new Map();
|
|
3
|
+
queue = [];
|
|
4
|
+
running = false;
|
|
5
|
+
profundidade = 0;
|
|
6
|
+
MAX_PROFUNDIDADE = 100;
|
|
7
|
+
// Registra handler para um evento
|
|
8
|
+
on(event, handler) {
|
|
9
|
+
if (!this.handlers.has(event)) {
|
|
10
|
+
this.handlers.set(event, []);
|
|
11
|
+
}
|
|
12
|
+
this.handlers.get(event).push(handler);
|
|
13
|
+
}
|
|
14
|
+
// Remove handler
|
|
15
|
+
off(event, handler) {
|
|
16
|
+
const handlers = this.handlers.get(event);
|
|
17
|
+
if (handlers) {
|
|
18
|
+
const idx = handlers.indexOf(handler);
|
|
19
|
+
if (idx !== -1)
|
|
20
|
+
handlers.splice(idx, 1);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
// Emite evento — coloca na fila (não bloqueia)
|
|
24
|
+
emit(event, ...args) {
|
|
25
|
+
this.profundidade++;
|
|
26
|
+
if (this.profundidade > this.MAX_PROFUNDIDADE) {
|
|
27
|
+
this.profundidade = 0;
|
|
28
|
+
throw new Error(`[JADE EventLoop] Possível loop infinito detectado: ` +
|
|
29
|
+
`profundidade ${this.MAX_PROFUNDIDADE} atingida no evento '${event}'`);
|
|
30
|
+
}
|
|
31
|
+
this.queue.push({ event, args });
|
|
32
|
+
if (!this.running) {
|
|
33
|
+
this.processQueue().finally(() => { this.profundidade = 0; });
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
// Emite evento de forma síncrona (para uso interno do runtime)
|
|
37
|
+
emitSync(event, ...args) {
|
|
38
|
+
const handlers = this.handlers.get(event) || [];
|
|
39
|
+
for (const handler of handlers) {
|
|
40
|
+
handler(...args);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
async processQueue() {
|
|
44
|
+
this.running = true;
|
|
45
|
+
while (this.queue.length > 0) {
|
|
46
|
+
const { event, args } = this.queue.shift();
|
|
47
|
+
const handlers = this.handlers.get(event) || [];
|
|
48
|
+
for (const handler of handlers) {
|
|
49
|
+
try {
|
|
50
|
+
await handler(...args);
|
|
51
|
+
}
|
|
52
|
+
catch (e) {
|
|
53
|
+
console.error(`Erro no handler do evento '${event}':`, e);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
this.running = false;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=event_loop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event_loop.js","sourceRoot":"","sources":["../../core/event_loop.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export declare class JadeBuffer {
|
|
2
|
+
private memory;
|
|
3
|
+
private ptr;
|
|
4
|
+
private size;
|
|
5
|
+
private offset;
|
|
6
|
+
constructor(memory: WebAssembly.Memory, ptr: number, size: number);
|
|
7
|
+
escrever(texto: string): void;
|
|
8
|
+
ler(): string;
|
|
9
|
+
escreverInt(valor: number): void;
|
|
10
|
+
escreverDecimal(valor: number): void;
|
|
11
|
+
resetar(): void;
|
|
12
|
+
tamanho(): number;
|
|
13
|
+
usado(): number;
|
|
14
|
+
disponivel(): number;
|
|
15
|
+
ponteiro(): number;
|
|
16
|
+
}
|
|
17
|
+
export declare class MemoryManager {
|
|
18
|
+
private memory;
|
|
19
|
+
private heapStart;
|
|
20
|
+
private nextFree;
|
|
21
|
+
private freeList;
|
|
22
|
+
private allocationSizes;
|
|
23
|
+
private allocationsByOwner;
|
|
24
|
+
constructor(initialPages?: number);
|
|
25
|
+
getMemory(): WebAssembly.Memory;
|
|
26
|
+
connectWasmMemory(wasmMemory: WebAssembly.Memory): void;
|
|
27
|
+
malloc(size: number): number;
|
|
28
|
+
free(ptr: number): void;
|
|
29
|
+
mallocTracked(size: number, owner: string): number;
|
|
30
|
+
freeOwner(owner: string): void;
|
|
31
|
+
getOwnerStats(): Record<string, number>;
|
|
32
|
+
createBuffer(ptr: number, size: number): JadeBuffer;
|
|
33
|
+
allocBuffer(size: number, owner?: string): JadeBuffer;
|
|
34
|
+
writeString(str: string): number;
|
|
35
|
+
readString(ptr: number): string;
|
|
36
|
+
readStringWithLength(ptr: number): string;
|
|
37
|
+
writeStruct(fields: Array<{
|
|
38
|
+
type: string;
|
|
39
|
+
value: any;
|
|
40
|
+
}>): number;
|
|
41
|
+
readField(ptr: number, fieldIndex: number, type: string): any;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=memory_manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory_manager.d.ts","sourceRoot":"","sources":["../../core/memory_manager.ts"],"names":[],"mappings":"AACA,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,MAAM,CAAa;gBAEf,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAOjE,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAc7B,GAAG,IAAI,MAAM;IAMb,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAShC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IASpC,OAAO,IAAI,IAAI;IAIf,OAAO,IAAI,MAAM;IACjB,KAAK,IAAI,MAAM;IACf,UAAU,IAAI,MAAM;IACpB,QAAQ,IAAI,MAAM;CACnB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAA4C;IAC5D,OAAO,CAAC,eAAe,CAAkC;IACzD,OAAO,CAAC,kBAAkB,CAAoC;gBAElD,YAAY,GAAE,MAAU;IAQpC,SAAS,IAAI,WAAW,CAAC,MAAM;IAO/B,iBAAiB,CAAC,UAAU,EAAE,WAAW,CAAC,MAAM,GAAG,IAAI;IAQvD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IA4B5B,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAYvB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAWlD,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAS9B,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAQvC,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU;IAKnD,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,UAAU;IAQrD,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAWhC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAiB/B,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IASzC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,GAAG,CAAA;KAAE,CAAC,GAAG,MAAM;IAwBhE,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,GAAG;CAO9D"}
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
// Classe que encapsula um ponteiro WASM com interface segura
|
|
2
|
+
export class JadeBuffer {
|
|
3
|
+
memory;
|
|
4
|
+
ptr;
|
|
5
|
+
size;
|
|
6
|
+
offset = 0;
|
|
7
|
+
constructor(memory, ptr, size) {
|
|
8
|
+
this.memory = memory;
|
|
9
|
+
this.ptr = ptr;
|
|
10
|
+
this.size = size;
|
|
11
|
+
}
|
|
12
|
+
// Escreve string UTF-8 na posição atual
|
|
13
|
+
escrever(texto) {
|
|
14
|
+
const encoded = new TextEncoder().encode(texto);
|
|
15
|
+
if (this.offset + encoded.length > this.size) {
|
|
16
|
+
throw new RangeError(`[JADE Buffer] Overflow: tentou escrever ${encoded.length} bytes ` +
|
|
17
|
+
`mas só restam ${this.size - this.offset} bytes.`);
|
|
18
|
+
}
|
|
19
|
+
const bytes = new Uint8Array(this.memory.buffer, this.ptr + this.offset, encoded.length);
|
|
20
|
+
bytes.set(encoded);
|
|
21
|
+
this.offset += encoded.length;
|
|
22
|
+
}
|
|
23
|
+
// Lê string UTF-8 a partir do início
|
|
24
|
+
ler() {
|
|
25
|
+
const bytes = new Uint8Array(this.memory.buffer, this.ptr, this.offset);
|
|
26
|
+
return new TextDecoder().decode(bytes);
|
|
27
|
+
}
|
|
28
|
+
// Escreve número i32
|
|
29
|
+
escreverInt(valor) {
|
|
30
|
+
if (this.offset + 4 > this.size) {
|
|
31
|
+
throw new RangeError('[JADE Buffer] Overflow ao escrever inteiro.');
|
|
32
|
+
}
|
|
33
|
+
new DataView(this.memory.buffer).setInt32(this.ptr + this.offset, valor, true);
|
|
34
|
+
this.offset += 4;
|
|
35
|
+
}
|
|
36
|
+
// Escreve número f64
|
|
37
|
+
escreverDecimal(valor) {
|
|
38
|
+
if (this.offset + 8 > this.size) {
|
|
39
|
+
throw new RangeError('[JADE Buffer] Overflow ao escrever decimal.');
|
|
40
|
+
}
|
|
41
|
+
new DataView(this.memory.buffer).setFloat64(this.ptr + this.offset, valor, true);
|
|
42
|
+
this.offset += 8;
|
|
43
|
+
}
|
|
44
|
+
// Reseta cursor para o início (sem apagar dados)
|
|
45
|
+
resetar() {
|
|
46
|
+
this.offset = 0;
|
|
47
|
+
}
|
|
48
|
+
tamanho() { return this.size; }
|
|
49
|
+
usado() { return this.offset; }
|
|
50
|
+
disponivel() { return this.size - this.offset; }
|
|
51
|
+
ponteiro() { return this.ptr; }
|
|
52
|
+
}
|
|
53
|
+
export class MemoryManager {
|
|
54
|
+
memory;
|
|
55
|
+
heapStart; // offset onde o heap começa
|
|
56
|
+
nextFree; // próximo endereço livre (bump allocator)
|
|
57
|
+
freeList = [];
|
|
58
|
+
allocationSizes = new Map();
|
|
59
|
+
allocationsByOwner = new Map();
|
|
60
|
+
constructor(initialPages = 1) {
|
|
61
|
+
// 1 page = 64KB
|
|
62
|
+
this.memory = new WebAssembly.Memory({ initial: initialPages, maximum: 256 });
|
|
63
|
+
this.heapStart = 1024; // reservar primeiros 1KB para dados do runtime
|
|
64
|
+
this.nextFree = this.heapStart;
|
|
65
|
+
}
|
|
66
|
+
// Retorna a memória para passar como import ao WASM
|
|
67
|
+
getMemory() {
|
|
68
|
+
return this.memory;
|
|
69
|
+
}
|
|
70
|
+
// Conecta a memória exportada pelo módulo WASM ao MemoryManager.
|
|
71
|
+
// Chamado pelo runtime após instanciar o WASM.
|
|
72
|
+
// A partir deste momento, readString/writeString operam no buffer do WASM.
|
|
73
|
+
connectWasmMemory(wasmMemory) {
|
|
74
|
+
this.memory = wasmMemory;
|
|
75
|
+
// O heap do WASM é controlado pelo heap_ptr global interno do módulo.
|
|
76
|
+
// O MemoryManager JS passa a ser proxy de leitura/escrita — não aloca mais
|
|
77
|
+
// por conta própria para dados do WASM (evita conflito com heap_ptr do módulo).
|
|
78
|
+
}
|
|
79
|
+
// Aloca `size` bytes, retorna ponteiro (i32)
|
|
80
|
+
malloc(size) {
|
|
81
|
+
// Alinhar em 8 bytes
|
|
82
|
+
const aligned = Math.ceil(size / 8) * 8;
|
|
83
|
+
// Verificar free list primeiro
|
|
84
|
+
const freeIdx = this.freeList.findIndex(b => b.size >= aligned);
|
|
85
|
+
if (freeIdx !== -1) {
|
|
86
|
+
const block = this.freeList.splice(freeIdx, 1)[0];
|
|
87
|
+
this.allocationSizes.set(block.ptr, aligned);
|
|
88
|
+
return block.ptr;
|
|
89
|
+
}
|
|
90
|
+
// Bump allocator
|
|
91
|
+
const ptr = this.nextFree;
|
|
92
|
+
this.nextFree += aligned;
|
|
93
|
+
// Expandir memória se necessário
|
|
94
|
+
const required = Math.ceil(this.nextFree / 65536);
|
|
95
|
+
const current = this.memory.buffer.byteLength / 65536;
|
|
96
|
+
if (required > current) {
|
|
97
|
+
this.memory.grow(required - current);
|
|
98
|
+
}
|
|
99
|
+
this.allocationSizes.set(ptr, aligned);
|
|
100
|
+
return ptr;
|
|
101
|
+
}
|
|
102
|
+
// Libera memória no ponteiro `ptr`
|
|
103
|
+
free(ptr) {
|
|
104
|
+
const size = this.allocationSizes.get(ptr);
|
|
105
|
+
if (size === undefined) {
|
|
106
|
+
// Ponteiro não alocado ou já liberado.
|
|
107
|
+
// Em um cenário real, um aviso pode ser logado.
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
this.freeList.push({ ptr, size });
|
|
111
|
+
this.allocationSizes.delete(ptr);
|
|
112
|
+
}
|
|
113
|
+
// malloc rastreado — use para alocações de componentes UI
|
|
114
|
+
mallocTracked(size, owner) {
|
|
115
|
+
const ptr = this.malloc(size);
|
|
116
|
+
if (!this.allocationsByOwner.has(owner)) {
|
|
117
|
+
this.allocationsByOwner.set(owner, []);
|
|
118
|
+
}
|
|
119
|
+
this.allocationsByOwner.get(owner).push(ptr);
|
|
120
|
+
return ptr;
|
|
121
|
+
}
|
|
122
|
+
// Libera toda memória de um dono de uma vez
|
|
123
|
+
// Chamar quando uma tela/componente for destruído
|
|
124
|
+
freeOwner(owner) {
|
|
125
|
+
const ptrs = this.allocationsByOwner.get(owner) ?? [];
|
|
126
|
+
for (const ptr of ptrs) {
|
|
127
|
+
this.free(ptr);
|
|
128
|
+
}
|
|
129
|
+
this.allocationsByOwner.delete(owner);
|
|
130
|
+
}
|
|
131
|
+
// Retorna estatísticas de uso por dono (para debug)
|
|
132
|
+
getOwnerStats() {
|
|
133
|
+
const stats = {};
|
|
134
|
+
for (const [owner, ptrs] of this.allocationsByOwner.entries()) {
|
|
135
|
+
stats[owner] = ptrs.length;
|
|
136
|
+
}
|
|
137
|
+
return stats;
|
|
138
|
+
}
|
|
139
|
+
createBuffer(ptr, size) {
|
|
140
|
+
return new JadeBuffer(this.memory, ptr, size);
|
|
141
|
+
}
|
|
142
|
+
// Atalho: aloca e já retorna buffer pronto
|
|
143
|
+
allocBuffer(size, owner) {
|
|
144
|
+
const ptr = owner
|
|
145
|
+
? this.mallocTracked(size, owner)
|
|
146
|
+
: this.malloc(size);
|
|
147
|
+
return new JadeBuffer(this.memory, ptr, size);
|
|
148
|
+
}
|
|
149
|
+
// Escreve string UTF-8 na memória, retorna ponteiro
|
|
150
|
+
writeString(str) {
|
|
151
|
+
const encoded = new TextEncoder().encode(str);
|
|
152
|
+
const ptr = this.malloc(encoded.length + 4); // 4 bytes para o tamanho
|
|
153
|
+
const view = new DataView(this.memory.buffer);
|
|
154
|
+
view.setUint32(ptr, encoded.length, true);
|
|
155
|
+
const bytes = new Uint8Array(this.memory.buffer, ptr + 4, encoded.length);
|
|
156
|
+
bytes.set(encoded);
|
|
157
|
+
return ptr;
|
|
158
|
+
}
|
|
159
|
+
// Lê string UTF-8 da memória a partir do ponteiro (null-terminated)
|
|
160
|
+
readString(ptr) {
|
|
161
|
+
const view = new DataView(this.memory.buffer);
|
|
162
|
+
let offset = ptr;
|
|
163
|
+
const bytes = [];
|
|
164
|
+
// Ler bytes até encontrar null terminator (0)
|
|
165
|
+
while (true) {
|
|
166
|
+
const byte = view.getUint8(offset);
|
|
167
|
+
if (byte === 0)
|
|
168
|
+
break;
|
|
169
|
+
bytes.push(byte);
|
|
170
|
+
offset++;
|
|
171
|
+
}
|
|
172
|
+
return new TextDecoder().decode(new Uint8Array(bytes));
|
|
173
|
+
}
|
|
174
|
+
// Versão alternativa para strings com tamanho prefixado (mantida para compatibilidade)
|
|
175
|
+
readStringWithLength(ptr) {
|
|
176
|
+
const view = new DataView(this.memory.buffer);
|
|
177
|
+
const length = view.getUint32(ptr, true);
|
|
178
|
+
const bytes = new Uint8Array(this.memory.buffer, ptr + 4, length);
|
|
179
|
+
return new TextDecoder().decode(bytes);
|
|
180
|
+
}
|
|
181
|
+
// Escreve struct de entidade na memória
|
|
182
|
+
// fields: array de { name, type, value } na mesma ordem dos campos
|
|
183
|
+
writeStruct(fields) {
|
|
184
|
+
const ptr = this.malloc(fields.length * 8); // 8 bytes por campo
|
|
185
|
+
const view = new DataView(this.memory.buffer);
|
|
186
|
+
let offset = ptr;
|
|
187
|
+
for (const field of fields) {
|
|
188
|
+
if (field.type === 'i32' || field.type === 'i1') {
|
|
189
|
+
view.setInt32(offset, Number(field.value), true);
|
|
190
|
+
offset += 8;
|
|
191
|
+
}
|
|
192
|
+
else if (field.type === 'f64') {
|
|
193
|
+
view.setFloat64(offset, Number(field.value), true);
|
|
194
|
+
offset += 8;
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
// ptr — escreve ponteiro i32
|
|
198
|
+
const strPtr = typeof field.value === 'string'
|
|
199
|
+
? this.writeString(field.value)
|
|
200
|
+
: Number(field.value);
|
|
201
|
+
view.setInt32(offset, strPtr, true);
|
|
202
|
+
offset += 8;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return ptr;
|
|
206
|
+
}
|
|
207
|
+
// Lê campo de uma struct pelo offset do campo (índice × 8)
|
|
208
|
+
readField(ptr, fieldIndex, type) {
|
|
209
|
+
const view = new DataView(this.memory.buffer);
|
|
210
|
+
const offset = ptr + fieldIndex * 8;
|
|
211
|
+
if (type === 'i32' || type === 'i1')
|
|
212
|
+
return view.getInt32(offset, true);
|
|
213
|
+
if (type === 'f64')
|
|
214
|
+
return view.getFloat64(offset, true);
|
|
215
|
+
return view.getInt32(offset, true); // ptr
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
//# sourceMappingURL=memory_manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory_manager.js","sourceRoot":"","sources":["../../core/memory_manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { MemoryManager } from './memory_manager';
|
|
2
|
+
export interface JadeRuntimeConfig {
|
|
3
|
+
debug?: boolean;
|
|
4
|
+
}
|
|
5
|
+
export declare class JadeRuntime {
|
|
6
|
+
private memory;
|
|
7
|
+
private events;
|
|
8
|
+
private wasmInstance;
|
|
9
|
+
private exports;
|
|
10
|
+
private debug;
|
|
11
|
+
constructor(config?: JadeRuntimeConfig);
|
|
12
|
+
load(wasmSource: BufferSource | Response | WebAssembly.Module): Promise<void>;
|
|
13
|
+
call(funcName: string, ...args: any[]): any;
|
|
14
|
+
on(event: string, handler: (...args: any[]) => void): void;
|
|
15
|
+
getMemory(): MemoryManager;
|
|
16
|
+
private buildImports;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../core/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjD,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,YAAY,CAAqC;IACzD,OAAO,CAAC,OAAO,CAAW;IAC1B,OAAO,CAAC,KAAK,CAAU;gBAEX,MAAM,GAAE,iBAAsB;IAQpC,IAAI,CAAC,UAAU,EAAE,YAAY,GAAG,QAAQ,GAAG,WAAW,CAAC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkCnF,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG;IAQ3C,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI;IAK1D,SAAS,IAAI,aAAa;IAK1B,OAAO,CAAC,YAAY;CAkDrB"}
|