mirror of
https://github.com/TheBinaryNinja/tvapp2.git
synced 2026-06-04 10:45:41 -04:00
2276 lines
92 KiB
HTML
2276 lines
92 KiB
HTML
|
|
<!doctype html>
|
|
<html lang="en" class="no-js">
|
|
<head>
|
|
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
|
|
|
|
<meta name="author" content="TheBinaryNinja">
|
|
|
|
|
|
<link rel="canonical" href="https://thebinaryninja.github.io/tvapp2/about/contributing/">
|
|
|
|
|
|
<link rel="prev" href="../what_is_tvapp/">
|
|
|
|
|
|
<link rel="next" href="../license/">
|
|
|
|
|
|
<link rel="icon" href="../../assets/favicon.png">
|
|
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.11">
|
|
|
|
|
|
|
|
<title>Contributing to TVApp2 - TVApp2</title>
|
|
|
|
|
|
|
|
<link rel="stylesheet" href="../../assets/stylesheets/main.4af4bdda.min.css">
|
|
|
|
|
|
<link rel="stylesheet" href="../../assets/stylesheets/palette.06af60db.min.css">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
|
|
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
|
|
|
|
|
|
|
|
<link rel="stylesheet" href="../../css/timeago.css">
|
|
|
|
<link rel="stylesheet" href="../../stylesheets/extra.css?v1.000">
|
|
|
|
<script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<link rel="stylesheet" href="../../assets/stylesheets/custom.00c04c01.min.css">
|
|
|
|
<link href="../../assets/stylesheets/glightbox.min.css" rel="stylesheet"/><style>
|
|
html.glightbox-open { overflow: initial; height: 100%; }
|
|
.gslide-title { margin-top: 0px; user-select: text; }
|
|
.gslide-desc { color: #666; user-select: text; }
|
|
.gslide-image img { background: black; }
|
|
.glightbox-clean .gslide-media {
|
|
-webkit-box-shadow: none;
|
|
box-shadow: none;
|
|
}
|
|
.gscrollbar-fixer { padding-right: 15px; }
|
|
.gdesc-inner { font-size: 0.75rem; }
|
|
body[data-md-color-scheme="slate"] .gdesc-inner { background: var(--md-default-bg-color);}
|
|
body[data-md-color-scheme="slate"] .gslide-title { color: var(--md-default-fg-color);}
|
|
body[data-md-color-scheme="slate"] .gslide-desc { color: var(--md-default-fg-color);}</style> <script src="../../assets/javascripts/glightbox.min.js"></script></head>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="custom" data-md-color-accent="indigo">
|
|
|
|
|
|
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
|
|
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
|
|
<label class="md-overlay" for="__drawer"></label>
|
|
<div data-md-component="skip">
|
|
|
|
|
|
<a href="#contributing" class="md-skip">
|
|
Skip to content
|
|
</a>
|
|
|
|
</div>
|
|
<div data-md-component="announce">
|
|
|
|
<aside class="md-banner">
|
|
<div class="md-banner__inner md-grid md-typeset">
|
|
|
|
<button class="md-banner__button md-icon" aria-label="Don't show this again">
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
|
|
</button>
|
|
|
|
|
|
Documentation currently under development
|
|
|
|
</div>
|
|
|
|
<script>var el=document.querySelector("[data-md-component=announce]");if(el){var content=el.querySelector(".md-typeset");__md_hash(content.innerHTML)===__md_get("__announce")&&(el.hidden=!0)}</script>
|
|
|
|
</aside>
|
|
|
|
</div>
|
|
|
|
<div data-md-color-scheme="default" data-md-component="outdated" hidden>
|
|
|
|
<aside class="md-banner md-banner--warning">
|
|
<div class="md-banner__inner md-grid md-typeset">
|
|
|
|
You're not viewing the latest version.
|
|
<a href="../../..">
|
|
<strong>Click here to go to latest.</strong>
|
|
</a>
|
|
|
|
</div>
|
|
<script>var el=document.querySelector("[data-md-component=outdated]"),base=new URL("../.."),outdated=__md_get("__outdated",sessionStorage,base);!0===outdated&&el&&(el.hidden=!1)</script>
|
|
</aside>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<header class="md-header" data-md-component="header">
|
|
<nav class="md-header__inner md-grid" aria-label="Header">
|
|
<a href="../.." title="TVApp2" class="md-header__button md-logo" aria-label="TVApp2" data-md-component="logo">
|
|
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Pro 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2024 Fonticons, Inc. --><defs><style>.fa-secondary{opacity:.4}</style></defs><path class="fa-secondary" d="M0 64C0 28.7 28.7 0 64 0L576 0c35.3 0 64 28.7 64 64l0 288c0 35.3-28.7 64-64 64L64 416c-35.3 0-64-28.7-64-64L0 64zm64 0l0 288 512 0 0-288L64 64zM96 480c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-384 0c-17.7 0-32-14.3-32-32z"/><path class="fa-primary" d="M64 64H576V352H64V64z"/></svg>
|
|
|
|
</a>
|
|
<label class="md-header__button md-icon" for="__drawer">
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
|
|
</label>
|
|
<div class="md-header__title" data-md-component="header-title">
|
|
<div class="md-header__ellipsis">
|
|
<div class="md-header__topic">
|
|
<span class="md-ellipsis">
|
|
TVApp2
|
|
</span>
|
|
</div>
|
|
<div class="md-header__topic" data-md-component="header-topic">
|
|
<span class="md-ellipsis">
|
|
|
|
Contributing to TVApp2
|
|
|
|
</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<form class="md-header__option" data-md-component="palette">
|
|
|
|
|
|
|
|
|
|
<input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="custom" data-md-color-accent="indigo" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_0">
|
|
|
|
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_1" hidden>
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg>
|
|
</label>
|
|
|
|
|
|
|
|
|
|
|
|
<input class="md-option" data-md-color-media="" data-md-color-scheme="main" data-md-color-primary="custom" data-md-color-accent="custom" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_1">
|
|
|
|
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_0" hidden>
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg>
|
|
</label>
|
|
|
|
|
|
</form>
|
|
|
|
|
|
|
|
<script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
|
|
|
|
|
|
|
|
|
|
|
|
<label class="md-header__button md-icon" for="__search">
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
|
|
</label>
|
|
<div class="md-search" data-md-component="search" role="dialog">
|
|
<label class="md-search__overlay" for="__search"></label>
|
|
<div class="md-search__inner" role="search">
|
|
<form class="md-search__form" name="search">
|
|
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
|
|
<label class="md-search__icon md-icon" for="__search">
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
|
|
</label>
|
|
<nav class="md-search__options" aria-label="Search">
|
|
|
|
<a href="javascript:void(0)" class="md-search__icon md-icon" title="Share" aria-label="Share" data-clipboard data-clipboard-text="" data-md-component="search-share" tabindex="-1">
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg>
|
|
</a>
|
|
|
|
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
|
|
</button>
|
|
</nav>
|
|
|
|
<div class="md-search__suggest" data-md-component="search-suggest"></div>
|
|
|
|
</form>
|
|
<div class="md-search__output">
|
|
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
|
|
<div class="md-search-result" data-md-component="search-result">
|
|
<div class="md-search-result__meta">
|
|
Initializing search
|
|
</div>
|
|
<ol class="md-search-result__list" role="presentation"></ol>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
<div class="md-header__source">
|
|
<a href="https://github.com/TheBinaryNinja/tvapp2" title="Go to repository" class="md-source" data-md-component="source">
|
|
<div class="md-source__icon md-icon">
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
|
|
</div>
|
|
<div class="md-source__repository">
|
|
TheBinaryNinja/tvapp2
|
|
</div>
|
|
</a>
|
|
</div>
|
|
|
|
</nav>
|
|
|
|
</header>
|
|
|
|
<div class="md-container" data-md-component="container">
|
|
|
|
|
|
|
|
|
|
|
|
<nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
|
|
<div class="md-grid">
|
|
<ul class="md-tabs__list">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-tabs__item">
|
|
<a href="../../home/" class="md-tabs__link">
|
|
|
|
|
|
|
|
|
|
|
|
Home
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-tabs__item md-tabs__item--active">
|
|
<a href="../what_is_tvapp/" class="md-tabs__link">
|
|
|
|
|
|
|
|
|
|
|
|
About
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-tabs__item">
|
|
<a href="../../config/env/" class="md-tabs__link">
|
|
|
|
|
|
|
|
|
|
|
|
Config
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-tabs__item">
|
|
<a href="../changelog/" class="md-tabs__link">
|
|
|
|
|
|
|
|
|
|
|
|
Changelog
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-tabs__item">
|
|
<a href="https://discord.gg/gTze6hRe" class="md-tabs__link">
|
|
|
|
|
|
|
|
|
|
|
|
Discord
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
</ul>
|
|
</div>
|
|
</nav>
|
|
|
|
|
|
|
|
<main class="md-main" data-md-component="main">
|
|
<div class="md-main__inner md-grid">
|
|
|
|
|
|
|
|
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
|
|
<div class="md-sidebar__scrollwrap">
|
|
<div class="md-sidebar__inner">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<nav class="md-nav md-nav--primary md-nav--lifted" aria-label="Navigation" data-md-level="0">
|
|
<label class="md-nav__title" for="__drawer">
|
|
<a href="../.." title="TVApp2" class="md-nav__button md-logo" aria-label="TVApp2" data-md-component="logo">
|
|
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Pro 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2024 Fonticons, Inc. --><defs><style>.fa-secondary{opacity:.4}</style></defs><path class="fa-secondary" d="M0 64C0 28.7 28.7 0 64 0L576 0c35.3 0 64 28.7 64 64l0 288c0 35.3-28.7 64-64 64L64 416c-35.3 0-64-28.7-64-64L0 64zm64 0l0 288 512 0 0-288L64 64zM96 480c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-384 0c-17.7 0-32-14.3-32-32z"/><path class="fa-primary" d="M64 64H576V352H64V64z"/></svg>
|
|
|
|
</a>
|
|
TVApp2
|
|
</label>
|
|
|
|
<div class="md-nav__source">
|
|
<a href="https://github.com/TheBinaryNinja/tvapp2" title="Go to repository" class="md-source" data-md-component="source">
|
|
<div class="md-source__icon md-icon">
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
|
|
</div>
|
|
<div class="md-source__repository">
|
|
TheBinaryNinja/tvapp2
|
|
</div>
|
|
</a>
|
|
</div>
|
|
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../home/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Home
|
|
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
|
|
|
|
|
|
|
|
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" checked>
|
|
|
|
|
|
<label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
About
|
|
|
|
</span>
|
|
|
|
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
|
|
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="true">
|
|
<label class="md-nav__title" for="__nav_2">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
About
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../what_is_tvapp/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
What Is TVApp2
|
|
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--active">
|
|
|
|
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
|
|
|
|
|
|
|
|
|
|
|
|
<label class="md-nav__link md-nav__link--active" for="__toc">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Contributing
|
|
|
|
</span>
|
|
|
|
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
|
|
<a href="./" class="md-nav__link md-nav__link--active">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Contributing
|
|
|
|
</span>
|
|
|
|
|
|
</a>
|
|
|
|
|
|
|
|
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<label class="md-nav__title" for="__toc">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
Table of contents
|
|
</label>
|
|
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#about" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
About
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#issues-bugs-ideas" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Issues, Bugs, Ideas
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#contributing_1" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Contributing
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="Contributing">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#before-submitting-pull-requests" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Before Submitting Pull Requests
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#conventional-commit-specification" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Conventional Commit Specification
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="Conventional Commit Specification">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#types" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Types
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="Types">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#example-1" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Example 1:
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#example-2" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Example 2:
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#committing" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Committing
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#languages" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Languages
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="Languages">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#python" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Python
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="Python">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#indentation" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Indentation
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#line-length" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Line Length
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#blank-lines" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Blank Lines
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#imports" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Imports
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#commenting" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Commenting
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#casing" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Casing
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#nodejs" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
NodeJS
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="NodeJS">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#prettier" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Prettier
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#eslint" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
ESLint
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="ESLint">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#v9-newer-config" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
v9 & Newer (Config)
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#v8-older-config" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
v8 & Older (Config)
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#packages" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Packages
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#indentation_1" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Indentation
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#style" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Style
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#line-length_1" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Line Length
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#commenting_1" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Commenting
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#casing_1" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Casing
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../license/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
License
|
|
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
|
|
|
|
|
|
|
|
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_4" >
|
|
|
|
|
|
<label class="md-nav__link" for="__nav_2_4" id="__nav_2_4_label" tabindex="">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Wiki
|
|
|
|
</span>
|
|
|
|
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
|
|
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_2_4_label" aria-expanded="false">
|
|
<label class="md-nav__title" for="__nav_2_4">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
Wiki
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../conventions/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Conventions
|
|
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../tags/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Tags
|
|
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--nested">
|
|
|
|
|
|
|
|
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" >
|
|
|
|
|
|
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Config
|
|
|
|
</span>
|
|
|
|
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
|
|
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
|
|
<label class="md-nav__title" for="__nav_3">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
Config
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../config/env/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Environment Variables
|
|
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../changelog/" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Changelog
|
|
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="https://discord.gg/gTze6hRe" class="md-nav__link">
|
|
|
|
|
|
|
|
<span class="md-ellipsis">
|
|
Discord
|
|
|
|
</span>
|
|
|
|
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
|
|
<div class="md-sidebar__scrollwrap">
|
|
<div class="md-sidebar__inner">
|
|
|
|
|
|
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<label class="md-nav__title" for="__toc">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
Table of contents
|
|
</label>
|
|
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#about" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
About
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#issues-bugs-ideas" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Issues, Bugs, Ideas
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#contributing_1" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Contributing
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="Contributing">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#before-submitting-pull-requests" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Before Submitting Pull Requests
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#conventional-commit-specification" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Conventional Commit Specification
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="Conventional Commit Specification">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#types" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Types
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="Types">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#example-1" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Example 1:
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#example-2" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Example 2:
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#committing" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Committing
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#languages" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Languages
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="Languages">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#python" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Python
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="Python">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#indentation" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Indentation
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#line-length" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Line Length
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#blank-lines" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Blank Lines
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#imports" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Imports
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#commenting" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Commenting
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#casing" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Casing
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#nodejs" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
NodeJS
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="NodeJS">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#prettier" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Prettier
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#eslint" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
ESLint
|
|
</span>
|
|
</a>
|
|
|
|
<nav class="md-nav" aria-label="ESLint">
|
|
<ul class="md-nav__list">
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#v9-newer-config" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
v9 & Newer (Config)
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#v8-older-config" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
v8 & Older (Config)
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#packages" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Packages
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#indentation_1" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Indentation
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#style" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Style
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#line-length_1" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Line Length
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#commenting_1" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Commenting
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li class="md-nav__item">
|
|
<a href="#casing_1" class="md-nav__link">
|
|
<span class="md-ellipsis">
|
|
Casing
|
|
</span>
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
</nav>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
</nav>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
<div class="md-content" data-md-component="content">
|
|
<article class="md-content__inner md-typeset">
|
|
|
|
|
|
|
|
|
|
|
|
<a href="https://github.com/TheBinaryNinja/tvapp2/edit/main/docs/docs/about/contributing.md" title="Edit this page" class="md-content__button md-icon">
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4v-2m10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1 2.1 2.1Z"/></svg>
|
|
</a>
|
|
|
|
|
|
|
|
|
|
|
|
<a href="https://github.com/TheBinaryNinja/tvapp2/raw/main/docs/docs/about/contributing.md" title="View source of this page" class="md-content__button md-icon">
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.15 8.15 0 0 1-1.23-2Z"/></svg>
|
|
</a>
|
|
|
|
|
|
|
|
<div align="center">
|
|
<h1 id="contributing">♾️ Contributing ♾️<a class="headerlink" href="#contributing" title="Permanent link">¶</a></h1>
|
|
<p><br /></p>
|
|
<p align="center">
|
|
|
|
|
|
<!-- prettier-ignore-start -->
|
|
|
|
|
|
<a href="https://github.com/thebinaryninja/tvapp2/releases"><img alt="Version" src="https://img.shields.io/github/v/tag/thebinaryninja/tvapp2?logo=GitHub&label=Version&color=ba5225" /></a>
|
|
<a href="https://github.com/thebinaryninja/tvapp2/releases"><img alt="Downloads" src="https://img.shields.io/github/downloads/thebinaryninja/tvapp2/total?logo=github&logoColor=FFFFFF&label=Downloads&color=376892" /></a>
|
|
<a href="https://img.shields.io/github/repo-size/thebinaryninja/tvapp2?logo=github&label=Size&color=59702a"><img alt="Size" src="https://img.shields.io/github/repo-size/thebinaryninja/tvapp2?logo=github&label=Size&color=59702a" /></a>
|
|
<a href="https://img.shields.io/github/last-commit/thebinaryninja/tvapp2?logo=conventionalcommits&logoColor=FFFFFF&label=Last%20Commit&color=313131"><img alt="Last Commit" src="https://img.shields.io/github/last-commit/thebinaryninja/tvapp2?logo=conventionalcommits&logoColor=FFFFFF&label=Last%20Commit&color=313131" /></a>
|
|
<a href="#contributors"><img alt="Contributors" src="https://img.shields.io/github/all-contributors/thebinaryninja/tvapp2?logo=contributorcovenant&color=de1f6f&label=contributors" /></a>
|
|
|
|
<!-- prettier-ignore-end -->
|
|
|
|
|
|
|
|
</p>
|
|
</div>
|
|
<p><br /></p>
|
|
<hr />
|
|
<p><br /></p>
|
|
<h2 id="about">About<a class="headerlink" href="#about" title="Permanent link">¶</a></h2>
|
|
<p>Below are a list of ways that you can help contribute to this project, as well as policies and guides that explain how to get started.</p>
|
|
<p>Please review everything on this page before you submit your contribution.</p>
|
|
<p><br /></p>
|
|
<hr />
|
|
<p><br /></p>
|
|
<ul>
|
|
<li><a href="#about">About</a></li>
|
|
<li><a href="#issues-bugs-ideas">Issues, Bugs, Ideas</a></li>
|
|
<li><a href="#contributing">Contributing</a></li>
|
|
<li><a href="#before-submitting-pull-requests">Before Submitting Pull Requests</a></li>
|
|
<li><a href="#conventional-commit-specification">Conventional Commit Specification</a><ul>
|
|
<li><a href="#types">Types</a></li>
|
|
<li><a href="#example-1">Example 1:</a></li>
|
|
<li><a href="#example-2">Example 2:</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#committing">Committing</a></li>
|
|
<li><a href="#languages">Languages</a><ul>
|
|
<li><a href="#python">Python</a></li>
|
|
<li><a href="#indentation">Indentation</a></li>
|
|
<li><a href="#line-length">Line Length</a></li>
|
|
<li><a href="#blank-lines">Blank Lines</a></li>
|
|
<li><a href="#imports">Imports</a></li>
|
|
<li><a href="#commenting">Commenting</a></li>
|
|
<li><a href="#casing">Casing</a></li>
|
|
<li><a href="#nodejs">NodeJS</a></li>
|
|
<li><a href="#prettier">Prettier</a></li>
|
|
<li><a href="#eslint">ESLint</a><ul>
|
|
<li><a href="#v9--newer-config">v9 \& Newer (Config)</a></li>
|
|
<li><a href="#v8--older-config">v8 \& Older (Config)</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#packages">Packages</a></li>
|
|
<li><a href="#indentation-1">Indentation</a></li>
|
|
<li><a href="#style">Style</a></li>
|
|
<li><a href="#line-length-1">Line Length</a></li>
|
|
<li><a href="#commenting-1">Commenting</a></li>
|
|
<li><a href="#casing-1">Casing</a></li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
<p><br /></p>
|
|
<hr />
|
|
<p><br /></p>
|
|
<h2 id="issues-bugs-ideas">Issues, Bugs, Ideas<a class="headerlink" href="#issues-bugs-ideas" title="Permanent link">¶</a></h2>
|
|
<p>Stuff happens, and sometimes as best as we try, there may be issues within this project that we are unaware of. That is the great thing about open-source; anyone can use the program and contribute to making it better.</p>
|
|
<p><br /></p>
|
|
<p>If you have found a bug, have an issue, or maybe even a cool idea; you can let us know by <a href="https://github.com/thebinaryninja/tvapp2/issues">submitting it</a>. However, before you submit your new issue, bug report, or feature request; head over to the <a href="https://github.com/thebinaryninja/tvapp2/issues">Issues Section</a> and ensure nobody else has already submitted it.</p>
|
|
<p><br /></p>
|
|
<p>Once you are sure that your issue has not already being dealt with; you may submit a new issue at <a href="https://github.com/thebinaryninja/tvapp2/issues/new/choose">here</a>. You'll be asked to specify exactly what your new submission targets, such as:
|
|
- Bug report
|
|
- Feature Suggestion</p>
|
|
<p><br /></p>
|
|
<p>When writing a new submission; ensure you fill out any of the questions asked of you. If you do not provide enough information, we cannot help. Be as detailed as possible, and provide any logs or screenshots you may have to help us better understand what you mean. Failure to fill out the submission properly may result in it being closed without a response.</p>
|
|
<p><br /></p>
|
|
<p>If you are submitting a bug report:</p>
|
|
<ul>
|
|
<li>Explain the issue</li>
|
|
<li>Describe how you expect for a feature to work, and what you're seeing instead of what you expected.</li>
|
|
<li>List possible options for a resolution or insight</li>
|
|
<li>Provide screenshots, logs, or anything else that can visually help track down the issue.</li>
|
|
</ul>
|
|
<p><br /></p>
|
|
<div align="center">
|
|
|
|
[![Submit Issue][btn-github-submit-img]][btn-github-submit-uri]
|
|
|
|
</div>
|
|
|
|
<p><br /></p>
|
|
<div align="center">
|
|
|
|
**[`^ back to top ^`](#about)**
|
|
|
|
</div>
|
|
|
|
<p><br /></p>
|
|
<hr />
|
|
<p><br /></p>
|
|
<h2 id="contributing_1">Contributing<a class="headerlink" href="#contributing_1" title="Permanent link">¶</a></h2>
|
|
<p>If you are looking to contribute to this project by actually submit your own code; please review this section completely. There is important information and policies provided below that you must follow for your pull request to get accepted.</p>
|
|
<p>The source is here for everyone to collectively share and collaborate on. If you think you have a possible solution to a problem; don't be afraid to get your hands dirty.</p>
|
|
<p>All contributions are made via pull requests. To create a pull request, you need a GitHub account. If you are unclear on this process, see <a href="https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request-from-a-fork">GitHub's documentation on forking and pull requests</a>. Pull requests should be targeted at the master branch.</p>
|
|
<p><br /></p>
|
|
<h3 id="before-submitting-pull-requests">Before Submitting Pull Requests<a class="headerlink" href="#before-submitting-pull-requests" title="Permanent link">¶</a></h3>
|
|
<ul>
|
|
<li>Follow the repository's code formatting conventions (see below);</li>
|
|
<li>Include tests that prove that the change works as intended and does not add regressions;</li>
|
|
<li>Document the changes in the code and/or the project's documentation;</li>
|
|
<li>Your PR must pass the CI pipeline;</li>
|
|
<li>When submitting your Pull Request, use one of the following branches:</li>
|
|
<li>For bug fixes: <code>main</code> branch</li>
|
|
<li>For features & functionality: <code>development</code> branch</li>
|
|
<li>Include a proper git commit message following the <a href="https://conventionalcommits.org/en/v1.0.0/#specification">Conventional Commit Specification</a>.</li>
|
|
</ul>
|
|
<p><br /></p>
|
|
<p>If you have completed the above tasks, the pull request is ready to be reviewed and your pull request's label will be changed to "Ready for Review". At this point, a human will need to step in and manually verify your submission.</p>
|
|
<p>Reviewers will approve the pull request once they are satisfied with the patch it will be merged.</p>
|
|
<p><br /></p>
|
|
<h3 id="conventional-commit-specification">Conventional Commit Specification<a class="headerlink" href="#conventional-commit-specification" title="Permanent link">¶</a></h3>
|
|
<p>When committing your changes, we require you to follow the <a href="https://conventionalcommits.org/en/v1.0.0/#specification">Conventional Commit Specification</a>. The <strong>Conventional Commits</strong> is a specification for the format and content of a commit message. The concept behind Conventional Commits is to provide a rich commit history that can be read and understood by both humans and automated tools. Conventional Commits have the following format:</p>
|
|
<p><br /></p>
|
|
<div class="language-text highlight"><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><type>[(optional <scope>)]: <description>
|
|
</span><span id="__span-0-2"><a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a>
|
|
</span><span id="__span-0-3"><a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a>[optional <body>]
|
|
</span><span id="__span-0-4"><a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a>
|
|
</span><span id="__span-0-5"><a id="__codelineno-0-5" name="__codelineno-0-5" href="#__codelineno-0-5"></a>[optional <footer(s)>]
|
|
</span></code></pre></div>
|
|
<p><br /></p>
|
|
<h4 id="types">Types<a class="headerlink" href="#types" title="Permanent link">¶</a></h4>
|
|
<p>Our repositories make use of the following commit tags:</p>
|
|
<p><br /></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td><code>feat</code></td>
|
|
<td><sup><sub>Introduce new feature</sub></sup></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>fix</code></td>
|
|
<td><sup><sub>Bug fix</sub></sup></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>chore</code></td>
|
|
<td><sup><sub>Includes technical or preventative maintenance task that is necessary for managing the app or repo, such as updating grunt tasks, but is not tied to any specific feature. Usually done for maintenance purposes.<br/>E.g: Edit .gitignore, .prettierrc, .prettierignore, .gitignore, eslint.config.js file</sub></sup></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>revert</code></td>
|
|
<td><sup><sub>Revert a previous commit</sub></sup></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>style</code></td>
|
|
<td><sup><sub>Update / reformat style of source code. Does not change the way app is implemented. Changes that do not affect the meaning of the code<br />E.g: white-space, formatting, missing semi-colons, change tabs to spaces, etc)</sub></sup></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>docs</code></td>
|
|
<td><sup><sub>Change website or markdown documents. Does not mean changes to the documentation generator script itself, only the documents created from the generator. <br/>E.g: documentation, readme.md or markdown</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>build</code></td>
|
|
<td><sup><sub>Changes to the build / compilation / packaging process or auxiliary tools such as doc generation<br />E.g: create new build tasks, update release script, etc.</sub></sup></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>refactor</code></td>
|
|
<td><sup><sub>Change to production code that leads to no behavior difference,<br/>E.g: split files, rename variables, rename package, improve code style, etc.</sub></sup></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>test</code></td>
|
|
<td><sup><sub>Add or refactor tests, no production code change. Changes the suite of automated tests for the app.</sub></sup></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>ci</code></td>
|
|
<td><sup><sub>Changes related to Continuous Integration (usually <code>yml</code> and other configuration files).</sub></sup></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>perf</code></td>
|
|
<td><sup><sub>Performance improvement of algorithms or execution time of the app. Does not change an existing feature.</sub></sup></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p><br /></p>
|
|
<h5 id="example-1">Example 1:<a class="headerlink" href="#example-1" title="Permanent link">¶</a></h5>
|
|
<div class="language-text highlight"><pre><span></span><code><span id="__span-1-1"><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a>feat(core): bug affecting menu [#22]
|
|
</span><span id="__span-1-2"><a id="__codelineno-1-2" name="__codelineno-1-2" href="#__codelineno-1-2"></a>^───^────^ ^────────────────^ ^───^
|
|
</span><span id="__span-1-3"><a id="__codelineno-1-3" name="__codelineno-1-3" href="#__codelineno-1-3"></a>| | | |
|
|
</span><span id="__span-1-4"><a id="__codelineno-1-4" name="__codelineno-1-4" href="#__codelineno-1-4"></a>| | | └───⫸ (ISSUE): Reference issue ID
|
|
</span><span id="__span-1-5"><a id="__codelineno-1-5" name="__codelineno-1-5" href="#__codelineno-1-5"></a>│ │ │
|
|
</span><span id="__span-1-6"><a id="__codelineno-1-6" name="__codelineno-1-6" href="#__codelineno-1-6"></a>│ │ └──────────────────────⫸ (DESC): Summary in present tense. Use lower case not title case!
|
|
</span><span id="__span-1-7"><a id="__codelineno-1-7" name="__codelineno-1-7" href="#__codelineno-1-7"></a>│ │
|
|
</span><span id="__span-1-8"><a id="__codelineno-1-8" name="__codelineno-1-8" href="#__codelineno-1-8"></a>│ └──────────────────────────────⫸ (SCOPE): The package(s) that this change affects
|
|
</span><span id="__span-1-9"><a id="__codelineno-1-9" name="__codelineno-1-9" href="#__codelineno-1-9"></a>│
|
|
</span><span id="__span-1-10"><a id="__codelineno-1-10" name="__codelineno-1-10" href="#__codelineno-1-10"></a>└──────────────────────────────────⫸ (TYPE): See list above
|
|
</span></code></pre></div>
|
|
<p><br /></p>
|
|
<h5 id="example-2">Example 2:<a class="headerlink" href="#example-2" title="Permanent link">¶</a></h5>
|
|
<div class="language-text highlight"><pre><span></span><code><span id="__span-2-1"><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a><type>(<scope>): <short summary> [issue]
|
|
</span><span id="__span-2-2"><a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a> | | | |
|
|
</span><span id="__span-2-3"><a id="__codelineno-2-3" name="__codelineno-2-3" href="#__codelineno-2-3"></a> | | | └─⫸ Reference issue id (optional)
|
|
</span><span id="__span-2-4"><a id="__codelineno-2-4" name="__codelineno-2-4" href="#__codelineno-2-4"></a> │ │ │
|
|
</span><span id="__span-2-5"><a id="__codelineno-2-5" name="__codelineno-2-5" href="#__codelineno-2-5"></a> │ │ └─⫸ Summary in present tense. Not capitalized. No period at the end.
|
|
</span><span id="__span-2-6"><a id="__codelineno-2-6" name="__codelineno-2-6" href="#__codelineno-2-6"></a> │ │
|
|
</span><span id="__span-2-7"><a id="__codelineno-2-7" name="__codelineno-2-7" href="#__codelineno-2-7"></a> │ └─⫸ Commit Scope: animations|bazel|benchpress|common|compiler|compiler-cli|core|
|
|
</span><span id="__span-2-8"><a id="__codelineno-2-8" name="__codelineno-2-8" href="#__codelineno-2-8"></a> │ elements|forms|http|language-service|localize|platform-browser|
|
|
</span><span id="__span-2-9"><a id="__codelineno-2-9" name="__codelineno-2-9" href="#__codelineno-2-9"></a> │ platform-browser-dynamic|platform-server|router|service-worker|
|
|
</span><span id="__span-2-10"><a id="__codelineno-2-10" name="__codelineno-2-10" href="#__codelineno-2-10"></a> │ upgrade|zone.js|packaging|changelog|docs-infra|migrations|ngcc|ve|
|
|
</span><span id="__span-2-11"><a id="__codelineno-2-11" name="__codelineno-2-11" href="#__codelineno-2-11"></a> │ devtools....
|
|
</span><span id="__span-2-12"><a id="__codelineno-2-12" name="__codelineno-2-12" href="#__codelineno-2-12"></a> │
|
|
</span><span id="__span-2-13"><a id="__codelineno-2-13" name="__codelineno-2-13" href="#__codelineno-2-13"></a> └─⫸ Commit Type: build|ci|doc|docs|feat|fix|perf|refactor|test
|
|
</span><span id="__span-2-14"><a id="__codelineno-2-14" name="__codelineno-2-14" href="#__codelineno-2-14"></a> website|chore|style|type|revert|deprecate
|
|
</span></code></pre></div>
|
|
<p><br /></p>
|
|
<h3 id="committing">Committing<a class="headerlink" href="#committing" title="Permanent link">¶</a></h3>
|
|
<p>If you are pushing a commit which addresses a submitted issue, reference your issue at the end of the commit message. You may also optionally add the major issue to the end of your commit body.</p>
|
|
<p>References should be on their own line, following the word <code>Ref</code> or <code>Refs</code></p>
|
|
<div class="language-text highlight"><pre><span></span><code><span id="__span-3-1"><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a>Title: fix(core): fix error message displayed to users. [#22]
|
|
</span><span id="__span-3-2"><a id="__codelineno-3-2" name="__codelineno-3-2" href="#__codelineno-3-2"></a>Description: The description of your commit
|
|
</span><span id="__span-3-3"><a id="__codelineno-3-3" name="__codelineno-3-3" href="#__codelineno-3-3"></a>
|
|
</span><span id="__span-3-4"><a id="__codelineno-3-4" name="__codelineno-3-4" href="#__codelineno-3-4"></a> Ref: #22, #34, #37
|
|
</span></code></pre></div>
|
|
<p><br />
|
|
<br /></p>
|
|
<h3 id="languages">Languages<a class="headerlink" href="#languages" title="Permanent link">¶</a></h3>
|
|
<p>The formatting of code greatly depends on the language being used for this repository. We provide various different languages below as this guide is utilized across multiple repositories.</p>
|
|
<ul>
|
|
<li><a href="#python">Python</a></li>
|
|
<li><a href="#nodejs">Javascript / Typescript / NodeJS</a></li>
|
|
</ul>
|
|
<p><br />
|
|
<br /></p>
|
|
<h4 id="python">Python<a class="headerlink" href="#python" title="Permanent link">¶</a></h4>
|
|
<p>The following guidelines apply to any projects written with Python:</p>
|
|
<p><br /></p>
|
|
<h5 id="indentation">Indentation<a class="headerlink" href="#indentation" title="Permanent link">¶</a></h5>
|
|
<p>Use <code>4 spaces</code> per indentation level.</p>
|
|
<p><br /></p>
|
|
<blockquote>
|
|
<p>[!TIP]
|
|
✅ Correct
|
|
<div class="language-python highlight"><pre><span></span><code><span id="__span-4-1"><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a><span class="k">def</span><span class="w"> </span><span class="nf">Encrypt</span><span class="p">(</span> <span class="n">key</span> <span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">bytestr</span> <span class="p">:</span> <span class="nb">bytes</span> <span class="p">):</span>
|
|
</span><span id="__span-4-2"><a id="__codelineno-4-2" name="__codelineno-4-2" href="#__codelineno-4-2"></a> <span class="n">res</span> <span class="o">=</span> <span class="sa">b</span><span class="s1">''</span>
|
|
</span><span id="__span-4-3"><a id="__codelineno-4-3" name="__codelineno-4-3" href="#__codelineno-4-3"></a> <span class="n">i_blk</span><span class="p">,</span> <span class="n">left_bytes</span> <span class="o">=</span> <span class="nb">divmod</span><span class="p">(</span> <span class="nb">len</span><span class="p">(</span><span class="n">bytestr</span><span class="p">),</span> <span class="mi">3</span> <span class="p">)</span>
|
|
</span></code></pre></div></p>
|
|
</blockquote>
|
|
<p><br /></p>
|
|
<blockquote>
|
|
<p>[!CAUTION]
|
|
❌ Wrong
|
|
<div class="language-python highlight"><pre><span></span><code><span id="__span-5-1"><a id="__codelineno-5-1" name="__codelineno-5-1" href="#__codelineno-5-1"></a><span class="k">def</span><span class="w"> </span><span class="nf">encrypt</span><span class="p">(</span> <span class="n">key</span> <span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">byteStr</span> <span class="p">:</span> <span class="nb">bytes</span> <span class="p">):</span>
|
|
</span><span id="__span-5-2"><a id="__codelineno-5-2" name="__codelineno-5-2" href="#__codelineno-5-2"></a> <span class="n">Res</span> <span class="o">=</span> <span class="sa">b</span><span class="s1">''</span>
|
|
</span><span id="__span-5-3"><a id="__codelineno-5-3" name="__codelineno-5-3" href="#__codelineno-5-3"></a> <span class="n">iBlk</span><span class="p">,</span> <span class="n">leftBytes</span> <span class="o">=</span> <span class="nb">divmod</span><span class="p">(</span> <span class="nb">len</span><span class="p">(</span><span class="n">byteStr</span><span class="p">),</span> <span class="mi">3</span> <span class="p">)</span>
|
|
</span></code></pre></div></p>
|
|
</blockquote>
|
|
<p><br /></p>
|
|
<h5 id="line-length">Line Length<a class="headerlink" href="#line-length" title="Permanent link">¶</a></h5>
|
|
<p>Keep the maximum character count to <code>100 characters per line</code>. If you are revising old code which doesn't follow this guideline; please rewrite it to conform.</p>
|
|
<p><br /></p>
|
|
<h5 id="blank-lines">Blank Lines<a class="headerlink" href="#blank-lines" title="Permanent link">¶</a></h5>
|
|
<p>Surround top-level functions and class definitions with a blank in-between.</p>
|
|
<p>Method definitions inside a class are surrounded by a single blank line.</p>
|
|
<p>Extra blank lines may be used (sparingly) to separate groups of functions related to one another. Blank lines may be omitted between a bunch of related one-liners (e.g: set of dummy implementations).</p>
|
|
<p><br /></p>
|
|
<h5 id="imports">Imports<a class="headerlink" href="#imports" title="Permanent link">¶</a></h5>
|
|
<p>Imports should usually be on separate lines:</p>
|
|
<p><br /></p>
|
|
<blockquote>
|
|
<p>[!TIP]
|
|
✅ Correct
|
|
<div class="language-python highlight"><pre><span></span><code><span id="__span-6-1"><a id="__codelineno-6-1" name="__codelineno-6-1" href="#__codelineno-6-1"></a><span class="kn">import</span><span class="w"> </span><span class="nn">os</span>
|
|
</span><span id="__span-6-2"><a id="__codelineno-6-2" name="__codelineno-6-2" href="#__codelineno-6-2"></a><span class="kn">import</span><span class="w"> </span><span class="nn">sys</span>
|
|
</span></code></pre></div></p>
|
|
</blockquote>
|
|
<p><br /></p>
|
|
<blockquote>
|
|
<p>[!CAUTION]
|
|
❌ Wrong
|
|
<div class="language-python highlight"><pre><span></span><code><span id="__span-7-1"><a id="__codelineno-7-1" name="__codelineno-7-1" href="#__codelineno-7-1"></a><span class="kn">import</span><span class="w"> </span><span class="nn">sys</span><span class="o">,</span><span class="w"> </span><span class="nn">os</span>
|
|
</span></code></pre></div></p>
|
|
</blockquote>
|
|
<p><br /></p>
|
|
<p>The following is acceptable:</p>
|
|
<p><br /></p>
|
|
<blockquote>
|
|
<p>[!TIP]
|
|
✅ Correct
|
|
<div class="language-python highlight"><pre><span></span><code><span id="__span-8-1"><a id="__codelineno-8-1" name="__codelineno-8-1" href="#__codelineno-8-1"></a><span class="kn">from</span><span class="w"> </span><span class="nn">mypkg</span><span class="w"> </span><span class="kn">import</span> <span class="n">siblingA</span><span class="p">,</span> <span class="n">siblingB</span><span class="p">,</span> <span class="n">siblingC</span>
|
|
</span></code></pre></div></p>
|
|
</blockquote>
|
|
<p><br /></p>
|
|
<h5 id="commenting">Commenting<a class="headerlink" href="#commenting" title="Permanent link">¶</a></h5>
|
|
<p>Comment your code. It helps novice readers to better understand the process. It doesn't have to be painfully obvious explanations, but it helps to give an idea of what something does.</p>
|
|
<p>Please append <code>#</code> to the beginning of each line.</p>
|
|
<div class="language-python highlight"><pre><span></span><code><span id="__span-9-1"><a id="__codelineno-9-1" name="__codelineno-9-1" href="#__codelineno-9-1"></a><span class="c1"># #</span>
|
|
</span><span id="__span-9-2"><a id="__codelineno-9-2" name="__codelineno-9-2" href="#__codelineno-9-2"></a><span class="c1"># byteString : b'1#Aetherx|232#1#233262#0#0#0#'</span>
|
|
</span><span id="__span-9-3"><a id="__codelineno-9-3" name="__codelineno-9-3" href="#__codelineno-9-3"></a><span class="c1"># #</span>
|
|
</span><span id="__span-9-4"><a id="__codelineno-9-4" name="__codelineno-9-4" href="#__codelineno-9-4"></a>
|
|
</span><span id="__span-9-5"><a id="__codelineno-9-5" name="__codelineno-9-5" href="#__codelineno-9-5"></a><span class="k">def</span><span class="w"> </span><span class="nf">Encrypt</span><span class="p">(</span> <span class="n">key</span> <span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">byteString</span> <span class="p">:</span> <span class="nb">bytes</span> <span class="p">):</span>
|
|
</span><span id="__span-9-6"><a id="__codelineno-9-6" name="__codelineno-9-6" href="#__codelineno-9-6"></a> <span class="n">res</span> <span class="o">=</span> <span class="nb">bytearray</span><span class="p">(</span> <span class="p">)</span>
|
|
</span></code></pre></div>
|
|
<p><br /></p>
|
|
<p><br /></p>
|
|
<h5 id="casing">Casing<a class="headerlink" href="#casing" title="Permanent link">¶</a></h5>
|
|
<ul>
|
|
<li>Stick to <code>camelCase</code>; unless:</li>
|
|
<li>naming functions, capitalize the first letter</li>
|
|
<li>Capitalize enums</li>
|
|
<li>If you see code not conforming with this, please revise it in your pull request.</li>
|
|
</ul>
|
|
<p><br /></p>
|
|
<blockquote>
|
|
<p>[!TIP]
|
|
✅ Correct
|
|
<div class="language-python highlight"><pre><span></span><code><span id="__span-10-1"><a id="__codelineno-10-1" name="__codelineno-10-1" href="#__codelineno-10-1"></a><span class="k">def</span><span class="w"> </span><span class="nf">Encrypt</span><span class="p">(</span> <span class="n">key</span> <span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">byteStr</span> <span class="p">:</span> <span class="nb">bytes</span> <span class="p">):</span>
|
|
</span><span id="__span-10-2"><a id="__codelineno-10-2" name="__codelineno-10-2" href="#__codelineno-10-2"></a> <span class="n">res</span> <span class="o">=</span> <span class="sa">b</span><span class="s1">''</span>
|
|
</span><span id="__span-10-3"><a id="__codelineno-10-3" name="__codelineno-10-3" href="#__codelineno-10-3"></a> <span class="n">iBlock</span><span class="p">,</span> <span class="n">leftBytes</span> <span class="o">=</span> <span class="nb">divmod</span><span class="p">(</span> <span class="nb">len</span><span class="p">(</span><span class="n">byteStr</span><span class="p">),</span> <span class="mi">3</span> <span class="p">)</span>
|
|
</span></code></pre></div></p>
|
|
</blockquote>
|
|
<p><br /></p>
|
|
<blockquote>
|
|
<p>[!CAUTION]
|
|
❌ Wrong
|
|
<div class="language-python highlight"><pre><span></span><code><span id="__span-11-1"><a id="__codelineno-11-1" name="__codelineno-11-1" href="#__codelineno-11-1"></a><span class="k">def</span><span class="w"> </span><span class="nf">encrypt</span><span class="p">(</span> <span class="n">key</span> <span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">bytestr</span> <span class="p">:</span> <span class="nb">bytes</span> <span class="p">):</span>
|
|
</span><span id="__span-11-2"><a id="__codelineno-11-2" name="__codelineno-11-2" href="#__codelineno-11-2"></a> <span class="n">res</span> <span class="o">=</span> <span class="sa">b</span><span class="s1">''</span>
|
|
</span><span id="__span-11-3"><a id="__codelineno-11-3" name="__codelineno-11-3" href="#__codelineno-11-3"></a> <span class="n">i_blk</span><span class="p">,</span> <span class="n">left_bytes</span> <span class="o">=</span> <span class="nb">divmod</span><span class="p">(</span> <span class="nb">len</span><span class="p">(</span><span class="n">bytestr</span><span class="p">),</span> <span class="mi">3</span> <span class="p">)</span>
|
|
</span></code></pre></div></p>
|
|
</blockquote>
|
|
<p><br /></p>
|
|
<p><br /></p>
|
|
<div align="center">
|
|
|
|
**[`^ back to top ^`](#about)**
|
|
|
|
</div>
|
|
|
|
<p><br /></p>
|
|
<hr />
|
|
<p><br /></p>
|
|
<h4 id="nodejs">NodeJS<a class="headerlink" href="#nodejs" title="Permanent link">¶</a></h4>
|
|
<p>The following allows you to configure ESLint and Prettier.</p>
|
|
<p><br />
|
|
<br /></p>
|
|
<h5 id="prettier">Prettier<a class="headerlink" href="#prettier" title="Permanent link">¶</a></h5>
|
|
<p>We have opted to make use of <a href="#eslint">ESLint</a> over Prettier. We provide a detailed ESLint flag config file with very specific linting rules. Please review that section for more information.</p>
|
|
<p><br />
|
|
<br /></p>
|
|
<h5 id="eslint">ESLint<a class="headerlink" href="#eslint" title="Permanent link">¶</a></h5>
|
|
<p>Within the root folder of the repo, there are several configuration files which you should be using within the project. These files dictate how prettier and eslint will behave and what is acceptable / not acceptable.</p>
|
|
<p><br /></p>
|
|
<p>Pick the config file below depending on which version of ESLint you are using. The v8 and older <code>.eslint</code> may not be there if we have migrated over to an Eslint v9 flat config file:</p>
|
|
<p><br /></p>
|
|
<h6 id="v9-newer-config">v9 & Newer (Config)<a class="headerlink" href="#v9-newer-config" title="Permanent link">¶</a></h6>
|
|
<p>Our NodeJS applications require that you utilize ESLint v9 or newer which makes use of a flat config structure. You may find a copy of our flat config at the link below:</p>
|
|
<ul>
|
|
<li><a href="https://github.com/thebinaryninja/tvapp2/blob/main/tvapp2/eslint.config.mjs">📄 eslint.config.mjs</a></li>
|
|
</ul>
|
|
<p><br /></p>
|
|
<h6 id="v8-older-config">v8 & Older (Config)<a class="headerlink" href="#v8-older-config" title="Permanent link">¶</a></h6>
|
|
<ul>
|
|
<li>We no longer utilize any version of ESLint older than version 9.</li>
|
|
</ul>
|
|
<p><br />
|
|
<br /></p>
|
|
<blockquote>
|
|
<p>[!NOTE]
|
|
When submitting your pull request, these linting and style rules will be verified with all of your files. If you did not follow these rules; the linter tests on your pull request will fail; and you'll be expected to correct these issues before your submission will be transferred over for human review.</p>
|
|
</blockquote>
|
|
<p><br />
|
|
<br /></p>
|
|
<h5 id="packages">Packages<a class="headerlink" href="#packages" title="Permanent link">¶</a></h5>
|
|
<p>We use the following packages for linting and prettier.</p>
|
|
<p><br /></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Package</th>
|
|
<th>Repo File</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td><a href="https://npmjs.com/package/@stylistic/eslint-plugin-js">@stylistic/eslint-plugin-js</a></td>
|
|
<td><a href="./package.json">package.json</a></td>
|
|
<td>JavaScript stylistic rules for ESLint, migrated from eslint core.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><a href="https://npmjs.com/package/@stylistic/eslint-plugin-ts">@stylistic/eslint-plugin-ts</a></td>
|
|
<td><a href="./package.json">package.json</a></td>
|
|
<td>TypeScript stylistic rules for ESLint, migrated from typescript-eslint.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><a href="https://npmjs.com/package/@stylistic/eslint-plugin-plus">@stylistic/eslint-plugin-plus</a></td>
|
|
<td><a href="./package.json">package.json</a></td>
|
|
<td>Supplementary rules introduced by ESLint Stylistic.</td>
|
|
</tr>
|
|
<tr>
|
|
<td><a href="https://npmjs.com/package/eslint-plugin-prettier">eslint-plugin-prettier</a></td>
|
|
<td><a href="./package.json">package.json</a></td>
|
|
<td>Runs Prettier as an ESLint rule and reports differences as individual ESLint issues.</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p><br /></p>
|
|
<p>You can add the following to your <code>package.json</code> file:</p>
|
|
<p><a href="https://github.com/TheBinaryNinja/tvapp2/blob/1c75f11e9f0506ad3dd05133fdafc3aeb87686ca/tvapp2/package.json#L81-L92">https://github.com/TheBinaryNinja/tvapp2/blob/1c75f11e9f0506ad3dd05133fdafc3aeb87686ca/tvapp2/package.json#L81-L92</a></p>
|
|
<p><br />
|
|
<br /></p>
|
|
<h5 id="indentation_1">Indentation<a class="headerlink" href="#indentation_1" title="Permanent link">¶</a></h5>
|
|
<p>Use <code>4 spaces</code> per indentation level.</p>
|
|
<p><br />
|
|
<br /></p>
|
|
<h5 id="style">Style<a class="headerlink" href="#style" title="Permanent link">¶</a></h5>
|
|
<p>For files that are not controlled by <a href="#prettier">Prettier</a> or <a href="#eslint">ESLint</a>; use <code>Allman Style</code>. Braces should be on their own lines, and any code inside the braces should be indented 4 spaces.</p>
|
|
<p><br /></p>
|
|
<div class="language-javascript highlight"><pre><span></span><code><span id="__span-12-1"><a id="__codelineno-12-1" name="__codelineno-12-1" href="#__codelineno-12-1"></a><span class="k">return</span><span class="w"> </span><span class="p">{</span>
|
|
</span><span id="__span-12-2"><a id="__codelineno-12-2" name="__codelineno-12-2" href="#__codelineno-12-2"></a><span class="w"> </span><span class="nx">status</span><span class="o">:</span><span class="w"> </span><span class="s2">"failure"</span><span class="p">,</span>
|
|
</span><span id="__span-12-3"><a id="__codelineno-12-3" name="__codelineno-12-3" href="#__codelineno-12-3"></a><span class="w"> </span><span class="nx">user</span><span class="o">:</span>
|
|
</span><span id="__span-12-4"><a id="__codelineno-12-4" name="__codelineno-12-4" href="#__codelineno-12-4"></a><span class="w"> </span><span class="p">{</span>
|
|
</span><span id="__span-12-5"><a id="__codelineno-12-5" name="__codelineno-12-5" href="#__codelineno-12-5"></a><span class="w"> </span><span class="nx">id</span><span class="o">:</span><span class="w"> </span><span class="s2">"1aaa35aa-fb3a-62ae-ffec-a14g7fc401ac"</span><span class="p">,</span>
|
|
</span><span id="__span-12-6"><a id="__codelineno-12-6" name="__codelineno-12-6" href="#__codelineno-12-6"></a><span class="w"> </span><span class="nx">label</span><span class="o">:</span><span class="w"> </span><span class="s2">"Test String"</span><span class="p">,</span>
|
|
</span><span id="__span-12-7"><a id="__codelineno-12-7" name="__codelineno-12-7" href="#__codelineno-12-7"></a><span class="w"> </span><span class="p">}</span>
|
|
</span><span id="__span-12-8"><a id="__codelineno-12-8" name="__codelineno-12-8" href="#__codelineno-12-8"></a><span class="p">};</span>
|
|
</span><span id="__span-12-9"><a id="__codelineno-12-9" name="__codelineno-12-9" href="#__codelineno-12-9"></a>
|
|
</span><span id="__span-12-10"><a id="__codelineno-12-10" name="__codelineno-12-10" href="#__codelineno-12-10"></a><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="nx">x</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nx">y</span><span class="p">)</span>
|
|
</span><span id="__span-12-11"><a id="__codelineno-12-11" name="__codelineno-12-11" href="#__codelineno-12-11"></a><span class="p">{</span>
|
|
</span><span id="__span-12-12"><a id="__codelineno-12-12" name="__codelineno-12-12" href="#__codelineno-12-12"></a><span class="w"> </span><span class="nx">foo</span><span class="p">();</span>
|
|
</span><span id="__span-12-13"><a id="__codelineno-12-13" name="__codelineno-12-13" href="#__codelineno-12-13"></a><span class="w"> </span><span class="nx">bar</span><span class="p">();</span>
|
|
</span><span id="__span-12-14"><a id="__codelineno-12-14" name="__codelineno-12-14" href="#__codelineno-12-14"></a><span class="p">}</span>
|
|
</span></code></pre></div>
|
|
<p><br />
|
|
<br /></p>
|
|
<h5 id="line-length_1">Line Length<a class="headerlink" href="#line-length_1" title="Permanent link">¶</a></h5>
|
|
<p>Keep the maximum character count to <code>100 characters per line</code>. The configs on this page have prettier automatically set up to detect more than 100 characters per line.</p>
|
|
<p><br /></p>
|
|
<h5 id="commenting_1">Commenting<a class="headerlink" href="#commenting_1" title="Permanent link">¶</a></h5>
|
|
<p>Comment your code. It helps novice readers to better understand the process. You may use block style commenting, or single lines:</p>
|
|
<div class="language-javascript highlight"><pre><span></span><code><span id="__span-13-1"><a id="__codelineno-13-1" name="__codelineno-13-1" href="#__codelineno-13-1"></a><span class="cm">/*</span>
|
|
</span><span id="__span-13-2"><a id="__codelineno-13-2" name="__codelineno-13-2" href="#__codelineno-13-2"></a><span class="cm"> tests to decide if the end-user is running on Darwin or another platform.</span>
|
|
</span><span id="__span-13-3"><a id="__codelineno-13-3" name="__codelineno-13-3" href="#__codelineno-13-3"></a><span class="cm">*/</span>
|
|
</span><span id="__span-13-4"><a id="__codelineno-13-4" name="__codelineno-13-4" href="#__codelineno-13-4"></a>
|
|
</span><span id="__span-13-5"><a id="__codelineno-13-5" name="__codelineno-13-5" href="#__codelineno-13-5"></a><span class="nx">test</span><span class="p">(</span><span class="sb">`Return true if platform is Darwin`</span><span class="p">,</span><span class="w"> </span><span class="p">()</span><span class="w"> </span><span class="p">=></span><span class="w"> </span><span class="p">{</span>
|
|
</span><span id="__span-13-6"><a id="__codelineno-13-6" name="__codelineno-13-6" href="#__codelineno-13-6"></a><span class="w"> </span><span class="nx">process</span><span class="p">.</span><span class="nx">platform</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'darwin'</span><span class="p">;</span>
|
|
</span><span id="__span-13-7"><a id="__codelineno-13-7" name="__codelineno-13-7" href="#__codelineno-13-7"></a><span class="w"> </span><span class="nx">expect</span><span class="p">(</span><span class="nx">bIsDarwin</span><span class="p">()).</span><span class="nx">toBe</span><span class="p">(</span><span class="kc">true</span><span class="p">);</span>
|
|
</span><span id="__span-13-8"><a id="__codelineno-13-8" name="__codelineno-13-8" href="#__codelineno-13-8"></a><span class="p">});</span>
|
|
</span><span id="__span-13-9"><a id="__codelineno-13-9" name="__codelineno-13-9" href="#__codelineno-13-9"></a>
|
|
</span><span id="__span-13-10"><a id="__codelineno-13-10" name="__codelineno-13-10" href="#__codelineno-13-10"></a><span class="nx">test</span><span class="p">(</span><span class="sb">`Return false if platform is not Darwin`</span><span class="p">,</span><span class="w"> </span><span class="p">()</span><span class="w"> </span><span class="p">=></span><span class="w"> </span><span class="p">{</span>
|
|
</span><span id="__span-13-11"><a id="__codelineno-13-11" name="__codelineno-13-11" href="#__codelineno-13-11"></a><span class="w"> </span><span class="nx">process</span><span class="p">.</span><span class="nx">platform</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'linux'</span><span class="p">;</span>
|
|
</span><span id="__span-13-12"><a id="__codelineno-13-12" name="__codelineno-13-12" href="#__codelineno-13-12"></a><span class="w"> </span><span class="nx">expect</span><span class="p">(</span><span class="nx">bIsDarwin</span><span class="p">()).</span><span class="nx">toBe</span><span class="p">(</span><span class="kc">false</span><span class="p">);</span>
|
|
</span><span id="__span-13-13"><a id="__codelineno-13-13" name="__codelineno-13-13" href="#__codelineno-13-13"></a><span class="p">});</span>
|
|
</span></code></pre></div>
|
|
<p><br /></p>
|
|
<h5 id="casing_1">Casing<a class="headerlink" href="#casing_1" title="Permanent link">¶</a></h5>
|
|
<p>Stick to <code>camelCase</code> as much as possible. </p>
|
|
<div class="language-javascript highlight"><pre><span></span><code><span id="__span-14-1"><a id="__codelineno-14-1" name="__codelineno-14-1" href="#__codelineno-14-1"></a><span class="kd">let</span><span class="w"> </span><span class="nx">myVar</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'one'</span><span class="p">;</span>
|
|
</span><span id="__span-14-2"><a id="__codelineno-14-2" name="__codelineno-14-2" href="#__codelineno-14-2"></a><span class="kd">let</span><span class="w"> </span><span class="nx">secondVar</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'two'</span><span class="p">;</span>
|
|
</span></code></pre></div>
|
|
<p><br /></p>
|
|
<p>If you are defining a new environment variable; it must be in ALL CAPS in the <code>Dockerfile</code>:</p>
|
|
<div class="language-dockerfile highlight"><pre><span></span><code><span id="__span-15-1"><a id="__codelineno-15-1" name="__codelineno-15-1" href="#__codelineno-15-1"></a><span class="k">ENV</span><span class="w"> </span><span class="nv">DIR_BUILD</span><span class="o">=</span>/usr/src/app
|
|
</span><span id="__span-15-2"><a id="__codelineno-15-2" name="__codelineno-15-2" href="#__codelineno-15-2"></a><span class="k">ENV</span><span class="w"> </span><span class="nv">DIR_RUN</span><span class="o">=</span>/usr/bin/app
|
|
</span><span id="__span-15-3"><a id="__codelineno-15-3" name="__codelineno-15-3" href="#__codelineno-15-3"></a><span class="k">ENV</span><span class="w"> </span><span class="nv">URL_REPO</span><span class="o">=</span><span class="s2">"https://git.binaryninja.net/binaryninja/"</span>
|
|
</span><span id="__span-15-4"><a id="__codelineno-15-4" name="__codelineno-15-4" href="#__codelineno-15-4"></a><span class="k">ENV</span><span class="w"> </span><span class="nv">WEB_IP</span><span class="o">=</span><span class="s2">"0.0.0.0"</span>
|
|
</span><span id="__span-15-5"><a id="__codelineno-15-5" name="__codelineno-15-5" href="#__codelineno-15-5"></a><span class="k">ENV</span><span class="w"> </span><span class="nv">WEB_PORT</span><span class="o">=</span><span class="m">4124</span>
|
|
</span><span id="__span-15-6"><a id="__codelineno-15-6" name="__codelineno-15-6" href="#__codelineno-15-6"></a><span class="k">ENV</span><span class="w"> </span><span class="nv">STREAM_QUALITY</span><span class="o">=</span><span class="s2">"hd"</span>
|
|
</span><span id="__span-15-7"><a id="__codelineno-15-7" name="__codelineno-15-7" href="#__codelineno-15-7"></a><span class="k">ENV</span><span class="w"> </span><span class="nv">FILE_PLAYLIST</span><span class="o">=</span><span class="s2">"playlist.m3u8"</span>
|
|
</span><span id="__span-15-8"><a id="__codelineno-15-8" name="__codelineno-15-8" href="#__codelineno-15-8"></a><span class="k">ENV</span><span class="w"> </span><span class="nv">FILE_EPG</span><span class="o">=</span><span class="s2">"xmltv.xml"</span>
|
|
</span><span id="__span-15-9"><a id="__codelineno-15-9" name="__codelineno-15-9" href="#__codelineno-15-9"></a><span class="k">ENV</span><span class="w"> </span><span class="nv">LOG_LEVEL</span><span class="o">=</span><span class="m">4</span>
|
|
</span><span id="__span-15-10"><a id="__codelineno-15-10" name="__codelineno-15-10" href="#__codelineno-15-10"></a><span class="k">ENV</span><span class="w"> </span><span class="nv">TZ</span><span class="o">=</span><span class="s2">"Etc/UTC"</span>
|
|
</span></code></pre></div>
|
|
<p><br /></p>
|
|
<p>Then you may call your new environment variable within the Javascript code; and ensure you define a default value to correct any user misconfigurations:</p>
|
|
<div class="language-javascript highlight"><pre><span></span><code><span id="__span-16-1"><a id="__codelineno-16-1" name="__codelineno-16-1" href="#__codelineno-16-1"></a><span class="kd">const</span><span class="w"> </span><span class="nx">envUrlRepo</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">process</span><span class="p">.</span><span class="nx">env</span><span class="p">.</span><span class="nx">URL_REPO</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="s1">'https://git.binaryninja.net/binaryninja'</span><span class="p">;</span>
|
|
</span><span id="__span-16-2"><a id="__codelineno-16-2" name="__codelineno-16-2" href="#__codelineno-16-2"></a><span class="kd">const</span><span class="w"> </span><span class="nx">envStreamQuality</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">process</span><span class="p">.</span><span class="nx">env</span><span class="p">.</span><span class="nx">STREAM_QUALITY</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="s1">'hd'</span><span class="p">;</span>
|
|
</span><span id="__span-16-3"><a id="__codelineno-16-3" name="__codelineno-16-3" href="#__codelineno-16-3"></a><span class="kd">const</span><span class="w"> </span><span class="nx">envFileM3U</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">process</span><span class="p">.</span><span class="nx">env</span><span class="p">.</span><span class="nx">FILE_PLAYLIST</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="s1">'playlist.m3u8'</span><span class="p">;</span>
|
|
</span><span id="__span-16-4"><a id="__codelineno-16-4" name="__codelineno-16-4" href="#__codelineno-16-4"></a><span class="kd">const</span><span class="w"> </span><span class="nx">envFileXML</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">process</span><span class="p">.</span><span class="nx">env</span><span class="p">.</span><span class="nx">FILE_EPG</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="s1">'xmltv.xml'</span><span class="p">;</span>
|
|
</span><span id="__span-16-5"><a id="__codelineno-16-5" name="__codelineno-16-5" href="#__codelineno-16-5"></a><span class="kd">const</span><span class="w"> </span><span class="nx">envFileTAR</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">process</span><span class="p">.</span><span class="nx">env</span><span class="p">.</span><span class="nx">FILE_TAR</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="s1">'xmltv.xml.gz'</span><span class="p">;</span>
|
|
</span></code></pre></div>
|
|
<p><br />
|
|
<br /></p>
|
|
<div align="center">
|
|
|
|
**[`^ back to top ^`](#about)**
|
|
|
|
</div>
|
|
|
|
<p><br />
|
|
<br /></p>
|
|
<p><br />
|
|
<br /></p>
|
|
<!-- prettier-ignore-start -->
|
|
<!-- markdownlint-disable -->
|
|
|
|
<!-- BADGE > GENERAL -->
|
|
<!-- BADGE > VERSION > GITHUB -->
|
|
<!-- BADGE > LICENSE > MIT -->
|
|
<!-- BADGE > GITHUB > DOWNLOAD COUNT -->
|
|
<!-- BADGE > GITHUB > DOWNLOAD SIZE -->
|
|
<!-- BADGE > ALL CONTRIBUTORS -->
|
|
<!-- BADGE > GITHUB > BUILD > NPM -->
|
|
<!-- BADGE > GITHUB > BUILD > Pypi -->
|
|
<!-- BADGE > GITHUB > TESTS -->
|
|
<!-- BADGE > GITHUB > COMMIT -->
|
|
<!-- BADGE > Github > Docker Image > SELFHOSTED BADGES -->
|
|
<!-- BADGE > Dockerhub > Docker Image -->
|
|
<!-- BADGE > Gitea > Docker Image > SELFHOSTED BADGES -->
|
|
<!-- BADGE > Gitea 2 > Docker Image -->
|
|
<!-- BADGE > BUTTON > SUBMIT ISSUES -->
|
|
<!-- prettier-ignore-end -->
|
|
<!-- markdownlint-restore -->
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<aside class="md-source-file">
|
|
|
|
|
|
<span class="md-source-file__fact">
|
|
<span class="md-icon" title="Last update">
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg>
|
|
</span>
|
|
<span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago" title="April 5, 2025 15:55:16"><span class="timeago" datetime="2025-04-05T15:55:16+00:00" locale="en"></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date" title="April 5, 2025 15:55:16">2025-04-05</span>
|
|
</span>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<span class="md-source-file__fact">
|
|
<span class="md-icon" title="Contributors">
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 4a4 4 0 0 1 4 4 4 4 0 0 1-4 4 4 4 0 0 1-4-4 4 4 0 0 1 4-4m0 10c4.42 0 8 1.79 8 4v2H4v-2c0-2.21 3.58-4 8-4Z"/></svg>
|
|
|
|
</span>
|
|
<nav>
|
|
|
|
<a href="mailto:aetherinox@proton.me">Aetherinox</a>
|
|
</nav>
|
|
</span>
|
|
|
|
|
|
|
|
|
|
<span class="md-source-file__fact">
|
|
|
|
|
|
<span class="md-icon" title="Contributors">
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33.85 0 1.71.11 2.5.33 1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2Z"/></svg>
|
|
</span>
|
|
<span>GitHub</span>
|
|
|
|
|
|
<nav>
|
|
|
|
<a href="https://github.com/Aetherinox" class="md-author" title="@Aetherinox">
|
|
|
|
<img src="https://avatars.githubusercontent.com/u/118329232?v=4&size=72" alt="Aetherinox">
|
|
</a>
|
|
|
|
|
|
|
|
</nav>
|
|
</span>
|
|
|
|
|
|
</aside>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</article>
|
|
</div>
|
|
|
|
|
|
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
|
|
</div>
|
|
|
|
<button type="button" class="md-top md-icon" data-md-component="top" hidden>
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg>
|
|
Back to top
|
|
</button>
|
|
|
|
</main>
|
|
|
|
<footer class="md-footer">
|
|
|
|
|
|
|
|
<nav class="md-footer__inner md-grid" aria-label="Footer" >
|
|
|
|
|
|
<a href="../what_is_tvapp/" class="md-footer__link md-footer__link--prev" aria-label="Previous: What Is TVApp2">
|
|
<div class="md-footer__button md-icon">
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
|
|
</div>
|
|
<div class="md-footer__title">
|
|
<span class="md-footer__direction">
|
|
Previous
|
|
</span>
|
|
<div class="md-ellipsis">
|
|
What Is TVApp2
|
|
</div>
|
|
</div>
|
|
</a>
|
|
|
|
|
|
|
|
<a href="../license/" class="md-footer__link md-footer__link--next" aria-label="Next: License">
|
|
<div class="md-footer__title">
|
|
<span class="md-footer__direction">
|
|
Next
|
|
</span>
|
|
<div class="md-ellipsis">
|
|
License
|
|
</div>
|
|
</div>
|
|
<div class="md-footer__button md-icon">
|
|
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg>
|
|
</div>
|
|
</a>
|
|
|
|
</nav>
|
|
|
|
|
|
<div class="md-footer-meta md-typeset">
|
|
<div class="md-footer-meta__inner md-grid">
|
|
<div class="md-copyright">
|
|
|
|
<div class="md-copyright__highlight">
|
|
Copyright © 2025 - BinaryNinja
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
<div class="md-social">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<a href="https://github.com/TheBinaryNinja/tvapp2" target="_blank" rel="noopener" title="github.com" class="md-social__link">
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
|
|
</a>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<a href="https://discord.gg/gTze6hRe" target="_blank" rel="noopener" title="discord.gg" class="md-social__link">
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M524.531 69.836a1.5 1.5 0 0 0-.764-.7A485.065 485.065 0 0 0 404.081 32.03a1.816 1.816 0 0 0-1.923.91 337.461 337.461 0 0 0-14.9 30.6 447.848 447.848 0 0 0-134.426 0 309.541 309.541 0 0 0-15.135-30.6 1.89 1.89 0 0 0-1.924-.91 483.689 483.689 0 0 0-119.688 37.107 1.712 1.712 0 0 0-.788.676C39.068 183.651 18.186 294.69 28.43 404.354a2.016 2.016 0 0 0 .765 1.375 487.666 487.666 0 0 0 146.825 74.189 1.9 1.9 0 0 0 2.063-.676A348.2 348.2 0 0 0 208.12 430.4a1.86 1.86 0 0 0-1.019-2.588 321.173 321.173 0 0 1-45.868-21.853 1.885 1.885 0 0 1-.185-3.126 251.047 251.047 0 0 0 9.109-7.137 1.819 1.819 0 0 1 1.9-.256c96.229 43.917 200.41 43.917 295.5 0a1.812 1.812 0 0 1 1.924.233 234.533 234.533 0 0 0 9.132 7.16 1.884 1.884 0 0 1-.162 3.126 301.407 301.407 0 0 1-45.89 21.83 1.875 1.875 0 0 0-1 2.611 391.055 391.055 0 0 0 30.014 48.815 1.864 1.864 0 0 0 2.063.7A486.048 486.048 0 0 0 610.7 405.729a1.882 1.882 0 0 0 .765-1.352c12.264-126.783-20.532-236.912-86.934-334.541ZM222.491 337.58c-28.972 0-52.844-26.587-52.844-59.239s23.409-59.241 52.844-59.241c29.665 0 53.306 26.82 52.843 59.239 0 32.654-23.41 59.241-52.843 59.241Zm195.38 0c-28.971 0-52.843-26.587-52.843-59.239s23.409-59.241 52.843-59.241c29.667 0 53.307 26.82 52.844 59.239 0 32.654-23.177 59.241-52.844 59.241Z"/></svg>
|
|
</a>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
</footer>
|
|
|
|
</div>
|
|
<div class="md-dialog" data-md-component="dialog">
|
|
<div class="md-dialog__inner md-typeset"></div>
|
|
</div>
|
|
|
|
<div class="md-progress" data-md-component="progress" role="progressbar"></div>
|
|
|
|
|
|
<div class="md-consent" data-md-component="consent" id="__consent" hidden>
|
|
<div class="md-consent__overlay"></div>
|
|
<aside class="md-consent__inner">
|
|
<form class="md-consent__form md-grid md-typeset" name="consent">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<h4>Cookie Consent</h4>
|
|
<p>We use cookies to recognize your repeated visits and preferences, as well as to measure the effectiveness of our documentation and whether users find what they're searching for. With your consent, you're helping us to make our documentation better.</p>
|
|
<input class="md-toggle" type="checkbox" id="__settings" >
|
|
<div class="md-consent__settings">
|
|
<ul class="task-list">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="task-list-item">
|
|
<label class="task-list-control">
|
|
<input type="checkbox" name="github" checked>
|
|
<span class="task-list-indicator"></span>
|
|
GitHub
|
|
</label>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
</ul>
|
|
</div>
|
|
<div class="md-consent__controls">
|
|
|
|
|
|
<button class="md-button md-button--primary">Accept</button>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<label class="md-button" for="__settings">Manage settings</label>
|
|
|
|
|
|
</div>
|
|
</form>
|
|
</aside>
|
|
</div>
|
|
<script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout((function(){document.querySelector("[data-md-component=consent]").hidden=!1}),250);var form=document.forms.consent;for(var action of["submit","reset"])form.addEventListener(action,(function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map((function(e){return[e,!0]})))),location.hash="",location.reload()}))</script>
|
|
|
|
|
|
|
|
<script id="__config" type="application/json">{"base": "../..", "features": ["navigation.tabs", "navigation.sections", "announce.dismiss", "toc.follow", "content.action.edit", "content.action.view", "content.tooltips", "search.highlight", "search.share", "search.suggest", "content.code.annotate", "content.code.select", "content.code.copy", "navigation.footer", "navigation.indexes", "navigation.instant", "navigation.instant.progress", "navigation.instant.prefetch", "navigation.instant.preview", "navigation.tracking", "navigation.path", "navigation.top"], "search": "../../assets/javascripts/workers/search.f8cc74c7.min.js", "tags": {"CSS": "css", "HTML5": "html", "JavaScript": "js"}, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": {"alias": true, "default": "latest", "provider": "mike"}}</script>
|
|
|
|
|
|
|
|
<script src="../../assets/javascripts/bundle.c8b220af.min.js"></script>
|
|
|
|
<script src="../../js/timeago.min.js"></script>
|
|
|
|
<script src="../../js/timeago_mkdocs_material.js"></script>
|
|
|
|
<script src="https://unpkg.com/tablesort@5.3.0/dist/tablesort.min.js"></script>
|
|
|
|
<script src="../../javascripts/tablesort.js"></script>
|
|
|
|
|
|
<script src="../../assets/javascripts/custom.129bd6ad.min.js"></script>
|
|
|
|
<script id="init-glightbox">const lightbox = GLightbox({"touchNavigation": true, "loop": false, "zoomable": true, "draggable": false, "openEffect": "zoom", "closeEffect": "zoom", "slideEffect": "slide"});
|
|
document$.subscribe(() => { lightbox.reload() });
|
|
</script></body>
|
|
</html> |