walkwright 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +276 -0
- package/bin/walkwright.js +3 -0
- package/build/aria.d.ts +92 -0
- package/build/aria.js +215 -0
- package/build/aria.js.map +1 -0
- package/build/browser.d.ts +3 -0
- package/build/browser.js +18 -0
- package/build/browser.js.map +1 -0
- package/build/chunk-5CHKYNP7.js +507 -0
- package/build/chunk-5CHKYNP7.js.map +1 -0
- package/build/chunk-6YRKPGUO.js +1197 -0
- package/build/chunk-6YRKPGUO.js.map +1 -0
- package/build/chunk-A452S7R3.js +35 -0
- package/build/chunk-A452S7R3.js.map +1 -0
- package/build/chunk-BODO6HIH.js +60 -0
- package/build/chunk-BODO6HIH.js.map +1 -0
- package/build/chunk-FJI2CMCE.js +439 -0
- package/build/chunk-FJI2CMCE.js.map +1 -0
- package/build/chunk-JYHZVRB2.js +80 -0
- package/build/chunk-JYHZVRB2.js.map +1 -0
- package/build/chunk-KQN5IYN6.js +97 -0
- package/build/chunk-KQN5IYN6.js.map +1 -0
- package/build/chunk-KTXNERHT.js +72 -0
- package/build/chunk-KTXNERHT.js.map +1 -0
- package/build/chunk-MFTC7XL2.js +141 -0
- package/build/chunk-MFTC7XL2.js.map +1 -0
- package/build/chunk-N4SSLHMP.js +108 -0
- package/build/chunk-N4SSLHMP.js.map +1 -0
- package/build/chunk-RNNW7OW2.js +270 -0
- package/build/chunk-RNNW7OW2.js.map +1 -0
- package/build/chunk-UAWBPTDW.js +51 -0
- package/build/chunk-UAWBPTDW.js.map +1 -0
- package/build/chunk-Z7CW5CAY.js +64 -0
- package/build/chunk-Z7CW5CAY.js.map +1 -0
- package/build/cli.d.ts +1 -0
- package/build/cli.js +253 -0
- package/build/cli.js.map +1 -0
- package/build/config.d.ts +13 -0
- package/build/config.js +15 -0
- package/build/config.js.map +1 -0
- package/build/descriptor.d.ts +96 -0
- package/build/descriptor.js +27 -0
- package/build/descriptor.js.map +1 -0
- package/build/device-auth.d.ts +6 -0
- package/build/device-auth.js +11 -0
- package/build/device-auth.js.map +1 -0
- package/build/locator.d.ts +140 -0
- package/build/locator.js +92 -0
- package/build/locator.js.map +1 -0
- package/build/paths.d.ts +11 -0
- package/build/paths.js +22 -0
- package/build/paths.js.map +1 -0
- package/build/pom-kcSMxwX2.d.ts +349 -0
- package/build/pom.d.ts +6 -0
- package/build/pom.js +37 -0
- package/build/pom.js.map +1 -0
- package/build/project.d.ts +13 -0
- package/build/project.js +19 -0
- package/build/project.js.map +1 -0
- package/build/provisioner.d.ts +34 -0
- package/build/provisioner.js +14 -0
- package/build/provisioner.js.map +1 -0
- package/build/recorder.d.ts +6 -0
- package/build/recorder.js +15 -0
- package/build/recorder.js.map +1 -0
- package/build/reporter.d.ts +16 -0
- package/build/reporter.js +426 -0
- package/build/reporter.js.map +1 -0
- package/build/schema.d.ts +49 -0
- package/build/schema.js +16 -0
- package/build/schema.js.map +1 -0
- package/build/storage-state.d.ts +22 -0
- package/build/storage-state.js +42 -0
- package/build/storage-state.js.map +1 -0
- package/build/store.d.ts +17 -0
- package/build/store.js +9 -0
- package/build/store.js.map +1 -0
- package/build/ui.d.ts +49 -0
- package/build/ui.js +56 -0
- package/build/ui.js.map +1 -0
- package/build/upload.d.ts +10 -0
- package/build/upload.js +8 -0
- package/build/upload.js.map +1 -0
- package/build/wait.d.ts +14 -0
- package/build/wait.js +50 -0
- package/build/wait.js.map +1 -0
- package/package.json +52 -0
- package/src/aria.ts +326 -0
- package/src/browser.ts +15 -0
- package/src/cli.ts +295 -0
- package/src/config.ts +16 -0
- package/src/descriptor.ts +179 -0
- package/src/device-auth.ts +188 -0
- package/src/locator.ts +683 -0
- package/src/paths.ts +70 -0
- package/src/pom.ts +2363 -0
- package/src/project.ts +77 -0
- package/src/provisioner.ts +183 -0
- package/src/recorder.ts +877 -0
- package/src/reporter.ts +561 -0
- package/src/schema.ts +37 -0
- package/src/storage-state.ts +71 -0
- package/src/store.ts +96 -0
- package/src/ui.ts +333 -0
- package/src/upload.ts +116 -0
- package/src/wait.ts +63 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/pom.ts"],"sourcesContent":["import type {\n Locator,\n Page,\n PlaywrightTestArgs,\n PlaywrightTestOptions,\n PlaywrightWorkerArgs,\n PlaywrightWorkerOptions,\n TestType,\n} from \"@playwright/test\";\nimport { test as playwrightTest } from \"@playwright/test\";\n\nimport type {\n ActionDescriptor,\n AppDescriptor,\n CaptureDescriptor,\n CaptureRuleDescriptor,\n ElementDescriptor,\n NestedSurfaceDescriptor,\n OverlayDescriptor,\n PageDescriptor,\n ParamDecl,\n RegexDescriptor,\n} from \"./descriptor.js\";\nimport { appDescriptorSchema } from \"./descriptor.js\";\nimport type {\n LazyLocator,\n LocatorDescriptor,\n LocatorFilter,\n LocatorNode,\n Mount,\n Refinement,\n Scope,\n Text,\n} from \"./locator.js\";\nimport {\n isLazyLocator,\n lazyLocatorOf,\n pageOf,\n paramNamesOf,\n plainTextOf,\n resolveLocator,\n textFrom,\n} from \"./locator.js\";\nimport type { AnyProvision, ProvisionMap } from \"./provisioner.js\";\nimport { createProvisioner } from \"./provisioner.js\";\nimport type { RecorderFixtures } from \"./recorder.js\";\nimport { createRecorderFixtures } from \"./recorder.js\";\n\nexport type { Mount, Scope };\nexport { pageOf };\n\nexport type CaptureRule =\n | { element: string; text: string; match?: RegExp }\n | { match: RegExp; text: string };\n\nexport interface CaptureRules {\n rules: CaptureRule[];\n}\n\ntype ElementPath<E> =\n Extract<keyof E, string> | `${Extract<keyof E, string>}.${string}`;\n\ntype TypedCaptureRule<E> =\n | { element: ElementPath<E>; text: string; match?: RegExp }\n | { match: RegExp; text: string };\n\ninterface TypedCaptureRules<E> {\n rules: TypedCaptureRule<E>[];\n}\n\nexport type Factory<T> = (page: Page) => T;\n\nexport interface Rooted {\n self: LazyLocator;\n root: Locator;\n}\n\nexport interface SurfaceInstance {\n page: Page;\n elements: object;\n}\n\nexport interface Surface<I extends SurfaceInstance = SurfaceInstance> {\n (scope: LazyLocator): Surface<I & Rooted>;\n (scope: Page): I;\n readonly descriptor: NestedSurfaceDescriptor;\n}\n\nexport type AnySurface = Surface;\n\nexport interface OverlayEmbed {\n overlay: OverlayFactory;\n open?: () => Promise<void>;\n}\n\nexport type ElementMap = Record<\n string,\n | LazyLocator\n | ((...params: never[]) => LazyLocator)\n | AnySurface\n | ((...params: never[]) => AnySurface)\n | OverlayEmbed\n | ((scope: Mount) => unknown)\n | ((...params: never[]) => (scope: Mount) => unknown)\n>;\n\ntype ThisElements<Self> = Record<\n string,\n ElementMap[string] | (OverlayEmbed & ThisType<Self>)\n>;\n\nexport type Instantiated<M extends ElementMap> = {\n [Key in keyof M]: M[Key] extends { overlay: infer O extends AnySurface }\n ? SurfaceInstanceOf<O>\n : M[Key] extends LazyLocator\n ? Locator\n : M[Key] extends (...args: infer A) => LazyLocator\n ? (...args: A) => Locator\n : M[Key] extends {\n (...params: infer Params): infer S;\n parameterized: true;\n }\n ? S extends AnySurface\n ? (...params: Params) => SurfaceInstanceOf<S>\n : never\n : M[Key] extends AnySurface\n ? SurfaceInstanceOf<M[Key]>\n : M[Key] extends (...args: infer A) => infer S\n ? S extends AnySurface\n ? (...args: A) => SurfaceInstanceOf<S>\n : S extends (scope: never) => infer R\n ? (...args: A) => R\n : S\n : never;\n};\n\nexport type ActionMap = Record<string, (...params: never[]) => unknown>;\n\nexport type Parameterized<Params extends unknown[], F> = ((\n ...params: Params\n) => F) & { parameterized: true };\n\nexport type Component<\n E extends object,\n A extends object = Record<never, never>,\n> = { page: Page; elements: E; self?: LazyLocator; root?: Locator } & A;\n\nexport type RootedComponent<\n E extends object,\n A extends object = Record<never, never>,\n> = Component<E, A> & Rooted;\n\ntype SurfaceInstanceOf<S> = S extends (scope: Page) => infer I ? I : never;\n\ntype ActionsOf<I> = Omit<I, keyof SurfaceInstance | keyof Rooted>;\n\ntype IncludeShape<Inc extends readonly AnySurface[]> = Inc extends readonly [\n infer First,\n ...infer Rest,\n]\n ? Rest extends readonly AnySurface[]\n ? SurfaceInstanceOf<First> extends infer I extends SurfaceInstance\n ? {\n elements: I[\"elements\"] & IncludeShape<Rest>[\"elements\"];\n actions: ActionsOf<I> & IncludeShape<Rest>[\"actions\"];\n }\n : never\n : never\n : { elements: unknown; actions: unknown };\n\nexport type IncludeElements<Inc extends readonly AnySurface[]> =\n IncludeShape<Inc>[\"elements\"];\n\nexport type IncludeActions<Inc extends readonly AnySurface[]> =\n IncludeShape<Inc>[\"actions\"];\n\nexport function rootOf(instance: { root?: Locator }): Locator {\n if (instance.root === undefined) {\n throw new Error(\n \"this surface is not mounted at a chain — scope it with a locator\",\n );\n }\n\n return instance.root;\n}\n\ninterface SurfaceCore {\n root: LocatorDescriptor;\n elements: BoundElements;\n actions: ActionMap;\n descriptor: NestedSurfaceDescriptor;\n}\n\nconst coreKey = Symbol(\"walkwright.surface\");\n\ninterface SurfaceBrand {\n [coreKey]: SurfaceCore;\n}\n\nfunction isSurface(value: unknown): value is AnySurface & SurfaceBrand {\n return typeof value === \"function\" && coreKey in value;\n}\n\nfunction isOverlayFactory(value: unknown): value is OverlayFactory {\n return (\n typeof value === \"function\" &&\n (value as { overlay?: unknown }).overlay === true\n );\n}\n\ninterface AnyParameterizedFactory {\n (...params: never[]): unknown;\n parameterized: true;\n}\n\nconst isParameterized = (value: unknown): value is AnyParameterizedFactory =>\n typeof value === \"function\" &&\n (value as Partial<AnyParameterizedFactory>).parameterized === true;\n\nfunction definer<Def>(\n definition: Def | ((...params: never[]) => Def),\n factoryOf: (def: Def) => object,\n): object {\n if (typeof definition !== \"function\") {\n return factoryOf(definition);\n }\n\n const build = definition as (...params: never[]) => Def;\n\n return Object.assign(\n (...params: never[]): object => factoryOf(build(...params)),\n { parameterized: true as const },\n );\n}\n\nconst IDENTIFIER_RE = /^[A-Za-z_$][\\w$]*$/;\n\nfunction paramsSourceOf(source: string): string | undefined {\n const paren = /^\\s*(?:async\\s+)?\\(([^)]*)\\)\\s*=>/.exec(source);\n if (paren !== null) {\n return paren[1] ?? \"\";\n }\n\n const bare = /^\\s*(?:async\\s+)?([A-Za-z_$][\\w$]*)\\s*=>/.exec(source);\n if (bare !== null) {\n return bare[1] ?? \"\";\n }\n\n const keyword =\n /^\\s*(?:async\\s+)?function\\s*[A-Za-z_$][\\w$]*?\\s*\\(([^)]*)\\)/.exec(source);\n\n return keyword === null ? undefined : (keyword[1] ?? \"\");\n}\n\nfunction paramNamesFrom(source: string, arity: number): string[] {\n const fallback = Array.from({ length: arity }, (_, index) => `p${index}`);\n const params = paramsSourceOf(source);\n\n if (params === undefined) {\n return fallback;\n }\n\n const pieces =\n params.trim() === \"\" ? [] : params.split(\",\").map((piece) => piece.trim());\n\n if (pieces.length < arity) {\n return fallback;\n }\n\n const sliced = pieces.slice(0, arity);\n\n return sliced.every((piece) => IDENTIFIER_RE.test(piece)) ? sliced : fallback;\n}\n\nfunction sentinelFor(index: number, tag: string): string {\n return ` walkwright-param-${index}-${tag} `;\n}\n\nfunction tracedText(\n text: Text | undefined,\n sentinelToName: Map<string, string>,\n): Text | undefined {\n if (text === undefined || typeof text !== \"string\") {\n return text;\n }\n\n const exact = sentinelToName.get(text);\n if (exact !== undefined) {\n return { param: exact };\n }\n\n const parts: (string | { param: string })[] = [];\n let remainder = text;\n\n for (;;) {\n let earliestIndex = -1;\n let earliestSentinel = \"\";\n let earliestName = \"\";\n\n for (const [sentinel, name] of sentinelToName) {\n const index = remainder.indexOf(sentinel);\n if (index !== -1 && (earliestIndex === -1 || index < earliestIndex)) {\n earliestIndex = index;\n earliestSentinel = sentinel;\n earliestName = name;\n }\n }\n\n if (earliestIndex === -1) {\n break;\n }\n\n const literal = remainder.slice(0, earliestIndex);\n if (literal !== \"\") {\n parts.push(literal);\n }\n parts.push({ param: earliestName });\n remainder = remainder.slice(earliestIndex + earliestSentinel.length);\n }\n\n if (remainder !== \"\") {\n parts.push(remainder);\n }\n\n if (parts.length === 0) {\n return text;\n }\n\n return parts.length === 1 && typeof parts[0] === \"string\"\n ? text\n : { template: parts };\n}\n\nfunction tracedFilter(\n filter: LocatorFilter,\n sentinelToName: Map<string, string>,\n): LocatorFilter | null {\n const hasText = tracedText(filter.hasText, sentinelToName);\n\n let has: LocatorDescriptor | undefined;\n if (filter.has !== undefined) {\n const traced = tracedDescriptor(filter.has, sentinelToName);\n if (traced === undefined) {\n return null;\n }\n has = traced;\n }\n\n let hasNot: LocatorDescriptor | undefined;\n if (filter.hasNot !== undefined) {\n const traced = tracedDescriptor(filter.hasNot, sentinelToName);\n if (traced === undefined) {\n return null;\n }\n hasNot = traced;\n }\n\n return {\n ...(hasText === undefined ? {} : { hasText }),\n ...(has === undefined ? {} : { has }),\n ...(hasNot === undefined ? {} : { hasNot }),\n };\n}\n\nfunction tracedNode(\n node: LocatorNode,\n sentinelToName: Map<string, string>,\n): LocatorNode | undefined {\n if (\"or\" in node) {\n const branches = tracedBranches(node.or, sentinelToName);\n return branches === undefined ? undefined : { or: branches };\n }\n\n if (\"and\" in node) {\n const branches = tracedBranches(node.and, sentinelToName);\n return branches === undefined ? undefined : { and: branches };\n }\n\n const name =\n \"name\" in node ? tracedText(node.name, sentinelToName) : undefined;\n\n const text =\n \"text\" in node ? tracedText(node.text, sentinelToName) : undefined;\n\n const refine = tracedRefine(node.refine, sentinelToName);\n if (refine === null) {\n return undefined;\n }\n\n return {\n ...node,\n ...(name === undefined ? {} : { name }),\n ...(text === undefined ? {} : { text }),\n ...(refine === undefined ? {} : { refine }),\n };\n}\n\nfunction tracedRefine(\n refine: Refinement[] | undefined,\n sentinelToName: Map<string, string>,\n): Refinement[] | undefined | null {\n if (refine === undefined) {\n return undefined;\n }\n\n const traced: Refinement[] = [];\n for (const refinement of refine) {\n if (\"nth\" in refinement) {\n traced.push(refinement);\n continue;\n }\n\n const filter = tracedFilter(refinement.filter, sentinelToName);\n if (filter === null) {\n return null;\n }\n traced.push({ filter });\n }\n\n return traced;\n}\n\nfunction tracedBranches(\n branches: LocatorDescriptor[],\n sentinelToName: Map<string, string>,\n): LocatorDescriptor[] | undefined {\n const traced: LocatorDescriptor[] = [];\n\n for (const branch of branches) {\n const next = tracedDescriptor(branch, sentinelToName);\n if (next === undefined) {\n return undefined;\n }\n traced.push(next);\n }\n\n return traced;\n}\n\nfunction tracedDescriptor(\n descriptor: LocatorDescriptor,\n sentinelToName: Map<string, string>,\n): LocatorDescriptor | undefined {\n const traced: LocatorNode[] = [];\n\n for (const node of descriptor) {\n const next = tracedNode(node, sentinelToName);\n if (next === undefined) {\n return undefined;\n }\n traced.push(next);\n }\n\n return traced;\n}\n\ninterface ParametricElement {\n build: (...values: string[]) => unknown;\n locator: LocatorDescriptor;\n params: ParamDecl[];\n}\n\ninterface ParametricOpaqueElement {\n build: (...values: string[]) => unknown;\n}\n\nfunction probeParametric(value: unknown): BoundElement | undefined {\n if (typeof value !== \"function\") {\n return undefined;\n }\n\n const fn = value as (...args: string[]) => unknown;\n const names = paramNamesFrom(fn.toString(), fn.length);\n const tag = Math.random().toString(36).slice(2, 10);\n const sentinelToName = new Map(\n names.map((name, index) => [sentinelFor(index, tag), name] as const),\n );\n\n let result: unknown;\n try {\n result = fn(...sentinelToName.keys());\n } catch {\n return undefined;\n }\n\n if (isLazyLocator(result)) {\n const locator = tracedDescriptor(result.chain, sentinelToName);\n if (locator === undefined) {\n return { parametricOpaque: { build: fn } };\n }\n\n const used = new Set(paramNamesOf(locator));\n if (!names.every((name) => used.has(name))) {\n return { parametricOpaque: { build: fn } };\n }\n\n return {\n parametric: {\n build: fn,\n locator,\n params: names\n .filter((name) => used.has(name))\n .map((name) => ({ name })),\n },\n };\n }\n\n if (typeof result === \"function\") {\n return { parametricOpaque: { build: fn } };\n }\n\n return undefined;\n}\n\ninterface NestedSurface {\n factory: AnySurface;\n descriptor: NestedSurfaceDescriptor;\n}\n\ninterface NestedOverlay {\n factory: AnySurface;\n descriptor: Extract<ElementDescriptor, { overlay: OverlayDescriptor }>;\n open?: () => Promise<void>;\n}\n\nfunction isOverlayEmbed(value: unknown): value is OverlayEmbed {\n return (\n typeof value === \"object\" &&\n value !== null &&\n isOverlayFactory((value as { overlay?: unknown }).overlay)\n );\n}\n\nfunction embedOf(\n factory: OverlayFactory,\n open: (() => Promise<void>) | undefined,\n): NestedOverlay {\n return {\n factory,\n descriptor: {\n overlay: factory.descriptor,\n ...(open === undefined\n ? {}\n : { open: { opaque: true as const, provenance: \"hand\" as const } }),\n },\n ...(open === undefined ? {} : { open }),\n };\n}\n\ntype BoundElement =\n | { locator: LocatorDescriptor; params?: ParamDecl[] }\n | { parametric: ParametricElement }\n | { parametricOpaque: ParametricOpaqueElement }\n | { surface: NestedSurface }\n | { overlay: NestedOverlay }\n | { opaque: unknown; provenance: \"hand\" };\n\ntype BoundElements = Record<string, BoundElement>;\n\nfunction bindElement(value: unknown): BoundElement {\n if (isLazyLocator(value)) {\n return value.params.length === 0\n ? { locator: value.chain }\n : {\n locator: value.chain,\n params: value.params.map((name) => ({ name })),\n };\n }\n\n if (isOverlayFactory(value)) {\n return { overlay: embedOf(value, undefined) };\n }\n\n if (isOverlayEmbed(value)) {\n return { overlay: embedOf(value.overlay, value.open) };\n }\n\n if (isSurface(value)) {\n return { surface: { factory: value, descriptor: value.descriptor } };\n }\n\n if (isParameterized(value)) {\n return { opaque: value, provenance: \"hand\" };\n }\n\n const parametric = probeParametric(value);\n if (parametric !== undefined) {\n return parametric;\n }\n\n return { opaque: value, provenance: \"hand\" };\n}\n\nfunction projectElement(bound: BoundElement): ElementDescriptor {\n if (\"locator\" in bound) {\n return bound.params === undefined\n ? { locator: bound.locator }\n : { locator: bound.locator, params: bound.params };\n }\n\n if (\"parametric\" in bound) {\n return bound.parametric.params.length === 0\n ? { locator: bound.parametric.locator }\n : {\n locator: bound.parametric.locator,\n params: bound.parametric.params,\n };\n }\n\n if (\"parametricOpaque\" in bound) {\n return { opaque: true, provenance: \"hand\" };\n }\n\n if (\"surface\" in bound) {\n return { surface: bound.surface.descriptor };\n }\n\n if (\"overlay\" in bound) {\n return bound.overlay.descriptor;\n }\n\n return { opaque: true, provenance: \"hand\" };\n}\n\nfunction projectElements(\n elements: BoundElements,\n): Record<string, ElementDescriptor> {\n return Object.fromEntries(\n Object.entries(elements).map(([key, bound]) => [\n key,\n projectElement(bound),\n ]),\n );\n}\n\nfunction classifyActions(actions: ActionMap): ActionDescriptor[] | undefined {\n const names = Object.keys(actions);\n\n return names.length === 0\n ? undefined\n : names.map((name) => ({\n name,\n impl: { opaque: true as const, provenance: \"hand\" as const },\n }));\n}\n\nfunction regexDescriptorOf(re: RegExp): RegexDescriptor {\n return {\n pattern: re.source,\n ...(re.flags === \"\" ? {} : { flags: re.flags }),\n };\n}\n\nfunction captureRuleDescriptorOf(rule: CaptureRule): CaptureRuleDescriptor {\n if (\"element\" in rule) {\n return {\n element: rule.element.split(\".\"),\n text: rule.text,\n ...(rule.match === undefined\n ? {}\n : { match: regexDescriptorOf(rule.match) }),\n };\n }\n\n return { match: regexDescriptorOf(rule.match), text: rule.text };\n}\n\ntype CaptureLookup =\n | { kind: \"opaque\" }\n | { kind: \"locator\" }\n | { kind: \"nested\"; elements: Record<string, ElementDescriptor> };\n\nfunction captureLookupOf(descriptor: ElementDescriptor): CaptureLookup {\n if (\"opaque\" in descriptor) {\n return { kind: \"opaque\" };\n }\n\n if (\"locator\" in descriptor) {\n return { kind: \"locator\" };\n }\n\n if (\"surface\" in descriptor) {\n return { kind: \"nested\", elements: descriptor.surface.elements };\n }\n\n return { kind: \"nested\", elements: descriptor.overlay.elements };\n}\n\nfunction validateCaptureElement(\n path: string,\n owner: string,\n elements: Record<string, ElementDescriptor>,\n hasMatch: boolean,\n): void {\n const segments = path.split(\".\");\n let current = elements;\n let consumed: string[] = [];\n\n segments.forEach((segment, index) => {\n consumed = [...consumed, segment];\n const descriptor = current[segment];\n\n if (descriptor === undefined) {\n throw new Error(\n `capture rule \"${path}\" of ${owner} references unknown element \"${consumed.join(\".\")}\"`,\n );\n }\n\n const isFinal = index === segments.length - 1;\n const lookup = captureLookupOf(descriptor);\n\n if (lookup.kind === \"opaque\") {\n throw new Error(\n `capture rule \"${path}\" of ${owner} targets \"${consumed.join(\".\")}\", which has no locator to resolve`,\n );\n }\n\n if (lookup.kind === \"locator\") {\n if (!isFinal) {\n throw new Error(\n `capture rule \"${path}\" of ${owner} walks through \"${consumed.join(\".\")}\", which is not a surface`,\n );\n }\n return;\n }\n\n if (isFinal && !hasMatch) {\n throw new Error(\n `capture rule \"${path}\" of ${owner} targets \"${consumed.join(\".\")}\", a surface — give it match to scope a replace over its subtree`,\n );\n }\n\n current = lookup.elements;\n });\n}\n\nfunction captureRulesOf(\n rules: CaptureRule[] | undefined,\n owner: string,\n elements: Record<string, ElementDescriptor>,\n): CaptureRuleDescriptor[] {\n return (rules ?? []).map((rule) => {\n if (\"element\" in rule) {\n validateCaptureElement(\n rule.element,\n owner,\n elements,\n rule.match !== undefined,\n );\n }\n\n return captureRuleDescriptorOf(rule);\n });\n}\n\nfunction captureDescriptorOf(\n rules: CaptureRuleDescriptor[],\n): CaptureDescriptor | undefined {\n return rules.length === 0 ? undefined : { rules };\n}\n\nfunction projectSurface(\n root: LocatorDescriptor,\n elements: BoundElements,\n actions: ActionMap,\n captureRules: CaptureRuleDescriptor[],\n): NestedSurfaceDescriptor {\n const projectedActions = classifyActions(actions);\n const capture = captureDescriptorOf(captureRules);\n\n return {\n ...(root.length === 0 ? {} : { root }),\n elements: projectElements(elements),\n ...(projectedActions === undefined ? {} : { actions: projectedActions }),\n ...(capture === undefined ? {} : { capture }),\n };\n}\n\nexport interface SurfaceDefinition {\n elements?: ElementMap;\n actions?: ActionMap;\n include?: readonly AnySurface[];\n capture?: CaptureRules;\n}\n\ninterface Assembled {\n elements: BoundElements;\n actions: ActionMap;\n capture: CaptureRuleDescriptor[];\n}\n\nfunction assemble(\n def: SurfaceDefinition,\n owner: string,\n reserved: readonly string[],\n): Assembled {\n const elements: BoundElements = {};\n const actions: ActionMap = {};\n const capture: CaptureRuleDescriptor[] = [];\n const elementSources = new Map<string, string>();\n const actionSources = new Map<string, string>();\n\n const claim = (\n sources: Map<string, string>,\n key: string,\n source: string,\n what: string,\n ): void => {\n const holder = sources.get(key);\n if (holder !== undefined) {\n throw new Error(\n `${holder} and ${source} of ${owner} both define ${what} \"${key}\"`,\n );\n }\n sources.set(key, source);\n };\n\n for (const [index, included] of (def.include ?? []).entries()) {\n const source = `include[${String(index)}]`;\n\n if (!isSurface(included)) {\n throw new Error(`${source} of ${owner} is not a surface`);\n }\n\n const core = included[coreKey];\n if (core.root.length > 0) {\n throw new Error(\n `${source} of ${owner} has a root — embed it as an element to keep its boundary; only rootless surfaces can be merged`,\n );\n }\n\n for (const [key, bound] of Object.entries(core.elements)) {\n claim(elementSources, key, source, \"element\");\n elements[key] = bound;\n }\n\n for (const [key, action] of Object.entries(core.actions)) {\n claim(actionSources, key, source, \"action\");\n if (reserved.includes(key)) {\n throw new Error(\n `action \"${key}\" of ${source} of ${owner} shadows a built-in field of its instances`,\n );\n }\n actions[key] = action;\n }\n\n capture.push(...(core.descriptor.capture?.rules ?? []));\n }\n\n for (const [key, value] of Object.entries(def.elements ?? {})) {\n claim(elementSources, key, \"the definition\", \"element\");\n elements[key] = bindElement(value);\n }\n\n for (const [key, action] of Object.entries(def.actions ?? {})) {\n claim(actionSources, key, \"the definition\", \"action\");\n if (reserved.includes(key)) {\n throw new Error(\n `action \"${key}\" of ${owner} shadows a built-in field of its instances`,\n );\n }\n actions[key] = action;\n }\n\n return { elements, actions, capture };\n}\n\ninterface MountContext {\n page: Page;\n chain: LocatorDescriptor;\n mount: Mount;\n instance: () => object;\n}\n\nfunction mountNested(factory: AnySurface, context: MountContext): unknown {\n return context.chain.length === 0\n ? factory(context.page)\n : factory(lazyLocatorOf(context.chain))(context.page);\n}\n\nfunction mountBuilt(built: unknown, context: MountContext): unknown {\n if (isSurface(built)) {\n return mountNested(built, context);\n }\n\n if (typeof built === \"function\") {\n return (built as (scope: Mount) => unknown).call(\n context.instance(),\n context.mount,\n );\n }\n\n return built;\n}\n\nfunction instantiateBoundElement(\n bound: BoundElement,\n context: MountContext,\n): unknown {\n if (\"locator\" in bound) {\n const { locator, params } = bound;\n return params === undefined\n ? resolveLocator(context.mount, locator)\n : (...values: string[]): Locator =>\n resolveLocator(\n context.mount,\n locator,\n Object.fromEntries(\n params.flatMap((param, index) => {\n const value = values[index];\n return value === undefined\n ? []\n : [[param.name, value] as const];\n }),\n ),\n );\n }\n\n if (\"parametric\" in bound) {\n const { build } = bound.parametric;\n return (...values: string[]): Locator => {\n const built = build(...values);\n if (!isLazyLocator(built)) {\n throw new Error(\"parametric element did not build a lazy locator\");\n }\n return resolveLocator(context.mount, built.chain);\n };\n }\n\n if (\"parametricOpaque\" in bound) {\n const { build } = bound.parametricOpaque;\n return (...values: string[]): unknown => {\n const built = build(...values);\n if (typeof built !== \"function\") {\n throw new Error(\"parametric element did not build a function\");\n }\n return mountBuilt(built, context);\n };\n }\n\n if (\"surface\" in bound) {\n return mountNested(bound.surface.factory, context);\n }\n\n if (\"overlay\" in bound) {\n const mounted = mountNested(bound.overlay.factory, context) as object;\n const { open } = bound.overlay;\n\n return open === undefined\n ? mounted\n : Object.assign(mounted, {\n open: async (): Promise<void> => {\n await open.call(context.instance());\n },\n });\n }\n\n const factory = bound.opaque;\n return isParameterized(factory)\n ? (...params: never[]): unknown => mountBuilt(factory(...params), context)\n : mountBuilt(factory, context);\n}\n\nfunction instantiateBound(\n elements: BoundElements,\n context: MountContext,\n): Record<string, unknown> {\n const instance = {} as Record<string, unknown>;\n const settled = new Map<string, unknown>();\n const resolving = new Set<string>();\n\n for (const [key, bound] of Object.entries(elements)) {\n Object.defineProperty(instance, key, {\n enumerable: true,\n configurable: true,\n get(): unknown {\n if (settled.has(key)) {\n return settled.get(key);\n }\n\n if (resolving.has(key)) {\n throw new Error(`element \"${key}\" is part of a reference cycle`);\n }\n\n resolving.add(key);\n try {\n const value = instantiateBoundElement(bound, context);\n settled.set(key, value);\n return value;\n } finally {\n resolving.delete(key);\n }\n },\n });\n }\n\n return instance;\n}\n\ninterface Grounded {\n page: Page;\n chain: LocatorDescriptor;\n self?: LazyLocator;\n root?: Locator;\n}\n\ntype Mounted<D extends object> = SurfaceInstance & Partial<Rooted> & D;\n\nfunction instantiateSurface<D extends object>(\n core: SurfaceCore,\n page: Page,\n prefix: LocatorDescriptor,\n decorate: (grounded: Grounded) => D,\n mountOnly: BoundElements = {},\n): Mounted<D> {\n const chain = [...prefix, ...core.root];\n const self = chain.length === 0 ? undefined : lazyLocatorOf(chain);\n const root = self === undefined ? undefined : resolveLocator(page, chain);\n\n const instance: SurfaceInstance & Partial<Rooted> & Record<string, unknown> =\n { page, elements: {} };\n const grounded: Grounded = {\n page,\n chain,\n ...(self === undefined ? {} : { self, root }),\n };\n\n instance.elements = instantiateBound(\n { ...core.elements, ...mountOnly },\n { page, chain, mount: root ?? page, instance: () => instance },\n );\n\n const decorated = Object.assign(\n instance,\n self === undefined ? {} : { self, root },\n decorate(grounded),\n );\n\n for (const [key, action] of Object.entries(core.actions)) {\n instance[key] = (...params: never[]): unknown =>\n action.call(instance, ...params);\n }\n\n return decorated;\n}\n\ntype Branded<F, X, C extends SurfaceCore> = F &\n X & { descriptor: C[\"descriptor\"] } & SurfaceBrand;\n\nfunction surfaceOf<F extends object, X extends object, C extends SurfaceCore>(\n core: C,\n factory: F,\n extra: X,\n): Branded<F, X, C> {\n return Object.assign(factory, extra, {\n descriptor: core.descriptor,\n [coreKey]: core,\n });\n}\n\ntype PointedSurface = Surface<SurfaceInstance & Rooted>;\n\nfunction rootedOf(grounded: Grounded): Rooted {\n if (grounded.self === undefined || grounded.root === undefined) {\n throw new Error(\"this surface is not mounted at a chain\");\n }\n\n return { self: grounded.self, root: grounded.root };\n}\n\nfunction composedCore(core: SurfaceCore, scope: LazyLocator): SurfaceCore {\n const root = [...scope.chain, ...core.root];\n\n return { ...core, root, descriptor: { ...core.descriptor, root } };\n}\n\nfunction pointedFactoryOf(core: SurfaceCore): PointedSurface & SurfaceBrand {\n function factory(scope: LazyLocator): PointedSurface;\n function factory(scope: Page): SurfaceInstance & Rooted;\n function factory(scope: Scope): PointedSurface | (SurfaceInstance & Rooted) {\n return isLazyLocator(scope)\n ? pointedFactoryOf(composedCore(core, scope))\n : instantiateSurface(core, scope, [], rootedOf);\n }\n\n return surfaceOf(core, factory, {});\n}\n\nfunction componentFactoryOf(core: SurfaceCore): AnySurface & SurfaceBrand {\n function factory(scope: LazyLocator): PointedSurface;\n function factory(scope: Page): SurfaceInstance;\n function factory(scope: Scope): PointedSurface | SurfaceInstance {\n return isLazyLocator(scope)\n ? pointedFactoryOf(composedCore(core, scope))\n : instantiateSurface(core, scope, [], () => ({}));\n }\n\n return surfaceOf(core, factory, {});\n}\n\nconst componentReserved = [\"elements\", \"page\", \"self\", \"root\", \"pages\"];\n\nexport interface ComponentDefinition<\n Inc extends readonly AnySurface[],\n M extends ElementMap,\n A extends ActionMap,\n Self,\n> {\n include?: readonly [...Inc];\n elements?: M & ThisElements<Self> & ThisType<Self>;\n actions?: A & ActionMap & ThisType<Self>;\n capture?: TypedCaptureRules<IncludeElements<Inc> & Instantiated<M>>;\n}\n\ninterface DefinitionShape {\n root?: LazyLocator;\n}\n\ntype ComponentInstanceOf<\n Def extends DefinitionShape,\n Inc extends readonly AnySurface[],\n M extends ElementMap,\n A extends ActionMap,\n> = Def extends { root: LazyLocator }\n ? RootedComponent<\n IncludeElements<Inc> & Instantiated<M>,\n IncludeActions<Inc> & A\n >\n : Component<IncludeElements<Inc> & Instantiated<M>, IncludeActions<Inc> & A>;\n\nexport function defineComponent<\n Params extends unknown[],\n Def extends DefinitionShape,\n Inc extends readonly AnySurface[] = [],\n M extends ElementMap = Record<never, never>,\n A extends ActionMap = Record<never, never>,\n>(\n build: (\n ...params: Params\n ) => Def &\n ComponentDefinition<Inc, M, A, ComponentInstanceOf<Def, Inc, M, A>>,\n): Parameterized<Params, Surface<ComponentInstanceOf<Def, Inc, M, A>>>;\n\nexport function defineComponent<\n Def extends DefinitionShape,\n Inc extends readonly AnySurface[] = [],\n M extends ElementMap = Record<never, never>,\n A extends ActionMap = Record<never, never>,\n>(\n definition: Def &\n ComponentDefinition<Inc, M, A, ComponentInstanceOf<Def, Inc, M, A>>,\n): Surface<ComponentInstanceOf<Def, Inc, M, A>>;\n\nexport function defineComponent(\n definition:\n | (DefinitionShape & SurfaceDefinition)\n | ((...params: never[]) => DefinitionShape & SurfaceDefinition),\n): unknown {\n return definer(definition, (def) => {\n const root = def.root?.chain ?? [];\n const owner = \"the component\";\n const { elements, actions, capture } = assemble(\n def,\n owner,\n componentReserved,\n );\n\n const captureRules = [\n ...capture,\n ...captureRulesOf(def.capture?.rules, owner, projectElements(elements)),\n ];\n\n return componentFactoryOf({\n root,\n elements,\n actions,\n descriptor: projectSurface(root, elements, actions, captureRules),\n });\n });\n}\n\nexport interface OverlayClose {\n esc?: boolean;\n button?: LazyLocator;\n}\n\nexport interface OverlayRecorder {\n label: string;\n}\n\nexport interface OverlayHandle {\n waitFor: (state?: \"visible\" | \"hidden\") => Promise<void>;\n open: () => Promise<void>;\n close: () => Promise<void>;\n}\n\nexport type Overlay<E extends object> = {\n page: Page;\n elements: E;\n label: string;\n} & Rooted &\n OverlayHandle;\n\nexport type Dialog<E extends object> = Overlay<E> & {\n name: string | RegExp;\n};\n\ntype AnyOverlayInstance = SurfaceInstance &\n Rooted &\n OverlayHandle & { label: string };\n\nexport interface OverlayFactory<\n I extends AnyOverlayInstance = AnyOverlayInstance,\n> extends Surface<I> {\n overlay: true;\n descriptor: OverlayDescriptor;\n}\n\ntype OverlayInstanceOf<\n Inc extends readonly AnySurface[],\n M extends ElementMap,\n A extends ActionMap,\n> = Overlay<IncludeElements<Inc> & Instantiated<M>> & IncludeActions<Inc> & A;\n\ntype DialogInstanceOf<\n Inc extends readonly AnySurface[],\n M extends ElementMap,\n A extends ActionMap,\n> = Dialog<IncludeElements<Inc> & Instantiated<M>> & IncludeActions<Inc> & A;\n\nexport interface OverlayDefinition<\n Inc extends readonly AnySurface[] = [],\n M extends ElementMap = Record<never, never>,\n A extends ActionMap = Record<never, never>,\n> extends ComponentDefinition<Inc, M, A, OverlayInstanceOf<Inc, M, A>> {\n root: LazyLocator;\n recorder: OverlayRecorder;\n close?: OverlayClose;\n}\n\nexport interface DialogDefinition<\n Inc extends readonly AnySurface[] = [],\n M extends ElementMap = Record<never, never>,\n A extends ActionMap = Record<never, never>,\n> extends ComponentDefinition<Inc, M, A, DialogInstanceOf<Inc, M, A>> {\n name: string | RegExp;\n role?: \"dialog\" | \"alertdialog\";\n recorder?: OverlayRecorder;\n close?: OverlayClose;\n}\n\ntype AnyOverlayDefinition = OverlayDefinition<\n readonly AnySurface[],\n ElementMap,\n ActionMap\n>;\n\ntype AnyDialogDefinition = DialogDefinition<\n readonly AnySurface[],\n ElementMap,\n ActionMap\n>;\n\nconst overlayReserved = [\n ...componentReserved,\n \"label\",\n \"name\",\n \"waitFor\",\n \"open\",\n \"close\",\n];\n\ninterface OverlayCore extends SurfaceCore {\n close: { esc: boolean; button?: (root: Locator) => Locator };\n descriptor: OverlayDescriptor;\n}\n\nfunction overlayDescriptorOf(\n root: LocatorDescriptor,\n name: Text | undefined,\n label: string,\n close: OverlayClose | undefined,\n elements: BoundElements,\n actions: ActionMap,\n captureRules: CaptureRuleDescriptor[],\n): OverlayDescriptor {\n const projectedActions = classifyActions(actions);\n const capture = captureDescriptorOf(captureRules);\n\n return {\n root,\n ...(name === undefined ? {} : { name }),\n recorder: { label },\n close: {\n esc: close?.esc ?? true,\n ...(close?.button === undefined ? {} : { button: close.button.chain }),\n },\n elements: projectElements(elements),\n ...(projectedActions === undefined ? {} : { actions: projectedActions }),\n ...(capture === undefined ? {} : { capture }),\n };\n}\n\nfunction overlayFactoryOf(core: OverlayCore): OverlayFactory {\n const name =\n core.descriptor.name === undefined\n ? undefined\n : plainTextOf(core.descriptor.name, \"overlay name\");\n const { label } = core.descriptor.recorder;\n\n function factory(scope: LazyLocator): OverlayFactory;\n function factory(scope: Page): AnyOverlayInstance;\n function factory(scope: Scope): OverlayFactory | AnyOverlayInstance {\n if (isLazyLocator(scope)) {\n return overlay;\n }\n\n const instance = instantiateSurface(core, scope, [], (grounded) => {\n const { root, self } = grounded;\n if (root === undefined || self === undefined) {\n throw new Error(\"an overlay needs a root\");\n }\n\n const waitFor = async (\n state: \"visible\" | \"hidden\" = \"visible\",\n ): Promise<void> => {\n await root.waitFor({ state });\n };\n\n const open = async (): Promise<void> => {\n await Promise.resolve();\n throw new Error(\n `the \"${label}\" overlay is evoked elsewhere — await waitFor() instead of open()`,\n );\n };\n\n const close = async (): Promise<void> => {\n if (core.close.button !== undefined) {\n await core.close.button(root).click();\n } else if (core.close.esc) {\n await grounded.page.keyboard.press(\"Escape\");\n } else {\n throw new Error(\n `declare how the \"${label}\" overlay closes: a close button or esc`,\n );\n }\n\n await root.waitFor({ state: \"hidden\" });\n };\n\n return {\n ...(name === undefined ? {} : { name }),\n label,\n self,\n root,\n waitFor,\n open,\n close,\n };\n });\n\n Object.defineProperty(instance, \"descriptor\", {\n value: core.descriptor,\n enumerable: false,\n });\n\n return instance;\n }\n\n const overlay: OverlayFactory = surfaceOf(core, factory, {\n overlay: true as const,\n });\n\n return overlay;\n}\n\nfunction closeOf(close: OverlayClose | undefined): OverlayCore[\"close\"] {\n const button = close?.button;\n\n return {\n esc: close?.esc ?? true,\n ...(button === undefined\n ? {}\n : {\n button: (root: Locator): Locator =>\n resolveLocator(root, button.chain),\n }),\n };\n}\n\nfunction overlayOf(\n def: AnyOverlayDefinition | AnyDialogDefinition,\n root: LocatorDescriptor,\n name: Text | undefined,\n label: string,\n owner: string,\n): OverlayFactory {\n const { elements, actions, capture } = assemble(def, owner, overlayReserved);\n\n const captureRules = [\n ...capture,\n ...captureRulesOf(def.capture?.rules, owner, projectElements(elements)),\n ];\n\n return overlayFactoryOf({\n root,\n elements,\n actions,\n close: closeOf(def.close),\n descriptor: overlayDescriptorOf(\n root,\n name,\n label,\n def.close,\n elements,\n actions,\n captureRules,\n ),\n });\n}\n\nexport function defineOverlay<\n Params extends unknown[],\n Inc extends readonly AnySurface[] = [],\n M extends ElementMap = Record<never, never>,\n A extends ActionMap = Record<never, never>,\n>(\n build: (...params: Params) => OverlayDefinition<Inc, M, A>,\n): Parameterized<Params, OverlayFactory<OverlayInstanceOf<Inc, M, A>>>;\n\nexport function defineOverlay<\n Inc extends readonly AnySurface[] = [],\n M extends ElementMap = Record<never, never>,\n A extends ActionMap = Record<never, never>,\n>(\n definition: OverlayDefinition<Inc, M, A>,\n): OverlayFactory<OverlayInstanceOf<Inc, M, A>>;\n\nexport function defineOverlay(\n definition:\n AnyOverlayDefinition | ((...params: never[]) => AnyOverlayDefinition),\n): unknown {\n return definer(definition, (def) =>\n overlayOf(\n def,\n def.root.chain,\n undefined,\n def.recorder.label,\n `the \"${def.recorder.label}\" overlay`,\n ),\n );\n}\n\nexport function defineDialog<\n Params extends unknown[],\n Inc extends readonly AnySurface[] = [],\n M extends ElementMap = Record<never, never>,\n A extends ActionMap = Record<never, never>,\n>(\n build: (...params: Params) => DialogDefinition<Inc, M, A>,\n): Parameterized<Params, OverlayFactory<DialogInstanceOf<Inc, M, A>>>;\n\nexport function defineDialog<\n Inc extends readonly AnySurface[] = [],\n M extends ElementMap = Record<never, never>,\n A extends ActionMap = Record<never, never>,\n>(\n definition: DialogDefinition<Inc, M, A>,\n): OverlayFactory<DialogInstanceOf<Inc, M, A>>;\n\nexport function defineDialog(\n definition:\n AnyDialogDefinition | ((...params: never[]) => AnyDialogDefinition),\n): unknown {\n return definer(definition, (def) => {\n const name = textFrom(def.name);\n const root: LocatorDescriptor = [\n { by: \"role\", role: def.role ?? \"dialog\", name },\n ];\n\n const owner = `the ${typeof def.name === \"string\" ? `\"${def.name}\"` : def.name.source} dialog`;\n const label = def.recorder?.label ?? def.name;\n if (typeof label !== \"string\") {\n throw new Error(`${owner} needs recorder.label: its name is a pattern`);\n }\n\n return overlayOf(def, root, name, label, owner);\n });\n}\n\nexport type PathParams<Path extends string> =\n Path extends `${string}:${infer Param}/${infer Rest}`\n ? Record<Param, string> & PathParams<Rest>\n : Path extends `${string}:${infer Param}`\n ? Record<Param, string>\n : unknown;\n\nexport interface PageMeta {\n name: string;\n path: string;\n group?: string[];\n}\n\nexport interface PageRecorder {\n group?: string[];\n label?: string;\n}\n\nexport interface Register {}\n\nexport type RegisteredPages = Register extends {\n app: { pages: infer P extends AnyPages };\n}\n ? BoundPages<P>\n : Record<string, never>;\n\nexport interface PageObject<Path extends string, E> {\n page: Page;\n path: Path;\n name: string;\n goto: (params: PathParams<Path>) => Promise<void>;\n url: (params: PathParams<Path>) => string;\n params: () => PathParams<Path>;\n waitFor: () => Promise<void>;\n elements: E;\n pages: RegisteredPages;\n}\n\nexport interface PageFactory<Path extends string, E, A> {\n (page: Page): PageObject<Path, E> & A;\n descriptor: PageDescriptor;\n}\n\nexport type InstanceOf<T> = T extends (...args: never[]) => infer R\n ? R extends (...args: never[]) => infer R2\n ? R2\n : R\n : never;\n\nexport type HeaderElement<H extends string | undefined> = H extends string\n ? { header: Locator }\n : unknown;\n\nexport interface PageContext<E> {\n page: Page;\n elements: E;\n pages: RegisteredPages;\n}\n\ntype PageThis<\n Inc extends readonly AnySurface[],\n M extends ElementMap,\n H extends string | undefined,\n A extends ActionMap,\n> = PageContext<IncludeElements<Inc> & Instantiated<M> & HeaderElement<H>> &\n IncludeActions<Inc> &\n A;\n\nexport interface PageDefinition<\n Path extends string,\n Inc extends readonly AnySurface[] = [],\n M extends ElementMap = Record<never, never>,\n H extends string | undefined = undefined,\n A extends ActionMap = Record<never, never>,\n Ambient extends readonly AnySurface[] = [],\n> {\n path: Path;\n name: string;\n recorder?: PageRecorder;\n ready?: AppReady;\n header?: H;\n include?: readonly [...Inc];\n elements?: M &\n ThisElements<PageThis<[...Ambient, ...Inc], M, H, A>> &\n ThisType<PageThis<[...Ambient, ...Inc], M, H, A>>;\n anchor?: string | LazyLocator;\n actions?: A & ActionMap & ThisType<PageThis<[...Ambient, ...Inc], M, H, A>>;\n capture?: TypedCaptureRules<\n IncludeElements<Inc> & Instantiated<M> & HeaderElement<H>\n >;\n}\n\nexport interface PagePresetDefinition<\n Prefix extends string,\n Inc extends readonly AnySurface[] = [],\n> {\n path: Prefix;\n include?: readonly [...Inc];\n recorder?: { group?: string[] };\n ready?: AppReady;\n capture?: TypedCaptureRules<IncludeElements<Inc>>;\n}\n\nexport interface PagePreset<\n Prefix extends string,\n Inc extends readonly AnySurface[],\n> {\n readonly path: Prefix;\n readonly include: Inc;\n\n <\n Params extends unknown[],\n Sub extends string,\n Own extends readonly AnySurface[] = [],\n M extends ElementMap = Record<never, never>,\n H extends string | undefined = undefined,\n A extends ActionMap = Record<never, never>,\n >(\n build: (...params: Params) => PageDefinition<Sub, Own, M, H, A, Inc>,\n ): Parameterized<\n Params,\n PageFactory<\n `${Prefix}${Sub}`,\n IncludeElements<[...Inc, ...Own]> & Instantiated<M> & HeaderElement<H>,\n IncludeActions<[...Inc, ...Own]> & A\n >\n >;\n\n <\n Sub extends string,\n Own extends readonly AnySurface[] = [],\n M extends ElementMap = Record<never, never>,\n H extends string | undefined = undefined,\n A extends ActionMap = Record<never, never>,\n >(\n def: PageDefinition<Sub, Own, M, H, A, Inc>,\n ): PageFactory<\n `${Prefix}${Sub}`,\n IncludeElements<[...Inc, ...Own]> & Instantiated<M> & HeaderElement<H>,\n IncludeActions<[...Inc, ...Own]> & A\n >;\n\n preset<SubPrefix extends string, SubInc extends readonly AnySurface[] = []>(\n base: PagePresetDefinition<SubPrefix, SubInc>,\n ): PagePreset<`${Prefix}${SubPrefix}`, [...Inc, ...SubInc]>;\n}\n\nexport type PresetPage<\n P extends PagePreset<string, readonly AnySurface[]>,\n Sub extends string,\n M extends ElementMap = Record<never, never>,\n H extends string | undefined = undefined,\n A extends ActionMap = Record<never, never>,\n Own extends readonly AnySurface[] = [],\n> = PageFactory<\n `${P[\"path\"]}${Sub}`,\n IncludeElements<[...P[\"include\"], ...Own]> &\n Instantiated<M> &\n HeaderElement<H>,\n IncludeActions<[...P[\"include\"], ...Own]> & A\n>;\n\nexport interface DefinePage {\n <\n Params extends unknown[],\n Path extends string,\n Inc extends readonly AnySurface[] = [],\n M extends ElementMap = Record<never, never>,\n H extends string | undefined = undefined,\n A extends ActionMap = Record<never, never>,\n >(\n build: (...params: Params) => PageDefinition<Path, Inc, M, H, A>,\n ): Parameterized<\n Params,\n PageFactory<\n Path,\n IncludeElements<Inc> & Instantiated<M> & HeaderElement<H>,\n IncludeActions<Inc> & A\n >\n >;\n\n <\n Path extends string,\n Inc extends readonly AnySurface[] = [],\n M extends ElementMap = Record<never, never>,\n H extends string | undefined = undefined,\n A extends ActionMap = Record<never, never>,\n >(\n def: PageDefinition<Path, Inc, M, H, A>,\n ): PageFactory<\n Path,\n IncludeElements<Inc> & Instantiated<M> & HeaderElement<H>,\n IncludeActions<Inc> & A\n >;\n\n preset<Prefix extends string, Inc extends readonly AnySurface[] = []>(\n base: PagePresetDefinition<Prefix, Inc>,\n ): PagePreset<Prefix, Inc>;\n}\n\nexport type AppReady = { selector: string } | ((page: Page) => Promise<void>);\n\nfunction readyOf(ready: AppReady | undefined): (page: Page) => Promise<void> {\n if (ready === undefined) {\n return waitForHydration;\n }\n\n if (typeof ready === \"function\") {\n return ready;\n }\n\n return async (page): Promise<void> => {\n await page.locator(ready.selector).waitFor({ state: \"attached\" });\n };\n}\n\nfunction readyDescriptorOf(\n ready: AppReady | undefined,\n): { selector: string } | { opaque: true } | undefined {\n if (ready === undefined) {\n return undefined;\n }\n\n return typeof ready === \"function\" ? { opaque: true } : ready;\n}\n\ntype AnyPageDefinition = PageDefinition<\n string,\n readonly AnySurface[],\n ElementMap,\n string | undefined,\n ActionMap\n>;\n\ntype PageAnchor = { key: string } | { chain: LocatorDescriptor };\n\nfunction classifyAnchor(\n pageName: string,\n anchor: string | LazyLocator | undefined,\n elements: BoundElements,\n hasHeader: boolean,\n): { descriptor?: LocatorDescriptor | { opaque: true }; anchor?: PageAnchor } {\n if (anchor === undefined) {\n return hasHeader ? { anchor: { key: \"header\" } } : {};\n }\n\n if (isLazyLocator(anchor)) {\n return { descriptor: anchor.chain, anchor: { chain: anchor.chain } };\n }\n\n const bound = elements[anchor];\n if (bound === undefined) {\n throw new Error(\n `the \"${pageName}\" page's anchor references unknown element \"${anchor}\"`,\n );\n }\n\n if (\"locator\" in bound && bound.params === undefined) {\n return { descriptor: bound.locator, anchor: { key: anchor } };\n }\n\n if (\"opaque\" in bound) {\n return { descriptor: { opaque: true }, anchor: { key: anchor } };\n }\n\n throw new Error(\n `the \"${pageName}\" page's anchor \"${anchor}\" must be a plain locator element`,\n );\n}\n\nfunction anchorElement(\n pageName: string,\n key: string,\n elements: object,\n): Locator {\n const candidate = (elements as Record<string, Partial<Locator> | undefined>)[\n key\n ];\n if (candidate === undefined || typeof candidate.waitFor !== \"function\") {\n throw new Error(\n `the \"${pageName}\" page's anchor \"${key}\" did not produce a locator`,\n );\n }\n\n return candidate as Locator;\n}\n\nconst pageReserved = [\n ...componentReserved,\n \"path\",\n \"name\",\n \"goto\",\n \"url\",\n \"params\",\n \"waitFor\",\n];\n\ninterface PageCore extends SurfaceCore {\n anchor?: PageAnchor;\n ready?: AppReady;\n descriptor: PageDescriptor;\n}\n\ninterface AppBinding {\n ready?: AppReady;\n pages: (page: Page) => Record<string, unknown>;\n}\n\nconst bindKey = Symbol(\"walkwright.bind\");\n\nexport interface AnyPageFactory {\n (page: Page): unknown;\n descriptor: PageDescriptor;\n}\n\ninterface BindablePage extends AnyPageFactory {\n [bindKey]: (binding: AppBinding) => BindablePage;\n}\n\nfunction isBindable(value: unknown): value is BindablePage {\n return typeof value === \"function\" && bindKey in value;\n}\n\ntype PageDecorations = Omit<\n PageObject<string, object>,\n \"page\" | \"elements\" | \"pages\"\n>;\n\nfunction pageFactoryOf(core: PageCore, binding?: AppBinding): BindablePage {\n const { path, name } = core.descriptor;\n const ready = readyOf(core.ready ?? binding?.ready);\n\n const anchorOf = (page: Page, elements: object): Locator | undefined => {\n const anchor = core.anchor;\n if (anchor === undefined) {\n return undefined;\n }\n\n return \"chain\" in anchor\n ? resolveLocator(page, anchor.chain)\n : anchorElement(name, anchor.key, elements);\n };\n\n const factory = (page: Page): PageObject<string, object> => {\n const url = (params: PathParams<string>): string =>\n fillPath(path, params as Record<string, string>);\n\n const instance = instantiateSurface<PageDecorations>(\n core,\n page,\n [],\n () => ({\n path,\n name,\n async goto(\n this: PageObject<string, object>,\n params: PathParams<string>,\n ): Promise<void> {\n await page.goto(url(params));\n await ready(page);\n await anchorOf(page, this.elements)?.waitFor();\n },\n url,\n params: (): PathParams<string> => matchPath(path, page.url()),\n async waitFor(this: PageObject<string, object>): Promise<void> {\n await anchorOf(page, this.elements)?.waitFor();\n },\n }),\n );\n\n let pages: Record<string, unknown> | undefined;\n Object.defineProperty(instance, \"pages\", {\n enumerable: true,\n get(): Record<string, unknown> {\n if (binding === undefined) {\n throw new Error(\n `the \"${name}\" page is not app-bound — access this page through the app`,\n );\n }\n\n pages ??= binding.pages(page);\n return pages;\n },\n });\n\n return instance as PageObject<string, object>;\n };\n\n return Object.assign(factory, {\n descriptor: core.descriptor,\n [bindKey]: (next: AppBinding): BindablePage => pageFactoryOf(core, next),\n });\n}\n\nfunction recorderOf(\n recorder: PageRecorder | undefined,\n): PageRecorder | undefined {\n if (recorder === undefined) {\n return undefined;\n }\n\n const projected: PageRecorder = {\n ...(recorder.group === undefined ? {} : { group: recorder.group }),\n ...(recorder.label === undefined ? {} : { label: recorder.label }),\n };\n\n return Object.keys(projected).length === 0 ? undefined : projected;\n}\n\nfunction pageFactoryFrom(def: AnyPageDefinition): BindablePage {\n const owner = `the \"${def.name}\" page`;\n const assembled = assemble(def, owner, pageReserved);\n\n if (def.header !== undefined && \"header\" in assembled.elements) {\n throw new Error(`${owner} declares both header and elements.header`);\n }\n\n const elements: BoundElements = {\n ...(def.header === undefined\n ? {}\n : {\n header: {\n locator: [\n { by: \"role\", role: \"heading\", name: textFrom(def.header) },\n ],\n },\n }),\n ...assembled.elements,\n };\n const { actions } = assembled;\n\n const anchor = classifyAnchor(\n def.name,\n def.anchor,\n elements,\n def.header !== undefined,\n );\n const recorder = recorderOf(def.recorder);\n const ready = readyDescriptorOf(def.ready);\n const projectedActions = classifyActions(actions);\n\n const captureRules = [\n ...assembled.capture,\n ...captureRulesOf(def.capture?.rules, owner, projectElements(elements)),\n ];\n const capture = captureDescriptorOf(captureRules);\n\n const descriptor: PageDescriptor = {\n path: def.path,\n name: def.name,\n ...(recorder === undefined ? {} : { recorder }),\n ...(ready === undefined ? {} : { ready }),\n ...(def.header === undefined ? {} : { header: textFrom(def.header) }),\n ...(anchor.descriptor === undefined ? {} : { anchor: anchor.descriptor }),\n elements: projectElements(elements),\n ...(projectedActions === undefined ? {} : { actions: projectedActions }),\n ...(capture === undefined ? {} : { capture }),\n };\n\n return pageFactoryOf({\n root: [],\n ...(anchor.anchor === undefined ? {} : { anchor: anchor.anchor }),\n ...(def.ready === undefined ? {} : { ready: def.ready }),\n elements,\n actions,\n descriptor,\n });\n}\n\ninterface PresetBase {\n path: string;\n include: readonly AnySurface[];\n group: string[];\n ready?: AppReady;\n capture: CaptureRule[];\n}\n\nfunction presetBaseOf(\n outer: PresetBase | undefined,\n base: PagePresetDefinition<string, readonly AnySurface[]>,\n): PresetBase {\n const ready = base.ready ?? outer?.ready;\n\n return {\n path: `${outer?.path ?? \"\"}${base.path}`,\n include: [...(outer?.include ?? []), ...(base.include ?? [])],\n group: [...(outer?.group ?? []), ...(base.recorder?.group ?? [])],\n capture: [...(base.capture?.rules ?? []), ...(outer?.capture ?? [])],\n ...(ready === undefined ? {} : { ready }),\n };\n}\n\nfunction presetOf(base: PresetBase): PagePreset<string, readonly AnySurface[]> {\n const apply = (def: AnyPageDefinition): AnyPageDefinition => {\n const group = [...base.group, ...(def.recorder?.group ?? [])];\n const recorder: PageRecorder = {\n ...def.recorder,\n ...(group.length === 0 ? {} : { group }),\n };\n const ready = def.ready ?? base.ready;\n const capture = [...(def.capture?.rules ?? []), ...base.capture];\n\n return {\n ...def,\n path: `${base.path}${def.path}`,\n include: [...base.include, ...(def.include ?? [])],\n recorder,\n ...(capture.length === 0 ? {} : { capture: { rules: capture } }),\n ...(ready === undefined ? {} : { ready }),\n };\n };\n\n const preset = (\n definition: AnyPageDefinition | ((...params: never[]) => AnyPageDefinition),\n ): unknown => definer(definition, (def) => pageFactoryFrom(apply(def)));\n\n return Object.assign(preset, {\n path: base.path,\n include: base.include,\n preset: (\n sub: PagePresetDefinition<string, readonly AnySurface[]>,\n ): PagePreset<string, readonly AnySurface[]> =>\n presetOf(presetBaseOf(base, sub)),\n }) as unknown as PagePreset<string, readonly AnySurface[]>;\n}\n\nexport const definePage = Object.assign(\n (\n definition: AnyPageDefinition | ((...params: never[]) => AnyPageDefinition),\n ): unknown => definer(definition, pageFactoryFrom),\n {\n preset: (\n base: PagePresetDefinition<string, readonly AnySurface[]>,\n ): PagePreset<string, readonly AnySurface[]> =>\n presetOf(presetBaseOf(undefined, base)),\n },\n) as unknown as DefinePage;\n\nexport type AnyPages = Record<string, AnyPageFactory>;\n\nexport interface AppDefinition<P extends AnyPages> {\n pages: P;\n ready?: AppReady;\n capture?: { rules: { match: RegExp; text: string }[] };\n}\n\nexport type BoundPages<P extends AnyPages> = {\n [K in keyof P]: P[K] extends (page: Page) => infer Instance\n ? Instance\n : never;\n};\n\nexport interface AppFixtures<P extends AnyPages> extends RecorderFixtures {\n pages: BoundPages<P>;\n}\n\ntype DefaultTestArgs<P extends AnyPages> = PlaywrightTestArgs &\n PlaywrightTestOptions &\n AppFixtures<P>;\n\ntype DefaultWorkerArgs = PlaywrightWorkerArgs & PlaywrightWorkerOptions;\n\nexport interface AppFixtureOptions {\n base?: TestType<PlaywrightTestArgs, NonNullable<unknown>>;\n}\n\nexport interface AppFixture<P extends AnyPages> {\n <\n Defs extends readonly AnyProvision[],\n T extends PlaywrightTestArgs,\n W extends NonNullable<unknown>,\n >(\n provisions: Defs,\n options: AppFixtureOptions & { base: TestType<T, W> },\n ): TestType<T & AppFixtures<P> & { provision: ProvisionMap<Defs> }, W>;\n <Defs extends readonly AnyProvision[]>(\n provisions: Defs,\n options?: AppFixtureOptions,\n ): TestType<\n DefaultTestArgs<P> & { provision: ProvisionMap<Defs> },\n DefaultWorkerArgs\n >;\n <T extends PlaywrightTestArgs, W extends NonNullable<unknown>>(\n provisions: undefined,\n options: AppFixtureOptions & { base: TestType<T, W> },\n ): TestType<T & AppFixtures<P>, W>;\n (\n provisions?: undefined,\n options?: AppFixtureOptions,\n ): TestType<DefaultTestArgs<P>, DefaultWorkerArgs>;\n}\n\nexport interface App<P extends AnyPages = AnyPages> {\n pages: P;\n fixture: AppFixture<P>;\n descriptor: AppDescriptor;\n}\n\nfunction boundPagesOf(pages: AnyPages, page: Page): Record<string, unknown> {\n const bound: Record<string, unknown> = {};\n const settled = new Map<string, unknown>();\n\n for (const [key, factory] of Object.entries(pages)) {\n Object.defineProperty(bound, key, {\n enumerable: true,\n get(): unknown {\n if (!settled.has(key)) {\n settled.set(key, factory(page));\n }\n\n return settled.get(key);\n },\n });\n }\n\n return bound;\n}\n\nfunction appOf<P extends AnyPages>(\n def: AppDefinition<P>,\n descriptor: AppDescriptor,\n): App<P> {\n const byPath = new Map<string, string>();\n for (const page of descriptor.pages) {\n const holder = byPath.get(page.path);\n if (holder !== undefined) {\n throw new Error(\n `pages \"${holder}\" and \"${page.name}\" both claim the path ${page.path}`,\n );\n }\n byPath.set(page.path, page.name);\n }\n\n const bound: Record<string, AnyPageFactory> = {};\n const binding: AppBinding = {\n ...(def.ready === undefined ? {} : { ready: def.ready }),\n pages: (page) => boundPagesOf(bound, page),\n };\n\n for (const [key, factory] of Object.entries<AnyPageFactory>(def.pages)) {\n if (!isBindable(factory)) {\n throw new Error(`\"${key}\" is not a page defined with definePage`);\n }\n bound[key] = factory[bindKey](binding);\n }\n\n const app: App<P> = {\n pages: bound as P,\n descriptor,\n fixture: ((\n provisions?: readonly AnyProvision[],\n options?: AppFixtureOptions,\n ) => {\n const test = (options?.base ?? playwrightTest).extend<\n AppFixtures<AnyPages>\n >({\n ...createRecorderFixtures(app),\n pages: async ({ page }, use): Promise<void> => {\n await use(boundPagesOf(bound, page));\n },\n });\n\n return provisions === undefined\n ? test\n : test.extend<{ provision: ProvisionMap<readonly AnyProvision[]> }>({\n provision: async ({ page }, use): Promise<void> => {\n await using provisioner = createProvisioner(page, provisions);\n\n await use(provisioner.provision);\n },\n });\n }) as AppFixture<P>,\n };\n\n return app;\n}\n\nexport function defineApp<P extends AnyPages>(def: AppDefinition<P>): App<P> {\n const ready = readyDescriptorOf(def.ready);\n const captureRules = (def.capture?.rules ?? []).map(\n (rule): CaptureRuleDescriptor => ({\n match: regexDescriptorOf(rule.match),\n text: rule.text,\n }),\n );\n const capture = captureDescriptorOf(captureRules);\n\n return appOf(def, {\n ...(ready === undefined ? {} : { ready }),\n pages: Object.values<AnyPageFactory>(def.pages)\n .map((page) => page.descriptor)\n .sort((a, b) => (a.path < b.path ? -1 : a.path > b.path ? 1 : 0)),\n ...(capture === undefined ? {} : { capture }),\n });\n}\n\nfunction loadElement(descriptor: ElementDescriptor): BoundElement | undefined {\n if (\"locator\" in descriptor) {\n return descriptor.params === undefined\n ? { locator: descriptor.locator }\n : { locator: descriptor.locator, params: descriptor.params };\n }\n\n if (\"surface\" in descriptor) {\n return { surface: loadSurface(descriptor.surface) };\n }\n\n if (\"overlay\" in descriptor) {\n return { overlay: loadOverlay(descriptor) };\n }\n\n return undefined;\n}\n\nfunction loadElements(\n elements: Record<string, ElementDescriptor>,\n): BoundElements {\n const bound: BoundElements = {};\n\n for (const [key, descriptor] of Object.entries(elements)) {\n const loaded = loadElement(descriptor);\n if (loaded !== undefined) {\n bound[key] = loaded;\n }\n }\n\n return bound;\n}\n\nfunction loadSurface(descriptor: NestedSurfaceDescriptor): NestedSurface {\n return {\n factory: componentFactoryOf({\n root: descriptor.root ?? [],\n elements: loadElements(descriptor.elements),\n actions: {},\n descriptor,\n }),\n descriptor,\n };\n}\n\nfunction loadOverlay(\n descriptor: Extract<ElementDescriptor, { overlay: OverlayDescriptor }>,\n): NestedOverlay {\n const { overlay } = descriptor;\n const button = overlay.close.button;\n\n return {\n factory: overlayFactoryOf({\n root: overlay.root,\n elements: loadElements(overlay.elements),\n actions: {},\n close: {\n esc: overlay.close.esc,\n ...(button === undefined\n ? {}\n : {\n button: (root: Locator): Locator => resolveLocator(root, button),\n }),\n },\n descriptor: overlay,\n }),\n descriptor,\n };\n}\n\nexport function loadPage(\n descriptor: PageDescriptor,\n): PageFactory<string, Record<string, unknown>, Record<never, never>> {\n const ready =\n descriptor.ready !== undefined && \"selector\" in descriptor.ready\n ? descriptor.ready\n : undefined;\n const anchor: PageAnchor | undefined = Array.isArray(descriptor.anchor)\n ? { chain: descriptor.anchor }\n : descriptor.header === undefined\n ? undefined\n : { key: \"header\" };\n\n return pageFactoryOf({\n root: [],\n ...(anchor === undefined ? {} : { anchor }),\n ...(ready === undefined ? {} : { ready }),\n elements: loadElements(descriptor.elements),\n actions: {},\n descriptor,\n }) as PageFactory<string, Record<string, unknown>, Record<never, never>>;\n}\n\nexport function loadApp(raw: unknown): App {\n const parsed = appDescriptorSchema.parse(raw);\n const pages = Object.fromEntries(\n parsed.pages.map((page) => [page.name, loadPage(page)]),\n );\n\n const ready =\n parsed.ready !== undefined && \"selector\" in parsed.ready\n ? parsed.ready\n : undefined;\n\n return appOf(\n {\n pages,\n ...(ready === undefined ? {} : { ready }),\n },\n parsed,\n );\n}\n\nexport async function arriveAt<T extends { waitFor: () => Promise<void> }>(\n destination: Factory<T>,\n page: Page,\n): Promise<T> {\n const arrived = destination(page);\n await arrived.waitFor();\n return arrived;\n}\n\nexport async function waitForHydration(\n page: Page,\n timeoutMs = 60_000,\n): Promise<void> {\n const marker = page.locator('html[data-hydrated=\"true\"]');\n const attached = await marker\n .waitFor({ state: \"attached\", timeout: timeoutMs })\n .then(\n () => true,\n () => false,\n );\n\n if (!attached) {\n await page.reload();\n await marker.waitFor({ state: \"attached\", timeout: timeoutMs });\n }\n}\n\nexport function pathParams<Path extends string>(\n path: Path,\n url: string,\n): PathParams<Path> {\n return matchPath(path, url) as PathParams<Path>;\n}\n\nfunction matchPath(path: string, url: string): PathParams<string> {\n const pattern = new RegExp(\n `^${path.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\").replace(/:[A-Za-z]+/g, \"([^/]+)\")}(?:/|$)`,\n );\n const names = [...path.matchAll(/:([A-Za-z]+)/g)].map(([, name]) => name);\n const pathname = new URL(url).pathname;\n const match = pattern.exec(pathname);\n\n if (match === null) {\n throw new Error(`${pathname} does not match ${path}`);\n }\n\n return Object.fromEntries(\n names.map((name, index) => [\n name,\n decodeURIComponent(match[index + 1] ?? \"\"),\n ]),\n ) as PathParams<string>;\n}\n\nfunction fillPath(path: string, params: Record<string, string>): string {\n return path.replace(/:([A-Za-z]+)/g, (match, name: string) => {\n const value = params[name];\n if (value === undefined) {\n throw new Error(`missing path param ${match}`);\n }\n\n return encodeURIComponent(value);\n });\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// src/schema.ts
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
var manifestVersion = 5;
|
|
4
|
+
var captureSchema = z.object({
|
|
5
|
+
variant: z.record(z.string().min(1), z.string()).optional(),
|
|
6
|
+
files: z.record(z.string().min(1), z.string().min(1)).refine((files) => typeof files["image"] === "string", {
|
|
7
|
+
message: "files.image is required"
|
|
8
|
+
})
|
|
9
|
+
});
|
|
10
|
+
var stateSchema = z.object({
|
|
11
|
+
name: z.string().min(1),
|
|
12
|
+
captures: z.array(captureSchema).min(1)
|
|
13
|
+
});
|
|
14
|
+
var subjectSchema = z.object({
|
|
15
|
+
path: z.array(z.string().min(1)).min(1),
|
|
16
|
+
url: z.string().optional(),
|
|
17
|
+
states: z.array(stateSchema).min(1)
|
|
18
|
+
});
|
|
19
|
+
var manifestSchema = z.object({
|
|
20
|
+
version: z.literal(manifestVersion),
|
|
21
|
+
tool: z.string().optional(),
|
|
22
|
+
url: z.string().optional(),
|
|
23
|
+
startedAt: z.iso.datetime().optional(),
|
|
24
|
+
runStats: z.record(z.string(), z.union([z.string(), z.number()])).optional(),
|
|
25
|
+
subjects: z.array(subjectSchema)
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
export {
|
|
29
|
+
manifestVersion,
|
|
30
|
+
captureSchema,
|
|
31
|
+
stateSchema,
|
|
32
|
+
subjectSchema,
|
|
33
|
+
manifestSchema
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=chunk-A452S7R3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/schema.ts"],"sourcesContent":["import { z } from \"zod\";\n\nexport const manifestVersion = 5;\n\nexport const captureSchema = z.object({\n variant: z.record(z.string().min(1), z.string()).optional(),\n files: z\n .record(z.string().min(1), z.string().min(1))\n .refine((files) => typeof files[\"image\"] === \"string\", {\n message: \"files.image is required\",\n }),\n});\n\nexport const stateSchema = z.object({\n name: z.string().min(1),\n captures: z.array(captureSchema).min(1),\n});\n\nexport const subjectSchema = z.object({\n path: z.array(z.string().min(1)).min(1),\n url: z.string().optional(),\n states: z.array(stateSchema).min(1),\n});\n\nexport const manifestSchema = z.object({\n version: z.literal(manifestVersion),\n tool: z.string().optional(),\n url: z.string().optional(),\n startedAt: z.iso.datetime().optional(),\n runStats: z.record(z.string(), z.union([z.string(), z.number()])).optional(),\n subjects: z.array(subjectSchema),\n});\n\nexport type Capture = z.infer<typeof captureSchema>;\nexport type State = z.infer<typeof stateSchema>;\nexport type Subject = z.infer<typeof subjectSchema>;\nexport type Manifest = z.infer<typeof manifestSchema>;\n"],"mappings":";AAAA,SAAS,SAAS;AAEX,IAAM,kBAAkB;AAExB,IAAM,gBAAgB,EAAE,OAAO;AAAA,EACpC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EAC1D,OAAO,EACJ,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,EAC3C,OAAO,CAAC,UAAU,OAAO,MAAM,OAAO,MAAM,UAAU;AAAA,IACrD,SAAS;AAAA,EACX,CAAC;AACL,CAAC;AAEM,IAAM,cAAc,EAAE,OAAO;AAAA,EAClC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACtB,UAAU,EAAE,MAAM,aAAa,EAAE,IAAI,CAAC;AACxC,CAAC;AAEM,IAAM,gBAAgB,EAAE,OAAO;AAAA,EACpC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC;AAAA,EACtC,KAAK,EAAE,OAAO,EAAE,SAAS;AAAA,EACzB,QAAQ,EAAE,MAAM,WAAW,EAAE,IAAI,CAAC;AACpC,CAAC;AAEM,IAAM,iBAAiB,EAAE,OAAO;AAAA,EACrC,SAAS,EAAE,QAAQ,eAAe;AAAA,EAClC,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,KAAK,EAAE,OAAO,EAAE,SAAS;AAAA,EACzB,WAAW,EAAE,IAAI,SAAS,EAAE,SAAS;AAAA,EACrC,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,SAAS;AAAA,EAC3E,UAAU,EAAE,MAAM,aAAa;AACjC,CAAC;","names":[]}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
// src/paths.ts
|
|
2
|
+
import { execFileSync } from "child_process";
|
|
3
|
+
import { existsSync, mkdirSync, writeFileSync } from "fs";
|
|
4
|
+
import { dirname, join } from "path";
|
|
5
|
+
var walkwrightDirName = ".walkwright";
|
|
6
|
+
var ignoreFile = ["*", "!config.json", ""].join("\n");
|
|
7
|
+
function tryGit(cwd, args) {
|
|
8
|
+
try {
|
|
9
|
+
return execFileSync("git", args, { cwd, encoding: "utf8" }).trim();
|
|
10
|
+
} catch {
|
|
11
|
+
return void 0;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
function projectDir(cwd = process.cwd()) {
|
|
15
|
+
for (let dir = cwd; ; dir = dirname(dir)) {
|
|
16
|
+
if (existsSync(join(dir, walkwrightDirName)) || existsSync(join(dir, "package.json"))) {
|
|
17
|
+
return dir;
|
|
18
|
+
}
|
|
19
|
+
if (dirname(dir) === dir) {
|
|
20
|
+
return cwd;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function walkwrightDir(cwd = process.cwd()) {
|
|
25
|
+
return join(projectDir(cwd), walkwrightDirName);
|
|
26
|
+
}
|
|
27
|
+
function ensureWalkwrightDir(cwd = process.cwd()) {
|
|
28
|
+
const dir = walkwrightDir(cwd);
|
|
29
|
+
const ignore = join(dir, ".gitignore");
|
|
30
|
+
mkdirSync(dir, { recursive: true });
|
|
31
|
+
if (!existsSync(ignore)) {
|
|
32
|
+
writeFileSync(ignore, ignoreFile);
|
|
33
|
+
}
|
|
34
|
+
return dir;
|
|
35
|
+
}
|
|
36
|
+
function configPath(cwd = process.cwd()) {
|
|
37
|
+
return join(walkwrightDir(cwd), "config.json");
|
|
38
|
+
}
|
|
39
|
+
function reportsDir(cwd = process.cwd()) {
|
|
40
|
+
return join(walkwrightDir(cwd), "reports");
|
|
41
|
+
}
|
|
42
|
+
function storeDir(scope = "worker", cwd = process.cwd()) {
|
|
43
|
+
return join(
|
|
44
|
+
walkwrightDir(cwd),
|
|
45
|
+
"store",
|
|
46
|
+
scope === "project" ? "shared" : `worker-${process.env["TEST_PARALLEL_INDEX"] ?? "0"}`
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export {
|
|
51
|
+
walkwrightDirName,
|
|
52
|
+
tryGit,
|
|
53
|
+
projectDir,
|
|
54
|
+
walkwrightDir,
|
|
55
|
+
ensureWalkwrightDir,
|
|
56
|
+
configPath,
|
|
57
|
+
reportsDir,
|
|
58
|
+
storeDir
|
|
59
|
+
};
|
|
60
|
+
//# sourceMappingURL=chunk-BODO6HIH.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/paths.ts"],"sourcesContent":["import { execFileSync } from \"node:child_process\";\nimport { existsSync, mkdirSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\n\nexport const walkwrightDirName = \".walkwright\";\n\nconst ignoreFile = [\"*\", \"!config.json\", \"\"].join(\"\\n\");\n\nexport function tryGit(cwd: string, args: string[]): string | undefined {\n try {\n return execFileSync(\"git\", args, { cwd, encoding: \"utf8\" }).trim();\n } catch {\n return undefined;\n }\n}\n\nexport function projectDir(cwd = process.cwd()): string {\n for (let dir = cwd; ; dir = dirname(dir)) {\n if (\n existsSync(join(dir, walkwrightDirName)) ||\n existsSync(join(dir, \"package.json\"))\n ) {\n return dir;\n }\n\n if (dirname(dir) === dir) {\n return cwd;\n }\n }\n}\n\nexport function walkwrightDir(cwd = process.cwd()): string {\n return join(projectDir(cwd), walkwrightDirName);\n}\n\nexport function ensureWalkwrightDir(cwd = process.cwd()): string {\n const dir = walkwrightDir(cwd);\n const ignore = join(dir, \".gitignore\");\n\n mkdirSync(dir, { recursive: true });\n\n if (!existsSync(ignore)) {\n writeFileSync(ignore, ignoreFile);\n }\n\n return dir;\n}\n\nexport function configPath(cwd = process.cwd()): string {\n return join(walkwrightDir(cwd), \"config.json\");\n}\n\nexport function reportsDir(cwd = process.cwd()): string {\n return join(walkwrightDir(cwd), \"reports\");\n}\n\nexport type StoreScope = \"worker\" | \"project\";\n\nexport function storeDir(\n scope: StoreScope = \"worker\",\n cwd = process.cwd(),\n): string {\n return join(\n walkwrightDir(cwd),\n \"store\",\n scope === \"project\"\n ? \"shared\"\n : `worker-${process.env[\"TEST_PARALLEL_INDEX\"] ?? \"0\"}`,\n );\n}\n"],"mappings":";AAAA,SAAS,oBAAoB;AAC7B,SAAS,YAAY,WAAW,qBAAqB;AACrD,SAAS,SAAS,YAAY;AAEvB,IAAM,oBAAoB;AAEjC,IAAM,aAAa,CAAC,KAAK,gBAAgB,EAAE,EAAE,KAAK,IAAI;AAE/C,SAAS,OAAO,KAAa,MAAoC;AACtE,MAAI;AACF,WAAO,aAAa,OAAO,MAAM,EAAE,KAAK,UAAU,OAAO,CAAC,EAAE,KAAK;AAAA,EACnE,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,SAAS,WAAW,MAAM,QAAQ,IAAI,GAAW;AACtD,WAAS,MAAM,OAAO,MAAM,QAAQ,GAAG,GAAG;AACxC,QACE,WAAW,KAAK,KAAK,iBAAiB,CAAC,KACvC,WAAW,KAAK,KAAK,cAAc,CAAC,GACpC;AACA,aAAO;AAAA,IACT;AAEA,QAAI,QAAQ,GAAG,MAAM,KAAK;AACxB,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAEO,SAAS,cAAc,MAAM,QAAQ,IAAI,GAAW;AACzD,SAAO,KAAK,WAAW,GAAG,GAAG,iBAAiB;AAChD;AAEO,SAAS,oBAAoB,MAAM,QAAQ,IAAI,GAAW;AAC/D,QAAM,MAAM,cAAc,GAAG;AAC7B,QAAM,SAAS,KAAK,KAAK,YAAY;AAErC,YAAU,KAAK,EAAE,WAAW,KAAK,CAAC;AAElC,MAAI,CAAC,WAAW,MAAM,GAAG;AACvB,kBAAc,QAAQ,UAAU;AAAA,EAClC;AAEA,SAAO;AACT;AAEO,SAAS,WAAW,MAAM,QAAQ,IAAI,GAAW;AACtD,SAAO,KAAK,cAAc,GAAG,GAAG,aAAa;AAC/C;AAEO,SAAS,WAAW,MAAM,QAAQ,IAAI,GAAW;AACtD,SAAO,KAAK,cAAc,GAAG,GAAG,SAAS;AAC3C;AAIO,SAAS,SACd,QAAoB,UACpB,MAAM,QAAQ,IAAI,GACV;AACR,SAAO;AAAA,IACL,cAAc,GAAG;AAAA,IACjB;AAAA,IACA,UAAU,YACN,WACA,UAAU,QAAQ,IAAI,qBAAqB,KAAK,GAAG;AAAA,EACzD;AACF;","names":[]}
|