@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.
Files changed (113) hide show
  1. package/dist/apis/audit_service.d.ts +43 -0
  2. package/dist/apis/audit_service.d.ts.map +1 -0
  3. package/dist/apis/audit_service.js +73 -0
  4. package/dist/apis/audit_service.js.map +1 -0
  5. package/dist/apis/auth_service.d.ts +51 -0
  6. package/dist/apis/auth_service.d.ts.map +1 -0
  7. package/dist/apis/auth_service.js +120 -0
  8. package/dist/apis/auth_service.js.map +1 -0
  9. package/dist/apis/console_api.d.ts +34 -0
  10. package/dist/apis/console_api.d.ts.map +1 -0
  11. package/dist/apis/console_api.js +90 -0
  12. package/dist/apis/console_api.js.map +1 -0
  13. package/dist/apis/datetime_api.d.ts +13 -0
  14. package/dist/apis/datetime_api.d.ts.map +1 -0
  15. package/dist/apis/datetime_api.js +89 -0
  16. package/dist/apis/datetime_api.js.map +1 -0
  17. package/dist/apis/http_client.d.ts +32 -0
  18. package/dist/apis/http_client.d.ts.map +1 -0
  19. package/dist/apis/http_client.js +83 -0
  20. package/dist/apis/http_client.js.map +1 -0
  21. package/dist/apis/permission_service.d.ts +18 -0
  22. package/dist/apis/permission_service.d.ts.map +1 -0
  23. package/dist/apis/permission_service.js +56 -0
  24. package/dist/apis/permission_service.js.map +1 -0
  25. package/dist/core/event_loop.d.ts +14 -0
  26. package/dist/core/event_loop.d.ts.map +1 -0
  27. package/dist/core/event_loop.js +60 -0
  28. package/dist/core/event_loop.js.map +1 -0
  29. package/dist/core/memory_manager.d.ts +43 -0
  30. package/dist/core/memory_manager.d.ts.map +1 -0
  31. package/dist/core/memory_manager.js +218 -0
  32. package/dist/core/memory_manager.js.map +1 -0
  33. package/dist/core/runtime.d.ts +18 -0
  34. package/dist/core/runtime.d.ts.map +1 -0
  35. package/dist/core/runtime.js +116 -0
  36. package/dist/core/runtime.js.map +1 -0
  37. package/dist/persistence/local_datastore.d.ts +34 -0
  38. package/dist/persistence/local_datastore.d.ts.map +1 -0
  39. package/dist/persistence/local_datastore.js +112 -0
  40. package/dist/persistence/local_datastore.js.map +1 -0
  41. package/dist/persistence/sync_manager.d.ts +49 -0
  42. package/dist/persistence/sync_manager.d.ts.map +1 -0
  43. package/dist/persistence/sync_manager.js +187 -0
  44. package/dist/persistence/sync_manager.js.map +1 -0
  45. package/dist/pwa/pwa_generator.d.ts +16 -0
  46. package/dist/pwa/pwa_generator.d.ts.map +1 -0
  47. package/dist/pwa/pwa_generator.js +107 -0
  48. package/dist/pwa/pwa_generator.js.map +1 -0
  49. package/dist/stdlib/matematica.d.ts +121 -0
  50. package/dist/stdlib/matematica.d.ts.map +1 -0
  51. package/dist/stdlib/matematica.js +250 -0
  52. package/dist/stdlib/matematica.js.map +1 -0
  53. package/dist/stdlib/moeda.d.ts +129 -0
  54. package/dist/stdlib/moeda.d.ts.map +1 -0
  55. package/dist/stdlib/moeda.js +212 -0
  56. package/dist/stdlib/moeda.js.map +1 -0
  57. package/dist/stdlib/texto.d.ts +101 -0
  58. package/dist/stdlib/texto.d.ts.map +1 -0
  59. package/dist/stdlib/texto.js +205 -0
  60. package/dist/stdlib/texto.js.map +1 -0
  61. package/dist/stdlib/xml.d.ts +77 -0
  62. package/dist/stdlib/xml.d.ts.map +1 -0
  63. package/dist/stdlib/xml.js +212 -0
  64. package/dist/stdlib/xml.js.map +1 -0
  65. package/dist/ui/binding.d.ts +22 -0
  66. package/dist/ui/binding.d.ts.map +1 -0
  67. package/dist/ui/binding.js +62 -0
  68. package/dist/ui/binding.js.map +1 -0
  69. package/dist/ui/components/botao.d.ts +4 -0
  70. package/dist/ui/components/botao.d.ts.map +1 -0
  71. package/dist/ui/components/botao.js +4 -0
  72. package/dist/ui/components/botao.js.map +1 -0
  73. package/dist/ui/components/campo.d.ts +8 -0
  74. package/dist/ui/components/campo.d.ts.map +1 -0
  75. package/dist/ui/components/campo.js +9 -0
  76. package/dist/ui/components/campo.js.map +1 -0
  77. package/dist/ui/components/card.d.ts +4 -0
  78. package/dist/ui/components/card.d.ts.map +1 -0
  79. package/dist/ui/components/card.js +4 -0
  80. package/dist/ui/components/card.js.map +1 -0
  81. package/dist/ui/components/formulario.d.ts +4 -0
  82. package/dist/ui/components/formulario.d.ts.map +1 -0
  83. package/dist/ui/components/formulario.js +4 -0
  84. package/dist/ui/components/formulario.js.map +1 -0
  85. package/dist/ui/components/tabela.d.ts +3 -0
  86. package/dist/ui/components/tabela.d.ts.map +1 -0
  87. package/dist/ui/components/tabela.js +4 -0
  88. package/dist/ui/components/tabela.js.map +1 -0
  89. package/dist/ui/reactive.d.ts +61 -0
  90. package/dist/ui/reactive.d.ts.map +1 -0
  91. package/dist/ui/reactive.js +149 -0
  92. package/dist/ui/reactive.js.map +1 -0
  93. package/dist/ui/refs.d.ts +13 -0
  94. package/dist/ui/refs.d.ts.map +1 -0
  95. package/dist/ui/refs.js +32 -0
  96. package/dist/ui/refs.js.map +1 -0
  97. package/dist/ui/router.d.ts +39 -0
  98. package/dist/ui/router.d.ts.map +1 -0
  99. package/dist/ui/router.js +74 -0
  100. package/dist/ui/router.js.map +1 -0
  101. package/dist/ui/theme.d.ts +19 -0
  102. package/dist/ui/theme.d.ts.map +1 -0
  103. package/dist/ui/theme.js +183 -0
  104. package/dist/ui/theme.js.map +1 -0
  105. package/dist/ui/ui_engine.d.ts +89 -0
  106. package/dist/ui/ui_engine.d.ts.map +1 -0
  107. package/dist/ui/ui_engine.js +406 -0
  108. package/dist/ui/ui_engine.js.map +1 -0
  109. package/dist/ui/virtual_list.d.ts +29 -0
  110. package/dist/ui/virtual_list.d.ts.map +1 -0
  111. package/dist/ui/virtual_list.js +88 -0
  112. package/dist/ui/virtual_list.js.map +1 -0
  113. 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"}