sourcemonkey 0.0.0-stage → 0.5.0
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 +87 -2
- package/dist/bytes.js +37 -0
- package/dist/channel-placeholder.js +5 -0
- package/dist/collection-scan.js +17 -0
- package/dist/collections.html +353 -0
- package/dist/compare.html +358 -0
- package/dist/composed-source.js +205 -0
- package/dist/connect-prompt.html +47 -0
- package/dist/debug/icons.html +211 -0
- package/dist/debug/storage.html +163 -0
- package/dist/debug-log.js +75 -0
- package/dist/diagnostic-location.js +64 -0
- package/dist/eval-hook.js +308 -0
- package/dist/extension/background.js +5263 -0
- package/dist/extension/channel.js +133 -0
- package/dist/extension/code-links.js +187 -0
- package/dist/extension/code-tabs.js +460 -0
- package/dist/extension/collection-dialog.js +619 -0
- package/dist/extension/collection-display.js +322 -0
- package/dist/extension/collections.js +2905 -0
- package/dist/extension/compare.js +867 -0
- package/dist/extension/concurrency.js +186 -0
- package/dist/extension/connect-grants.js +109 -0
- package/dist/extension/connect-prompt-page.js +70 -0
- package/dist/extension/connect-prompt.js +266 -0
- package/dist/extension/copy-button.js +63 -0
- package/dist/extension/copy-dialog.js +502 -0
- package/dist/extension/copy-preference.js +66 -0
- package/dist/extension/debug/icons.js +203 -0
- package/dist/extension/debug/storage.js +365 -0
- package/dist/extension/deep-link.js +77 -0
- package/dist/extension/delete-dialog.js +432 -0
- package/dist/extension/delete-icon.js +40 -0
- package/dist/extension/details-tooltips.js +66 -0
- package/dist/extension/directories.js +679 -0
- package/dist/extension/export-backup.js +407 -0
- package/dist/extension/export-dialog.js +142 -0
- package/dist/extension/file-access.js +74 -0
- package/dist/extension/file-changes.js +346 -0
- package/dist/extension/frame-info.js +85 -0
- package/dist/extension/github-provider.js +336 -0
- package/dist/extension/glyph.js +84 -0
- package/dist/extension/gm-bindings.js +601 -0
- package/dist/extension/gm-download.js +419 -0
- package/dist/extension/gm-menu.js +228 -0
- package/dist/extension/gm-notification.js +141 -0
- package/dist/extension/gm-originator-map.js +23 -0
- package/dist/extension/gm-tab-data.js +121 -0
- package/dist/extension/gm-tab.js +160 -0
- package/dist/extension/gm-url-change.js +111 -0
- package/dist/extension/gm-url-scheme.js +27 -0
- package/dist/extension/gm-values.js +176 -0
- package/dist/extension/gm-window-control.js +104 -0
- package/dist/extension/gm-xhr-headers.js +333 -0
- package/dist/extension/gm-xhr.js +584 -0
- package/dist/extension/injector.js +3145 -0
- package/dist/extension/install-capture.js +277 -0
- package/dist/extension/line-diff.js +233 -0
- package/dist/extension/local-copy.js +560 -0
- package/dist/extension/local-delete.js +276 -0
- package/dist/extension/location-kinds.js +108 -0
- package/dist/extension/log-format.js +158 -0
- package/dist/extension/managed-changes.js +361 -0
- package/dist/extension/managed-items.js +57 -0
- package/dist/extension/match-index.js +375 -0
- package/dist/extension/missing-scripts.js +66 -0
- package/dist/extension/more-menu.js +109 -0
- package/dist/extension/move-dialog.js +197 -0
- package/dist/extension/offscreen.js +37 -0
- package/dist/extension/options.js +504 -0
- package/dist/extension/page-heading.js +170 -0
- package/dist/extension/page-links.js +199 -0
- package/dist/extension/parse-check-client.js +70 -0
- package/dist/extension/parse-check.js +161 -0
- package/dist/extension/parse-sandbox-host.js +172 -0
- package/dist/extension/parse-sandbox.js +175 -0
- package/dist/extension/popup-commands-open.js +41 -0
- package/dist/extension/popup-view.js +387 -0
- package/dist/extension/popup.js +703 -0
- package/dist/extension/prism-userscript.js +53 -0
- package/dist/extension/refresh-error.js +136 -0
- package/dist/extension/refresh-targets.js +160 -0
- package/dist/extension/related-versions.js +1144 -0
- package/dist/extension/resize-observer-loop.js +19 -0
- package/dist/extension/row-cache.js +387 -0
- package/dist/extension/script-blobs.js +413 -0
- package/dist/extension/script-details.js +658 -0
- package/dist/extension/script-enablement.js +285 -0
- package/dist/extension/script-identity.js +310 -0
- package/dist/extension/script-keys.js +54 -0
- package/dist/extension/script-log-id.js +155 -0
- package/dist/extension/script-log.js +290 -0
- package/dist/extension/script-rejection.js +104 -0
- package/dist/extension/script-sites.js +158 -0
- package/dist/extension/script-store.js +3507 -0
- package/dist/extension/script-updater.js +991 -0
- package/dist/extension/script-url-hash.js +61 -0
- package/dist/extension/select-all.js +37 -0
- package/dist/extension/select-open-guard.js +90 -0
- package/dist/extension/site-icon.js +1261 -0
- package/dist/extension/sm-dev-link.js +302 -0
- package/dist/extension/solo-click.js +58 -0
- package/dist/extension/sticky-numbers.js +188 -0
- package/dist/extension/storage-breakdown.js +253 -0
- package/dist/extension/storage-scan.js +86 -0
- package/dist/extension/storage-usage.js +194 -0
- package/dist/extension/structural-keys.js +29 -0
- package/dist/extension/sw-teardown.js +36 -0
- package/dist/extension/tab-status.js +403 -0
- package/dist/extension/toolbar-summary.js +105 -0
- package/dist/extension/user-scripts-access.js +43 -0
- package/dist/extension/userscript.js +3672 -0
- package/dist/extension/value-store.js +204 -0
- package/dist/extension/version-probe-fetch.js +68 -0
- package/dist/extension/worker-client.js +109 -0
- package/dist/extension/worker-ops.js +171 -0
- package/dist/extension/zip-writer.js +24 -0
- package/dist/external-files.js +878 -0
- package/dist/file-loader.js +436 -0
- package/dist/file-locations.js +439 -0
- package/dist/generated-wrappers.js +5 -0
- package/dist/github-auth.js +148 -0
- package/dist/github-urls.js +46 -0
- package/dist/gm-api-catalog.js +217 -0
- package/dist/gm-connect.js +273 -0
- package/dist/gm-xhr-types.js +5 -0
- package/dist/http-read.js +142 -0
- package/dist/icons/icon-128.png +0 -0
- package/dist/icons/icon-16.png +0 -0
- package/dist/icons/icon-48.png +0 -0
- package/dist/local-file-overrides.js +558 -0
- package/dist/manifest.json +38 -0
- package/dist/markup-response.js +126 -0
- package/dist/match-targets.js +305 -0
- package/dist/menu-captions.js +22 -0
- package/dist/offscreen.html +39 -0
- package/dist/options.html +197 -0
- package/dist/parse-check-protocol.js +51 -0
- package/dist/parse-location.js +171 -0
- package/dist/parse-sandbox.html +56 -0
- package/dist/phase-timing.js +155 -0
- package/dist/popup.html +197 -0
- package/dist/public-suffixes.js +6957 -0
- package/dist/run-context.js +31 -0
- package/dist/runtime-messages.js +34 -0
- package/dist/sandboxed-page.js +35 -0
- package/dist/script-build.js +787 -0
- package/dist/script-display.js +383 -0
- package/dist/script-icon.js +43 -0
- package/dist/script-links.js +204 -0
- package/dist/script-source-url.js +214 -0
- package/dist/script-world.js +65 -0
- package/dist/sm-dev-protocol.js +84 -0
- package/dist/source-map.js +177 -0
- package/dist/stack-link.js +138 -0
- package/dist/styles.css +825 -0
- package/dist/unsafe-window-use.js +229 -0
- package/dist/url-match.js +734 -0
- package/dist/userscript-header.js +248 -0
- package/dist/userscript.html +1165 -0
- package/dist/vendor/fflate.LICENSE +21 -0
- package/dist/vendor/fflate.js +2692 -0
- package/dist/vendor/prism/prism-line-numbers.css +1 -0
- package/dist/vendor/prism/prism-line-numbers.js +1 -0
- package/dist/vendor/prism/prism.css +1 -0
- package/dist/vendor/prism/prism.js +1946 -0
- package/dist/version-compare.js +141 -0
- package/dist/version-probe.js +120 -0
- package/lib/build-info.json +1 -0
- package/lib/bytes.d.ts +3 -0
- package/lib/bytes.js +37 -0
- package/lib/channel-placeholder.d.ts +1 -0
- package/lib/channel-placeholder.js +5 -0
- package/lib/collection-scan.d.ts +8 -0
- package/lib/collection-scan.js +17 -0
- package/lib/composed-source.d.ts +28 -0
- package/lib/composed-source.js +205 -0
- package/lib/debug-log.d.ts +9 -0
- package/lib/debug-log.js +75 -0
- package/lib/diagnostic-location.d.ts +8 -0
- package/lib/diagnostic-location.js +64 -0
- package/lib/eval-hook.d.ts +34 -0
- package/lib/eval-hook.js +308 -0
- package/lib/external-files.d.ts +111 -0
- package/lib/external-files.js +878 -0
- package/lib/file-loader.d.ts +48 -0
- package/lib/file-loader.js +436 -0
- package/lib/file-locations.d.ts +44 -0
- package/lib/file-locations.js +439 -0
- package/lib/generated-wrappers.d.ts +11 -0
- package/lib/generated-wrappers.js +5 -0
- package/lib/github-auth.d.ts +12 -0
- package/lib/github-auth.js +148 -0
- package/lib/github-urls.d.ts +1 -0
- package/lib/github-urls.js +46 -0
- package/lib/gm-api-catalog.d.ts +24 -0
- package/lib/gm-api-catalog.js +217 -0
- package/lib/gm-connect.d.ts +34 -0
- package/lib/gm-connect.js +273 -0
- package/lib/gm-xhr-types.d.ts +68 -0
- package/lib/gm-xhr-types.js +5 -0
- package/lib/harness/browser-extensions.d.ts +73 -0
- package/lib/harness/browser-extensions.js +285 -0
- package/lib/harness/browser-lang.d.ts +20 -0
- package/lib/harness/browser-lang.js +86 -0
- package/lib/harness/browser-launch.d.ts +14 -0
- package/lib/harness/browser-launch.js +184 -0
- package/lib/harness/checks.d.ts +110 -0
- package/lib/harness/checks.js +321 -0
- package/lib/harness/cli.d.ts +2 -0
- package/lib/harness/cli.js +2259 -0
- package/lib/harness/command-args.d.ts +91 -0
- package/lib/harness/command-args.js +369 -0
- package/lib/harness/command-lines.d.ts +80 -0
- package/lib/harness/command-lines.js +180 -0
- package/lib/harness/command-list.d.ts +206 -0
- package/lib/harness/command-list.js +1475 -0
- package/lib/harness/console-commands.d.ts +463 -0
- package/lib/harness/console-commands.js +3216 -0
- package/lib/harness/download-watch.d.ts +21 -0
- package/lib/harness/download-watch.js +156 -0
- package/lib/harness/extension-backend.d.ts +41 -0
- package/lib/harness/extension-backend.js +100 -0
- package/lib/harness/extension-host.d.ts +112 -0
- package/lib/harness/extension-host.js +552 -0
- package/lib/harness/extension-launch.d.ts +67 -0
- package/lib/harness/extension-launch.js +285 -0
- package/lib/harness/extension-link.d.ts +315 -0
- package/lib/harness/extension-link.js +607 -0
- package/lib/harness/external-manager.d.ts +146 -0
- package/lib/harness/external-manager.js +414 -0
- package/lib/harness/fixture.d.ts +165 -0
- package/lib/harness/fixture.js +461 -0
- package/lib/harness/frame-sessions.d.ts +71 -0
- package/lib/harness/frame-sessions.js +248 -0
- package/lib/harness/frames.d.ts +68 -0
- package/lib/harness/frames.js +216 -0
- package/lib/harness/help-format.d.ts +17 -0
- package/lib/harness/help-format.js +127 -0
- package/lib/harness/host.d.ts +352 -0
- package/lib/harness/host.js +423 -0
- package/lib/harness/index.d.ts +8 -0
- package/lib/harness/index.js +10 -0
- package/lib/harness/input-file.d.ts +18 -0
- package/lib/harness/input-file.js +61 -0
- package/lib/harness/json-output.d.ts +565 -0
- package/lib/harness/json-output.js +71 -0
- package/lib/harness/manager-actions.d.ts +21 -0
- package/lib/harness/manager-actions.js +129 -0
- package/lib/harness/manager-commands.d.ts +142 -0
- package/lib/harness/manager-commands.js +1196 -0
- package/lib/harness/manager-fetch.d.ts +33 -0
- package/lib/harness/manager-fetch.js +239 -0
- package/lib/harness/managers.d.ts +24 -0
- package/lib/harness/managers.js +27 -0
- package/lib/harness/output-style.d.ts +125 -0
- package/lib/harness/output-style.js +322 -0
- package/lib/harness/page-commands.d.ts +134 -0
- package/lib/harness/page-commands.js +1141 -0
- package/lib/harness/page-output.d.ts +67 -0
- package/lib/harness/page-output.js +139 -0
- package/lib/harness/page-watch.d.ts +171 -0
- package/lib/harness/page-watch.js +607 -0
- package/lib/harness/parse-check-node.d.ts +3 -0
- package/lib/harness/parse-check-node.js +132 -0
- package/lib/harness/path-args.d.ts +22 -0
- package/lib/harness/path-args.js +148 -0
- package/lib/harness/playwright-chromium.d.ts +16 -0
- package/lib/harness/playwright-chromium.js +86 -0
- package/lib/harness/prepare.d.ts +168 -0
- package/lib/harness/prepare.js +364 -0
- package/lib/harness/prompt-editor.d.ts +17 -0
- package/lib/harness/prompt-editor.js +354 -0
- package/lib/harness/prompt-history.d.ts +13 -0
- package/lib/harness/prompt-history.js +89 -0
- package/lib/harness/rebuild-advice.d.ts +6 -0
- package/lib/harness/rebuild-advice.js +39 -0
- package/lib/harness/run-log.d.ts +47 -0
- package/lib/harness/run-log.js +140 -0
- package/lib/harness/run-logs.d.ts +132 -0
- package/lib/harness/run-logs.js +241 -0
- package/lib/harness/run.d.ts +194 -0
- package/lib/harness/run.js +1973 -0
- package/lib/harness/runs.d.ts +229 -0
- package/lib/harness/runs.js +726 -0
- package/lib/harness/save-html.d.ts +39 -0
- package/lib/harness/save-html.js +89 -0
- package/lib/harness/saved-pages.d.ts +120 -0
- package/lib/harness/saved-pages.js +275 -0
- package/lib/harness/script-mark.d.ts +17 -0
- package/lib/harness/script-mark.js +56 -0
- package/lib/harness/snapshot.d.ts +143 -0
- package/lib/harness/snapshot.js +474 -0
- package/lib/harness/stuck-tabs.d.ts +19 -0
- package/lib/harness/stuck-tabs.js +131 -0
- package/lib/harness/tab-refs.d.ts +20 -0
- package/lib/harness/tab-refs.js +80 -0
- package/lib/harness/tampermonkey.d.ts +71 -0
- package/lib/harness/tampermonkey.js +356 -0
- package/lib/harness/tm-ids.d.ts +18 -0
- package/lib/harness/tm-ids.js +88 -0
- package/lib/harness/violentmonkey.d.ts +34 -0
- package/lib/harness/violentmonkey.js +162 -0
- package/lib/harness/wait.d.ts +77 -0
- package/lib/harness/wait.js +458 -0
- package/lib/http-read.d.ts +30 -0
- package/lib/http-read.js +142 -0
- package/lib/local-file-overrides.d.ts +35 -0
- package/lib/local-file-overrides.js +558 -0
- package/lib/manifest.json +38 -0
- package/lib/markup-response.d.ts +11 -0
- package/lib/markup-response.js +126 -0
- package/lib/match-targets.d.ts +18 -0
- package/lib/match-targets.js +305 -0
- package/lib/menu-captions.d.ts +1 -0
- package/lib/menu-captions.js +22 -0
- package/lib/parse-check-protocol.d.ts +27 -0
- package/lib/parse-check-protocol.js +51 -0
- package/lib/parse-location.d.ts +12 -0
- package/lib/parse-location.js +171 -0
- package/lib/phase-timing.d.ts +12 -0
- package/lib/phase-timing.js +155 -0
- package/lib/public-suffixes.d.ts +1 -0
- package/lib/public-suffixes.js +6957 -0
- package/lib/run-context.d.ts +2 -0
- package/lib/run-context.js +31 -0
- package/lib/runtime-messages.d.ts +10 -0
- package/lib/runtime-messages.js +34 -0
- package/lib/sandboxed-page.d.ts +5 -0
- package/lib/sandboxed-page.js +35 -0
- package/lib/script-build.d.ts +111 -0
- package/lib/script-build.js +787 -0
- package/lib/script-display.d.ts +51 -0
- package/lib/script-display.js +383 -0
- package/lib/script-icon.d.ts +16 -0
- package/lib/script-icon.js +43 -0
- package/lib/script-links.d.ts +24 -0
- package/lib/script-links.js +204 -0
- package/lib/script-source-url.d.ts +8 -0
- package/lib/script-source-url.js +214 -0
- package/lib/script-world.d.ts +6 -0
- package/lib/script-world.js +65 -0
- package/lib/sm-dev-protocol.d.ts +251 -0
- package/lib/sm-dev-protocol.js +84 -0
- package/lib/source-map.d.ts +32 -0
- package/lib/source-map.js +177 -0
- package/lib/stack-link.d.ts +15 -0
- package/lib/stack-link.js +138 -0
- package/lib/unsafe-window-use.d.ts +1 -0
- package/lib/unsafe-window-use.js +229 -0
- package/lib/url-match.d.ts +40 -0
- package/lib/url-match.js +734 -0
- package/lib/userscript-header.d.ts +33 -0
- package/lib/userscript-header.js +248 -0
- package/lib/version-compare.d.ts +6 -0
- package/lib/version-compare.js +141 -0
- package/lib/version-probe.d.ts +17 -0
- package/lib/version-probe.js +120 -0
- package/package.json +55 -3
- package/skills/SourceMonkey-dev/SKILL.md +868 -0
- package/skills/SourceMonkey-dev/references/cdp.md +293 -0
- package/skills/SourceMonkey-dev/references/commands.md +297 -0
- package/skills/SourceMonkey-dev/references/other-managers.md +63 -0
- package/skills/SourceMonkey-dev/references/specs.md +46 -0
- package/skills/SourceMonkey-friction/SKILL.md +103 -0
- package/skills/SourceMonkey-friction/references/template.md +59 -0
|
@@ -0,0 +1,463 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
2
|
+
import type { BrowserContext, Dialog, Page } from '@playwright/test';
|
|
3
|
+
import { type JsonLayout } from './json-output.js';
|
|
4
|
+
import { type InstalledManager } from './browser-extensions.js';
|
|
5
|
+
import { type ManagerName } from './managers.js';
|
|
6
|
+
import type { HarnessHost } from './host.js';
|
|
7
|
+
import type { PageAttachment } from './page-watch.js';
|
|
8
|
+
import { type ManagerControl } from './manager-commands.js';
|
|
9
|
+
import { type ParsedArgs } from './command-args.js';
|
|
10
|
+
import { type PreparedScript } from './prepare.js';
|
|
11
|
+
import { type RunLog } from './run-logs.js';
|
|
12
|
+
import { MISTAKE_PREFIX } from './output-style.js';
|
|
13
|
+
import { type SavedPageHeader } from './save-html.js';
|
|
14
|
+
import { type SavedPageFile, type SavedPageStart } from './saved-pages.js';
|
|
15
|
+
import { type ScriptRoots } from './checks.js';
|
|
16
|
+
/**
|
|
17
|
+
* A tab the run controls: its own, or one a controlled tab opened.
|
|
18
|
+
* Named `T<n>` in every list and command.
|
|
19
|
+
*/
|
|
20
|
+
export interface ControlledTab {
|
|
21
|
+
/** T1 is the run's own tab; the tabs it opens count up from 2. */
|
|
22
|
+
n: number;
|
|
23
|
+
page: Page;
|
|
24
|
+
/** The page as the host knows it, to tell this tab's reports apart. */
|
|
25
|
+
link: PageAttachment;
|
|
26
|
+
/** Opened with `newtab --noscript`, or by such a tab: no scripts run in it. */
|
|
27
|
+
noScript?: boolean;
|
|
28
|
+
/** Serving a saved page, from `--from-saved`. */
|
|
29
|
+
saved?: SavedPageFile;
|
|
30
|
+
/** The page's JavaScript dialogs, for `accept` and `dismiss`. */
|
|
31
|
+
dialogs?: DialogTracker;
|
|
32
|
+
/** The number of the tab that opened this one. */
|
|
33
|
+
openedBy?: number;
|
|
34
|
+
/**
|
|
35
|
+
* Its CDP target id, for a debugging session alongside the run to
|
|
36
|
+
* name the same tab. Unset if it closed before it could be read.
|
|
37
|
+
*/
|
|
38
|
+
targetId?: string | null;
|
|
39
|
+
/**
|
|
40
|
+
* Its last load failed, or its scripts never reported (said already),
|
|
41
|
+
* so the waits after it don't wait on it again.
|
|
42
|
+
*/
|
|
43
|
+
stalled?: boolean;
|
|
44
|
+
}
|
|
45
|
+
/** ` [targetId=...]`, the tab's CDP id, for the end of a line. */
|
|
46
|
+
export declare function targetIdSuffix(targetId: string | null | undefined): string;
|
|
47
|
+
/**
|
|
48
|
+
* A SourceMonkey-managed script, which the run didn't push: named by
|
|
49
|
+
* its script number in SourceMonkey (`E12`), the same in every run.
|
|
50
|
+
*/
|
|
51
|
+
export interface OtherScript {
|
|
52
|
+
label: string;
|
|
53
|
+
name: string;
|
|
54
|
+
collection: string;
|
|
55
|
+
/** What the toolbar badge says of it on the tab it was listed for. */
|
|
56
|
+
status: string;
|
|
57
|
+
values(): Promise<Record<string, unknown>>;
|
|
58
|
+
setValues(values: Record<string, unknown>): Promise<void>;
|
|
59
|
+
}
|
|
60
|
+
export interface ConsoleContext {
|
|
61
|
+
host: HarnessHost;
|
|
62
|
+
/** The controlled tabs still open, T1 first. */
|
|
63
|
+
tabs: () => ControlledTab[];
|
|
64
|
+
/** The tab the page commands act on. Starts as T1; `tabs` changes it. */
|
|
65
|
+
tab?: ControlledTab;
|
|
66
|
+
/**
|
|
67
|
+
* Open a new controlled tab, at `url` or blank, for `newtab`.
|
|
68
|
+
* Absent where the caller can't open one.
|
|
69
|
+
*/
|
|
70
|
+
newTab?: (url?: string, options?: {
|
|
71
|
+
noScript?: boolean;
|
|
72
|
+
saved?: SavedPageStart;
|
|
73
|
+
timeoutMs?: number;
|
|
74
|
+
}) => Promise<ControlledTab>;
|
|
75
|
+
/** Switch a tab to running no scripts, or back, for `open --noscript` / `--script`. */
|
|
76
|
+
setTabScripts?: (tab: ControlledTab, noScript: boolean) => Promise<void>;
|
|
77
|
+
/** Load another script from disk, for `load`. */
|
|
78
|
+
loadScript?: (file: string, timeoutMs?: number) => Promise<void>;
|
|
79
|
+
/** Re-read scripts from disk (all, when none are named), for `update`. */
|
|
80
|
+
updateScripts?: (scripts?: PreparedScript[], timeoutMs?: number) => Promise<void>;
|
|
81
|
+
/** The scripts this run pushed, in load order. */
|
|
82
|
+
scripts: PreparedScript[];
|
|
83
|
+
/** SourceMonkey-managed scripts (see `OtherScript`), or another manager's. */
|
|
84
|
+
others?: {
|
|
85
|
+
/** How their list is headed, before ` on T1`: `SourceMonkey-managed scripts`. */
|
|
86
|
+
kind?: string;
|
|
87
|
+
/** Those on the tab's page, as its toolbar badge lists them. */
|
|
88
|
+
onTab(tab: ControlledTab): Promise<OtherScript[]>;
|
|
89
|
+
/** One already listed, by its label (`E2`). */
|
|
90
|
+
byLabel(label: string): OtherScript | undefined;
|
|
91
|
+
/** One installed anywhere, picked from `script list`'s rows, by the extension's id. */
|
|
92
|
+
installed(id: string, label: string, name: string, collection: string): OtherScript;
|
|
93
|
+
/** `set` on one changes the person's own data, so needs `--force`. */
|
|
94
|
+
guarded: boolean;
|
|
95
|
+
};
|
|
96
|
+
/**
|
|
97
|
+
* Under another manager, which reports nothing: whether a script is
|
|
98
|
+
* active on a tab is predicted from its rules.
|
|
99
|
+
*/
|
|
100
|
+
predicted?: boolean;
|
|
101
|
+
/**
|
|
102
|
+
* Under another manager: which of the run's scripts are off there, by
|
|
103
|
+
* the manager's id, all of them while its switch is off. Read again
|
|
104
|
+
* (`refresh`) before each command that shows what a tab runs.
|
|
105
|
+
*/
|
|
106
|
+
predictedOff?: {
|
|
107
|
+
refresh(): Promise<void>;
|
|
108
|
+
has(extensionId: string | undefined): boolean;
|
|
109
|
+
};
|
|
110
|
+
/**
|
|
111
|
+
* Each tab's iframes and the scripts in each, read again
|
|
112
|
+
* (`loadFrames`) before each command that shows them. Without it,
|
|
113
|
+
* scripts show for the top frame only.
|
|
114
|
+
*/
|
|
115
|
+
frames?: Map<ControlledTab, FrameView[]>;
|
|
116
|
+
/** One of `others` picked for `get` and `set` (`scripts E1`), in place of `current`. */
|
|
117
|
+
currentOther?: OtherScript;
|
|
118
|
+
/**
|
|
119
|
+
* The script `get` and `set` act on. Starts as the first; `scripts`
|
|
120
|
+
* changes it.
|
|
121
|
+
*/
|
|
122
|
+
current?: PreparedScript;
|
|
123
|
+
/**
|
|
124
|
+
* Typed at a terminal prompt, rather than piped. A person can see
|
|
125
|
+
* what is registered, so `menu` never waits for a late one.
|
|
126
|
+
*/
|
|
127
|
+
interactive?: boolean;
|
|
128
|
+
out: (line: string) => void;
|
|
129
|
+
/**
|
|
130
|
+
* The running command prints its result as JSON (`--json`), set
|
|
131
|
+
* while it runs. Only for a command with a JSON form.
|
|
132
|
+
*/
|
|
133
|
+
json?: boolean;
|
|
134
|
+
/** The running command's own `--json=single` or `=multi`. */
|
|
135
|
+
jsonLayout?: JsonLayout;
|
|
136
|
+
/** Ends the run, as Ctrl-C does. */
|
|
137
|
+
stop: () => void;
|
|
138
|
+
/** The id other shells know the run by (`--run`), for `status`. */
|
|
139
|
+
runId?: string;
|
|
140
|
+
/** The run's log file (see run-log.ts), for `status`. */
|
|
141
|
+
log?: string;
|
|
142
|
+
/** Where a temp browser saves downloads, for `status`. */
|
|
143
|
+
downloadsDir?: string;
|
|
144
|
+
/** The run's browser, for `status`: `connected to browser 127.0.0.1:9233`. */
|
|
145
|
+
browser?: string;
|
|
146
|
+
/** The same, for `status --json`. */
|
|
147
|
+
browserInfo?: {
|
|
148
|
+
address: string;
|
|
149
|
+
owned: boolean;
|
|
150
|
+
headless: boolean;
|
|
151
|
+
};
|
|
152
|
+
/** The run's test collection's id, once a script was pushed, for `status --json`. */
|
|
153
|
+
testCollection?: () => string | undefined;
|
|
154
|
+
/**
|
|
155
|
+
* Where the scripts run, for `status`: `SourceMonkey extension, test
|
|
156
|
+
* collection D2-a3f9`. Read as `status` runs.
|
|
157
|
+
*/
|
|
158
|
+
backend?: () => string;
|
|
159
|
+
/** The userscript manager the run works with (`--manager`); SourceMonkey when unset. */
|
|
160
|
+
managerName?: ManagerName;
|
|
161
|
+
/** ` --existing-browser [--browser <address>]` for advice to run sm-dev against the run's browser (see `browserArg`). */
|
|
162
|
+
browserArg?: string;
|
|
163
|
+
/** The managers in the browser now, for `status`; null when unknown. */
|
|
164
|
+
managers?: () => Promise<InstalledManager[] | null>;
|
|
165
|
+
/** The run's log lines, for `logs` and `wait log` (see run-logs.ts). */
|
|
166
|
+
logs?: RunLog;
|
|
167
|
+
/**
|
|
168
|
+
* The log's position when the previous command (that wasn't only a
|
|
169
|
+
* look, like `status`) began, for `wait log`: a line the command set
|
|
170
|
+
* off, logged while it waited for the page to settle, still counts.
|
|
171
|
+
* Unset before the first.
|
|
172
|
+
*/
|
|
173
|
+
previousStart?: number;
|
|
174
|
+
/** SourceMonkey's collections and installed scripts, for `collection list` and `script list`. */
|
|
175
|
+
manager?: ManagerControl;
|
|
176
|
+
/** The extension's id for one of `scripts`, once pushed, for `script list`. */
|
|
177
|
+
extensionIdOf?: (script: PreparedScript) => string | undefined;
|
|
178
|
+
/** Where `validate` and `match` find local copies of `@require`s: the run's own. */
|
|
179
|
+
roots?: ScriptRoots;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* What's wrong with a run command's words, before it runs, or null (for
|
|
183
|
+
* a name that is no run command too: that is said elsewhere). `input`:
|
|
184
|
+
* the command as typed, its name first (a block's lines after a line
|
|
185
|
+
* break), or as a sender's words. `flag`: the flag it's about, so one
|
|
186
|
+
* that belongs before the command can be said to.
|
|
187
|
+
*/
|
|
188
|
+
export declare function runCommandMistake(input: {
|
|
189
|
+
line: string;
|
|
190
|
+
} | {
|
|
191
|
+
words: string[];
|
|
192
|
+
}): {
|
|
193
|
+
error: string;
|
|
194
|
+
flag?: string;
|
|
195
|
+
} | null;
|
|
196
|
+
export declare function withoutQuery(url: string): string;
|
|
197
|
+
export declare function waitingReminders(ctx: ConsoleContext, before: WaitingState, said: readonly string[]): string[];
|
|
198
|
+
export interface WaitingState {
|
|
199
|
+
prompts: Set<string>;
|
|
200
|
+
dialogs: Map<ControlledTab, unknown>;
|
|
201
|
+
}
|
|
202
|
+
export declare function waitingState(ctx: ConsoleContext): WaitingState;
|
|
203
|
+
/**
|
|
204
|
+
* The run command, and its subcommand, whose help `--help` asks for
|
|
205
|
+
* (`click --help`, `script save --help`), or null when it isn't asked;
|
|
206
|
+
* an error for words that name no subcommand.
|
|
207
|
+
*/
|
|
208
|
+
export declare function runCommandHelp(input: {
|
|
209
|
+
line: string;
|
|
210
|
+
} | {
|
|
211
|
+
words: string[];
|
|
212
|
+
}): {
|
|
213
|
+
command: string;
|
|
214
|
+
subcommand?: string;
|
|
215
|
+
} | {
|
|
216
|
+
error: string;
|
|
217
|
+
} | null;
|
|
218
|
+
/**
|
|
219
|
+
* Which of the commands for what's installed a command is (`collection
|
|
220
|
+
* C3 show`, `script list`), in any spelling, with its verb, or null for
|
|
221
|
+
* another command. These need SourceMonkey but no run.
|
|
222
|
+
*/
|
|
223
|
+
export declare function managerCommandOf(words: string[]): {
|
|
224
|
+
command: 'collection' | 'script';
|
|
225
|
+
verb: string | undefined;
|
|
226
|
+
} | null;
|
|
227
|
+
/**
|
|
228
|
+
* A command line's words, as the prompt splits them (quotes kept
|
|
229
|
+
* together), for telling which command it is and where it runs.
|
|
230
|
+
*/
|
|
231
|
+
export declare function commandWords(line: string): string[];
|
|
232
|
+
/**
|
|
233
|
+
* Whether a command line only inspects, so its output goes back to the
|
|
234
|
+
* client that sent it alone, rather than into the run's stream too. `tabs`, `scripts` and `menu` inspect when they list, and
|
|
235
|
+
* change things when they pick or fire.
|
|
236
|
+
*/
|
|
237
|
+
export declare function onlyInspects(line: string): boolean;
|
|
238
|
+
/**
|
|
239
|
+
* Whether a command line has a JSON form (`--json`): one of
|
|
240
|
+
* `JSON_COMMANDS`, in a form that only looks (`tabs`, not `tabs T2`).
|
|
241
|
+
*/
|
|
242
|
+
export declare function hasJsonForm(line: string): boolean;
|
|
243
|
+
/**
|
|
244
|
+
* Where a running command's output goes instead of the run's stream,
|
|
245
|
+
* while it runs: an inspecting command answers the client that sent it
|
|
246
|
+
* alone. Output the page or the scripts produce meanwhile
|
|
247
|
+
* isn't the command's, and still goes to the stream. `live` goes false
|
|
248
|
+
* when the command ends, so anything it started that prints later goes
|
|
249
|
+
* to the stream rather than a closed connection.
|
|
250
|
+
*/
|
|
251
|
+
export declare const commandOutput: AsyncLocalStorage<{
|
|
252
|
+
line: (line: string) => void;
|
|
253
|
+
live: boolean;
|
|
254
|
+
}>;
|
|
255
|
+
/** How a line saying a command was invalid starts. */
|
|
256
|
+
export { MISTAKE_PREFIX };
|
|
257
|
+
/**
|
|
258
|
+
* Set while a command runs, in its own async work: what it prints is
|
|
259
|
+
* its reply, not something the page or a script printed on its own,
|
|
260
|
+
* which `wait log` looks for. Lines from the page and scripts arrive
|
|
261
|
+
* through events outside it. `inspects`: the command only looks, so
|
|
262
|
+
* its reply is no part of the run's log either.
|
|
263
|
+
*/
|
|
264
|
+
export declare const inCommand: AsyncLocalStorage<{
|
|
265
|
+
inspects: boolean;
|
|
266
|
+
}>;
|
|
267
|
+
/**
|
|
268
|
+
* Run one typed line. Returns once its effect has been applied, so an
|
|
269
|
+
* agent driving this over a pipe can send the next line knowing the
|
|
270
|
+
* previous one is done. For a line a client sent: `cwd` is
|
|
271
|
+
* where the files it names are, and `words` are the sender's own words
|
|
272
|
+
* (the line is them joined by spaces), which page commands take as
|
|
273
|
+
* they are rather than splitting the line.
|
|
274
|
+
*/
|
|
275
|
+
export declare function runConsoleCommand(line: string, ctx: ConsoleContext, { cwd, words }?: {
|
|
276
|
+
cwd?: string;
|
|
277
|
+
words?: string[];
|
|
278
|
+
}): Promise<number | boolean | void>;
|
|
279
|
+
/** `runLogLabel` marked up, for output: the log's path as one. */
|
|
280
|
+
export declare function runLogLabelUi(file: string, id: string | undefined): string;
|
|
281
|
+
/**
|
|
282
|
+
* The `collection` and `script` commands for what's installed (`collection`
|
|
283
|
+
* alone lists). `parsed`: its words as command-args.ts reads them, the
|
|
284
|
+
* verb as `form` (`list`), what it acts on as `subject` (`C3` in
|
|
285
|
+
* `collection C3 show`). `cwd`: where a path `script install` is given
|
|
286
|
+
* is from.
|
|
287
|
+
*/
|
|
288
|
+
export declare function managerCommand(ctx: Pick<ConsoleContext, 'manager' | 'out' | 'json'> & Partial<ConsoleContext>, command: string, parsed: Pick<ParsedArgs, 'form' | 'subject' | 'words' | 'flags'>, cwd?: string): Promise<boolean | void>;
|
|
289
|
+
/**
|
|
290
|
+
* Warns when a saved page was saved with userscripts running: their
|
|
291
|
+
* changes are in it, so running them again may apply them twice.
|
|
292
|
+
* Nothing to say for a tab that runs none.
|
|
293
|
+
*/
|
|
294
|
+
export declare function warnSavedUserscripts(out: (line: string) => void, given: string, header: SavedPageHeader, noScript: boolean): void;
|
|
295
|
+
/**
|
|
296
|
+
* Makes `tab` serve `saved` from now on: its URL gets the file, read
|
|
297
|
+
* fresh on each load. It lasts until another saved page replaces it;
|
|
298
|
+
* loading another URL in the tab goes to the live site meanwhile.
|
|
299
|
+
*/
|
|
300
|
+
/**
|
|
301
|
+
* Starts serving a saved page in `tab` (`serveSaved`), first warning of
|
|
302
|
+
* the userscripts whose changes its file has, unless `runsNone`: the
|
|
303
|
+
* tab runs no scripts, or none are loaded.
|
|
304
|
+
*/
|
|
305
|
+
export declare function serveSavedPage(tab: ControlledTab, saved: SavedPageStart, out: (line: string) => void, runsNone: boolean): Promise<void>;
|
|
306
|
+
export declare function serveSaved(tab: ControlledTab, saved: SavedPageFile, out: (line: string) => void): Promise<void>;
|
|
307
|
+
/** One of a tab's iframes, with the run's scripts running in it. */
|
|
308
|
+
export interface FrameView {
|
|
309
|
+
/** Its id's number: `F3` is 3. */
|
|
310
|
+
n: number;
|
|
311
|
+
/** Its parent's number, or null for a frame in the top frame. */
|
|
312
|
+
parent: number | null;
|
|
313
|
+
/** 1 for a frame in the top frame. */
|
|
314
|
+
depth: number;
|
|
315
|
+
url: string;
|
|
316
|
+
scripts: PreparedScript[];
|
|
317
|
+
/** The extension's ids for its live documents, where it says. */
|
|
318
|
+
documents: string[];
|
|
319
|
+
/** Read with `loadFrames`' details: its <iframe> isn't visible (no size, hidden). */
|
|
320
|
+
hidden?: true;
|
|
321
|
+
/** Read with `loadFrames`' details: its CDP frame id, in its target. */
|
|
322
|
+
frameId?: string;
|
|
323
|
+
/** Read with `loadFrames`' details: its CDP target, when it runs in a process of its own. */
|
|
324
|
+
targetId?: string;
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* The tabs of `tabs` that can be reloaded now. One waiting on a dialog
|
|
328
|
+
* would hang its reload, so it is left for the person, and named.
|
|
329
|
+
*/
|
|
330
|
+
export declare function reloadable(tabs: ControlledTab[], out: (line: string) => void): ControlledTab[];
|
|
331
|
+
/**
|
|
332
|
+
* Reload one tab, saying so if it fails. False when it failed, or its
|
|
333
|
+
* scripts never reported (said already), so nothing waits on it more.
|
|
334
|
+
*/
|
|
335
|
+
export declare function reloadTab(tab: ControlledTab, host: HarnessHost, out: (line: string) => void, timeoutMs?: number): Promise<boolean>;
|
|
336
|
+
/** Navigate one tab to `url`, as `reloadTab` reloads it. */
|
|
337
|
+
export declare function gotoInTab(tab: ControlledTab, host: HarnessHost, url: string, out: (line: string) => void, timeoutMs?: number): Promise<boolean>;
|
|
338
|
+
/** A script `--all` or `newtab all` opened no tab for, and why. */
|
|
339
|
+
export declare function skippedScriptLine(n: number, script: PreparedScript, reason: string): string;
|
|
340
|
+
/**
|
|
341
|
+
* Keeps Playwright from dismissing dialogs in `context`'s pages.
|
|
342
|
+
*
|
|
343
|
+
* - Playwright dismisses a dialog nobody listens for, on the page or its
|
|
344
|
+
* context, in every tab it's attached to: on a connected browser, the
|
|
345
|
+
* person's own tabs too.
|
|
346
|
+
* - And when the dialog is gone before its dismiss lands, the error is
|
|
347
|
+
* unhandled, and ends the process.
|
|
348
|
+
* - A listener that does nothing leaves each dialog to whoever does
|
|
349
|
+
* answer it: the person, or the run's DialogTracker in its own tabs.
|
|
350
|
+
* Also for a Playwright client that isn't the run's own.
|
|
351
|
+
*/
|
|
352
|
+
export declare function leaveDialogsOpen(context: BrowserContext): void;
|
|
353
|
+
/**
|
|
354
|
+
* The page's `alert`, `confirm`, `prompt` and `beforeunload` dialogs.
|
|
355
|
+
* Playwright dismisses a dialog nobody listens for, which would answer
|
|
356
|
+
* a script's `prompt` with Cancel before anyone saw it. So each one is
|
|
357
|
+
* reported and left open, for the person at the browser or a typed
|
|
358
|
+
* `accept` / `dismiss`. Only when neither can answer (a headless
|
|
359
|
+
* browser, no command input) is it dismissed, since it would otherwise
|
|
360
|
+
* hang the page for good.
|
|
361
|
+
*/
|
|
362
|
+
export declare class DialogTracker {
|
|
363
|
+
private readonly say;
|
|
364
|
+
private readonly visible;
|
|
365
|
+
private readonly tabRef;
|
|
366
|
+
/** The dialog open now, if any. */
|
|
367
|
+
current: Dialog | null;
|
|
368
|
+
/**
|
|
369
|
+
* Whether typed commands are, or are about to be, read, so `accept`
|
|
370
|
+
* can answer. Set before the page loads when they will be, or a
|
|
371
|
+
* prompt the script opens on load would be dismissed first.
|
|
372
|
+
*/
|
|
373
|
+
commandsListening: boolean;
|
|
374
|
+
private waiters;
|
|
375
|
+
private openedCount;
|
|
376
|
+
private closedCount;
|
|
377
|
+
private currentOrdinal;
|
|
378
|
+
private constructor();
|
|
379
|
+
/**
|
|
380
|
+
* `say`: where a dialog opening is told (a run logs it as an event).
|
|
381
|
+
* `visible`: whether the browser is on screen, for a person to
|
|
382
|
+
* answer. `commandsComing`: whether typed commands will be read.
|
|
383
|
+
* `tabRef`: the tab's name for `accept` and `dismiss` to take, when
|
|
384
|
+
* the run has several tabs and a bare one could reach another.
|
|
385
|
+
*/
|
|
386
|
+
static attach(page: Page, say: (text: string) => void, { visible, commandsComing, tabRef }: {
|
|
387
|
+
visible: boolean;
|
|
388
|
+
commandsComing?: boolean;
|
|
389
|
+
tabRef?: () => string | undefined;
|
|
390
|
+
}): Promise<DialogTracker>;
|
|
391
|
+
/**
|
|
392
|
+
* `work`, or true as soon as a dialog opens while it runs. A menu
|
|
393
|
+
* command that opens a dialog blocks the page, and the push that
|
|
394
|
+
* fired it with it, until the dialog is answered.
|
|
395
|
+
*/
|
|
396
|
+
untilDialog(work: Promise<boolean>): Promise<boolean>;
|
|
397
|
+
/** The open dialog, now claimed by whoever answers it. */
|
|
398
|
+
take(): Dialog | null;
|
|
399
|
+
putBack(dialog: Dialog): void;
|
|
400
|
+
private closed;
|
|
401
|
+
private opened;
|
|
402
|
+
}
|
|
403
|
+
/**
|
|
404
|
+
* For the global --json: sends other log messages to stderr from now
|
|
405
|
+
* on, and lays results out on one line or multi-line (`layout`),
|
|
406
|
+
* rather than by whether stdout is a terminal.
|
|
407
|
+
*/
|
|
408
|
+
export declare function setJsonOutput(layout?: JsonLayout): void;
|
|
409
|
+
/**
|
|
410
|
+
* Print one line of run output. With a prompt showing, the prompt and
|
|
411
|
+
* whatever is half-typed are erased, the line printed above them, and
|
|
412
|
+
* both redrawn with the cursor where it was, so streaming output never
|
|
413
|
+
* lands in the middle of a command being edited.
|
|
414
|
+
*/
|
|
415
|
+
export declare function writeOutputLine(line: string): void;
|
|
416
|
+
/**
|
|
417
|
+
* Runs command lines one at a time, from whichever source: typed ones
|
|
418
|
+
* and ones sent from other shells take turns, so two never interleave.
|
|
419
|
+
* `hooks` bracket the line's own turn, not its wait for one, so output
|
|
420
|
+
* captured between them is that command's.
|
|
421
|
+
*/
|
|
422
|
+
/**
|
|
423
|
+
* Runs a command line, resolving to false when the command failed in
|
|
424
|
+
* a way that should stop a line of several (a `wait` that timed out).
|
|
425
|
+
*/
|
|
426
|
+
export type CommandRunner = (line: string, hooks?: {
|
|
427
|
+
start?: () => void;
|
|
428
|
+
end?: () => void;
|
|
429
|
+
cwd?: string;
|
|
430
|
+
words?: string[];
|
|
431
|
+
answer?: (line: string) => void;
|
|
432
|
+
interactive?: boolean;
|
|
433
|
+
json?: boolean;
|
|
434
|
+
}) => Promise<number>;
|
|
435
|
+
export declare function commandRunner(ctx: ConsoleContext): CommandRunner;
|
|
436
|
+
/**
|
|
437
|
+
* Whether dialogs wait for a typed (or sent) `accept`, rather than
|
|
438
|
+
* being dismissed in a headless run. On while commands are read.
|
|
439
|
+
*/
|
|
440
|
+
export declare function setCommandsListening(tabs: ControlledTab[], listening: boolean): void;
|
|
441
|
+
/** What the prompt needs from whoever runs its commands. */
|
|
442
|
+
export interface PromptIO {
|
|
443
|
+
/** Prints a line, drawn around the prompt (see writeOutputLine). */
|
|
444
|
+
out: (line: string) => void;
|
|
445
|
+
/**
|
|
446
|
+
* Leaves: Ctrl-D, or Ctrl-C on an empty line. `now`: without waiting
|
|
447
|
+
* for the command running, as a second Ctrl-C asks.
|
|
448
|
+
*/
|
|
449
|
+
exit: (now?: boolean) => void;
|
|
450
|
+
}
|
|
451
|
+
/**
|
|
452
|
+
* The `> ` prompt of `sm-dev --interactive`, reading the terminal: line
|
|
453
|
+
* editing and history (readline's own keys: arrows, Ctrl-A/E, Ctrl-U
|
|
454
|
+
* and so on), Tab completion of command names, and `... ` inside an
|
|
455
|
+
* `{{` block (see command-lines.ts), edited as one buffer at a terminal
|
|
456
|
+
* (see prompt-editor.ts). A block is one history entry, and history is
|
|
457
|
+
* kept across sessions (see prompt-history.ts). Ctrl-C clears the
|
|
458
|
+
* typed command, and on an empty line it or Ctrl-D leaves. Each command goes to `runLine` once typed, in order.
|
|
459
|
+
* Returns a function that closes the prompt.
|
|
460
|
+
*/
|
|
461
|
+
export declare function readPromptCommands(io: PromptIO, runLine: (line: string, hooks?: {
|
|
462
|
+
start?: () => void;
|
|
463
|
+
}) => Promise<unknown>): () => void;
|