PageSourceSearch

https://flanksource.com/assets/js/a40363f7.996c81fb.js

js flanksource.com collected 2026-09-25 15:26:46 UTC 19,182 bytes, 1 lines download raw bytes

1"use strict";(globalThis.webpackChunkmission_control=globalThis.webpackChunkmission_control||[]).push([[3875],{85200(e,s,r){r.r(s),r.d(s,{assets:()=>o,contentTitle:()=>c,default:()=>a,frontMatter:()=>d,metadata:()=>i,toc:()=>l});const i=JSON.parse('{"id":"guide/config-db/scrapers/github","title":"GitHub","description":"GitHub Actions","source":"@site/docs/guide/config-db/scrapers/github.md","sourceDirName":"guide/config-db/scrapers","slug":"/guide/config-db/scrapers/github","permalink":"/docs/guide/config-db/scrapers/github","draft":false,"unlisted":false,"editUrl":"https://github.com/flanksource/docs/tree/main/docs/guide/config-db/scrapers/github.md","tags":[],"version":"current","sidebarPosition":9,"frontMatter":{"title":"GitHub","show_title":false,"sidebar_position":9,"sidebar_custom_props":{"icon":"github"}},"sidebar":"guide","previous":{"title":"GCP","permalink":"/docs/guide/config-db/scrapers/gcp"},"next":{"title":"HTTP","permalink":"/docs/guide/config-db/scrapers/http"}}');var n=r(74848),t=r(28453);const d={title:"GitHub",show_title:!1,sidebar_position:9,sidebar_custom_props:{icon:"github"}},c=" GitHub",o={},l=[{value:"GitHub Actions",id:"github-actions",level:2},{value:"GitHub Repository",id:"github-repository",level:2},{value:"GitHubRepository",id:"githubrepository",level:3},{value:"GitHubOrganization",id:"githuborganization",level:3},{value:"Permissions",id:"permissions",level:3},{value:"Commits",id:"commits",level:3},{value:"Repository selectors",id:"repository-selectors",level:3},{value:"SecurityFilters",id:"securityfilters",level:3}];function h(e){const s={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,t.R)(),...e.components},{CommonLink:r,Icon:i}=s;return r||x("CommonLink",!0),i||x("Icon",!0),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.header,{children:(0,n.jsxs)(s.h1,{id:"-github",children:[(0,n.jsx)(i,{name:"github"})," GitHub"]})}),"\n",(0,n.jsx)(s.h2,{id:"github-actions",children:"GitHub Actions"}),"\n",(0,n.jsxs)(s.p,{children:["The GitHub Actions scraper creates configuration items from GitHub Actions workflows. Specify the ",(0,n.jsx)(s.code,{children:"owner"}),", ",(0,n.jsx)(s.code,{children:"repository"}),", and ",(0,n.jsx)(s.code,{children:"branch"})," to scrape."]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",metastring:"title='github-actions.yaml' file=<rootDir>/modules/config-db/fixtures/github-actions.yaml",children:"apiVersion: configs.flanksource.com/v1\nkind: ScrapeConfig\nmetadata:\n  name: github-actions-scraper\nspec:\n  githubActions:\n    - owner: flanksource\n      repository: config-db\n      connection: connection://default/github-pat\n      branch: main\n"})}),"\n",(0,n.jsxs)(s.p,{children:["By default the last 7 days of workflow runs are fetched. Change that with the ",(0,n.jsx)(s.code,{children:"scrapers.githubactions.maxAge"})," ",(0,n.jsx)(s.a,{href:"/docs/system-properties",children:"system property"}),"."]}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Field"}),(0,n.jsx)(s.th,{children:"Description"}),(0,n.jsx)(s.th,{children:"Scheme"}),(0,n.jsx)(s.th,{children:"Required"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"owner"})}),(0,n.jsx)(s.td,{children:"GitHub repository owner"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"string"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"true"})})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"repository"})}),(0,n.jsx)(s.td,{children:"GitHub repository name"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"string"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"true"})})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"personalAccessToken"})}),(0,n.jsx)(s.td,{children:"Personal access token for authentication"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(r,{to:"secrets",children:(0,n.jsx)(s.em,{children:"EnvVar"})})}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"connection"})}),(0,n.jsxs)(s.td,{children:["Connection name used to populate ",(0,n.jsx)(s.code,{children:"personalAccessToken"})]}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"string"})}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"workflows"})}),(0,n.jsx)(s.td,{children:"Workflows to scrape. When empty, all workflows are scraped"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"[]string"})}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"status"})}),(0,n.jsxs)(s.td,{children:["Only return workflow runs with this check run status or conclusion e.g. ",(0,n.jsx)(s.code,{children:"success"}),", ",(0,n.jsx)(s.code,{children:"in_progress"})]}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"string"})}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"actor"})}),(0,n.jsx)(s.td,{children:"Only return workflow runs for this user. Use the login of the user who created the push associated with the run"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"string"})}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"branch"})}),(0,n.jsx)(s.td,{children:"Only return workflow runs associated with this branch"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"string"})}),(0,n.jsx)(s.td,{})]})]})]}),"\n",(0,n.jsx)(s.h2,{id:"github-repository",children:"GitHub Repository"}),"\n",(0,n.jsxs)(s.p,{children:["The GitHub Repository scraper creates ",(0,n.jsx)(s.code,{children:"GitHub::Repository"})," config items and optionally fetches security alerts (Dependabot, code scanning, secret scanning) and OpenSSF Scorecard data as analyses."]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",metastring:"title='github.
1yaml' file=<rootDir>/modules/config-db/fixtures/github.yaml",children:"apiVersion: configs.flanksource.com/v1\nkind: ScrapeConfig\nmetadata:\n  name: github\nspec:\n  schedule: '@every 6h'\n  github:\n    - security: true\n      openssf: true\n      permissions:\n        enabled: true\n      repositories:\n        - owner: flanksource\n          repo: duty\n      # rulesets needs organization Administration write access; settings and\n      # apps need Administration read access; members needs Members read access.\n      organizations:\n        - name: flanksource\n          settings: true\n          rulesets: false\n          apps: true\n          members: true\n"})}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Field"}),(0,n.jsx)(s.th,{children:"Description"}),(0,n.jsx)(s.th,{children:"Scheme"}),(0,n.jsx)(s.th,{children:"Required"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"repositories"})}),(0,n.jsx)(s.td,{children:"List of repositories to scrape"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.a,{href:"#githubrepository",children:(0,n.jsx)(s.code,{children:"[]GitHubRepository"})})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"true"})})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"organizations"})}),(0,n.jsx)(s.td,{children:"Organizations to scrape for settings, installed apps and membership"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.a,{href:"#githuborganization",children:(0,n.jsx)(s.code,{children:"[]GitHubOrganization"})})}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"personalAccessToken"})}),(0,n.jsx)(s.td,{children:"Personal access token for authentication"}),(0,n.jsx)(s.td,{children:(0,n.jsxs)(r,{to:"secrets",children:["[]",(0,n.jsx)(s.em,{children:"EnvVar"})]})}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"connection"})}),(0,n.jsx)(s.td,{children:"Connection name for GitHub credential"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"string"})}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"security"})}),(0,n.jsx)(s.td,{children:"Enable Dependabot, code scanning, and secret scanning alerts"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"bool"})}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"openssf"})}),(0,n.jsx)(s.td,{children:"Enable OpenSSF Scorecard data"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"bool"})}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"permissions"})}),(0,n.jsx)(s.td,{children:"Collect repository collaborator and team access"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.a,{href:"#permissions",children:(0,n.jsx)(s.code,{children:"Permissions"})})}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"commits"})}),(0,n.jsx)(s.td,{children:"Collect commit metadata from each repository's default branch"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.a,{href:"#commits",children:(0,n.jsx)(s.code,{children:"Commits"})})}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"securityFilters"})}),(0,n.jsx)(s.td,{children:"Filters for security alerts"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.a,{href:"#securityfilters",children:(0,n.jsx)(s.code,{children:"SecurityFilters"})})}),(0,n.jsx)(s.td,{})]})]})]}),"\n",(0,n.jsx)(s.h3,{id:"githubrepository",children:"GitHubRepository"}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Field"}),(0,n.jsx)(s.th,{children:"Description"}),(0,n.jsx)(s.th,{children:"Scheme"}),(0,n.jsx)(s.th,{children:"Required"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"owner"})}),(0,n.jsx)(s.td,{children:"GitHub repository owner"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"string"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"true"})})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"repo"})}),(0,n.jsxs)(s.td,{children:["Exact repository name or comma-separated ",(0,n.jsx)(s.code,{children:"collections.MatchItems"})," patterns. Pattern selectors skip archived repositories."]}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"string"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"true"})})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"topics"})}),(0,n.jsx)(s.td,{children:"Filter repositories by GitHub topic. A repository is included when at least one positive pattern matches; negated patterns take precedence. If all patterns are negated, a repository is included when none of its topics match an exclusion"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"MatchExpressions"})}),(0,n.jsx)(s.td,{})]})]})]}),"\n",(0,n.jsx)(s.h3,{id:"githuborganization",children:"GitHubOrganization"}),"\n",(0,n.jsx)(s.p,{children:"Repository owners are always attached to their organization, but only organizations listed here are scraped beyond their name."}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Field"}),(0,n.jsx)(s.th,{children:"Description"}),(0,n.jsx)(s.th,{children:"Scheme"}),(0,n.jsx)(s.th,{children:"Required"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"name"})}),(0,n.jsxs)(s.td,{children:["Organization login e.g. ",(0,n.jsx)(s.code,{children:"acme"})]}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"string"})}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"true"})})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"settings"})}),(0,n.jsx)(s.td,{children:"Collect organization security and policy settings: 2FA requirement, default repository permission, member repository and page creation policy, Advanced Security / Dependabot / secret scanning defaults, Actions permissions, custom organization roles and code security configurations"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"bool"})}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"rulesets"})}),(0,n.jsx)(s.td,{children:"Collect organization repository rulesets"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"bool"})}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"apps"})}),(0,n.jsx)(s.td,{children:"Collect installed GitHub App installations"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"bool"})}),(0,n.jsx)(s.td,{})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"members"})}),(0,n.jsx)(s.td,{children:"Collect organization members and their organization role, teams, team membership and team to repository grants"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"bool"})}),(0,n.jsx)(s.td,{})]})]})]}),"\n",(0,n.jsx)(s.admonition,{title:"Required token scopes",type:"note",children:(0,n.jsxs)(s.p,{children:[(0,n.jsx)(s.code,{children:"settings"})," and ",(0,n.jsx)(s.code,{children:"apps"})," require organization administration ",(0,n.jsx)(s.strong,{children:"read"})," access, ",(0,n.jsx)(s.code,{children:"rulesets"})," requires organization administration ",(0,n.jsx)(s.strong,{children:"write"})," access (even though the API operation is read-only), and ",(0,n.jsx)(s.code,{children:"members"})," requires organization members read access."]})}),"\n",(0,n.jsx)(s.h3,{id:"permissions",children:"Permissions"}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Field"}),(0,n.jsx)(s.th,{children:"Description"}),(0,n.jsx)(s.th,{children:"Scheme"})]})}),(0,n.jsx)(s.tbody,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"enabled"})}),(0,n.jsx)(s.td,{children:"Map effective collaborators and repository team
1s to external users, groups, roles, and config access records"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"bool"})})]})})]}),"\n",(0,n.jsx)(s.h3,{id:"commits",children:"Commits"}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Field"}),(0,n.jsx)(s.th,{children:"Description"}),(0,n.jsx)(s.th,{children:"Scheme"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"enabled"})}),(0,n.jsx)(s.td,{children:"Enable commit collection"}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"bool"})})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"maxAge"})}),(0,n.jsxs)(s.td,{children:["Only collect commits newer than this duration. Defaults to ",(0,n.jsx)(s.code,{children:"30d"})]}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"string"})})]})]})]}),"\n",(0,n.jsx)(s.h3,{id:"repository-selectors",children:"Repository selectors"}),"\n",(0,n.jsxs)(s.p,{children:["Use repository selectors when you want one GitHub scraper to discover multiple repositories for the same owner. The ",(0,n.jsx)(s.code,{children:"repo"})," field supports exact names, ",(0,n.jsx)(s.code,{children:"*"})," wildcards, comma-separated patterns, and ",(0,n.jsx)(s.code,{children:"!"})," exclusions from ",(0,n.jsx)(s.code,{children:"collections.MatchItems"}),"."]}),"\n",(0,n.jsxs)(s.p,{children:["The following example discovers matching repositories for ",(0,n.jsx)(s.code,{children:"flanksource"}),", mixes selector and exact entries, and deduplicates overlapping matches per GitHub scraper config."]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{className:"language-yaml",metastring:"title='github-repo-selectors.yaml' file=<rootDir>/modules/config-db/fixtures/github-repo-selectors.yaml",children:"apiVersion: configs.flanksource.com/v1\nkind: ScrapeConfig\nmetadata:\n  name: github-repo-selectors\nspec:\n  schedule: '@every 6h'\n  github:\n    - repositories:\n        # Repo selectors use collections.MatchItems syntax and are resolved\n        # against all visible, non-archived repositories for the owner.\n        - owner: flanksource\n          repo: config-db,mission-control\n        # Overlapping selectors are deduped per GitHub scraper config.\n        - owner: flanksource\n          repo: '*control'\n        # Topic filters use MatchItems syntax and further restrict repo matches.\n        # Negated topic matches take precedence over positive matches.\n        - owner: flanksource\n          repo: '*'\n          topics:\n            - kubernetes\n            - '!deprecated'\n        # Exact repositories can be mixed with selectors.\n        - owner: flanksource\n          repo: duty\n"})}),"\n",(0,n.jsx)(s.h3,{id:"securityfilters",children:"SecurityFilters"}),"\n",(0,n.jsxs)(s.table,{children:[(0,n.jsx)(s.thead,{children:(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.th,{children:"Field"}),(0,n.jsx)(s.th,{children:"Description"}),(0,n.jsx)(s.th,{children:"Scheme"})]})}),(0,n.jsxs)(s.tbody,{children:[(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"severity"})}),(0,n.jsxs)(s.td,{children:["Filter alerts by severity (e.g. ",(0,n.jsx)(s.code,{children:"critical"}),", ",(0,n.jsx)(s.code,{children:"high"}),")"]}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"[]string"})})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"state"})}),(0,n.jsxs)(s.td,{children:["Filter alerts by state (e.g. ",(0,n.jsx)(s.code,{children:"open"}),", ",(0,n.jsx)(s.code,{children:"fixed"}),")"]}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"[]string"})})]}),(0,n.jsxs)(s.tr,{children:[(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"maxAge"})}),(0,n.jsxs)(s.td,{children:["Only include alerts newer than this duration (e.g. ",(0,n.jsx)(s.code,{children:"7d"}),", ",(0,n.jsx)(s.code,{children:"24h"}),")"]}),(0,n.jsx)(s.td,{children:(0,n.jsx)(s.code,{children:"string"})})]})]})]})]})}function a(e={}){const{wrapper:s}={...(0,t.R)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(h,{...e})}):h(e)}function x(e,s){throw new Error("Expected "+(s?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}},28453(e,s,r){r.d(s,{R:()=>d,x:()=>c});var i=r(96540);const n={},t=i.createContext(n);function d(e){const s=i.useContext(t);return i.useMemo(function(){return"function"==typeof e?e(s):{...s,...e}},[s,e])}function c(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:d(e.components),i.createElement(t.Provider,{value:s},e.children)}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.