diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 0000000..7d2109a --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1,4 @@ +node_modules +.temp +.cache +/docs/*/modules/ diff --git a/docs/docs/.vuepress/config.js b/docs/docs/.vuepress/config.js new file mode 100644 index 0000000..ffc9adb --- /dev/null +++ b/docs/docs/.vuepress/config.js @@ -0,0 +1,43 @@ +import { defineUserConfig, defaultTheme } from 'vuepress' +import { prismjsPlugin } from '@vuepress/plugin-prismjs' +import { sidebarConfig } from './configs/sidebar' +import { navbarConfig } from './configs/navbar' +import Prism from 'prismjs'; +import definePrismOwnLang from '../../../editors/prismjs/own-language.js' +definePrismOwnLang(Prism) + +export default defineUserConfig({ + locales: { + '/en/': { + lang: 'en-US', + title: 'OwnLang', + description: 'OwnLang documentation', + }, + '/ru/': { + lang: 'ru-RU', + title: 'OwnLang', + description: 'Документация OwnLang', + } + }, + + theme: defaultTheme({ + locales: { + '/en/': { + selectLanguageName: 'English', + sidebar: sidebarConfig.en, + navbar: navbarConfig.en + }, + '/ru/': { + selectLanguageName: 'Русский', + sidebar: sidebarConfig.ru, + navbar: navbarConfig.ru + } + } + }), + + plugins: [ + prismjsPlugin({ + preloadLanguages: ['own', 'json'] + }), + ], +}) \ No newline at end of file diff --git a/docs/docs/.vuepress/configs/navbar.js b/docs/docs/.vuepress/configs/navbar.js new file mode 100644 index 0000000..2c7a2a6 --- /dev/null +++ b/docs/docs/.vuepress/configs/navbar.js @@ -0,0 +1,16 @@ +import pages from './pages' + +let navbar = {} +for (let lang of ['en', 'ru']) { + let config = [] + for (let [relativePath, entry] of Object.entries(pages)) { + const path = '/' + lang + relativePath + config.push({ + text: entry.text[lang], + children: entry.pages.map(r => path + r) + }) + } + navbar[lang] = config +} + +export const navbarConfig = navbar \ No newline at end of file diff --git a/docs/docs/.vuepress/configs/pages.js b/docs/docs/.vuepress/configs/pages.js new file mode 100644 index 0000000..55fed5b --- /dev/null +++ b/docs/docs/.vuepress/configs/pages.js @@ -0,0 +1,30 @@ +export default { + '/': { + text: {'en': 'OwnLang', 'ru': 'OwnLang'}, + pages: [ + 'README.md', + 'links.md' + ] + }, + + '/basics/': { + text: {'en': 'Basics', 'ru': 'Основы'}, + pages: [ + 'comments.md', + 'strings.md', + 'types.md', + 'loops.md', + 'functions.md', + 'destructuring_assignment.md', + 'pattern_matching.md', + 'string_functions.md', + 'array_functions.md' + ] + }, + + '/modules/': { + text: {'en': 'Modules', 'ru': 'Модули'}, + pages: [ + ] + } +} \ No newline at end of file diff --git a/docs/docs/.vuepress/configs/sidebar.js b/docs/docs/.vuepress/configs/sidebar.js new file mode 100644 index 0000000..057ca20 --- /dev/null +++ b/docs/docs/.vuepress/configs/sidebar.js @@ -0,0 +1,17 @@ +import pages from './pages' + +let sidebar = {} +for (let lang of ['en', 'ru']) { + let config = {} + for (let [relativePath, entry] of Object.entries(pages)) { + const path = '/' + lang + relativePath + config[path] = (path in config) ? config[path] : [] + config[path].push({ + text: entry.text[lang], + children: entry.pages.map(r => path + r) + }) + } + sidebar[lang] = config +} + +export const sidebarConfig = sidebar \ No newline at end of file diff --git a/docs/docs/README.md b/docs/docs/README.md new file mode 100644 index 0000000..7c274b9 --- /dev/null +++ b/docs/docs/README.md @@ -0,0 +1,15 @@ +--- +home: true +title: OwnLang +heroText: OwnLang +tagline: Dynamic functional programming language +actions: + - text: 🇺🇸 English + link: /en/ + type: primary + - text: 🇷🇺 Русский + link: /ru/ + type: primary +footer: © 2023 aNNiMON +--- + \ No newline at end of file diff --git a/docs/docs/code/basics/destructuring_assignment1.own b/docs/docs/code/basics/destructuring_assignment1.own new file mode 100644 index 0000000..893d4c8 --- /dev/null +++ b/docs/docs/code/basics/destructuring_assignment1.own @@ -0,0 +1,5 @@ +arr = ["a", "b", "c"] +extract(var1, var2, var3) = arr +print var1 // a +print var2 // b +print var3 // c \ No newline at end of file diff --git a/docs/docs/code/basics/destructuring_assignment2.own b/docs/docs/code/basics/destructuring_assignment2.own new file mode 100644 index 0000000..bb1b128 --- /dev/null +++ b/docs/docs/code/basics/destructuring_assignment2.own @@ -0,0 +1,4 @@ +arr = ["a", "b", "c"] +var1 = arr[0] +var2 = arr[1] +var3 = arr[2] \ No newline at end of file diff --git a/docs/docs/code/basics/destructuring_assignment3.own b/docs/docs/code/basics/destructuring_assignment3.own new file mode 100644 index 0000000..661d4ec --- /dev/null +++ b/docs/docs/code/basics/destructuring_assignment3.own @@ -0,0 +1,4 @@ +map = {"key1": 1, "test", "text"} +extract(var1, var2) = map +println var1 // [key1, 1] +println var2 // [test, text] \ No newline at end of file diff --git a/docs/docs/code/basics/destructuring_assignment4.own b/docs/docs/code/basics/destructuring_assignment4.own new file mode 100644 index 0000000..3538b90 --- /dev/null +++ b/docs/docs/code/basics/destructuring_assignment4.own @@ -0,0 +1,3 @@ +extract(x, , z) = [93, 58, 90] +println x // 93 +println z // 90 \ No newline at end of file diff --git a/docs/docs/code/basics/fibonacci.own b/docs/docs/code/basics/fibonacci.own new file mode 100644 index 0000000..eae9e8b --- /dev/null +++ b/docs/docs/code/basics/fibonacci.own @@ -0,0 +1,9 @@ +def fibonacci(count) { + def fib(n) { + if n < 2 return n + return fib(n-2) + fib(n-1) + } + return fib(count) +} + +println fibonacci(10) // 55 \ No newline at end of file diff --git a/docs/docs/code/basics/loops1.own b/docs/docs/code/basics/loops1.own new file mode 100644 index 0000000..4a2ae95 --- /dev/null +++ b/docs/docs/code/basics/loops1.own @@ -0,0 +1,9 @@ +arr = [1, 2, 3, 4] +for v : arr { + println v +} + +map = {"key1": 1, "key2": 2} +for key, value : map + println key + " = " value +} \ No newline at end of file diff --git a/docs/docs/code/basics/pattern_matching1.own b/docs/docs/code/basics/pattern_matching1.own new file mode 100644 index 0000000..a67666f --- /dev/null +++ b/docs/docs/code/basics/pattern_matching1.own @@ -0,0 +1,7 @@ +x = 2 +print match x { + case 1: "One" + case 2: "Two" + case "str": "String" + case _: "Unknown" +} \ No newline at end of file diff --git a/docs/docs/code/basics/pattern_matching2.own b/docs/docs/code/basics/pattern_matching2.own new file mode 100644 index 0000000..80e6dcc --- /dev/null +++ b/docs/docs/code/basics/pattern_matching2.own @@ -0,0 +1,9 @@ +x = "str" +match x { + case "": { + println "Empty string" + } + case "str": { + println "String!" + } +} \ No newline at end of file diff --git a/docs/docs/code/basics/pattern_matching3.own b/docs/docs/code/basics/pattern_matching3.own new file mode 100644 index 0000000..ddacb26 --- /dev/null +++ b/docs/docs/code/basics/pattern_matching3.own @@ -0,0 +1,10 @@ +def test(x) = match x { + case a: "case a: " + a + case b: "case b: " + b + case c: "case c: " + c +} +a = 10 +b = 20 +println test(15) // case c: 15 +println test(20) // case b: 20 +println test("test") // case c: test \ No newline at end of file diff --git a/docs/docs/code/basics/pattern_matching4.own b/docs/docs/code/basics/pattern_matching4.own new file mode 100644 index 0000000..3ddbd67 --- /dev/null +++ b/docs/docs/code/basics/pattern_matching4.own @@ -0,0 +1,9 @@ +def test(x) = match x { + case x if x < 0: "(-∞ .. 0)" + case x if x > 0: "(0 .. +∞)" + case x: "0" +} + +println test(-10) // (-∞ .. 0) +println test(0) // 0 +println test(10) // (0 .. +∞) \ No newline at end of file diff --git a/docs/docs/code/basics/pattern_matching5.own b/docs/docs/code/basics/pattern_matching5.own new file mode 100644 index 0000000..97d5e40 --- /dev/null +++ b/docs/docs/code/basics/pattern_matching5.own @@ -0,0 +1,7 @@ +def arrayRecursive(arr) = match arr { + case [head :: tail]: "[" + head + ", " + arrayRecursive(tail) + "]" + case []: "[]" + case last: "[" + last + ", []]" +} + +println arrayRecursive([1, 2, 3, 4, 5, 6, 7]) // [1, [2, [3, [4, [5, [6, [7, []]]]]]]] \ No newline at end of file diff --git a/docs/docs/code/basics/pattern_matching6.own b/docs/docs/code/basics/pattern_matching6.own new file mode 100644 index 0000000..0ff5e70 --- /dev/null +++ b/docs/docs/code/basics/pattern_matching6.own @@ -0,0 +1,8 @@ +for i = 1, i <= 100, i++ { + println match [i % 3 == 0, i % 5 == 0] { + case (true, false): "Fizz" + case (false, true): "Buzz" + case (true, true): "FizzBuzz" + case _: i + } +} \ No newline at end of file diff --git a/docs/docs/code/basics/string_functions1.own b/docs/docs/code/basics/string_functions1.own new file mode 100644 index 0000000..954d171 --- /dev/null +++ b/docs/docs/code/basics/string_functions1.own @@ -0,0 +1,7 @@ +str = " ababcaab " +println indexOf(str, "abc") +println str.indexOf("abc") + +def isBlank(s) = s.trim().isEmpty() +println isBlank(str) +println str.isBlank() \ No newline at end of file diff --git a/docs/docs/code/functional_en.own b/docs/docs/code/functional_en.own new file mode 100644 index 0000000..9de63c2 --- /dev/null +++ b/docs/docs/code/functional_en.own @@ -0,0 +1,15 @@ +use std, functional + +nums = [1,2,3,4,5,6,7,8,9,10] +nums = filter(nums, def(x) = x % 2 == 0) +// Squares of even numbers +squares = map(nums, def(x) = x * x) +foreach(squares, ::echo) +// Sum of squares +sum = reduce(squares, 0, def(x, y) = x + y) +println "Sum: " + sum +// Same using stream +println "Sum: " + stream(range(1, 11)) + .filter(def(x) = x % 2 == 0) + .map(def(x) = x * x) + .reduce(0, def(x, y) = x + y) diff --git a/docs/docs/code/functional_ru.own b/docs/docs/code/functional_ru.own new file mode 100644 index 0000000..ef710b1 --- /dev/null +++ b/docs/docs/code/functional_ru.own @@ -0,0 +1,15 @@ +use std, functional + +nums = [1,2,3,4,5,6,7,8,9,10] +nums = filter(nums, def(x) = x % 2 == 0) +// Квадраты чётных чисел +squares = map(nums, def(x) = x * x) +foreach(squares, ::echo) +// Сумма квадратов +sum = reduce(squares, 0, def(x, y) = x + y) +println "Сумма: " + sum +// То же самое с использованием stream +println "Сумма: " + stream(range(1, 11)) + .filter(def(x) = x % 2 == 0) + .map(def(x) = x * x) + .reduce(0, def(x, y) = x + y) diff --git a/docs/docs/code/high_order_functions_en.own b/docs/docs/code/high_order_functions_en.own new file mode 100644 index 0000000..a6c2435 --- /dev/null +++ b/docs/docs/code/high_order_functions_en.own @@ -0,0 +1,14 @@ +operations = { + "+" : def(a,b) = a+b, + "-" : def(a,b) = a-b, + "*" : def(a,b) = a*b, + "/" : ::division +} +def division(v1, v2) { + if (v2 == 0) return "error: division by zero" + return v1 / v2 +} + +for operation : operations { + println operation(2, 3) +} \ No newline at end of file diff --git a/docs/docs/code/high_order_functions_ru.own b/docs/docs/code/high_order_functions_ru.own new file mode 100644 index 0000000..f3abd15 --- /dev/null +++ b/docs/docs/code/high_order_functions_ru.own @@ -0,0 +1,14 @@ +operations = { + "+" : def(a,b) = a+b, + "-" : def(a,b) = a-b, + "*" : def(a,b) = a*b, + "/" : ::division +} +def division(v1, v2) { + if (v2 == 0) return "ошибка: деление на ноль" + return v1 / v2 +} + +for operation : operations { + println operation(2, 3) +} \ No newline at end of file diff --git a/docs/docs/code/http_en.own b/docs/docs/code/http_en.own new file mode 100644 index 0000000..38e283b --- /dev/null +++ b/docs/docs/code/http_en.own @@ -0,0 +1,20 @@ +use std, http, functional + +// GET request +http("https://api.github.com/events", def(r) { + use json + events = jsondecode(r) +}) + +// POST request +http("http://jsonplaceholder.typicode.com/users", "POST", { + "name": "OwnLang", + "versionCode": 10 +}, ::echo) + +// PATCH request +http("http://jsonplaceholder.typicode.com/users/2", "PATCH", {"name": "Patched Name"}, ::patch_callback) + +def patch_callback(v) { + println v +} diff --git a/docs/docs/code/http_ru.own b/docs/docs/code/http_ru.own new file mode 100644 index 0000000..abc3f79 --- /dev/null +++ b/docs/docs/code/http_ru.own @@ -0,0 +1,20 @@ +use std, http, functional + +// GET-запрос +http("https://api.github.com/events", def(r) { + use json + events = jsondecode(r) +}) + +// POST-запрос +http("http://jsonplaceholder.typicode.com/users", "POST", { + "name": "OwnLang", + "versionCode": 10 +}, ::echo) + +// PATCH-запрос +http("http://jsonplaceholder.typicode.com/users/2", "PATCH", {"name": "Патч"}, ::patch_callback) + +def patch_callback(v) { + println v +} diff --git a/docs/docs/code/operator_overloading.own b/docs/docs/code/operator_overloading.own new file mode 100644 index 0000000..d823b22 --- /dev/null +++ b/docs/docs/code/operator_overloading.own @@ -0,0 +1,7 @@ +use std, types, math + +def `..`(a, b) = range(a, b - 1) +def `**`(a, b) = int(pow(a, b)) +for y : 1 .. 10 { + println sprintf("2 ^ %d = %d", y, 2 ** y) +} \ No newline at end of file diff --git a/docs/docs/code/pattern_matching.own b/docs/docs/code/pattern_matching.own new file mode 100644 index 0000000..6beb3e8 --- /dev/null +++ b/docs/docs/code/pattern_matching.own @@ -0,0 +1,16 @@ +def factorial(n) = match n { + case 0: 1 + case n if n < 0: 0 + case _: n * factorial(n - 1) +} + +def fizzbuzz(limit = 100) { + for i = 1, i <= limit, i++ { + println match [i % 3 == 0, i % 5 == 0] { + case (true, false): "Fizz" + case (false, true): "Buzz" + case (true, true): "FizzBuzz" + case _: i + } + } +} \ No newline at end of file diff --git a/docs/docs/en/README.md b/docs/docs/en/README.md new file mode 100644 index 0000000..7b4b593 --- /dev/null +++ b/docs/docs/en/README.md @@ -0,0 +1,35 @@ +# Overview + +OwnLang — dynamic functional programming language inspired by Scala and Python. Available for PC and Android devices. + +## Key features + +### Higher-order functions + +Functions are values, so we can store them to variables for operating. + +@[code](../code/high_order_functions_en.own) + +### Pattern Matching + +Pattern matching with value pattern, tuple pattern, list pattern and optional condition. + +@[code](../code/pattern_matching.own) + +### Functional data operations + +Operate data in functional style. + +@[code](../code/functional_en.own) + +### Operator overloading + +Why not? + +@[code](../code/operator_overloading.own) + +### Network module + +Easy async HTTP requests with `http` module. + +@[code](../code/http_en.own) \ No newline at end of file diff --git a/docs/docs/en/basics/README.md b/docs/docs/en/basics/README.md new file mode 100644 index 0000000..b68cc02 --- /dev/null +++ b/docs/docs/en/basics/README.md @@ -0,0 +1,11 @@ +# Basics + +* [Comments](comments.md) +* [Strings](strings.md) +* [Types](types.md) +* [Loops](loops.md) +* [Functions definition](functions.md) +* [Destructuring assignment](destructuring_assignment.md) +* [Pattern matching](pattern_matching.md) +* [String functions](string_functions.md) +* [Array functions](array_functions.md) diff --git a/docs/docs/en/basics/array_functions.md b/docs/docs/en/basics/array_functions.md new file mode 100644 index 0000000..16e827d --- /dev/null +++ b/docs/docs/en/basics/array_functions.md @@ -0,0 +1,8 @@ +# Array functions + +Fields: + - `length` - number of elements of the array + +Functions: + - `isEmpty()` - returns true, if the array is empty + - `joinToString(delimiter = "", prefix = "", suffix = "")` - joins array into a string diff --git a/docs/docs/en/basics/comments.md b/docs/docs/en/basics/comments.md new file mode 100644 index 0000000..01eaa68 --- /dev/null +++ b/docs/docs/en/basics/comments.md @@ -0,0 +1,9 @@ +# Comments + +```own +// Line comment +/* multiline + comment +*/ +print /*inner comment*/ "Text" +``` \ No newline at end of file diff --git a/docs/docs/en/basics/destructuring_assignment.md b/docs/docs/en/basics/destructuring_assignment.md new file mode 100644 index 0000000..fca2558 --- /dev/null +++ b/docs/docs/en/basics/destructuring_assignment.md @@ -0,0 +1,19 @@ +# Destructuring assignment + +Destructuring assignment allows to define multiple variables for each element of an array or map. + +For arrays, value is assigned to variable: + +@[code](../../code/basics/destructuring_assignment1.own) + +Which is equivalent to: + +@[code](../../code/basics/destructuring_assignment2.own) + +For maps, key and value are assigned to variable: + +@[code](../../code/basics/destructuring_assignment3.own) + +To skip value just leave argument empty: + +@[code](../../code/basics/destructuring_assignment4.own) diff --git a/docs/docs/en/basics/functions.md b/docs/docs/en/basics/functions.md new file mode 100644 index 0000000..b12be6e --- /dev/null +++ b/docs/docs/en/basics/functions.md @@ -0,0 +1,54 @@ +# Functions definition + +To define function uses the `def` keyword: + +```own +def function(arg1, arg2) { + println arg1 +} +``` + +## Shorthand definition + +There is short syntax fot function body: + +```own +def repeat(str, count) = str * count +``` + +Which is equivalent to: + +```own +def repeat(str, count) { + return str * count +} +``` + +## Default arguments + +Function arguments can have default values. + +```own +def repeat(str, count = 5) = str * count +``` + +In this case only `str` argument is required. + +```own +repeat("*") // ***** +repeat("+", 3) // +++ +``` + +Default arguments can't be declared before required arguments. + +```own +def repeat(str = "*", count) = str * count +``` + +Causes parsing error: `ParseError on line 1: Required argument cannot be after optional` + +## Inner functions + +You can define function in other function. + +@[code](../../code/basics/fibonacci.own) diff --git a/docs/docs/en/basics/loops.md b/docs/docs/en/basics/loops.md new file mode 100644 index 0000000..ace5bff --- /dev/null +++ b/docs/docs/en/basics/loops.md @@ -0,0 +1,113 @@ +# Loops + +## while loop + +```own +while condition { + body +} +``` + +Parentheses in condition are not necessary. + +```own +i = 0 +while i < 5 { + print i++ +} + +// or + +i = 0 +while (i < 5) { + print i++ +} +``` + +## do-while loop + +```own +do { + body +} while condition +``` + +Parentheses in condition are not necessary. + +```own +i = 0 +do { + print i++ +} while i < 5 + +// or + +i = 0 +do { + print i++ +} while (i < 5) +``` + +## for loop + +```own +for initializing, condition, increment { + body +} + +for (initializing, condition, increment) { + body +} +``` + +```own +for i = 0, i < 5, i++ + print i++ + +// or + +for (i = 0, i < 5, i++) { + print i++ +} +``` + +## foreach loop + +Iterates elements of an string, array or map. + +Iterating over string: + +```own +for char : string { + body +} +for char, code : string { + body +} +``` + +Iterating over array: + +```own +for value : array { + body +} +for value, index : array { + body +} +``` + +Iterating over map: + +```own +for key, value : map { + body +} +for (key, value : map) { + body +} +``` + +Parentheses are not necessary. + +@[code](../../code/basics/loops1.own) diff --git a/docs/docs/en/basics/pattern_matching.md b/docs/docs/en/basics/pattern_matching.md new file mode 100644 index 0000000..86d775c --- /dev/null +++ b/docs/docs/en/basics/pattern_matching.md @@ -0,0 +1,79 @@ +# Pattern matching + +The `match` operator allows to match values by pattern. + +@[code](../../code/basics/pattern_matching1.own) + +@[code](../../code/basics/pattern_matching2.own) + +In this case value and type are checking. If none of `case` branches doesn't match, the body of `case _` branch will executes. + + +In addition to the constant values, you can set variable name to `case`. + +@[code](../../code/basics/pattern_matching3.own) + +In this case there is two scenarios: + +1. Variable is already defined. Matching to its value. +2. Variable is not defined. Assign matching value to it and executes body of the `case` branch. + +In the example above, the interpreter sees the first two branches as: + +```own +case 10: +case 20: +``` + +For the last branch `c` variable is not defined, so assign `c = x` and execute body of the `case c` branch. + + +## Refinements + +`case` branch may have additional comparison + +@[code](../../code/basics/pattern_matching4.own) + + +## Matching arrays + +To compare elements of arrays, the following syntax is used: + +* `case []:` executes if there are no elements in array +* `case [a]:` executes if an array contains one element +* `case [a :: b]:` executes if an array contains two or more elements +* `case [a :: b :: c :: d :: e]:` executes if an array contain five or more elements + +There are two rules for the last two cases: + +* If variables count matches array elements count - all variables are assigned to the value of the array. + +```own +match [0, 1, 2] { + case [x :: y :: z]: // x = 0, y = 1, z = 2 +} +``` + +* If array elements count is greater, then the rest of the array will be assigned to the last variable. + +```own +match [0, 1, 2, 3, 4] { + case [x :: y :: z]: // x = 0, y = 1, z = [2, 3, 4] +} +``` + +An example of a recursive output array + +@[code](../../code/basics/pattern_matching5.own) + + +## Matching array's value + +To compare values of array's elements, the following syntax is used: + +* `case (expr1, expr2, expr3):` executes if an array contain 3 elements and first element is equal to expr1 result, second element is equal to expr2 and third element is equal to expr3. +* `case (expr1, _):` executes if an array contain 2 elements and first element is equal to expr1 result and result of the second element is not importand. + +FizzBuzz classical problem can be solved using Pattern Matching: + +@[code](../../code/basics/pattern_matching6.own) diff --git a/docs/docs/en/basics/string_functions.md b/docs/docs/en/basics/string_functions.md new file mode 100644 index 0000000..070dcb6 --- /dev/null +++ b/docs/docs/en/basics/string_functions.md @@ -0,0 +1,20 @@ +# String functions + +Fields: + - `length` - string length + - `lower` - lower case string + - `upper` - upper case string + - `chars` - ASCII characters array + +Functions: + - `trim()` - removes any leading and trailing whitespaces in string + - `startsWith(str, offset = 0)` - checks whether the string starts with the substring str at offset + - `endsWith(str)` - checks whether the string ends with the str + - `matches(regex)` - checks whether the string matches regex pattern + - `contains(str)` - checks whether the string contains substring str + - `equalsIgnoreCase(str)` - checks equality of two strings ignore case (tEsT = TEST) + - `isEmpty()` - returns true, if the string is empty + +In addition, there are automatic function extensions available if the function accepts a string as the first argument: + +@[code](../../code/basics/string_functions1.own) diff --git a/docs/docs/en/basics/strings.md b/docs/docs/en/basics/strings.md new file mode 100644 index 0000000..d44a99b --- /dev/null +++ b/docs/docs/en/basics/strings.md @@ -0,0 +1,12 @@ +# Strings + +Strings are defined in double quotes and can be multiline. Escaping Unicode characters is also supported.: + +```own +str = "\n\tThis is +\tmultiline +\ttext +" +``` + +`print` and `println` operators are used to output text. \ No newline at end of file diff --git a/docs/docs/en/basics/types.md b/docs/docs/en/basics/types.md new file mode 100644 index 0000000..ec4e3b2 --- /dev/null +++ b/docs/docs/en/basics/types.md @@ -0,0 +1,24 @@ +# Types + +OwnLang types are: + + * Number - numbers (integer, float) + * String - strings + * Array - arrays + * Map - objects (an associative arrays) + * Function - functions + +Since OwnLang is dynamic programming language, which means that explicitly declare the types is not necessary. + +```own +x = 10 // integer +y = 1.61803 // float +z = "abcd" // string +``` + +If some function requires string as argument, but number was passed, then numeric value will automatically converts to string. + +```own +x = 90 +print x // Ok, 90 converts to "90" +``` \ No newline at end of file diff --git a/docs/docs/en/links.md b/docs/docs/en/links.md new file mode 100644 index 0000000..345725c --- /dev/null +++ b/docs/docs/en/links.md @@ -0,0 +1,13 @@ +# Links + +## Downloads + +Android: [Free](https://play.google.com/store/apps/details?id=com.annimon.ownlang.free) / [Pro](https://play.google.com/store/apps/details?id=com.annimon.ownlang) +PC / Netbeans Plugin / etc: [GitHub Releases](https://github.com/aNNiMON/Own-Programming-Language-Tutorial/releases) +Source code: [GitHub](https://github.com/aNNiMON/Own-Programming-Language-Tutorial) + +Also available as AUR package: + +``` +paru -S ownlang +``` diff --git a/docs/docs/ru/README.md b/docs/docs/ru/README.md new file mode 100644 index 0000000..0e7c2b2 --- /dev/null +++ b/docs/docs/ru/README.md @@ -0,0 +1,35 @@ +# Возможности + +OwnLang — скриптовый функциональный язык программирования с динамической типизацией для ПК и Android устройств. + +## Ключевые особенности + +### Функции высшего порядка + +Функции выступают как значения, а значит мы можем сохранять их в переменные для дальнейшего использования. + +@[code](../code/high_order_functions_ru.own) + +### Pattern Matching + +Сопоставление по образцу с шаблоном значений, шаблоном кортежей, шаблоном списков и дополнительным сравнением. + +@[code](../code/pattern_matching.own) + +### Функциональные операции над данными + +Оперирование данными в функциональном стиле. + +@[code](../code/functional_ru.own) + +### Перегрузка операторов + +Почему бы и нет? + +@[code](../code/operator_overloading.own) + +### Модуль для работы с сетью Интернет + +Простые асинхронные HTTP-запросы с модулем `http`. + +@[code](../code/http_ru.own) \ No newline at end of file diff --git a/docs/docs/ru/basics/README.md b/docs/docs/ru/basics/README.md new file mode 100644 index 0000000..0b843dd --- /dev/null +++ b/docs/docs/ru/basics/README.md @@ -0,0 +1,11 @@ +# Синтаксис и основы языка + +* [Комментарии](comments.md) +* [Строки](strings.md) +* [Типы](types.md) +* [Циклы](loops.md) +* [Определение функций](functions.md) +* [Реструктуризующее присваивание](destructuring_assignment.md) +* [Pattern matching](pattern_matching.md) (сопоставление с образцом) +* [Функции строк](string_functions.md) +* [Функции массивов](array_functions.md) \ No newline at end of file diff --git a/docs/docs/ru/basics/array_functions.md b/docs/docs/ru/basics/array_functions.md new file mode 100644 index 0000000..cba7892 --- /dev/null +++ b/docs/docs/ru/basics/array_functions.md @@ -0,0 +1,8 @@ +# Функции массивов + +Поля: + - `length` - количество элементов массива + +Функции: + - `isEmpty()` - возвращает true, если массив пуст + - `joinToString(delimiter = "", prefix = "", suffix = "")` - склеивает массив в строку diff --git a/docs/docs/ru/basics/comments.md b/docs/docs/ru/basics/comments.md new file mode 100644 index 0000000..189f840 --- /dev/null +++ b/docs/docs/ru/basics/comments.md @@ -0,0 +1,9 @@ +# Комментарии + +```own +// Однострочный комментарий +/* многострочный + комментарий +*/ +print /*или так*/ "Текст" +``` \ No newline at end of file diff --git a/docs/docs/ru/basics/destructuring_assignment.md b/docs/docs/ru/basics/destructuring_assignment.md new file mode 100644 index 0000000..b2b21cb --- /dev/null +++ b/docs/docs/ru/basics/destructuring_assignment.md @@ -0,0 +1,19 @@ +# Реструктуризующее присваивание + +Реструктуризующее (деструктивное) присваивание позволяет определить сразу несколько переменных по каждому элементу массива или объекта. + +Для массивов, переменным присваивается значение. + +@[code](../../code/basics/destructuring_assignment1.own) + +Что равносильно: + +@[code](../../code/basics/destructuring_assignment2.own) + +Для объектов, переменным присваивается массив [ключ, значение] + +@[code](../../code/basics/destructuring_assignment3.own) + +Если нужно пропустить какое-либо значение, название переменной можно не писать: + +@[code](../../code/basics/destructuring_assignment4.own) \ No newline at end of file diff --git a/docs/docs/ru/basics/functions.md b/docs/docs/ru/basics/functions.md new file mode 100644 index 0000000..a1cc0fc --- /dev/null +++ b/docs/docs/ru/basics/functions.md @@ -0,0 +1,54 @@ +# Определение функций + +Для определения функции используется ключевое слово `def`. Затем идёт имя, аргументы и тело функции. Пример: + +```own +def function(arg1, arg2) { + println arg1 +} +``` + +## Короткий синтаксис + +Возможен короткий синтаксис: + +```own +def repeat(str, count) = str * count +``` + +что равносильно: + +```own +def repeat(str, count) { + return str * count +} +``` + +## Аргументы по умолчанию + +Аргументы функции могут иметь значения по умолчанию. + +```own +def repeat(str, count = 5) = str * count +``` + +В этом случае обязательным будет только аргумент `str` + +```own +repeat("*") // ***** +repeat("+", 3) // +++ +``` + +Аргументы по умолчанию обязательно должны идти после обязательных аргументов, если такие были. + +```own +def repeat(str = "*", count) = str * count +``` + +Приведёт к ошибки парсинга: `ParseError on line 1: Required argument cannot be after optional` + +## Внутренние функции + +Внутри функции можно объявить другую функцию. + +@[code](../../code/basics/fibonacci.own) \ No newline at end of file diff --git a/docs/docs/ru/basics/loops.md b/docs/docs/ru/basics/loops.md new file mode 100644 index 0000000..fae20b4 --- /dev/null +++ b/docs/docs/ru/basics/loops.md @@ -0,0 +1,115 @@ +# Циклы + +## Цикл while + +```own +while условие { + тело цикла +} +``` + +Скобки в условии необязательны. + +```own +i = 0 +while i < 5 { + print i++ +} + +// или + +i = 0 +while (i < 5) { + print i++ +} +``` + +## Цикл do-while + +```own +do { + тело цикла +} while условие +``` + +Скобки в условии необязательны. + +```own +i = 0 +do { + print i++ +} while i < 5 + +// или + +i = 0 +do { + print i++ +} while (i < 5) +``` + +## Цикл for + +```own +for инициализация, условие_работы, инкремент { + тело цикла +} + +for (инициализация, условие_работы, инкремент) { + тело цикла +} +``` + +Скобки в условии необязательны. + +```own +for i = 0, i < 5, i++ + print i++ + +// или + +for (i = 0, i < 5, i++) { + print i++ +} +``` + +## Цикл foreach + +Перебирает элементы строки, массива или карты. + +Перебор строки: + +```own +for символ : строка { + тело цикла +} +for символ, код : строка { + тело цикла +} +``` + +Перебор массива: + +```own +for значение : массив { + тело цикла +} +for значение, индекс : массив { + тело цикла +} +for (значение : массив) { + тело цикла +} +``` + +Перебор карты: + +```own +for (ключ, значение : карта) { + тело цикла +} +``` + +Скобки необязательны. + +@[code](../../code/basics/loops1.own) \ No newline at end of file diff --git a/docs/docs/ru/basics/pattern_matching.md b/docs/docs/ru/basics/pattern_matching.md new file mode 100644 index 0000000..ab96bc3 --- /dev/null +++ b/docs/docs/ru/basics/pattern_matching.md @@ -0,0 +1,79 @@ +# Pattern Matching (сопоставление с образцом) + +Оператор `match` позволяет выполнить сопоставление значения с образцом. + +@[code](../../code/basics/pattern_matching1.own) + +@[code](../../code/basics/pattern_matching2.own) + +Проверяется тип и значение. Если ни одна из веток `case` не обнаружила совпадение, выполняется тело ветки `case _`. + + +Помимо константных значений, в `case` может присутствовать имя переменной. + +@[code](../../code/basics/pattern_matching3.own) + +В таком случае возможен один из двух сценариев: + +1. Переменная уже определена. Сравнивается её значение. +2. Переменная не определена. Ей присваивается сопоставляемое значение и выполняется ветка `case`. + +В примере выше, интерпретатор видит первые две ветки так: + +```own +case 10: +case 20: +``` + +Для последней ветки переменная `c` не определена, поэтому выполнится присваивание `c = x`, после чего вызов передаётся телу ветки `case c`. + + +## Уточнения + +Ветка `case` может иметь дополнительное сравнение + +@[code](../../code/basics/pattern_matching4.own) + + +## Сопоставление массивов + +Для сопоставления элементов массивов, в блоке case используется следующий синтаксис: + +* `case []:` выполняется, если в массиве нет элементов +* `case [a]:` выполняется, если в массиве есть один элемент +* `case [a :: b]:` выполняется, если в массиве есть два и более элементов +* `case [a :: b :: c :: d :: e]:` выполняется, если в массиве есть пять и более элементов + +Для двух последних случаев справедливы такие правила: + +* Если количество переменных в списке совпадает с количество элементов массива, то всем переменным присваивается значение массива. + +```own +match [0, 1, 2] { + case [x :: y :: z]: // x = 0, y = 1, z = 2 +} +``` + +* Если элементов массива больше, то в последней переменной будут сохранены оставшиеся элементы массива. + +```own +match [0, 1, 2, 3, 4] { + case [x :: y :: z]: // x = 0, y = 1, z = [2, 3, 4] +} +``` + +Пример рекурсивного вывода элементов массива + +@[code](../../code/basics/pattern_matching5.own) + + +## Сопоставление значений массивов + +Для сопоставления значений элементов массивов, используется синтаксис: + +* `case (expr1, expr2, expr3):` выполняется, если в массиве есть 3 элемента и первый элемент равен результату выражения expr1, второй - результату expr2 и третий - результату expr3. +* `case (expr1, _):` выполняется, если в массиве есть 2 элемента и первый элемент равен результату выражения expr1, а результат второго не важен. + +Классическая задача FizzBuzz может быть решена с использованием Pattern Matching: + +@[code](../../code/basics/pattern_matching6.own) diff --git a/docs/docs/ru/basics/string_functions.md b/docs/docs/ru/basics/string_functions.md new file mode 100644 index 0000000..17d1c9e --- /dev/null +++ b/docs/docs/ru/basics/string_functions.md @@ -0,0 +1,20 @@ +# Функции строк + +Поля: + - `length` - длина строки + - `lower` - строка в нижнем регистре + - `upper` - строка в верхнем регистре + - `chars` - массив символов в виде ASCII-кодов + +Функции: + - `trim()` - обрезает пробельные невидимые символы по обоим концам строки + - `startsWith(str, offset = 0)` - проверяет, начинается ли строка с подстроки str в позиции offset + - `endsWith(str)` - проверяет, заканчивается ли строка подстрокой str + - `matches(regex)` - проверяет соответствие строки с заданным шаблоном + - `contains(str)` - проверяет, содержится ли в строке подстрока str + - `equalsIgnoreCase(str)` - проверяет, равны ли строки вне зависимости от регистра (tEsT = TEST) + - `isEmpty()` - возвращает true, если строка пустая + +Кроме того, доступны автоматические функции-расширения, если функция принимает в качестве первого аргумента строку: + +@[code](../../code/basics/string_functions1.own) diff --git a/docs/docs/ru/basics/strings.md b/docs/docs/ru/basics/strings.md new file mode 100644 index 0000000..8ad5fa9 --- /dev/null +++ b/docs/docs/ru/basics/strings.md @@ -0,0 +1,12 @@ +# Строки + +Строки задаются в двойных кавычках и могут быть многострочные. Поддерживается юникод и экранирование символов: + +```own +str = "\n\tЭто +\tмногострочный +\tтекст +" +``` + +Для вывода строк есть два оператора `print` и `println` \ No newline at end of file diff --git a/docs/docs/ru/basics/types.md b/docs/docs/ru/basics/types.md new file mode 100644 index 0000000..088844d --- /dev/null +++ b/docs/docs/ru/basics/types.md @@ -0,0 +1,24 @@ +# Типы + +В OwnLang есть такие типы: + + * Number - числа (охватывает как целые, так и вещественные числа) + * String - строки + * Array - массивы + * Map - объекты (ассоциативные массивы) + * Function - функции + +Поскольку OwnLang - динамически типизируемый язык программирования, это значит, что явно объявлять типы не нужно. + +```own +x = 10 // целое число +y = 1.61803 // вещественное число +z = "abcd" // строка +``` + +Если какая-либо функция предполагает использование строк в качестве аргументов, а были переданы числа, то значения автоматически приведутся к строке. + +```own +x = 90 +print x +``` \ No newline at end of file diff --git a/docs/docs/ru/links.md b/docs/docs/ru/links.md new file mode 100644 index 0000000..60d91f4 --- /dev/null +++ b/docs/docs/ru/links.md @@ -0,0 +1,13 @@ +# Ссылки + +## Загрузки + +Android: [Free](https://play.google.com/store/apps/details?id=com.annimon.ownlang.free) / [Pro](https://play.google.com/store/apps/details?id=com.annimon.ownlang) +PC / плагин Netbeans / прочее: [GitHub Releases](https://github.com/aNNiMON/Own-Programming-Language-Tutorial/releases) +Исходный код: [GitHub](https://github.com/aNNiMON/Own-Programming-Language-Tutorial) + +Также доступно в виде пакета в AUR: + +``` +paru -S ownlang +``` diff --git a/docs/package.json b/docs/package.json new file mode 100644 index 0000000..a0c46b2 --- /dev/null +++ b/docs/package.json @@ -0,0 +1,20 @@ +{ + "name": "ownlang-docs", + "version": "1.0.0", + "description": "OwnLang Documentation", + "main": "index.js", + "scripts": { + "docs:dev": "vuepress dev docs", + "docs:build": "vuepress build docs" + }, + "keywords": ["documentation", "ownlang", "programming-language"], + "author": "aNNiMON", + "license": "MIT", + "devDependencies": { + "prismjs": "^1.29.0", + "@vuepress/client": "2.0.0-beta.68", + "@vuepress/plugin-prismjs": "2.0.0-beta.68", + "vue": "^3.3.8", + "vuepress": "2.0.0-beta.68" + } +} diff --git a/docs/pnpm-lock.yaml b/docs/pnpm-lock.yaml new file mode 100644 index 0000000..ab62475 --- /dev/null +++ b/docs/pnpm-lock.yaml @@ -0,0 +1,1780 @@ +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +devDependencies: + '@vuepress/client': + specifier: 2.0.0-beta.68 + version: 2.0.0-beta.68 + '@vuepress/plugin-prismjs': + specifier: 2.0.0-beta.68 + version: 2.0.0-beta.68 + prismjs: + specifier: ^1.29.0 + version: 1.29.0 + vue: + specifier: ^3.3.8 + version: 3.3.8 + vuepress: + specifier: 2.0.0-beta.68 + version: 2.0.0-beta.68(@vuepress/client@2.0.0-beta.68)(vue@3.3.8) + +packages: + + /@babel/helper-string-parser@7.22.5: + resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-validator-identifier@7.22.20: + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/parser@7.23.3: + resolution: {integrity: sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.23.3 + dev: true + + /@babel/types@7.23.3: + resolution: {integrity: sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.22.5 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 + dev: true + + /@esbuild/android-arm64@0.18.20: + resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm@0.18.20: + resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-x64@0.18.20: + resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-arm64@0.18.20: + resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-x64@0.18.20: + resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-arm64@0.18.20: + resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-x64@0.18.20: + resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm64@0.18.20: + resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm@0.18.20: + resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ia32@0.18.20: + resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64@0.18.20: + resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-mips64el@0.18.20: + resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ppc64@0.18.20: + resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-riscv64@0.18.20: + resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-s390x@0.18.20: + resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-x64@0.18.20: + resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/netbsd-x64@0.18.20: + resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-x64@0.18.20: + resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/sunos-x64@0.18.20: + resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-arm64@0.18.20: + resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-ia32@0.18.20: + resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-x64@0.18.20: + resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@jridgewell/sourcemap-codec@1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + dev: true + + /@mdit-vue/plugin-component@1.0.0: + resolution: {integrity: sha512-ZXsJwxkG5yyTHARIYbR74cT4AZ0SfMokFFjiHYCbypHIeYWgJhso4+CZ8+3V9EWFG3EHlGoKNGqKp9chHnqntQ==} + dependencies: + '@types/markdown-it': 13.0.6 + markdown-it: 13.0.2 + dev: true + + /@mdit-vue/plugin-frontmatter@1.0.0: + resolution: {integrity: sha512-MMA7Ny+YPZA7eDOY1t4E+rKuEWO39mzDdP/M68fKdXJU6VfcGkPr7gnpnJfW2QBJ5qIvMrK/3lDAA2JBy5TfpA==} + dependencies: + '@mdit-vue/types': 1.0.0 + '@types/markdown-it': 13.0.6 + gray-matter: 4.0.3 + markdown-it: 13.0.2 + dev: true + + /@mdit-vue/plugin-headers@1.0.0: + resolution: {integrity: sha512-0rK/iKy6x13d/Pp5XxdLBshTD0+YjZvtHIaIV+JO+/H2WnOv7oaRgs48G5d44z3XJVUE2u6fNnTlI169fef0/A==} + dependencies: + '@mdit-vue/shared': 1.0.0 + '@mdit-vue/types': 1.0.0 + '@types/markdown-it': 13.0.6 + markdown-it: 13.0.2 + dev: true + + /@mdit-vue/plugin-sfc@1.0.0: + resolution: {integrity: sha512-agMUe0fY4YHxsZivSvplBwRwrFvsIf/JNUJCAYq1+2Sg9+2hviTBZwjZDxYqHDHOVLtiNr+wuo68tE24mAx3AQ==} + dependencies: + '@mdit-vue/types': 1.0.0 + '@types/markdown-it': 13.0.6 + markdown-it: 13.0.2 + dev: true + + /@mdit-vue/plugin-title@1.0.0: + resolution: {integrity: sha512-8yC60fCZ95xcJ/cvJH4Lv43Rs4k+33UGyKrRWj5J8TNyMwUyGcwur0XyPM+ffJH4/Bzq4myZLsj/TTFSkXRxvw==} + dependencies: + '@mdit-vue/shared': 1.0.0 + '@mdit-vue/types': 1.0.0 + '@types/markdown-it': 13.0.6 + markdown-it: 13.0.2 + dev: true + + /@mdit-vue/plugin-toc@1.0.0: + resolution: {integrity: sha512-WN8blfX0X/5Nolic0ClDWP7eVo9IB+U4g0jbycX3lolIZX5Bai1UpsD3QYZr5VVsPbQJMKMGvTrCEtCNTGvyWQ==} + dependencies: + '@mdit-vue/shared': 1.0.0 + '@mdit-vue/types': 1.0.0 + '@types/markdown-it': 13.0.6 + markdown-it: 13.0.2 + dev: true + + /@mdit-vue/shared@1.0.0: + resolution: {integrity: sha512-nbYBfmEi+pR2Lm0Z6TMVX2/iBjfr/kGEsHW8CC0rQw+3+sG5dY6VG094HuFAkiAmmvZx9DZZb+7ZMWp9vkwCRw==} + dependencies: + '@mdit-vue/types': 1.0.0 + '@types/markdown-it': 13.0.6 + markdown-it: 13.0.2 + dev: true + + /@mdit-vue/types@1.0.0: + resolution: {integrity: sha512-xeF5+sHLzRNF7plbksywKCph4qli20l72of2fMlZQQ7RECvXYrRkE9+bjRFQCyULC7B8ydUYbpbkux5xJlVWyw==} + dev: true + + /@nodelib/fs.scandir@2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + dev: true + + /@nodelib/fs.stat@2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + dev: true + + /@nodelib/fs.walk@1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.15.0 + dev: true + + /@sindresorhus/merge-streams@1.0.0: + resolution: {integrity: sha512-rUV5WyJrJLoloD4NDN1V1+LDMDWOa4OTsT4yYJwQNpTU6FWxkxHpL7eu4w+DmiH8x/EAM1otkPE1+LaspIbplw==} + engines: {node: '>=18'} + dev: true + + /@types/debug@4.1.12: + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + dependencies: + '@types/ms': 0.7.34 + dev: true + + /@types/fs-extra@11.0.4: + resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} + dependencies: + '@types/jsonfile': 6.1.4 + '@types/node': 20.9.0 + dev: true + + /@types/hash-sum@1.0.2: + resolution: {integrity: sha512-UP28RddqY8xcU0SCEp9YKutQICXpaAq9N8U2klqF5hegGha7KzTOL8EdhIIV3bOSGBzjEpN9bU/d+nNZBdJYVw==} + dev: true + + /@types/jsonfile@6.1.4: + resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} + dependencies: + '@types/node': 20.9.0 + dev: true + + /@types/linkify-it@3.0.5: + resolution: {integrity: sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw==} + dev: true + + /@types/markdown-it-emoji@2.0.4: + resolution: {integrity: sha512-H6ulk/ZmbDxOayPwI/leJzrmoW1YKX1Z+MVSCHXuYhvqckV4I/c+hPTf6UiqJyn2avWugfj30XroheEb6/Ekqg==} + dependencies: + '@types/markdown-it': 13.0.6 + dev: true + + /@types/markdown-it@13.0.6: + resolution: {integrity: sha512-0VqpvusJn1/lwRegCxcHVdmLfF+wIsprsKMC9xW8UPcTxhFcQtoN/fBU1zMe8pH7D/RuueMh2CaBaNv+GrLqTw==} + dependencies: + '@types/linkify-it': 3.0.5 + '@types/mdurl': 1.0.5 + dev: true + + /@types/mdurl@1.0.5: + resolution: {integrity: sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA==} + dev: true + + /@types/ms@0.7.34: + resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} + dev: true + + /@types/node@20.9.0: + resolution: {integrity: sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw==} + dependencies: + undici-types: 5.26.5 + dev: true + + /@types/web-bluetooth@0.0.20: + resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} + dev: true + + /@vitejs/plugin-vue@4.4.1(vite@4.5.0)(vue@3.3.8): + resolution: {integrity: sha512-HCQG8VDFDM7YDAdcj5QI5DvUi+r6xvo9LgvYdk7LSkUNwdpempdB5horkMSZsbdey9Ywsf5aaU8kEPw9M5kREA==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.0.0 + vue: ^3.2.25 + dependencies: + vite: 4.5.0 + vue: 3.3.8 + dev: true + + /@vue/compiler-core@3.3.8: + resolution: {integrity: sha512-hN/NNBUECw8SusQvDSqqcVv6gWq8L6iAktUR0UF3vGu2OhzRqcOiAno0FmBJWwxhYEXRlQJT5XnoKsVq1WZx4g==} + dependencies: + '@babel/parser': 7.23.3 + '@vue/shared': 3.3.8 + estree-walker: 2.0.2 + source-map-js: 1.0.2 + dev: true + + /@vue/compiler-dom@3.3.8: + resolution: {integrity: sha512-+PPtv+p/nWDd0AvJu3w8HS0RIm/C6VGBIRe24b9hSyNWOAPEUosFZ5diwawwP8ip5sJ8n0Pe87TNNNHnvjs0FQ==} + dependencies: + '@vue/compiler-core': 3.3.8 + '@vue/shared': 3.3.8 + dev: true + + /@vue/compiler-sfc@3.3.8: + resolution: {integrity: sha512-WMzbUrlTjfYF8joyT84HfwwXo+8WPALuPxhy+BZ6R4Aafls+jDBnSz8PDz60uFhuqFbl3HxRfxvDzrUf3THwpA==} + dependencies: + '@babel/parser': 7.23.3 + '@vue/compiler-core': 3.3.8 + '@vue/compiler-dom': 3.3.8 + '@vue/compiler-ssr': 3.3.8 + '@vue/reactivity-transform': 3.3.8 + '@vue/shared': 3.3.8 + estree-walker: 2.0.2 + magic-string: 0.30.5 + postcss: 8.4.31 + source-map-js: 1.0.2 + dev: true + + /@vue/compiler-ssr@3.3.8: + resolution: {integrity: sha512-hXCqQL/15kMVDBuoBYpUnSYT8doDNwsjvm3jTefnXr+ytn294ySnT8NlsFHmTgKNjwpuFy7XVV8yTeLtNl/P6w==} + dependencies: + '@vue/compiler-dom': 3.3.8 + '@vue/shared': 3.3.8 + dev: true + + /@vue/devtools-api@6.5.1: + resolution: {integrity: sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==} + dev: true + + /@vue/reactivity-transform@3.3.8: + resolution: {integrity: sha512-49CvBzmZNtcHua0XJ7GdGifM8GOXoUMOX4dD40Y5DxI3R8OUhMlvf2nvgUAcPxaXiV5MQQ1Nwy09ADpnLQUqRw==} + dependencies: + '@babel/parser': 7.23.3 + '@vue/compiler-core': 3.3.8 + '@vue/shared': 3.3.8 + estree-walker: 2.0.2 + magic-string: 0.30.5 + dev: true + + /@vue/reactivity@3.3.8: + resolution: {integrity: sha512-ctLWitmFBu6mtddPyOKpHg8+5ahouoTCRtmAHZAXmolDtuZXfjL2T3OJ6DL6ezBPQB1SmMnpzjiWjCiMYmpIuw==} + dependencies: + '@vue/shared': 3.3.8 + dev: true + + /@vue/runtime-core@3.3.8: + resolution: {integrity: sha512-qurzOlb6q26KWQ/8IShHkMDOuJkQnQcTIp1sdP4I9MbCf9FJeGVRXJFr2mF+6bXh/3Zjr9TDgURXrsCr9bfjUw==} + dependencies: + '@vue/reactivity': 3.3.8 + '@vue/shared': 3.3.8 + dev: true + + /@vue/runtime-dom@3.3.8: + resolution: {integrity: sha512-Noy5yM5UIf9UeFoowBVgghyGGPIDPy1Qlqt0yVsUdAVbqI8eeMSsTqBtauaEoT2UFXUk5S64aWVNJN4MJ2vRdA==} + dependencies: + '@vue/runtime-core': 3.3.8 + '@vue/shared': 3.3.8 + csstype: 3.1.2 + dev: true + + /@vue/server-renderer@3.3.8(vue@3.3.8): + resolution: {integrity: sha512-zVCUw7RFskvPuNlPn/8xISbrf0zTWsTSdYTsUTN1ERGGZGVnRxM2QZ3x1OR32+vwkkCm0IW6HmJ49IsPm7ilLg==} + peerDependencies: + vue: 3.3.8 + dependencies: + '@vue/compiler-ssr': 3.3.8 + '@vue/shared': 3.3.8 + vue: 3.3.8 + dev: true + + /@vue/shared@3.3.8: + resolution: {integrity: sha512-8PGwybFwM4x8pcfgqEQFy70NaQxASvOC5DJwLQfpArw1UDfUXrJkdxD3BhVTMS+0Lef/TU7YO0Jvr0jJY8T+mw==} + dev: true + + /@vuepress/bundler-vite@2.0.0-beta.68: + resolution: {integrity: sha512-N2grrjKIQEZJcb+JaG7ZimCoUH3bRK4zwHjPOLpBpplTQ/V5l99I90FMswpaCs7bKBiXTO0fiEUYn4Nw8V/qkQ==} + dependencies: + '@vitejs/plugin-vue': 4.4.1(vite@4.5.0)(vue@3.3.8) + '@vuepress/client': 2.0.0-beta.68 + '@vuepress/core': 2.0.0-beta.68 + '@vuepress/shared': 2.0.0-beta.68 + '@vuepress/utils': 2.0.0-beta.68 + autoprefixer: 10.4.16(postcss@8.4.31) + connect-history-api-fallback: 2.0.0 + postcss: 8.4.31 + postcss-load-config: 4.0.1(postcss@8.4.31) + rollup: 3.29.4 + vite: 4.5.0 + vue: 3.3.8 + vue-router: 4.2.5(vue@3.3.8) + transitivePeerDependencies: + - '@types/node' + - '@vue/composition-api' + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + - ts-node + - typescript + dev: true + + /@vuepress/cli@2.0.0-beta.68: + resolution: {integrity: sha512-Br0aaJIWBtKjXBMmulLcN5hFOx8kbVHgs8K+EOASC9fLrq6LolsUJIdAiR+KyeMwQMyRInKrF3SF7k7AJetVeQ==} + hasBin: true + dependencies: + '@vuepress/core': 2.0.0-beta.68 + '@vuepress/shared': 2.0.0-beta.68 + '@vuepress/utils': 2.0.0-beta.68 + cac: 6.7.14 + chokidar: 3.5.3 + envinfo: 7.11.0 + esbuild: 0.18.20 + transitivePeerDependencies: + - '@vue/composition-api' + - supports-color + - typescript + dev: true + + /@vuepress/client@2.0.0-beta.68: + resolution: {integrity: sha512-Y6amMnkPxpmn51vcgy5yzm3gpIaqZo4Pa8ItPFd7MW6GQy6HVZRNaV9ufzWRPOAedLHgpT4aVXomidvTMEKHVw==} + dependencies: + '@vue/devtools-api': 6.5.1 + '@vuepress/shared': 2.0.0-beta.68 + '@vueuse/core': 10.6.0(vue@3.3.8) + vue: 3.3.8 + vue-router: 4.2.5(vue@3.3.8) + transitivePeerDependencies: + - '@vue/composition-api' + - typescript + dev: true + + /@vuepress/core@2.0.0-beta.68: + resolution: {integrity: sha512-/c+3gdduDyiyeGARzui6Z5ZeZurRGcbVSmqcUfb8SjB7sHojDt+bq/7gYeXKXrJ4R0zPpmqshlZdNGOSY4+uGQ==} + dependencies: + '@vuepress/client': 2.0.0-beta.68 + '@vuepress/markdown': 2.0.0-beta.68 + '@vuepress/shared': 2.0.0-beta.68 + '@vuepress/utils': 2.0.0-beta.68 + vue: 3.3.8 + transitivePeerDependencies: + - '@vue/composition-api' + - supports-color + - typescript + dev: true + + /@vuepress/markdown@2.0.0-beta.68: + resolution: {integrity: sha512-wQOVw1QQSnkdKClTnv3dHw1A7Y+XF2eu2hJmhTf9XOnEMxQ9taacIq5iRuQdcfR+Y8rjWmrzrqWZL+MiJbxKMQ==} + dependencies: + '@mdit-vue/plugin-component': 1.0.0 + '@mdit-vue/plugin-frontmatter': 1.0.0 + '@mdit-vue/plugin-headers': 1.0.0 + '@mdit-vue/plugin-sfc': 1.0.0 + '@mdit-vue/plugin-title': 1.0.0 + '@mdit-vue/plugin-toc': 1.0.0 + '@mdit-vue/shared': 1.0.0 + '@mdit-vue/types': 1.0.0 + '@types/markdown-it': 13.0.6 + '@types/markdown-it-emoji': 2.0.4 + '@vuepress/shared': 2.0.0-beta.68 + '@vuepress/utils': 2.0.0-beta.68 + markdown-it: 13.0.2 + markdown-it-anchor: 8.6.7(@types/markdown-it@13.0.6)(markdown-it@13.0.2) + markdown-it-emoji: 2.0.2 + mdurl: 1.0.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@vuepress/plugin-active-header-links@2.0.0-beta.68: + resolution: {integrity: sha512-yMOvnzYrzZ70hCPWXlPrm6nU8q8MvrfhLf3R007ino7TWhlumTioYEnXKX3TH5+us1QM3W/CI+LUyr1si6leGg==} + dependencies: + '@vuepress/client': 2.0.0-beta.68 + '@vuepress/core': 2.0.0-beta.68 + '@vuepress/utils': 2.0.0-beta.68 + ts-debounce: 4.0.0 + vue: 3.3.8 + vue-router: 4.2.5(vue@3.3.8) + transitivePeerDependencies: + - '@vue/composition-api' + - supports-color + - typescript + dev: true + + /@vuepress/plugin-back-to-top@2.0.0-beta.68: + resolution: {integrity: sha512-YobSlJUltm+zzTgJttmU1iDI0qUotRMl7TXnutAqJ7FTsPBUVrLQsXpfSEJnwwBbZ99VHTAF5FvXwtlZRuoLNg==} + dependencies: + '@vuepress/client': 2.0.0-beta.68 + '@vuepress/core': 2.0.0-beta.68 + '@vuepress/utils': 2.0.0-beta.68 + ts-debounce: 4.0.0 + vue: 3.3.8 + transitivePeerDependencies: + - '@vue/composition-api' + - supports-color + - typescript + dev: true + + /@vuepress/plugin-container@2.0.0-beta.68: + resolution: {integrity: sha512-oRGO9B9KgT9ZqjOcxBdTZI7eeI80qzYOYy8BGA+tYeKVy2AaLQk7GsUm3mMQn6Z82AdqBtRag/eUUiMo3p6toA==} + dependencies: + '@types/markdown-it': 13.0.6 + '@vuepress/core': 2.0.0-beta.68 + '@vuepress/markdown': 2.0.0-beta.68 + '@vuepress/shared': 2.0.0-beta.68 + '@vuepress/utils': 2.0.0-beta.68 + markdown-it: 13.0.2 + markdown-it-container: 3.0.0 + transitivePeerDependencies: + - '@vue/composition-api' + - supports-color + - typescript + dev: true + + /@vuepress/plugin-external-link-icon@2.0.0-beta.68: + resolution: {integrity: sha512-6oHeD0HT8SsFMxaKYEfc35Qx4vlJivJXbdZr/pcYbAEDSv3eORKrVnY9yZk5i6aTI/sxeTyEmoahqdcx+6uV6w==} + dependencies: + '@vuepress/client': 2.0.0-beta.68 + '@vuepress/core': 2.0.0-beta.68 + '@vuepress/markdown': 2.0.0-beta.68 + '@vuepress/shared': 2.0.0-beta.68 + '@vuepress/utils': 2.0.0-beta.68 + vue: 3.3.8 + transitivePeerDependencies: + - '@vue/composition-api' + - supports-color + - typescript + dev: true + + /@vuepress/plugin-git@2.0.0-beta.68: + resolution: {integrity: sha512-L3F5fMu0zVzl90xlZBjoHJSCHdGFfWGs624xcC66QKeFXU6xVt7lMB4wyuPYfi6opCSfDwigmVYcJOsMmbCdBg==} + dependencies: + '@vuepress/core': 2.0.0-beta.68 + '@vuepress/utils': 2.0.0-beta.68 + execa: 8.0.1 + transitivePeerDependencies: + - '@vue/composition-api' + - supports-color + - typescript + dev: true + + /@vuepress/plugin-medium-zoom@2.0.0-beta.68: + resolution: {integrity: sha512-2bnxcvNQM+i9b5cDDgzitfyLawssPzcxVVOcscUozhvNSkiVre6aCVjStmLk9uWpsFPhtkWawdXCFYpCdBF7Ug==} + dependencies: + '@vuepress/client': 2.0.0-beta.68 + '@vuepress/core': 2.0.0-beta.68 + '@vuepress/utils': 2.0.0-beta.68 + medium-zoom: 1.0.8 + vue: 3.3.8 + transitivePeerDependencies: + - '@vue/composition-api' + - supports-color + - typescript + dev: true + + /@vuepress/plugin-nprogress@2.0.0-beta.68: + resolution: {integrity: sha512-72yFcUIaON4YUwjf/6qK1DkZcGnZAST/At2t2/esUVm3XOEPxqz2HwKYfU89Rp/+VZfTp0Nn8W4kXuLcC+V0KA==} + dependencies: + '@vuepress/client': 2.0.0-beta.68 + '@vuepress/core': 2.0.0-beta.68 + '@vuepress/utils': 2.0.0-beta.68 + vue: 3.3.8 + vue-router: 4.2.5(vue@3.3.8) + transitivePeerDependencies: + - '@vue/composition-api' + - supports-color + - typescript + dev: true + + /@vuepress/plugin-palette@2.0.0-beta.68: + resolution: {integrity: sha512-LILoXCY9NMi+doNz09HiUeNiElJy6ECbR/yodOBp+jcwGZ4RVPFp8PEeK3jCZ8+UuJxa1mmmi6dqTxp02xrAFQ==} + dependencies: + '@vuepress/core': 2.0.0-beta.68 + '@vuepress/utils': 2.0.0-beta.68 + chokidar: 3.5.3 + transitivePeerDependencies: + - '@vue/composition-api' + - supports-color + - typescript + dev: true + + /@vuepress/plugin-prismjs@2.0.0-beta.68: + resolution: {integrity: sha512-IARRHzZ2XeLQPfelimqU/eexoItnwnz6z4tSkTIrV4PQeWg6EjMc92TxHyE+EEWAcka/DZxd42+xq0QV7FSJJQ==} + dependencies: + '@vuepress/core': 2.0.0-beta.68 + prismjs: 1.29.0 + transitivePeerDependencies: + - '@vue/composition-api' + - supports-color + - typescript + dev: true + + /@vuepress/plugin-theme-data@2.0.0-beta.68: + resolution: {integrity: sha512-UFiMxJAD20mOK29P1H8zoHFNeDVer+2goQ9qy/VjDAbzE2I2yOa6TbJ7fWhSO8Vq0dCy7cX92wZMhXQIyUeNgQ==} + dependencies: + '@vue/devtools-api': 6.5.1 + '@vuepress/client': 2.0.0-beta.68 + '@vuepress/core': 2.0.0-beta.68 + '@vuepress/shared': 2.0.0-beta.68 + '@vuepress/utils': 2.0.0-beta.68 + vue: 3.3.8 + transitivePeerDependencies: + - '@vue/composition-api' + - supports-color + - typescript + dev: true + + /@vuepress/shared@2.0.0-beta.68: + resolution: {integrity: sha512-vnlOOchZ7ZHeTQuFDKcTC1AKF5zl4+XKwZZdpX9cUkIl3rYbM4y80yoWvfG5SQnPjjoYG57g4Qz21Fa8u/CnCQ==} + dependencies: + '@mdit-vue/types': 1.0.0 + '@vue/shared': 3.3.8 + dev: true + + /@vuepress/theme-default@2.0.0-beta.68: + resolution: {integrity: sha512-qsIaM3ZVjJb6KeuScxVRLfLylBa3kK7IriZ9YlmkHl2NwzspsqVMTh4Ozd2MlkhzMH4TnB1XLybTQKGCZnQBVw==} + peerDependencies: + sass-loader: ^13.2.1 + peerDependenciesMeta: + sass-loader: + optional: true + dependencies: + '@vuepress/client': 2.0.0-beta.68 + '@vuepress/core': 2.0.0-beta.68 + '@vuepress/plugin-active-header-links': 2.0.0-beta.68 + '@vuepress/plugin-back-to-top': 2.0.0-beta.68 + '@vuepress/plugin-container': 2.0.0-beta.68 + '@vuepress/plugin-external-link-icon': 2.0.0-beta.68 + '@vuepress/plugin-git': 2.0.0-beta.68 + '@vuepress/plugin-medium-zoom': 2.0.0-beta.68 + '@vuepress/plugin-nprogress': 2.0.0-beta.68 + '@vuepress/plugin-palette': 2.0.0-beta.68 + '@vuepress/plugin-prismjs': 2.0.0-beta.68 + '@vuepress/plugin-theme-data': 2.0.0-beta.68 + '@vuepress/shared': 2.0.0-beta.68 + '@vuepress/utils': 2.0.0-beta.68 + '@vueuse/core': 10.6.0(vue@3.3.8) + sass: 1.69.5 + vue: 3.3.8 + vue-router: 4.2.5(vue@3.3.8) + transitivePeerDependencies: + - '@vue/composition-api' + - supports-color + - typescript + dev: true + + /@vuepress/utils@2.0.0-beta.68: + resolution: {integrity: sha512-asRN+c8JCIVJWusP/V0FY8rgArGwuKXarEIKwFHcaR7x9IeB3Iww4p8raQHb1xYJADM7QFXx1gs2oM6Fx4XsUw==} + dependencies: + '@types/debug': 4.1.12 + '@types/fs-extra': 11.0.4 + '@types/hash-sum': 1.0.2 + '@vuepress/shared': 2.0.0-beta.68 + debug: 4.3.4 + fs-extra: 11.1.1 + globby: 14.0.0 + hash-sum: 2.0.0 + ora: 7.0.1 + picocolors: 1.0.0 + upath: 2.0.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@vueuse/core@10.6.0(vue@3.3.8): + resolution: {integrity: sha512-+Yee+g9+9BEbvkyGdn4Bf4yZx9EfocAytpV2ZlrlP7xcz+qznLmZIDqDroTvc5vtMkWZicisgEv8dt3+jL+HQg==} + dependencies: + '@types/web-bluetooth': 0.0.20 + '@vueuse/metadata': 10.6.0 + '@vueuse/shared': 10.6.0(vue@3.3.8) + vue-demi: 0.14.6(vue@3.3.8) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + dev: true + + /@vueuse/metadata@10.6.0: + resolution: {integrity: sha512-mzKHkHoiK6xVz01VzQjM2l6ofUanEaofgEGPgDHcAzlvOTccPRTIdEuzneOUTYxgfm1vkDikS6rtrEw/NYlaTQ==} + dev: true + + /@vueuse/shared@10.6.0(vue@3.3.8): + resolution: {integrity: sha512-0t4MVE18sO+/4Gh0jfeOXBTjKeV4606N9kIrDOLPjFl8Rwnlodn+QC5A4LfJuysK7aOsTMjF3KnzNeueaI0xlQ==} + dependencies: + vue-demi: 0.14.6(vue@3.3.8) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + dev: true + + /ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + dev: true + + /anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: true + + /argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + dependencies: + sprintf-js: 1.0.3 + dev: true + + /argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: true + + /autoprefixer@10.4.16(postcss@8.4.31): + resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + dependencies: + browserslist: 4.22.1 + caniuse-lite: 1.0.30001561 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.0.0 + postcss: 8.4.31 + postcss-value-parser: 4.2.0 + dev: true + + /base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + dev: true + + /binary-extensions@2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + dev: true + + /bl@5.1.0: + resolution: {integrity: sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==} + dependencies: + buffer: 6.0.3 + inherits: 2.0.4 + readable-stream: 3.6.2 + dev: true + + /braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + dev: true + + /browserslist@4.22.1: + resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001561 + electron-to-chromium: 1.4.581 + node-releases: 2.0.13 + update-browserslist-db: 1.0.13(browserslist@4.22.1) + dev: true + + /buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: true + + /cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + dev: true + + /caniuse-lite@1.0.30001561: + resolution: {integrity: sha512-NTt0DNoKe958Q0BE0j0c1V9jbUzhBxHIEJy7asmGrpE0yG63KTV7PLHPnK2E1O9RsQrQ081I3NLuXGS6zht3cw==} + dev: true + + /chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + dev: true + + /chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /cli-cursor@4.0.0: + resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + restore-cursor: 4.0.0 + dev: true + + /cli-spinners@2.9.1: + resolution: {integrity: sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==} + engines: {node: '>=6'} + dev: true + + /connect-history-api-fallback@2.0.0: + resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==} + engines: {node: '>=0.8'} + dev: true + + /cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + dev: true + + /csstype@3.1.2: + resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} + dev: true + + /debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: true + + /eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + dev: true + + /electron-to-chromium@1.4.581: + resolution: {integrity: sha512-6uhqWBIapTJUxgPTCHH9sqdbxIMPt7oXl0VcAL1kOtlU6aECdcMncCrX5Z7sHQ/invtrC9jUQUef7+HhO8vVFw==} + dev: true + + /emoji-regex@10.3.0: + resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} + dev: true + + /entities@3.0.1: + resolution: {integrity: sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==} + engines: {node: '>=0.12'} + dev: true + + /envinfo@7.11.0: + resolution: {integrity: sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /esbuild@0.18.20: + resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.18.20 + '@esbuild/android-arm64': 0.18.20 + '@esbuild/android-x64': 0.18.20 + '@esbuild/darwin-arm64': 0.18.20 + '@esbuild/darwin-x64': 0.18.20 + '@esbuild/freebsd-arm64': 0.18.20 + '@esbuild/freebsd-x64': 0.18.20 + '@esbuild/linux-arm': 0.18.20 + '@esbuild/linux-arm64': 0.18.20 + '@esbuild/linux-ia32': 0.18.20 + '@esbuild/linux-loong64': 0.18.20 + '@esbuild/linux-mips64el': 0.18.20 + '@esbuild/linux-ppc64': 0.18.20 + '@esbuild/linux-riscv64': 0.18.20 + '@esbuild/linux-s390x': 0.18.20 + '@esbuild/linux-x64': 0.18.20 + '@esbuild/netbsd-x64': 0.18.20 + '@esbuild/openbsd-x64': 0.18.20 + '@esbuild/sunos-x64': 0.18.20 + '@esbuild/win32-arm64': 0.18.20 + '@esbuild/win32-ia32': 0.18.20 + '@esbuild/win32-x64': 0.18.20 + dev: true + + /escalade@3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + dev: true + + /esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + dev: true + + /execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.1.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 + dev: true + + /extend-shallow@2.0.1: + resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} + engines: {node: '>=0.10.0'} + dependencies: + is-extendable: 0.1.1 + dev: true + + /fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + dev: true + + /fastq@1.15.0: + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + dependencies: + reusify: 1.0.4 + dev: true + + /fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + dev: true + + /fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + dev: true + + /fs-extra@11.1.1: + resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==} + engines: {node: '>=14.14'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + dev: true + + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + dev: true + + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + dev: true + + /globby@14.0.0: + resolution: {integrity: sha512-/1WM/LNHRAOH9lZta77uGbq0dAEQM+XjNesWwhlERDVenqothRbnzTrL3/LrIoEPPjeUHC3vrS6TwoyxeHs7MQ==} + engines: {node: '>=18'} + dependencies: + '@sindresorhus/merge-streams': 1.0.0 + fast-glob: 3.3.2 + ignore: 5.2.4 + path-type: 5.0.0 + slash: 5.1.0 + unicorn-magic: 0.1.0 + dev: true + + /graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + dev: true + + /gray-matter@4.0.3: + resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} + engines: {node: '>=6.0'} + dependencies: + js-yaml: 3.14.1 + kind-of: 6.0.3 + section-matter: 1.0.0 + strip-bom-string: 1.0.0 + dev: true + + /hash-sum@2.0.0: + resolution: {integrity: sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==} + dev: true + + /human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + dev: true + + /ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + dev: true + + /ignore@5.2.4: + resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} + engines: {node: '>= 4'} + dev: true + + /immutable@4.3.4: + resolution: {integrity: sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==} + dev: true + + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: true + + /is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.2.0 + dev: true + + /is-extendable@0.1.1: + resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} + engines: {node: '>=0.10.0'} + dev: true + + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + dev: true + + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: true + + /is-interactive@2.0.0: + resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} + engines: {node: '>=12'} + dev: true + + /is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: true + + /is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + + /is-unicode-supported@1.3.0: + resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} + engines: {node: '>=12'} + dev: true + + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: true + + /js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + dev: true + + /jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + dev: true + + /kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + dev: true + + /lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + dev: true + + /linkify-it@4.0.1: + resolution: {integrity: sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==} + dependencies: + uc.micro: 1.0.6 + dev: true + + /log-symbols@5.1.0: + resolution: {integrity: sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==} + engines: {node: '>=12'} + dependencies: + chalk: 5.3.0 + is-unicode-supported: 1.3.0 + dev: true + + /magic-string@0.30.5: + resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + + /markdown-it-anchor@8.6.7(@types/markdown-it@13.0.6)(markdown-it@13.0.2): + resolution: {integrity: sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==} + peerDependencies: + '@types/markdown-it': '*' + markdown-it: '*' + dependencies: + '@types/markdown-it': 13.0.6 + markdown-it: 13.0.2 + dev: true + + /markdown-it-container@3.0.0: + resolution: {integrity: sha512-y6oKTq4BB9OQuY/KLfk/O3ysFhB3IMYoIWhGJEidXt1NQFocFK2sA2t0NYZAMyMShAGL6x5OPIbrmXPIqaN9rw==} + dev: true + + /markdown-it-emoji@2.0.2: + resolution: {integrity: sha512-zLftSaNrKuYl0kR5zm4gxXjHaOI3FAOEaloKmRA5hijmJZvSjmxcokOLlzycb/HXlUFWzXqpIEoyEMCE4i9MvQ==} + dev: true + + /markdown-it@13.0.2: + resolution: {integrity: sha512-FtwnEuuK+2yVU7goGn/MJ0WBZMM9ZPgU9spqlFs7/A/pDIUNSOQZhUgOqYCficIuR2QaFnrt8LHqBWsbTAoI5w==} + hasBin: true + dependencies: + argparse: 2.0.1 + entities: 3.0.1 + linkify-it: 4.0.1 + mdurl: 1.0.1 + uc.micro: 1.0.6 + dev: true + + /mdurl@1.0.1: + resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} + dev: true + + /medium-zoom@1.0.8: + resolution: {integrity: sha512-CjFVuFq/IfrdqesAXfg+hzlDKu6A2n80ZIq0Kl9kWjoHh9j1N9Uvk5X0/MmN0hOfm5F9YBswlClhcwnmtwz7gA==} + dev: true + + /merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + dev: true + + /merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + dev: true + + /micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + dev: true + + /mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + dev: true + + /mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + dev: true + + /ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: true + + /nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: true + + /node-releases@2.0.13: + resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} + dev: true + + /normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: true + + /normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + dev: true + + /npm-run-path@5.1.0: + resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + path-key: 4.0.0 + dev: true + + /onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + dependencies: + mimic-fn: 2.1.0 + dev: true + + /onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + dependencies: + mimic-fn: 4.0.0 + dev: true + + /ora@7.0.1: + resolution: {integrity: sha512-0TUxTiFJWv+JnjWm4o9yvuskpEJLXTcng8MJuKd+SzAzp2o+OP3HWqNhB4OdJRt1Vsd9/mR0oyaEYlOnL7XIRw==} + engines: {node: '>=16'} + dependencies: + chalk: 5.3.0 + cli-cursor: 4.0.0 + cli-spinners: 2.9.1 + is-interactive: 2.0.0 + is-unicode-supported: 1.3.0 + log-symbols: 5.1.0 + stdin-discarder: 0.1.0 + string-width: 6.1.0 + strip-ansi: 7.1.0 + dev: true + + /path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + dev: true + + /path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + dev: true + + /path-type@5.0.0: + resolution: {integrity: sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==} + engines: {node: '>=12'} + dev: true + + /picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + dev: true + + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + dev: true + + /postcss-load-config@4.0.1(postcss@8.4.31): + resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 2.1.0 + postcss: 8.4.31 + yaml: 2.3.4 + dev: true + + /postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + dev: true + + /postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: true + + /prismjs@1.29.0: + resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==} + engines: {node: '>=6'} + dev: true + + /queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: true + + /readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + dev: true + + /readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + dev: true + + /restore-cursor@4.0.0: + resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + dev: true + + /reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: true + + /rollup@3.29.4: + resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==} + engines: {node: '>=14.18.0', npm: '>=8.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + dev: true + + /safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + dev: true + + /sass@1.69.5: + resolution: {integrity: sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==} + engines: {node: '>=14.0.0'} + hasBin: true + dependencies: + chokidar: 3.5.3 + immutable: 4.3.4 + source-map-js: 1.0.2 + dev: true + + /section-matter@1.0.0: + resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} + engines: {node: '>=4'} + dependencies: + extend-shallow: 2.0.1 + kind-of: 6.0.3 + dev: true + + /shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 + dev: true + + /shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + dev: true + + /signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + dev: true + + /signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + dev: true + + /slash@5.1.0: + resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} + engines: {node: '>=14.16'} + dev: true + + /source-map-js@1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + dev: true + + /sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + dev: true + + /stdin-discarder@0.1.0: + resolution: {integrity: sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + bl: 5.1.0 + dev: true + + /string-width@6.1.0: + resolution: {integrity: sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ==} + engines: {node: '>=16'} + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 10.3.0 + strip-ansi: 7.1.0 + dev: true + + /string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + dependencies: + ansi-regex: 6.0.1 + dev: true + + /strip-bom-string@1.0.0: + resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} + engines: {node: '>=0.10.0'} + dev: true + + /strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + dev: true + + /to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + dev: true + + /to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + dev: true + + /ts-debounce@4.0.0: + resolution: {integrity: sha512-+1iDGY6NmOGidq7i7xZGA4cm8DAa6fqdYcvO5Z6yBevH++Bdo9Qt/mN0TzHUgcCcKv1gmh9+W5dHqz8pMWbCbg==} + dev: true + + /uc.micro@1.0.6: + resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==} + dev: true + + /undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + dev: true + + /unicorn-magic@0.1.0: + resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} + engines: {node: '>=18'} + dev: true + + /universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + dev: true + + /upath@2.0.1: + resolution: {integrity: sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==} + engines: {node: '>=4'} + dev: true + + /update-browserslist-db@1.0.13(browserslist@4.22.1): + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.22.1 + escalade: 3.1.1 + picocolors: 1.0.0 + dev: true + + /util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + dev: true + + /vite@4.5.0: + resolution: {integrity: sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + '@types/node': '>= 14' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + esbuild: 0.18.20 + postcss: 8.4.31 + rollup: 3.29.4 + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /vue-demi@0.14.6(vue@3.3.8): + resolution: {integrity: sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^3.0.0-0 || ^2.6.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + dependencies: + vue: 3.3.8 + dev: true + + /vue-router@4.2.5(vue@3.3.8): + resolution: {integrity: sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw==} + peerDependencies: + vue: ^3.2.0 + dependencies: + '@vue/devtools-api': 6.5.1 + vue: 3.3.8 + dev: true + + /vue@3.3.8: + resolution: {integrity: sha512-5VSX/3DabBikOXMsxzlW8JyfeLKlG9mzqnWgLQLty88vdZL7ZJgrdgBOmrArwxiLtmS+lNNpPcBYqrhE6TQW5w==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@vue/compiler-dom': 3.3.8 + '@vue/compiler-sfc': 3.3.8 + '@vue/runtime-dom': 3.3.8 + '@vue/server-renderer': 3.3.8(vue@3.3.8) + '@vue/shared': 3.3.8 + dev: true + + /vuepress-vite@2.0.0-beta.68(@vuepress/client@2.0.0-beta.68)(vue@3.3.8): + resolution: {integrity: sha512-/+qO1uO8EX6ERFFgaWqKNW/nD89JrmS9sgMYxREPM0lsWj1E+bgkvc8KJ6DIgWRc1lRs0kMrEhK3UHC0md8ESQ==} + engines: {node: '>=18.16.0'} + hasBin: true + peerDependencies: + '@vuepress/client': 2.0.0-beta.68 + vue: ^3.3.4 + dependencies: + '@vuepress/bundler-vite': 2.0.0-beta.68 + '@vuepress/cli': 2.0.0-beta.68 + '@vuepress/client': 2.0.0-beta.68 + '@vuepress/core': 2.0.0-beta.68 + '@vuepress/theme-default': 2.0.0-beta.68 + vue: 3.3.8 + transitivePeerDependencies: + - '@types/node' + - '@vue/composition-api' + - less + - lightningcss + - sass + - sass-loader + - stylus + - sugarss + - supports-color + - terser + - ts-node + - typescript + dev: true + + /vuepress@2.0.0-beta.68(@vuepress/client@2.0.0-beta.68)(vue@3.3.8): + resolution: {integrity: sha512-75naWJMIwyD1WiVswN01Am4JwcRxlUPLTkxN/345dVaVAgKyzIDKKJDgmUN6MKZkDN2z2dDKLMcquI6VUrlCRg==} + engines: {node: '>=18.16.0'} + hasBin: true + dependencies: + vuepress-vite: 2.0.0-beta.68(@vuepress/client@2.0.0-beta.68)(vue@3.3.8) + transitivePeerDependencies: + - '@types/node' + - '@vue/composition-api' + - '@vuepress/client' + - less + - lightningcss + - sass + - sass-loader + - stylus + - sugarss + - supports-color + - terser + - ts-node + - typescript + - vue + dev: true + + /which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + + /yaml@2.3.4: + resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} + engines: {node: '>= 14'} + dev: true