Add Markdownlint (#203)

* Add markdownlint-cli

This is an initial config but should be tweaked later as needed.

* Adhere to the new rules
This commit is contained in:
XhmikosR
2020-01-27 21:52:32 +02:00
committed by Dan Schaper
parent 0a80c3b685
commit 19a2bc0787
16 changed files with 418 additions and 51 deletions

7
.gitignore vendored
View File

@@ -1,5 +1,6 @@
*.iml
/.idea
.idea
site/
*.sw*
.idea
/.idea
/node_modules/
/site/

38
.markdownlint.json Normal file
View File

@@ -0,0 +1,38 @@
{
"default": true,
"MD003": {
"style": "atx"
},
"MD004": {
"style": "consistent"
},
"MD007": {
"indent": 4
},
"MD013": false,
"MD024": false,
"MD025": false,
"MD026": false,
"MD033": {
"allowed_elements": [
"a",
"br",
"code",
"img",
"strong",
"p",
"sub",
"table", "tbody", "th", "tr", "td"
]
},
"MD035": {
"style": "---"
},
"MD036": false,
"MD040": false,
"MD041": false,
"MD045": false,
"MD046": {
"style": "fenced"
}
}

View File

@@ -1,16 +1,18 @@
language: python
install:
- pip install -r requirements.txt
- pip install -r requirements.txt || travis_terminate 1
- npm ci
script:
- npm test || travis_terminate 1
- mkdocs build --verbose --clean
cache: pip
deploy:
provider: pages
keep-history: true
skip_cleanup: true
github_token: $GITHUB_TOKEN
local_dir: site
committer-from-gh: true
verbose: true
on:
branch: master
provider: pages
keep-history: true
skip_cleanup: true
github_token: $GITHUB_TOKEN
local_dir: site
committer-from-gh: true
verbose: true
on:
branch: master

View File

@@ -1,7 +1,10 @@
<p align="center">
<a href="https://pi-hole.net"><img src="https://pi-hole.github.io/graphics/Vortex/Vortex_with_text.png" width="150" height="255" alt="Pi-hole"></a>
<br/><br/>
<b>Network-wide ad blocking via your own Linux hardware</b><br/>
<p style="text-align: center;">
<a href="https://pi-hole.net">
<img src="https://pi-hole.github.io/graphics/Vortex/Vortex_with_text.png" width="150" height="255" alt="Pi-hole">
</a>
<br>
<strong>Network-wide ad blocking via your own Linux hardware</strong>
<br>
</p>
The Pi-hole[®](https://pi-hole.net/trademark-rules-and-brand-guidelines/) is a [DNS sinkhole](https://en.wikipedia.org/wiki/DNS_Sinkhole) that protects your devices from unwanted content, without installing any client-side software.
@@ -65,6 +68,6 @@ Please make sure you fork the repo and change the clone URL in the example below
docker run -v `pwd`:/opt/app/ -w /opt/app/ -p 8000:8000 -it python:2-alpine \
sh -c "pip install --user -r requirements.txt && \
/root/.local/bin/mkdocs serve --dev-addr 0.0.0.0:8000"
```
```
After these commands, the current branch is accessible through your favorite browser at http://localhost:8000
After these commands, the current branch is accessible through your favorite browser at <http://localhost:8000>

View File

@@ -8,7 +8,7 @@ last_updated: Sat Feb 09 00:00:00 2019 UTC
Docker runs in a separate network by default called a docker bridge network, which makes DHCP want to serve addresses to that network and not your LAN network where you probably want it. This document details why Docker Pi-hole DHCP is different from normal Pi-hole and how to fix the problem.
### Technical details
## Technical details
Docker's bridge network mode is default and recommended as a more secure setting for containers because docker is all about isolation, they isolate processes by default and the bridge network isolates the networking by default too. You gain access to the isolated container's service ports by using port forwards in your container's runtime config; for example `-p 67:67` is DHCP. However DHCP protocol operates through a network 'broadcast' which cannot span multiple networks (docker's bridge, and your LAN network). In order to get DHCP on to your network there are a few approaches:

View File

@@ -25,14 +25,14 @@ doubleclick.net. 2 IN AAAA ::
Following [RFC 3513, Internet Protocol Version 6 (IPv6) Addressing Architecture, section 2.5.2](https://tools.ietf.org/html/rfc3513#section-2.5.2), the address `0:0:0:0:0:0:0:0` (or `::` for short) is the unspecified address. It must never be assigned to any node and indicates the absence of an address. Following [RFC1122, section 3.2](https://tools.ietf.org/html/rfc1122#section-3.2), the address `0.0.0.0` can be understood as the IPv4 equivalent of `::`.
##### Advantages
### Advantages
- The client does not even try to establish a connection for the requested website
- Speedup and less traffic
- Solves potential HTTPS timeouts as requests are never performed
- No need to run a webserver on your Pi-hole (reduces complexity when running other web services on the same machine)
##### Disadvantage
### Disadvantage
- Blocking page cannot be shown and whitelisting has to be performed from the dashboard or CLI
@@ -54,12 +54,12 @@ Blocked queries will be answered with the local IPv4 addresses of your Pi-hole (
doubleclick.net. 2 IN A 192.168.2.11
```
##### Advantage
### Advantage
- Shows blocking page from which blocked domains can be whitelisted
- Serves IPv4-only replies and hence mitigates issues with rotating IPv6 prefixes
##### Disadvantages
### Disadvantages
- Requires a webserver to run on your Pi-hole
- May cause time-outs for HTTPS content even with properly configured firewall rules
@@ -83,11 +83,11 @@ doubleclick.net. 2 IN A 192.168.2.11
doubleclick.net. 2 IN AAAA fda2:2001:4756:0:ab27:beff:ef37:4242
```
##### Advantage
### Advantage
- Shows blocking page from which blocked domains can be whitelisted
##### Disadvantages
### Disadvantages
- Requires a webserver to run on your Pi-hole
- May cause time-outs for HTTPS content even with properly configured firewall rules
@@ -108,7 +108,7 @@ Blocked queries will be answered with an empty response (no answer section) and
;doubleclick.net. IN ANY
```
##### Advantages & Disadvantages
### Advantages & Disadvantages
Similar to `NULL` blocking, but experiments suggest that clients may try to resolve blocked domains more often compared to `NULL` blocking.
@@ -127,7 +127,7 @@ Blocked queries will be answered with an empty response (no answer section) and
;doubleclick.net. IN ANY
```
##### Advantages & Disadvantages
### Advantages & Disadvantages
Similar to `NXDOMAIN` blocking. Clients might have a better acceptance of `NODATA` replies compared to `NXDOMAIN` replies.

View File

@@ -5,13 +5,13 @@ We pre-compile *FTL*DNS for you to save you the trouble of compiling anything yo
First, we'll install the basic software you'll need to compile from source, like the GCC compiler and other utilities.
Install them by running the following command in a terminal:
###### Debian / Ubuntu / Raspbian
##### Debian / Ubuntu / Raspbian
```bash
sudo apt install build-essential libgmp-dev m4
```
###### Fedora
##### Fedora
```bash
sudo dnf install gcc gmp-devel gmp-static m4

View File

@@ -2,7 +2,7 @@
We provide a short but thorough introduction to our regular expressions implementation. This may come in handy if you are designing blocking rules (see also our cheat sheet below!). In our implementation, all characters match themselves except for the following special characters: `.[{}()\*+?|^$`. If you want to match those, you need to escape them like `\.` for a literal period, but no rule without exception (see character groups below for further details).
### Anchors (`^` and `$`)
## Anchors (`^` and `$`)
First of all, we look at anchors which can be used to indicate the start or the end of a domain, respectively. If you don't specify anchors, the match may be partial (see examples below).
@@ -13,7 +13,7 @@ Example | Interpretation
`^abc` | matches any domain **starting** (`^`) in "abc" like `abcdomain.com`, `abc.domain.com` but not `def.abc.com`
`com$` | matches any domain **ending** (`$`) in "com" such as `domain.com` but not `domain.com.co.uk`
### Wildcard (`.`)
## Wildcard (`.`)
An unescaped period stands for any *single* character.
@@ -21,7 +21,7 @@ Example | Interpretation
--- | ---
`^domain.$` | matches `domaina`, `domainb`, `domainc`, but not `domain`
### Bounds and multipliers (`{}`, `*`, `+`, and `?`)
## Bounds and multipliers (`{}`, `*`, `+`, and `?`)
With bounds, one can denote the number of times something has to occur:
@@ -48,7 +48,7 @@ Example | Interpretation
`^r-+movie` | matches only the domains with at least one dash, i.e., not `rmovie.com`
`^a?b+` | matches domains like `abbbb.com` (zero or one `a` at the beginning followed by one or more `b`)
### Character groups (`[]`)
## Character groups (`[]`)
With character groups, a set of characters can be matched:
@@ -65,7 +65,7 @@ Character group | Interpretation
Bracket expressions are an exception to the character escape rule. Inside them, all special characters, including the backslash (`\`), lose their special powers, i.e. they match themselves exactly. Furthermore, to include a literal `]` in the list, make it the first character (like `[]]` or `[^]]` if negated). To include a literal `-`, make it the first or last character, or the second endpoint of a range (e.g. `[a-z-]` to match `a` to `z` and `-`).
### Groups (`()`)
## Groups (`()`)
Using groups, we can enclose regular expressions, they are most powerful when combined with bounds or multipliers (see also alternations below).
@@ -75,7 +75,7 @@ Example | Interpretation
`(abc)*` | matches zero or more copies of `abc` like `abcabc` but not `abcdefabc`
`(abc){1,3}` | matches one, two or three copies of `abc`: `abc`, `abcabc`, `abcabcabc` but nothing else
### Alternations (`|`)
## Alternations (`|`)
Alternations can be used as an "or" operator in regular expressions.
@@ -85,7 +85,7 @@ Example | Interpretation
`domain(a|b)\.com` | matches `domaina.com` and `domainb.com` but not `domain.com` or `domainx.com`
`domain(a|b)*\.com` | matches `domain.com`, `domainaaaa.com` `domainbbb.com` but not `domainab.com` (any number of `a` or `b` in between `domain` and `.com`)
### Character classes (`[:class:]`)
## Character classes (`[:class:]`)
In addition to character groups, there are also some special character classes available, such as
@@ -97,11 +97,11 @@ Character class | Group equivalent | Interpretation
`[:alpha:]` | `[A-Za-z]` | matches alphabetic characters
`[:alnum:]` | `[A-Za-z0-9]` | matches alphabetic characters and digits
## Advanced examples
# Advanced examples
After going through our quick tutorial, we provide some more advances examples so you can test your knowledge.
### Block domain with only numbers
## Block domain with only numbers
```
^[0-9][^a-z]+\.((com)|(edu))$
@@ -117,7 +117,7 @@ Blocks domains containing only numbers (no letters) and ending in `.com` or `.ed
A domain name shall not start or end with a dash but can contain any number of them. It must be followed by a TLD (we assume a valid TLD length of two to seven characters)
## Cheatsheet
# Cheatsheet
Expression | Meaning | Example
------------ | ------------- | -----------

View File

@@ -113,10 +113,10 @@ dig @127.0.0.1 -p 5053 google.com
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1536
;; QUESTION SECTION:
;google.com. IN A
;google.com. IN A
;; ANSWER SECTION:
google.com. 299 IN A 243.65.127.221
google.com. 299 IN A 243.65.127.221
;; Query time: 3 msec
;; SERVER: 127.0.0.1#5053(127.0.0.1)

View File

@@ -6,7 +6,7 @@ If you want to protect your - unencrypted by default - DNS requests from easily
If you got spare resources consider [running a Tor Relay](https://www.torproject.org/docs/tor-doc-relay.html.en) (or [Exit](https://blog.torproject.org/tips-running-exit-node)) Node to contribute back to the Tor Network. The default installation doesn't do either of these. And/Or consider [donating](https://donate.torproject.org).
***
---
### ⚠️ Warnings & Considerations

View File

@@ -33,7 +33,7 @@ Point your browser to use your Pi-hole IP or Hostname (e.g. `pi.hole`) and `Port
If you want to access .onion addresses with this kind of setup you have to activate [Transparent Access to Tor Hidden Services](https://www.grepular.com/Transparent_Access_to_Tor_Hidden_Services) on the Pi-hole host.
***
---
#### Notes

View File

@@ -52,7 +52,7 @@ Finally, reject access from anywhere else (i.e. if no rule has matched up to thi
iptables -P INPUT DROP
```
###### Blocking HTTPS advertisement assets
##### Blocking HTTPS advertisement assets
Since you're `:head-desk:`ing with `iptables`, you can also use this opportunity to block HTTPS advertisements to [improve blocking ads that are loaded via HTTPS](https://discourse.pi-hole.net/t/why-do-some-sites-take-forever-to-load-when-using-pi-hole-for-versions-v4-0/3654/4) and also deal with QUIC.

View File

@@ -4,9 +4,13 @@ description: Brief overview of Pi-hole
last_updated: Thur May 02 01:00:00 2019 UTC
---
<p align="center">
<a href="https://pi-hole.net"><img src="https://pi-hole.github.io/graphics/Vortex/Vortex_with_text.png" width="150" height="255" alt="Pi-hole"></a><br/>
<b>Network-wide ad blocking via your own Linux hardware</b><br/>
<p style="text-align: center;">
<a href="https://pi-hole.net">
<img src="https://pi-hole.github.io/graphics/Vortex/Vortex_with_text.png" width="150" height="255" alt="Pi-hole">
</a>
<br>
<strong>Network-wide ad blocking via your own Linux hardware</strong>
<br>
</p>
The Pi-hole[®](https://pi-hole.net/trademark-rules-and-brand-guidelines/) is a [DNS sinkhole](https://en.wikipedia.org/wiki/DNS_Sinkhole) that protects your devices from unwanted content, without installing any client-side software.
@@ -22,7 +26,7 @@ The Pi-hole[®](https://pi-hole.net/trademark-rules-and-brand-guidelines/) is a
- **Modern**: blocks ads over both IPv4 and IPv6
- **Free**: open source software which helps ensure _you_ are the sole person in control of your privacy
-----
---
## Pi-hole is free, but powered by your support

View File

@@ -6,12 +6,14 @@ Those who want to get started quickly and conveniently, may install Pi-hole usin
curl -sSL https://install.pi-hole.net | bash
```
<!-- markdownlint-disable code-block-style -->
!!! info
[Piping to `bash` is a controversial topic](https://pi-hole.net/2016/07/25/curling-and-piping-to-bash), as it prevents you from [reading code that is about to run](https://github.com/pi-hole/pi-hole/blob/master/automated%20install/basic-install.sh) on your system.
If you would prefer to review the code before installation, we provide these alternative installation methods.
<!-- markdownlint-enable code-block-style -->
#### Alternative 1: Clone our repository and run
### Alternative 1: Clone our repository and run
```bash
git clone --depth 1 https://github.com/pi-hole/pi-hole.git Pi-hole
@@ -19,7 +21,7 @@ cd "Pi-hole/automated install/"
sudo bash basic-install.sh
```
#### Alternative 2: Manually download the installer and run
### Alternative 2: Manually download the installer and run
```bash
wget -O basic-install.sh https://install.pi-hole.net

292
package-lock.json generated Normal file
View File

@@ -0,0 +1,292 @@
{
"name": "docs",
"version": "1.0.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"argparse": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
"dev": true,
"requires": {
"sprintf-js": "~1.0.2"
}
},
"balanced-match": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
"dev": true
},
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"commander": {
"version": "2.9.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
"integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=",
"dev": true,
"requires": {
"graceful-readlink": ">= 1.0.0"
}
},
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
"dev": true
},
"deep-extend": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz",
"integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==",
"dev": true
},
"entities": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz",
"integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==",
"dev": true
},
"esprima": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
"dev": true
},
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
"dev": true
},
"get-stdin": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz",
"integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=",
"dev": true
},
"glob": {
"version": "7.1.6",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
"integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
"dev": true,
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.0.4",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
}
},
"graceful-readlink": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
"integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=",
"dev": true
},
"ignore": {
"version": "5.1.4",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz",
"integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==",
"dev": true
},
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"dev": true,
"requires": {
"once": "^1.3.0",
"wrappy": "1"
}
},
"inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"dev": true
},
"ini": {
"version": "1.3.5",
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
"integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
"dev": true
},
"js-yaml": {
"version": "3.13.1",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
"integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
"dev": true,
"requires": {
"argparse": "^1.0.7",
"esprima": "^4.0.0"
}
},
"jsonc-parser": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.2.0.tgz",
"integrity": "sha512-4fLQxW1j/5fWj6p78vAlAafoCKtuBm6ghv+Ij5W2DrDx0qE+ZdEl2c6Ko1mgJNF5ftX1iEWQQ4Ap7+3GlhjkOA==",
"dev": true
},
"linkify-it": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz",
"integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==",
"dev": true,
"requires": {
"uc.micro": "^1.0.1"
}
},
"lodash.differencewith": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.differencewith/-/lodash.differencewith-4.5.0.tgz",
"integrity": "sha1-uvr7yRi1UVTheRdqALsK76rIVLc=",
"dev": true
},
"lodash.flatten": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz",
"integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=",
"dev": true
},
"markdown-it": {
"version": "10.0.0",
"resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-10.0.0.tgz",
"integrity": "sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==",
"dev": true,
"requires": {
"argparse": "^1.0.7",
"entities": "~2.0.0",
"linkify-it": "^2.0.0",
"mdurl": "^1.0.1",
"uc.micro": "^1.0.5"
}
},
"markdownlint": {
"version": "0.18.0",
"resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.18.0.tgz",
"integrity": "sha512-nQAfK9Pbq0ZRoMC/abNGterEnV3kL8MZmi0WHhw8WJKoIbsm3cXGufGsxzCRvjW15cxe74KWcxRSKqwplS26Bw==",
"dev": true,
"requires": {
"markdown-it": "10.0.0"
}
},
"markdownlint-cli": {
"version": "0.21.0",
"resolved": "https://registry.npmjs.org/markdownlint-cli/-/markdownlint-cli-0.21.0.tgz",
"integrity": "sha512-gvnczz3W3Wgex851/cIQ/2y8GNhY+EVK8Ael8kRd8hoSQ0ps9xjhtwPwMyJPoiYbAoPxG6vSBFISiysaAbCEZg==",
"dev": true,
"requires": {
"commander": "~2.9.0",
"deep-extend": "~0.5.1",
"get-stdin": "~5.0.1",
"glob": "~7.1.2",
"ignore": "~5.1.4",
"js-yaml": "~3.13.1",
"jsonc-parser": "~2.2.0",
"lodash.differencewith": "~4.5.0",
"lodash.flatten": "~4.4.0",
"markdownlint": "~0.18.0",
"markdownlint-rule-helpers": "~0.6.0",
"minimatch": "~3.0.4",
"rc": "~1.2.7"
}
},
"markdownlint-rule-helpers": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/markdownlint-rule-helpers/-/markdownlint-rule-helpers-0.6.0.tgz",
"integrity": "sha512-LiZVAbg9/cqkBHtLNNqHV3xuy4Y2L/KuGU6+ZXqCT9NnCdEkIoxeI5/96t+ExquBY0iHy2CVWxPH16nG1RKQVQ==",
"dev": true
},
"mdurl": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
"integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=",
"dev": true
},
"minimatch": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"dev": true,
"requires": {
"brace-expansion": "^1.1.7"
}
},
"minimist": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
"dev": true
},
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"dev": true,
"requires": {
"wrappy": "1"
}
},
"path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
"dev": true
},
"rc": {
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
"integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
"dev": true,
"requires": {
"deep-extend": "^0.6.0",
"ini": "~1.3.0",
"minimist": "^1.2.0",
"strip-json-comments": "~2.0.1"
},
"dependencies": {
"deep-extend": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
"integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
"dev": true
}
}
},
"sprintf-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
"dev": true
},
"strip-json-comments": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
"integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
"dev": true
},
"uc.micro": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz",
"integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==",
"dev": true
},
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
"dev": true
}
}
}

25
package.json Normal file
View File

@@ -0,0 +1,25 @@
{
"name": "docs",
"private": true,
"version": "1.0.0",
"description": "Source for the official Pi-hole documentation",
"main": "",
"repository": {
"type": "git",
"url": "git+https://github.com/pi-hole/docs.git"
},
"keywords": [],
"author": "",
"license": "CC-BY-SA-4.0",
"bugs": {
"url": "https://github.com/pi-hole/docs/issues"
},
"homepage": "https://docs.pi-hole.net/",
"scripts": {
"markdownlint": "markdownlint \"**/*.md\" -i \"**/node_modules/**\"",
"test": "npm run markdownlint"
},
"devDependencies": {
"markdownlint-cli": "^0.21.0"
}
}