chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,153 @@
|
||||
// ES Module imports
|
||||
import { EventEmitter } from 'events';
|
||||
import { promisify } from 'util';
|
||||
|
||||
// Global constants
|
||||
const MAX_RETRIES = 3;
|
||||
const DEFAULT_TIMEOUT = 5000;
|
||||
|
||||
// Symbol for private properties
|
||||
const privateState = Symbol('privateState');
|
||||
|
||||
// Class using ES6+ features
|
||||
class DataProcessor extends EventEmitter {
|
||||
// Private class field
|
||||
#cache = new Map();
|
||||
|
||||
// Static class field
|
||||
static version = '1.0.0';
|
||||
|
||||
// Constructor with parameter destructuring
|
||||
constructor({ maxRetries = MAX_RETRIES, timeout = DEFAULT_TIMEOUT } = {}) {
|
||||
super();
|
||||
this[privateState] = { maxRetries, timeout };
|
||||
}
|
||||
|
||||
// Async method with error handling
|
||||
async processData(data) {
|
||||
try {
|
||||
const result = await this.#validateAndTransform(data);
|
||||
this.emit('processed', result);
|
||||
return result;
|
||||
} catch (error) {
|
||||
this.emit('error', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
// Private method
|
||||
async #validateAndTransform(data) {
|
||||
if (!data) throw new Error('Data is required');
|
||||
return { ...data, timestamp: Date.now() };
|
||||
}
|
||||
|
||||
// Generator method
|
||||
*iterateCache() {
|
||||
for (const [key, value] of this.#cache) {
|
||||
yield { key, value };
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Decorator function (stage 3 proposal)
|
||||
function deprecated(target, context) {
|
||||
if (context.kind === 'method') {
|
||||
const originalMethod = target;
|
||||
return function(...args) {
|
||||
console.warn(`Warning: ${context.name} is deprecated`);
|
||||
return originalMethod.apply(this, args);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
// Proxy example
|
||||
const handler = {
|
||||
get(target, prop) {
|
||||
return prop in target ? target[prop] : 'Property not found';
|
||||
}
|
||||
};
|
||||
|
||||
const proxy = new Proxy({}, handler);
|
||||
|
||||
// Promise-based utility function
|
||||
const delay = ms => new Promise(resolve => setTimeout(resolve, ms));
|
||||
|
||||
// Async generator function
|
||||
async function* generateSequence(start, end) {
|
||||
for (let i = start; i <= end; i++) {
|
||||
await delay(100);
|
||||
yield i;
|
||||
}
|
||||
}
|
||||
|
||||
// Higher-order function
|
||||
const memoize = (fn) => {
|
||||
const cache = new Map();
|
||||
return (...args) => {
|
||||
const key = JSON.stringify(args);
|
||||
if (cache.has(key)) return cache.get(key);
|
||||
const result = fn.apply(this, args);
|
||||
cache.set(key, result);
|
||||
return result;
|
||||
};
|
||||
};
|
||||
|
||||
// Custom error class
|
||||
class ValidationError extends Error {
|
||||
constructor(message, field) {
|
||||
super(message);
|
||||
this.name = 'ValidationError';
|
||||
this.field = field;
|
||||
}
|
||||
}
|
||||
|
||||
// Object with getter/setter
|
||||
const config = {
|
||||
_theme: 'light',
|
||||
get theme() {
|
||||
return this._theme;
|
||||
},
|
||||
set theme(value) {
|
||||
if (!['light', 'dark'].includes(value)) {
|
||||
throw new ValidationError('Invalid theme', 'theme');
|
||||
}
|
||||
this._theme = value;
|
||||
}
|
||||
};
|
||||
|
||||
// Array methods and destructuring
|
||||
const processItems = (items) => {
|
||||
const [first, ...rest] = items;
|
||||
return rest
|
||||
.filter(item => item != null)
|
||||
.map(item => ({ ...item, processed: true }))
|
||||
.reduce((acc, curr) => {
|
||||
acc[curr.id] = curr;
|
||||
return acc;
|
||||
}, {});
|
||||
};
|
||||
|
||||
// Async/await with Promise.all
|
||||
const fetchData = async (urls) => {
|
||||
try {
|
||||
const responses = await Promise.all(
|
||||
urls.map(url => fetch(url).then(res => res.json()))
|
||||
);
|
||||
return responses;
|
||||
} catch (error) {
|
||||
console.error('Failed to fetch data:', error);
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
|
||||
// Export statement
|
||||
export {
|
||||
DataProcessor,
|
||||
ValidationError,
|
||||
processItems,
|
||||
fetchData,
|
||||
delay,
|
||||
memoize,
|
||||
config
|
||||
};
|
||||
Reference in New Issue
Block a user