ultra-light-js 1.1.0 → 1.1.1

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.md CHANGED
@@ -631,7 +631,7 @@ to attach them to the start of each source file to most effectively
631
631
  state the exclusion of warranty; and each file should have at least
632
632
  the "copyright" line and a pointer to where the full notice is found.
633
633
 
634
- ultra-light.js - A lightweight JavaScript framework for building reactive, state-management, and SPA applications.
634
+ ultra-light-js - A lightweight JavaScript framework for building reactive, state-management, and SPA applications.
635
635
  Copyright (C) 2026 Amín Pérez
636
636
 
637
637
  This program is free software: you can redistribute it and/or modify
package/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # Ultra Light Framework
2
2
 
3
3
  [![CI](https://github.com/EvilPrime98/ultra-light-js/actions/workflows/ci.yml/badge.svg)](https://github.com/EvilPrime98/ultra-light-js/actions/workflows/ci.yml)
4
- [![npm version](https://img.shields.io/npm/v/ultra-light.js.svg)](https://www.npmjs.com/package/ultra-light.js)
4
+ [![npm version](https://img.shields.io/npm/v/ultra-light-js.svg)](https://www.npmjs.com/package/ultra-light-js)
5
5
 
6
6
  An ultra-lightweight and reactive mini framework for modern web development, with zero dependencies.
7
7
 
@@ -19,14 +19,14 @@ An ultra-lightweight and reactive mini framework for modern web development, wit
19
19
  ## Installation
20
20
 
21
21
  ```bash
22
- npm install ultra-light.js
22
+ npm install ultra-light-js
23
23
  # or
24
- pnpm add ultra-light.js
24
+ pnpm add ultra-light-js
25
25
  ```
26
26
 
27
27
  ## Quick Start
28
28
  ```javascript
29
- import { ultraState, UltraComponent } from 'ultra-light.js';
29
+ import { ultraState, UltraComponent } from 'ultra-light-js';
30
30
 
31
31
  function Counter(){
32
32
 
@@ -227,7 +227,7 @@ subscribeToCache(() => console.log('cache changed:', cache()));
227
227
 
228
228
  Creates a router for SPA navigation.
229
229
  ```javascript
230
- import { UltraRouter, UltraLink } from 'ultra-light.js';
230
+ import { UltraRouter, UltraLink } from 'ultra-light-js';
231
231
 
232
232
  const Home = () => '<div><h1>Home</h1></div>';
233
233
  const About = () => '<div><h1>About</h1></div>';
@@ -354,7 +354,7 @@ ultraPortal('#app', '<div class="modal">Hello from a portal</div>');
354
354
 
355
355
  ### Complete Todo App
356
356
  ```javascript
357
- import { ultraState, UltraComponent, ultraStyles } from 'ultra-light.js';
357
+ import { ultraState, UltraComponent, ultraStyles } from 'ultra-light-js';
358
358
 
359
359
  const styles = ultraStyles(`
360
360
 
@@ -1 +1 @@
1
- {"version":3,"file":"ultra-light.d.ts","sourceRoot":"","sources":["../src/ultra-light.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ultra-light.d.ts","sourceRoot":"","sources":["../src/ultra-light.ts"],"names":[],"mappings":"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"}
@@ -205,13 +205,6 @@ function matchRoute(routePath, currentPath) {
205
205
  }
206
206
  return { params, matched: true };
207
207
  }
208
- function reconcileRouteScope(hasTargetComponent, wildcardComponent, targetDispose, wildcardDispose) {
209
- if (!hasTargetComponent && wildcardComponent) {
210
- return wildcardDispose;
211
- }
212
- wildcardDispose?.();
213
- return targetDispose;
214
- }
215
208
  export function UltraRouter(...routes) {
216
209
  const paths = routes.map(r => r.path);
217
210
  const duplicates = paths.filter((p, i) => paths.indexOf(p) !== i && p !== '/*');
@@ -232,27 +225,24 @@ export function UltraRouter(...routes) {
232
225
  }
233
226
  const currentPath = window.location.pathname;
234
227
  let targetComponent = null;
235
- let routeParams = {};
236
- let wildcardComponent = null;
237
- let targetDispose = null;
238
- let wildcardDispose = null;
239
- routes.forEach(route => {
228
+ let scopeDispose = null;
229
+ for (const route of routes) {
240
230
  const match = matchRoute(route.path, currentPath);
241
- if (match.matched && !match.isWildcard && !targetComponent) {
242
- routeParams = match.params;
231
+ if (match.matched && !match.isWildcard) {
232
+ const routeParams = match.params;
243
233
  const [component, dispose] = ultraScope(() => route.component(routeParams));
244
234
  targetComponent = parseHTMLString(component);
245
- targetDispose = dispose;
235
+ scopeDispose = dispose;
236
+ break;
246
237
  }
247
- else if (match.matched && match.isWildcard) {
248
- const [component, dispose] = ultraScope(() => route.component());
249
- wildcardComponent = parseHTMLString(component);
250
- wildcardDispose = dispose;
238
+ }
239
+ if (!targetComponent) {
240
+ const wildcardRoute = routes.find(route => matchRoute(route.path, currentPath).isWildcard);
241
+ if (wildcardRoute) {
242
+ const [component, dispose] = ultraScope(() => wildcardRoute.component());
243
+ targetComponent = parseHTMLString(component);
244
+ scopeDispose = dispose;
251
245
  }
252
- });
253
- const scopeDispose = reconcileRouteScope(!!targetComponent, wildcardComponent, targetDispose, wildcardDispose);
254
- if (!targetComponent && wildcardComponent) {
255
- targetComponent = wildcardComponent;
256
246
  }
257
247
  container.innerHTML = '';
258
248
  if (targetComponent) {
@@ -378,6 +368,10 @@ export function UltraComponent({ component, eventHandler = {}, attributes = {},
378
368
  return document.createElement('div');
379
369
  }
380
370
  const cleanupFunctions = [];
371
+ let disposed = false;
372
+ registerInScope(() => {
373
+ disposed = true;
374
+ });
381
375
  Object.keys(eventHandler).forEach((event) => {
382
376
  const handler = eventHandler[event];
383
377
  if (handler) {
@@ -424,11 +418,19 @@ export function UltraComponent({ component, eventHandler = {}, attributes = {},
424
418
  onMount.forEach(fn => {
425
419
  requestAnimationFrame(() => {
426
420
  void (async () => {
421
+ if (disposed)
422
+ return;
427
423
  try {
428
424
  const result = fn(node);
429
425
  const cleanup = result instanceof Promise ? await result : result;
430
- if (cleanup)
426
+ if (!cleanup)
427
+ return;
428
+ if (disposed) {
429
+ cleanup();
430
+ }
431
+ else {
431
432
  cleanupFunctions.push(cleanup);
433
+ }
432
434
  }
433
435
  catch (error) {
434
436
  console.error('Error while executing onMount function(s):', error);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ultra-light-js",
3
- "version": "1.1.0",
3
+ "version": "1.1.1",
4
4
  "description": "A lightweight JavaScript framework for building reactive, state-management, and SPA applications.",
5
5
  "type": "module",
6
6
  "main": "./dist/ultra-light.js",