Skip to content

Commit

Permalink
Merge pull request #146 from fire332/main
Browse files Browse the repository at this point in the history
Bump deps to latest major version and other misc dev UX
  • Loading branch information
throwaway96 authored Apr 8, 2024
2 parents 5b1f47f + 6db7baa commit ffa5e32
Show file tree
Hide file tree
Showing 23 changed files with 1,633 additions and 1,582 deletions.
16 changes: 14 additions & 2 deletions .prettierrc.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,16 @@
module.exports = {
/** @type {import('prettier').Config} */
const config = {
trailingComma: 'none',
singleQuote: true
singleQuote: true,
endOfLine: 'auto',
overrides: [
{
files: ['tsconfig.json', 'jsconfig.json', 'tsconfig.*.json'],
options: {
parser: 'jsonc'
}
}
]
};

export default config;
3 changes: 1 addition & 2 deletions .vscode/extensions.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
"recommendations": [
"editorconfig.editorconfig",
"esbenp.prettier-vscode",
"dbaeumer.vscode-eslint",
"eg2.vscode-npm-script"
"dbaeumer.vscode-eslint"
]
}
4 changes: 3 additions & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,7 @@
"javascript.preferences.quoteStyle": "single",
"prettier.requireConfig": true,
"prettier.useEditorConfig": true,
"editor.formatOnSave": true
"editor.formatOnSave": true,
"prettier.ignorePath": ".prettierignore",
"typescript.tsdk": "node_modules\\typescript\\lib"
}
31 changes: 25 additions & 6 deletions babel.config.js
Original file line number Diff line number Diff line change
@@ -1,23 +1,40 @@
module.exports = (api) => {
api.cache.never();
import Module from 'node:module';

const require = Module.createRequire(import.meta.url);

// From: https://github.com/babel/babel-polyfills/blob/a5db9c31c5b5474b4018e6178bc40882fc3eb5bf/packages/babel-plugin-polyfill-corejs3/README.md#version

const {
version: babelruntimeVersion
} = require('@babel/runtime-corejs3/package.json');
const { version: corejspureVersion } = require('core-js-pure/package.json');

/** @type {import('@babel/core').ConfigFunction} */
function makeConfig(api) {
api.cache.invalidate(() => babelruntimeVersion + corejspureVersion);

return {
// Fixes "TypeError: __webpack_require__(...) is not a function"
// https://github.com/webpack/webpack/issues/9379#issuecomment-509628205
// https://babeljs.io/docs/en/options#sourcetype
// https://babel.dev/docs/options#sourcetype
sourceType: 'unambiguous',
// https://babel.dev/docs/assumptions
assumptions: {
noNewArrows: true
},
plugins: [
[
'@babel/plugin-transform-runtime',
{
regenerator: false,
version: require('./package.json').dependencies['@babel/runtime']
version: babelruntimeVersion
}
],
[
'polyfill-corejs3',
{
method: 'usage-pure'
method: 'usage-pure',
version: corejspureVersion
}
],
[
Expand All @@ -36,4 +53,6 @@ module.exports = (api) => {
]
]
};
};
}

export default makeConfig;
101 changes: 101 additions & 0 deletions eslint.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
import { dirname, join } from 'node:path';
import { fileURLToPath } from 'node:url';
import Module from 'node:module';

import eslintJs from '@eslint/js';
import prettierConfig from 'eslint-config-prettier';
// @ts-expect-error No type definitions available for this package. https://github.com/ota-meshi/eslint-plugin-regexp/issues/723
import * as regexpPlugin from 'eslint-plugin-regexp';
import globals from 'globals';

const require = Module.createRequire(import.meta.url);
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);

/** @type {'module' | 'commonjs'} */
const defaultSourceType =
require(join(__dirname, 'package.json')).type ?? 'commonjs';

/** @type {import('eslint').Linter.FlatConfig[]} */
export default [
eslintJs.configs.recommended,
prettierConfig,
regexpPlugin.configs['flat/recommended'],

{
linterOptions: {
reportUnusedDisableDirectives: 'error'
},

languageOptions: {
sourceType: defaultSourceType,
parserOptions: {
ecmaFeatures: {
impliedStrict: true
}
},
globals: {
...globals.nodeBuiltin
}
},

rules: {
'no-var': 'error',
'no-await-in-loop': 'error',
'no-implicit-globals': ['error'],
'no-unused-vars': ['error', { vars: 'local', argsIgnorePattern: '^_' }],
'no-useless-rename': ['error'],
'arrow-body-style': ['error', 'as-needed'],
'no-lonely-if': 'error',
'prefer-object-has-own': 'error',
'prefer-exponentiation-operator': 'error',
'prefer-regex-literals': ['error', { disallowRedundantWrapping: true }],
'array-callback-return': [
'error',
{ checkForEach: true, allowVoid: true }
],
'no-constructor-return': 'error',
'no-unmodified-loop-condition': 'error',
'no-useless-assignment': 'error',

/* eslint-plugin-regexp */
'regexp/prefer-character-class': ['error', { minAlternatives: 2 }],
'regexp/no-empty-alternative': 'error', // Set to warn in recommended config
'regexp/no-lazy-ends': 'error', // Set to warn in recommended config
'regexp/no-potentially-useless-backreference': 'error', // Set to warn in recommended config
'regexp/confusing-quantifier': 'error', // Set to warn in recommended config
'regexp/no-useless-flag': 'error', // Set to warn in recommended config
'regexp/optimal-lookaround-quantifier': 'error' // Set to warn in recommended config
}
},

{
files: ['src/**/*'],
languageOptions: {
globals: {
...globals.browser
}
}
},

{
// Why doesn't ESLint do this by default is beyond me.
files: ['**/*.cjs'],
languageOptions: {
sourceType: 'commonjs'
}
},

{
// Why doesn't ESLint do this by default is beyond me.
files: ['**/*.mjs'],
languageOptions: {
sourceType: 'module'
}
},

{
// `ignores` field must be in the very bottom config.
ignores: ['dist/**/*', '**/*-polyfill.*']
}
];
13 changes: 0 additions & 13 deletions jsconfig.json

This file was deleted.

10 changes: 10 additions & 0 deletions lint-staged.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
function globForCode(/** @type {string} */ toolName) {
return '*.?(c|m){js,ts}?(x)' + `*(${toolName})`;
}

/** @type {import('lint-staged').Config} */
export default {
'*': 'prettier --ignore-unknown --write',
[globForCode('eslint')]: 'eslint',
[globForCode('tsc')]: () => 'tsc -b'
};
Loading

0 comments on commit ffa5e32

Please sign in to comment.