From harness-claude
Encapsulates private state and exposes public API in JavaScript using closures or ES modules. Use for private variables, clean APIs, and pre-ESM environments.
npx claudepluginhub intense-visions/harness-engineering --plugin harness-claudeThis skill uses the workspace's default tool permissions.
> Encapsulate private state and expose a public API using closures or ES modules
Implements JavaScript Revealing Module Pattern: define all logic privately in closure, return object revealing public API. For private-public separation and IIFE refactoring.
Writes, debugs, and refactors JavaScript using ES2023+ features, async/await, ESM modules, and Node.js APIs. For vanilla apps, browser/Node performance, Web Workers, Fetch API.
Teaches ES6+ features like arrow functions, destructuring, async/await, promises, and functional patterns for refactoring legacy JavaScript and optimizing web apps.
Share bugs, ideas, or general feedback.
Encapsulate private state and expose a public API using closures or ES modules
// Modern ESM module pattern
let _count = 0; // private — not exported
export function increment() {
_count++;
}
export function getCount() {
return _count;
}
// Legacy IIFE module pattern
const counter = (() => {
let _count = 0;
return {
increment: () => _count++,
getCount: () => _count,
};
})();
The Module pattern predates ES modules. In the browser, there was no built-in module system, so developers used IIFEs (Immediately Invoked Function Expressions) to create private scopes. Today, ES modules (.mjs, type="module") provide native module semantics — each file gets its own scope.
Trade-offs:
When NOT to use:
#field)https://patterns.dev/javascript/module-pattern