diff --git a/packages/playwright-core/src/client/DEPS.list b/packages/playwright-core/src/client/DEPS.list index 16a569a46d..cd30be6967 100644 --- a/packages/playwright-core/src/client/DEPS.list +++ b/packages/playwright-core/src/client/DEPS.list @@ -1,4 +1,4 @@ [*] ../common/ ../protocol/ -../utils/ +../utils/** diff --git a/packages/playwright-core/src/client/locator.ts b/packages/playwright-core/src/client/locator.ts index d9e9f98a47..68e51252b6 100644 --- a/packages/playwright-core/src/client/locator.ts +++ b/packages/playwright-core/src/client/locator.ts @@ -24,7 +24,7 @@ import { ElementHandle } from './elementHandle'; import type { Frame } from './frame'; import type { FilePayload, FrameExpectOptions, Rect, SelectOption, SelectOptionOptions, TimeoutOptions } from './types'; import { parseResult, serializeArgument } from './jsHandle'; -import { escapeWithQuotes } from '../utils/stringUtils'; +import { escapeWithQuotes } from '../utils/isomorphic/stringUtils'; export class Locator implements api.Locator { _frame: Frame; diff --git a/packages/playwright-core/src/server/DEPS.list b/packages/playwright-core/src/server/DEPS.list index da68a5e95e..a36064532c 100644 --- a/packages/playwright-core/src/server/DEPS.list +++ b/packages/playwright-core/src/server/DEPS.list @@ -4,8 +4,9 @@ ../protocol/ ../utils/ ./ -./common/ ./injected/ +./isomorphic/ +./registry/ ./supplements/ ./trace/recorder/tracing.ts diff --git a/packages/playwright-core/src/server/chromium/crExecutionContext.ts b/packages/playwright-core/src/server/chromium/crExecutionContext.ts index b1bd9decb5..51cd5aca65 100644 --- a/packages/playwright-core/src/server/chromium/crExecutionContext.ts +++ b/packages/playwright-core/src/server/chromium/crExecutionContext.ts @@ -20,7 +20,7 @@ import { getExceptionMessage, releaseObject } from './crProtocolHelper'; import type { Protocol } from './protocol'; import * as js from '../javascript'; import { rewriteErrorMessage } from '../../utils/stackTrace'; -import { parseEvaluationResultValue } from '../common/utilityScriptSerializers'; +import { parseEvaluationResultValue } from '../isomorphic/utilityScriptSerializers'; import { isSessionClosedError } from '../protocolError'; export class CRExecutionContext implements js.ExecutionContextDelegate { diff --git a/packages/playwright-core/src/server/common/DEPS.list b/packages/playwright-core/src/server/common/DEPS.list deleted file mode 100644 index e43dcb5d9f..0000000000 --- a/packages/playwright-core/src/server/common/DEPS.list +++ /dev/null @@ -1 +0,0 @@ -[*] diff --git a/packages/playwright-core/src/server/common/README.md b/packages/playwright-core/src/server/common/README.md deleted file mode 100644 index a4f81602e1..0000000000 --- a/packages/playwright-core/src/server/common/README.md +++ /dev/null @@ -1 +0,0 @@ -Files in this folder are used both in Node.js and injected environments, they can't have dependencies. \ No newline at end of file diff --git a/packages/playwright-core/src/server/firefox/ffExecutionContext.ts b/packages/playwright-core/src/server/firefox/ffExecutionContext.ts index 127303ee2d..ba981da942 100644 --- a/packages/playwright-core/src/server/firefox/ffExecutionContext.ts +++ b/packages/playwright-core/src/server/firefox/ffExecutionContext.ts @@ -19,7 +19,7 @@ import * as js from '../javascript'; import type { FFSession } from './ffConnection'; import type { Protocol } from './protocol'; import { rewriteErrorMessage } from '../../utils/stackTrace'; -import { parseEvaluationResultValue } from '../common/utilityScriptSerializers'; +import { parseEvaluationResultValue } from '../isomorphic/utilityScriptSerializers'; import { isSessionClosedError } from '../protocolError'; export class FFExecutionContext implements js.ExecutionContextDelegate { diff --git a/packages/playwright-core/src/server/frames.ts b/packages/playwright-core/src/server/frames.ts index 0a3fe73933..4577d508b3 100644 --- a/packages/playwright-core/src/server/frames.ts +++ b/packages/playwright-core/src/server/frames.ts @@ -37,8 +37,8 @@ import { serverSideCallMetadata, SdkObject } from './instrumentation'; import { type InjectedScript } from './injected/injectedScript'; import type { ElementStateWithoutStable, FrameExpectParams, InjectedScriptPoll, InjectedScriptProgress } from './injected/injectedScript'; import { isSessionClosedError } from './protocolError'; -import type { ParsedSelector } from './common/selectorParser'; -import { isInvalidSelectorError, splitSelectorByFrame, stringifySelector } from './common/selectorParser'; +import type { ParsedSelector } from './isomorphic/selectorParser'; +import { isInvalidSelectorError, splitSelectorByFrame, stringifySelector } from './isomorphic/selectorParser'; import type { SelectorInfo } from './selectors'; import type { ScreenshotOptions } from './screenshotter'; import type { InputFilesItems } from './dom'; diff --git a/packages/playwright-core/src/server/injected/DEPS.list b/packages/playwright-core/src/server/injected/DEPS.list index c0a39450ff..5269c49fec 100644 --- a/packages/playwright-core/src/server/injected/DEPS.list +++ b/packages/playwright-core/src/server/injected/DEPS.list @@ -1,2 +1,3 @@ +# Files in this folder are used in browser environment, they can only depend on isomorphic files. [*] -../common/ +../isomorphic/ \ No newline at end of file diff --git a/packages/playwright-core/src/server/injected/injectedScript.ts b/packages/playwright-core/src/server/injected/injectedScript.ts index 26cbba9c47..d1bd83b1cf 100644 --- a/packages/playwright-core/src/server/injected/injectedScript.ts +++ b/packages/playwright-core/src/server/injected/injectedScript.ts @@ -19,11 +19,11 @@ import { XPathEngine } from './xpathSelectorEngine'; import { ReactEngine } from './reactSelectorEngine'; import { VueEngine } from './vueSelectorEngine'; import { RoleEngine } from './roleSelectorEngine'; -import type { ParsedSelector, ParsedSelectorPart } from '../common/selectorParser'; -import { allEngineNames, parseSelector, stringifySelector } from '../common/selectorParser'; +import type { ParsedSelector, ParsedSelectorPart } from '../isomorphic/selectorParser'; +import { allEngineNames, parseSelector, stringifySelector } from '../isomorphic/selectorParser'; import type { TextMatcher } from './selectorEvaluator'; import { SelectorEvaluatorImpl, isVisible, parentElementOrShadowHost, elementMatchesText, createRegexTextMatcher, createStrictTextMatcher, createLaxTextMatcher } from './selectorEvaluator'; -import type { CSSComplexSelectorList } from '../common/cssParser'; +import type { CSSComplexSelectorList } from '../isomorphic/cssParser'; import { generateSelector } from './selectorGenerator'; import type * as channels from '../../protocol/channels'; import { Highlight } from './highlight'; diff --git a/packages/playwright-core/src/server/injected/selectorEvaluator.ts b/packages/playwright-core/src/server/injected/selectorEvaluator.ts index db036cb0f1..2dac43a688 100644 --- a/packages/playwright-core/src/server/injected/selectorEvaluator.ts +++ b/packages/playwright-core/src/server/injected/selectorEvaluator.ts @@ -14,8 +14,8 @@ * limitations under the License. */ -import type { CSSComplexSelector, CSSSimpleSelector, CSSComplexSelectorList, CSSFunctionArgument } from '../common/cssParser'; -import { customCSSNames } from '../common/selectorParser'; +import type { CSSComplexSelector, CSSSimpleSelector, CSSComplexSelectorList, CSSFunctionArgument } from '../isomorphic/cssParser'; +import { customCSSNames } from '../isomorphic/selectorParser'; export type QueryContext = { scope: Element | Document; diff --git a/packages/playwright-core/src/server/injected/utilityScript.ts b/packages/playwright-core/src/server/injected/utilityScript.ts index 8d1a436c44..6da576cd08 100644 --- a/packages/playwright-core/src/server/injected/utilityScript.ts +++ b/packages/playwright-core/src/server/injected/utilityScript.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { serializeAsCallArgument, parseEvaluationResultValue } from '../common/utilityScriptSerializers'; +import { serializeAsCallArgument, parseEvaluationResultValue } from '../isomorphic/utilityScriptSerializers'; export class UtilityScript { evaluate(isFunction: boolean | undefined, returnByValue: boolean, expression: string, argCount: number, ...argsAndHandles: any[]) { diff --git a/packages/playwright-core/src/server/isomorphic/DEPS.list b/packages/playwright-core/src/server/isomorphic/DEPS.list new file mode 100644 index 0000000000..c962277084 --- /dev/null +++ b/packages/playwright-core/src/server/isomorphic/DEPS.list @@ -0,0 +1,2 @@ +# Files in this folder are used both in Node.js and injected environments, they are isomorphic and can't have dependencies. +[*] diff --git a/packages/playwright-core/src/server/common/cssParser.ts b/packages/playwright-core/src/server/isomorphic/cssParser.ts similarity index 100% rename from packages/playwright-core/src/server/common/cssParser.ts rename to packages/playwright-core/src/server/isomorphic/cssParser.ts diff --git a/packages/playwright-core/src/server/common/cssTokenizer.d.ts b/packages/playwright-core/src/server/isomorphic/cssTokenizer.d.ts similarity index 100% rename from packages/playwright-core/src/server/common/cssTokenizer.d.ts rename to packages/playwright-core/src/server/isomorphic/cssTokenizer.d.ts diff --git a/packages/playwright-core/src/server/common/cssTokenizer.js b/packages/playwright-core/src/server/isomorphic/cssTokenizer.js similarity index 100% rename from packages/playwright-core/src/server/common/cssTokenizer.js rename to packages/playwright-core/src/server/isomorphic/cssTokenizer.js diff --git a/packages/playwright-core/src/server/common/selectorParser.ts b/packages/playwright-core/src/server/isomorphic/selectorParser.ts similarity index 100% rename from packages/playwright-core/src/server/common/selectorParser.ts rename to packages/playwright-core/src/server/isomorphic/selectorParser.ts diff --git a/packages/playwright-core/src/server/common/utilityScriptSerializers.ts b/packages/playwright-core/src/server/isomorphic/utilityScriptSerializers.ts similarity index 100% rename from packages/playwright-core/src/server/common/utilityScriptSerializers.ts rename to packages/playwright-core/src/server/isomorphic/utilityScriptSerializers.ts diff --git a/packages/playwright-core/src/server/javascript.ts b/packages/playwright-core/src/server/javascript.ts index 2f409c2fb0..768c89427d 100644 --- a/packages/playwright-core/src/server/javascript.ts +++ b/packages/playwright-core/src/server/javascript.ts @@ -16,7 +16,7 @@ import type * as dom from './dom'; import * as utilityScriptSource from '../generated/utilityScriptSource'; -import { serializeAsCallArgument } from './common/utilityScriptSerializers'; +import { serializeAsCallArgument } from './isomorphic/utilityScriptSerializers'; import { type UtilityScript } from './injected/utilityScript'; import { SdkObject } from './instrumentation'; import { ManualPromise } from '../utils/manualPromise'; diff --git a/packages/playwright-core/src/server/page.ts b/packages/playwright-core/src/server/page.ts index 2b91818485..f94e044914 100644 --- a/packages/playwright-core/src/server/page.ts +++ b/packages/playwright-core/src/server/page.ts @@ -40,8 +40,8 @@ import type { CallMetadata } from './instrumentation'; import { SdkObject } from './instrumentation'; import type { Artifact } from './artifact'; import type { TimeoutOptions } from '../common/types'; -import type { ParsedSelector } from './common/selectorParser'; -import { isInvalidSelectorError } from './common/selectorParser'; +import type { ParsedSelector } from './isomorphic/selectorParser'; +import { isInvalidSelectorError } from './isomorphic/selectorParser'; export interface PageDelegate { readonly rawMouse: input.RawMouse; diff --git a/packages/playwright-core/src/server/screenshotter.ts b/packages/playwright-core/src/server/screenshotter.ts index 644815f8e1..22bb27466b 100644 --- a/packages/playwright-core/src/server/screenshotter.ts +++ b/packages/playwright-core/src/server/screenshotter.ts @@ -20,7 +20,7 @@ import type { Rect } from '../common/types'; import { helper } from './helper'; import type { Page } from './page'; import type { Frame } from './frames'; -import type { ParsedSelector } from './common/selectorParser'; +import type { ParsedSelector } from './isomorphic/selectorParser'; import type * as types from './types'; import type { Progress } from './progress'; import { assert } from '../utils'; diff --git a/packages/playwright-core/src/server/selectors.ts b/packages/playwright-core/src/server/selectors.ts index 90c4f4d4b7..e1117dd3a2 100644 --- a/packages/playwright-core/src/server/selectors.ts +++ b/packages/playwright-core/src/server/selectors.ts @@ -18,8 +18,8 @@ import type * as dom from './dom'; import type * as frames from './frames'; import type * as js from './javascript'; import type * as types from './types'; -import type { ParsedSelector } from './common/selectorParser'; -import { allEngineNames, InvalidSelectorError, parseSelector, stringifySelector } from './common/selectorParser'; +import type { ParsedSelector } from './isomorphic/selectorParser'; +import { allEngineNames, InvalidSelectorError, parseSelector, stringifySelector } from './isomorphic/selectorParser'; import { createGuid, experimentalFeaturesEnabled } from '../utils'; export type SelectorInfo = { diff --git a/packages/playwright-core/src/server/supplements/injected/DEPS.list b/packages/playwright-core/src/server/supplements/injected/DEPS.list index db653ddbcd..d537791e79 100644 --- a/packages/playwright-core/src/server/supplements/injected/DEPS.list +++ b/packages/playwright-core/src/server/supplements/injected/DEPS.list @@ -1,3 +1,4 @@ +# Files in this folder are used in browser environment, they can only depend on isomorphic files. [*] ../../injected/ -../../../utils/ +../../../utils/isomorphic/ diff --git a/packages/playwright-core/src/server/supplements/injected/consoleApi.ts b/packages/playwright-core/src/server/supplements/injected/consoleApi.ts index 58af20a017..d0a2091b35 100644 --- a/packages/playwright-core/src/server/supplements/injected/consoleApi.ts +++ b/packages/playwright-core/src/server/supplements/injected/consoleApi.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { escapeWithQuotes } from '../../../utils/stringUtils'; +import { escapeWithQuotes } from '../../../utils/isomorphic/stringUtils'; import { type InjectedScript } from '../../injected/injectedScript'; import { generateSelector } from '../../injected/selectorGenerator'; diff --git a/packages/playwright-core/src/server/supplements/recorder/DEPS.list b/packages/playwright-core/src/server/supplements/recorder/DEPS.list index 0746fc118c..1ff4195c4b 100644 --- a/packages/playwright-core/src/server/supplements/recorder/DEPS.list +++ b/packages/playwright-core/src/server/supplements/recorder/DEPS.list @@ -1,8 +1,9 @@ [*] ../../ +../../registry/** ../../../common/ ../../../protocol/ -../../../utils/ +../../../utils/** [recorderApp.ts] ../../chromium/crApp.ts diff --git a/packages/playwright-core/src/server/supplements/recorder/csharp.ts b/packages/playwright-core/src/server/supplements/recorder/csharp.ts index 57f08259ea..605f0940f1 100644 --- a/packages/playwright-core/src/server/supplements/recorder/csharp.ts +++ b/packages/playwright-core/src/server/supplements/recorder/csharp.ts @@ -22,7 +22,7 @@ import type { Action } from './recorderActions'; import { actionTitle } from './recorderActions'; import type { MouseClickOptions } from './utils'; import { toModifiers } from './utils'; -import { escapeWithQuotes } from '../../../utils/stringUtils'; +import { escapeWithQuotes } from '../../../utils/isomorphic/stringUtils'; import deviceDescriptors from '../../deviceDescriptors'; export class CSharpLanguageGenerator implements LanguageGenerator { diff --git a/packages/playwright-core/src/server/supplements/recorder/java.ts b/packages/playwright-core/src/server/supplements/recorder/java.ts index 0ca92d7d31..f1072a897d 100644 --- a/packages/playwright-core/src/server/supplements/recorder/java.ts +++ b/packages/playwright-core/src/server/supplements/recorder/java.ts @@ -24,7 +24,7 @@ import type { MouseClickOptions } from './utils'; import { toModifiers } from './utils'; import deviceDescriptors from '../../deviceDescriptors'; import { JavaScriptFormatter } from './javascript'; -import { escapeWithQuotes } from '../../../utils/stringUtils'; +import { escapeWithQuotes } from '../../../utils/isomorphic/stringUtils'; export class JavaLanguageGenerator implements LanguageGenerator { id = 'java'; diff --git a/packages/playwright-core/src/server/supplements/recorder/javascript.ts b/packages/playwright-core/src/server/supplements/recorder/javascript.ts index 916c610a0a..883b4aee98 100644 --- a/packages/playwright-core/src/server/supplements/recorder/javascript.ts +++ b/packages/playwright-core/src/server/supplements/recorder/javascript.ts @@ -23,7 +23,7 @@ import { actionTitle } from './recorderActions'; import type { MouseClickOptions } from './utils'; import { toModifiers } from './utils'; import deviceDescriptors from '../../deviceDescriptors'; -import { escapeWithQuotes } from '../../../utils/stringUtils'; +import { escapeWithQuotes } from '../../../utils/isomorphic/stringUtils'; export class JavaScriptLanguageGenerator implements LanguageGenerator { id: string; diff --git a/packages/playwright-core/src/server/supplements/recorder/python.ts b/packages/playwright-core/src/server/supplements/recorder/python.ts index 56b3aab5f2..da288f7c26 100644 --- a/packages/playwright-core/src/server/supplements/recorder/python.ts +++ b/packages/playwright-core/src/server/supplements/recorder/python.ts @@ -22,7 +22,7 @@ import type { Action } from './recorderActions'; import { actionTitle } from './recorderActions'; import type { MouseClickOptions } from './utils'; import { toModifiers } from './utils'; -import { escapeWithQuotes } from '../../../utils/stringUtils'; +import { escapeWithQuotes } from '../../../utils/isomorphic/stringUtils'; import deviceDescriptors from '../../deviceDescriptors'; export class PythonLanguageGenerator implements LanguageGenerator { diff --git a/packages/playwright-core/src/server/trace/viewer/DEPS.list b/packages/playwright-core/src/server/trace/viewer/DEPS.list index 1cebb92f14..89fcbb8161 100644 --- a/packages/playwright-core/src/server/trace/viewer/DEPS.list +++ b/packages/playwright-core/src/server/trace/viewer/DEPS.list @@ -1,5 +1,6 @@ [*] ../../ +../../registry/ ../../../generated/ ../../../utils/ ../../chromium/crApp.ts diff --git a/packages/playwright-core/src/server/webkit/wkExecutionContext.ts b/packages/playwright-core/src/server/webkit/wkExecutionContext.ts index 2595a09ff9..d1cd048e02 100644 --- a/packages/playwright-core/src/server/webkit/wkExecutionContext.ts +++ b/packages/playwright-core/src/server/webkit/wkExecutionContext.ts @@ -18,7 +18,7 @@ import type { WKSession } from './wkConnection'; import type { Protocol } from './protocol'; import * as js from '../javascript'; -import { parseEvaluationResultValue } from '../common/utilityScriptSerializers'; +import { parseEvaluationResultValue } from '../isomorphic/utilityScriptSerializers'; import { isSessionClosedError } from '../protocolError'; export class WKExecutionContext implements js.ExecutionContextDelegate { diff --git a/packages/playwright-core/src/utils/stringUtils.ts b/packages/playwright-core/src/utils/isomorphic/stringUtils.ts similarity index 100% rename from packages/playwright-core/src/utils/stringUtils.ts rename to packages/playwright-core/src/utils/isomorphic/stringUtils.ts diff --git a/tests/library/css-parser.spec.ts b/tests/library/css-parser.spec.ts index a6b9a2b9d7..bf15922543 100644 --- a/tests/library/css-parser.spec.ts +++ b/tests/library/css-parser.spec.ts @@ -15,7 +15,7 @@ */ import { playwrightTest as it, expect } from '../config/browserTest'; -import { parseCSS, serializeSelector as serialize } from '../../packages/playwright-core/lib/server/common/cssParser'; +import { parseCSS, serializeSelector as serialize } from '../../packages/playwright-core/lib/server/isomorphic/cssParser'; const parse = (selector: string) => { return parseCSS(selector, new Set(['text', 'not', 'has', 'react', 'scope', 'right-of', 'is'])).selector; diff --git a/utils/check_deps.js b/utils/check_deps.js index 203e515d9b..fc98b50e2b 100644 --- a/utils/check_deps.js +++ b/utils/check_deps.js @@ -138,7 +138,9 @@ async function innerCheckDeps(root, checkDepsFile, checkPackageJson) { function allowImport(from, to) { const fromDirectory = path.dirname(from); - const toDirectory = path.dirname(to); + const toDirectory = isDirectory(to) ? to : path.dirname(to); + if (to === toDirectory) + to = path.join(to, 'index.ts'); if (fromDirectory === toDirectory) return true; @@ -217,3 +219,7 @@ checkDeps().catch(e => { console.error(e && e.stack ? e.stack : e); process.exit(1); }); + +function isDirectory(dir) { + return fs.existsSync(dir) && fs.statSync(dir).isDirectory(); +} \ No newline at end of file