├── .gitignore
├── assignment.md
├── docs
├── aliases.md
├── basic-commands.md
├── branches.md
├── commits.md
├── git-terminologies.md
├── git-workflow.md
├── interactive-rebase.md
├── merge.md
├── pull-requests.md
├── rebase.md
├── reflog.md
├── setup.md
├── squashing.md
├── tags.md
├── undo-mistakes.md
├── undoing-changes.md
└── version-control.md
├── exercises
├── banchExercise.md
├── commitsExercise.md
├── creatingRepoExercise.md
├── interactiveRebaseExercise.md
├── mergingExercise.md
├── pullRequestExercise.md
├── rebaseExercise.md
└── reflogExercise.md
├── git-cheatsheet.md
├── images
├── branch.png
├── commit-1.png
├── commit-2.png
├── head.png
├── image-1.png
├── image-10.png
├── image-11.png
├── image-12.png
├── image-13.png
├── image-14.png
├── image-15.png
├── image-16.png
├── image-17.png
├── image-18.png
├── image-19.png
├── image-2.png
├── image-20.png
├── image-21.png
├── image-22.png
├── image-23.png
├── image-24.png
├── image-25.png
├── image-26.png
├── image-27.png
├── image-28.png
├── image-29.png
├── image-3.png
├── image-30.png
├── image-31.png
├── image-4.png
├── image-5.png
├── image-6.png
├── image-7.png
├── image-8.png
├── image-9.png
├── image-git-clone.png
├── image-git-origin.png
├── image-git-repo.png
├── image.png
├── pullVsfetch.png
├── reset-commit-1.png
├── reset-commit-2.png
├── undo-commits-2.png
├── workflow-1.png
├── workflow-2.png
├── workflow-3.png
├── workflow-4.png
├── workflow-5.png
├── workflow-6.png
├── workflow-7.png
└── workflow-8.png
├── index.md
├── package-lock.json
├── package.json
├── readme.md
└── reflog_test.txt
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
--------------------------------------------------------------------------------
/assignment.md:
--------------------------------------------------------------------------------
1 | ## Undo mistakes in Git
2 |
3 |
4 |
5 |
6 | You want to discard uncommitted changes in a file.
7 |
8 |
9 | ```shell
10 | git restore
11 | ```
12 |
13 |
14 |
15 |
16 |
17 | You accidently deleted a file and want to restore it back.
18 |
19 |
20 | ```shell
21 | git restore
22 | ```
23 |
24 |
25 |
26 |
27 |
28 | You made a typo in your commit message
29 |
30 |
31 | ```shell
32 | git commit --amend -m
33 | ```
34 |
35 | _Note: Amending commits changes the hash which means its entirely new commit. So don't amend if you have pushed to the remote_
36 |
37 |
38 |
39 |
40 | You made a commit and forgot to include one file
41 |
42 |
43 | ```shell
44 | git add
45 |
46 | git commit --amend --no-edit
47 |
48 | ```
49 |
50 |
51 |
52 |
53 |
54 |
55 | You were doing some code rafactoring. However the code didn't work properly. So now you want to discard everything and go back the previous state of the project.
56 |
57 |
58 | ```shell
59 | git reset --hard HEAD
60 | ```
61 |
62 |
63 |
64 |
65 |
66 |
67 | You made some commits to the repo and now you want to remove them.
68 |
69 | 
70 |
71 |
72 |
73 | ```shell
74 | git reset --hard
75 | ```
76 |
77 |
78 |
79 |
80 |
81 |
82 | You have accidently made a commit to the main branch which you actually wanted to do in the feature branch.
83 |
84 |
85 |
86 | _Move commit from master to the feature branch_
87 |
88 | ```shell
89 | git checkout
90 | git cherry-pick
91 | ```
92 |
93 | _Remove commit from main_
94 |
95 | ```shell
96 | git reset --hard HEAD~1
97 | ```
98 |
99 |
100 |
101 |
102 |
103 |
104 | You made a commit. Did reset hard and now you lost that commit. You have realised that this was not the brightest idea and now you are in panic !
105 |
106 |
107 | ```shell
108 | git reflog
109 | ```
110 |
111 | Find hash one previous to reset command and run either
112 |
113 | ```shell
114 | git reset --hard
115 | ```
116 |
117 | or
118 |
119 | ```shell
120 | git branch hash
121 | ```
122 |
123 |
124 |
125 |
126 |
127 |
128 | You accidentally deleted a feature branch and realised that you still needed it.
129 |
130 |
131 | ```shell
132 | git reflog
133 | ```
134 |
135 | Find the commit with feature branch and run
136 |
137 | ```shell
138 | git branch
139 | ```
140 |
141 |
142 |
143 | [Bonus section](./docs/aliases.md)
144 |
145 |
146 |
--------------------------------------------------------------------------------
/docs/aliases.md:
--------------------------------------------------------------------------------
1 | ## Aliases
2 |
3 | #### Setting up Aliases in git config
4 |
5 | ```shell
6 | code ~/.gitconfig
7 | ```
8 |
9 | **Add aliases**
10 |
11 | ```
12 | [alias]
13 | s = status
14 | co = checkout
15 | ```
16 |
17 | **Running aliases from command line**
18 |
19 | ```shell
20 | git s
21 | git co feat/featureA
22 | ```
23 |
24 | #### Setting up aliases in (.zshrc)
25 |
26 | **Some handy git aliases**
27 |
28 | ```shell
29 | alias gst='git status'
30 | alias gcl='git clone'
31 | alias ga='git add'
32 | alias gaa='git add --all'
33 | alias gc='git commit'
34 | alias gca='git commit --amend'
35 | alias gco='git checkout'
36 | alias gb='git branch'
37 | alias glg='git log'
38 | alias gll='git log --oneline'
39 | ```
40 |
41 |
42 |
43 | List of all git aliases
44 |
45 | ```shell
46 | #
47 | # Aliases
48 | # (sorted alphabetically)
49 | #
50 |
51 | alias g='git'
52 |
53 | alias ga='git add'
54 | alias gaa='git add --all'
55 | alias gapa='git add --patch'
56 | alias gau='git add --update'
57 | alias gav='git add --verbose'
58 | alias gap='git apply'
59 | alias gapt='git apply --3way'
60 |
61 | alias gb='git branch'
62 | alias gba='git branch -a'
63 | alias gbd='git branch -d'
64 | alias gbda='git branch --no-color --merged | command grep -vE "^(\+|\*|\s*($(git_main_branch)|development|develop|devel|dev)\s*$)" | command xargs -n 1 git branch -d'
65 | alias gbD='git branch -D'
66 | alias gbl='git blame -b -w'
67 | alias gbnm='git branch --no-merged'
68 | alias gbr='git branch --remote'
69 | alias gbs='git bisect'
70 | alias gbsb='git bisect bad'
71 | alias gbsg='git bisect good'
72 | alias gbsr='git bisect reset'
73 | alias gbss='git bisect start'
74 |
75 | alias gc='git commit -v'
76 | alias gc!='git commit -v --amend'
77 | alias gcn!='git commit -v --no-edit --amend'
78 | alias gca='git commit -v -a'
79 | alias gca!='git commit -v -a --amend'
80 | alias gcan!='git commit -v -a --no-edit --amend'
81 | alias gcans!='git commit -v -a -s --no-edit --amend'
82 | alias gcam='git commit -a -m'
83 | alias gcsm='git commit -s -m'
84 | alias gcas='git commit -a -s'
85 | alias gcasm='git commit -a -s -m'
86 | alias gcb='git checkout -b'
87 | alias gcf='git config --list'
88 | alias gcl='git clone --recurse-submodules'
89 | alias gclean='git clean -id'
90 | alias gpristine='git reset --hard && git clean -dffx'
91 | alias gcm='git checkout $(git_main_branch)'
92 | alias gcd='git checkout develop'
93 | alias gcmsg='git commit -m'
94 | alias gco='git checkout'
95 | alias gcount='git shortlog -sn'
96 | alias gcp='git cherry-pick'
97 | alias gcpa='git cherry-pick --abort'
98 | alias gcpc='git cherry-pick --continue'
99 | alias gcs='git commit -S'
100 |
101 | alias gd='git diff'
102 | alias gdca='git diff --cached'
103 | alias gdcw='git diff --cached --word-diff'
104 | alias gdct='git describe --tags $(git rev-list --tags --max-count=1)'
105 | alias gds='git diff --staged'
106 | alias gdt='git diff-tree --no-commit-id --name-only -r'
107 | alias gdw='git diff --word-diff'
108 |
109 | function gdnolock() {
110 | git diff "$@" ":(exclude)package-lock.json" ":(exclude)*.lock"
111 | }
112 | compdef _git gdnolock=git-diff
113 |
114 | function gdv() { git diff -w "$@" | view - }
115 | compdef _git gdv=git-diff
116 |
117 | alias gf='git fetch'
118 | # --jobs= was added in git 2.8
119 | is-at-least 2.8 "$git_version" \
120 | && alias gfa='git fetch --all --prune --jobs=10' \
121 | || alias gfa='git fetch --all --prune'
122 | alias gfo='git fetch origin'
123 |
124 | alias gfg='git ls-files | grep'
125 |
126 | alias gg='git gui citool'
127 | alias gga='git gui citool --amend'
128 |
129 | function ggf() {
130 | [[ "$#" != 1 ]] && local b="$(git_current_branch)"
131 | git push --force origin "${b:=$1}"
132 | }
133 | compdef _git ggf=git-checkout
134 | function ggfl() {
135 | [[ "$#" != 1 ]] && local b="$(git_current_branch)"
136 | git push --force-with-lease origin "${b:=$1}"
137 | }
138 | compdef _git ggfl=git-checkout
139 |
140 | function ggl() {
141 | if [[ "$#" != 0 ]] && [[ "$#" != 1 ]]; then
142 | git pull origin "${*}"
143 | else
144 | [[ "$#" == 0 ]] && local b="$(git_current_branch)"
145 | git pull origin "${b:=$1}"
146 | fi
147 | }
148 | compdef _git ggl=git-checkout
149 |
150 | function ggp() {
151 | if [[ "$#" != 0 ]] && [[ "$#" != 1 ]]; then
152 | git push origin "${*}"
153 | else
154 | [[ "$#" == 0 ]] && local b="$(git_current_branch)"
155 | git push origin "${b:=$1}"
156 | fi
157 | }
158 | compdef _git ggp=git-checkout
159 |
160 | function ggpnp() {
161 | if [[ "$#" == 0 ]]; then
162 | ggl && ggp
163 | else
164 | ggl "${*}" && ggp "${*}"
165 | fi
166 | }
167 | compdef _git ggpnp=git-checkout
168 |
169 | function ggu() {
170 | [[ "$#" != 1 ]] && local b="$(git_current_branch)"
171 | git pull --rebase origin "${b:=$1}"
172 | }
173 | compdef _git ggu=git-checkout
174 |
175 | alias ggpur='ggu'
176 | alias ggpull='git pull origin "$(git_current_branch)"'
177 | alias ggpush='git push origin "$(git_current_branch)"'
178 |
179 | alias ggsup='git branch --set-upstream-to=origin/$(git_current_branch)'
180 | alias gpsup='git push --set-upstream origin $(git_current_branch)'
181 |
182 | alias ghh='git help'
183 |
184 | alias gignore='git update-index --assume-unchanged'
185 | alias gignored='git ls-files -v | grep "^[[:lower:]]"'
186 | alias git-svn-dcommit-push='git svn dcommit && git push github $(git_main_branch):svntrunk'
187 |
188 | alias gk='\gitk --all --branches'
189 | alias gke='\gitk --all $(git log -g --pretty=%h)'
190 |
191 | alias gl='git pull'
192 | alias glg='git log --stat'
193 | alias glgp='git log --stat -p'
194 | alias glgg='git log --graph'
195 | alias glgga='git log --graph --decorate --all'
196 | alias glgm='git log --graph --max-count=10'
197 | alias glo='git log --oneline --decorate'
198 | alias glol="git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'"
199 | alias glols="git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --stat"
200 | alias glod="git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ad) %C(bold blue)<%an>%Creset'"
201 | alias glods="git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ad) %C(bold blue)<%an>%Creset' --date=short"
202 | alias glola="git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --all"
203 | alias glog='git log --oneline --decorate --graph'
204 | alias gloga='git log --oneline --decorate --graph --all'
205 | alias glp="_git_log_prettily"
206 |
207 | alias gm='git merge'
208 | alias gmom='git merge origin/$(git_main_branch)'
209 | alias gmt='git mergetool --no-prompt'
210 | alias gmtvim='git mergetool --no-prompt --tool=vimdiff'
211 | alias gmum='git merge upstream/$(git_main_branch)'
212 | alias gma='git merge --abort'
213 |
214 | alias gp='git push'
215 | alias gpd='git push --dry-run'
216 | alias gpf='git push --force-with-lease'
217 | alias gpf!='git push --force'
218 | alias gpoat='git push origin --all && git push origin --tags'
219 | alias gpu='git push upstream'
220 | alias gpv='git push -v'
221 |
222 | alias gr='git remote'
223 | alias gra='git remote add'
224 | alias grb='git rebase'
225 | alias grba='git rebase --abort'
226 | alias grbc='git rebase --continue'
227 | alias grbd='git rebase develop'
228 | alias grbi='git rebase -i'
229 | alias grbm='git rebase $(git_main_branch)'
230 | alias grbo='git rebase --onto'
231 | alias grbs='git rebase --skip'
232 | alias grev='git revert'
233 | alias grh='git reset'
234 | alias grhh='git reset --hard'
235 | alias groh='git reset origin/$(git_current_branch) --hard'
236 | alias grm='git rm'
237 | alias grmc='git rm --cached'
238 | alias grmv='git remote rename'
239 | alias grrm='git remote remove'
240 | alias grs='git restore'
241 | alias grset='git remote set-url'
242 | alias grss='git restore --source'
243 | alias grst='git restore --staged'
244 | alias grt='cd "$(git rev-parse --show-toplevel || echo .)"'
245 | alias gru='git reset --'
246 | alias grup='git remote update'
247 | alias grv='git remote -v'
248 |
249 | alias gsb='git status -sb'
250 | alias gsd='git svn dcommit'
251 | alias gsh='git show'
252 | alias gsi='git submodule init'
253 | alias gsps='git show --pretty=short --show-signature'
254 | alias gsr='git svn rebase'
255 | alias gss='git status -s'
256 | alias gst='git status'
257 |
258 | # use the default stash push on git 2.13 and newer
259 | is-at-least 2.13 "$git_version" \
260 | && alias gsta='git stash push' \
261 | || alias gsta='git stash save'
262 |
263 | alias gstaa='git stash apply'
264 | alias gstc='git stash clear'
265 | alias gstd='git stash drop'
266 | alias gstl='git stash list'
267 | alias gstp='git stash pop'
268 | alias gsts='git stash show --text'
269 | alias gstu='gsta --include-untracked'
270 | alias gstall='git stash --all'
271 | alias gsu='git submodule update'
272 | alias gsw='git switch'
273 | alias gswc='git switch -c'
274 |
275 | alias gts='git tag -s'
276 | alias gtv='git tag | sort -V'
277 | alias gtl='gtl(){ git tag --sort=-v:refname -n -l "${1}*" }; noglob gtl'
278 |
279 | alias gunignore='git update-index --no-assume-unchanged'
280 | alias gunwip='git log -n 1 | grep -q -c "\-\-wip\-\-" && git reset HEAD~1'
281 | alias gup='git pull --rebase'
282 | alias gupv='git pull --rebase -v'
283 | alias gupa='git pull --rebase --autostash'
284 | alias gupav='git pull --rebase --autostash -v'
285 | alias glum='git pull upstream $(git_main_branch)'
286 |
287 | alias gwch='git whatchanged -p --abbrev-commit --pretty=medium'
288 | alias gwip='git add -A; git rm $(git ls-files --deleted) 2> /dev/null; git commit --no-verify --no-gpg-sign -m "--wip-- [skip ci]"'
289 |
290 | alias gam='git am'
291 | alias gamc='git am --continue'
292 | alias gams='git am --skip'
293 | alias gama='git am --abort'
294 | alias gamscp='git am --show-current-patch'
295 |
296 | function grename() {
297 | if [[ -z "$1" || -z "$2" ]]; then
298 | echo "Usage: $0 old_branch new_branch"
299 | return 1
300 | fi
301 |
302 | # Rename branch locally
303 | git branch -m "$1" "$2"
304 | # Rename branch in origin remote
305 | if git push origin :"$1"; then
306 | git push --set-upstream origin "$2"
307 | fi
308 | }
309 | ```
310 |
311 |
312 |
313 | ---
314 |
--------------------------------------------------------------------------------
/docs/basic-commands.md:
--------------------------------------------------------------------------------
1 | ## Git Basic Commands
2 |
3 | **Check status**
4 |
5 | ```shell
6 | git status
7 | ```
8 |
9 | **Add files**
10 |
11 | ```shell
12 | git add fileOne.txt fileTwo.txt
13 | ```
14 |
15 | ```shell
16 | git add .
17 | ```
18 |
19 | **Unstage files**
20 |
21 | ```shell
22 | git reset
23 | ```
24 |
25 | **Create a commit**
26 |
27 | ```shell
28 | git commit -m
29 |
30 | git commit -am
31 | ```
32 |
33 | **Check commit history**
34 |
35 | ```shell
36 | git log
37 | ```
38 |
39 | ```shell
40 | git log --oneline
41 | ```
42 |
43 | **Fetch remote changes**
44 |
45 | ```shell
46 | git fetch
47 | ```
48 |
49 | **Calculate diff**
50 |
51 | ```shell
52 | git diff master origin/master
53 | ```
54 |
55 | **Pull**
56 |
57 | ```shell
58 | git pull
59 | ```
60 |
61 | **Push**
62 |
63 | ```shell
64 | git push
65 | ```
66 |
67 | ```shell
68 | git push --force
69 | ```
70 |
71 | **Create new branch**
72 |
73 | ```shell
74 | git branch
75 | ```
76 |
77 | **Checkout command**
78 |
79 | 1. switch branches
80 |
81 | ```shell
82 | git checkout
83 | ```
84 |
85 | 2. Undo changes in a file
86 |
87 | ```shell
88 | git checkout
89 | ```
90 |
91 | 3. Moving to a commit or tag
92 |
93 | ```shell
94 | git checkout
95 | ```
96 |
97 | _When you checkout to a commit, you are in detached head state which means the changes do NOT belong to any branch._
98 |
99 | 
100 |
101 |
122 |
123 | [Commits](commits.md)
124 |
--------------------------------------------------------------------------------
/docs/branches.md:
--------------------------------------------------------------------------------
1 | ## Branches
2 |
3 | - When we are creating commits , we are actually linking commit to the parent / previous commit. When we are creating commits , we are actually linking commit to the parent / previous commit.
4 |
5 | - when we want to incorporate new features without breaking original code , we need branches
6 |
7 | - A branch represents an independent line of development. It consists series of commits. You can create branch from any other branch or from any commit.
8 | 
9 |
10 | **Listing all branches**
11 |
12 | ```shell
13 | git branch
14 | ```
15 |
16 | **Creating branches**
17 |
18 | ```shell
19 | git branch
20 | ```
21 |
22 | ```shell
23 | git checkout -b
24 | ```
25 |
26 | **Deleting branches**
27 |
28 | ```shell
29 | git branch -D
30 | ```
31 |
32 | ### Mainline Development
33 |
34 | The main motto is to always integrate your changes with everyone's changes. All teammates contribute to the mainline branch
35 |
36 | 
37 |
38 | **Pros**
39 |
40 | - Easy to track changes because of single branch
41 |
42 | **Cons**
43 |
44 | - Risk shipping big changes
45 | - less resilient
46 | - need hight quality test environment and QA standards
47 |
48 | **Working with multiple branches**
49 |
50 | - Feature branch
51 | - develop branch
52 | - hotfix branch
53 | - release branch
54 | - main branch
55 |
56 | 
57 |
58 | ### Branching Strategies
59 |
60 |
71 |
72 | **Github flow**
73 |
74 | 
75 |
76 | 1. Only one long running branch which is main
77 | 2. You cut all the branches feature, bugfix from main
78 | 3. Merge the feature branches back to main.
79 |
80 | ### Branch naming conventions
81 |
82 | 1. Branch names should be in lowercase.
83 | `feature/new-login`
84 | 2. Use hyphens to separate words
85 | 3. Ise alphanumeric characters (0-9)(a-z)
86 | 4. Names should be descriptive. You can also include JIRA id in the name
87 | `feature/T-456-user-auth`
88 |
89 | **Branch Prefixes**
90 |
91 | Feature branch
92 |
93 | ```
94 | feature/T-456-user-authentication
95 | ```
96 |
97 | BugFix
98 |
99 | ```
100 | bugfix/T-789-fix-header-styling
101 | ```
102 |
103 | Release
104 |
105 | ```
106 | release/v2.0.1
107 | ```
108 |
109 | Hotfix branch
110 |
111 | ```
112 | hotfix/T-321-security-patch
113 | ```
114 |
115 | Docs branch
116 |
117 | ```
118 | docs/T-654-update-readme
119 | ```
120 |
121 | ---
122 |
123 | ### Moving a commit to another branch
124 |
125 | 
126 |
127 | 1. git log and copy the commit hash of the commit you want to move
128 | 2. swicth to the branch where you want to move the commit
129 |
130 | ```
131 | git checkout
132 | git cherry-pick
133 | ```
134 |
135 | ---
136 |
137 | ### Understanding HEAD
138 |
139 | - As we work more and more with branches, you will see a term showing up often during commits: HEAD
140 | - Head is bascially a pointer to the topmost commit in a branch
141 | - When you do git log you will see something like
142 |
143 | - commit 03as…e2 (HEAD->master)
144 |
145 |
146 | - you can use HEAD
147 | - while resetting to nth commit
148 | - in any commands where you need to refer commits
149 |
150 | [Branch Exercise](../exercises/banchExercise.md)
151 |
--------------------------------------------------------------------------------
/docs/commits.md:
--------------------------------------------------------------------------------
1 | ## Commits
2 |
3 | Commit is the snapshot of the project taken by git. Snapshots are always committed to the local git repo
4 |
5 | 
6 |
7 | ### How to create perfect commits ?
8 |
9 | 1. Create granular commits
10 |
11 |
12 |
13 |
14 |
15 | 2. Write valuable commit message
16 | - A brief and concise subject line that summarizes the changes
17 | - A descriptive message body that explains the most important facts (and as concisely as possible)
18 | - using conventional commits
19 |
20 | ---
21 |
22 |
35 |
36 | ### Writing commit messages properly
37 |
38 | The **Conventional Commits** specification provides an easy set of rules for writing commit messages properly.
39 |
40 | ```
41 | [optional scope]:
42 |
43 | [optional body]
44 |
45 | [optional footer(s)]
46 | ```
47 |
48 | **Types with Examples**
49 |
50 | 1. feat - for new features
51 | 2. fix: - for bug fixes
52 | 3. Other types ( build:, chore:, refactor:, test:, style: , docs:)
53 | 4. BREAKING CHANGE (use ! to draw attention)
54 |
55 | **Examples**
56 |
57 | ```
58 | fix: Resolve issue with user registration
59 | ```
60 |
61 | ```
62 | feat: Add user authentication feature
63 | ```
64 |
65 | ```
66 | refactor: Extract validation helper function
67 | ```
68 |
69 | ```
70 | chore: Clean up unused dependencies
71 | ```
72 |
73 | **Commit messages with scope**
74 |
75 | ```
76 | feat(lang): add Polish language
77 | feat(user login): add login form
78 | ```
79 |
80 | _Use ! to draw attention to a commit_
81 |
82 | ```
83 | feat!: allow provided config object to extend other configs
84 |
85 | BREAKING CHANGE: `extends` key in config file is now used for extending other config files
86 | ```
87 |
88 | **Commit message with body and footer**
89 |
90 | ```
91 | feat: Implement user authentication
92 |
93 | Add a new feature to allow users to authenticate using email and password.
94 |
95 | - Add login form component
96 | - Implement authentication API endpoints
97 | - Store user authentication tokens in local storage
98 |
99 | Closes #123
100 |
101 | Co-authored-by: Aashima Ahuja
102 | ```
103 |
104 | **Note**: Use present tense while drafting commit messages like it should be **Implement user authentication** and not **Implemented user authentication**
105 |
106 | Further reads
107 |
108 | https://www.conventionalcommits.org/en/v1.0.0/
109 |
110 | ### Amending commits
111 |
112 | ```shell
113 | git commit -m
114 |
115 | git commit --amend -m
116 |
117 | git commit --amend --no-edit
118 | ```
119 |
120 | [Commits exercise](../exercises/commitsExercise.md)
121 |
--------------------------------------------------------------------------------
/docs/git-terminologies.md:
--------------------------------------------------------------------------------
1 | ## Git
2 |
3 | Git is the most popular open-source version control system (VCS) that tracks changes within the same file and allows us to collaborate.
4 |
5 | 
6 |
7 | Git allows collaboration and is distributed which makes it reliable.
8 |
9 | 
10 |
11 | ---
12 |
13 | ## Git terminologies
14 |
15 | 1. Repository
16 | 2. Remote
17 | 3. origin
18 | 4. clone , push , pull
19 | 5. Commits
20 | 6. Branches
21 |
22 | #### Repository
23 |
24 | - When we set up git in our project , it creates a .git folder inside the project, which does all the versioning and file tracking.
25 | - A project with .git folder inside it is referred as a repository.
26 |
27 | 
28 |
29 | #### Remote, origin, clone, push , pull
30 |
31 | 
32 |
33 | #### Commits
34 |
35 | Commit is the snapshot of the project taken by git. Snapshots are always committed to the local git repo.
36 |
37 | #### Branch
38 |
39 | Chain of commits.
40 | 
41 |
42 | [Git workflow](git-workflow.md)
43 |
--------------------------------------------------------------------------------
/docs/git-workflow.md:
--------------------------------------------------------------------------------
1 | ### Git workflow
2 |
3 | There are 4 areas where your code lives while working in git
4 |
5 | 
6 |
7 | **Step 1**: Clone your project from Remote repository
8 |
9 | 
10 |
11 | **Step 2**: Start working on a file ( you are in working directory)
12 | Working directory is your local dev environment where you make changes to your code
13 |
14 | 
15 |
16 | **Step 3**: Adding your changes to Staging area.
17 | Staging area is a place for your finalised changes.
18 |
19 | 
20 |
21 | **Step 4**: Committing your changes to your local repository.
22 | Git commit takes snapshot of the staging area and saves it local Repository.
23 | This creates a permanent record of the changes which you can refer back to
24 |
25 | 
26 |
27 | **Step 5**: Pushing your changes to remote repository.
28 |
29 | 
30 |
31 | ### Integrating your teammate's work
32 |
33 | **Git pull**
34 |
35 | 
36 |
37 | 
38 |
39 | [Git setup](setup.md)
40 |
--------------------------------------------------------------------------------
/docs/interactive-rebase.md:
--------------------------------------------------------------------------------
1 | ### Powers of Interactive Rebase
2 |
3 | _Interactive rebase allows you to rewrite the commit history. You can_
4 |
5 | - change commit messages
6 | - combine multiple commits
7 | - split and edit existing commits
8 | - reorder commits
9 | - delete commits
10 |
11 | #### Change a commit message
12 |
13 | **_Using ammend_**
14 |
15 | ```shell
16 | git commit --amend
17 | ```
18 |
19 | _With amend you can only amend last commit_
20 |
21 | **_Using Interactive rebase_**
22 |
23 | ```shell
24 | git rebase -i HEAD~3
25 | ```
26 |
27 | use reword to change the commit message
28 |
29 | 
30 |
31 | #### Combine two commits
32 |
33 | ```shell
34 | git rebase -i HEAD~3
35 | ```
36 |
37 | 
38 |
39 | #### Delete a commit
40 |
41 | ```shell
42 | git rebase -i HEAD~3
43 | ```
44 |
45 | 
46 |
47 | [Interactive Rebase exercise](../exercises/interactiveRebaseExercise.md)
48 |
--------------------------------------------------------------------------------
/docs/merge.md:
--------------------------------------------------------------------------------
1 | ## Merging
2 |
3 | For merging your feature branch into master
4 | you can do
5 |
6 | ```shell
7 | git checkout master
8 | git merge feature-branch
9 | ```
10 |
11 | _Note: We never ususally merge directly to master.The better way is to create a pull request, and merge it through github/gitlab/bitbucket_
12 |
13 | Incase your pull request shows conflicts, you can either resolve it through github or resolve it locally by merging master in your branch and resolving conflicts
14 |
15 | ```shell
16 | git checkout master
17 | git pull
18 |
19 | git checkout feature-branch
20 | git merge master
21 | ```
22 |
23 | **Fast forward merge**
24 |
25 | 
26 |
27 | **Three way merge**
28 |
29 | 
30 |
31 | To make an integration, Git has to create a new commit that contains all the changes and take care of the differences between the branches — this is what we call a merge commit.
32 |
33 | **Merge conflicts**
34 |
35 | [Merge exercise](../exercises/mergingExercise.md)
36 |
--------------------------------------------------------------------------------
/docs/pull-requests.md:
--------------------------------------------------------------------------------
1 | ## Pull Requests
2 |
3 | #### What are Pull Requests
4 |
5 | Pull requests are not a feature of git but is provided by git hosting platforms like Github, Gitlab, Bitbucket. The main goal of pull request is to merge your changes into main branch.
6 |
7 | #### Problems of merging directly to master
8 |
9 | 1. Less Resilient
10 | 2. No way to get feedback
11 | 3. Conflicts
12 |
13 |
14 | #### Why create PRs ?
15 |
16 | **Collaboration and Code reviews**
17 |
18 | With pull requests you can invite other people to review your work and give you feedback.
19 |
20 | 
21 |
22 | 
23 |
24 | Once your changes have been approved, your branch can be merged to master
25 |
26 | [Pull request exercise](../exercises/pullRequestExercise.md)
27 |
--------------------------------------------------------------------------------
/docs/rebase.md:
--------------------------------------------------------------------------------
1 | ## Rebase
2 |
3 | With the rebase command, you can take all the changes that were committed master and replay them on your feature.
4 |
5 | For this example, you would check out the feature branch, and then rebase it onto the master
6 |
7 | ```shell
8 | git checkout featureA
9 | git rebase master
10 | ```
11 |
12 | 
13 |
14 | - With rebase, there is no merge commit so history is clean
15 |
16 | **Pitfall**
17 |
18 | Do not rebase commits that exist outside your repository and that people may have based work on.
19 |
20 | 
21 |
22 | [Rebase Exercise](../exercises/rebaseExercise.md)
23 |
--------------------------------------------------------------------------------
/docs/reflog.md:
--------------------------------------------------------------------------------
1 | ## Reflog
2 |
3 | 1. Recover lost commits
4 |
5 |
6 |
7 |
8 | You made a commit. Did reset hard and now you lost that commit. You have realised that this was not the brightest idea and now you are in panic !
9 |
10 |
11 | ```shell
12 | git reflog
13 | ```
14 |
15 | Find hash one previous to reset command and run either
16 |
17 | ```shell
18 | git reset --hard
19 | ```
20 |
21 | or
22 |
23 | ```shell
24 | git branch hash
25 | ```
26 |
27 |
28 |
29 | 2. Recover accidently deleted branch
30 |
31 |
32 |
33 |
34 | You accidentally deleted a feature branch and realised that you still needed it.
35 |
36 |
37 | ```shell
38 | git reflog
39 | ```
40 |
41 | Find the commit with feature branch and run
42 |
43 | ```shell
44 | git branch
45 | ```
46 |
47 |
48 |
--------------------------------------------------------------------------------
/docs/setup.md:
--------------------------------------------------------------------------------
1 | ## Setting up Git
2 |
3 | **1. Downloading Git**
4 |
5 | Git is already installed in Mac OS. Check with command
6 |
7 | ```shell
8 | git --version
9 | ```
10 |
11 | Windows users can install git from this link
12 | https://git-scm.com/download/win
13 |
14 | **2. Git config setup**
15 |
16 | Add your name and email in git config file (.gitconfig)
17 |
18 | ```shell
19 | git config --global user.name "Aashima Ahuja"
20 |
21 | git config --global user.email "aashima@gmail.com"
22 |
23 | ```
24 |
25 | You can check the contents of your .gitconfig file by opening it like
26 |
27 | ```shell
28 | vi ~/.gitconfig
29 | ```
30 |
31 | or
32 |
33 | ```shell
34 | code ~/.gitconfig
35 | ```
36 |
37 | You can change the contents directly by opening this file in vim or code.
38 |
39 | If you are unsure about the gitconfig path , check it by this command
40 |
41 | ```shell
42 | git config --list --show-origin
43 | ```
44 |
45 | **Creating multiple git config files for different projects**
46 |
47 | Work config ~/.gitconfig-work
48 |
49 | ```shell
50 | [user]
51 | name = Work User
52 | email = work@example.com
53 | ```
54 |
55 | Personal config ~/.gitconfig-personal
56 |
57 | ```shell
58 | [user]
59 | name = Personal User
60 | email = personal@example.com
61 | ```
62 |
63 | Update Global `.gitconfig` File
64 |
65 | ```shell
66 | [includeIf "gitdir:~/work/"]
67 | path = ~/.gitconfig-work
68 |
69 | [includeIf "gitdir:~/personal/"]
70 | path = ~/.gitconfig-personal
71 | ```
72 |
73 | Verify the config
74 |
75 | ```shell
76 | git config --list
77 | ```
78 |
79 | **3. Initialising a git repository**
80 |
81 | - Git init in the project
82 | - .git folder is created inside the project
83 | - git will start tracking your project files
84 |
85 | **4. Adding `.gitignore` file**
86 |
87 | Create `.gitignore` file in root of your project. The files or directories mentioned in `.gitignore` will not be tracked
88 |
89 | ---
90 |
91 | ### Pushing project to remote (github server)
92 |
93 | **1.Pushing existing project to github**
94 |
95 | Add remote
96 |
97 | ```shell
98 | git remote add
99 | ```
100 |
101 | Push branch to remote
102 |
103 | ```shell
104 | git push -u
105 | ```
106 |
107 | Check if the remote has been added
108 |
109 | ```shell
110 | git remote -v
111 | ```
112 |
113 | By default remote name is kept as origin. If you want to change the remote name, use
114 |
115 | ```shell
116 | git remote rename
117 |
118 |
119 | ```
120 |
121 | **2. Cloning project from github**
122 |
123 | `git clone `
124 |
125 | ### Shell theme
126 |
127 | Powerline9k
128 |
129 | https://blog.woodies11.dev/how-i-set-up-my-terminal-oh-my-zsh-powerline9k-iterm-2/
130 |
131 | [Create Repo Exercise](../exercises/creatingRepoExercise.md)
132 |
--------------------------------------------------------------------------------
/docs/squashing.md:
--------------------------------------------------------------------------------
1 | ## Squashing
2 |
3 | To "squash" in Git means to combine multiple commits into one.
4 |
5 | **When to Squash ?**
6 |
7 | Depends on what you have decided as a team. Instead of many individual commits which might be unnecessary only a single commit appears in the main commit history. This can be helpful in keeping commit history clean!
8 |
9 | **How to squash**
10 |
11 | **_Using Interactive Rebase_**
12 |
13 | ```
14 | git rebase -i HEAD~3
15 | ```
16 |
17 | 
18 |
19 | **_Using Merge_**
20 |
21 | ```shell
22 | git merge --squash feature/authentication
23 |
24 | ```
25 |
26 | **Merging without squash**
27 |
28 | New merge commit is automatically created by git
29 |
30 | 
31 |
32 | **Merging with Squash**
33 |
34 | Manual commit , no automatically added by git
35 |
36 | 
37 |
38 | **Pull requests**
39 |
40 | A lot of git hosting platforms like github , gitlab , bitbucket provides an option to squash the commits when merging a PR
41 |
42 | 
43 |
44 |
45 | [Interactive rebase](interactive-rebase.md)
46 |
--------------------------------------------------------------------------------
/docs/tags.md:
--------------------------------------------------------------------------------
1 | ## Creating tags
2 |
3 | Tags are typically used to mark release points (v1.0, v2.0 and so on).
4 |
5 | **Listing tags**
6 |
7 | ```shell
8 | git tag
9 | ```
10 |
11 | **Creating tags**
12 |
13 | ```shell
14 | git tag -a v1 -m 'My first version'
15 | ```
16 |
17 | **Creating lightweight tags**
18 |
19 | ```shell
20 | git tag v1
21 | ```
22 |
23 | **Display tags**
24 |
25 | ```shell
26 | git show v1
27 | ```
28 |
29 | **Delete tags**
30 |
31 | ```shell
32 | git tag --delete
33 | ```
34 |
35 | [Merging](../docs/merge.md)
36 |
--------------------------------------------------------------------------------
/docs/undo-mistakes.md:
--------------------------------------------------------------------------------
1 | ## Undo mistakes in Git
2 |
3 |
4 |
5 |
6 | You want to discard uncommitted changes in a file.
7 |
8 |
9 | ```shell
10 | git restore
11 | ```
12 |
13 |
14 |
15 |
16 |
17 | You accidently deleted a file and want to restore it back.
18 |
19 |
20 | ```shell
21 | git restore
22 | ```
23 |
24 |
25 |
26 |
27 |
28 | You made a typo in your commit message
29 |
30 |
31 | ```shell
32 | git commit --amend -m
33 | ```
34 |
35 | _Note: Amending commits changes the hash which means its entirely new commit. So don't amend if you have pushed to the remote_
36 |
37 |
38 |
39 |
40 | You made a commit and forgot to include one file
41 |
42 |
43 | ```shell
44 | git add
45 |
46 | git commit --amend --no-edit
47 |
48 | ```
49 |
50 |
51 |
52 |
53 |
54 |
55 | You were doing some code rafactoring. However the code didn't work properly. So now you want to discard everything and go back the previous state of the project.
56 |
57 |
58 | ```shell
59 | git reset --hard HEAD
60 | ```
61 |
62 |
63 |
64 |
65 |
66 |
67 | You made some commits to the repo and now you want to remove them.
68 |
69 | 
70 |
71 |
72 |
73 | ```shell
74 | git reset --hard
75 | ```
76 |
77 |
78 |
79 |
80 |
81 |
82 | You have accidently made a commit to the main branch which you actually wanted to do in the feature branch.
83 |
84 |
85 |
86 | _Move commit from master to the feature branch_
87 |
88 | ```shell
89 | git checkout
90 | git cherry-pick
91 | ```
92 |
93 | _Remove commit from main_
94 |
95 | ```shell
96 | git reset --hard HEAD~1
97 | ```
98 |
99 |
100 |
101 |
102 |
103 |
104 | You made a commit. Did reset hard and now you lost that commit. You have realised that this was not the brightest idea and now you are in panic !
105 |
106 |
107 | ```shell
108 | git reflog
109 | ```
110 |
111 | Find hash one previous to reset command and run either
112 |
113 | ```shell
114 | git reset --hard
115 | ```
116 |
117 | or
118 |
119 | ```shell
120 | git branch hash
121 | ```
122 |
123 |
124 |
125 |
126 |
127 |
128 | You accidentally deleted a feature branch and realised that you still needed it.
129 |
130 |
131 | ```shell
132 | git reflog
133 | ```
134 |
135 | Find the commit with feature branch and run
136 |
137 | ```shell
138 | git branch
139 | ```
140 |
141 |
142 |
143 | [Reflog Exercise](../exercises/reflogExercise.md)
144 |
145 |
146 |
--------------------------------------------------------------------------------
/docs/undoing-changes.md:
--------------------------------------------------------------------------------
1 | ## Undo changes in git
2 |
3 | ### 1. Undo changes in a file
4 |
5 | ```shell
6 | git checkout
7 |
8 | git restore file_name
9 | ```
10 |
11 | ### 2. Unstage staged changes
12 |
13 | ```shell
14 | git restore –staged filename
15 |
16 | git reset
17 |
18 | git reset .
19 |
20 | ```
21 |
22 | ### 3. Undo commits
23 |
24 | #### Using git reset
25 |
26 | - Git reset allows you to remove the commits, or say reset a branch to a specific commit
27 | - There are types of reset -
28 | - Hard reset
29 | - Remove commits and don’t keep changes
30 | - git reset --hard
31 | - Soft reset
32 | - Remove commits but keep changes in the files
33 | - git reset
34 |
35 |
36 |
37 |
38 | ```
39 | Issue with reset:
40 | You can loose shared history if you reset the commits and someone else has already based his/her work on those commits.
41 | ```
42 |
43 | #### Using git revert
44 |
45 | - Git revert command also undoes the commits but it creates an additional commit undoing that change.
46 | - git revert doesn’t change the project history which makes it safe for the commits which are already published on shared repository
47 |
48 |
49 |
50 | ```
51 | git revert is a safer option to undo a commit especially if the commit has already been pushed to remote
52 | ```
53 |
54 | [Branches](../docs/branches.md)
55 |
--------------------------------------------------------------------------------
/docs/version-control.md:
--------------------------------------------------------------------------------
1 | ## Version Control
2 |
3 | Version control , also called as source control is the practice of tracking and managing changes to software code.
4 |
5 | 
6 |
7 | **Drawbacks**
8 |
9 | 1. Maintaining separate files
10 |
11 | We have to maintain separate files which is not scalable. We want a system which could do version control within a single file.
12 |
13 | _Git_Course.docx
14 | Git_Course_v1.docx
15 | Git_Course_v2.docx
16 | Git_Course_final.docx_
17 |
18 |
19 | 2. Collaboration
20 | Since files only exist in my computer , its difficult to collaborate.
21 |
22 |
23 |
24 | 3. Reliability
25 | There is a single point of failure. We want a system which is distributed to avoid single point of failure
26 |
27 |
28 |
29 | [Git and Git Terminologies](git-terminologies.md)
30 |
31 |
52 |
--------------------------------------------------------------------------------
/exercises/banchExercise.md:
--------------------------------------------------------------------------------
1 | ### Branch exercise
2 |
3 | **Part 1**
4 |
5 | You are asked to develop user authentication feature.
6 | Follow all the required steps
7 |
8 | 1. create a feature branch (use branching conventions)
9 | 2. Create two files authentication.js, LoginForm.html
10 | 3. Make a commit. Use conventional commits
11 |
12 | **Part 2**
13 |
14 | 1. From github UI, create a separate brach for bug fix in authentication feature. Use proper branch name
15 | 2. Make a commit
16 | 3. Cherry-pick that commit in bugfix branch in your authentication feature branch
17 |
18 | [Merging](../docs/merge.md)
19 |
--------------------------------------------------------------------------------
/exercises/commitsExercise.md:
--------------------------------------------------------------------------------
1 | ### Commits Exercise
2 |
3 | 1. Make a commit
4 | 2. Ammend commit using conventional commit message
5 | 3. Create a new file and add it to the same commit
6 |
7 | [Undoing changes in git](../docs/undoing-changes.md)
8 |
--------------------------------------------------------------------------------
/exercises/creatingRepoExercise.md:
--------------------------------------------------------------------------------
1 | ### Create repo exercise
2 |
3 | Create a new project named **git-workshop**. Create two files in it with follwing contents
4 |
5 | _index.html_
6 |
7 | ```html
8 |
9 |
10 |
11 | Hello, World!
12 |
13 |
14 | Hello, World!
15 |
16 |
17 | ```
18 |
19 | _styles.css_
20 |
21 | ```css
22 | body {
23 | font-family: Arial, sans-serif;
24 | background-color: #f0f0f0;
25 | color: #333;
26 | margin: 0;
27 | padding: 0;
28 | }
29 | ```
30 |
31 | Commit the files using
32 |
33 | ```shell
34 | git add index.html styles.css
35 | git commit -m 'feat: First Commit'
36 | ```
37 |
38 | Push the project on github.
39 |
40 | **Part 2**
41 |
42 | 1. Change the remote name from _origin_ to _base_
43 | 2. Update the index.html file
44 |
45 | ```html
46 |
47 |
48 |
49 | Hello, World!
50 |
51 |
52 | welcome to git course
53 |
54 |
55 | ```
56 |
57 | 3. Commit the file and do
58 |
59 | ```shell
60 | git push base
61 | ```
62 |
63 | 4. Change the remote name back to origin. Verify if the remote is changed back to origin.
64 |
65 | [Git Basic Commands](../docs/basic-commands.md)
66 |
--------------------------------------------------------------------------------
/exercises/interactiveRebaseExercise.md:
--------------------------------------------------------------------------------
1 | ### Interactive Rebase Exercise
2 |
3 | 1. Squash last two commits using interactive rebase.
4 | 2. Delete a commit using interactive rebase
5 |
6 | [Take home assignment](../assignment.md)
7 |
--------------------------------------------------------------------------------
/exercises/mergingExercise.md:
--------------------------------------------------------------------------------
1 | ### Merging exercise
2 |
3 | 1. Create a feature branch `feat/merge-exercise` from master
4 |
5 | 2. Edit your `index.html ` file with changing text in body.
6 |
7 | 3. Make a commit.
8 | 4. Go to master , make two commits
9 | 5. Go to feature branch and merge master in your feature branch
10 | 6. You should see the master commits along with a merge commit
11 |
12 |
17 |
18 | [Rebase](../docs/rebase.md)
19 |
--------------------------------------------------------------------------------
/exercises/pullRequestExercise.md:
--------------------------------------------------------------------------------
1 | **Part 1**
2 |
3 | In your **git-workshop** project,
4 |
5 | 1. Create a bugfix branch from master.
6 | 2. Change the text in `index.html` from **Hello World** to **Hello from your _country_**
7 | 3. Push your branch to remote
8 | 4. Create a pull request from github
9 | 5. Merge the branch to master.
10 | 6. verify the changes in master branch uisng `git pull`
11 |
12 | **Part 2 (Bonus)**
13 |
14 | 1. Create another branch from master `feat/pull-requests-demo`
15 | 2. Change the body text to
16 |
17 | ```html
18 |
19 | Hello from Iceland!
20 |
21 | ```
22 |
23 | 3. Commit your changes.
24 | 4. Go back to master and change the body text again to
25 |
26 | ```html
27 |
28 | Hello from Portugal!
29 |
30 | ```
31 |
32 | 5. Go back to your feature branch and push your branch to remote
33 | 6. Create pull request.
34 | 7. Do you see conflicts while merging ?
35 |
36 | [Squashing](../docs/squashing.md)
37 |
--------------------------------------------------------------------------------
/exercises/rebaseExercise.md:
--------------------------------------------------------------------------------
1 | ### Rebase exercise
2 |
3 | 1. Create a feature branch `feat/rebase-exercise` from master
4 |
5 | 2. Edit your `index.html ` file with changing text in body.
6 |
7 | 3. Make a commit.
8 | 4. Go to master , make two commits
9 | 5. Go to feature branch and rebase master in your feature branch
10 | 6. Your commits would be on top of master and there would be no additional commit
11 |
12 | [Creating pull requests](../docs/pull-requests.md)
13 |
14 |
--------------------------------------------------------------------------------
/exercises/reflogExercise.md:
--------------------------------------------------------------------------------
1 | ### Reflog exercise
2 |
3 | 1. Delete the last two commits in your master branch with `reset --hard`
4 | 2. Recover the last two commits
5 |
6 | [Git aliases](../docs/aliases.md)
--------------------------------------------------------------------------------
/git-cheatsheet.md:
--------------------------------------------------------------------------------
1 | # Git Command Cheatsheet
2 |
3 | ## Basic Commands
4 |
5 | ### Check Status & Info
6 | ```shell
7 | # Check git version
8 | git --version
9 |
10 | # Check status
11 | git status
12 | git status -s # Short status
13 |
14 | # View history
15 | git log
16 | git log --oneline
17 | git log --stat
18 | git log --graph
19 | ```
20 |
21 | ### Repository Setup
22 | ```shell
23 | # Initialize repository
24 | git init
25 |
26 | # Add files
27 | git add
28 | git add . # Add all files
29 | git add --all # Add all files including deleted ones
30 |
31 | # Commit changes
32 | git commit -m ""
33 | git commit -am "" # Add and commit tracked files
34 | git commit --amend -m "" # Edit last commit message
35 | git commit --amend --no-edit # Add to last commit without editing message
36 | ```
37 |
38 | ## Configuration
39 | ```shell
40 | # Set user info
41 | git config --global user.name ""
42 | git config --global user.email ""
43 |
44 | # View config
45 | git config --list
46 | git config --list --show-origin
47 |
48 | # Multiple configs
49 | [includeIf "gitdir:~/work/"]
50 | path = ~/.gitconfig-work
51 | [includeIf "gitdir:~/personal/"]
52 | path = ~/.gitconfig-personal
53 | ```
54 |
55 | ## Remote Operations
56 | ```shell
57 | # Add remote
58 | git remote add
59 |
60 | # View remotes
61 | git remote -v
62 |
63 | # Rename remote
64 | git remote rename
65 |
66 | # Clone repository
67 | git clone
68 |
69 | # Push changes
70 | git push
71 | git push -u # Set upstream
72 | git push --force # Force push (use with caution)
73 |
74 | # Pull changes
75 | git pull
76 | git pull --rebase # Pull with rebase
77 |
78 | # Fetch changes
79 | git fetch
80 | ```
81 |
82 | ## Branch Operations
83 | ```shell
84 | # List branches
85 | git branch
86 | git branch -a # List all branches including remote
87 |
88 | # Create branch
89 | git branch
90 | git checkout -b # Create and switch
91 | git switch -c # Create and switch (new syntax)
92 |
93 | # Switch branches
94 | git checkout
95 | git switch
96 |
97 | # Delete branch
98 | git branch -d
99 | git branch -D # Force delete
100 | ```
101 |
102 | ## Merging & Rebasing
103 | ```shell
104 | # Merge
105 | git merge
106 | git merge --squash
107 |
108 | # Rebase
109 | git rebase
110 | git rebase -i HEAD~ # Interactive rebase last n commits
111 |
112 | # Cherry-pick
113 | git cherry-pick
114 | ```
115 |
116 | ## Undoing Changes
117 | ```shell
118 | # Discard changes in working directory
119 | git restore
120 | git checkout # Old syntax
121 |
122 | # Unstage changes
123 | git restore --staged
124 | git reset
125 |
126 | # Reset commits
127 | git reset --hard HEAD
128 | git reset --hard
129 | git reset --soft
130 |
131 | # Revert commit
132 | git revert
133 |
134 | # View reflog (recovery)
135 | git reflog
136 | ```
137 |
138 | ## Tags
139 | ```shell
140 | # List tags
141 | git tag
142 |
143 | # Create tag
144 | git tag -a -m ''
145 | git tag # Lightweight tag
146 |
147 | # Delete tag
148 | git tag --delete
149 |
150 | # Show tag info
151 | git show
152 | ```
153 |
154 | ## Stash Operations
155 | ```shell
156 | # Save changes to stash
157 | git stash push
158 | git stash push -u -k # Include untracked files
159 |
160 | # Apply stashed changes
161 | git stash pop
162 | git stash apply
163 |
164 | # List stashes
165 | git stash list
166 | ```
167 |
168 | ## Diff & Status
169 | ```shell
170 | # View differences
171 | git diff
172 | git diff --staged
173 | git diff
174 | git diff master origin/master
175 |
176 | # Show commit details
177 | git show
178 | ```
179 |
180 | ## Best Practices
181 |
182 | ### Commit Messages
183 | - Use conventional commit messages: `[optional scope]: `
184 | - Types: feat, fix, docs, style, refactor, test, chore
185 | - Write in present tense
186 | - Keep messages clear and concise
187 | - Example: `feat(auth): add user authentication system`
188 |
189 | ### Branch Naming
190 | - Use descriptive names with type prefixes
191 | - Format: `/`
192 | - Examples:
193 | - `feature/user-auth`
194 | - `bugfix/login-error`
195 | - `hotfix/security-patch`
196 |
197 | ### Important Notes
198 | - Don't rebase commits that have been pushed to shared repositories
199 | - Always pull before pushing to avoid conflicts
200 | - Use `.gitignore` for files that shouldn't be tracked
201 | - Review changes before committing
202 |
--------------------------------------------------------------------------------
/images/branch.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aashimaahuja/git-advanced/06c4221a4463de1e8a729cc0dbac5e5e5a77d68b/images/branch.png
--------------------------------------------------------------------------------
/images/commit-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aashimaahuja/git-advanced/06c4221a4463de1e8a729cc0dbac5e5e5a77d68b/images/commit-1.png
--------------------------------------------------------------------------------
/images/commit-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aashimaahuja/git-advanced/06c4221a4463de1e8a729cc0dbac5e5e5a77d68b/images/commit-2.png
--------------------------------------------------------------------------------
/images/head.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aashimaahuja/git-advanced/06c4221a4463de1e8a729cc0dbac5e5e5a77d68b/images/head.png
--------------------------------------------------------------------------------
/images/image-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aashimaahuja/git-advanced/06c4221a4463de1e8a729cc0dbac5e5e5a77d68b/images/image-1.png
--------------------------------------------------------------------------------
/images/image-10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aashimaahuja/git-advanced/06c4221a4463de1e8a729cc0dbac5e5e5a77d68b/images/image-10.png
--------------------------------------------------------------------------------
/images/image-11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aashimaahuja/git-advanced/06c4221a4463de1e8a729cc0dbac5e5e5a77d68b/images/image-11.png
--------------------------------------------------------------------------------
/images/image-12.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aashimaahuja/git-advanced/06c4221a4463de1e8a729cc0dbac5e5e5a77d68b/images/image-12.png
--------------------------------------------------------------------------------
/images/image-13.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aashimaahuja/git-advanced/06c4221a4463de1e8a729cc0dbac5e5e5a77d68b/images/image-13.png
--------------------------------------------------------------------------------
/images/image-14.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aashimaahuja/git-advanced/06c4221a4463de1e8a729cc0dbac5e5e5a77d68b/images/image-14.png
--------------------------------------------------------------------------------
/images/image-15.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aashimaahuja/git-advanced/06c4221a4463de1e8a729cc0dbac5e5e5a77d68b/images/image-15.png
--------------------------------------------------------------------------------
/images/image-16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aashimaahuja/git-advanced/06c4221a4463de1e8a729cc0dbac5e5e5a77d68b/images/image-16.png
--------------------------------------------------------------------------------
/images/image-17.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aashimaahuja/git-advanced/06c4221a4463de1e8a729cc0dbac5e5e5a77d68b/images/image-17.png
--------------------------------------------------------------------------------
/images/image-18.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aashimaahuja/git-advanced/06c4221a4463de1e8a729cc0dbac5e5e5a77d68b/images/image-18.png
--------------------------------------------------------------------------------
/images/image-19.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aashimaahuja/git-advanced/06c4221a4463de1e8a729cc0dbac5e5e5a77d68b/images/image-19.png
--------------------------------------------------------------------------------
/images/image-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aashimaahuja/git-advanced/06c4221a4463de1e8a729cc0dbac5e5e5a77d68b/images/image-2.png
--------------------------------------------------------------------------------
/images/image-20.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aashimaahuja/git-advanced/06c4221a4463de1e8a729cc0dbac5e5e5a77d68b/images/image-20.png
--------------------------------------------------------------------------------
/images/image-21.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aashimaahuja/git-advanced/06c4221a4463de1e8a729cc0dbac5e5e5a77d68b/images/image-21.png
--------------------------------------------------------------------------------
/images/image-22.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aashimaahuja/git-advanced/06c4221a4463de1e8a729cc0dbac5e5e5a77d68b/images/image-22.png
--------------------------------------------------------------------------------
/images/image-23.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aashimaahuja/git-advanced/06c4221a4463de1e8a729cc0dbac5e5e5a77d68b/images/image-23.png
--------------------------------------------------------------------------------
/images/image-24.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aashimaahuja/git-advanced/06c4221a4463de1e8a729cc0dbac5e5e5a77d68b/images/image-24.png
--------------------------------------------------------------------------------
/images/image-25.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aashimaahuja/git-advanced/06c4221a4463de1e8a729cc0dbac5e5e5a77d68b/images/image-25.png
--------------------------------------------------------------------------------
/images/image-26.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aashimaahuja/git-advanced/06c4221a4463de1e8a729cc0dbac5e5e5a77d68b/images/image-26.png
--------------------------------------------------------------------------------
/images/image-27.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aashimaahuja/git-advanced/06c4221a4463de1e8a729cc0dbac5e5e5a77d68b/images/image-27.png
--------------------------------------------------------------------------------
/images/image-28.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aashimaahuja/git-advanced/06c4221a4463de1e8a729cc0dbac5e5e5a77d68b/images/image-28.png
--------------------------------------------------------------------------------
/images/image-29.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aashimaahuja/git-advanced/06c4221a4463de1e8a729cc0dbac5e5e5a77d68b/images/image-29.png
--------------------------------------------------------------------------------
/images/image-3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aashimaahuja/git-advanced/06c4221a4463de1e8a729cc0dbac5e5e5a77d68b/images/image-3.png
--------------------------------------------------------------------------------
/images/image-30.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aashimaahuja/git-advanced/06c4221a4463de1e8a729cc0dbac5e5e5a77d68b/images/image-30.png
--------------------------------------------------------------------------------
/images/image-31.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aashimaahuja/git-advanced/06c4221a4463de1e8a729cc0dbac5e5e5a77d68b/images/image-31.png
--------------------------------------------------------------------------------
/images/image-4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aashimaahuja/git-advanced/06c4221a4463de1e8a729cc0dbac5e5e5a77d68b/images/image-4.png
--------------------------------------------------------------------------------
/images/image-5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aashimaahuja/git-advanced/06c4221a4463de1e8a729cc0dbac5e5e5a77d68b/images/image-5.png
--------------------------------------------------------------------------------
/images/image-6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aashimaahuja/git-advanced/06c4221a4463de1e8a729cc0dbac5e5e5a77d68b/images/image-6.png
--------------------------------------------------------------------------------
/images/image-7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aashimaahuja/git-advanced/06c4221a4463de1e8a729cc0dbac5e5e5a77d68b/images/image-7.png
--------------------------------------------------------------------------------
/images/image-8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aashimaahuja/git-advanced/06c4221a4463de1e8a729cc0dbac5e5e5a77d68b/images/image-8.png
--------------------------------------------------------------------------------
/images/image-9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aashimaahuja/git-advanced/06c4221a4463de1e8a729cc0dbac5e5e5a77d68b/images/image-9.png
--------------------------------------------------------------------------------
/images/image-git-clone.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aashimaahuja/git-advanced/06c4221a4463de1e8a729cc0dbac5e5e5a77d68b/images/image-git-clone.png
--------------------------------------------------------------------------------
/images/image-git-origin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aashimaahuja/git-advanced/06c4221a4463de1e8a729cc0dbac5e5e5a77d68b/images/image-git-origin.png
--------------------------------------------------------------------------------
/images/image-git-repo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aashimaahuja/git-advanced/06c4221a4463de1e8a729cc0dbac5e5e5a77d68b/images/image-git-repo.png
--------------------------------------------------------------------------------
/images/image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aashimaahuja/git-advanced/06c4221a4463de1e8a729cc0dbac5e5e5a77d68b/images/image.png
--------------------------------------------------------------------------------
/images/pullVsfetch.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aashimaahuja/git-advanced/06c4221a4463de1e8a729cc0dbac5e5e5a77d68b/images/pullVsfetch.png
--------------------------------------------------------------------------------
/images/reset-commit-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aashimaahuja/git-advanced/06c4221a4463de1e8a729cc0dbac5e5e5a77d68b/images/reset-commit-1.png
--------------------------------------------------------------------------------
/images/reset-commit-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aashimaahuja/git-advanced/06c4221a4463de1e8a729cc0dbac5e5e5a77d68b/images/reset-commit-2.png
--------------------------------------------------------------------------------
/images/undo-commits-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aashimaahuja/git-advanced/06c4221a4463de1e8a729cc0dbac5e5e5a77d68b/images/undo-commits-2.png
--------------------------------------------------------------------------------
/images/workflow-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aashimaahuja/git-advanced/06c4221a4463de1e8a729cc0dbac5e5e5a77d68b/images/workflow-1.png
--------------------------------------------------------------------------------
/images/workflow-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aashimaahuja/git-advanced/06c4221a4463de1e8a729cc0dbac5e5e5a77d68b/images/workflow-2.png
--------------------------------------------------------------------------------
/images/workflow-3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aashimaahuja/git-advanced/06c4221a4463de1e8a729cc0dbac5e5e5a77d68b/images/workflow-3.png
--------------------------------------------------------------------------------
/images/workflow-4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aashimaahuja/git-advanced/06c4221a4463de1e8a729cc0dbac5e5e5a77d68b/images/workflow-4.png
--------------------------------------------------------------------------------
/images/workflow-5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aashimaahuja/git-advanced/06c4221a4463de1e8a729cc0dbac5e5e5a77d68b/images/workflow-5.png
--------------------------------------------------------------------------------
/images/workflow-6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aashimaahuja/git-advanced/06c4221a4463de1e8a729cc0dbac5e5e5a77d68b/images/workflow-6.png
--------------------------------------------------------------------------------
/images/workflow-7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aashimaahuja/git-advanced/06c4221a4463de1e8a729cc0dbac5e5e5a77d68b/images/workflow-7.png
--------------------------------------------------------------------------------
/images/workflow-8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aashimaahuja/git-advanced/06c4221a4463de1e8a729cc0dbac5e5e5a77d68b/images/workflow-8.png
--------------------------------------------------------------------------------
/index.md:
--------------------------------------------------------------------------------
1 | ## Welcome to Git course
2 |
3 | 1. [Version Control](docs/version-control.md)
4 | 2. [Git terminologies](docs/git-terminologies.md)
5 | 3. [Setting up Git](docs/setup.md)
6 | 4. [Git Basic Commands](docs/basic-commands.md)
7 | 5. [Commits](docs/commits.md)
8 | 6. [Undoing changes in git](docs/undoing-changes.md)
9 | 7. [Branches](docs/branches.md)
10 | 8. [Merging](docs/merge.md)
11 | 9. [Rebasing](docs/rebase.md)
12 | 10. [Creating pull requests](docs/pull-requests.md)
13 | 11. [Squashing](docs/squashing.md)
14 | 12. [Interactive Rebase](docs/interactive-rebase.md)
15 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "git-advanced",
3 | "lockfileVersion": 2,
4 | "requires": true,
5 | "packages": {
6 | "": {
7 | "dependencies": {
8 | "md-fileserver": "^1.10.0"
9 | }
10 | },
11 | "node_modules/@commenthol/markdown-it-katex": {
12 | "version": "2.0.8",
13 | "resolved": "https://registry.npmjs.org/@commenthol/markdown-it-katex/-/markdown-it-katex-2.0.8.tgz",
14 | "integrity": "sha512-5PQBQNLw4FCZDIQrx/oQxCxOTq+HR2y53xbDkcqViUDVRVkG3Lp0VHPtmmtQDjRKDeb3pWr5ez9S2S8g9uAvmg==",
15 | "dependencies": {
16 | "katex": "^0.16.9"
17 | }
18 | },
19 | "node_modules/@types/linkify-it": {
20 | "version": "3.0.5",
21 | "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.5.tgz",
22 | "integrity": "sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw==",
23 | "peer": true
24 | },
25 | "node_modules/@types/markdown-it": {
26 | "version": "14.0.1",
27 | "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.0.1.tgz",
28 | "integrity": "sha512-6WfOG3jXR78DW8L5cTYCVVGAsIFZskRHCDo5tbqa+qtKVt4oDRVH7hyIWu1SpDQJlmIoEivNQZ5h+AGAOrgOtQ==",
29 | "peer": true,
30 | "dependencies": {
31 | "@types/linkify-it": "*",
32 | "@types/mdurl": "*"
33 | }
34 | },
35 | "node_modules/@types/mdurl": {
36 | "version": "1.0.5",
37 | "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.5.tgz",
38 | "integrity": "sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA==",
39 | "peer": true
40 | },
41 | "node_modules/accepts": {
42 | "version": "1.3.8",
43 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
44 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
45 | "dependencies": {
46 | "mime-types": "~2.1.34",
47 | "negotiator": "0.6.3"
48 | },
49 | "engines": {
50 | "node": ">= 0.6"
51 | }
52 | },
53 | "node_modules/argparse": {
54 | "version": "2.0.1",
55 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
56 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
57 | },
58 | "node_modules/array-flatten": {
59 | "version": "1.1.1",
60 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
61 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
62 | },
63 | "node_modules/asyncc": {
64 | "version": "2.0.6",
65 | "resolved": "https://registry.npmjs.org/asyncc/-/asyncc-2.0.6.tgz",
66 | "integrity": "sha512-m3nkCP6CKuLubt2vwqoOio8NmOJPjUL6dcaNNxqc9q4H2Rq9wNs+2UsIzBegiJzUtoyh9X9iBe4GIhqu1uOvqA==",
67 | "engines": {
68 | "node": ">=6.0.0"
69 | }
70 | },
71 | "node_modules/batch": {
72 | "version": "0.6.1",
73 | "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
74 | "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw=="
75 | },
76 | "node_modules/body-parser": {
77 | "version": "1.20.2",
78 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz",
79 | "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==",
80 | "dependencies": {
81 | "bytes": "3.1.2",
82 | "content-type": "~1.0.5",
83 | "debug": "2.6.9",
84 | "depd": "2.0.0",
85 | "destroy": "1.2.0",
86 | "http-errors": "2.0.0",
87 | "iconv-lite": "0.4.24",
88 | "on-finished": "2.4.1",
89 | "qs": "6.11.0",
90 | "raw-body": "2.5.2",
91 | "type-is": "~1.6.18",
92 | "unpipe": "1.0.0"
93 | },
94 | "engines": {
95 | "node": ">= 0.8",
96 | "npm": "1.2.8000 || >= 1.4.16"
97 | }
98 | },
99 | "node_modules/boolbase": {
100 | "version": "1.0.0",
101 | "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
102 | "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="
103 | },
104 | "node_modules/bytes": {
105 | "version": "3.1.2",
106 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
107 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
108 | "engines": {
109 | "node": ">= 0.8"
110 | }
111 | },
112 | "node_modules/call-bind": {
113 | "version": "1.0.7",
114 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
115 | "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
116 | "dependencies": {
117 | "es-define-property": "^1.0.0",
118 | "es-errors": "^1.3.0",
119 | "function-bind": "^1.1.2",
120 | "get-intrinsic": "^1.2.4",
121 | "set-function-length": "^1.2.1"
122 | },
123 | "engines": {
124 | "node": ">= 0.4"
125 | },
126 | "funding": {
127 | "url": "https://github.com/sponsors/ljharb"
128 | }
129 | },
130 | "node_modules/cheerio": {
131 | "version": "1.0.0-rc.12",
132 | "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz",
133 | "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==",
134 | "dependencies": {
135 | "cheerio-select": "^2.1.0",
136 | "dom-serializer": "^2.0.0",
137 | "domhandler": "^5.0.3",
138 | "domutils": "^3.0.1",
139 | "htmlparser2": "^8.0.1",
140 | "parse5": "^7.0.0",
141 | "parse5-htmlparser2-tree-adapter": "^7.0.0"
142 | },
143 | "engines": {
144 | "node": ">= 6"
145 | },
146 | "funding": {
147 | "url": "https://github.com/cheeriojs/cheerio?sponsor=1"
148 | }
149 | },
150 | "node_modules/cheerio-select": {
151 | "version": "2.1.0",
152 | "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz",
153 | "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==",
154 | "dependencies": {
155 | "boolbase": "^1.0.0",
156 | "css-select": "^5.1.0",
157 | "css-what": "^6.1.0",
158 | "domelementtype": "^2.3.0",
159 | "domhandler": "^5.0.3",
160 | "domutils": "^3.0.1"
161 | },
162 | "funding": {
163 | "url": "https://github.com/sponsors/fb55"
164 | }
165 | },
166 | "node_modules/color-name": {
167 | "version": "1.1.4",
168 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
169 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
170 | },
171 | "node_modules/color-string": {
172 | "version": "1.9.1",
173 | "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
174 | "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
175 | "dependencies": {
176 | "color-name": "^1.0.0",
177 | "simple-swizzle": "^0.2.2"
178 | }
179 | },
180 | "node_modules/commander": {
181 | "version": "8.3.0",
182 | "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
183 | "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
184 | "engines": {
185 | "node": ">= 12"
186 | }
187 | },
188 | "node_modules/confluencer": {
189 | "version": "1.5.1",
190 | "resolved": "https://registry.npmjs.org/confluencer/-/confluencer-1.5.1.tgz",
191 | "integrity": "sha512-FyOe/qZ9Hz7a9JPqw6zbKT6uQE6StVmYOIMEFt6/RwGsts1kaMJHgUt7q7iYvpdsKEQrvqTEyiAKELvgo8DPEQ==",
192 | "dependencies": {
193 | "cheerio": "^1.0.0-rc.10",
194 | "color-string": "^1.6.0",
195 | "map-lru": "^2.0.0"
196 | },
197 | "bin": {
198 | "confluencer": "bin/confluencer.js"
199 | }
200 | },
201 | "node_modules/content-disposition": {
202 | "version": "0.5.4",
203 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
204 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
205 | "dependencies": {
206 | "safe-buffer": "5.2.1"
207 | },
208 | "engines": {
209 | "node": ">= 0.6"
210 | }
211 | },
212 | "node_modules/content-type": {
213 | "version": "1.0.5",
214 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
215 | "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
216 | "engines": {
217 | "node": ">= 0.6"
218 | }
219 | },
220 | "node_modules/cookie": {
221 | "version": "0.6.0",
222 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
223 | "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
224 | "engines": {
225 | "node": ">= 0.6"
226 | }
227 | },
228 | "node_modules/cookie-signature": {
229 | "version": "1.0.6",
230 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
231 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
232 | },
233 | "node_modules/css-select": {
234 | "version": "5.1.0",
235 | "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz",
236 | "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==",
237 | "dependencies": {
238 | "boolbase": "^1.0.0",
239 | "css-what": "^6.1.0",
240 | "domhandler": "^5.0.2",
241 | "domutils": "^3.0.1",
242 | "nth-check": "^2.0.1"
243 | },
244 | "funding": {
245 | "url": "https://github.com/sponsors/fb55"
246 | }
247 | },
248 | "node_modules/css-what": {
249 | "version": "6.1.0",
250 | "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
251 | "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==",
252 | "engines": {
253 | "node": ">= 6"
254 | },
255 | "funding": {
256 | "url": "https://github.com/sponsors/fb55"
257 | }
258 | },
259 | "node_modules/debug": {
260 | "version": "2.6.9",
261 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
262 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
263 | "dependencies": {
264 | "ms": "2.0.0"
265 | }
266 | },
267 | "node_modules/define-data-property": {
268 | "version": "1.1.4",
269 | "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
270 | "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
271 | "dependencies": {
272 | "es-define-property": "^1.0.0",
273 | "es-errors": "^1.3.0",
274 | "gopd": "^1.0.1"
275 | },
276 | "engines": {
277 | "node": ">= 0.4"
278 | },
279 | "funding": {
280 | "url": "https://github.com/sponsors/ljharb"
281 | }
282 | },
283 | "node_modules/depd": {
284 | "version": "2.0.0",
285 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
286 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
287 | "engines": {
288 | "node": ">= 0.8"
289 | }
290 | },
291 | "node_modules/destroy": {
292 | "version": "1.2.0",
293 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
294 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
295 | "engines": {
296 | "node": ">= 0.8",
297 | "npm": "1.2.8000 || >= 1.4.16"
298 | }
299 | },
300 | "node_modules/dom-serializer": {
301 | "version": "2.0.0",
302 | "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
303 | "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
304 | "dependencies": {
305 | "domelementtype": "^2.3.0",
306 | "domhandler": "^5.0.2",
307 | "entities": "^4.2.0"
308 | },
309 | "funding": {
310 | "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
311 | }
312 | },
313 | "node_modules/domelementtype": {
314 | "version": "2.3.0",
315 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
316 | "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
317 | "funding": [
318 | {
319 | "type": "github",
320 | "url": "https://github.com/sponsors/fb55"
321 | }
322 | ]
323 | },
324 | "node_modules/domhandler": {
325 | "version": "5.0.3",
326 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
327 | "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
328 | "dependencies": {
329 | "domelementtype": "^2.3.0"
330 | },
331 | "engines": {
332 | "node": ">= 4"
333 | },
334 | "funding": {
335 | "url": "https://github.com/fb55/domhandler?sponsor=1"
336 | }
337 | },
338 | "node_modules/domutils": {
339 | "version": "3.1.0",
340 | "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz",
341 | "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==",
342 | "dependencies": {
343 | "dom-serializer": "^2.0.0",
344 | "domelementtype": "^2.3.0",
345 | "domhandler": "^5.0.3"
346 | },
347 | "funding": {
348 | "url": "https://github.com/fb55/domutils?sponsor=1"
349 | }
350 | },
351 | "node_modules/ee-first": {
352 | "version": "1.1.1",
353 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
354 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
355 | },
356 | "node_modules/emoji-regex": {
357 | "version": "10.3.0",
358 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz",
359 | "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw=="
360 | },
361 | "node_modules/encodeurl": {
362 | "version": "1.0.2",
363 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
364 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
365 | "engines": {
366 | "node": ">= 0.8"
367 | }
368 | },
369 | "node_modules/entities": {
370 | "version": "4.5.0",
371 | "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
372 | "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
373 | "engines": {
374 | "node": ">=0.12"
375 | },
376 | "funding": {
377 | "url": "https://github.com/fb55/entities?sponsor=1"
378 | }
379 | },
380 | "node_modules/es-define-property": {
381 | "version": "1.0.0",
382 | "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
383 | "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
384 | "dependencies": {
385 | "get-intrinsic": "^1.2.4"
386 | },
387 | "engines": {
388 | "node": ">= 0.4"
389 | }
390 | },
391 | "node_modules/es-errors": {
392 | "version": "1.3.0",
393 | "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
394 | "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
395 | "engines": {
396 | "node": ">= 0.4"
397 | }
398 | },
399 | "node_modules/escape-html": {
400 | "version": "1.0.3",
401 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
402 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
403 | },
404 | "node_modules/etag": {
405 | "version": "1.8.1",
406 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
407 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
408 | "engines": {
409 | "node": ">= 0.6"
410 | }
411 | },
412 | "node_modules/express": {
413 | "version": "4.19.2",
414 | "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz",
415 | "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==",
416 | "dependencies": {
417 | "accepts": "~1.3.8",
418 | "array-flatten": "1.1.1",
419 | "body-parser": "1.20.2",
420 | "content-disposition": "0.5.4",
421 | "content-type": "~1.0.4",
422 | "cookie": "0.6.0",
423 | "cookie-signature": "1.0.6",
424 | "debug": "2.6.9",
425 | "depd": "2.0.0",
426 | "encodeurl": "~1.0.2",
427 | "escape-html": "~1.0.3",
428 | "etag": "~1.8.1",
429 | "finalhandler": "1.2.0",
430 | "fresh": "0.5.2",
431 | "http-errors": "2.0.0",
432 | "merge-descriptors": "1.0.1",
433 | "methods": "~1.1.2",
434 | "on-finished": "2.4.1",
435 | "parseurl": "~1.3.3",
436 | "path-to-regexp": "0.1.7",
437 | "proxy-addr": "~2.0.7",
438 | "qs": "6.11.0",
439 | "range-parser": "~1.2.1",
440 | "safe-buffer": "5.2.1",
441 | "send": "0.18.0",
442 | "serve-static": "1.15.0",
443 | "setprototypeof": "1.2.0",
444 | "statuses": "2.0.1",
445 | "type-is": "~1.6.18",
446 | "utils-merge": "1.0.1",
447 | "vary": "~1.1.2"
448 | },
449 | "engines": {
450 | "node": ">= 0.10.0"
451 | }
452 | },
453 | "node_modules/finalhandler": {
454 | "version": "1.2.0",
455 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
456 | "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
457 | "dependencies": {
458 | "debug": "2.6.9",
459 | "encodeurl": "~1.0.2",
460 | "escape-html": "~1.0.3",
461 | "on-finished": "2.4.1",
462 | "parseurl": "~1.3.3",
463 | "statuses": "2.0.1",
464 | "unpipe": "~1.0.0"
465 | },
466 | "engines": {
467 | "node": ">= 0.8"
468 | }
469 | },
470 | "node_modules/forwarded": {
471 | "version": "0.2.0",
472 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
473 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
474 | "engines": {
475 | "node": ">= 0.6"
476 | }
477 | },
478 | "node_modules/fresh": {
479 | "version": "0.5.2",
480 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
481 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
482 | "engines": {
483 | "node": ">= 0.6"
484 | }
485 | },
486 | "node_modules/function-bind": {
487 | "version": "1.1.2",
488 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
489 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
490 | "funding": {
491 | "url": "https://github.com/sponsors/ljharb"
492 | }
493 | },
494 | "node_modules/get-intrinsic": {
495 | "version": "1.2.4",
496 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
497 | "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
498 | "dependencies": {
499 | "es-errors": "^1.3.0",
500 | "function-bind": "^1.1.2",
501 | "has-proto": "^1.0.1",
502 | "has-symbols": "^1.0.3",
503 | "hasown": "^2.0.0"
504 | },
505 | "engines": {
506 | "node": ">= 0.4"
507 | },
508 | "funding": {
509 | "url": "https://github.com/sponsors/ljharb"
510 | }
511 | },
512 | "node_modules/gopd": {
513 | "version": "1.0.1",
514 | "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
515 | "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
516 | "dependencies": {
517 | "get-intrinsic": "^1.1.3"
518 | },
519 | "funding": {
520 | "url": "https://github.com/sponsors/ljharb"
521 | }
522 | },
523 | "node_modules/has-property-descriptors": {
524 | "version": "1.0.2",
525 | "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
526 | "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
527 | "dependencies": {
528 | "es-define-property": "^1.0.0"
529 | },
530 | "funding": {
531 | "url": "https://github.com/sponsors/ljharb"
532 | }
533 | },
534 | "node_modules/has-proto": {
535 | "version": "1.0.3",
536 | "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
537 | "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
538 | "engines": {
539 | "node": ">= 0.4"
540 | },
541 | "funding": {
542 | "url": "https://github.com/sponsors/ljharb"
543 | }
544 | },
545 | "node_modules/has-symbols": {
546 | "version": "1.0.3",
547 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
548 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
549 | "engines": {
550 | "node": ">= 0.4"
551 | },
552 | "funding": {
553 | "url": "https://github.com/sponsors/ljharb"
554 | }
555 | },
556 | "node_modules/hasown": {
557 | "version": "2.0.2",
558 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
559 | "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
560 | "dependencies": {
561 | "function-bind": "^1.1.2"
562 | },
563 | "engines": {
564 | "node": ">= 0.4"
565 | }
566 | },
567 | "node_modules/highlight.js": {
568 | "version": "11.9.0",
569 | "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.9.0.tgz",
570 | "integrity": "sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw==",
571 | "engines": {
572 | "node": ">=12.0.0"
573 | }
574 | },
575 | "node_modules/html-entities": {
576 | "version": "2.5.2",
577 | "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz",
578 | "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==",
579 | "funding": [
580 | {
581 | "type": "github",
582 | "url": "https://github.com/sponsors/mdevils"
583 | },
584 | {
585 | "type": "patreon",
586 | "url": "https://patreon.com/mdevils"
587 | }
588 | ]
589 | },
590 | "node_modules/htmlparser2": {
591 | "version": "8.0.2",
592 | "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz",
593 | "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==",
594 | "funding": [
595 | "https://github.com/fb55/htmlparser2?sponsor=1",
596 | {
597 | "type": "github",
598 | "url": "https://github.com/sponsors/fb55"
599 | }
600 | ],
601 | "dependencies": {
602 | "domelementtype": "^2.3.0",
603 | "domhandler": "^5.0.3",
604 | "domutils": "^3.0.1",
605 | "entities": "^4.4.0"
606 | }
607 | },
608 | "node_modules/http-errors": {
609 | "version": "2.0.0",
610 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
611 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
612 | "dependencies": {
613 | "depd": "2.0.0",
614 | "inherits": "2.0.4",
615 | "setprototypeof": "1.2.0",
616 | "statuses": "2.0.1",
617 | "toidentifier": "1.0.1"
618 | },
619 | "engines": {
620 | "node": ">= 0.8"
621 | }
622 | },
623 | "node_modules/iconv-lite": {
624 | "version": "0.4.24",
625 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
626 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
627 | "dependencies": {
628 | "safer-buffer": ">= 2.1.2 < 3"
629 | },
630 | "engines": {
631 | "node": ">=0.10.0"
632 | }
633 | },
634 | "node_modules/inherits": {
635 | "version": "2.0.4",
636 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
637 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
638 | },
639 | "node_modules/ipaddr.js": {
640 | "version": "1.9.1",
641 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
642 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
643 | "engines": {
644 | "node": ">= 0.10"
645 | }
646 | },
647 | "node_modules/is-arrayish": {
648 | "version": "0.3.2",
649 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
650 | "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
651 | },
652 | "node_modules/katex": {
653 | "version": "0.16.10",
654 | "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.10.tgz",
655 | "integrity": "sha512-ZiqaC04tp2O5utMsl2TEZTXxa6WSC4yo0fv5ML++D3QZv/vx2Mct0mTlRx3O+uUkjfuAgOkzsCmq5MiUEsDDdA==",
656 | "funding": [
657 | "https://opencollective.com/katex",
658 | "https://github.com/sponsors/katex"
659 | ],
660 | "dependencies": {
661 | "commander": "^8.3.0"
662 | },
663 | "bin": {
664 | "katex": "cli.js"
665 | }
666 | },
667 | "node_modules/linkify-it": {
668 | "version": "5.0.0",
669 | "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz",
670 | "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==",
671 | "dependencies": {
672 | "uc.micro": "^2.0.0"
673 | }
674 | },
675 | "node_modules/lodash": {
676 | "version": "4.17.21",
677 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
678 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
679 | },
680 | "node_modules/map-lru": {
681 | "version": "2.0.0",
682 | "resolved": "https://registry.npmjs.org/map-lru/-/map-lru-2.0.0.tgz",
683 | "integrity": "sha512-a5TlnsxvczXMY7U/U4P0b7GI3KSAonc+u2MQtWQS5L21K9UV4fYQbbgktj3eqP5ch04XtCOcoqR0OlILo906nA==",
684 | "engines": {
685 | "node": ">=12"
686 | }
687 | },
688 | "node_modules/markdown-it": {
689 | "version": "14.1.0",
690 | "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz",
691 | "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==",
692 | "dependencies": {
693 | "argparse": "^2.0.1",
694 | "entities": "^4.4.0",
695 | "linkify-it": "^5.0.0",
696 | "mdurl": "^2.0.0",
697 | "punycode.js": "^2.3.1",
698 | "uc.micro": "^2.1.0"
699 | },
700 | "bin": {
701 | "markdown-it": "bin/markdown-it.mjs"
702 | }
703 | },
704 | "node_modules/markdown-it-abbr": {
705 | "version": "2.0.0",
706 | "resolved": "https://registry.npmjs.org/markdown-it-abbr/-/markdown-it-abbr-2.0.0.tgz",
707 | "integrity": "sha512-of7C8pXSjXjDojW4neNP+jD7inUYH/DO0Ca+K/4FUEccg0oHAEX/nfscw0jfz66PJbYWOAT9U8mjO21X5p6aAw=="
708 | },
709 | "node_modules/markdown-it-admon": {
710 | "version": "1.0.1",
711 | "resolved": "https://registry.npmjs.org/markdown-it-admon/-/markdown-it-admon-1.0.1.tgz",
712 | "integrity": "sha512-+slgF0zZQ5908uo+U0cNBY6CUG4ym2GZsOdliDdn6P5doMubfxEZsVW3POaJOzXpd6VXLmn95NYa9Qdp7OMK7Q=="
713 | },
714 | "node_modules/markdown-it-anchor": {
715 | "version": "8.6.7",
716 | "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz",
717 | "integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==",
718 | "peerDependencies": {
719 | "@types/markdown-it": "*",
720 | "markdown-it": "*"
721 | }
722 | },
723 | "node_modules/markdown-it-attrs": {
724 | "version": "4.1.6",
725 | "resolved": "https://registry.npmjs.org/markdown-it-attrs/-/markdown-it-attrs-4.1.6.tgz",
726 | "integrity": "sha512-O7PDKZlN8RFMyDX13JnctQompwrrILuz2y43pW2GagcwpIIElkAdfeek+erHfxUOlXWPsjFeWmZ8ch1xtRLWpA==",
727 | "engines": {
728 | "node": ">=6"
729 | },
730 | "peerDependencies": {
731 | "markdown-it": ">= 9.0.0"
732 | }
733 | },
734 | "node_modules/markdown-it-deflist": {
735 | "version": "3.0.0",
736 | "resolved": "https://registry.npmjs.org/markdown-it-deflist/-/markdown-it-deflist-3.0.0.tgz",
737 | "integrity": "sha512-OxPmQ/keJZwbubjiQWOvKLHwpV2wZ5I3Smc81OjhwbfJsjdRrvD5aLTQxmZzzePeO0kbGzAo3Krk4QLgA8PWLg=="
738 | },
739 | "node_modules/markdown-it-emoji": {
740 | "version": "3.0.0",
741 | "resolved": "https://registry.npmjs.org/markdown-it-emoji/-/markdown-it-emoji-3.0.0.tgz",
742 | "integrity": "sha512-+rUD93bXHubA4arpEZO3q80so0qgoFJEKRkRbjKX8RTdca89v2kfyF+xR3i2sQTwql9tpPZPOQN5B+PunspXRg=="
743 | },
744 | "node_modules/markdown-it-footnote": {
745 | "version": "4.0.0",
746 | "resolved": "https://registry.npmjs.org/markdown-it-footnote/-/markdown-it-footnote-4.0.0.tgz",
747 | "integrity": "sha512-WYJ7urf+khJYl3DqofQpYfEYkZKbmXmwxQV8c8mO/hGIhgZ1wOe7R4HLFNwqx7TjILbnC98fuyeSsin19JdFcQ=="
748 | },
749 | "node_modules/markdown-it-highlightjs": {
750 | "version": "4.0.1",
751 | "resolved": "https://registry.npmjs.org/markdown-it-highlightjs/-/markdown-it-highlightjs-4.0.1.tgz",
752 | "integrity": "sha512-EPXwFEN6P5nqR3G4KjT20r20xbGYKMMA/360hhSYFmeoGXTE6hsLtJAiB/8ID8slVH4CWHHEL7GX0YenyIstVQ==",
753 | "dependencies": {
754 | "highlight.js": "^11.5.1"
755 | }
756 | },
757 | "node_modules/markdown-it-mark": {
758 | "version": "4.0.0",
759 | "resolved": "https://registry.npmjs.org/markdown-it-mark/-/markdown-it-mark-4.0.0.tgz",
760 | "integrity": "sha512-YLhzaOsU9THO/cal0lUjfMjrqSMPjjyjChYM7oyj4DnyaXEzA8gnW6cVJeyCrCVeyesrY2PlEdUYJSPFYL4Nkg=="
761 | },
762 | "node_modules/markdown-it-multimd-table": {
763 | "version": "4.2.3",
764 | "resolved": "https://registry.npmjs.org/markdown-it-multimd-table/-/markdown-it-multimd-table-4.2.3.tgz",
765 | "integrity": "sha512-KepCr2OMJqm7IT6sOIbuqHGe+NERhgy66XMrc5lo6dHW7oaPzMDtYwR1EGwK16/blb6mCSg4jqityOe0o/H7HA=="
766 | },
767 | "node_modules/markdown-it-sub": {
768 | "version": "2.0.0",
769 | "resolved": "https://registry.npmjs.org/markdown-it-sub/-/markdown-it-sub-2.0.0.tgz",
770 | "integrity": "sha512-iCBKgwCkfQBRg2vApy9vx1C1Tu6D8XYo8NvevI3OlwzBRmiMtsJ2sXupBgEA7PPxiDwNni3qIUkhZ6j5wofDUA=="
771 | },
772 | "node_modules/markdown-it-sup": {
773 | "version": "2.0.0",
774 | "resolved": "https://registry.npmjs.org/markdown-it-sup/-/markdown-it-sup-2.0.0.tgz",
775 | "integrity": "sha512-5VgmdKlkBd8sgXuoDoxMpiU+BiEt3I49GItBzzw7Mxq9CxvnhE/k09HFli09zgfFDRixDQDfDxi0mgBCXtaTvA=="
776 | },
777 | "node_modules/markdown-it-task-lists": {
778 | "version": "2.1.1",
779 | "resolved": "https://registry.npmjs.org/markdown-it-task-lists/-/markdown-it-task-lists-2.1.1.tgz",
780 | "integrity": "sha512-TxFAc76Jnhb2OUu+n3yz9RMu4CwGfaT788br6HhEDlvWfdeJcLUsxk1Hgw2yJio0OXsxv7pyIPmvECY7bMbluA=="
781 | },
782 | "node_modules/markedpp": {
783 | "version": "1.3.0",
784 | "resolved": "https://registry.npmjs.org/markedpp/-/markedpp-1.3.0.tgz",
785 | "integrity": "sha512-s4rUlwlTAiuzPsHjztmQHRP6CMpWdk9GxmkXLMnMO81x17EAXIrHSjdUP3qZqsQTXCEpqSCXUHJXKabz4l0xnQ==",
786 | "dependencies": {
787 | "asyncc": "^2.0.6",
788 | "emoji-regex": "^10.3.0",
789 | "html-entities": "^2.4.0"
790 | },
791 | "bin": {
792 | "markedpp": "bin/markedpp.js"
793 | },
794 | "engines": {
795 | "node": ">=6.0.0"
796 | }
797 | },
798 | "node_modules/md-fileserver": {
799 | "version": "1.10.0",
800 | "resolved": "https://registry.npmjs.org/md-fileserver/-/md-fileserver-1.10.0.tgz",
801 | "integrity": "sha512-1QFmBFJEfSTrGZ985txoAfZf+asrhzLkp4FB95Ufi61JPg4zQTGokoqHN2niAfInJZTghnUGdxNwomKsfKrIBg==",
802 | "dependencies": {
803 | "@commenthol/markdown-it-katex": "^2.0.8",
804 | "asyncc": "^2.0.6",
805 | "body-parser": "^1.20.2",
806 | "confluencer": "^1.5.1",
807 | "cookie": "^0.6.0",
808 | "express": "^4.18.2",
809 | "highlight.js": "^11.9.0",
810 | "lodash": "^4.17.21",
811 | "markdown-it": "^14.0.0",
812 | "markdown-it-abbr": "^2.0.0",
813 | "markdown-it-admon": "^1.0.0",
814 | "markdown-it-anchor": "^8.6.7",
815 | "markdown-it-attrs": "^4.1.6",
816 | "markdown-it-deflist": "^3.0.0",
817 | "markdown-it-emoji": "^3.0.0",
818 | "markdown-it-footnote": "^4.0.0",
819 | "markdown-it-highlightjs": "^4.0.1",
820 | "markdown-it-mark": "^4.0.0",
821 | "markdown-it-multimd-table": "^4.2.3",
822 | "markdown-it-sub": "^2.0.0",
823 | "markdown-it-sup": "^2.0.0",
824 | "markdown-it-task-lists": "^2.1.1",
825 | "markedpp": "^1.3.0",
826 | "serve-index": "^1.9.1",
827 | "serve-static": "^1.15.0",
828 | "ws": "^8.16.0"
829 | },
830 | "bin": {
831 | "mdstart": "bin/mdstart.js"
832 | }
833 | },
834 | "node_modules/mdurl": {
835 | "version": "2.0.0",
836 | "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz",
837 | "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w=="
838 | },
839 | "node_modules/media-typer": {
840 | "version": "0.3.0",
841 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
842 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
843 | "engines": {
844 | "node": ">= 0.6"
845 | }
846 | },
847 | "node_modules/merge-descriptors": {
848 | "version": "1.0.1",
849 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
850 | "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
851 | },
852 | "node_modules/methods": {
853 | "version": "1.1.2",
854 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
855 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
856 | "engines": {
857 | "node": ">= 0.6"
858 | }
859 | },
860 | "node_modules/mime": {
861 | "version": "1.6.0",
862 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
863 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
864 | "bin": {
865 | "mime": "cli.js"
866 | },
867 | "engines": {
868 | "node": ">=4"
869 | }
870 | },
871 | "node_modules/mime-db": {
872 | "version": "1.52.0",
873 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
874 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
875 | "engines": {
876 | "node": ">= 0.6"
877 | }
878 | },
879 | "node_modules/mime-types": {
880 | "version": "2.1.35",
881 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
882 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
883 | "dependencies": {
884 | "mime-db": "1.52.0"
885 | },
886 | "engines": {
887 | "node": ">= 0.6"
888 | }
889 | },
890 | "node_modules/ms": {
891 | "version": "2.0.0",
892 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
893 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
894 | },
895 | "node_modules/negotiator": {
896 | "version": "0.6.3",
897 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
898 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
899 | "engines": {
900 | "node": ">= 0.6"
901 | }
902 | },
903 | "node_modules/nth-check": {
904 | "version": "2.1.1",
905 | "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
906 | "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
907 | "dependencies": {
908 | "boolbase": "^1.0.0"
909 | },
910 | "funding": {
911 | "url": "https://github.com/fb55/nth-check?sponsor=1"
912 | }
913 | },
914 | "node_modules/object-inspect": {
915 | "version": "1.13.1",
916 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz",
917 | "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==",
918 | "funding": {
919 | "url": "https://github.com/sponsors/ljharb"
920 | }
921 | },
922 | "node_modules/on-finished": {
923 | "version": "2.4.1",
924 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
925 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
926 | "dependencies": {
927 | "ee-first": "1.1.1"
928 | },
929 | "engines": {
930 | "node": ">= 0.8"
931 | }
932 | },
933 | "node_modules/parse5": {
934 | "version": "7.1.2",
935 | "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
936 | "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==",
937 | "dependencies": {
938 | "entities": "^4.4.0"
939 | },
940 | "funding": {
941 | "url": "https://github.com/inikulin/parse5?sponsor=1"
942 | }
943 | },
944 | "node_modules/parse5-htmlparser2-tree-adapter": {
945 | "version": "7.0.0",
946 | "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz",
947 | "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==",
948 | "dependencies": {
949 | "domhandler": "^5.0.2",
950 | "parse5": "^7.0.0"
951 | },
952 | "funding": {
953 | "url": "https://github.com/inikulin/parse5?sponsor=1"
954 | }
955 | },
956 | "node_modules/parseurl": {
957 | "version": "1.3.3",
958 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
959 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
960 | "engines": {
961 | "node": ">= 0.8"
962 | }
963 | },
964 | "node_modules/path-to-regexp": {
965 | "version": "0.1.7",
966 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
967 | "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
968 | },
969 | "node_modules/proxy-addr": {
970 | "version": "2.0.7",
971 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
972 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
973 | "dependencies": {
974 | "forwarded": "0.2.0",
975 | "ipaddr.js": "1.9.1"
976 | },
977 | "engines": {
978 | "node": ">= 0.10"
979 | }
980 | },
981 | "node_modules/punycode.js": {
982 | "version": "2.3.1",
983 | "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz",
984 | "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==",
985 | "engines": {
986 | "node": ">=6"
987 | }
988 | },
989 | "node_modules/qs": {
990 | "version": "6.11.0",
991 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
992 | "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
993 | "dependencies": {
994 | "side-channel": "^1.0.4"
995 | },
996 | "engines": {
997 | "node": ">=0.6"
998 | },
999 | "funding": {
1000 | "url": "https://github.com/sponsors/ljharb"
1001 | }
1002 | },
1003 | "node_modules/range-parser": {
1004 | "version": "1.2.1",
1005 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
1006 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
1007 | "engines": {
1008 | "node": ">= 0.6"
1009 | }
1010 | },
1011 | "node_modules/raw-body": {
1012 | "version": "2.5.2",
1013 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
1014 | "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
1015 | "dependencies": {
1016 | "bytes": "3.1.2",
1017 | "http-errors": "2.0.0",
1018 | "iconv-lite": "0.4.24",
1019 | "unpipe": "1.0.0"
1020 | },
1021 | "engines": {
1022 | "node": ">= 0.8"
1023 | }
1024 | },
1025 | "node_modules/safe-buffer": {
1026 | "version": "5.2.1",
1027 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
1028 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
1029 | "funding": [
1030 | {
1031 | "type": "github",
1032 | "url": "https://github.com/sponsors/feross"
1033 | },
1034 | {
1035 | "type": "patreon",
1036 | "url": "https://www.patreon.com/feross"
1037 | },
1038 | {
1039 | "type": "consulting",
1040 | "url": "https://feross.org/support"
1041 | }
1042 | ]
1043 | },
1044 | "node_modules/safer-buffer": {
1045 | "version": "2.1.2",
1046 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
1047 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
1048 | },
1049 | "node_modules/send": {
1050 | "version": "0.18.0",
1051 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
1052 | "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
1053 | "dependencies": {
1054 | "debug": "2.6.9",
1055 | "depd": "2.0.0",
1056 | "destroy": "1.2.0",
1057 | "encodeurl": "~1.0.2",
1058 | "escape-html": "~1.0.3",
1059 | "etag": "~1.8.1",
1060 | "fresh": "0.5.2",
1061 | "http-errors": "2.0.0",
1062 | "mime": "1.6.0",
1063 | "ms": "2.1.3",
1064 | "on-finished": "2.4.1",
1065 | "range-parser": "~1.2.1",
1066 | "statuses": "2.0.1"
1067 | },
1068 | "engines": {
1069 | "node": ">= 0.8.0"
1070 | }
1071 | },
1072 | "node_modules/send/node_modules/ms": {
1073 | "version": "2.1.3",
1074 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1075 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
1076 | },
1077 | "node_modules/serve-index": {
1078 | "version": "1.9.1",
1079 | "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
1080 | "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==",
1081 | "dependencies": {
1082 | "accepts": "~1.3.4",
1083 | "batch": "0.6.1",
1084 | "debug": "2.6.9",
1085 | "escape-html": "~1.0.3",
1086 | "http-errors": "~1.6.2",
1087 | "mime-types": "~2.1.17",
1088 | "parseurl": "~1.3.2"
1089 | },
1090 | "engines": {
1091 | "node": ">= 0.8.0"
1092 | }
1093 | },
1094 | "node_modules/serve-index/node_modules/depd": {
1095 | "version": "1.1.2",
1096 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
1097 | "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
1098 | "engines": {
1099 | "node": ">= 0.6"
1100 | }
1101 | },
1102 | "node_modules/serve-index/node_modules/http-errors": {
1103 | "version": "1.6.3",
1104 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
1105 | "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==",
1106 | "dependencies": {
1107 | "depd": "~1.1.2",
1108 | "inherits": "2.0.3",
1109 | "setprototypeof": "1.1.0",
1110 | "statuses": ">= 1.4.0 < 2"
1111 | },
1112 | "engines": {
1113 | "node": ">= 0.6"
1114 | }
1115 | },
1116 | "node_modules/serve-index/node_modules/inherits": {
1117 | "version": "2.0.3",
1118 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
1119 | "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw=="
1120 | },
1121 | "node_modules/serve-index/node_modules/setprototypeof": {
1122 | "version": "1.1.0",
1123 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
1124 | "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ=="
1125 | },
1126 | "node_modules/serve-index/node_modules/statuses": {
1127 | "version": "1.5.0",
1128 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
1129 | "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
1130 | "engines": {
1131 | "node": ">= 0.6"
1132 | }
1133 | },
1134 | "node_modules/serve-static": {
1135 | "version": "1.15.0",
1136 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
1137 | "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
1138 | "dependencies": {
1139 | "encodeurl": "~1.0.2",
1140 | "escape-html": "~1.0.3",
1141 | "parseurl": "~1.3.3",
1142 | "send": "0.18.0"
1143 | },
1144 | "engines": {
1145 | "node": ">= 0.8.0"
1146 | }
1147 | },
1148 | "node_modules/set-function-length": {
1149 | "version": "1.2.2",
1150 | "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
1151 | "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
1152 | "dependencies": {
1153 | "define-data-property": "^1.1.4",
1154 | "es-errors": "^1.3.0",
1155 | "function-bind": "^1.1.2",
1156 | "get-intrinsic": "^1.2.4",
1157 | "gopd": "^1.0.1",
1158 | "has-property-descriptors": "^1.0.2"
1159 | },
1160 | "engines": {
1161 | "node": ">= 0.4"
1162 | }
1163 | },
1164 | "node_modules/setprototypeof": {
1165 | "version": "1.2.0",
1166 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
1167 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
1168 | },
1169 | "node_modules/side-channel": {
1170 | "version": "1.0.6",
1171 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
1172 | "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
1173 | "dependencies": {
1174 | "call-bind": "^1.0.7",
1175 | "es-errors": "^1.3.0",
1176 | "get-intrinsic": "^1.2.4",
1177 | "object-inspect": "^1.13.1"
1178 | },
1179 | "engines": {
1180 | "node": ">= 0.4"
1181 | },
1182 | "funding": {
1183 | "url": "https://github.com/sponsors/ljharb"
1184 | }
1185 | },
1186 | "node_modules/simple-swizzle": {
1187 | "version": "0.2.2",
1188 | "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
1189 | "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
1190 | "dependencies": {
1191 | "is-arrayish": "^0.3.1"
1192 | }
1193 | },
1194 | "node_modules/statuses": {
1195 | "version": "2.0.1",
1196 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
1197 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
1198 | "engines": {
1199 | "node": ">= 0.8"
1200 | }
1201 | },
1202 | "node_modules/toidentifier": {
1203 | "version": "1.0.1",
1204 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
1205 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
1206 | "engines": {
1207 | "node": ">=0.6"
1208 | }
1209 | },
1210 | "node_modules/type-is": {
1211 | "version": "1.6.18",
1212 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
1213 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
1214 | "dependencies": {
1215 | "media-typer": "0.3.0",
1216 | "mime-types": "~2.1.24"
1217 | },
1218 | "engines": {
1219 | "node": ">= 0.6"
1220 | }
1221 | },
1222 | "node_modules/uc.micro": {
1223 | "version": "2.1.0",
1224 | "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz",
1225 | "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A=="
1226 | },
1227 | "node_modules/unpipe": {
1228 | "version": "1.0.0",
1229 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
1230 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
1231 | "engines": {
1232 | "node": ">= 0.8"
1233 | }
1234 | },
1235 | "node_modules/utils-merge": {
1236 | "version": "1.0.1",
1237 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
1238 | "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
1239 | "engines": {
1240 | "node": ">= 0.4.0"
1241 | }
1242 | },
1243 | "node_modules/vary": {
1244 | "version": "1.1.2",
1245 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
1246 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
1247 | "engines": {
1248 | "node": ">= 0.8"
1249 | }
1250 | },
1251 | "node_modules/ws": {
1252 | "version": "8.16.0",
1253 | "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz",
1254 | "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==",
1255 | "engines": {
1256 | "node": ">=10.0.0"
1257 | },
1258 | "peerDependencies": {
1259 | "bufferutil": "^4.0.1",
1260 | "utf-8-validate": ">=5.0.2"
1261 | },
1262 | "peerDependenciesMeta": {
1263 | "bufferutil": {
1264 | "optional": true
1265 | },
1266 | "utf-8-validate": {
1267 | "optional": true
1268 | }
1269 | }
1270 | }
1271 | },
1272 | "dependencies": {
1273 | "@commenthol/markdown-it-katex": {
1274 | "version": "2.0.8",
1275 | "resolved": "https://registry.npmjs.org/@commenthol/markdown-it-katex/-/markdown-it-katex-2.0.8.tgz",
1276 | "integrity": "sha512-5PQBQNLw4FCZDIQrx/oQxCxOTq+HR2y53xbDkcqViUDVRVkG3Lp0VHPtmmtQDjRKDeb3pWr5ez9S2S8g9uAvmg==",
1277 | "requires": {
1278 | "katex": "^0.16.9"
1279 | }
1280 | },
1281 | "@types/linkify-it": {
1282 | "version": "3.0.5",
1283 | "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.5.tgz",
1284 | "integrity": "sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw==",
1285 | "peer": true
1286 | },
1287 | "@types/markdown-it": {
1288 | "version": "14.0.1",
1289 | "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.0.1.tgz",
1290 | "integrity": "sha512-6WfOG3jXR78DW8L5cTYCVVGAsIFZskRHCDo5tbqa+qtKVt4oDRVH7hyIWu1SpDQJlmIoEivNQZ5h+AGAOrgOtQ==",
1291 | "peer": true,
1292 | "requires": {
1293 | "@types/linkify-it": "*",
1294 | "@types/mdurl": "*"
1295 | }
1296 | },
1297 | "@types/mdurl": {
1298 | "version": "1.0.5",
1299 | "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.5.tgz",
1300 | "integrity": "sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA==",
1301 | "peer": true
1302 | },
1303 | "accepts": {
1304 | "version": "1.3.8",
1305 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
1306 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
1307 | "requires": {
1308 | "mime-types": "~2.1.34",
1309 | "negotiator": "0.6.3"
1310 | }
1311 | },
1312 | "argparse": {
1313 | "version": "2.0.1",
1314 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
1315 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
1316 | },
1317 | "array-flatten": {
1318 | "version": "1.1.1",
1319 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
1320 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
1321 | },
1322 | "asyncc": {
1323 | "version": "2.0.6",
1324 | "resolved": "https://registry.npmjs.org/asyncc/-/asyncc-2.0.6.tgz",
1325 | "integrity": "sha512-m3nkCP6CKuLubt2vwqoOio8NmOJPjUL6dcaNNxqc9q4H2Rq9wNs+2UsIzBegiJzUtoyh9X9iBe4GIhqu1uOvqA=="
1326 | },
1327 | "batch": {
1328 | "version": "0.6.1",
1329 | "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
1330 | "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw=="
1331 | },
1332 | "body-parser": {
1333 | "version": "1.20.2",
1334 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz",
1335 | "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==",
1336 | "requires": {
1337 | "bytes": "3.1.2",
1338 | "content-type": "~1.0.5",
1339 | "debug": "2.6.9",
1340 | "depd": "2.0.0",
1341 | "destroy": "1.2.0",
1342 | "http-errors": "2.0.0",
1343 | "iconv-lite": "0.4.24",
1344 | "on-finished": "2.4.1",
1345 | "qs": "6.11.0",
1346 | "raw-body": "2.5.2",
1347 | "type-is": "~1.6.18",
1348 | "unpipe": "1.0.0"
1349 | }
1350 | },
1351 | "boolbase": {
1352 | "version": "1.0.0",
1353 | "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
1354 | "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="
1355 | },
1356 | "bytes": {
1357 | "version": "3.1.2",
1358 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
1359 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="
1360 | },
1361 | "call-bind": {
1362 | "version": "1.0.7",
1363 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
1364 | "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
1365 | "requires": {
1366 | "es-define-property": "^1.0.0",
1367 | "es-errors": "^1.3.0",
1368 | "function-bind": "^1.1.2",
1369 | "get-intrinsic": "^1.2.4",
1370 | "set-function-length": "^1.2.1"
1371 | }
1372 | },
1373 | "cheerio": {
1374 | "version": "1.0.0-rc.12",
1375 | "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz",
1376 | "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==",
1377 | "requires": {
1378 | "cheerio-select": "^2.1.0",
1379 | "dom-serializer": "^2.0.0",
1380 | "domhandler": "^5.0.3",
1381 | "domutils": "^3.0.1",
1382 | "htmlparser2": "^8.0.1",
1383 | "parse5": "^7.0.0",
1384 | "parse5-htmlparser2-tree-adapter": "^7.0.0"
1385 | }
1386 | },
1387 | "cheerio-select": {
1388 | "version": "2.1.0",
1389 | "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz",
1390 | "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==",
1391 | "requires": {
1392 | "boolbase": "^1.0.0",
1393 | "css-select": "^5.1.0",
1394 | "css-what": "^6.1.0",
1395 | "domelementtype": "^2.3.0",
1396 | "domhandler": "^5.0.3",
1397 | "domutils": "^3.0.1"
1398 | }
1399 | },
1400 | "color-name": {
1401 | "version": "1.1.4",
1402 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
1403 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
1404 | },
1405 | "color-string": {
1406 | "version": "1.9.1",
1407 | "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
1408 | "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
1409 | "requires": {
1410 | "color-name": "^1.0.0",
1411 | "simple-swizzle": "^0.2.2"
1412 | }
1413 | },
1414 | "commander": {
1415 | "version": "8.3.0",
1416 | "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
1417 | "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww=="
1418 | },
1419 | "confluencer": {
1420 | "version": "1.5.1",
1421 | "resolved": "https://registry.npmjs.org/confluencer/-/confluencer-1.5.1.tgz",
1422 | "integrity": "sha512-FyOe/qZ9Hz7a9JPqw6zbKT6uQE6StVmYOIMEFt6/RwGsts1kaMJHgUt7q7iYvpdsKEQrvqTEyiAKELvgo8DPEQ==",
1423 | "requires": {
1424 | "cheerio": "^1.0.0-rc.10",
1425 | "color-string": "^1.6.0",
1426 | "map-lru": "^2.0.0"
1427 | }
1428 | },
1429 | "content-disposition": {
1430 | "version": "0.5.4",
1431 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
1432 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
1433 | "requires": {
1434 | "safe-buffer": "5.2.1"
1435 | }
1436 | },
1437 | "content-type": {
1438 | "version": "1.0.5",
1439 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
1440 | "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA=="
1441 | },
1442 | "cookie": {
1443 | "version": "0.6.0",
1444 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
1445 | "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw=="
1446 | },
1447 | "cookie-signature": {
1448 | "version": "1.0.6",
1449 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
1450 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
1451 | },
1452 | "css-select": {
1453 | "version": "5.1.0",
1454 | "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz",
1455 | "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==",
1456 | "requires": {
1457 | "boolbase": "^1.0.0",
1458 | "css-what": "^6.1.0",
1459 | "domhandler": "^5.0.2",
1460 | "domutils": "^3.0.1",
1461 | "nth-check": "^2.0.1"
1462 | }
1463 | },
1464 | "css-what": {
1465 | "version": "6.1.0",
1466 | "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
1467 | "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw=="
1468 | },
1469 | "debug": {
1470 | "version": "2.6.9",
1471 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
1472 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
1473 | "requires": {
1474 | "ms": "2.0.0"
1475 | }
1476 | },
1477 | "define-data-property": {
1478 | "version": "1.1.4",
1479 | "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
1480 | "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
1481 | "requires": {
1482 | "es-define-property": "^1.0.0",
1483 | "es-errors": "^1.3.0",
1484 | "gopd": "^1.0.1"
1485 | }
1486 | },
1487 | "depd": {
1488 | "version": "2.0.0",
1489 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
1490 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
1491 | },
1492 | "destroy": {
1493 | "version": "1.2.0",
1494 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
1495 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg=="
1496 | },
1497 | "dom-serializer": {
1498 | "version": "2.0.0",
1499 | "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
1500 | "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
1501 | "requires": {
1502 | "domelementtype": "^2.3.0",
1503 | "domhandler": "^5.0.2",
1504 | "entities": "^4.2.0"
1505 | }
1506 | },
1507 | "domelementtype": {
1508 | "version": "2.3.0",
1509 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
1510 | "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw=="
1511 | },
1512 | "domhandler": {
1513 | "version": "5.0.3",
1514 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
1515 | "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
1516 | "requires": {
1517 | "domelementtype": "^2.3.0"
1518 | }
1519 | },
1520 | "domutils": {
1521 | "version": "3.1.0",
1522 | "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz",
1523 | "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==",
1524 | "requires": {
1525 | "dom-serializer": "^2.0.0",
1526 | "domelementtype": "^2.3.0",
1527 | "domhandler": "^5.0.3"
1528 | }
1529 | },
1530 | "ee-first": {
1531 | "version": "1.1.1",
1532 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
1533 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
1534 | },
1535 | "emoji-regex": {
1536 | "version": "10.3.0",
1537 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz",
1538 | "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw=="
1539 | },
1540 | "encodeurl": {
1541 | "version": "1.0.2",
1542 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
1543 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w=="
1544 | },
1545 | "entities": {
1546 | "version": "4.5.0",
1547 | "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
1548 | "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="
1549 | },
1550 | "es-define-property": {
1551 | "version": "1.0.0",
1552 | "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
1553 | "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
1554 | "requires": {
1555 | "get-intrinsic": "^1.2.4"
1556 | }
1557 | },
1558 | "es-errors": {
1559 | "version": "1.3.0",
1560 | "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
1561 | "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="
1562 | },
1563 | "escape-html": {
1564 | "version": "1.0.3",
1565 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
1566 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
1567 | },
1568 | "etag": {
1569 | "version": "1.8.1",
1570 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
1571 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="
1572 | },
1573 | "express": {
1574 | "version": "4.19.2",
1575 | "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz",
1576 | "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==",
1577 | "requires": {
1578 | "accepts": "~1.3.8",
1579 | "array-flatten": "1.1.1",
1580 | "body-parser": "1.20.2",
1581 | "content-disposition": "0.5.4",
1582 | "content-type": "~1.0.4",
1583 | "cookie": "0.6.0",
1584 | "cookie-signature": "1.0.6",
1585 | "debug": "2.6.9",
1586 | "depd": "2.0.0",
1587 | "encodeurl": "~1.0.2",
1588 | "escape-html": "~1.0.3",
1589 | "etag": "~1.8.1",
1590 | "finalhandler": "1.2.0",
1591 | "fresh": "0.5.2",
1592 | "http-errors": "2.0.0",
1593 | "merge-descriptors": "1.0.1",
1594 | "methods": "~1.1.2",
1595 | "on-finished": "2.4.1",
1596 | "parseurl": "~1.3.3",
1597 | "path-to-regexp": "0.1.7",
1598 | "proxy-addr": "~2.0.7",
1599 | "qs": "6.11.0",
1600 | "range-parser": "~1.2.1",
1601 | "safe-buffer": "5.2.1",
1602 | "send": "0.18.0",
1603 | "serve-static": "1.15.0",
1604 | "setprototypeof": "1.2.0",
1605 | "statuses": "2.0.1",
1606 | "type-is": "~1.6.18",
1607 | "utils-merge": "1.0.1",
1608 | "vary": "~1.1.2"
1609 | }
1610 | },
1611 | "finalhandler": {
1612 | "version": "1.2.0",
1613 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
1614 | "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
1615 | "requires": {
1616 | "debug": "2.6.9",
1617 | "encodeurl": "~1.0.2",
1618 | "escape-html": "~1.0.3",
1619 | "on-finished": "2.4.1",
1620 | "parseurl": "~1.3.3",
1621 | "statuses": "2.0.1",
1622 | "unpipe": "~1.0.0"
1623 | }
1624 | },
1625 | "forwarded": {
1626 | "version": "0.2.0",
1627 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
1628 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="
1629 | },
1630 | "fresh": {
1631 | "version": "0.5.2",
1632 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
1633 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q=="
1634 | },
1635 | "function-bind": {
1636 | "version": "1.1.2",
1637 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
1638 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="
1639 | },
1640 | "get-intrinsic": {
1641 | "version": "1.2.4",
1642 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
1643 | "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
1644 | "requires": {
1645 | "es-errors": "^1.3.0",
1646 | "function-bind": "^1.1.2",
1647 | "has-proto": "^1.0.1",
1648 | "has-symbols": "^1.0.3",
1649 | "hasown": "^2.0.0"
1650 | }
1651 | },
1652 | "gopd": {
1653 | "version": "1.0.1",
1654 | "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
1655 | "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
1656 | "requires": {
1657 | "get-intrinsic": "^1.1.3"
1658 | }
1659 | },
1660 | "has-property-descriptors": {
1661 | "version": "1.0.2",
1662 | "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
1663 | "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
1664 | "requires": {
1665 | "es-define-property": "^1.0.0"
1666 | }
1667 | },
1668 | "has-proto": {
1669 | "version": "1.0.3",
1670 | "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
1671 | "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q=="
1672 | },
1673 | "has-symbols": {
1674 | "version": "1.0.3",
1675 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
1676 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
1677 | },
1678 | "hasown": {
1679 | "version": "2.0.2",
1680 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
1681 | "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
1682 | "requires": {
1683 | "function-bind": "^1.1.2"
1684 | }
1685 | },
1686 | "highlight.js": {
1687 | "version": "11.9.0",
1688 | "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.9.0.tgz",
1689 | "integrity": "sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw=="
1690 | },
1691 | "html-entities": {
1692 | "version": "2.5.2",
1693 | "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz",
1694 | "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA=="
1695 | },
1696 | "htmlparser2": {
1697 | "version": "8.0.2",
1698 | "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz",
1699 | "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==",
1700 | "requires": {
1701 | "domelementtype": "^2.3.0",
1702 | "domhandler": "^5.0.3",
1703 | "domutils": "^3.0.1",
1704 | "entities": "^4.4.0"
1705 | }
1706 | },
1707 | "http-errors": {
1708 | "version": "2.0.0",
1709 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
1710 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
1711 | "requires": {
1712 | "depd": "2.0.0",
1713 | "inherits": "2.0.4",
1714 | "setprototypeof": "1.2.0",
1715 | "statuses": "2.0.1",
1716 | "toidentifier": "1.0.1"
1717 | }
1718 | },
1719 | "iconv-lite": {
1720 | "version": "0.4.24",
1721 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
1722 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
1723 | "requires": {
1724 | "safer-buffer": ">= 2.1.2 < 3"
1725 | }
1726 | },
1727 | "inherits": {
1728 | "version": "2.0.4",
1729 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
1730 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
1731 | },
1732 | "ipaddr.js": {
1733 | "version": "1.9.1",
1734 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
1735 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
1736 | },
1737 | "is-arrayish": {
1738 | "version": "0.3.2",
1739 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
1740 | "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
1741 | },
1742 | "katex": {
1743 | "version": "0.16.10",
1744 | "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.10.tgz",
1745 | "integrity": "sha512-ZiqaC04tp2O5utMsl2TEZTXxa6WSC4yo0fv5ML++D3QZv/vx2Mct0mTlRx3O+uUkjfuAgOkzsCmq5MiUEsDDdA==",
1746 | "requires": {
1747 | "commander": "^8.3.0"
1748 | }
1749 | },
1750 | "linkify-it": {
1751 | "version": "5.0.0",
1752 | "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz",
1753 | "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==",
1754 | "requires": {
1755 | "uc.micro": "^2.0.0"
1756 | }
1757 | },
1758 | "lodash": {
1759 | "version": "4.17.21",
1760 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
1761 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
1762 | },
1763 | "map-lru": {
1764 | "version": "2.0.0",
1765 | "resolved": "https://registry.npmjs.org/map-lru/-/map-lru-2.0.0.tgz",
1766 | "integrity": "sha512-a5TlnsxvczXMY7U/U4P0b7GI3KSAonc+u2MQtWQS5L21K9UV4fYQbbgktj3eqP5ch04XtCOcoqR0OlILo906nA=="
1767 | },
1768 | "markdown-it": {
1769 | "version": "14.1.0",
1770 | "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz",
1771 | "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==",
1772 | "requires": {
1773 | "argparse": "^2.0.1",
1774 | "entities": "^4.4.0",
1775 | "linkify-it": "^5.0.0",
1776 | "mdurl": "^2.0.0",
1777 | "punycode.js": "^2.3.1",
1778 | "uc.micro": "^2.1.0"
1779 | }
1780 | },
1781 | "markdown-it-abbr": {
1782 | "version": "2.0.0",
1783 | "resolved": "https://registry.npmjs.org/markdown-it-abbr/-/markdown-it-abbr-2.0.0.tgz",
1784 | "integrity": "sha512-of7C8pXSjXjDojW4neNP+jD7inUYH/DO0Ca+K/4FUEccg0oHAEX/nfscw0jfz66PJbYWOAT9U8mjO21X5p6aAw=="
1785 | },
1786 | "markdown-it-admon": {
1787 | "version": "1.0.1",
1788 | "resolved": "https://registry.npmjs.org/markdown-it-admon/-/markdown-it-admon-1.0.1.tgz",
1789 | "integrity": "sha512-+slgF0zZQ5908uo+U0cNBY6CUG4ym2GZsOdliDdn6P5doMubfxEZsVW3POaJOzXpd6VXLmn95NYa9Qdp7OMK7Q=="
1790 | },
1791 | "markdown-it-anchor": {
1792 | "version": "8.6.7",
1793 | "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz",
1794 | "integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==",
1795 | "requires": {}
1796 | },
1797 | "markdown-it-attrs": {
1798 | "version": "4.1.6",
1799 | "resolved": "https://registry.npmjs.org/markdown-it-attrs/-/markdown-it-attrs-4.1.6.tgz",
1800 | "integrity": "sha512-O7PDKZlN8RFMyDX13JnctQompwrrILuz2y43pW2GagcwpIIElkAdfeek+erHfxUOlXWPsjFeWmZ8ch1xtRLWpA==",
1801 | "requires": {}
1802 | },
1803 | "markdown-it-deflist": {
1804 | "version": "3.0.0",
1805 | "resolved": "https://registry.npmjs.org/markdown-it-deflist/-/markdown-it-deflist-3.0.0.tgz",
1806 | "integrity": "sha512-OxPmQ/keJZwbubjiQWOvKLHwpV2wZ5I3Smc81OjhwbfJsjdRrvD5aLTQxmZzzePeO0kbGzAo3Krk4QLgA8PWLg=="
1807 | },
1808 | "markdown-it-emoji": {
1809 | "version": "3.0.0",
1810 | "resolved": "https://registry.npmjs.org/markdown-it-emoji/-/markdown-it-emoji-3.0.0.tgz",
1811 | "integrity": "sha512-+rUD93bXHubA4arpEZO3q80so0qgoFJEKRkRbjKX8RTdca89v2kfyF+xR3i2sQTwql9tpPZPOQN5B+PunspXRg=="
1812 | },
1813 | "markdown-it-footnote": {
1814 | "version": "4.0.0",
1815 | "resolved": "https://registry.npmjs.org/markdown-it-footnote/-/markdown-it-footnote-4.0.0.tgz",
1816 | "integrity": "sha512-WYJ7urf+khJYl3DqofQpYfEYkZKbmXmwxQV8c8mO/hGIhgZ1wOe7R4HLFNwqx7TjILbnC98fuyeSsin19JdFcQ=="
1817 | },
1818 | "markdown-it-highlightjs": {
1819 | "version": "4.0.1",
1820 | "resolved": "https://registry.npmjs.org/markdown-it-highlightjs/-/markdown-it-highlightjs-4.0.1.tgz",
1821 | "integrity": "sha512-EPXwFEN6P5nqR3G4KjT20r20xbGYKMMA/360hhSYFmeoGXTE6hsLtJAiB/8ID8slVH4CWHHEL7GX0YenyIstVQ==",
1822 | "requires": {
1823 | "highlight.js": "^11.5.1"
1824 | }
1825 | },
1826 | "markdown-it-mark": {
1827 | "version": "4.0.0",
1828 | "resolved": "https://registry.npmjs.org/markdown-it-mark/-/markdown-it-mark-4.0.0.tgz",
1829 | "integrity": "sha512-YLhzaOsU9THO/cal0lUjfMjrqSMPjjyjChYM7oyj4DnyaXEzA8gnW6cVJeyCrCVeyesrY2PlEdUYJSPFYL4Nkg=="
1830 | },
1831 | "markdown-it-multimd-table": {
1832 | "version": "4.2.3",
1833 | "resolved": "https://registry.npmjs.org/markdown-it-multimd-table/-/markdown-it-multimd-table-4.2.3.tgz",
1834 | "integrity": "sha512-KepCr2OMJqm7IT6sOIbuqHGe+NERhgy66XMrc5lo6dHW7oaPzMDtYwR1EGwK16/blb6mCSg4jqityOe0o/H7HA=="
1835 | },
1836 | "markdown-it-sub": {
1837 | "version": "2.0.0",
1838 | "resolved": "https://registry.npmjs.org/markdown-it-sub/-/markdown-it-sub-2.0.0.tgz",
1839 | "integrity": "sha512-iCBKgwCkfQBRg2vApy9vx1C1Tu6D8XYo8NvevI3OlwzBRmiMtsJ2sXupBgEA7PPxiDwNni3qIUkhZ6j5wofDUA=="
1840 | },
1841 | "markdown-it-sup": {
1842 | "version": "2.0.0",
1843 | "resolved": "https://registry.npmjs.org/markdown-it-sup/-/markdown-it-sup-2.0.0.tgz",
1844 | "integrity": "sha512-5VgmdKlkBd8sgXuoDoxMpiU+BiEt3I49GItBzzw7Mxq9CxvnhE/k09HFli09zgfFDRixDQDfDxi0mgBCXtaTvA=="
1845 | },
1846 | "markdown-it-task-lists": {
1847 | "version": "2.1.1",
1848 | "resolved": "https://registry.npmjs.org/markdown-it-task-lists/-/markdown-it-task-lists-2.1.1.tgz",
1849 | "integrity": "sha512-TxFAc76Jnhb2OUu+n3yz9RMu4CwGfaT788br6HhEDlvWfdeJcLUsxk1Hgw2yJio0OXsxv7pyIPmvECY7bMbluA=="
1850 | },
1851 | "markedpp": {
1852 | "version": "1.3.0",
1853 | "resolved": "https://registry.npmjs.org/markedpp/-/markedpp-1.3.0.tgz",
1854 | "integrity": "sha512-s4rUlwlTAiuzPsHjztmQHRP6CMpWdk9GxmkXLMnMO81x17EAXIrHSjdUP3qZqsQTXCEpqSCXUHJXKabz4l0xnQ==",
1855 | "requires": {
1856 | "asyncc": "^2.0.6",
1857 | "emoji-regex": "^10.3.0",
1858 | "html-entities": "^2.4.0"
1859 | }
1860 | },
1861 | "md-fileserver": {
1862 | "version": "1.10.0",
1863 | "resolved": "https://registry.npmjs.org/md-fileserver/-/md-fileserver-1.10.0.tgz",
1864 | "integrity": "sha512-1QFmBFJEfSTrGZ985txoAfZf+asrhzLkp4FB95Ufi61JPg4zQTGokoqHN2niAfInJZTghnUGdxNwomKsfKrIBg==",
1865 | "requires": {
1866 | "@commenthol/markdown-it-katex": "^2.0.8",
1867 | "asyncc": "^2.0.6",
1868 | "body-parser": "^1.20.2",
1869 | "confluencer": "^1.5.1",
1870 | "cookie": "^0.6.0",
1871 | "express": "^4.18.2",
1872 | "highlight.js": "^11.9.0",
1873 | "lodash": "^4.17.21",
1874 | "markdown-it": "^14.0.0",
1875 | "markdown-it-abbr": "^2.0.0",
1876 | "markdown-it-admon": "^1.0.0",
1877 | "markdown-it-anchor": "^8.6.7",
1878 | "markdown-it-attrs": "^4.1.6",
1879 | "markdown-it-deflist": "^3.0.0",
1880 | "markdown-it-emoji": "^3.0.0",
1881 | "markdown-it-footnote": "^4.0.0",
1882 | "markdown-it-highlightjs": "^4.0.1",
1883 | "markdown-it-mark": "^4.0.0",
1884 | "markdown-it-multimd-table": "^4.2.3",
1885 | "markdown-it-sub": "^2.0.0",
1886 | "markdown-it-sup": "^2.0.0",
1887 | "markdown-it-task-lists": "^2.1.1",
1888 | "markedpp": "^1.3.0",
1889 | "serve-index": "^1.9.1",
1890 | "serve-static": "^1.15.0",
1891 | "ws": "^8.16.0"
1892 | }
1893 | },
1894 | "mdurl": {
1895 | "version": "2.0.0",
1896 | "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz",
1897 | "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w=="
1898 | },
1899 | "media-typer": {
1900 | "version": "0.3.0",
1901 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
1902 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ=="
1903 | },
1904 | "merge-descriptors": {
1905 | "version": "1.0.1",
1906 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
1907 | "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
1908 | },
1909 | "methods": {
1910 | "version": "1.1.2",
1911 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
1912 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w=="
1913 | },
1914 | "mime": {
1915 | "version": "1.6.0",
1916 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
1917 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
1918 | },
1919 | "mime-db": {
1920 | "version": "1.52.0",
1921 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
1922 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
1923 | },
1924 | "mime-types": {
1925 | "version": "2.1.35",
1926 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
1927 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
1928 | "requires": {
1929 | "mime-db": "1.52.0"
1930 | }
1931 | },
1932 | "ms": {
1933 | "version": "2.0.0",
1934 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
1935 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
1936 | },
1937 | "negotiator": {
1938 | "version": "0.6.3",
1939 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
1940 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="
1941 | },
1942 | "nth-check": {
1943 | "version": "2.1.1",
1944 | "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
1945 | "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
1946 | "requires": {
1947 | "boolbase": "^1.0.0"
1948 | }
1949 | },
1950 | "object-inspect": {
1951 | "version": "1.13.1",
1952 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz",
1953 | "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ=="
1954 | },
1955 | "on-finished": {
1956 | "version": "2.4.1",
1957 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
1958 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
1959 | "requires": {
1960 | "ee-first": "1.1.1"
1961 | }
1962 | },
1963 | "parse5": {
1964 | "version": "7.1.2",
1965 | "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
1966 | "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==",
1967 | "requires": {
1968 | "entities": "^4.4.0"
1969 | }
1970 | },
1971 | "parse5-htmlparser2-tree-adapter": {
1972 | "version": "7.0.0",
1973 | "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz",
1974 | "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==",
1975 | "requires": {
1976 | "domhandler": "^5.0.2",
1977 | "parse5": "^7.0.0"
1978 | }
1979 | },
1980 | "parseurl": {
1981 | "version": "1.3.3",
1982 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
1983 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
1984 | },
1985 | "path-to-regexp": {
1986 | "version": "0.1.7",
1987 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
1988 | "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
1989 | },
1990 | "proxy-addr": {
1991 | "version": "2.0.7",
1992 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
1993 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
1994 | "requires": {
1995 | "forwarded": "0.2.0",
1996 | "ipaddr.js": "1.9.1"
1997 | }
1998 | },
1999 | "punycode.js": {
2000 | "version": "2.3.1",
2001 | "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz",
2002 | "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA=="
2003 | },
2004 | "qs": {
2005 | "version": "6.11.0",
2006 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
2007 | "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
2008 | "requires": {
2009 | "side-channel": "^1.0.4"
2010 | }
2011 | },
2012 | "range-parser": {
2013 | "version": "1.2.1",
2014 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
2015 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
2016 | },
2017 | "raw-body": {
2018 | "version": "2.5.2",
2019 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
2020 | "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
2021 | "requires": {
2022 | "bytes": "3.1.2",
2023 | "http-errors": "2.0.0",
2024 | "iconv-lite": "0.4.24",
2025 | "unpipe": "1.0.0"
2026 | }
2027 | },
2028 | "safe-buffer": {
2029 | "version": "5.2.1",
2030 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
2031 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
2032 | },
2033 | "safer-buffer": {
2034 | "version": "2.1.2",
2035 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
2036 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
2037 | },
2038 | "send": {
2039 | "version": "0.18.0",
2040 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
2041 | "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
2042 | "requires": {
2043 | "debug": "2.6.9",
2044 | "depd": "2.0.0",
2045 | "destroy": "1.2.0",
2046 | "encodeurl": "~1.0.2",
2047 | "escape-html": "~1.0.3",
2048 | "etag": "~1.8.1",
2049 | "fresh": "0.5.2",
2050 | "http-errors": "2.0.0",
2051 | "mime": "1.6.0",
2052 | "ms": "2.1.3",
2053 | "on-finished": "2.4.1",
2054 | "range-parser": "~1.2.1",
2055 | "statuses": "2.0.1"
2056 | },
2057 | "dependencies": {
2058 | "ms": {
2059 | "version": "2.1.3",
2060 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
2061 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
2062 | }
2063 | }
2064 | },
2065 | "serve-index": {
2066 | "version": "1.9.1",
2067 | "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
2068 | "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==",
2069 | "requires": {
2070 | "accepts": "~1.3.4",
2071 | "batch": "0.6.1",
2072 | "debug": "2.6.9",
2073 | "escape-html": "~1.0.3",
2074 | "http-errors": "~1.6.2",
2075 | "mime-types": "~2.1.17",
2076 | "parseurl": "~1.3.2"
2077 | },
2078 | "dependencies": {
2079 | "depd": {
2080 | "version": "1.1.2",
2081 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
2082 | "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ=="
2083 | },
2084 | "http-errors": {
2085 | "version": "1.6.3",
2086 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
2087 | "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==",
2088 | "requires": {
2089 | "depd": "~1.1.2",
2090 | "inherits": "2.0.3",
2091 | "setprototypeof": "1.1.0",
2092 | "statuses": ">= 1.4.0 < 2"
2093 | }
2094 | },
2095 | "inherits": {
2096 | "version": "2.0.3",
2097 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
2098 | "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw=="
2099 | },
2100 | "setprototypeof": {
2101 | "version": "1.1.0",
2102 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
2103 | "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ=="
2104 | },
2105 | "statuses": {
2106 | "version": "1.5.0",
2107 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
2108 | "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA=="
2109 | }
2110 | }
2111 | },
2112 | "serve-static": {
2113 | "version": "1.15.0",
2114 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
2115 | "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
2116 | "requires": {
2117 | "encodeurl": "~1.0.2",
2118 | "escape-html": "~1.0.3",
2119 | "parseurl": "~1.3.3",
2120 | "send": "0.18.0"
2121 | }
2122 | },
2123 | "set-function-length": {
2124 | "version": "1.2.2",
2125 | "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
2126 | "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
2127 | "requires": {
2128 | "define-data-property": "^1.1.4",
2129 | "es-errors": "^1.3.0",
2130 | "function-bind": "^1.1.2",
2131 | "get-intrinsic": "^1.2.4",
2132 | "gopd": "^1.0.1",
2133 | "has-property-descriptors": "^1.0.2"
2134 | }
2135 | },
2136 | "setprototypeof": {
2137 | "version": "1.2.0",
2138 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
2139 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
2140 | },
2141 | "side-channel": {
2142 | "version": "1.0.6",
2143 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
2144 | "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
2145 | "requires": {
2146 | "call-bind": "^1.0.7",
2147 | "es-errors": "^1.3.0",
2148 | "get-intrinsic": "^1.2.4",
2149 | "object-inspect": "^1.13.1"
2150 | }
2151 | },
2152 | "simple-swizzle": {
2153 | "version": "0.2.2",
2154 | "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
2155 | "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
2156 | "requires": {
2157 | "is-arrayish": "^0.3.1"
2158 | }
2159 | },
2160 | "statuses": {
2161 | "version": "2.0.1",
2162 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
2163 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="
2164 | },
2165 | "toidentifier": {
2166 | "version": "1.0.1",
2167 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
2168 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="
2169 | },
2170 | "type-is": {
2171 | "version": "1.6.18",
2172 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
2173 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
2174 | "requires": {
2175 | "media-typer": "0.3.0",
2176 | "mime-types": "~2.1.24"
2177 | }
2178 | },
2179 | "uc.micro": {
2180 | "version": "2.1.0",
2181 | "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz",
2182 | "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A=="
2183 | },
2184 | "unpipe": {
2185 | "version": "1.0.0",
2186 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
2187 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="
2188 | },
2189 | "utils-merge": {
2190 | "version": "1.0.1",
2191 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
2192 | "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA=="
2193 | },
2194 | "vary": {
2195 | "version": "1.1.2",
2196 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
2197 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="
2198 | },
2199 | "ws": {
2200 | "version": "8.16.0",
2201 | "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz",
2202 | "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==",
2203 | "requires": {}
2204 | }
2205 | }
2206 | }
2207 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "dependencies": {
3 | "md-fileserver": "^1.10.0"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/readme.md:
--------------------------------------------------------------------------------
1 | npm install
2 |
3 | npx mdstart index.md
4 |
--------------------------------------------------------------------------------
/reflog_test.txt:
--------------------------------------------------------------------------------
1 | Testing reflog
--------------------------------------------------------------------------------