mirror of
https://github.com/pezkuwichain/pezkuwi-dev.git
synced 2026-10-22 11:46:18 +00:00
eslint 8 and typescript-eslint 6 are past their support, and the webpack dev server chain carried the dependency alerts every repository using this package inherited. Upstream @polkadot/dev still pins the same versions, so this leaves it on purpose. The rules are carried over with their options, so the lint means what it meant: - eslint-config-standard 17 (written for eslint 8) is replaced by its 161 rules in config/eslint.standard.js, with their options. Its 48 formatting rules, deprecated in eslint core, are the same rules in @stylistic; no-new-object and no-new-symbol are no-object-constructor and no-new-native-nonconstructor; import/* is import-x/*. - eslint-plugin-import (eslint <= 9) is eslint-plugin-import-x; eslint-plugin-deprecation is @typescript-eslint/no-deprecated; the formatting rules of core, typescript-eslint and eslint-plugin-react used in eslint.rules.js are their @stylistic versions with the same options. - typescript-eslint 8's preset swaps core no-unused-expressions for its own with default options; standard's (short circuit, ternary and tagged templates allowed) are carried over to it. - eslint-plugin-react and eslint-plugin-header still call context methods eslint 10 removed; @eslint/compat's fixupPluginRules supplies them. The header rule also gets `schema: false`, as eslint 9+ rejects options for a rule with no schema. The original header plugin stays rather than its fork: it reports at the first token after leading comments, so a generated file's /* eslint-disable */ still covers it, as it always has. The effective config was compared rule by rule (--print-config) for .ts, .tsx, .spec.ts and .mjs files before and after. Every rule that left has its successor active; option differences are eslint 10 spelling out defaults. New rules come from the eslint 10, typescript-eslint 8 and react-hooks 7 presets. no-inner-declarations left eslint's preset upstream. Also current: webpack-dev-server 6, webpack-cli 7, webpack-merge 6, rollup plugins, madge 8, gh-release 8, globals 17, espree 11; Node >= 20.19 for the dev package, which eslint 10 requires. In this repository the new rules found: Function types now named by no-unsafe-function-type; optional chains, includes() and RegExp#exec where they say the same thing; createWrapper returns Describe, so its three casts were redundant; rootCjs.spec casts through unknown, so the lint result does not depend on whether build/ exists. lint, build and test (149 passed) pass, and lint leaves the tree unchanged with and without a build.
63 lines
1.9 KiB
TypeScript
63 lines
1.9 KiB
TypeScript
// Copyright 2017-2026 @pezkuwi/dev-test authors & contributors
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
import { describe, it } from 'node:test';
|
|
|
|
import { enhanceObj } from '../util.js';
|
|
|
|
interface WrapOpts {
|
|
only?: boolean;
|
|
skip?: boolean;
|
|
todo?: boolean;
|
|
}
|
|
|
|
type WrapFn = (name: string, options: { only?: boolean; skip?: boolean; timeout?: number; todo?: boolean; }, fn: () => void | Promise<void>) => void | Promise<void>;
|
|
|
|
type TestFn = (name: string, exec: () => void | Promise<void>, timeout?: number) => void;
|
|
|
|
export interface Describe extends TestFn {
|
|
only: TestFn;
|
|
skip: TestFn;
|
|
todo: TestFn;
|
|
}
|
|
|
|
export interface It extends TestFn {
|
|
only: TestFn;
|
|
skip: TestFn;
|
|
todo: TestFn;
|
|
}
|
|
|
|
const MINUTE = 60 * 1000;
|
|
|
|
/**
|
|
* @internal
|
|
*
|
|
* Wraps either describe or it with relevant .only, .skip, .todo & .each helpers,
|
|
* shimming it into a Jest-compatible environment.
|
|
*
|
|
* Describe and It have the same shape, so one return type serves both.
|
|
*/
|
|
function createWrapper (fn: WrapFn, defaultTimeout: number): Describe {
|
|
const wrap = (opts: WrapOpts): TestFn => (name: string, exec: () => void | Promise<void>, timeout?: number) => fn(name, { ...opts, timeout: (timeout || defaultTimeout) }, exec) as unknown as void;
|
|
|
|
// Ensure that we have consistent helpers on the function. These are not consistently
|
|
// applied accross all node:test versions, latest has all, so always apply ours.
|
|
// Instead of node:test options for e.g. timeout, we provide a Jest-compatible signature
|
|
return enhanceObj(wrap({}), {
|
|
only: wrap({ only: true }),
|
|
skip: wrap({ skip: true }),
|
|
todo: wrap({ todo: true })
|
|
});
|
|
}
|
|
|
|
/**
|
|
* This ensures that the describe and it functions match our actual usages.
|
|
* This includes .only, .skip and .todo helpers (.each is not applied)
|
|
**/
|
|
export function suite (): { describe: Describe; it: It } {
|
|
return {
|
|
describe: createWrapper(describe, 60 * MINUTE),
|
|
it: createWrapper(it, 2 * MINUTE)
|
|
};
|
|
}
|