Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .eslintrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"ignorePatterns": ["dist/**", "coverage/**", "node_modules/**"]
}
10 changes: 5 additions & 5 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,19 +14,19 @@ jobs:
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
version: ['22.21.1', '24.11.1']
version: ['22.21.1', '24.16.0', '26.2.0']
runs-on: ${{ matrix.os }}
steps:
- name: Checkout
uses: actions/checkout@v6.0.1
uses: actions/checkout@v6.0.2
- name: Setup Node
uses: actions/setup-node@v6.2.0
uses: actions/setup-node@v6.4.0
with:
node-version: ${{ matrix.version }}
- name: Install Dependencies
run: npm ci
- name: Save error log
uses: actions/upload-artifact@v6.0.0
uses: actions/upload-artifact@v7.0.1
if: ${{ failure() }}
with:
name: npm-debug-log-${{ hashFiles('package-lock.json') }}
Expand All @@ -40,7 +40,7 @@ jobs:
- name: Test
run: npm test
- name: Report Coverage
uses: codecov/codecov-action@v5.5.2
uses: codecov/codecov-action@v6.0.1
with:
token: ${{ secrets.CODECOV_TOKEN }}
- name: Pack
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,15 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6.0.1
uses: actions/checkout@v6.0.2
- name: Setup Node
uses: actions/setup-node@v6.2.0
uses: actions/setup-node@v6.4.0
with:
node-version: '24.11.1'
node-version: '26.2.0'
- name: Install Dependencies
run: npm ci
- name: Save error log
uses: actions/upload-artifact@v6.0.0
uses: actions/upload-artifact@v7.0.1
if: ${{ failure() }}
with:
name: npm-debug-log-${{ hashFiles('package-lock.json') }}
Expand Down
5 changes: 4 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ By default `@knighted/module` transforms the one-to-one [differences between ES

## Requirements

- Node 22.21.1+ or 24+
- Node >= 22.21.1 (<23), >= 24 (<25), or >= 26 (<27)

## Install

Expand Down Expand Up @@ -222,4 +222,7 @@ dub -t commonjs "src/**/*.{ts,js,mts,cts}" --ignore node_modules/** --transform-
tsc
```

> [!NOTE]
> With TypeScript 6+, when a `tsconfig.json` is present, `rootDir` defaults to `.`. If your config uses `outDir` and includes sources under `src`, set `"rootDir": "./src"` explicitly to avoid TS5011.

This pre-`tsc` step rewrites globals-only (keeps import/export syntax) so the TypeScript checker sees already-rewritten sources; runtime semantics still match the target build.
2 changes: 1 addition & 1 deletion docs/cjs-to-esm.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
## Scope

- Rewrites CommonJS modules to ESM when `target: 'module'` with `transformSyntax` enabled.
- Assumes Node 22.21+ runtime with native ESM.
- Assumes a supported runtime from package engines: Node >= 22.21.1 (<23), >= 24 (<25), or >= 26 (<27), with native ESM.
- Skips lowering when `module` or `exports` are shadowed at module scope to avoid mis-compilation.
- Throws when encountering `with` statements or unshadowed `eval` to avoid unsound rewrites.
- Deprecated CJS features (`require.extensions`, `module.parent`, legacy folder-as-module resolution) are left as-is.
Expand Down
2 changes: 1 addition & 1 deletion docs/cli.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ Command-line wrapper around `@knighted/module` for transforming files between ES

## Requirements

- Node >= 22.21.1 (or Node 24+)
- Node >= 22.21.1 (<23), >= 24 (<25), or >= 26 (<27)

## Installation

Expand Down
2 changes: 1 addition & 1 deletion docs/esm-to-cjs.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
## Scope

- Translates ESM syntax to CommonJS when `target: 'commonjs'` with `transformSyntax` enabled.
- Assumes Node 22.21+ runtime with `__filename`/`__dirname` shims supplied by the host (matches package engines).
- Assumes a supported runtime from package engines: Node >= 22.21.1 (<23), >= 24 (<25), or >= 26 (<27), with `__filename`/`__dirname` shims supplied by the host.
- Keeps optional live-binding behavior via `liveBindings` (strict/loose/off).
- Top-level await (TLA) handling is controlled by `topLevelAwait: 'error' | 'wrap' | 'preserve'` when lowering to CommonJS.
- Optional import.meta.main gating via `importMetaMain: 'shim' | 'warn' | 'error'`.
Expand Down
66 changes: 66 additions & 0 deletions eslint.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
import importPlugin from 'eslint-plugin-import'
import tsParser from '@typescript-eslint/parser'

export default [
{
ignores: ['dist/**', 'coverage/**', 'node_modules/**'],
linterOptions: {
reportUnusedDisableDirectives: 'off',
},
},
{
files: ['**/*.ts'],
languageOptions: {
parser: tsParser,
ecmaVersion: 'latest',
sourceType: 'module',
},
settings: {
'import/parsers': {
'@typescript-eslint/parser': ['.ts'],
},
'import/resolver': {
typescript: {
project: './tsconfig.json',
alwaysTryTypes: true,
},
node: {
extensions: ['.js', '.mjs', '.cjs', '.ts'],
},
},
},
plugins: {
import: importPlugin,
},
rules: {
'import/order': [
'error',
{
groups: ['builtin', 'external', 'internal', 'sibling', 'index', 'parent'],
'newlines-between': 'always',
alphabetize: { order: 'asc', caseInsensitive: true },
},
],
},
},
{
files: ['src/**/*.ts'],
rules: {
'import/no-unused-modules': [
'error',
{
missingExports: true,
unusedExports: true,
src: ['src/**/*.ts', 'test/**/*.ts'],
ignoreExports: ['src/specifier.ts', 'src/types.ts'],
},
],
},
},
{
files: ['test/fixtures/**'],
rules: {
'import/no-unused-modules': 'off',
},
},
]
23 changes: 3 additions & 20 deletions oxlint.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,13 @@
"rules": {
"no-console": "error",
"unicorn/filename-case": ["error", { "case": "camelCase" }],
"@typescript-eslint/no-explicit-any": "error",
"import/order": [
"error",
{
"groups": ["builtin", "external", "internal", "parent", "sibling", "index"],
"newlines-between": "always",
"alphabetize": { "order": "asc", "caseInsensitive": true }
}
],
"import/no-unused-modules": [
"error",
{ "missingExports": true, "unusedExports": true }
]
"@typescript-eslint/no-explicit-any": "error"
},
"overrides": [
{
"files": ["test/fixtures/**", "testing.*", "test/helpers/**"],
"files": ["test/fixtures/**"],
"rules": {
"getter-return": "off",
"no-unused-vars": "off",
"no-unused-expressions": "off",
"no-dupe-class-members": "off",
Expand All @@ -32,12 +21,6 @@
"no-eval": "off"
}
},
{
"files": ["test/fixtures/identifiers/**"],
"rules": {
"no-unused-vars": "off"
}
},
{
"files": ["test/**", "!test/cli.ts"],
"rules": {
Expand Down
Loading
Loading