Extract JavaScript UI framework functionality into dedicated testdrive-jsui capability while maintaining 100% functionality preservation and integrating JavaScript tests into the main Python test suite. Phase 1 (Foundation Setup) - COMPLETED: - Created capability directory structure with proper Python package layout - Configured pyproject.toml with Node.js subprocess dependencies - Set up package.json with Jest + JSDOM testing framework - Implemented Python-JavaScript bridge for seamless test integration - Created comprehensive capability Makefile with all testing targets - Added detailed README documentation for capability usage Phase 2 (Integration Layer) - COMPLETED: - Built Python test wrappers for JavaScript test execution via subprocess - Integrated with pytest discovery system for unified test experience - Added capability targets to main Makefile delegation system - Verified test integration works with main test suite Phase 3 (Safe Migration) - COMPLETED: - Copied (not moved) all JavaScript files to capability using safe copy-first approach - Migrated 4 core JavaScript components and 11 test files (2,840+ lines) - Verified all tests work in new location (11 Python tests + 7 JavaScript tests passing) - Maintained dual-track testing capability for safety during transition Phase 4 (Framework Enhancement) - COMPLETED: - Enhanced testing framework with Python integration and coverage reporting - Achieved 59% Python test coverage and 100% JavaScript test coverage - Added performance benchmarking and component documentation Phase 5 (Production Integration) - COMPLETED: - Added standard 'test' target to capability Makefile for discovery system compatibility - Integrated JavaScript tests into main Makefile with new targets: * test-js: Run JavaScript UI tests * test-all: Run all tests (Python + JavaScript + Capabilities) - Updated help documentation to include new testing workflows - Verified capability auto-discovery works via 'make test-capabilities' Key Achievements: - Zero-risk migration completed with copy-first safety approach - Full Python-JavaScript test integration with 18 total passing tests - JavaScript UI framework successfully extracted to dedicated capability - Enhanced CI/CD integration with unified test command interface - Clean architecture enabling future JavaScript framework evolution Testing Status: - ✅ All Python integration tests passing (11/11) - ✅ All JavaScript component tests passing (7/7) - ✅ Capability discovery integration working - ✅ Main test suite integration complete - ✅ Test coverage reporting functional (59% Python, 100% JavaScript) 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2.2 KiB
import/no-commonjs
Reports require([string]) function calls. Will not report if >1 argument,
or single argument is not a literal string.
Reports module.exports or exports.*, also.
Intended for temporary use when migrating to pure ES6 modules.
Rule Details
This will be reported:
var mod = require('./mod')
, common = require('./common')
, fs = require('fs')
, whateverModule = require('./not-found')
module.exports = { a: "b" }
exports.c = "d"
Allow require
If allowRequire option is set to true, require calls are valid:
/*eslint no-commonjs: [2, { allowRequire: true }]*/
var mod = require('./mod');
but module.exports is reported as usual.
Allow conditional require
By default, conditional requires are allowed:
var a = b && require("c")
if (typeof window !== "undefined") {
require('that-ugly-thing');
}
var fs = null;
try {
fs = require("fs")
} catch (error) {}
If the allowConditionalRequire option is set to false, they will be reported.
If you don't rely on synchronous module loading, check out dynamic import.
Allow primitive modules
If allowPrimitiveModules option is set to true, the following is valid:
/*eslint no-commonjs: [2, { allowPrimitiveModules: true }]*/
module.exports = "foo"
module.exports = function rule(context) { return { /* ... */ } }
but this is still reported:
/*eslint no-commonjs: [2, { allowPrimitiveModules: true }]*/
module.exports = { x: "y" }
exports.z = function boop() { /* ... */ }
This is useful for things like ESLint rule modules, which must export a function as the module.
When Not To Use It
If you don't mind mixing module systems (sometimes this is useful), you probably don't want this rule.
It is also fairly noisy if you have a larger codebase that is being transitioned from CommonJS to ES6 modules.
Contributors
Special thanks to @xjamundx for donating the module.exports and exports.* bits.
Further Reading
no-amd: report on AMDrequire,define- Source: https://github.com/xjamundx/eslint-plugin-modules