├── .gitignore
├── README.md
├── client
└── cl_main.lua
├── fxmanifest.lua
├── server
└── sv_main.lua
├── shared
└── config.lua
└── svelte-source
├── .gitignore
├── .vscode
└── extensions.json
├── README.md
├── index.html
├── package.json
├── pnpm-lock.yaml
├── postcss.config.cjs
├── src
├── App.svelte
├── components
│ ├── AdminReports.svelte
│ ├── Chat.svelte
│ └── NewReport.svelte
├── hooks
│ ├── useFetchNui.ts
│ └── useNuiEvent.ts
├── main.ts
├── providers
│ └── VisibilityProvider.svelte
├── store
│ └── visibility.ts
├── styles
│ └── globals.css
├── utils
│ ├── debugData.ts
│ └── misc.ts
└── vite-env.d.ts
├── svelte.config.js
├── tailwind.config.cjs
├── tsconfig.json
├── tsconfig.node.json
└── vite.config.ts
/.gitignore:
--------------------------------------------------------------------------------
1 | html
2 | .vscode
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # qw_reports
2 |
3 | Standalone FiveM reporting system that works with ace permissions
4 |
5 | ## [INSTALL FROM THE LATEST RELEASE PLEASE](https://github.com/qw-scripts/qw_reports/releases/latest)
6 |
7 | ## [INSTALL FROM THE LATEST RELEASE PLEASE](https://github.com/qw-scripts/qw_reports/releases/latest)
8 |
9 | ## [INSTALL FROM THE LATEST RELEASE PLEASE](https://github.com/qw-scripts/qw_reports/releases/latest)
10 |
11 | ## [INSTALL FROM THE LATEST RELEASE PLEASE](https://github.com/qw-scripts/qw_reports/releases/latest)
12 |
13 | make sure to configure your ace permssion name in the config file that you use for admins / who ever is going to have access to all of the reports
14 |
15 | ## Requirements
16 |
17 | - [ox_lib](https://github.com/overextended/ox_lib) - for callbacks to work and for notifications
18 |
19 | ## Preview
20 |
21 | [preview](https://youtu.be/WdKHmcQWHms)
22 |
23 | ## Contributors
24 |
25 | [Panther](https://github.com/PantherBruv) - Notifications for Reports
26 |
--------------------------------------------------------------------------------
/client/cl_main.lua:
--------------------------------------------------------------------------------
1 | -- COMMANDS --
2 |
3 | RegisterCommand(Config.CreateReportCommand, function()
4 | SendNUIMessage({ action = 'setVisible', data = { show = true, type = 'user' } })
5 | SetNuiFocus(true, true)
6 | end, false)
7 |
8 | RegisterCommand(Config.ViewReportsMenu, function()
9 | lib.callback('qw_reports:server:checkPerms', false, function(allowed)
10 | if allowed then
11 | SendNUIMessage({ action = 'setVisible', data = { show = true, type = 'admin' } })
12 | SetNuiFocus(true, true)
13 | end
14 | end)
15 | end, false)
16 |
17 | -- REPORTING CALLBACKS AND EVENTS --
18 |
19 | RegisterNetEvent('qw_reports:client:sendNotification', function()
20 | lib.notify({
21 | title = 'Reports',
22 | description = 'new report has been submitted...',
23 | type = 'info',
24 | icon = 'flag'
25 | })
26 | end)
27 |
28 | RegisterNUICallback('reports/CreateReport', function(data, cb)
29 | TriggerServerEvent('qw_reports:server:createReport', data)
30 |
31 | cb("ok")
32 | end)
33 |
34 | RegisterNUICallback('reports/DeleteReport', function(data, cb)
35 | TriggerServerEvent('qw_reports:server:deleteReport', data)
36 |
37 | cb("ok")
38 | end)
39 |
40 | RegisterNUICallback('reports/GetReports', function(_, cb)
41 | lib.callback('qw_reports:server:getCurrentReports', false, function(reports)
42 | cb(reports)
43 | end)
44 | end)
45 |
46 | RegisterNUICallback('reports/GetReportTypes', function(_, cb)
47 | cb(Config.ReportTypes)
48 | end)
49 |
50 | -- REPORTING ACTIONS CALLBACKS --
51 |
52 | RegisterNUICallback('actions/actionHandler', function(data, cb)
53 | local reportingPlayer = data.report_src
54 | local action = data.action
55 | TriggerServerEvent('qw_reports:server:actionHandler', reportingPlayer, action)
56 | cb('ok')
57 | end)
58 |
59 | -- GENERIC CALLBACKS --
60 |
61 | RegisterNUICallback('hideUI', function(_, cb)
62 | cb('ok')
63 | SetNuiFocus(false, false)
64 | end)
65 |
--------------------------------------------------------------------------------
/fxmanifest.lua:
--------------------------------------------------------------------------------
1 | -- Credits:
2 | -- UI build process (vite, rollup): https://github.com/JustLazzy
3 | -- initial idea for svelte boilerplate: https://github.com/project-error
4 | fx_version 'cerulean'
5 |
6 | game 'gta5'
7 |
8 | author 'qw-scripts'
9 | version '0.2.0'
10 | description 'standalone reporting system for FiveM'
11 |
12 | lua54 'yes'
13 |
14 | shared_scripts {
15 | 'shared/config.lua',
16 | '@ox_lib/init.lua'
17 | }
18 |
19 | client_scripts { 'client/*.lua' }
20 |
21 | server_scripts { 'server/*.lua' }
22 |
23 | ui_page 'html/index.html'
24 |
25 | files { 'html/index.html', 'html/js/index.js', 'html/assets/index.css' }
26 |
--------------------------------------------------------------------------------
/server/sv_main.lua:
--------------------------------------------------------------------------------
1 | local reports = {}
2 |
3 | -- yoinked from here: https://gist.github.com/jrus/3197011
4 | local function uuid()
5 | local template = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'
6 | return string.gsub(template, '[xy]', function(c)
7 | local v = (c == 'x') and math.random(0, 0xf) or math.random(8, 0xb)
8 | return string.format('%x', v)
9 | end)
10 | end
11 |
12 | local function sendNotificationToStaff()
13 | for _, playerId in ipairs(GetPlayers()) do
14 | if IsPlayerAceAllowed(playerId, Config.AcePermName) then
15 | TriggerClientEvent('qw_reports:client:sendNotification', playerId)
16 | end
17 | end
18 | end
19 |
20 | local function buildDiscordMessage(reportingPlayerId, reportData)
21 | local message = '**Identifiers:** \n\n'
22 |
23 | for _, v in pairs(GetPlayerIdentifiers(reportingPlayerId)) do
24 | if string.sub(v, 1, string.len("steam:")) == "steam:" then
25 | message = message .. '**SteamID: **' .. '||' .. v .. '||' .. '\n'
26 | elseif string.sub(v, 1, string.len("license:")) == "license:" then
27 | message = message .. '**License: **' .. '||' .. v .. '||' .. '\n'
28 | elseif string.sub(v, 1, string.len("xbl:")) == "xbl:" then
29 | message = message .. '**XBL: **' .. '||' .. v .. '||' .. '\n'
30 | elseif string.sub(v, 1, string.len("ip:")) == "ip:" then
31 | message = message .. '**IP: **' .. '||' .. v .. '||' .. '\n'
32 | elseif string.sub(v, 1, string.len("discord:")) == "discord:" then
33 | message = message .. '**Discord: **' .. '||' .. v .. '||' .. '\n'
34 | elseif string.sub(v, 1, string.len("live:")) == "live:" then
35 | message = message .. '**Live: **' .. '||' .. v .. '||' .. '\n'
36 | end
37 | end
38 |
39 | message = message .. '\n' .. '**Report Details:** \n\n'
40 |
41 | message = message .. 'Report Title: ' .. '**' .. reportData.report_title .. '**' .. '\n'
42 | message = message .. 'Report Details: ' .. '**' .. reportData.report_details .. '**' .. '\n'
43 | message = message .. 'Report Type: ' .. '**' .. reportData.report_type .. '**' .. '\n'
44 | message = message .. 'Report ID: ' .. '**' .. reportData.report_id .. '**' .. '\n'
45 |
46 | return message
47 | end
48 |
49 | local function sendDiscordNotification(reportingPlayerId, reportData)
50 | local message = buildDiscordMessage(reportingPlayerId, reportData)
51 | local playerName = GetPlayerName(reportingPlayerId)
52 |
53 | local embedData = {
54 | ['title'] = 'Report from ' .. playerName .. ' (' .. tostring(reportingPlayerId) .. ')',
55 | ['type'] = 'rich',
56 | ['color'] = 9807270,
57 | ['footer'] = {
58 | ['text'] = os.date('%c'),
59 | },
60 | ['description'] = message,
61 | ['author'] = {
62 | ['name'] = 'Reporting System',
63 | ['icon_url'] = Config.Webhook.webnhookImage,
64 | },
65 | }
66 | PerformHttpRequest(Config.Webhook.webhookUrl, function(err, text, headers) end, 'POST',
67 | json.encode({ username = 'Reporting System', embeds = { embedData }, avatar_url = Config.Webhook.webnhookImage })
68 | ,
69 | { ['Content-Type'] = 'application/json' })
70 |
71 | end
72 |
73 | RegisterNetEvent('qw_reports:server:createReport', function(data)
74 | local src = source
75 | local reportId = uuid()
76 |
77 | reports[#reports + 1] = {
78 | report_title = data.name,
79 | report_details = data.detail,
80 | report_type = data.report_type,
81 | report_src = src,
82 | report_id = reportId
83 | }
84 |
85 | if Config.Webhook.enabled then
86 | sendDiscordNotification(src, {
87 | report_title = data.name,
88 | report_details = data.detail,
89 | report_type = data.report_type,
90 | report_src = src,
91 | report_id = reportId
92 | })
93 | end
94 |
95 | sendNotificationToStaff()
96 | end)
97 |
98 | RegisterNetEvent('qw_reports:server:deleteReport', function(data)
99 | local tempTable = {}
100 |
101 | for _, v in ipairs(reports) do
102 | if v.report_id == data.report_id then goto continue end
103 |
104 | tempTable[#tempTable + 1] = v
105 |
106 | ::continue::
107 | end
108 |
109 | reports = tempTable
110 | end)
111 |
112 | RegisterNetEvent('qw_reports:server:actionHandler', function(reportingPlayerId, action)
113 |
114 | if not reportingPlayerId or not action then return end
115 |
116 | local src = source
117 |
118 | if action == 'bring' then
119 | local staffMember = GetPlayerPed(src)
120 | local reportingPlayer = GetPlayerPed(reportingPlayerId)
121 | local staffCoords = GetEntityCoords(staffMember)
122 |
123 | SetEntityCoords(reportingPlayer, staffCoords.x, staffCoords.y, staffCoords.z, false, false, false, false)
124 | else
125 | local staffMember = GetPlayerPed(src)
126 | local reportingPlayer = GetPlayerPed(reportingPlayerId)
127 |
128 | local reportingPlayerCoords = GetEntityCoords(reportingPlayer)
129 |
130 | SetEntityCoords(staffMember, reportingPlayerCoords.x, reportingPlayerCoords.y, reportingPlayerCoords.z, false,
131 | false, false, false)
132 | end
133 |
134 | end)
135 |
136 | lib.callback.register('qw_reports:server:getCurrentReports', function()
137 | return reports
138 | end)
139 |
140 | lib.callback.register('qw_reports:server:checkPerms', function(source)
141 | local src = source
142 |
143 | if IsPlayerAceAllowed(src, Config.AcePermName) then
144 | return true
145 | else
146 | return false
147 | end
148 | end)
149 |
--------------------------------------------------------------------------------
/shared/config.lua:
--------------------------------------------------------------------------------
1 | Config = {}
2 |
3 | -- Permissions
4 |
5 | Config.AcePermName = 'command'
6 |
7 | -- Commands
8 |
9 | Config.CreateReportCommand = 'report'
10 | Config.ViewReportsMenu = 'view-reports'
11 |
12 | -- Report Types
13 |
14 | Config.ReportTypes = { -- Fill out your own custom report types
15 | "Player Report",
16 | "Bug Report",
17 | "Staff Report",
18 | "Other"
19 | }
20 |
21 | -- Webhook Stuff
22 |
23 | Config.Webhook = {
24 | enabled = false,
25 | webhookUrl = '', -- PUT YOUR WEBHOOK URL HERE
26 | webnhookImage = '' -- PUT YOUR WEBHOOK IMAGE HERE
27 | }
28 |
--------------------------------------------------------------------------------
/svelte-source/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 |
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 |
--------------------------------------------------------------------------------
/svelte-source/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | "recommendations": ["svelte.svelte-vscode"]
3 | }
4 |
--------------------------------------------------------------------------------
/svelte-source/README.md:
--------------------------------------------------------------------------------
1 | # Svelte + TS + Vite
2 |
3 | This template should help get you started developing with Svelte and TypeScript in Vite.
4 |
5 | ## Recommended IDE Setup
6 |
7 | [VS Code](https://code.visualstudio.com/) + [Svelte](https://marketplace.visualstudio.com/items?itemName=svelte.svelte-vscode).
8 |
9 | ## Need an official Svelte framework?
10 |
11 | Check out [SvelteKit](https://github.com/sveltejs/kit#readme), which is also powered by Vite. Deploy anywhere with its serverless-first approach and adapt to various platforms, with out of the box support for TypeScript, SCSS, and Less, and easily-added support for mdsvex, GraphQL, PostCSS, Tailwind CSS, and more.
12 |
13 | ## Technical considerations
14 |
15 | **Why use this over SvelteKit?**
16 |
17 | - It brings its own routing solution which might not be preferable for some users.
18 | - It is first and foremost a framework that just happens to use Vite under the hood, not a Vite app.
19 |
20 | This template contains as little as possible to get started with Vite + TypeScript + Svelte, while taking into account the developer experience with regards to HMR and intellisense. It demonstrates capabilities on par with the other `create-vite` templates and is a good starting point for beginners dipping their toes into a Vite + Svelte project.
21 |
22 | Should you later need the extended capabilities and extensibility provided by SvelteKit, the template has been structured similarly to SvelteKit so that it is easy to migrate.
23 |
24 | **Why `global.d.ts` instead of `compilerOptions.types` inside `jsconfig.json` or `tsconfig.json`?**
25 |
26 | Setting `compilerOptions.types` shuts out all other types not explicitly listed in the configuration. Using triple-slash references keeps the default TypeScript setting of accepting type information from the entire workspace, while also adding `svelte` and `vite/client` type information.
27 |
28 | **Why include `.vscode/extensions.json`?**
29 |
30 | Other templates indirectly recommend extensions via the README, but this file allows VS Code to prompt the user to install the recommended extension upon opening the project.
31 |
32 | **Why enable `allowJs` in the TS template?**
33 |
34 | While `allowJs: false` would indeed prevent the use of `.js` files in the project, it does not prevent the use of JavaScript syntax in `.svelte` files. In addition, it would force `checkJs: false`, bringing the worst of both worlds: not being able to guarantee the entire codebase is TypeScript, and also having worse typechecking for the existing JavaScript. In addition, there are valid use cases in which a mixed codebase may be relevant.
35 |
36 | **Why is HMR not preserving my local component state?**
37 |
38 | HMR state preservation comes with a number of gotchas! It has been disabled by default in both `svelte-hmr` and `@sveltejs/vite-plugin-svelte` due to its often surprising behavior. You can read the details [here](https://github.com/rixo/svelte-hmr#svelte-hmr).
39 |
40 | If you have state that's important to retain within a component, consider creating an external store which would not be replaced by HMR.
41 |
42 | ```ts
43 | // store.ts
44 | // An extremely simple external store
45 | import { writable } from 'svelte/store'
46 | export default writable(0)
47 | ```
48 |
--------------------------------------------------------------------------------
/svelte-source/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Vite + Svelte + TS
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/svelte-source/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "svelte-source",
3 | "private": true,
4 | "version": "0.0.0",
5 | "type": "module",
6 | "scripts": {
7 | "dev": "vite",
8 | "dev:game": "vite build --watch",
9 | "build": "vite build",
10 | "preview": "vite preview",
11 | "check": "svelte-check --tsconfig ./tsconfig.json"
12 | },
13 | "devDependencies": {
14 | "@sveltejs/vite-plugin-svelte": "^2.0.0",
15 | "@tsconfig/svelte": "^3.0.0",
16 | "autoprefixer": "^10.4.13",
17 | "postcss": "^8.4.21",
18 | "svelte": "^3.54.0",
19 | "svelte-check": "^2.10.0",
20 | "tailwindcss": "^3.2.4",
21 | "tslib": "^2.4.1",
22 | "typescript": "^4.9.3",
23 | "vite": "^4.0.0"
24 | },
25 | "dependencies": {
26 | "html-minifier": "^4.0.0"
27 | }
28 | }
--------------------------------------------------------------------------------
/svelte-source/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: 5.4
2 |
3 | specifiers:
4 | '@sveltejs/vite-plugin-svelte': ^2.0.0
5 | '@tsconfig/svelte': ^3.0.0
6 | autoprefixer: ^10.4.13
7 | html-minifier: ^4.0.0
8 | postcss: ^8.4.21
9 | svelte: ^3.54.0
10 | svelte-check: ^2.10.0
11 | tailwindcss: ^3.2.4
12 | tslib: ^2.4.1
13 | typescript: ^4.9.3
14 | vite: ^4.0.0
15 |
16 | dependencies:
17 | html-minifier: 4.0.0
18 |
19 | devDependencies:
20 | '@sveltejs/vite-plugin-svelte': 2.0.2_svelte@3.55.1+vite@4.0.4
21 | '@tsconfig/svelte': 3.0.0
22 | autoprefixer: 10.4.13_postcss@8.4.21
23 | postcss: 8.4.21
24 | svelte: 3.55.1
25 | svelte-check: 2.10.3_pehl75e5jsy22vp33udjja4soi
26 | tailwindcss: 3.2.4_postcss@8.4.21
27 | tslib: 2.4.1
28 | typescript: 4.9.4
29 | vite: 4.0.4
30 |
31 | packages:
32 |
33 | /@esbuild/android-arm/0.16.17:
34 | resolution: {integrity: sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==}
35 | engines: {node: '>=12'}
36 | cpu: [arm]
37 | os: [android]
38 | requiresBuild: true
39 | dev: true
40 | optional: true
41 |
42 | /@esbuild/android-arm64/0.16.17:
43 | resolution: {integrity: sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==}
44 | engines: {node: '>=12'}
45 | cpu: [arm64]
46 | os: [android]
47 | requiresBuild: true
48 | dev: true
49 | optional: true
50 |
51 | /@esbuild/android-x64/0.16.17:
52 | resolution: {integrity: sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==}
53 | engines: {node: '>=12'}
54 | cpu: [x64]
55 | os: [android]
56 | requiresBuild: true
57 | dev: true
58 | optional: true
59 |
60 | /@esbuild/darwin-arm64/0.16.17:
61 | resolution: {integrity: sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==}
62 | engines: {node: '>=12'}
63 | cpu: [arm64]
64 | os: [darwin]
65 | requiresBuild: true
66 | dev: true
67 | optional: true
68 |
69 | /@esbuild/darwin-x64/0.16.17:
70 | resolution: {integrity: sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==}
71 | engines: {node: '>=12'}
72 | cpu: [x64]
73 | os: [darwin]
74 | requiresBuild: true
75 | dev: true
76 | optional: true
77 |
78 | /@esbuild/freebsd-arm64/0.16.17:
79 | resolution: {integrity: sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==}
80 | engines: {node: '>=12'}
81 | cpu: [arm64]
82 | os: [freebsd]
83 | requiresBuild: true
84 | dev: true
85 | optional: true
86 |
87 | /@esbuild/freebsd-x64/0.16.17:
88 | resolution: {integrity: sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==}
89 | engines: {node: '>=12'}
90 | cpu: [x64]
91 | os: [freebsd]
92 | requiresBuild: true
93 | dev: true
94 | optional: true
95 |
96 | /@esbuild/linux-arm/0.16.17:
97 | resolution: {integrity: sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==}
98 | engines: {node: '>=12'}
99 | cpu: [arm]
100 | os: [linux]
101 | requiresBuild: true
102 | dev: true
103 | optional: true
104 |
105 | /@esbuild/linux-arm64/0.16.17:
106 | resolution: {integrity: sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==}
107 | engines: {node: '>=12'}
108 | cpu: [arm64]
109 | os: [linux]
110 | requiresBuild: true
111 | dev: true
112 | optional: true
113 |
114 | /@esbuild/linux-ia32/0.16.17:
115 | resolution: {integrity: sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==}
116 | engines: {node: '>=12'}
117 | cpu: [ia32]
118 | os: [linux]
119 | requiresBuild: true
120 | dev: true
121 | optional: true
122 |
123 | /@esbuild/linux-loong64/0.16.17:
124 | resolution: {integrity: sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==}
125 | engines: {node: '>=12'}
126 | cpu: [loong64]
127 | os: [linux]
128 | requiresBuild: true
129 | dev: true
130 | optional: true
131 |
132 | /@esbuild/linux-mips64el/0.16.17:
133 | resolution: {integrity: sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==}
134 | engines: {node: '>=12'}
135 | cpu: [mips64el]
136 | os: [linux]
137 | requiresBuild: true
138 | dev: true
139 | optional: true
140 |
141 | /@esbuild/linux-ppc64/0.16.17:
142 | resolution: {integrity: sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==}
143 | engines: {node: '>=12'}
144 | cpu: [ppc64]
145 | os: [linux]
146 | requiresBuild: true
147 | dev: true
148 | optional: true
149 |
150 | /@esbuild/linux-riscv64/0.16.17:
151 | resolution: {integrity: sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==}
152 | engines: {node: '>=12'}
153 | cpu: [riscv64]
154 | os: [linux]
155 | requiresBuild: true
156 | dev: true
157 | optional: true
158 |
159 | /@esbuild/linux-s390x/0.16.17:
160 | resolution: {integrity: sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==}
161 | engines: {node: '>=12'}
162 | cpu: [s390x]
163 | os: [linux]
164 | requiresBuild: true
165 | dev: true
166 | optional: true
167 |
168 | /@esbuild/linux-x64/0.16.17:
169 | resolution: {integrity: sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==}
170 | engines: {node: '>=12'}
171 | cpu: [x64]
172 | os: [linux]
173 | requiresBuild: true
174 | dev: true
175 | optional: true
176 |
177 | /@esbuild/netbsd-x64/0.16.17:
178 | resolution: {integrity: sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==}
179 | engines: {node: '>=12'}
180 | cpu: [x64]
181 | os: [netbsd]
182 | requiresBuild: true
183 | dev: true
184 | optional: true
185 |
186 | /@esbuild/openbsd-x64/0.16.17:
187 | resolution: {integrity: sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==}
188 | engines: {node: '>=12'}
189 | cpu: [x64]
190 | os: [openbsd]
191 | requiresBuild: true
192 | dev: true
193 | optional: true
194 |
195 | /@esbuild/sunos-x64/0.16.17:
196 | resolution: {integrity: sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==}
197 | engines: {node: '>=12'}
198 | cpu: [x64]
199 | os: [sunos]
200 | requiresBuild: true
201 | dev: true
202 | optional: true
203 |
204 | /@esbuild/win32-arm64/0.16.17:
205 | resolution: {integrity: sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==}
206 | engines: {node: '>=12'}
207 | cpu: [arm64]
208 | os: [win32]
209 | requiresBuild: true
210 | dev: true
211 | optional: true
212 |
213 | /@esbuild/win32-ia32/0.16.17:
214 | resolution: {integrity: sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==}
215 | engines: {node: '>=12'}
216 | cpu: [ia32]
217 | os: [win32]
218 | requiresBuild: true
219 | dev: true
220 | optional: true
221 |
222 | /@esbuild/win32-x64/0.16.17:
223 | resolution: {integrity: sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==}
224 | engines: {node: '>=12'}
225 | cpu: [x64]
226 | os: [win32]
227 | requiresBuild: true
228 | dev: true
229 | optional: true
230 |
231 | /@jridgewell/resolve-uri/3.1.0:
232 | resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==}
233 | engines: {node: '>=6.0.0'}
234 | dev: true
235 |
236 | /@jridgewell/sourcemap-codec/1.4.14:
237 | resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==}
238 | dev: true
239 |
240 | /@jridgewell/trace-mapping/0.3.17:
241 | resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==}
242 | dependencies:
243 | '@jridgewell/resolve-uri': 3.1.0
244 | '@jridgewell/sourcemap-codec': 1.4.14
245 | dev: true
246 |
247 | /@nodelib/fs.scandir/2.1.5:
248 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
249 | engines: {node: '>= 8'}
250 | dependencies:
251 | '@nodelib/fs.stat': 2.0.5
252 | run-parallel: 1.2.0
253 | dev: true
254 |
255 | /@nodelib/fs.stat/2.0.5:
256 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
257 | engines: {node: '>= 8'}
258 | dev: true
259 |
260 | /@nodelib/fs.walk/1.2.8:
261 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
262 | engines: {node: '>= 8'}
263 | dependencies:
264 | '@nodelib/fs.scandir': 2.1.5
265 | fastq: 1.15.0
266 | dev: true
267 |
268 | /@sveltejs/vite-plugin-svelte/2.0.2_svelte@3.55.1+vite@4.0.4:
269 | resolution: {integrity: sha512-xCEan0/NNpQuL0l5aS42FjwQ6wwskdxC3pW1OeFtEKNZwRg7Evro9lac9HesGP6TdFsTv2xMes5ASQVKbCacxg==}
270 | engines: {node: ^14.18.0 || >= 16}
271 | peerDependencies:
272 | svelte: ^3.54.0
273 | vite: ^4.0.0
274 | dependencies:
275 | debug: 4.3.4
276 | deepmerge: 4.2.2
277 | kleur: 4.1.5
278 | magic-string: 0.27.0
279 | svelte: 3.55.1
280 | svelte-hmr: 0.15.1_svelte@3.55.1
281 | vite: 4.0.4
282 | vitefu: 0.2.4_vite@4.0.4
283 | transitivePeerDependencies:
284 | - supports-color
285 | dev: true
286 |
287 | /@tsconfig/svelte/3.0.0:
288 | resolution: {integrity: sha512-pYrtLtOwku/7r1i9AMONsJMVYAtk3hzOfiGNekhtq5tYBGA7unMve8RvUclKLMT3PrihvJqUmzsRGh0RP84hKg==}
289 | dev: true
290 |
291 | /@types/node/18.11.18:
292 | resolution: {integrity: sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==}
293 | dev: true
294 |
295 | /@types/pug/2.0.6:
296 | resolution: {integrity: sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==}
297 | dev: true
298 |
299 | /@types/sass/1.43.1:
300 | resolution: {integrity: sha512-BPdoIt1lfJ6B7rw35ncdwBZrAssjcwzI5LByIrYs+tpXlj/CAkuVdRsgZDdP4lq5EjyWzwxZCqAoFyHKFwp32g==}
301 | dependencies:
302 | '@types/node': 18.11.18
303 | dev: true
304 |
305 | /acorn-node/1.8.2:
306 | resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==}
307 | dependencies:
308 | acorn: 7.4.1
309 | acorn-walk: 7.2.0
310 | xtend: 4.0.2
311 | dev: true
312 |
313 | /acorn-walk/7.2.0:
314 | resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==}
315 | engines: {node: '>=0.4.0'}
316 | dev: true
317 |
318 | /acorn/7.4.1:
319 | resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==}
320 | engines: {node: '>=0.4.0'}
321 | hasBin: true
322 | dev: true
323 |
324 | /anymatch/3.1.3:
325 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
326 | engines: {node: '>= 8'}
327 | dependencies:
328 | normalize-path: 3.0.0
329 | picomatch: 2.3.1
330 | dev: true
331 |
332 | /arg/5.0.2:
333 | resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
334 | dev: true
335 |
336 | /autoprefixer/10.4.13_postcss@8.4.21:
337 | resolution: {integrity: sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==}
338 | engines: {node: ^10 || ^12 || >=14}
339 | hasBin: true
340 | peerDependencies:
341 | postcss: ^8.1.0
342 | dependencies:
343 | browserslist: 4.21.4
344 | caniuse-lite: 1.0.30001446
345 | fraction.js: 4.2.0
346 | normalize-range: 0.1.2
347 | picocolors: 1.0.0
348 | postcss: 8.4.21
349 | postcss-value-parser: 4.2.0
350 | dev: true
351 |
352 | /balanced-match/1.0.2:
353 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
354 | dev: true
355 |
356 | /binary-extensions/2.2.0:
357 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
358 | engines: {node: '>=8'}
359 | dev: true
360 |
361 | /brace-expansion/1.1.11:
362 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
363 | dependencies:
364 | balanced-match: 1.0.2
365 | concat-map: 0.0.1
366 | dev: true
367 |
368 | /braces/3.0.2:
369 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
370 | engines: {node: '>=8'}
371 | dependencies:
372 | fill-range: 7.0.1
373 | dev: true
374 |
375 | /browserslist/4.21.4:
376 | resolution: {integrity: sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==}
377 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
378 | hasBin: true
379 | dependencies:
380 | caniuse-lite: 1.0.30001446
381 | electron-to-chromium: 1.4.284
382 | node-releases: 2.0.8
383 | update-browserslist-db: 1.0.10_browserslist@4.21.4
384 | dev: true
385 |
386 | /buffer-crc32/0.2.13:
387 | resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==}
388 | dev: true
389 |
390 | /callsites/3.1.0:
391 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
392 | engines: {node: '>=6'}
393 | dev: true
394 |
395 | /camel-case/3.0.0:
396 | resolution: {integrity: sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==}
397 | dependencies:
398 | no-case: 2.3.2
399 | upper-case: 1.1.3
400 | dev: false
401 |
402 | /camelcase-css/2.0.1:
403 | resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
404 | engines: {node: '>= 6'}
405 | dev: true
406 |
407 | /caniuse-lite/1.0.30001446:
408 | resolution: {integrity: sha512-fEoga4PrImGcwUUGEol/PoFCSBnSkA9drgdkxXkJLsUBOnJ8rs3zDv6ApqYXGQFOyMPsjh79naWhF4DAxbF8rw==}
409 | dev: true
410 |
411 | /chokidar/3.5.3:
412 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
413 | engines: {node: '>= 8.10.0'}
414 | dependencies:
415 | anymatch: 3.1.3
416 | braces: 3.0.2
417 | glob-parent: 5.1.2
418 | is-binary-path: 2.1.0
419 | is-glob: 4.0.3
420 | normalize-path: 3.0.0
421 | readdirp: 3.6.0
422 | optionalDependencies:
423 | fsevents: 2.3.2
424 | dev: true
425 |
426 | /clean-css/4.2.4:
427 | resolution: {integrity: sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==}
428 | engines: {node: '>= 4.0'}
429 | dependencies:
430 | source-map: 0.6.1
431 | dev: false
432 |
433 | /color-name/1.1.4:
434 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
435 | dev: true
436 |
437 | /commander/2.20.3:
438 | resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
439 | dev: false
440 |
441 | /concat-map/0.0.1:
442 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
443 | dev: true
444 |
445 | /cssesc/3.0.0:
446 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
447 | engines: {node: '>=4'}
448 | hasBin: true
449 | dev: true
450 |
451 | /debug/4.3.4:
452 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
453 | engines: {node: '>=6.0'}
454 | peerDependencies:
455 | supports-color: '*'
456 | peerDependenciesMeta:
457 | supports-color:
458 | optional: true
459 | dependencies:
460 | ms: 2.1.2
461 | dev: true
462 |
463 | /deepmerge/4.2.2:
464 | resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==}
465 | engines: {node: '>=0.10.0'}
466 | dev: true
467 |
468 | /defined/1.0.1:
469 | resolution: {integrity: sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==}
470 | dev: true
471 |
472 | /detect-indent/6.1.0:
473 | resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==}
474 | engines: {node: '>=8'}
475 | dev: true
476 |
477 | /detective/5.2.1:
478 | resolution: {integrity: sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==}
479 | engines: {node: '>=0.8.0'}
480 | hasBin: true
481 | dependencies:
482 | acorn-node: 1.8.2
483 | defined: 1.0.1
484 | minimist: 1.2.7
485 | dev: true
486 |
487 | /didyoumean/1.2.2:
488 | resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
489 | dev: true
490 |
491 | /dlv/1.1.3:
492 | resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
493 | dev: true
494 |
495 | /electron-to-chromium/1.4.284:
496 | resolution: {integrity: sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==}
497 | dev: true
498 |
499 | /es6-promise/3.3.1:
500 | resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==}
501 | dev: true
502 |
503 | /esbuild/0.16.17:
504 | resolution: {integrity: sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==}
505 | engines: {node: '>=12'}
506 | hasBin: true
507 | requiresBuild: true
508 | optionalDependencies:
509 | '@esbuild/android-arm': 0.16.17
510 | '@esbuild/android-arm64': 0.16.17
511 | '@esbuild/android-x64': 0.16.17
512 | '@esbuild/darwin-arm64': 0.16.17
513 | '@esbuild/darwin-x64': 0.16.17
514 | '@esbuild/freebsd-arm64': 0.16.17
515 | '@esbuild/freebsd-x64': 0.16.17
516 | '@esbuild/linux-arm': 0.16.17
517 | '@esbuild/linux-arm64': 0.16.17
518 | '@esbuild/linux-ia32': 0.16.17
519 | '@esbuild/linux-loong64': 0.16.17
520 | '@esbuild/linux-mips64el': 0.16.17
521 | '@esbuild/linux-ppc64': 0.16.17
522 | '@esbuild/linux-riscv64': 0.16.17
523 | '@esbuild/linux-s390x': 0.16.17
524 | '@esbuild/linux-x64': 0.16.17
525 | '@esbuild/netbsd-x64': 0.16.17
526 | '@esbuild/openbsd-x64': 0.16.17
527 | '@esbuild/sunos-x64': 0.16.17
528 | '@esbuild/win32-arm64': 0.16.17
529 | '@esbuild/win32-ia32': 0.16.17
530 | '@esbuild/win32-x64': 0.16.17
531 | dev: true
532 |
533 | /escalade/3.1.1:
534 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
535 | engines: {node: '>=6'}
536 | dev: true
537 |
538 | /fast-glob/3.2.12:
539 | resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==}
540 | engines: {node: '>=8.6.0'}
541 | dependencies:
542 | '@nodelib/fs.stat': 2.0.5
543 | '@nodelib/fs.walk': 1.2.8
544 | glob-parent: 5.1.2
545 | merge2: 1.4.1
546 | micromatch: 4.0.5
547 | dev: true
548 |
549 | /fastq/1.15.0:
550 | resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==}
551 | dependencies:
552 | reusify: 1.0.4
553 | dev: true
554 |
555 | /fill-range/7.0.1:
556 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
557 | engines: {node: '>=8'}
558 | dependencies:
559 | to-regex-range: 5.0.1
560 | dev: true
561 |
562 | /fraction.js/4.2.0:
563 | resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==}
564 | dev: true
565 |
566 | /fs.realpath/1.0.0:
567 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
568 | dev: true
569 |
570 | /fsevents/2.3.2:
571 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
572 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
573 | os: [darwin]
574 | requiresBuild: true
575 | dev: true
576 | optional: true
577 |
578 | /function-bind/1.1.1:
579 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
580 | dev: true
581 |
582 | /glob-parent/5.1.2:
583 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
584 | engines: {node: '>= 6'}
585 | dependencies:
586 | is-glob: 4.0.3
587 | dev: true
588 |
589 | /glob-parent/6.0.2:
590 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
591 | engines: {node: '>=10.13.0'}
592 | dependencies:
593 | is-glob: 4.0.3
594 | dev: true
595 |
596 | /glob/7.2.3:
597 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
598 | dependencies:
599 | fs.realpath: 1.0.0
600 | inflight: 1.0.6
601 | inherits: 2.0.4
602 | minimatch: 3.1.2
603 | once: 1.4.0
604 | path-is-absolute: 1.0.1
605 | dev: true
606 |
607 | /graceful-fs/4.2.10:
608 | resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==}
609 | dev: true
610 |
611 | /has/1.0.3:
612 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
613 | engines: {node: '>= 0.4.0'}
614 | dependencies:
615 | function-bind: 1.1.1
616 | dev: true
617 |
618 | /he/1.2.0:
619 | resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
620 | hasBin: true
621 | dev: false
622 |
623 | /html-minifier/4.0.0:
624 | resolution: {integrity: sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig==}
625 | engines: {node: '>=6'}
626 | hasBin: true
627 | dependencies:
628 | camel-case: 3.0.0
629 | clean-css: 4.2.4
630 | commander: 2.20.3
631 | he: 1.2.0
632 | param-case: 2.1.1
633 | relateurl: 0.2.7
634 | uglify-js: 3.17.4
635 | dev: false
636 |
637 | /import-fresh/3.3.0:
638 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
639 | engines: {node: '>=6'}
640 | dependencies:
641 | parent-module: 1.0.1
642 | resolve-from: 4.0.0
643 | dev: true
644 |
645 | /inflight/1.0.6:
646 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
647 | dependencies:
648 | once: 1.4.0
649 | wrappy: 1.0.2
650 | dev: true
651 |
652 | /inherits/2.0.4:
653 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
654 | dev: true
655 |
656 | /is-binary-path/2.1.0:
657 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
658 | engines: {node: '>=8'}
659 | dependencies:
660 | binary-extensions: 2.2.0
661 | dev: true
662 |
663 | /is-core-module/2.11.0:
664 | resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==}
665 | dependencies:
666 | has: 1.0.3
667 | dev: true
668 |
669 | /is-extglob/2.1.1:
670 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
671 | engines: {node: '>=0.10.0'}
672 | dev: true
673 |
674 | /is-glob/4.0.3:
675 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
676 | engines: {node: '>=0.10.0'}
677 | dependencies:
678 | is-extglob: 2.1.1
679 | dev: true
680 |
681 | /is-number/7.0.0:
682 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
683 | engines: {node: '>=0.12.0'}
684 | dev: true
685 |
686 | /kleur/4.1.5:
687 | resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
688 | engines: {node: '>=6'}
689 | dev: true
690 |
691 | /lilconfig/2.0.6:
692 | resolution: {integrity: sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==}
693 | engines: {node: '>=10'}
694 | dev: true
695 |
696 | /lower-case/1.1.4:
697 | resolution: {integrity: sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==}
698 | dev: false
699 |
700 | /magic-string/0.25.9:
701 | resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==}
702 | dependencies:
703 | sourcemap-codec: 1.4.8
704 | dev: true
705 |
706 | /magic-string/0.27.0:
707 | resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==}
708 | engines: {node: '>=12'}
709 | dependencies:
710 | '@jridgewell/sourcemap-codec': 1.4.14
711 | dev: true
712 |
713 | /merge2/1.4.1:
714 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
715 | engines: {node: '>= 8'}
716 | dev: true
717 |
718 | /micromatch/4.0.5:
719 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
720 | engines: {node: '>=8.6'}
721 | dependencies:
722 | braces: 3.0.2
723 | picomatch: 2.3.1
724 | dev: true
725 |
726 | /min-indent/1.0.1:
727 | resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
728 | engines: {node: '>=4'}
729 | dev: true
730 |
731 | /minimatch/3.1.2:
732 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
733 | dependencies:
734 | brace-expansion: 1.1.11
735 | dev: true
736 |
737 | /minimist/1.2.7:
738 | resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==}
739 | dev: true
740 |
741 | /mkdirp/0.5.6:
742 | resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
743 | hasBin: true
744 | dependencies:
745 | minimist: 1.2.7
746 | dev: true
747 |
748 | /mri/1.2.0:
749 | resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
750 | engines: {node: '>=4'}
751 | dev: true
752 |
753 | /ms/2.1.2:
754 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
755 | dev: true
756 |
757 | /nanoid/3.3.4:
758 | resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==}
759 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
760 | hasBin: true
761 | dev: true
762 |
763 | /no-case/2.3.2:
764 | resolution: {integrity: sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==}
765 | dependencies:
766 | lower-case: 1.1.4
767 | dev: false
768 |
769 | /node-releases/2.0.8:
770 | resolution: {integrity: sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==}
771 | dev: true
772 |
773 | /normalize-path/3.0.0:
774 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
775 | engines: {node: '>=0.10.0'}
776 | dev: true
777 |
778 | /normalize-range/0.1.2:
779 | resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
780 | engines: {node: '>=0.10.0'}
781 | dev: true
782 |
783 | /object-hash/3.0.0:
784 | resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
785 | engines: {node: '>= 6'}
786 | dev: true
787 |
788 | /once/1.4.0:
789 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
790 | dependencies:
791 | wrappy: 1.0.2
792 | dev: true
793 |
794 | /param-case/2.1.1:
795 | resolution: {integrity: sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==}
796 | dependencies:
797 | no-case: 2.3.2
798 | dev: false
799 |
800 | /parent-module/1.0.1:
801 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
802 | engines: {node: '>=6'}
803 | dependencies:
804 | callsites: 3.1.0
805 | dev: true
806 |
807 | /path-is-absolute/1.0.1:
808 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
809 | engines: {node: '>=0.10.0'}
810 | dev: true
811 |
812 | /path-parse/1.0.7:
813 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
814 | dev: true
815 |
816 | /picocolors/1.0.0:
817 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
818 | dev: true
819 |
820 | /picomatch/2.3.1:
821 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
822 | engines: {node: '>=8.6'}
823 | dev: true
824 |
825 | /pify/2.3.0:
826 | resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
827 | engines: {node: '>=0.10.0'}
828 | dev: true
829 |
830 | /postcss-import/14.1.0_postcss@8.4.21:
831 | resolution: {integrity: sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==}
832 | engines: {node: '>=10.0.0'}
833 | peerDependencies:
834 | postcss: ^8.0.0
835 | dependencies:
836 | postcss: 8.4.21
837 | postcss-value-parser: 4.2.0
838 | read-cache: 1.0.0
839 | resolve: 1.22.1
840 | dev: true
841 |
842 | /postcss-js/4.0.0_postcss@8.4.21:
843 | resolution: {integrity: sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==}
844 | engines: {node: ^12 || ^14 || >= 16}
845 | peerDependencies:
846 | postcss: ^8.3.3
847 | dependencies:
848 | camelcase-css: 2.0.1
849 | postcss: 8.4.21
850 | dev: true
851 |
852 | /postcss-load-config/3.1.4_postcss@8.4.21:
853 | resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==}
854 | engines: {node: '>= 10'}
855 | peerDependencies:
856 | postcss: '>=8.0.9'
857 | ts-node: '>=9.0.0'
858 | peerDependenciesMeta:
859 | postcss:
860 | optional: true
861 | ts-node:
862 | optional: true
863 | dependencies:
864 | lilconfig: 2.0.6
865 | postcss: 8.4.21
866 | yaml: 1.10.2
867 | dev: true
868 |
869 | /postcss-nested/6.0.0_postcss@8.4.21:
870 | resolution: {integrity: sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==}
871 | engines: {node: '>=12.0'}
872 | peerDependencies:
873 | postcss: ^8.2.14
874 | dependencies:
875 | postcss: 8.4.21
876 | postcss-selector-parser: 6.0.11
877 | dev: true
878 |
879 | /postcss-selector-parser/6.0.11:
880 | resolution: {integrity: sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==}
881 | engines: {node: '>=4'}
882 | dependencies:
883 | cssesc: 3.0.0
884 | util-deprecate: 1.0.2
885 | dev: true
886 |
887 | /postcss-value-parser/4.2.0:
888 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
889 | dev: true
890 |
891 | /postcss/8.4.21:
892 | resolution: {integrity: sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==}
893 | engines: {node: ^10 || ^12 || >=14}
894 | dependencies:
895 | nanoid: 3.3.4
896 | picocolors: 1.0.0
897 | source-map-js: 1.0.2
898 | dev: true
899 |
900 | /queue-microtask/1.2.3:
901 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
902 | dev: true
903 |
904 | /quick-lru/5.1.1:
905 | resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==}
906 | engines: {node: '>=10'}
907 | dev: true
908 |
909 | /read-cache/1.0.0:
910 | resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
911 | dependencies:
912 | pify: 2.3.0
913 | dev: true
914 |
915 | /readdirp/3.6.0:
916 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
917 | engines: {node: '>=8.10.0'}
918 | dependencies:
919 | picomatch: 2.3.1
920 | dev: true
921 |
922 | /relateurl/0.2.7:
923 | resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==}
924 | engines: {node: '>= 0.10'}
925 | dev: false
926 |
927 | /resolve-from/4.0.0:
928 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
929 | engines: {node: '>=4'}
930 | dev: true
931 |
932 | /resolve/1.22.1:
933 | resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==}
934 | hasBin: true
935 | dependencies:
936 | is-core-module: 2.11.0
937 | path-parse: 1.0.7
938 | supports-preserve-symlinks-flag: 1.0.0
939 | dev: true
940 |
941 | /reusify/1.0.4:
942 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
943 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
944 | dev: true
945 |
946 | /rimraf/2.7.1:
947 | resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==}
948 | hasBin: true
949 | dependencies:
950 | glob: 7.2.3
951 | dev: true
952 |
953 | /rollup/3.10.1:
954 | resolution: {integrity: sha512-3Er+yel3bZbZX1g2kjVM+FW+RUWDxbG87fcqFM5/9HbPCTpbVp6JOLn7jlxnNlbu7s/N/uDA4EV/91E2gWnxzw==}
955 | engines: {node: '>=14.18.0', npm: '>=8.0.0'}
956 | hasBin: true
957 | optionalDependencies:
958 | fsevents: 2.3.2
959 | dev: true
960 |
961 | /run-parallel/1.2.0:
962 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
963 | dependencies:
964 | queue-microtask: 1.2.3
965 | dev: true
966 |
967 | /sade/1.8.1:
968 | resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==}
969 | engines: {node: '>=6'}
970 | dependencies:
971 | mri: 1.2.0
972 | dev: true
973 |
974 | /sander/0.5.1:
975 | resolution: {integrity: sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==}
976 | dependencies:
977 | es6-promise: 3.3.1
978 | graceful-fs: 4.2.10
979 | mkdirp: 0.5.6
980 | rimraf: 2.7.1
981 | dev: true
982 |
983 | /sorcery/0.10.0:
984 | resolution: {integrity: sha512-R5ocFmKZQFfSTstfOtHjJuAwbpGyf9qjQa1egyhvXSbM7emjrtLXtGdZsDJDABC85YBfVvrOiGWKSYXPKdvP1g==}
985 | hasBin: true
986 | dependencies:
987 | buffer-crc32: 0.2.13
988 | minimist: 1.2.7
989 | sander: 0.5.1
990 | sourcemap-codec: 1.4.8
991 | dev: true
992 |
993 | /source-map-js/1.0.2:
994 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
995 | engines: {node: '>=0.10.0'}
996 | dev: true
997 |
998 | /source-map/0.6.1:
999 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
1000 | engines: {node: '>=0.10.0'}
1001 | dev: false
1002 |
1003 | /sourcemap-codec/1.4.8:
1004 | resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
1005 | deprecated: Please use @jridgewell/sourcemap-codec instead
1006 | dev: true
1007 |
1008 | /strip-indent/3.0.0:
1009 | resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
1010 | engines: {node: '>=8'}
1011 | dependencies:
1012 | min-indent: 1.0.1
1013 | dev: true
1014 |
1015 | /supports-preserve-symlinks-flag/1.0.0:
1016 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
1017 | engines: {node: '>= 0.4'}
1018 | dev: true
1019 |
1020 | /svelte-check/2.10.3_pehl75e5jsy22vp33udjja4soi:
1021 | resolution: {integrity: sha512-Nt1aWHTOKFReBpmJ1vPug0aGysqPwJh2seM1OvICfM2oeyaA62mOiy5EvkXhltGfhCcIQcq2LoE0l1CwcWPjlw==}
1022 | hasBin: true
1023 | peerDependencies:
1024 | svelte: ^3.24.0
1025 | dependencies:
1026 | '@jridgewell/trace-mapping': 0.3.17
1027 | chokidar: 3.5.3
1028 | fast-glob: 3.2.12
1029 | import-fresh: 3.3.0
1030 | picocolors: 1.0.0
1031 | sade: 1.8.1
1032 | svelte: 3.55.1
1033 | svelte-preprocess: 4.10.7_oifjsu5oar4lzyaoppb2hxramu
1034 | typescript: 4.9.4
1035 | transitivePeerDependencies:
1036 | - '@babel/core'
1037 | - coffeescript
1038 | - less
1039 | - node-sass
1040 | - postcss
1041 | - postcss-load-config
1042 | - pug
1043 | - sass
1044 | - stylus
1045 | - sugarss
1046 | dev: true
1047 |
1048 | /svelte-hmr/0.15.1_svelte@3.55.1:
1049 | resolution: {integrity: sha512-BiKB4RZ8YSwRKCNVdNxK/GfY+r4Kjgp9jCLEy0DuqAKfmQtpL38cQK3afdpjw4sqSs4PLi3jIPJIFp259NkZtA==}
1050 | engines: {node: ^12.20 || ^14.13.1 || >= 16}
1051 | peerDependencies:
1052 | svelte: '>=3.19.0'
1053 | dependencies:
1054 | svelte: 3.55.1
1055 | dev: true
1056 |
1057 | /svelte-preprocess/4.10.7_oifjsu5oar4lzyaoppb2hxramu:
1058 | resolution: {integrity: sha512-sNPBnqYD6FnmdBrUmBCaqS00RyCsCpj2BG58A1JBswNF7b0OKviwxqVrOL/CKyJrLSClrSeqQv5BXNg2RUbPOw==}
1059 | engines: {node: '>= 9.11.2'}
1060 | requiresBuild: true
1061 | peerDependencies:
1062 | '@babel/core': ^7.10.2
1063 | coffeescript: ^2.5.1
1064 | less: ^3.11.3 || ^4.0.0
1065 | node-sass: '*'
1066 | postcss: ^7 || ^8
1067 | postcss-load-config: ^2.1.0 || ^3.0.0 || ^4.0.0
1068 | pug: ^3.0.0
1069 | sass: ^1.26.8
1070 | stylus: ^0.55.0
1071 | sugarss: ^2.0.0
1072 | svelte: ^3.23.0
1073 | typescript: ^3.9.5 || ^4.0.0
1074 | peerDependenciesMeta:
1075 | '@babel/core':
1076 | optional: true
1077 | coffeescript:
1078 | optional: true
1079 | less:
1080 | optional: true
1081 | node-sass:
1082 | optional: true
1083 | postcss:
1084 | optional: true
1085 | postcss-load-config:
1086 | optional: true
1087 | pug:
1088 | optional: true
1089 | sass:
1090 | optional: true
1091 | stylus:
1092 | optional: true
1093 | sugarss:
1094 | optional: true
1095 | typescript:
1096 | optional: true
1097 | dependencies:
1098 | '@types/pug': 2.0.6
1099 | '@types/sass': 1.43.1
1100 | detect-indent: 6.1.0
1101 | magic-string: 0.25.9
1102 | postcss: 8.4.21
1103 | sorcery: 0.10.0
1104 | strip-indent: 3.0.0
1105 | svelte: 3.55.1
1106 | typescript: 4.9.4
1107 | dev: true
1108 |
1109 | /svelte/3.55.1:
1110 | resolution: {integrity: sha512-S+87/P0Ve67HxKkEV23iCdAh/SX1xiSfjF1HOglno/YTbSTW7RniICMCofWGdJJbdjw3S+0PfFb1JtGfTXE0oQ==}
1111 | engines: {node: '>= 8'}
1112 | dev: true
1113 |
1114 | /tailwindcss/3.2.4_postcss@8.4.21:
1115 | resolution: {integrity: sha512-AhwtHCKMtR71JgeYDaswmZXhPcW9iuI9Sp2LvZPo9upDZ7231ZJ7eA9RaURbhpXGVlrjX4cFNlB4ieTetEb7hQ==}
1116 | engines: {node: '>=12.13.0'}
1117 | hasBin: true
1118 | peerDependencies:
1119 | postcss: ^8.0.9
1120 | dependencies:
1121 | arg: 5.0.2
1122 | chokidar: 3.5.3
1123 | color-name: 1.1.4
1124 | detective: 5.2.1
1125 | didyoumean: 1.2.2
1126 | dlv: 1.1.3
1127 | fast-glob: 3.2.12
1128 | glob-parent: 6.0.2
1129 | is-glob: 4.0.3
1130 | lilconfig: 2.0.6
1131 | micromatch: 4.0.5
1132 | normalize-path: 3.0.0
1133 | object-hash: 3.0.0
1134 | picocolors: 1.0.0
1135 | postcss: 8.4.21
1136 | postcss-import: 14.1.0_postcss@8.4.21
1137 | postcss-js: 4.0.0_postcss@8.4.21
1138 | postcss-load-config: 3.1.4_postcss@8.4.21
1139 | postcss-nested: 6.0.0_postcss@8.4.21
1140 | postcss-selector-parser: 6.0.11
1141 | postcss-value-parser: 4.2.0
1142 | quick-lru: 5.1.1
1143 | resolve: 1.22.1
1144 | transitivePeerDependencies:
1145 | - ts-node
1146 | dev: true
1147 |
1148 | /to-regex-range/5.0.1:
1149 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
1150 | engines: {node: '>=8.0'}
1151 | dependencies:
1152 | is-number: 7.0.0
1153 | dev: true
1154 |
1155 | /tslib/2.4.1:
1156 | resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==}
1157 | dev: true
1158 |
1159 | /typescript/4.9.4:
1160 | resolution: {integrity: sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==}
1161 | engines: {node: '>=4.2.0'}
1162 | hasBin: true
1163 | dev: true
1164 |
1165 | /uglify-js/3.17.4:
1166 | resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==}
1167 | engines: {node: '>=0.8.0'}
1168 | hasBin: true
1169 | dev: false
1170 |
1171 | /update-browserslist-db/1.0.10_browserslist@4.21.4:
1172 | resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==}
1173 | hasBin: true
1174 | peerDependencies:
1175 | browserslist: '>= 4.21.0'
1176 | dependencies:
1177 | browserslist: 4.21.4
1178 | escalade: 3.1.1
1179 | picocolors: 1.0.0
1180 | dev: true
1181 |
1182 | /upper-case/1.1.3:
1183 | resolution: {integrity: sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==}
1184 | dev: false
1185 |
1186 | /util-deprecate/1.0.2:
1187 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
1188 | dev: true
1189 |
1190 | /vite/4.0.4:
1191 | resolution: {integrity: sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==}
1192 | engines: {node: ^14.18.0 || >=16.0.0}
1193 | hasBin: true
1194 | peerDependencies:
1195 | '@types/node': '>= 14'
1196 | less: '*'
1197 | sass: '*'
1198 | stylus: '*'
1199 | sugarss: '*'
1200 | terser: ^5.4.0
1201 | peerDependenciesMeta:
1202 | '@types/node':
1203 | optional: true
1204 | less:
1205 | optional: true
1206 | sass:
1207 | optional: true
1208 | stylus:
1209 | optional: true
1210 | sugarss:
1211 | optional: true
1212 | terser:
1213 | optional: true
1214 | dependencies:
1215 | esbuild: 0.16.17
1216 | postcss: 8.4.21
1217 | resolve: 1.22.1
1218 | rollup: 3.10.1
1219 | optionalDependencies:
1220 | fsevents: 2.3.2
1221 | dev: true
1222 |
1223 | /vitefu/0.2.4_vite@4.0.4:
1224 | resolution: {integrity: sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==}
1225 | peerDependencies:
1226 | vite: ^3.0.0 || ^4.0.0
1227 | peerDependenciesMeta:
1228 | vite:
1229 | optional: true
1230 | dependencies:
1231 | vite: 4.0.4
1232 | dev: true
1233 |
1234 | /wrappy/1.0.2:
1235 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
1236 | dev: true
1237 |
1238 | /xtend/4.0.2:
1239 | resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
1240 | engines: {node: '>=0.4'}
1241 | dev: true
1242 |
1243 | /yaml/1.10.2:
1244 | resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
1245 | engines: {node: '>= 6'}
1246 | dev: true
1247 |
--------------------------------------------------------------------------------
/svelte-source/postcss.config.cjs:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | }
7 |
--------------------------------------------------------------------------------
/svelte-source/src/App.svelte:
--------------------------------------------------------------------------------
1 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/svelte-source/src/components/AdminReports.svelte:
--------------------------------------------------------------------------------
1 |
74 |
75 |
80 |
83 |
Active Reports
84 |
85 | {reports.length} total {reports.length > 1 || reports.length == 0
86 | ? "reports"
87 | : "report"}
88 |
89 |
90 |
91 | {#each reports as report}
92 |
96 |
97 |
98 |
{report.report_title}
99 |
100 | {report.report_type} - Player ID: {report.report_src}
101 |
102 |
103 |
106 | {report.report_id}
107 |
108 |
109 |
110 | {report.report_details}
111 |
112 |
113 |
114 |
120 |
121 |
122 |
128 |
134 |
141 |
142 |
143 |
144 | {/each}
145 |
146 |
147 |
148 |
159 |
--------------------------------------------------------------------------------
/svelte-source/src/components/Chat.svelte:
--------------------------------------------------------------------------------
1 |
21 |
22 |
27 |
30 |
Report Chat
31 |
32 |
33 | {#each chatMessages as message}
34 |
35 |
38 |
{message.sender}
41 |
{message.text}
42 |
43 |
44 | {/each}
45 |
46 |
47 |
65 |
66 |
67 |
68 |
79 |
--------------------------------------------------------------------------------
/svelte-source/src/components/NewReport.svelte:
--------------------------------------------------------------------------------
1 |
52 |
53 |
58 |
59 |
New Report
60 |
61 |
129 |
130 |
131 |
142 |
--------------------------------------------------------------------------------
/svelte-source/src/hooks/useFetchNui.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * @param eventName - The endpoint eventname to target
3 | * @param data - Data you wish to send in the NUI Callback
4 | *
5 | * @return returnData - A promise for the data sent back by the NuiCallbacks CB argument
6 | */
7 |
8 | export async function useFetchNui(
9 | eventName: string,
10 | data: unknown = {}
11 | ): Promise {
12 | const options = {
13 | method: "post",
14 | headers: {
15 | "Content-Type": "application/json; charset=UTF-8",
16 | },
17 | body: JSON.stringify(data),
18 | };
19 |
20 | const resourceName = (window as any).GetParentResourceName
21 | ? (window as any).GetParentResourceName()
22 | : "nui-frame-app";
23 |
24 | const resp = await fetch(`https://${resourceName}/${eventName}`, options);
25 |
26 | return await resp.json();
27 | }
28 |
--------------------------------------------------------------------------------
/svelte-source/src/hooks/useNuiEvent.ts:
--------------------------------------------------------------------------------
1 | import { onMount, onDestroy } from "svelte";
2 |
3 | interface NuiMessage {
4 | action: string;
5 | data: T;
6 | }
7 |
8 | /**
9 | * A function that manage events listeners for receiving data from the client scripts
10 | * @param action The specific `action` that should be listened for.
11 | * @param handler The callback function that will handle data relayed by this function
12 | *
13 | * @example
14 | * useNuiEvent<{visibility: true, wasVisible: 'something'}>('setVisible', (data) => {
15 | * // whatever logic you want
16 | * })
17 | *
18 | **/
19 |
20 | export function useNuiEvent(
21 | action: string,
22 | handler: (data: T) => void
23 | ) {
24 | const eventListener = (event: MessageEvent>) => {
25 | const { action: eventAction, data } = event.data;
26 |
27 | eventAction === action && handler(data);
28 | };
29 | onMount(() => window.addEventListener("message", eventListener));
30 | onDestroy(() => window.removeEventListener("message", eventListener));
31 | }
--------------------------------------------------------------------------------
/svelte-source/src/main.ts:
--------------------------------------------------------------------------------
1 | import App from './App.svelte'
2 | import './styles/globals.css'
3 |
4 | const app = new App({
5 | target: document.getElementById('app'),
6 | })
7 |
8 | export default app
9 |
--------------------------------------------------------------------------------
/svelte-source/src/providers/VisibilityProvider.svelte:
--------------------------------------------------------------------------------
1 |
34 |
35 |
36 | {#if isVisible}
37 | {#if currentAccess === "admin"}
38 |
39 | {:else if currentAccess === "user"}
40 |
41 | {:else}
42 |
43 | {/if}
44 | {/if}
45 |
46 |
--------------------------------------------------------------------------------
/svelte-source/src/store/visibility.ts:
--------------------------------------------------------------------------------
1 | import { writable } from "svelte/store";
2 |
3 | export const visibility = writable<{
4 | show: boolean;
5 | type: "admin" | "user" | "chat";
6 | }>({
7 | show: false,
8 | type: "user",
9 | });
10 |
--------------------------------------------------------------------------------
/svelte-source/src/styles/globals.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
5 | html {
6 | width: 100%;
7 | height: 100%;
8 | position: absolute;
9 | top: 0;
10 | left: 0;
11 | overflow: hidden;
12 | }
13 |
14 | ::-webkit-scrollbar {
15 | width: 5px;
16 | }
17 | ::-webkit-scrollbar-thumb {
18 | border-radius: 2px;
19 | background-color: rgba(60, 60, 60, 1);
20 | }
21 |
22 | ::-webkit-scrollbar {
23 | width: 5px;
24 | }
25 | ::-webkit-scrollbar-thumb {
26 | border-radius: 2px;
27 | background-color: rgba(60, 60, 60, 1);
28 | }
29 |
--------------------------------------------------------------------------------
/svelte-source/src/utils/debugData.ts:
--------------------------------------------------------------------------------
1 | import {isEnvBrowser} from "./misc";
2 |
3 | interface DebugEvent {
4 | action: string;
5 | data: T;
6 | }
7 |
8 | /**
9 | * Emulates dispatching an event using SendNuiMessage in the lua scripts.
10 | * This is used when developing in browser
11 | *
12 | * @param events - The event you want to cover
13 | * @param timer - How long until it should trigger (ms)
14 | */
15 | export const debugData = (events: DebugEvent
[], timer = 1000): void => {
16 | if (isEnvBrowser()) {
17 | for (const event of events) {
18 | setTimeout(() => {
19 | window.dispatchEvent(
20 | new MessageEvent("message", {
21 | data: {
22 | action: event.action,
23 | data: event.data,
24 | },
25 | })
26 | );
27 | }, timer);
28 | }
29 | }
30 | };
--------------------------------------------------------------------------------
/svelte-source/src/utils/misc.ts:
--------------------------------------------------------------------------------
1 | export const isEnvBrowser = (): boolean => !(window as any).invokeNative;
--------------------------------------------------------------------------------
/svelte-source/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 | ///
3 |
--------------------------------------------------------------------------------
/svelte-source/svelte.config.js:
--------------------------------------------------------------------------------
1 | import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'
2 |
3 | export default {
4 | // Consult https://svelte.dev/docs#compile-time-svelte-preprocess
5 | // for more information about preprocessors
6 | preprocess: vitePreprocess(),
7 | }
8 |
--------------------------------------------------------------------------------
/svelte-source/tailwind.config.cjs:
--------------------------------------------------------------------------------
1 | /** @type {import('tailwindcss').Config} */
2 | module.exports = {
3 | content: ['./src/**/*.{html,js,svelte,ts}'],
4 | theme: {
5 | extend: {}
6 | },
7 | plugins: []
8 | };
9 |
--------------------------------------------------------------------------------
/svelte-source/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "@tsconfig/svelte/tsconfig.json",
3 | "compilerOptions": {
4 | "target": "esnext",
5 | "useDefineForClassFields": true,
6 | "module": "esnext",
7 | "resolveJsonModule": true,
8 | "baseUrl": ".",
9 | "paths": {
10 | "@components/*": ["src/components/*"],
11 | "@providers/*": ["src/providers/*"],
12 | "@store/*": ["src/store/*"],
13 | "@utils/*": ["src/utils/*"],
14 | "@hooks/*": ["src/hooks/*"],
15 | "@interfaces/*": ["src/interfaces/*"],
16 | },
17 | /**
18 | * Typecheck JS in `.svelte` and `.js` files by default.
19 | * Disable checkJs if you'd like to use dynamic types in JS.
20 | * Note that setting allowJs false does not prevent the use
21 | * of JS in `.svelte` files.
22 | */
23 | "allowJs": true,
24 | "checkJs": true,
25 | "isolatedModules": true
26 | },
27 | "include": ["src/**/*.d.ts", "src/**/*.ts", "src/**/*.js", "src/**/*.svelte"],
28 | "references": [{ "path": "./tsconfig.node.json" }]
29 | }
30 |
--------------------------------------------------------------------------------
/svelte-source/tsconfig.node.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "composite": true,
4 | "module": "ESNext",
5 | "moduleResolution": "Node"
6 | },
7 | "include": ["vite.config.ts"]
8 | }
9 |
--------------------------------------------------------------------------------
/svelte-source/vite.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from "vite";
2 | import { svelte } from "@sveltejs/vite-plugin-svelte";
3 | import { minify } from "html-minifier";
4 | import { resolve } from "path";
5 | function minifyHtml() {
6 | return {
7 | name: "html-transform",
8 | transformIndexHtml(html) {
9 | return minify(html, {
10 | collapseWhitespace: true,
11 | });
12 | },
13 | };
14 | }
15 |
16 | // https://vitejs.dev/config/
17 | export default defineConfig(({ mode }) => {
18 | const isProduction = mode === "production";
19 | return {
20 | plugins: [svelte(), isProduction && minifyHtml()],
21 | base: "./",
22 | resolve: {
23 | alias: {
24 | "@components": resolve("./src/components"),
25 | "@providers": resolve("./src/providers"),
26 | "@store": resolve("./src/store"),
27 | "@utils": resolve("./src/utils"),
28 | "@hooks": resolve("./src/hooks"),
29 | "@interfaces": resolve("./src/interfaces"),
30 | },
31 | },
32 | build: {
33 | minify: isProduction,
34 |
35 | emptyOutDir: true,
36 | outDir: "../html",
37 | assetsDir: "./",
38 | rollupOptions: {
39 | output: {
40 | entryFileNames: `js/[name].js`,
41 | chunkFileNames: `js/[name].js`,
42 | assetFileNames: `assets/[name].[ext]`,
43 | },
44 | },
45 | },
46 | };
47 | });
48 |
--------------------------------------------------------------------------------