# fakewiki API reference This file lists `FakeWiki` instance methods and Vue composables exported from the `fakewiki` package. Regenerate with `npm run generate` from the repository root or from `packages/fakewiki`. - FakeWiki playground: https://todepond.github.io/FakeMediaWiki/Fullscreen/ApiPlayground - Repository: https://github.com/todepond/FakeMediaWiki - Package: https://www.npmjs.com/package/fakewiki ## Pages and content ### `getAnnouncements` Get current announcements **Example** ```ts const announcements = await wiki.getAnnouncements() ``` ### `getFeaturedPage` Get featured page for a specific date **Parameters** - `date` - Date object or YYYY/MM/DD string (leave blank for today's featured page) **Example** ```ts const featured = await wiki.getFeaturedPage() ``` ### `getOnThisDay` Get "On This Day" content for a given type **Parameters** - `type` - Type: 'events', 'births', 'deaths', 'holidays', 'selected' - `date` - Date object or MM/DD string **Example** ```ts const onThisDay = await wiki.getOnThisDay() ``` ### `getPage` Get full page metadata and latest revision **Parameters** - `pageName` - Page title **Example** ```ts const page = await wiki.getPage("Wet Leg") ``` ### `getPageCategories` Get page categories **Parameters** - `pageName` - Page title **Example** ```ts const categories = await wiki.getPageCategories("Wet Leg") ``` ### `getPageHero` Get page hero image: thumbnail if present, otherwise the first media image. **Parameters** - `pageName` - Page title **Example** ```ts const hero = await wiki.getPageHero("Wet Leg") ``` ### `getPageHistory` Get page revision history Uses caching to avoid fetching the same data twice. Uses older_than/newer_than cursors for pagination and filtering. **Parameters** - `pageName` - Page title - `options` - Options - `options.older_than` - Revision ID or timestamp - for explicit pagination - `options.newer_than` - Revision ID or timestamp - for explicit pagination - `options.limit` - Maximum results to return (default and max: PAGE_HISTORY_REVISIONS_PER_REQUEST) **Example** ```ts const history = await wiki.getPageHistory("Wet Leg") ``` ### `getPageHtml` Get page content as HTML **Parameters** - `pageName` - Page title **Example** ```ts const html = await wiki.getPageHtml("Wet Leg") ``` ### `getPageMedia` Get page media (images, audio, etc.) **Parameters** - `pageName` - Page title **Example** ```ts const media = await wiki.getPageMedia("Wet Leg") ``` ### `getPageMobileHtml` Get page mobile-optimized HTML **Parameters** - `pageName` - Page title **Example** ```ts const html = await wiki.getPageMobileHtml("Wet Leg") ``` ### `getPagesBacklinks` Get pages that link to the given page(s) (backlinks / "What links here") Uses MediaWiki Action API prop=linkshere. **Parameters** - `pageNames` - Array of page titles to find backlinks for - `options` - Options - `options.namespace` - Filter by namespace (e.g., 0 for main namespace) - `options.limit` - Max backlinks per page (default 500) **Example** ```ts const backlinks = await wiki.getPagesBacklinks(["Wet Leg", "Confidence Man (band)"]) ``` ### `getPagesLinks` Get outgoing wikilinks for multiple pages (intra-language links) Automatically handles pagination to fetch all links. **Parameters** - `pageNames` - Array of page titles - `options` - Options - `options.namespace` - Filter by namespace (e.g., 0 for main namespace) **Example** ```ts const links = await wiki.getPagesLinks(["Wet Leg", "Confidence Man (band)"]) ``` ### `getPagesLinksAndBacklinks` Get outgoing links and backlinks for the given pages in one call. Convenience that runs getPagesLinks and getPagesBacklinks in parallel. **Parameters** - `pageNames` - Array of page titles - `options` - Options (namespace for both; backlinkLimit for backlinks only) **Example** ```ts const links = await wiki.getPagesLinksAndBacklinks(["Wet Leg", "Confidence Man (band)"]) ``` ### `getPageSource` Get page content as wikitext source **Parameters** - `pageName` - Page title **Example** ```ts const source = await wiki.getPageSource("Wet Leg") ``` ### `getPageSummary` Get a page summary (extract, thumbnail, etc.) **Parameters** - `pageName` - Page title **Example** ```ts const summary = await wiki.getPageSummary("Wet Leg") ``` ### `getPageThumbnail` Get thumbnail image for a page. Uses the lead image (page summary) when available; otherwise falls back to the first image on the page (e.g. infobox image). **Parameters** - `pageName` - Page title **Example** ```ts const thumbnail = await wiki.getPageThumbnail("Wet Leg") ``` ### `getPageThumbnails` Get thumbnail URLs for multiple pages (lead image from each page). Uses the Action API pageimages in batches of 50. **Parameters** - `pageNames` - Page titles - `baseUrl` - Wiki base URL (e.g. https://en.wikipedia.org/). Defaults to this.base **Example** ```ts const thumbnails = await wiki.getPageThumbnails(["Wet Leg", "Confidence Man (band)"]) ``` ### `getRandomPage` Get a random page **Parameters** - `format` - Format: 'summary', 'html', or 'title' (default: 'summary') **Example** ```ts const random = await wiki.getRandomPage() ``` ### `getShortDescription` Get the short description for a page (from template or Wikidata). Uses the page summary API; results are cached to avoid repeated requests. **Parameters** - `pageName` - Page title **Example** ```ts const description = await wiki.getShortDescription("Wet Leg") ``` ### `transformWikitextToHtml` Transform wikitext to HTML **Parameters** - `wikitext` - Wikitext content - `pageTitle` - Page title for context (optional) **Example** ```ts const html = await wiki.transformWikitextToHtml("Hello '''world'''", "Main_Page") ``` ## Revisions and diffs ### `getCombinedFeed` Get a combined feed of revisions from multiple users and/or pages. Returns revisions that match ANY of the provided users OR pages, deduplicated and sorted by timestamp. Caching is handled internally by getUserHistory and getPageHistory. **Parameters** - `options` - Configuration object - `options.userNames` - Array of usernames to include - `options.pageNames` - Array of page titles to include - `options.limit` - Maximum total number of revisions to return (default and max: PAGE_HISTORY_REVISIONS_PER_REQUEST) - `options.perSourceLimit` - Maximum revisions to request per page/user history source before merge - `options.after` - Map of source (page name or user name) → revision ID to fetch revisions older than (per source). Ensures every page/user keeps paginating. **Example** ```ts const revisions = await wiki.getCombinedFeed({ userNames: ["Todepond", "Samwalton9"], pageNames: ["Wet Leg", "Confidence Man (band)"], limit: 20, }) ``` ### `getDeltaClass` Get CSS class name for delta (change size) indicator **Parameters** - `delta` - Change size (positive, negative, or zero) - `withSign` **Example** ```ts const className = wiki.getDeltaClass(42) ``` ### `getDiffLineClass` Map compare API diff line type to a CSS class name. **Parameters** - `type` - Diff line type (0=context, 1=add, 2=remove, 3/4/5=change) **Example** ```ts const className = wiki.getDiffLineClass(0) ``` ### `getDiffLineSegments` Split a diff line into character-level highlight segments. Converts API byte-based highlight ranges into string segments that can be rendered with add/remove styles. **Parameters** - `line` - Diff line from compare API **Example** ```ts import type { FWDiffLine } from "fakewiki/types" const line = { type: 1, text: "Example text", highlightRanges: [{ start: 0, length: 7, type: 0 }], } as FWDiffLine const segments = wiki.getDiffLineSegments(line) ``` ### `getDiffSource` Get source diff for a revision by comparing it with its parent (previous) revision. When there is no parent (e.g. first revision), returns a synthetic diff where every line is shown as added. **Parameters** - `pageName` - Page title - `revId` - Revision ID to diff **Example** ```ts const compare = await wiki.getDiffSource("Corsica Studios", 1337619110) ``` ### `getParentRevisionId` Get the parent (previous) revision ID for a revision on a page. **Parameters** - `pageName` - Page title - `revId` - Revision ID (we want the revision immediately older than this) **Example** ```ts const parentId = await wiki.getParentRevisionId("Corsica Studios", 1337619110) ``` ### `getRecentChanges` Get global recent changes from the wiki (any pages) via Action API list=recentchanges. Optionally restrict to changes that "need review" (high revert risk) with rcshow=oresreview. Uses rctoponly so only the latest revision of each page is returned. **Parameters** - `options` - Configuration object - `options.limit` - Maximum number of changes to return (default 50, max 500) - `options.rccontinue` - Continuation token from a previous response for pagination - `options.onlyNeedsReview` - If true, pass rcshow=oresreview so the server returns only high revert risk / "needs review" edits (default false) - `options.rcstart` - Timestamp to start enumerating from (with rcdir=older, must be later than rcend) - `options.rcend` - Timestamp to end enumerating (with rcdir=older, must be earlier than rcstart) **Example** ```ts const changes = await wiki.getRecentChanges() ``` ### `getRevisionDiff` **Parameters** - `pageName` - `revId` **Example** ```ts const compare = await wiki.getRevisionDiff("Corsica Studios", 1337619110) ``` ### `getRevisionHtml` Get HTML for a specific revision. Uses the MediaWiki REST API endpoint: GET revision/{id}/html. Falls back to the Wikimedia REST API page/html/{title}/{revision} if needed. Uses caching to avoid re-fetching the same revision. **Parameters** - `pageName` - Page title (used for Wikimedia fallback and for API compatibility) - `revId` - Revision ID **Example** ```ts const html = await wiki.getRevisionHtml("Wet Leg", 1337619110) ``` ### `getRevisionSource` Get wikitext source for a revision by ID. **Parameters** - `revId` - Revision ID **Example** ```ts const source = await wiki.getRevisionSource(1337619110) ``` ### `getRevisionTags` Fetch edit tags for given revision IDs via Action API. Use for revisions from sources that don't include tags (e.g. page history, related changes). **Parameters** - `revIds` - Revision IDs to fetch tags for **Example** ```ts const tags = await wiki.getRevisionTags([1337619110]) ``` ### `groupRevisionsByDate` Group revisions by calendar date for watchlist-style rendering. **Parameters** - `revisions` - Revisions to group (typically already newest-first) **Example** ```ts import type { FWRevision } from "fakewiki/types" const revs: FWRevision[] = [ { id: 1337619110, timestamp: "2026-02-26T10:30:00Z", user: { name: "Samwalton9" }, delta: 42, comment: "Example summary", pageName: "Wet Leg", }, { id: 1337619100, timestamp: "2026-02-26T09:15:00Z", user: { name: "Todepond" }, delta: -5, comment: "Another example", pageName: "Confidence Man (band)", }, ] const groups = wiki.groupRevisionsByDate(revs) ``` ## Structured deltas ### `getEditTypesDebug` Get diff debug payload from edit-types API (full diff, tree diff, simple diff for comparison). **Parameters** - `revisionId` - Revision ID - `options` - Optional lang and content_type (default wikitext) **Example** ```ts const debug = await wiki.getEditTypesDebug(1337619110, { lang: "en" }) ``` ### `getEditTypesDetails` Get structured diff details from edit-types API (context, node-edits, text-edits). **Parameters** - `revisionId` - Revision ID - `options` - Optional lang and content_type (default wikitext) **Example** ```ts const details = await wiki.getEditTypesDetails(1337619110, { lang: "en" }) ``` ### `getEditTypesSummary` Get simple diff summary from edit-types API (counts per change type per action). **Parameters** - `revisionId` - Revision ID - `options` - Optional lang and content_type (default wikitext) **Example** ```ts const summary = await wiki.getEditTypesSummary(1337619110, { lang: "en" }) ``` ### `getStructuredDeltaLevelIndex` Public for snippet logic: significance level index (0 = most significant). **Parameters** - `type` **Example** ```ts const levelIndex = wiki.getStructuredDeltaLevelIndex("Sentence") ``` ### `getStructuredDeltasFromRevision` Get computed structured-delta output for a revision ID in one call. Fetches edit-types summary, then computes inline segments with configurable settings. **Parameters** - `revisionId` - Revision ID - `options` - Optional edit-types API options (`lang`, `content_type`) and structured-delta settings **Example** ```ts const deltas = await wiki.getStructuredDeltasFromRevision(1337619110, { lang: "en" }) ``` ### `getStructuredDeltasFromSummary` Compute structured-delta output (segments + candidates) from a normalized summary. Returns null when summary is empty or disabled via `improvedDeltaEnabled`. **Parameters** - `summary` - Pre-normalized summary (type -> action -> count) - `options` - Optional structured-delta settings overrides **Example** ```ts import type { FWEditTypesDiffSummary } from "fakewiki/types" const summary = { Sentence: { change: 1 }, Punctuation: { remove: 1 }, } as FWEditTypesDiffSummary const structuredDeltas = wiki.getStructuredDeltasFromSummary(summary, { improvedDeltaEnabled: true, relativeDetailLevelEnabled: true, smartFilteringEnabled: true, }) ``` ### `normalizeStructuredDeltaSummary` Normalize edit-types response into summary shape used for structured-delta computation. Accepts either root summary object or payload containing a `summary` property. **Parameters** - `raw` **Example** ```ts const summary = wiki.normalizeStructuredDeltaSummary( JSON.parse( '{"summary":{"Sentence":{"change":2,"remove":1},"Punctuation":{"remove":1},"Whitespace":{"change":1},"Comment":{"insert":"2"}},"debug":{"traceId":"demo"}}', ) as Record, ) ``` ## Search ### `getMoreLikePages` Find pages related to one or more seed pages using CirrusSearch `morelike:`. Uses Action API search (`action=query&list=search`) with `srsearch=morelike:...`. **Parameters** - `pageTitles` - Seed page titles used to construct the morelike query - `options` - Optional search options (limit, offset, and namespace) **Example** ```ts const related = await wiki.getMoreLikePages( ["Wet Leg", "Rizzle Kicks", "Jade Thirlwall"], { limit: 10 }, ) ``` ### `searchPages` Full-text search across page titles and content **Parameters** - `query` - Search query - `limit` - Maximum results (default: DEFAULT_SEARCH_LIMIT) **Example** ```ts const pageResults = await wiki.searchPages("Wet Leg", 20) ``` ### `searchTitles` Search for pages by title (autocomplete-style) **Parameters** - `query` - Search query - `limit` - Maximum results (default: DEFAULT_SEARCH_LIMIT) **Example** ```ts const titleResults = await wiki.searchTitles("Wet Leg", 20) ``` ### `searchUsers` Search for users by username (without avatars). **Parameters** - `query` - Search query (username or part of username) - `limit` - Maximum results (default: DEFAULT_SEARCH_LIMIT) **Example** ```ts const users = await wiki.searchUsers("Samwalton9", 20) ``` ### `searchUsersWithAvatars` Search for users by username and fetch their avatars. **Parameters** - `query` - Search query (username or part of username) - `limit` - Maximum results (default: DEFAULT_SEARCH_LIMIT) **Example** ```ts const users = await wiki.searchUsersWithAvatars("Samwalton9", 20) ``` ## Users ### `getDaysOfActivity` Calculate days of activity from registration date **Parameters** - `registrationDate` - ISO timestamp string (e.g., "2007-06-07T16:36:03Z") **Example** ```ts const days = wiki.getDaysOfActivity("2025-02-26T10:30:00Z") ``` ### `getUserAvatar` Infer a user avatar image from their user page **Parameters** - `userName` - Username **Example** ```ts const avatarUrl = await wiki.getUserAvatar("Samwalton9") ``` ### `getUserCategory` Get a user's category (cache-aware main entry point). Reads from category cache when available; otherwise fetches user info and caches the result. **Parameters** - `userName` - Username to classify **Example** ```ts const category = await wiki.getUserCategory("Samwalton9") ``` ### `getUserCategoryDisplay` Return display config (icon + color) for a user's category. Uses cache when available; otherwise fetches user info and caches the category, then returns the display config. **Parameters** - `userName` - Username to look up - `options` - Optional overrides; `userTypeConfig` merges with the default per-category display config **Example** ```ts const display = await wiki.getUserCategoryDisplay("Samwalton9") ``` ### `getUserHistory` Get user contribution history (revisions made by a user) Uses caching to avoid fetching the same data twice. Uses older_than/newer_than cursors for pagination and filtering. **Parameters** - `userName` - Username - `options` - Options - `options.limit` - Limit (default: DEFAULT_USER_CONTRIBS_LIMIT, max: USER_CONTRIBS_MAX_LIMIT) - `options.older_than` - Timestamp - for explicit pagination - `options.newer_than` - Timestamp - for explicit pagination **Example** ```ts const history = await wiki.getUserHistory("Samwalton9") ``` ### `getUserInfo` Get user information including edit count, registration date, and account type Results are cached in memory to avoid repeated API calls for the same user. **Parameters** - `userName` - Username or IP address **Example** ```ts const userInfo = await wiki.getUserInfo("Samwalton9") ``` ### `getUsersHistory` Get contributions for multiple users by calling getUserHistory for each. Uses caching to avoid fetching the same data twice. Uses bounded concurrency (same as getCombinedFeed user branch; Wikimedia: few concurrent Action requests). **Parameters** - `userNames` - Array of usernames - `options` - Options - `options.limit` - Limit per user (default: DEFAULT_USER_CONTRIBS_LIMIT) - `options.older_than` - Timestamp - for explicit pagination - `options.newer_than` - Timestamp - for explicit pagination **Example** ```ts const histories = await wiki.getUsersHistory(["Todepond", "Samwalton9"]) ``` ### `getUsersInfo` Batch-fetch user information via Action API `list=users`, including `groups` and `implicitgroups` (for bot detection). Requests at most 50 names per HTTP call. Duplicate names in the input are ignored after the first occurrence; the returned object has one key per unique trimmed username. Results are merged into the same in-memory cache as {@link getUserInfo}. **Parameters** - `userNames` - Usernames or IP addresses (empty strings skipped) **Example** ```ts const byName = await wiki.getUsersInfo(["Samwalton9", "Todepond"]) ``` ### `isIPAddress` Check if a username is an IP address **Parameters** - `userName` - Username to check **Example** ```ts const isIp = wiki.isIPAddress("Samwalton9") ``` ### `isTemporaryAccount` Check if a username is a temporary account (starts with ~) **Parameters** - `userName` - Username to check **Example** ```ts const isTemp = wiki.isTemporaryAccount("Samwalton9") ``` ## Recommendations ### `getListBuilding` Get a list of articles related to a seed page from the list-building API. Combines results from readers, content (links), and morelike models (serpentine order). **Parameters** - `lang` - Language code (e.g. "en") - `options` - Optional page title (seed), QID, and per-source result count (default 10) **Example** ```ts const list = await wiki.getListBuilding("en", { pageTitle: "Wet Leg" }) ``` ### `getMultiPageListBuilding` Get list-building results for multiple seed pages. Returns the final aggregated list deduped by recommended page and sorted by quality (best first). Optionally pass onLoad to receive progressively complete lists (each call is the full current list, same shape). **Parameters** - `lang` - Language code (e.g. "en") - `pageTitles` - Seed page titles (deduplicated; empty titles skipped) - `options` - Optional k and onLoad callback (always processes one seed page at a time) **Example** ```ts const list = await wiki.getMultiPageListBuilding("en", ["Wet Leg", "Confidence Man (band)"]) ``` ### `getRelatedChanges` Get related changes using the Action API feedrecentchanges (1-2 requests total). Returns recent edits on pages linked from the target (outgoing) and/or pages that link to the target (incoming). **Parameters** - `targetPageName` - Page title to get related changes for - `options` - showOutgoing: changes on pages the target links to (default true); showIncoming: changes on pages that link to the target (default true); limit: max items per direction 1-50 (default 50); days: 1-30 (default 7); from: optional lower-bound timestamp; to: optional upper-bound timestamp (useful for older-page pagination) **Example** ```ts const changes = await wiki.getRelatedChanges("Wet Leg") ``` ### `getTopRelatedChanges` Get related changes from multiple seed pages, merged and filtered to the top N% by score. Counts and score are per-page: "which feeds this page appears in" (any revision). Same feedCountBidirectional/Outgoing/Backlink and score are shown on every revision of that page. Uses scoreMultipliers (default bidirectional×4, outgoing×2, backlink×1). No extra API calls. Order is preserved (by timestamp desc); no extra sorting after filtering. **Parameters** - `pageNames` - `options` **Example** ```ts const topChanges = await wiki.getTopRelatedChanges( ["Wet Leg", "Confidence Man (band)"], { percentage: 1 }, ) ``` ### `getTopRelatedPages` Get the list of page titles that appear in the top N% of related changes by score. Same options as getTopRelatedChanges; returns unique page names in order of first appearance, each with the score from the first change that introduced that page (static per page), plus the changes that were retrieved as part of the scoring process (with sourcePageNames and link-type info). **Parameters** - `pageNames` - `options` **Example** ```ts const topPages = await wiki.getTopRelatedPages( ["Wet Leg", "Confidence Man (band)"], { percentage: 1 }, ) ``` ## Predictions ### `getDamagingPrediction` Get damaging prediction for a single revision from Lift Wing API **Parameters** - `revisionId` - Revision ID - `wiki` - Wiki code (e.g., "enwiki"). If not provided, extracted from base URL **Example** ```ts const damaging = await wiki.getDamagingPrediction(1337619110) ``` ### `getDamagingPredictions` Get damaging predictions for multiple revisions in parallel **Parameters** - `revisionIds` - Array of revision IDs - `wiki` - Wiki code (e.g., "enwiki"). If not provided, extracted from base URL **Example** ```ts const damagingMap = await wiki.getDamagingPredictions([1337619110]) ``` ### `getGoodfaithPrediction` Get goodfaith prediction for a single revision from Lift Wing API **Parameters** - `revisionId` - Revision ID - `wiki` - Wiki code (e.g., "enwiki"). If not provided, extracted from base URL **Example** ```ts const goodfaith = await wiki.getGoodfaithPrediction(1337619110) ``` ### `getGoodFaithPredictions` Get goodfaith predictions for multiple revisions in parallel **Parameters** - `revisionIds` - Array of revision IDs - `wiki` - Wiki code (e.g., "enwiki"). If not provided, extracted from base URL **Example** ```ts const goodfaithMap = await wiki.getGoodFaithPredictions([1337619110]) ``` ### `getReferenceNeedPrediction` Get reference need prediction for a revision from Lift Wing. Predicts the proportion of uncited sentences that need citations (0-1). Use for surfacing "needs reference check" flags when tags are unavailable. **Parameters** - `revId` - Revision ID - `lang` - Language code (e.g. "en"). If not provided, derived from base URL **Example** ```ts const prediction = await wiki.getReferenceNeedPrediction(1337619110, "en") ``` ### `getRevisionPredictions` Get predictions for multiple revisions and one/many Lift Wing models. **Parameters** - `revisionIds` - Array of revision IDs - `models` - Lift Wing model slug(s). Defaults to damaging+goodfaith. - `wiki` - Wiki code (e.g., "enwiki"). If not provided, extracted from base URL **Example** ```ts const predictions = await wiki.getRevisionPredictions( [1337619110], ["damaging", "goodfaith", "revertrisk", "revertrisk-multilingual"], ) ``` ### `getRevisionPredictionsFromOres` Get damaging and goodfaith predictions from ORES (single request per batch). ORES is a scoring aggregator; one call returns both models. Prefer this when Lift Wing is unavailable or for lower latency on batch requests. **Parameters** - `revisionIds` - Array of revision IDs (batched internally; ORES recommends ≤20 per request, ≤4 parallel) - `wiki` - Wiki code (e.g., "enwiki"). If not provided, extracted from base URL **Example** ```ts const predictions = await wiki.getRevisionPredictionsFromOres([1337619110]) ``` ### `getToneCheckForRevision` Get Tone Check prediction for a revision by comparing it with its parent. Fetches the diff, extracts only changed lines (no context), and runs tone check. **Parameters** - `pageName` - Page title - `revId` - Revision ID to check - `options` - Optional lang (default from wiki) and pageTitle (default pageName) **Example** ```ts const prediction = await wiki.getToneCheckForRevision("Corsica Studios", 1337619110, { lang: "en", pageTitle: "Corsica Studios", }) ``` ### `getToneCheckPrediction` Get Tone Check prediction from Lift Wing edit-check model. Detects promotional, derogatory, or subjective language in text. **Parameters** - `originalText` - Text before the edit - `modifiedText` - Text after the edit (the new content to check) - `options` - Optional lang (default from wiki) and pageTitle (default "") **Example** ```ts const prediction = await wiki.getToneCheckPrediction( "The band formed in 2020.", "The band is the most talented and revolutionary group of our generation.", { lang: "en", pageTitle: "Example band" }, ) ``` ## Suggestions ### `getVeAddReferenceSuggestions` Simulate VE AddReference suggestions for editor-open behavior (enwiki). **Parameters** - `pageTitle` **Example** ```ts const suggestions = await wiki.getVeAddReferenceSuggestions("Wet Leg") ``` ### `getVeCitationNeededSuggestions` Simulate VE CitationNeeded suggestions for editor-open behavior (enwiki). **Parameters** - `pageTitle` **Example** ```ts const suggestions = await wiki.getVeCitationNeededSuggestions("United Kingdom") ``` ### `getVeConvertReferenceSuggestions` Simulate VE ConvertReference suggestions for editor-open behavior (enwiki). **Parameters** - `pageTitle` - `options` **Example** ```ts const suggestions = await wiki.getVeConvertReferenceSuggestions("Wet Leg", { strict: "url-only", }) ``` ### `getVeDisambiguationSuggestions` Simulate VE Disambiguation suggestions for editor-open behavior (enwiki). **Parameters** - `pageTitle` **Example** ```ts const suggestions = await wiki.getVeDisambiguationSuggestions("United Kingdom") ``` ### `getVeDoubleBoldSuggestions` Simulate VE DoubleBold suggestions for editor-open behavior (enwiki). **Parameters** - `pageTitle` **Example** ```ts const suggestions = await wiki.getVeDoubleBoldSuggestions("Glossary of mathematics") ``` ### `getVeDuplicateLinkSuggestions` Simulate VE DuplicateLink suggestions for editor-open behavior (enwiki). **Parameters** - `pageTitle` - `options` **Example** ```ts const suggestions = await wiki.getVeDuplicateLinkSuggestions("Little Mix", { scope: "paragraph", }) ``` ### `getVeExternalLinkSuggestions` Simulate VE ExternalLink suggestions for editor-open behavior (enwiki). **Parameters** - `pageTitle` **Example** ```ts const suggestions = await wiki.getVeExternalLinkSuggestions("Live coding") ``` ### `getVeFakeHeadingSuggestions` Simulate VE FakeHeading suggestions for editor-open behavior (enwiki). **Parameters** - `pageTitle` **Example** ```ts const suggestions = await wiki.getVeFakeHeadingSuggestions("Wet Leg") ``` ### `getVeImageCaptionSuggestions` Simulate VE ImageCaption suggestions for editor-open behavior (enwiki). **Parameters** - `pageTitle` **Example** ```ts const suggestions = await wiki.getVeImageCaptionSuggestions("Wet Leg") ``` ### `getVeRedirectSuggestions` Simulate VE Redirect suggestions for editor-open behavior (enwiki). **Parameters** - `pageTitle` **Example** ```ts const suggestions = await wiki.getVeRedirectSuggestions("Wet Leg") ``` ### `getVeRequiredTemplateParamSuggestions` Simulate VE RequiredTemplateParam suggestions for editor-open behavior (enwiki). **Parameters** - `pageTitle` **Example** ```ts const suggestions = await wiki.getVeRequiredTemplateParamSuggestions("Wet Leg") ``` ### `getVeSuggestedLinkSuggestions` Simulate VE SuggestedLink suggestions for editor-open behavior (enwiki). **Parameters** - `pageTitle` - `options` **Example** ```ts const suggestions = await wiki.getVeSuggestedLinkSuggestions("Wet Leg", { threshold: 0.8 }) ``` ### `getVeTextMatchSuggestions` Simulate VE TextMatch suggestions for editor-open behavior (enwiki). **Parameters** - `pageTitle` - Page title to evaluate **Example** ```ts const suggestions = await wiki.getVeTextMatchSuggestions("Ips pini") ``` ### `getVeToneSuggestions` Simulate VE Tone suggestions for editor-open behavior (enwiki). **Parameters** - `pageTitle` - Page title to evaluate - `options` - Optional threshold and max candidates **Example** ```ts const suggestions = await wiki.getVeToneSuggestions("Artificial intelligence", { threshold: 0.8, maxCandidates: 20, }) ``` ### `getVeYearLinkSuggestions` Simulate VE YearLink suggestions for editor-open behavior (enwiki). **Parameters** - `pageTitle` **Example** ```ts const suggestions = await wiki.getVeYearLinkSuggestions("United States") ``` ## Formatting ### `formatDate` Format date as "DD Month YYYY" or "DD.MM.YY". **Parameters** - `timestamp` - `style` **Example** ```ts const formatted = wiki.formatDate("2026-02-26T10:30:00Z", "long") ``` ### `formatDelta` Format a revision size delta using watchlist notation. **Parameters** - `delta` - Byte delta for a revision; null/NaN are treated as zero **Example** ```ts const delta = wiki.formatDelta(42) ``` ### `formatNiceRelativeTimestamp` Format relative time using the standard watchlist display preset. **Parameters** - `timestamp` - ISO timestamp, epoch milliseconds, or Date instance **Example** ```ts const relativeNice = wiki.formatNiceRelativeTimestamp("2026-02-26T10:30:00Z") ``` ### `formatRelativeTimestamp` Format relative time (e.g. "2 minutes ago", "3 days ago"). **Parameters** - `timestamp` - ISO timestamp string, Date, or epoch - `options` - Formatting options for different time periods **Example** ```ts const relative = wiki.formatRelativeTimestamp("2026-02-26T10:30:00Z", { seconds: "words", minutes: "minutes", hours: "hours", days: "days", weeks: "weeks", months: "months", years: "years", }) ``` ### `formatTime` Format time as HH:MM. **Parameters** - `timestamp` **Example** ```ts const time = wiki.formatTime("2026-02-26T10:30:00Z") ``` ### `getEditSummaryHtml` Get the HTML representation of an edit summary **Parameters** - `summary` - Edit summary to get the HTML representation of - `pageName` - Page name **Example** ```ts const html = await wiki.getEditSummaryHtml("Fix typo", "Wet Leg") ``` ### `getTableFromEditSummary` Parse a toolbar-style edit summary into a table of contents **Parameters** - `editSummary` - Edit summary to parse **Example** ```ts const table = wiki.getTableFromEditSummary( "Alter: template type, title. Add: journal, authors 1-1. Removed parameters. Some additions/deletions were parameter name changes. | [[User:UcuchaBot|Use this bot]]. [[User talk:Ucucha|Report bugs]]. | Suggested by Abductive | #UCB_toolbar", ) ``` ### `isToday` Check whether a timestamp falls on today in local time. **Parameters** - `timestamp` **Example** ```ts const today = wiki.isToday("2026-02-26T10:30:00Z") ``` ### `parseToolbarEditSummary` Parse a toolbar edit summary into structured parts **Parameters** - `editSummary` - Edit summary to parse **Example** ```ts const parsed = wiki.parseToolbarEditSummary( "Alter: template type, title. Add: journal, authors 1-1. Removed parameters. Some additions/deletions were parameter name changes. | [[User:UcuchaBot|Use this bot]]. [[User talk:Ucucha|Report bugs]]. | Suggested by Abductive | #UCB_toolbar", ) ``` ### `preprocessEditSummary` Preprocess an edit summary's special wikitext variant to get it ready for transformation. **Parameters** - `summary` - Edit summary to preprocess - `pageName` - Page name **Example** ```ts const preprocessed = wiki.preprocessEditSummary("/* History *" + "/ Fix typo", "Wet Leg") ``` ### `toDateKey` Convert timestamp to YYYY-MM-DD key for grouping. **Parameters** - `timestamp` **Example** ```ts const dateKey = wiki.toDateKey("2026-02-26T10:30:00Z") ``` ## URLs ### `encodeForUrl` Encode a page title for URL usage **Parameters** - `slug` - Page title **Example** ```ts const encoded = wiki.encodeForUrl("") ``` ### `getAssetUrlFromUploadUrl` Get file page URL from an upload URL Extracts the filename from a Wikimedia Commons upload URL and returns a link to the file page **Parameters** - `uploadUrl` - Upload URL - `pageName` - Page name where the file is used **Example** ```ts const url = wiki.getAssetUrlFromUploadUrl( "https://upload.wikimedia.org/wikipedia/commons/thumb/2/28/File.jpg/640px-File.jpg", "Wet Leg", ) ``` ### `getEditUrl` Get URL for editing a page **Parameters** - `pageName` - Page title - `sectionTitle` - Optional section name (e.g. from edit summary like \/ **Example** ```ts const url = wiki.getEditUrl("Wet Leg") ``` ### `getHistoryUrl` Get URL for page history **Parameters** - `pageName` - Page title **Example** ```ts const url = wiki.getHistoryUrl("Wet Leg") ``` ### `getMediawikiBase` Get the base URL for the MediaWiki REST API **Example** ```ts const mediawikiBase = wiki.getMediawikiBase() ``` ### `getPageUrl` Get URL for a page **Parameters** - `pageName` - Page title **Example** ```ts const url = wiki.getPageUrl("Wet Leg") ``` ### `getRevisionUrl` Get URL for viewing a revision diff **Parameters** - `id` - Revision ID - `pageName` - Page title **Example** ```ts const url = wiki.getRevisionUrl(1337619110, "Wet Leg") ``` ### `getRevisionViewUrl` Get URL for viewing a specific revision (page content at that revision). Uses oldid= which shows the revision's content (not the diff). **Parameters** - `id` - Revision ID - `pageName` - Page title **Example** ```ts const url = wiki.getRevisionViewUrl(1337619110, "Wet Leg") ``` ### `getThankUrl` Get URL for thanking a user for a revision **Parameters** - `id` - Revision ID **Example** ```ts const url = wiki.getThankUrl(1337619110) ``` ### `getUserContribsUrl` Get URL for user contributions **Parameters** - `userName` - Username **Example** ```ts const url = wiki.getUserContribsUrl("Samwalton9") ``` ### `getUserTalkUrl` Get URL for user talk page **Parameters** - `userName` - Username **Example** ```ts const url = wiki.getUserTalkUrl("Samwalton9") ``` ### `getUserUrl` Get URL for a user page **Parameters** - `userName` - Username **Example** ```ts const url = wiki.getUserUrl("Samwalton9") ``` ### `getWikimediaBase` Get the base URL for the Wikimedia REST API **Example** ```ts const wikimediaBase = wiki.getWikimediaBase() ``` ## Requests ### `createResult` Create a new Result instance with default values **Example** ```ts const result = wiki.createResult() ``` ### `createResults` Create multiple Result instances **Parameters** - `count` - Number of results to create **Example** ```ts const results = wiki.createResults(3) ``` ### `runWithConcurrency` Run async tasks with a concurrency limit; returns results in input order. **Parameters** - `items` - `concurrency` - `fn` **Example** ```ts const results = await wiki.runWithConcurrency([1, 2, 3], 2, async (item) => item) ``` ## Cache and diagnostics ### `clearListBuildingCache` Clear the list-building cache so the next getListBuilding / getMultiPageListBuilding calls re-fetch from the API. Use when the user explicitly requests fresh recommendations. **Example** ```ts wiki.clearListBuildingCache() ``` ### `clearPageHistoryCache` Clear the page history cache for a page (or all pages if no name given). Use when you need fresh data, e.g. when opening the inline history view. **Parameters** - `pageName` **Example** ```ts wiki.clearPageHistoryCache("Wet Leg") ``` ### `getCachedUserCategory` Read a user's category from cache (for UI keys/test ids). Returns null if not yet loaded. **Parameters** - `userName` - Username to look up **Example** ```ts const category = wiki.getCachedUserCategory("Samwalton9") ``` ### `getCachedUserCategoryDisplay` Return display config (icon + color) for a user's category from cache only. Returns null if the user is not in the cache. Use in templates when the feed has already populated the cache (e.g. via getUserCategory in feed hooks). For on-demand fetch use getUserCategoryDisplay instead. **Parameters** - `userName` - Username to look up - `options` - Optional overrides; `userTypeConfig` merges with the default per-category display config **Example** ```ts const display = wiki.getCachedUserCategoryDisplay("Samwalton9") ``` ### `getParentRevisionIdFromCache` Get the parent (previous) revision ID for a revision on a page from cache only. Does not trigger any network request. **Parameters** - `pageName` - Page title - `revId` - Revision ID to look up in the cached page history **Example** ```ts const parentId = wiki.getParentRevisionIdFromCache("Wet Leg", 1337619110) ``` ### `inspectHistoryCache` Inspect cached history revisions and coverage metadata. Useful for debugging pagination and cache behavior in prototypes. **Parameters** - `options` - Optional filters for specific page/user keys **Example** ```ts const snapshot = wiki.inspectHistoryCache({ pageNames: ["Wet Leg", "Confidence Man (band)"], userNames: ["Todepond", "Samwalton9"], }) ``` ## Persistence ### `getStorageKey` Generate a storage key for a prototype **Parameters** - `prototypeName` - Name of the prototype (e.g., "PageFeed", "CustomPageFeed") - `keyName` - Name of the key (e.g., "searchQuery", "pageName") **Example** ```ts const key = wiki.getStorageKey("PageFeed", "searchQuery") ``` ### `getStorageKeys` Generate multiple storage keys for a prototype **Parameters** - `prototypeName` - Name of the prototype - `keyName` - Base name of the key - `count` - Number of keys to generate **Example** ```ts const keys = wiki.getStorageKeys("PageFeed", "searchQuery", 3) ``` ## Hooks ### `useFeed` *Source:* `hooks/useFeed.ts` Paginated combined feed of revisions from watchlist-style page and user lists via getCombinedFeed. **Parameters (from JSDoc `@param` where present)** - `{ wiki, pageSearchQueries, userSearchQueries, allRevisionsDataRef, }` ```ts useFeed({ wiki, pageSearchQueries, userSearchQueries, allRevisionsDataRef, }: UseFeedArgs) ``` **Example** ```ts import { ref } from "vue" import { useFeed } from "fakewiki" // `wiki` is a FakeWiki instance const pageSearchQueries = ref(["Cat"]) const userSearchQueries = ref([]) const { loadFeed, allRevisionsData } = useFeed({ wiki, pageSearchQueries, userSearchQueries }) await loadFeed() ``` *Import:* `import { useFeed } from "fakewiki"` ### `useListBuildingRecommendations` *Source:* `hooks/useListBuildingRecommendations.ts` Watches the feed and enqueues list-building API recommendations, merging tagged revisions into `allRevisionsData`. **Parameters (from JSDoc `@param` where present)** - `{ wiki, pageSearchQueries, allRevisionsData, options: opts, }` ```ts useListBuildingRecommendations({ wiki, pageSearchQueries, allRevisionsData, options: opts, }: UseListBuildingRecommendationsArgs) ``` **Example** ```ts import { ref } from "vue" import { useListBuildingRecommendations } from "fakewiki" // `wiki` is a FakeWiki instance const pageSearchQueries = ref(["Cat"]) const allRevisionsData = ref([]) useListBuildingRecommendations({ wiki, pageSearchQueries, allRevisionsData }) ``` *Import:* `import { useListBuildingRecommendations } from "fakewiki"` ### `usePredictions` *Source:* `hooks/usePredictions.ts` Load and resolve damaging / goodfaith (and related) per-revision predictions from Lift Wing or ORES, with shared threshold and icon state. **Parameters (from JSDoc `@param` where present)** - `wiki` - `FakeWiki` instance - `options` - Model source, thresholds, optional debug mode ```ts usePredictions(wiki: FakeWiki, options?: UsePredictionsOptions) ``` **Example** ```ts const pred = usePredictions(wiki, { source: "liftwing", models: ["damaging", "goodfaith"] }) const prediction = pred.getPrediction(12345, "damaging") ``` *Import:* `import { usePredictions } from "fakewiki"` ### `useRelatedChanges` *Source:* `hooks/useRelatedChanges.ts` Loads related changes for a single page (getRelatedChanges) or multiple seeds (getTopRelatedChanges) and normalizes comment HTML. **Parameters (from JSDoc `@param` where present)** - `{ wiki, pageName, options: opts, }` ```ts useRelatedChanges({ wiki, pageName, options: opts, }: UseRelatedChangesArgs) ``` **Example** ```ts import { ref } from "vue" import { useRelatedChanges } from "fakewiki" // `wiki` is a FakeWiki instance const pageName = ref("Cat") const { loadFeed } = useRelatedChanges({ wiki, pageName, options: {} }) await loadFeed() ``` *Import:* `import { useRelatedChanges } from "fakewiki"` ### `useRelatedChangesRecommendations` *Source:* `hooks/useRelatedChangesRecommendations.ts` Suggests extra pages from list-building, then loads top-related changes to flag feed rows as recommendations. **Parameters (from JSDoc `@param` where present)** - `{ wiki, pageSearchQueries, allRevisionsData, filterKeepPercent, options: opts, }` ```ts useRelatedChangesRecommendations({ wiki, pageSearchQueries, allRevisionsData, filterKeepPercent, options: opts, }: UseRelatedChangesRecommendationsArgs) ``` **Example** ```ts import { ref } from "vue" import { useRelatedChangesRecommendations } from "fakewiki" // `wiki` is a FakeWiki instance const pageSearchQueries = ref(["Cat"]) const allRevisionsData = ref([]) const filterKeepPercent = ref(15) useRelatedChangesRecommendations({ wiki, pageSearchQueries, allRevisionsData, filterKeepPercent }) ``` *Import:* `import { useRelatedChangesRecommendations } from "fakewiki"` ### `useStructuredDeltas` *Source:* `hooks/useStructuredDeltas.ts` Fetches edit-types summaries and computes structured-delta candidates per revision, with user-tunable settings. **Parameters (from JSDoc `@param` where present)** - `{ wiki, revisionIds, initialSettings, loadConcurrency: loadConcurrencyArg, autoLoad = true, initialEditTypesSummaries, initialEditTypesErrors, }` ```ts useStructuredDeltas({ wiki, revisionIds, initialSettings, loadConcurrency: loadConcurrencyArg, autoLoad = true, initialEditTypesSummaries, initialEditTypesErrors, }: UseStructuredDeltasArgs) ``` **Example** ```ts import { ref } from "vue" import { useStructuredDeltas } from "fakewiki" // `wiki` is a FakeWiki instance const revisionIds = ref([12345, 12346]) const deltas = useStructuredDeltas({ wiki, revisionIds, autoLoad: false }) deltas.loadEditTypesSummaries([12345, 12346]) ``` *Import:* `import { useStructuredDeltas } from "fakewiki"` ### `useUser` *Source:* `hooks/useUser.ts` Thin wrapper that returns getUserCategoryDisplay (async) and getCachedUserCategoryDisplay (sync) from the given FakeWiki instance. In templates where the feed has already loaded (and populated the user category cache), use getCachedUserCategoryDisplay for synchronous access. Use getUserCategoryDisplay when you need to ensure the user is loaded (e.g. await in script). **Parameters (from JSDoc `@param` where present)** - `wiki` - `FakeWiki` instance - `options` - Optional `userTypeConfig` override map for display icons and colors ```ts useUser(wiki: FakeWiki, options?: { userTypeConfig?: Partial> }) ``` **Example** ```ts const { getCachedUserCategoryDisplay, getUserCategoryDisplay } = useUser(wiki) const display = getCachedUserCategoryDisplay("Example") ``` *Import:* `import { useUser } from "fakewiki"`