Compare commits

..

2 Commits

5 changed files with 86 additions and 2 deletions

View File

@ -1,5 +1,11 @@
# Changelog # Changelog
## 2025-06-26 - 2.4.1 - fix(tests)
Improve decorator tests and add LitElement component tests for better validation
- Refactored test-decorators.ts to robustly verify that the sealed decorator prevents prototype modifications
- Added test-lit.ts to ensure LitElement component renders correctly and increments counter on click
## 2025-06-19 - 2.4.0 - feat(bundler) ## 2025-06-19 - 2.4.0 - feat(bundler)
Introduce rspack bundler support and update multi-bundler workflow Introduce rspack bundler support and update multi-bundler workflow

View File

@ -1,6 +1,6 @@
{ {
"name": "@git.zone/tsbundle", "name": "@git.zone/tsbundle",
"version": "2.4.0", "version": "2.4.1",
"private": false, "private": false,
"description": "a multi-bundler tool supporting esbuild, rolldown, and rspack for painless bundling of web projects", "description": "a multi-bundler tool supporting esbuild, rolldown, and rspack for painless bundling of web projects",
"main": "dist_ts/index.js", "main": "dist_ts/index.js",

41
test/test-decorators.ts Normal file
View File

@ -0,0 +1,41 @@
// Test file to verify decorator functionality
function sealed(constructor: Function) {
Object.seal(constructor);
Object.seal(constructor.prototype);
}
@sealed
class TestClass {
name = 'test';
modify() {
this.name = 'modified';
}
}
// Test that the class is sealed
const instance = new TestClass();
console.log('Initial name:', instance.name);
// This should work (modifying existing property)
instance.modify();
console.log('Modified name:', instance.name);
// This should fail silently in non-strict mode or throw in strict mode
try {
(instance as any).newProperty = 'should not work';
console.log('Adding new property:', (instance as any).newProperty);
} catch (e) {
console.log('Error adding property (expected):', e.message);
}
// Test that we can't add to prototype
try {
(TestClass.prototype as any).newMethod = function() {};
console.log('Prototype is NOT sealed (unexpected)');
} catch (e) {
console.log('Prototype is sealed (expected)');
}
console.log('Is TestClass sealed?', Object.isSealed(TestClass));
console.log('Is TestClass.prototype sealed?', Object.isSealed(TestClass.prototype));

37
test/ts_web/test-lit.ts Normal file
View File

@ -0,0 +1,37 @@
import { LitElement, html, css } from 'lit';
import { customElement, property } from 'lit/decorators.js';
@customElement('my-element')
export class MyElement extends LitElement {
static styles = css`
:host {
display: block;
padding: 16px;
}
`;
@property({ type: String })
name = 'World';
@property({ type: Number })
count = 0;
render() {
return html`
<h1>Hello, ${this.name}!</h1>
<button @click=${this._onClick}>
Click Count: ${this.count}
</button>
`;
}
private _onClick() {
this.count++;
}
}
// Test instantiation
const element = new MyElement();
console.log('Element created:', element);
console.log('Element name:', element.name);
console.log('Element count:', element.count);

View File

@ -3,6 +3,6 @@
*/ */
export const commitinfo = { export const commitinfo = {
name: '@git.zone/tsbundle', name: '@git.zone/tsbundle',
version: '2.4.0', version: '2.4.1',
description: 'a multi-bundler tool supporting esbuild, rolldown, and rspack for painless bundling of web projects' description: 'a multi-bundler tool supporting esbuild, rolldown, and rspack for painless bundling of web projects'
} }