test: detect dependency cycles (#10973)
This commit is contained in:
parent
ecd6ac9dfa
commit
02a9917d16
12
.eslintrc.js
12
.eslintrc.js
@ -12,7 +12,13 @@ module.exports = {
|
||||
|
||||
plugins: ['mocha', '@typescript-eslint', 'import'],
|
||||
|
||||
extends: ['plugin:prettier/recommended'],
|
||||
extends: ['plugin:prettier/recommended', 'plugin:import/typescript'],
|
||||
|
||||
settings: {
|
||||
'import/resolver': {
|
||||
typescript: true,
|
||||
},
|
||||
},
|
||||
|
||||
rules: {
|
||||
// Brackets keep code readable.
|
||||
@ -111,8 +117,6 @@ module.exports = {
|
||||
],
|
||||
},
|
||||
],
|
||||
'import/extensions': ['error', 'ignorePackages'],
|
||||
|
||||
'import/order': [
|
||||
'error',
|
||||
{
|
||||
@ -121,6 +125,8 @@ module.exports = {
|
||||
},
|
||||
],
|
||||
|
||||
'import/no-cycle': ['warn', {maxDepth: Infinity}],
|
||||
|
||||
'no-restricted-syntax': [
|
||||
'error',
|
||||
// Don't allow underscored declarations on camelCased variables/properties.
|
||||
|
48
package-lock.json
generated
48
package-lock.json
generated
@ -47,6 +47,7 @@
|
||||
"eslint": "8.49.0",
|
||||
"eslint-config-prettier": "9.0.0",
|
||||
"eslint-formatter-codeframe": "7.32.1",
|
||||
"eslint-import-resolver-typescript": "3.6.0",
|
||||
"eslint-plugin-import": "2.28.1",
|
||||
"eslint-plugin-mocha": "10.1.0",
|
||||
"eslint-plugin-prettier": "5.0.0",
|
||||
@ -3416,6 +3417,19 @@
|
||||
"once": "^1.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/enhanced-resolve": {
|
||||
"version": "5.15.0",
|
||||
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz",
|
||||
"integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"graceful-fs": "^4.2.4",
|
||||
"tapable": "^2.2.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10.13.0"
|
||||
}
|
||||
},
|
||||
"node_modules/entities": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz",
|
||||
@ -3745,6 +3759,31 @@
|
||||
"ms": "^2.1.1"
|
||||
}
|
||||
},
|
||||
"node_modules/eslint-import-resolver-typescript": {
|
||||
"version": "3.6.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.0.tgz",
|
||||
"integrity": "sha512-QTHR9ddNnn35RTxlaEnx2gCxqFlF2SEN0SE2d17SqwyM7YOSI2GHWRYp5BiRkObTUNYPupC/3Fq2a0PpT+EKpg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"debug": "^4.3.4",
|
||||
"enhanced-resolve": "^5.12.0",
|
||||
"eslint-module-utils": "^2.7.4",
|
||||
"fast-glob": "^3.3.1",
|
||||
"get-tsconfig": "^4.5.0",
|
||||
"is-core-module": "^2.11.0",
|
||||
"is-glob": "^4.0.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^14.18.0 || >=16.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"eslint": "*",
|
||||
"eslint-plugin-import": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/eslint-module-utils": {
|
||||
"version": "2.8.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz",
|
||||
@ -9754,6 +9793,15 @@
|
||||
"url": "https://opencollective.com/unts"
|
||||
}
|
||||
},
|
||||
"node_modules/tapable": {
|
||||
"version": "2.2.1",
|
||||
"resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
|
||||
"integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/tar": {
|
||||
"version": "6.2.0",
|
||||
"resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz",
|
||||
|
@ -139,9 +139,9 @@
|
||||
"@types/tar-fs": "2.0.2",
|
||||
"@types/unbzip2-stream": "1.4.1",
|
||||
"@types/ws": "8.5.5",
|
||||
"@types/yargs": "17.0.24",
|
||||
"@typescript-eslint/eslint-plugin": "6.7.2",
|
||||
"@typescript-eslint/parser": "6.7.2",
|
||||
"@types/yargs": "17.0.24",
|
||||
"c8": "8.0.1",
|
||||
"commonmark": "0.30.0",
|
||||
"cross-env": "7.0.3",
|
||||
@ -150,10 +150,11 @@
|
||||
"eslint": "8.49.0",
|
||||
"eslint-config-prettier": "9.0.0",
|
||||
"eslint-formatter-codeframe": "7.32.1",
|
||||
"eslint-import-resolver-typescript": "3.6.0",
|
||||
"eslint-plugin-import": "2.28.1",
|
||||
"eslint-plugin-rulesdir": "0.2.2",
|
||||
"eslint-plugin-mocha": "10.1.0",
|
||||
"eslint-plugin-prettier": "5.0.0",
|
||||
"eslint-plugin-rulesdir": "0.2.2",
|
||||
"eslint-plugin-tsdoc": "0.2.17",
|
||||
"eslint-plugin-unused-imports": "3.0.0",
|
||||
"esprima": "4.0.1",
|
||||
|
@ -32,18 +32,6 @@ const BUILTIN_QUERY_HANDLERS = {
|
||||
|
||||
const QUERY_SEPARATORS = ['=', '/'];
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
export function getQueryHandlerByName(
|
||||
name: string
|
||||
): typeof QueryHandler | undefined {
|
||||
if (name in BUILTIN_QUERY_HANDLERS) {
|
||||
return BUILTIN_QUERY_HANDLERS[name as keyof typeof BUILTIN_QUERY_HANDLERS];
|
||||
}
|
||||
return customQueryHandlers.get(name);
|
||||
}
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
|
@ -14,7 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import {ElementHandle} from '../api/ElementHandle.js';
|
||||
import type {ElementHandle} from '../api/ElementHandle.js';
|
||||
import type {Frame} from '../api/Frame.js';
|
||||
import type {WaitForSelectorOptions} from '../api/Page.js';
|
||||
import type PuppeteerUtil from '../injected/injected.js';
|
||||
@ -132,6 +132,7 @@ export class QueryHandler {
|
||||
return context.puppeteerUtil;
|
||||
})
|
||||
);
|
||||
const {ElementHandle} = await import('../api/ElementHandle.js');
|
||||
if (!(result instanceof ElementHandle)) {
|
||||
return null;
|
||||
}
|
||||
@ -150,6 +151,7 @@ export class QueryHandler {
|
||||
selector: string,
|
||||
options: WaitForSelectorOptions
|
||||
): Promise<ElementHandle<Node> | null> {
|
||||
const {ElementHandle} = await import('../api/ElementHandle.js');
|
||||
let frame!: Frame;
|
||||
using element = await (async () => {
|
||||
if (!(elementOrFrame instanceof ElementHandle)) {
|
||||
|
@ -1,12 +1,13 @@
|
||||
// eslint-disable-next-line no-restricted-imports
|
||||
import {EventEmitter as NodeEventEmitter} from 'node:events';
|
||||
|
||||
import {expectAssignable} from 'tsd';
|
||||
|
||||
import {
|
||||
type CommonEventEmitter,
|
||||
type EventEmitter,
|
||||
type EventType,
|
||||
} from 'puppeteer';
|
||||
import {expectAssignable} from 'tsd';
|
||||
|
||||
declare const emitter: EventEmitter<Record<EventType, any>>;
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
import {type ElementHandle} from 'puppeteer';
|
||||
import {expectNotType, expectType} from 'tsd';
|
||||
|
||||
import {type ElementHandle} from 'puppeteer';
|
||||
|
||||
declare const handle: ElementHandle;
|
||||
|
||||
{
|
||||
|
@ -1,6 +1,7 @@
|
||||
import {type ElementHandle, type JSHandle} from 'puppeteer';
|
||||
import {expectNotAssignable, expectNotType, expectType} from 'tsd';
|
||||
|
||||
import {type ElementHandle, type JSHandle} from 'puppeteer';
|
||||
|
||||
declare const handle: JSHandle;
|
||||
|
||||
{
|
||||
|
@ -1,6 +1,7 @@
|
||||
import type {NodeFor} from 'puppeteer';
|
||||
import {expectType, expectNotType} from 'tsd';
|
||||
|
||||
import type {NodeFor} from 'puppeteer';
|
||||
|
||||
declare const nodeFor: <Selector extends string>(
|
||||
selector: Selector
|
||||
) => NodeFor<Selector>;
|
||||
|
@ -1,10 +1,11 @@
|
||||
import {expectType} from 'tsd';
|
||||
|
||||
import puppeteer, {
|
||||
type connect,
|
||||
type defaultArgs,
|
||||
type executablePath,
|
||||
type launch,
|
||||
} from 'puppeteer';
|
||||
import {expectType} from 'tsd';
|
||||
|
||||
expectType<typeof launch>(puppeteer.launch);
|
||||
expectType<typeof connect>(puppeteer.connect);
|
||||
|
Loading…
Reference in New Issue
Block a user