js-partial-classes
Version:
A utility package for supplementing main classes with methods from partial classes, supporting both static and instance methods.
74 lines (59 loc) ⢠1.93 kB
JavaScript
import { supplement, iterateDescriptors, SUPPLEMENTED_SYMBOLS } from '../index.js';
// Test classes
class MainClass {
static {
// Supplement with partial class during static initialization
supplement(this, import('./test-partial.js'));
}
constructor() {
this.name = 'Main';
}
mainMethod() {
return 'Main method';
}
}
class PartialClass {
static staticMethod() {
return 'Static method from partial';
}
instanceMethod() {
return 'Instance method from partial';
}
anotherInstanceMethod() {
return 'Another instance method';
}
}
// Test the supplement function
async function testSupplement() {
console.log('Testing supplement function...');
// Test after static initialization supplementation
const mainAfter = new MainClass();
await MainClass[SUPPLEMENTED_SYMBOLS.SUPPLEMENTATION_COMPLETED];
console.log('After static initialization supplementation:');
console.log('- Main method:', mainAfter.mainMethod());
console.log('- Static method:', MainClass.staticMethod());
console.log('- Instance method:', mainAfter.instanceMethod());
console.log('- Another instance method:', mainAfter.anotherInstanceMethod());
console.log('\nā
Static initialization supplement test passed!');
}
// Test the iterateDescriptors function
function testIterateDescriptors() {
console.log('\nTesting iterateDescriptors function...');
const descriptors = [];
iterateDescriptors(PartialClass, ([key, value]) => {
descriptors.push({ key, type: typeof value.value });
});
console.log('Found descriptors:', descriptors.map(d => `${d.key} (${d.type})`));
console.log('ā
IterateDescriptors test passed!');
}
// Run tests
async function runTests() {
try {
await testSupplement();
testIterateDescriptors();
console.log('\nš All tests passed!');
} catch (error) {
console.error('ā Test failed:', error);
}
}
runTests();