├── .babelrc ├── .gitignore ├── README.it.md ├── README.md ├── another_app ├── __init__.py ├── admin.py ├── apps.py ├── migrations │ └── __init__.py ├── models.py ├── tests.py ├── urls.py └── views.py ├── django_inertia_svelte ├── __init__.py ├── asgi.py ├── middleware.py ├── settings.py ├── urls.py └── wsgi.py ├── manage.py ├── package-lock.json ├── package.json ├── requirements.txt ├── sample_app ├── __init__.py ├── admin.py ├── apps.py ├── migrations │ └── __init__.py ├── models.py ├── tests.py ├── urls.py └── views.py ├── static ├── assets │ ├── css │ │ └── admin.css │ └── img │ │ └── potato.png └── src │ ├── js │ └── main.js │ └── pages │ ├── another_app │ └── contacts.svelte │ ├── layout.svelte │ └── sample_app │ ├── about.svelte │ └── index.svelte ├── templates └── base.html └── vite.config.js /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "plugins": ["@babel/plugin-syntax-dynamic-import"] 3 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Created by https://www.toptal.com/developers/gitignore/api/django,python,macos,windows,linux,pycharm+all 2 | # Edit at https://www.toptal.com/developers/gitignore?templates=django,python,macos,windows,linux,pycharm+all 3 | 4 | ### Django ### 5 | *.log 6 | *.pot 7 | *.pyc 8 | __pycache__/ 9 | local_settings.py 10 | db.sqlite3 11 | db.sqlite3-journal 12 | media 13 | 14 | # If your build process includes running collectstatic, then you probably don't need or want to include staticfiles/ 15 | # in your Git repository. Update and uncomment the following line accordingly. 16 | # /staticfiles/ 17 | 18 | ### Django.Python Stack ### 19 | # Byte-compiled / optimized / DLL files 20 | *.py[cod] 21 | *$py.class 22 | 23 | # C extensions 24 | *.so 25 | 26 | # Distribution / packaging 27 | .Python 28 | build/ 29 | develop-eggs/ 30 | dist/ 31 | downloads/ 32 | eggs/ 33 | .eggs/ 34 | lib/ 35 | lib64/ 36 | parts/ 37 | sdist/ 38 | var/ 39 | wheels/ 40 | share/python-wheels/ 41 | *.egg-info/ 42 | .installed.cfg 43 | *.egg 44 | MANIFEST 45 | 46 | # PyInstaller 47 | # Usually these files are written by a python script from a template 48 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 49 | *.manifest 50 | *.spec 51 | 52 | # Installer logs 53 | pip-log.txt 54 | pip-delete-this-directory.txt 55 | 56 | # Unit test / coverage reports 57 | htmlcov/ 58 | .tox/ 59 | .nox/ 60 | .coverage 61 | .coverage.* 62 | .cache 63 | nosetests.xml 64 | coverage.xml 65 | *.cover 66 | *.py,cover 67 | .hypothesis/ 68 | .pytest_cache/ 69 | cover/ 70 | 71 | # Translations 72 | *.mo 73 | 74 | # Django stuff: 75 | 76 | # Flask stuff: 77 | instance/ 78 | .webassets-cache 79 | 80 | # Scrapy stuff: 81 | .scrapy 82 | 83 | # Sphinx documentation 84 | docs/_build/ 85 | 86 | # PyBuilder 87 | .pybuilder/ 88 | target/ 89 | 90 | # Jupyter Notebook 91 | .ipynb_checkpoints 92 | 93 | # IPython 94 | profile_default/ 95 | ipython_config.py 96 | 97 | # pyenv 98 | # For a library or package, you might want to ignore these files since the code is 99 | # intended to run in multiple environments; otherwise, check them in: 100 | # .python-version 101 | 102 | # pipenv 103 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 104 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 105 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 106 | # install all needed dependencies. 107 | #Pipfile.lock 108 | 109 | # poetry 110 | # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. 111 | # This is especially recommended for binary packages to ensure reproducibility, and is more 112 | # commonly ignored for libraries. 113 | # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control 114 | #poetry.lock 115 | 116 | # pdm 117 | # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. 118 | #pdm.lock 119 | # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it 120 | # in version control. 121 | # https://pdm.fming.dev/#use-with-ide 122 | .pdm.toml 123 | 124 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm 125 | __pypackages__/ 126 | 127 | # Celery stuff 128 | celerybeat-schedule 129 | celerybeat.pid 130 | 131 | # SageMath parsed files 132 | *.sage.py 133 | 134 | # Environments 135 | .env 136 | .venv 137 | env/ 138 | venv/ 139 | ENV/ 140 | env.bak/ 141 | venv.bak/ 142 | 143 | # Spyder project settings 144 | .spyderproject 145 | .spyproject 146 | 147 | # Rope project settings 148 | .ropeproject 149 | 150 | # mkdocs documentation 151 | /site 152 | 153 | # mypy 154 | .mypy_cache/ 155 | .dmypy.json 156 | dmypy.json 157 | 158 | # Pyre type checker 159 | .pyre/ 160 | 161 | # pytype static type analyzer 162 | .pytype/ 163 | 164 | # Cython debug symbols 165 | cython_debug/ 166 | 167 | # PyCharm 168 | # JetBrains specific template is maintained in a separate JetBrains.gitignore that can 169 | # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore 170 | # and can be added to the global gitignore or merged into this file. For a more nuclear 171 | # option (not recommended) you can uncomment the following to ignore the entire idea folder. 172 | #.idea/ 173 | 174 | ### Linux ### 175 | *~ 176 | 177 | # temporary files which can be created if a process still has a handle open of a deleted file 178 | .fuse_hidden* 179 | 180 | # KDE directory preferences 181 | .directory 182 | 183 | # Linux trash folder which might appear on any partition or disk 184 | .Trash-* 185 | 186 | # .nfs files are created when an open file is removed but is still being accessed 187 | .nfs* 188 | 189 | ### macOS ### 190 | # General 191 | .DS_Store 192 | .AppleDouble 193 | .LSOverride 194 | 195 | # Icon must end with two \r 196 | Icon 197 | 198 | 199 | # Thumbnails 200 | ._* 201 | 202 | # Files that might appear in the root of a volume 203 | .DocumentRevisions-V100 204 | .fseventsd 205 | .Spotlight-V100 206 | .TemporaryItems 207 | .Trashes 208 | .VolumeIcon.icns 209 | .com.apple.timemachine.donotpresent 210 | 211 | # Directories potentially created on remote AFP share 212 | .AppleDB 213 | .AppleDesktop 214 | Network Trash Folder 215 | Temporary Items 216 | .apdisk 217 | 218 | ### macOS Patch ### 219 | # iCloud generated files 220 | *.icloud 221 | 222 | ### PyCharm+all ### 223 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider 224 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 225 | 226 | # User-specific stuff 227 | .idea/**/workspace.xml 228 | .idea/**/tasks.xml 229 | .idea/**/usage.statistics.xml 230 | .idea/**/dictionaries 231 | .idea/**/shelf 232 | 233 | # AWS User-specific 234 | .idea/**/aws.xml 235 | 236 | # Generated files 237 | .idea/**/contentModel.xml 238 | 239 | # Sensitive or high-churn files 240 | .idea/**/dataSources/ 241 | .idea/**/dataSources.ids 242 | .idea/**/dataSources.local.xml 243 | .idea/**/sqlDataSources.xml 244 | .idea/**/dynamic.xml 245 | .idea/**/uiDesigner.xml 246 | .idea/**/dbnavigator.xml 247 | 248 | # Gradle 249 | .idea/**/gradle.xml 250 | .idea/**/libraries 251 | 252 | # Gradle and Maven with auto-import 253 | # When using Gradle or Maven with auto-import, you should exclude module files, 254 | # since they will be recreated, and may cause churn. Uncomment if using 255 | # auto-import. 256 | # .idea/artifacts 257 | # .idea/compiler.xml 258 | # .idea/jarRepositories.xml 259 | # .idea/modules.xml 260 | # .idea/*.iml 261 | # .idea/modules 262 | # *.iml 263 | # *.ipr 264 | 265 | # CMake 266 | cmake-build-*/ 267 | 268 | # Mongo Explorer plugin 269 | .idea/**/mongoSettings.xml 270 | 271 | # File-based project format 272 | *.iws 273 | 274 | # IntelliJ 275 | out/ 276 | 277 | # mpeltonen/sbt-idea plugin 278 | .idea_modules/ 279 | 280 | # JIRA plugin 281 | atlassian-ide-plugin.xml 282 | 283 | # Cursive Clojure plugin 284 | .idea/replstate.xml 285 | 286 | # SonarLint plugin 287 | .idea/sonarlint/ 288 | 289 | # Crashlytics plugin (for Android Studio and IntelliJ) 290 | com_crashlytics_export_strings.xml 291 | crashlytics.properties 292 | crashlytics-build.properties 293 | fabric.properties 294 | 295 | # Editor-based Rest Client 296 | .idea/httpRequests 297 | 298 | # Android studio 3.1+ serialized cache file 299 | .idea/caches/build_file_checksums.ser 300 | 301 | ### PyCharm+all Patch ### 302 | # Ignore everything but code style settings and run configurations 303 | # that are supposed to be shared within teams. 304 | 305 | .idea/* 306 | 307 | !.idea/codeStyles 308 | !.idea/runConfigurations 309 | 310 | ### Python ### 311 | # Byte-compiled / optimized / DLL files 312 | 313 | # C extensions 314 | 315 | # Distribution / packaging 316 | 317 | # PyInstaller 318 | # Usually these files are written by a python script from a template 319 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 320 | 321 | # Installer logs 322 | 323 | # Unit test / coverage reports 324 | 325 | # Translations 326 | 327 | # Django stuff: 328 | 329 | # Flask stuff: 330 | 331 | # Scrapy stuff: 332 | 333 | # Sphinx documentation 334 | 335 | # PyBuilder 336 | 337 | # Jupyter Notebook 338 | 339 | # IPython 340 | 341 | # pyenv 342 | # For a library or package, you might want to ignore these files since the code is 343 | # intended to run in multiple environments; otherwise, check them in: 344 | # .python-version 345 | 346 | # pipenv 347 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 348 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 349 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 350 | # install all needed dependencies. 351 | 352 | # poetry 353 | # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. 354 | # This is especially recommended for binary packages to ensure reproducibility, and is more 355 | # commonly ignored for libraries. 356 | # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control 357 | 358 | # pdm 359 | # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. 360 | # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it 361 | # in version control. 362 | # https://pdm.fming.dev/#use-with-ide 363 | 364 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm 365 | 366 | # Celery stuff 367 | 368 | # SageMath parsed files 369 | 370 | # Environments 371 | 372 | # Spyder project settings 373 | 374 | # Rope project settings 375 | 376 | # mkdocs documentation 377 | 378 | # mypy 379 | 380 | # Pyre type checker 381 | 382 | # pytype static type analyzer 383 | 384 | # Cython debug symbols 385 | 386 | # PyCharm 387 | # JetBrains specific template is maintained in a separate JetBrains.gitignore that can 388 | # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore 389 | # and can be added to the global gitignore or merged into this file. For a more nuclear 390 | # option (not recommended) you can uncomment the following to ignore the entire idea folder. 391 | 392 | ### Windows ### 393 | # Windows thumbnail cache files 394 | Thumbs.db 395 | Thumbs.db:encryptable 396 | ehthumbs.db 397 | ehthumbs_vista.db 398 | 399 | # Dump file 400 | *.stackdump 401 | 402 | # Folder config file 403 | [Dd]esktop.ini 404 | 405 | # Recycle Bin used on file shares 406 | $RECYCLE.BIN/ 407 | 408 | # Windows Installer files 409 | *.cab 410 | *.msi 411 | *.msix 412 | *.msm 413 | *.msp 414 | 415 | # Windows shortcuts 416 | *.lnk 417 | 418 | # End of https://www.toptal.com/developers/gitignore/api/django,python,macos,windows,linux,pycharm+all 419 | 420 | myvenv/ 421 | collectedstatic/ 422 | node_modules/ 423 | -------------------------------------------------------------------------------- /README.it.md: -------------------------------------------------------------------------------- 1 | logo 2 | 3 | 4 | # Django + Inertia.js + Svelte = ❤️ 5 | 6 | [![Maintenance](https://img.shields.io/badge/Maintained%3F-yes-green.svg)](https://github.com/progressify/django-inertia-svelte-starter/graphs/commit-activity) 7 | [![Dona con Paypal](https://img.shields.io/badge/PayPal-Donate%20to%20Author-blue.svg)](https://www.paypal.me/progressify) 8 | [![Dona con Satispay](https://img.shields.io/badge/Satispay-Donate%20to%20Author-red.svg)](https://tag.satispay.com/progressify) 9 | [![Ask Me Anything !](https://img.shields.io/badge/Ask%20me-anything-1abc9c.svg)](https://github.com/progressify/django-inertia-svelte-starter/issues) 10 | 11 | [Here you find the english version of this README](README.md) 12 | 13 | Il template starter combina tre tecnologie per creare un'applicazione web full-stack solida e fluida. 14 | 15 | Django fornisce la struttura per il back-end, 16 | Inertia.js gestisce la navigazione delle pagine in modo nativo, 17 | mentre Svelte si occupa dell'interfaccia utente. 18 | 19 | Insieme forniscono una solida base per creare qualsiasi tipo di applicazione web. 20 | 21 | 22 | ## Installazione ed utilizzo 23 | 24 | - Clona il progetto :) 25 | - crea un virtual environment 26 | 27 | ```shell 28 | python -m venv myvenv 29 | ``` 30 | 31 | - attiva il virtual environment 32 | 33 | ```shell 34 | source myvenv/bin/activate 35 | ``` 36 | 37 | - installa le librerie python 38 | 39 | ```shell 40 | pip install -r requirements.txt 41 | ``` 42 | 43 | - applica le migration del db 44 | 45 | ```shell 46 | python manage.py migrate 47 | ``` 48 | 49 | - installa le dipendenze npm 50 | 51 | ```shell 52 | npm install 53 | ``` 54 | 55 | - avvia il server python 56 | 57 | ```shell 58 | python manage.py runserver 59 | ``` 60 | 61 | - apri un altra finestra del terminale e lancia il server vite 62 | 63 | ```shell 64 | npm run dev 65 | ``` 66 | 67 | Ora apri il tuo browser a vai a: `http://localhost:8000/` 68 | 69 | **PAY ATTENTION:** Se usi questo template in produzione ricordati di cambiare la `SECRET_KEY` del progetto Django. 70 | 71 | 72 | ## Link utili 73 | 74 | - [Template admin html css](https://code-boxx.com/simple-html-css-admin-panel/) 75 | - [Django](https://www.djangoproject.com/) 76 | - [Inertia.js](https://inertiajs.com/) 77 | - [Svelte](https://svelte.dev/) 78 | - [django-configurations](https://django-configurations.readthedocs.io/en/stable/) 79 | - [inertia-django](https://pypi.org/project/inertia-django/) 80 | - [django-vite](https://pypi.org/project/django-vite/) 81 | - [Me](https://progressify.dev/) 82 | 83 | 84 | Enjoy! :) 85 | 86 | **AP** 87 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | logo 2 | 3 | 4 | # Django + Inertia.js + Svelte = ❤️ 5 | 6 | [![Maintenance](https://img.shields.io/badge/Maintained%3F-yes-green.svg)](https://github.com/progressify/django-inertia-svelte-starter/graphs/commit-activity) 7 | [![Paypal Donate](https://img.shields.io/badge/PayPal-Donate%20to%20Author-blue.svg)](https://www.paypal.me/progressify) 8 | [![Satispay Donate](https://img.shields.io/badge/Satispay-Donate%20to%20Author-red.svg)](https://tag.satispay.com/progressify) 9 | [![Ask Me Anything !](https://img.shields.io/badge/Ask%20me-anything-1abc9c.svg)](https://github.com/progressify/django-inertia-svelte-starter/issues) 10 | 11 | [Qui puoi trovare la versione italiana di questo README](README.it.md) 12 | 13 | This starter template combines three technologies to create a solid and smooth full-stack web application. 14 | 15 | Django provides the structure for the back-end, 16 | Inertia.js handles page navigation in a native way, 17 | while Svelte takes care of the user interface. 18 | 19 | Together they provide a solid foundation to build any kind of web application. 20 | 21 | 22 | ## Installation and usage 23 | 24 | - Clone the project :) 25 | - create python virtual environment 26 | 27 | ```shell 28 | python -m venv myvenv 29 | ``` 30 | 31 | - activate virtual environment 32 | 33 | ```shell 34 | source myvenv/bin/activate 35 | ``` 36 | 37 | - install python requirements 38 | 39 | ```shell 40 | pip install -r requirements.txt 41 | ``` 42 | 43 | - apply the migrations 44 | 45 | ```shell 46 | python manage.py migrate 47 | ``` 48 | 49 | - install npm dependencies 50 | 51 | ```shell 52 | npm install 53 | ``` 54 | 55 | - run the python server 56 | 57 | ```shell 58 | python manage.py runserver 59 | ``` 60 | 61 | - open another terminal window and run the vite server 62 | 63 | ```shell 64 | npm run dev 65 | ``` 66 | 67 | Now open your browser and go to: `http://localhost:8000/` 68 | 69 | **PAY ATTENTION:** If you use this template in production remember to change the `SECRET_KEY` of the Django project. 70 | 71 | 72 | ## Useful links 73 | 74 | - [Template admin html css](https://code-boxx.com/simple-html-css-admin-panel/) 75 | - [Django](https://www.djangoproject.com/) 76 | - [Inertia.js](https://inertiajs.com/) 77 | - [Svelte](https://svelte.dev/) 78 | - [django-configurations](https://django-configurations.readthedocs.io/en/stable/) 79 | - [inertia-django](https://pypi.org/project/inertia-django/) 80 | - [django-vite](https://pypi.org/project/django-vite/) 81 | - [Me](https://progressify.dev/) 82 | 83 | 84 | Enjoy! :) 85 | 86 | **AP** -------------------------------------------------------------------------------- /another_app/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progressify/django-inertia-svelte-template-starter/eb902ba64c95ec647eb35160bb9d8c4e41f81e3f/another_app/__init__.py -------------------------------------------------------------------------------- /another_app/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | # Register your models here. 4 | -------------------------------------------------------------------------------- /another_app/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class AnotherAppConfig(AppConfig): 5 | default_auto_field = 'django.db.models.BigAutoField' 6 | name = 'another_app' 7 | -------------------------------------------------------------------------------- /another_app/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progressify/django-inertia-svelte-template-starter/eb902ba64c95ec647eb35160bb9d8c4e41f81e3f/another_app/migrations/__init__.py -------------------------------------------------------------------------------- /another_app/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | 3 | # Create your models here. 4 | -------------------------------------------------------------------------------- /another_app/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /another_app/urls.py: -------------------------------------------------------------------------------- 1 | from django.urls import path 2 | from another_app import views 3 | 4 | 5 | app_name = 'another_app' 6 | 7 | urlpatterns = [ 8 | path('contacts/', views.Contacts.as_view(), name='contacts'), 9 | ] 10 | -------------------------------------------------------------------------------- /another_app/views.py: -------------------------------------------------------------------------------- 1 | from django.views import View 2 | from inertia import render 3 | 4 | class Contacts(View): 5 | def get(self, request): 6 | return render(request, 'another_app/contacts', props={ 7 | 'events': [ 8 | 'Napoli', 9 | ], 10 | 'page_name': 'Contacts' 11 | }) 12 | -------------------------------------------------------------------------------- /django_inertia_svelte/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progressify/django-inertia-svelte-template-starter/eb902ba64c95ec647eb35160bb9d8c4e41f81e3f/django_inertia_svelte/__init__.py -------------------------------------------------------------------------------- /django_inertia_svelte/asgi.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'django_inertia_svelte.settings') 4 | os.environ.setdefault('DJANGO_CONFIGURATION', 'Base') 5 | 6 | from configurations.asgi import get_asgi_application 7 | 8 | application = get_asgi_application() 9 | -------------------------------------------------------------------------------- /django_inertia_svelte/middleware.py: -------------------------------------------------------------------------------- 1 | from django.contrib.auth import get_user_model 2 | from inertia import share 3 | from django.conf import settings 4 | 5 | User = get_user_model() 6 | 7 | 8 | class InertiaShare: 9 | def __init__(self, get_response): 10 | self.get_response = get_response 11 | 12 | def __call__(self, request): 13 | # share( 14 | # request, 15 | # user=lambda: request.user, # evaluated lazily at render time 16 | # ) 17 | 18 | return self.get_response(request) 19 | -------------------------------------------------------------------------------- /django_inertia_svelte/settings.py: -------------------------------------------------------------------------------- 1 | from pathlib import Path 2 | from configurations import Configuration 3 | 4 | import os 5 | 6 | 7 | class Base(Configuration): 8 | # Build paths inside the project like this: BASE_DIR / 'subdir'. 9 | BASE_DIR = Path(__file__).resolve().parent.parent 10 | 11 | # Quick-start development settings - unsuitable for production 12 | # See https://docs.djangoproject.com/en/4.1/howto/deployment/checklist/ 13 | 14 | # SECURITY WARNING: keep the secret key used in production secret! 15 | SECRET_KEY = 'django-insecure-j3^^k66udp0o2w69c(i$zg(20&4*is=^$tw&)r@fm-r(eb&2zr' 16 | 17 | # SECURITY WARNING: don't run with debug turned on in production! 18 | DEBUG = True 19 | 20 | ALLOWED_HOSTS = [] 21 | 22 | # Application definition 23 | INSTALLED_APPS = [ # django apps 24 | 'django.contrib.admin', 25 | 'django.contrib.auth', 26 | 'django.contrib.contenttypes', 27 | 'django.contrib.sessions', 28 | 'django.contrib.messages', 29 | 'django.contrib.staticfiles' 30 | ] 31 | INSTALLED_APPS += [ # library apps 32 | 'inertia', 33 | 'django_vite', 34 | ] 35 | INSTALLED_APPS += [ # project apps 36 | 'sample_app', 37 | 'another_app' 38 | ] 39 | 40 | MIDDLEWARE = [ 41 | 'django.middleware.security.SecurityMiddleware', 42 | 'django.contrib.sessions.middleware.SessionMiddleware', 43 | 'django.middleware.common.CommonMiddleware', 44 | 'django.middleware.csrf.CsrfViewMiddleware', 45 | 'django.contrib.auth.middleware.AuthenticationMiddleware', 46 | 'django.contrib.messages.middleware.MessageMiddleware', 47 | 'django.middleware.clickjacking.XFrameOptionsMiddleware', 48 | 'django_inertia_svelte.middleware.InertiaShare', 49 | 'inertia.middleware.InertiaMiddleware', 50 | ] 51 | 52 | ROOT_URLCONF = 'django_inertia_svelte.urls' 53 | TEMPLATES = [ 54 | { 55 | 'BACKEND': 'django.template.backends.django.DjangoTemplates', 56 | 'DIRS': [BASE_DIR / 'templates'], 57 | 'APP_DIRS': True, 58 | 'OPTIONS': { 59 | 'context_processors': [ 60 | 'django.template.context_processors.debug', 61 | 'django.template.context_processors.request', 62 | 'django.contrib.auth.context_processors.auth', 63 | 'django.contrib.messages.context_processors.messages', 64 | ], 65 | }, 66 | }, 67 | ] 68 | 69 | WSGI_APPLICATION = 'django_inertia_svelte.wsgi.application' 70 | 71 | # Database 72 | # https://docs.djangoproject.com/en/4.1/ref/settings/#databases 73 | @property 74 | def DATABASES(self): 75 | return self.get_databases_setting() 76 | 77 | def get_databases_setting(self): 78 | return { 79 | 'default': { 80 | 'ENGINE': 'django.db.backends.sqlite3', 81 | 'NAME': self.BASE_DIR / 'db.sqlite3', 82 | } 83 | } 84 | 85 | # Password validation 86 | # https://docs.djangoproject.com/en/4.1/ref/settings/#auth-password-validators 87 | AUTH_PASSWORD_VALIDATORS = [ 88 | { 89 | 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', 90 | }, 91 | { 92 | 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 93 | }, 94 | { 95 | 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', 96 | }, 97 | { 98 | 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', 99 | }, 100 | ] 101 | 102 | # Internationalization 103 | # https://docs.djangoproject.com/en/4.1/topics/i18n/ 104 | LANGUAGE_CODE = 'it-IT' 105 | TIME_ZONE = 'Europe/Rome' 106 | USE_I18N = True 107 | USE_TZ = True 108 | 109 | # Static files (CSS, JavaScript, Images) 110 | # https://docs.djangoproject.com/en/4.1/howto/static-files/ 111 | STATIC_ROOT = BASE_DIR / "collectedstatic" 112 | STATIC_URL = '/static/' 113 | MEDIA_ROOT = os.path.join(BASE_DIR.parent, 'media') 114 | MEDIA_URL = '/media/' 115 | 116 | # Where ViteJS assets are built. 117 | DJANGO_VITE_ASSETS_PATH = BASE_DIR / "static" / "dist" 118 | 119 | # If use HMR or not. 120 | DJANGO_VITE_DEV_MODE = DEBUG 121 | 122 | # Include DJANGO_VITE_ASSETS_PATH into STATICFILES_DIRS to be copied inside 123 | # when run command python manage.py collectstatic 124 | STATICFILES_DIRS = [ 125 | DJANGO_VITE_ASSETS_PATH, 126 | BASE_DIR / "static" / "assets" 127 | ] 128 | 129 | INERTIA_LAYOUT = 'base.html' 130 | 131 | # Default primary key field type 132 | # https://docs.djangoproject.com/en/4.1/ref/settings/#default-auto-field 133 | DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' 134 | 135 | # logger configuration 136 | LOGGING = { 137 | 'version': 1, 138 | 'disable_existing_loggers': False, 139 | 'formatters': { 140 | 'simple': { 141 | 'format': '%(levelname)s [%(name)s]: %(asctime)s %(message)s', 142 | 'datefmt': '%d-%m-%Y %H:%M:%S', 143 | }, 144 | 'color': { 145 | '()': 'colorlog.ColoredFormatter', 146 | 'format': '%(log_color)s %(levelname)s [%(name)s]: %(asctime)s %(message)s', 147 | 'datefmt': '%d-%m-%Y %H:%M:%S', 148 | 'log_colors': { 149 | 'DEBUG': 'white', 150 | 'INFO': 'cyan', 151 | 'WARNING': 'yellow', 152 | 'ERROR': 'red', 153 | 'CRITICAL': 'bold_black,bg_white' 154 | }, 155 | }, 156 | }, 157 | 'handlers': { 158 | 'color_console': { 159 | 'class': 'logging.StreamHandler', 160 | 'formatter': 'color', 161 | }, 162 | 'file': { 163 | 'class': 'logging.handlers.RotatingFileHandler', 164 | 'maxBytes': 1024 * 1024 * 10, # 20 MB 165 | 'backupCount': 2, 166 | 'formatter': 'simple', 167 | 'filename': os.path.join(BASE_DIR.parent, 'debug.log'), 168 | }, 169 | 'console': { 170 | 'class': 'logging.StreamHandler', 171 | 'formatter': 'simple', 172 | }, 173 | }, 174 | 'loggers': { 175 | '': { 176 | 'handlers': ['color_console', 'file'], 177 | 'propagate': True, 178 | 'level': 'DEBUG', 179 | }, 180 | 'botocore': {'handlers': ['file'], 'propagate': False, 'level': 'DEBUG'}, 181 | 'boto3': {'handlers': ['file'], 'propagate': False, 'level': 'DEBUG'}, 182 | 's3transfer': {'handlers': ['file'], 'propagate': False, 'level': 'DEBUG'}, 183 | 'urllib3': {'handlers': ['file'], 'propagate': False, 'level': 'DEBUG'} 184 | } 185 | } 186 | -------------------------------------------------------------------------------- /django_inertia_svelte/urls.py: -------------------------------------------------------------------------------- 1 | from django.conf import settings 2 | from django.contrib import admin 3 | from django.urls import path, include 4 | from django.conf.urls.static import static 5 | 6 | 7 | urlpatterns = [ 8 | path('', include('sample_app.urls', namespace="sample_app")), 9 | path('', include('another_app.urls', namespace="another_app")), 10 | path('admin/', admin.site.urls), 11 | ] 12 | 13 | urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 14 | -------------------------------------------------------------------------------- /django_inertia_svelte/wsgi.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'django_inertia_svelte.settings') 4 | os.environ.setdefault('DJANGO_CONFIGURATION', 'Base') 5 | 6 | from configurations.wsgi import get_wsgi_application 7 | 8 | application = get_wsgi_application() 9 | -------------------------------------------------------------------------------- /manage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | """Django's command-line utility for administrative tasks.""" 3 | import os 4 | import sys 5 | 6 | 7 | def main(): 8 | """Run administrative tasks.""" 9 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'django_inertia_svelte.settings') 10 | os.environ.setdefault('DJANGO_CONFIGURATION', 'Base') 11 | try: 12 | from configurations.management import execute_from_command_line 13 | except ImportError as exc: 14 | raise ImportError( 15 | "Couldn't import Django. Are you sure it's installed and " 16 | "available on your PYTHONPATH environment variable? Did you " 17 | "forget to activate a virtual environment?" 18 | ) from exc 19 | execute_from_command_line(sys.argv) 20 | 21 | 22 | if __name__ == '__main__': 23 | main() 24 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "my-vue-app", 3 | "version": "0.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "my-vue-app", 9 | "version": "0.0.0", 10 | "devDependencies": { 11 | "@babel/plugin-syntax-dynamic-import": "^7.8.3", 12 | "@inertiajs/inertia": "^0.11.1", 13 | "@inertiajs/inertia-svelte": "^0.8.0", 14 | "@inertiajs/progress": "^0.2.7", 15 | "@sveltejs/vite-plugin-svelte": "^2.0.0", 16 | "svelte": "^3.54.0", 17 | "vite": "^4.0.0" 18 | } 19 | }, 20 | "node_modules/@ampproject/remapping": { 21 | "version": "2.2.0", 22 | "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", 23 | "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", 24 | "dev": true, 25 | "peer": true, 26 | "dependencies": { 27 | "@jridgewell/gen-mapping": "^0.1.0", 28 | "@jridgewell/trace-mapping": "^0.3.9" 29 | }, 30 | "engines": { 31 | "node": ">=6.0.0" 32 | } 33 | }, 34 | "node_modules/@babel/code-frame": { 35 | "version": "7.18.6", 36 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", 37 | "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", 38 | "dev": true, 39 | "peer": true, 40 | "dependencies": { 41 | "@babel/highlight": "^7.18.6" 42 | }, 43 | "engines": { 44 | "node": ">=6.9.0" 45 | } 46 | }, 47 | "node_modules/@babel/compat-data": { 48 | "version": "7.20.10", 49 | "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.10.tgz", 50 | "integrity": "sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg==", 51 | "dev": true, 52 | "peer": true, 53 | "engines": { 54 | "node": ">=6.9.0" 55 | } 56 | }, 57 | "node_modules/@babel/core": { 58 | "version": "7.20.12", 59 | "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz", 60 | "integrity": "sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==", 61 | "dev": true, 62 | "peer": true, 63 | "dependencies": { 64 | "@ampproject/remapping": "^2.1.0", 65 | "@babel/code-frame": "^7.18.6", 66 | "@babel/generator": "^7.20.7", 67 | "@babel/helper-compilation-targets": "^7.20.7", 68 | "@babel/helper-module-transforms": "^7.20.11", 69 | "@babel/helpers": "^7.20.7", 70 | "@babel/parser": "^7.20.7", 71 | "@babel/template": "^7.20.7", 72 | "@babel/traverse": "^7.20.12", 73 | "@babel/types": "^7.20.7", 74 | "convert-source-map": "^1.7.0", 75 | "debug": "^4.1.0", 76 | "gensync": "^1.0.0-beta.2", 77 | "json5": "^2.2.2", 78 | "semver": "^6.3.0" 79 | }, 80 | "engines": { 81 | "node": ">=6.9.0" 82 | }, 83 | "funding": { 84 | "type": "opencollective", 85 | "url": "https://opencollective.com/babel" 86 | } 87 | }, 88 | "node_modules/@babel/generator": { 89 | "version": "7.20.7", 90 | "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.7.tgz", 91 | "integrity": "sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw==", 92 | "dev": true, 93 | "peer": true, 94 | "dependencies": { 95 | "@babel/types": "^7.20.7", 96 | "@jridgewell/gen-mapping": "^0.3.2", 97 | "jsesc": "^2.5.1" 98 | }, 99 | "engines": { 100 | "node": ">=6.9.0" 101 | } 102 | }, 103 | "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { 104 | "version": "0.3.2", 105 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", 106 | "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", 107 | "dev": true, 108 | "peer": true, 109 | "dependencies": { 110 | "@jridgewell/set-array": "^1.0.1", 111 | "@jridgewell/sourcemap-codec": "^1.4.10", 112 | "@jridgewell/trace-mapping": "^0.3.9" 113 | }, 114 | "engines": { 115 | "node": ">=6.0.0" 116 | } 117 | }, 118 | "node_modules/@babel/helper-compilation-targets": { 119 | "version": "7.20.7", 120 | "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", 121 | "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", 122 | "dev": true, 123 | "peer": true, 124 | "dependencies": { 125 | "@babel/compat-data": "^7.20.5", 126 | "@babel/helper-validator-option": "^7.18.6", 127 | "browserslist": "^4.21.3", 128 | "lru-cache": "^5.1.1", 129 | "semver": "^6.3.0" 130 | }, 131 | "engines": { 132 | "node": ">=6.9.0" 133 | }, 134 | "peerDependencies": { 135 | "@babel/core": "^7.0.0" 136 | } 137 | }, 138 | "node_modules/@babel/helper-environment-visitor": { 139 | "version": "7.18.9", 140 | "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", 141 | "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", 142 | "dev": true, 143 | "peer": true, 144 | "engines": { 145 | "node": ">=6.9.0" 146 | } 147 | }, 148 | "node_modules/@babel/helper-function-name": { 149 | "version": "7.19.0", 150 | "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", 151 | "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", 152 | "dev": true, 153 | "peer": true, 154 | "dependencies": { 155 | "@babel/template": "^7.18.10", 156 | "@babel/types": "^7.19.0" 157 | }, 158 | "engines": { 159 | "node": ">=6.9.0" 160 | } 161 | }, 162 | "node_modules/@babel/helper-hoist-variables": { 163 | "version": "7.18.6", 164 | "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", 165 | "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", 166 | "dev": true, 167 | "peer": true, 168 | "dependencies": { 169 | "@babel/types": "^7.18.6" 170 | }, 171 | "engines": { 172 | "node": ">=6.9.0" 173 | } 174 | }, 175 | "node_modules/@babel/helper-module-imports": { 176 | "version": "7.18.6", 177 | "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", 178 | "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", 179 | "dev": true, 180 | "peer": true, 181 | "dependencies": { 182 | "@babel/types": "^7.18.6" 183 | }, 184 | "engines": { 185 | "node": ">=6.9.0" 186 | } 187 | }, 188 | "node_modules/@babel/helper-module-transforms": { 189 | "version": "7.20.11", 190 | "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz", 191 | "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==", 192 | "dev": true, 193 | "peer": true, 194 | "dependencies": { 195 | "@babel/helper-environment-visitor": "^7.18.9", 196 | "@babel/helper-module-imports": "^7.18.6", 197 | "@babel/helper-simple-access": "^7.20.2", 198 | "@babel/helper-split-export-declaration": "^7.18.6", 199 | "@babel/helper-validator-identifier": "^7.19.1", 200 | "@babel/template": "^7.20.7", 201 | "@babel/traverse": "^7.20.10", 202 | "@babel/types": "^7.20.7" 203 | }, 204 | "engines": { 205 | "node": ">=6.9.0" 206 | } 207 | }, 208 | "node_modules/@babel/helper-plugin-utils": { 209 | "version": "7.20.2", 210 | "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", 211 | "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", 212 | "dev": true, 213 | "engines": { 214 | "node": ">=6.9.0" 215 | } 216 | }, 217 | "node_modules/@babel/helper-simple-access": { 218 | "version": "7.20.2", 219 | "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", 220 | "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", 221 | "dev": true, 222 | "peer": true, 223 | "dependencies": { 224 | "@babel/types": "^7.20.2" 225 | }, 226 | "engines": { 227 | "node": ">=6.9.0" 228 | } 229 | }, 230 | "node_modules/@babel/helper-split-export-declaration": { 231 | "version": "7.18.6", 232 | "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", 233 | "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", 234 | "dev": true, 235 | "peer": true, 236 | "dependencies": { 237 | "@babel/types": "^7.18.6" 238 | }, 239 | "engines": { 240 | "node": ">=6.9.0" 241 | } 242 | }, 243 | "node_modules/@babel/helper-string-parser": { 244 | "version": "7.19.4", 245 | "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", 246 | "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", 247 | "dev": true, 248 | "peer": true, 249 | "engines": { 250 | "node": ">=6.9.0" 251 | } 252 | }, 253 | "node_modules/@babel/helper-validator-identifier": { 254 | "version": "7.19.1", 255 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", 256 | "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", 257 | "dev": true, 258 | "peer": true, 259 | "engines": { 260 | "node": ">=6.9.0" 261 | } 262 | }, 263 | "node_modules/@babel/helper-validator-option": { 264 | "version": "7.18.6", 265 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", 266 | "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", 267 | "dev": true, 268 | "peer": true, 269 | "engines": { 270 | "node": ">=6.9.0" 271 | } 272 | }, 273 | "node_modules/@babel/helpers": { 274 | "version": "7.20.7", 275 | "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.7.tgz", 276 | "integrity": "sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA==", 277 | "dev": true, 278 | "peer": true, 279 | "dependencies": { 280 | "@babel/template": "^7.20.7", 281 | "@babel/traverse": "^7.20.7", 282 | "@babel/types": "^7.20.7" 283 | }, 284 | "engines": { 285 | "node": ">=6.9.0" 286 | } 287 | }, 288 | "node_modules/@babel/highlight": { 289 | "version": "7.18.6", 290 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", 291 | "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", 292 | "dev": true, 293 | "peer": true, 294 | "dependencies": { 295 | "@babel/helper-validator-identifier": "^7.18.6", 296 | "chalk": "^2.0.0", 297 | "js-tokens": "^4.0.0" 298 | }, 299 | "engines": { 300 | "node": ">=6.9.0" 301 | } 302 | }, 303 | "node_modules/@babel/parser": { 304 | "version": "7.20.7", 305 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.7.tgz", 306 | "integrity": "sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg==", 307 | "dev": true, 308 | "peer": true, 309 | "bin": { 310 | "parser": "bin/babel-parser.js" 311 | }, 312 | "engines": { 313 | "node": ">=6.0.0" 314 | } 315 | }, 316 | "node_modules/@babel/plugin-syntax-dynamic-import": { 317 | "version": "7.8.3", 318 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", 319 | "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", 320 | "dev": true, 321 | "dependencies": { 322 | "@babel/helper-plugin-utils": "^7.8.0" 323 | }, 324 | "peerDependencies": { 325 | "@babel/core": "^7.0.0-0" 326 | } 327 | }, 328 | "node_modules/@babel/template": { 329 | "version": "7.20.7", 330 | "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", 331 | "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", 332 | "dev": true, 333 | "peer": true, 334 | "dependencies": { 335 | "@babel/code-frame": "^7.18.6", 336 | "@babel/parser": "^7.20.7", 337 | "@babel/types": "^7.20.7" 338 | }, 339 | "engines": { 340 | "node": ">=6.9.0" 341 | } 342 | }, 343 | "node_modules/@babel/traverse": { 344 | "version": "7.20.12", 345 | "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.12.tgz", 346 | "integrity": "sha512-MsIbFN0u+raeja38qboyF8TIT7K0BFzz/Yd/77ta4MsUsmP2RAnidIlwq7d5HFQrH/OZJecGV6B71C4zAgpoSQ==", 347 | "dev": true, 348 | "peer": true, 349 | "dependencies": { 350 | "@babel/code-frame": "^7.18.6", 351 | "@babel/generator": "^7.20.7", 352 | "@babel/helper-environment-visitor": "^7.18.9", 353 | "@babel/helper-function-name": "^7.19.0", 354 | "@babel/helper-hoist-variables": "^7.18.6", 355 | "@babel/helper-split-export-declaration": "^7.18.6", 356 | "@babel/parser": "^7.20.7", 357 | "@babel/types": "^7.20.7", 358 | "debug": "^4.1.0", 359 | "globals": "^11.1.0" 360 | }, 361 | "engines": { 362 | "node": ">=6.9.0" 363 | } 364 | }, 365 | "node_modules/@babel/types": { 366 | "version": "7.20.7", 367 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz", 368 | "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==", 369 | "dev": true, 370 | "peer": true, 371 | "dependencies": { 372 | "@babel/helper-string-parser": "^7.19.4", 373 | "@babel/helper-validator-identifier": "^7.19.1", 374 | "to-fast-properties": "^2.0.0" 375 | }, 376 | "engines": { 377 | "node": ">=6.9.0" 378 | } 379 | }, 380 | "node_modules/@esbuild/android-arm": { 381 | "version": "0.16.16", 382 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.16.tgz", 383 | "integrity": "sha512-BUuWMlt4WSXod1HSl7aGK8fJOsi+Tab/M0IDK1V1/GstzoOpqc/v3DqmN8MkuapPKQ9Br1WtLAN4uEgWR8x64A==", 384 | "cpu": [ 385 | "arm" 386 | ], 387 | "dev": true, 388 | "optional": true, 389 | "os": [ 390 | "android" 391 | ], 392 | "engines": { 393 | "node": ">=12" 394 | } 395 | }, 396 | "node_modules/@esbuild/android-arm64": { 397 | "version": "0.16.16", 398 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.16.tgz", 399 | "integrity": "sha512-hFHVAzUKp9Tf8psGq+bDVv+6hTy1bAOoV/jJMUWwhUnIHsh6WbFMhw0ZTkqDuh7TdpffFoHOiIOIxmHc7oYRBQ==", 400 | "cpu": [ 401 | "arm64" 402 | ], 403 | "dev": true, 404 | "optional": true, 405 | "os": [ 406 | "android" 407 | ], 408 | "engines": { 409 | "node": ">=12" 410 | } 411 | }, 412 | "node_modules/@esbuild/android-x64": { 413 | "version": "0.16.16", 414 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.16.tgz", 415 | "integrity": "sha512-9WhxJpeb6XumlfivldxqmkJepEcELekmSw3NkGrs+Edq6sS5KRxtUBQuKYDD7KqP59dDkxVbaoPIQFKWQG0KLg==", 416 | "cpu": [ 417 | "x64" 418 | ], 419 | "dev": true, 420 | "optional": true, 421 | "os": [ 422 | "android" 423 | ], 424 | "engines": { 425 | "node": ">=12" 426 | } 427 | }, 428 | "node_modules/@esbuild/darwin-arm64": { 429 | "version": "0.16.16", 430 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.16.tgz", 431 | "integrity": "sha512-8Z+wld+vr/prHPi2O0X7o1zQOfMbXWGAw9hT0jEyU/l/Yrg+0Z3FO9pjPho72dVkZs4ewZk0bDOFLdZHm8jEfw==", 432 | "cpu": [ 433 | "arm64" 434 | ], 435 | "dev": true, 436 | "optional": true, 437 | "os": [ 438 | "darwin" 439 | ], 440 | "engines": { 441 | "node": ">=12" 442 | } 443 | }, 444 | "node_modules/@esbuild/darwin-x64": { 445 | "version": "0.16.16", 446 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.16.tgz", 447 | "integrity": "sha512-CYkxVvkZzGCqFrt7EgjFxQKhlUPyDkuR9P0Y5wEcmJqVI8ncerOIY5Kej52MhZyzOBXkYrJgZeVZC9xXXoEg9A==", 448 | "cpu": [ 449 | "x64" 450 | ], 451 | "dev": true, 452 | "optional": true, 453 | "os": [ 454 | "darwin" 455 | ], 456 | "engines": { 457 | "node": ">=12" 458 | } 459 | }, 460 | "node_modules/@esbuild/freebsd-arm64": { 461 | "version": "0.16.16", 462 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.16.tgz", 463 | "integrity": "sha512-fxrw4BYqQ39z/3Ja9xj/a1gMsVq0xEjhSyI4a9MjfvDDD8fUV8IYliac96i7tzZc3+VytyXX+XNsnpEk5sw5Wg==", 464 | "cpu": [ 465 | "arm64" 466 | ], 467 | "dev": true, 468 | "optional": true, 469 | "os": [ 470 | "freebsd" 471 | ], 472 | "engines": { 473 | "node": ">=12" 474 | } 475 | }, 476 | "node_modules/@esbuild/freebsd-x64": { 477 | "version": "0.16.16", 478 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.16.tgz", 479 | "integrity": "sha512-8p3v1D+du2jiDvSoNVimHhj7leSfST9YlKsAEO7etBfuqjaBMndo0fmjNLp0JCMld+XIx9L80tooOkyUv1a1PQ==", 480 | "cpu": [ 481 | "x64" 482 | ], 483 | "dev": true, 484 | "optional": true, 485 | "os": [ 486 | "freebsd" 487 | ], 488 | "engines": { 489 | "node": ">=12" 490 | } 491 | }, 492 | "node_modules/@esbuild/linux-arm": { 493 | "version": "0.16.16", 494 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.16.tgz", 495 | "integrity": "sha512-bYaocE1/PTMRmkgSckZ0D0Xn2nox8v2qlk+MVVqm+VECNKDdZvghVZtH41dNtBbwADSvA6qkCHGYeWm9LrNCBw==", 496 | "cpu": [ 497 | "arm" 498 | ], 499 | "dev": true, 500 | "optional": true, 501 | "os": [ 502 | "linux" 503 | ], 504 | "engines": { 505 | "node": ">=12" 506 | } 507 | }, 508 | "node_modules/@esbuild/linux-arm64": { 509 | "version": "0.16.16", 510 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.16.tgz", 511 | "integrity": "sha512-N3u6BBbCVY3xeP2D8Db7QY8I+nZ+2AgOopUIqk+5yCoLnsWkcVxD2ay5E9iIdvApFi1Vg1lZiiwaVp8bOpAc4A==", 512 | "cpu": [ 513 | "arm64" 514 | ], 515 | "dev": true, 516 | "optional": true, 517 | "os": [ 518 | "linux" 519 | ], 520 | "engines": { 521 | "node": ">=12" 522 | } 523 | }, 524 | "node_modules/@esbuild/linux-ia32": { 525 | "version": "0.16.16", 526 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.16.tgz", 527 | "integrity": "sha512-dxjqLKUW8GqGemoRT9v8IgHk+T4tRm1rn1gUcArsp26W9EkK/27VSjBVUXhEG5NInHZ92JaQ3SSMdTwv/r9a2A==", 528 | "cpu": [ 529 | "ia32" 530 | ], 531 | "dev": true, 532 | "optional": true, 533 | "os": [ 534 | "linux" 535 | ], 536 | "engines": { 537 | "node": ">=12" 538 | } 539 | }, 540 | "node_modules/@esbuild/linux-loong64": { 541 | "version": "0.16.16", 542 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.16.tgz", 543 | "integrity": "sha512-MdUFggHjRiCCwNE9+1AibewoNq6wf94GLB9Q9aXwl+a75UlRmbRK3h6WJyrSGA6ZstDJgaD2wiTSP7tQNUYxwA==", 544 | "cpu": [ 545 | "loong64" 546 | ], 547 | "dev": true, 548 | "optional": true, 549 | "os": [ 550 | "linux" 551 | ], 552 | "engines": { 553 | "node": ">=12" 554 | } 555 | }, 556 | "node_modules/@esbuild/linux-mips64el": { 557 | "version": "0.16.16", 558 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.16.tgz", 559 | "integrity": "sha512-CO3YmO7jYMlGqGoeFeKzdwx/bx8Vtq/SZaMAi+ZLDUnDUdfC7GmGwXzIwDJ70Sg+P9pAemjJyJ1icKJ9R3q/Fg==", 560 | "cpu": [ 561 | "mips64el" 562 | ], 563 | "dev": true, 564 | "optional": true, 565 | "os": [ 566 | "linux" 567 | ], 568 | "engines": { 569 | "node": ">=12" 570 | } 571 | }, 572 | "node_modules/@esbuild/linux-ppc64": { 573 | "version": "0.16.16", 574 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.16.tgz", 575 | "integrity": "sha512-DSl5Czh5hCy/7azX0Wl9IdzPHX2H8clC6G87tBnZnzUpNgRxPFhfmArbaHoAysu4JfqCqbB/33u/GL9dUgCBAw==", 576 | "cpu": [ 577 | "ppc64" 578 | ], 579 | "dev": true, 580 | "optional": true, 581 | "os": [ 582 | "linux" 583 | ], 584 | "engines": { 585 | "node": ">=12" 586 | } 587 | }, 588 | "node_modules/@esbuild/linux-riscv64": { 589 | "version": "0.16.16", 590 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.16.tgz", 591 | "integrity": "sha512-sSVVMEXsqf1fQu0j7kkhXMViroixU5XoaJXl1u/u+jbXvvhhCt9YvA/B6VM3aM/77HuRQ94neS5bcisijGnKFQ==", 592 | "cpu": [ 593 | "riscv64" 594 | ], 595 | "dev": true, 596 | "optional": true, 597 | "os": [ 598 | "linux" 599 | ], 600 | "engines": { 601 | "node": ">=12" 602 | } 603 | }, 604 | "node_modules/@esbuild/linux-s390x": { 605 | "version": "0.16.16", 606 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.16.tgz", 607 | "integrity": "sha512-jRqBCre9gZGoCdCN/UWCCMwCMsOg65IpY9Pyj56mKCF5zXy9d60kkNRdDN6YXGjr3rzcC4DXnS/kQVCGcC4yPQ==", 608 | "cpu": [ 609 | "s390x" 610 | ], 611 | "dev": true, 612 | "optional": true, 613 | "os": [ 614 | "linux" 615 | ], 616 | "engines": { 617 | "node": ">=12" 618 | } 619 | }, 620 | "node_modules/@esbuild/linux-x64": { 621 | "version": "0.16.16", 622 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.16.tgz", 623 | "integrity": "sha512-G1+09TopOzo59/55lk5Q0UokghYLyHTKKzD5lXsAOOlGDbieGEFJpJBr3BLDbf7cz89KX04sBeExAR/pL/26sA==", 624 | "cpu": [ 625 | "x64" 626 | ], 627 | "dev": true, 628 | "optional": true, 629 | "os": [ 630 | "linux" 631 | ], 632 | "engines": { 633 | "node": ">=12" 634 | } 635 | }, 636 | "node_modules/@esbuild/netbsd-x64": { 637 | "version": "0.16.16", 638 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.16.tgz", 639 | "integrity": "sha512-xwjGJB5wwDEujLaJIrSMRqWkbigALpBNcsF9SqszoNKc+wY4kPTdKrSxiY5ik3IatojePP+WV108MvF6q6np4w==", 640 | "cpu": [ 641 | "x64" 642 | ], 643 | "dev": true, 644 | "optional": true, 645 | "os": [ 646 | "netbsd" 647 | ], 648 | "engines": { 649 | "node": ">=12" 650 | } 651 | }, 652 | "node_modules/@esbuild/openbsd-x64": { 653 | "version": "0.16.16", 654 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.16.tgz", 655 | "integrity": "sha512-yeERkoxG2nR2oxO5n+Ms7MsCeNk23zrby2GXCqnfCpPp7KNc0vxaaacIxb21wPMfXXRhGBrNP4YLIupUBrWdlg==", 656 | "cpu": [ 657 | "x64" 658 | ], 659 | "dev": true, 660 | "optional": true, 661 | "os": [ 662 | "openbsd" 663 | ], 664 | "engines": { 665 | "node": ">=12" 666 | } 667 | }, 668 | "node_modules/@esbuild/sunos-x64": { 669 | "version": "0.16.16", 670 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.16.tgz", 671 | "integrity": "sha512-nHfbEym0IObXPhtX6Va3H5GaKBty2kdhlAhKmyCj9u255ktAj0b1YACUs9j5H88NRn9cJCthD1Ik/k9wn8YKVg==", 672 | "cpu": [ 673 | "x64" 674 | ], 675 | "dev": true, 676 | "optional": true, 677 | "os": [ 678 | "sunos" 679 | ], 680 | "engines": { 681 | "node": ">=12" 682 | } 683 | }, 684 | "node_modules/@esbuild/win32-arm64": { 685 | "version": "0.16.16", 686 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.16.tgz", 687 | "integrity": "sha512-pdD+M1ZOFy4hE15ZyPX09fd5g4DqbbL1wXGY90YmleVS6Y5YlraW4BvHjim/X/4yuCpTsAFvsT4Nca2lbyDH/A==", 688 | "cpu": [ 689 | "arm64" 690 | ], 691 | "dev": true, 692 | "optional": true, 693 | "os": [ 694 | "win32" 695 | ], 696 | "engines": { 697 | "node": ">=12" 698 | } 699 | }, 700 | "node_modules/@esbuild/win32-ia32": { 701 | "version": "0.16.16", 702 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.16.tgz", 703 | "integrity": "sha512-IPEMfU9p0c3Vb8PqxaPX6BM9rYwlTZGYOf9u+kMdhoILZkVKEjq6PKZO0lB+isojWwAnAqh4ZxshD96njTXajg==", 704 | "cpu": [ 705 | "ia32" 706 | ], 707 | "dev": true, 708 | "optional": true, 709 | "os": [ 710 | "win32" 711 | ], 712 | "engines": { 713 | "node": ">=12" 714 | } 715 | }, 716 | "node_modules/@esbuild/win32-x64": { 717 | "version": "0.16.16", 718 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.16.tgz", 719 | "integrity": "sha512-1YYpoJ39WV/2bnShPwgdzJklc+XS0bysN6Tpnt1cWPdeoKOG4RMEY1g7i534QxXX/rPvNx/NLJQTTCeORYzipg==", 720 | "cpu": [ 721 | "x64" 722 | ], 723 | "dev": true, 724 | "optional": true, 725 | "os": [ 726 | "win32" 727 | ], 728 | "engines": { 729 | "node": ">=12" 730 | } 731 | }, 732 | "node_modules/@inertiajs/inertia": { 733 | "version": "0.11.1", 734 | "resolved": "https://registry.npmjs.org/@inertiajs/inertia/-/inertia-0.11.1.tgz", 735 | "integrity": "sha512-btmV53c54oW4Z9XF0YyTdIUnM7ue0ONy3/KJOz6J1C5CYIwimiKfDMpz8ZbGJuxS+SPdOlNsqj2ZhlHslpJRZg==", 736 | "dev": true, 737 | "dependencies": { 738 | "axios": "^0.21.1", 739 | "deepmerge": "^4.0.0", 740 | "qs": "^6.9.0" 741 | } 742 | }, 743 | "node_modules/@inertiajs/inertia-svelte": { 744 | "version": "0.8.0", 745 | "resolved": "https://registry.npmjs.org/@inertiajs/inertia-svelte/-/inertia-svelte-0.8.0.tgz", 746 | "integrity": "sha512-kitWdsYNUddJlhBKPjOpJPhzOZgcAD4DkIVS2eSPKgCdrbincHHYnj8KlPsIJm8H6frQsB1Wf2sWzblJKS6Mmg==", 747 | "dev": true, 748 | "dependencies": { 749 | "lodash.isequal": "^4.5.0" 750 | }, 751 | "peerDependencies": { 752 | "@inertiajs/inertia": "^0.11.0", 753 | "svelte": "^3.20.0" 754 | } 755 | }, 756 | "node_modules/@inertiajs/progress": { 757 | "version": "0.2.7", 758 | "resolved": "https://registry.npmjs.org/@inertiajs/progress/-/progress-0.2.7.tgz", 759 | "integrity": "sha512-zxadfLlBPIUvTE9g5k71V/Ayzo8P9kEp4hV4UKywCC2kURufxV7bycbZqU1GeMCFGDT+VRrjXNl676Pwwa1HoQ==", 760 | "dev": true, 761 | "dependencies": { 762 | "nprogress": "^0.2.0" 763 | }, 764 | "peerDependencies": { 765 | "@inertiajs/inertia": "^0.6.0 || ^0.7.0 || ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0" 766 | } 767 | }, 768 | "node_modules/@jridgewell/gen-mapping": { 769 | "version": "0.1.1", 770 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", 771 | "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", 772 | "dev": true, 773 | "peer": true, 774 | "dependencies": { 775 | "@jridgewell/set-array": "^1.0.0", 776 | "@jridgewell/sourcemap-codec": "^1.4.10" 777 | }, 778 | "engines": { 779 | "node": ">=6.0.0" 780 | } 781 | }, 782 | "node_modules/@jridgewell/resolve-uri": { 783 | "version": "3.1.0", 784 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", 785 | "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", 786 | "dev": true, 787 | "peer": true, 788 | "engines": { 789 | "node": ">=6.0.0" 790 | } 791 | }, 792 | "node_modules/@jridgewell/set-array": { 793 | "version": "1.1.2", 794 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", 795 | "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", 796 | "dev": true, 797 | "peer": true, 798 | "engines": { 799 | "node": ">=6.0.0" 800 | } 801 | }, 802 | "node_modules/@jridgewell/sourcemap-codec": { 803 | "version": "1.4.14", 804 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", 805 | "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", 806 | "dev": true 807 | }, 808 | "node_modules/@jridgewell/trace-mapping": { 809 | "version": "0.3.17", 810 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", 811 | "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", 812 | "dev": true, 813 | "peer": true, 814 | "dependencies": { 815 | "@jridgewell/resolve-uri": "3.1.0", 816 | "@jridgewell/sourcemap-codec": "1.4.14" 817 | } 818 | }, 819 | "node_modules/@sveltejs/vite-plugin-svelte": { 820 | "version": "2.0.2", 821 | "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.0.2.tgz", 822 | "integrity": "sha512-xCEan0/NNpQuL0l5aS42FjwQ6wwskdxC3pW1OeFtEKNZwRg7Evro9lac9HesGP6TdFsTv2xMes5ASQVKbCacxg==", 823 | "dev": true, 824 | "dependencies": { 825 | "debug": "^4.3.4", 826 | "deepmerge": "^4.2.2", 827 | "kleur": "^4.1.5", 828 | "magic-string": "^0.27.0", 829 | "svelte-hmr": "^0.15.1", 830 | "vitefu": "^0.2.3" 831 | }, 832 | "engines": { 833 | "node": "^14.18.0 || >= 16" 834 | }, 835 | "peerDependencies": { 836 | "svelte": "^3.54.0", 837 | "vite": "^4.0.0" 838 | } 839 | }, 840 | "node_modules/ansi-styles": { 841 | "version": "3.2.1", 842 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 843 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 844 | "dev": true, 845 | "peer": true, 846 | "dependencies": { 847 | "color-convert": "^1.9.0" 848 | }, 849 | "engines": { 850 | "node": ">=4" 851 | } 852 | }, 853 | "node_modules/axios": { 854 | "version": "0.21.4", 855 | "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", 856 | "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", 857 | "dev": true, 858 | "dependencies": { 859 | "follow-redirects": "^1.14.0" 860 | } 861 | }, 862 | "node_modules/browserslist": { 863 | "version": "4.21.4", 864 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", 865 | "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", 866 | "dev": true, 867 | "funding": [ 868 | { 869 | "type": "opencollective", 870 | "url": "https://opencollective.com/browserslist" 871 | }, 872 | { 873 | "type": "tidelift", 874 | "url": "https://tidelift.com/funding/github/npm/browserslist" 875 | } 876 | ], 877 | "peer": true, 878 | "dependencies": { 879 | "caniuse-lite": "^1.0.30001400", 880 | "electron-to-chromium": "^1.4.251", 881 | "node-releases": "^2.0.6", 882 | "update-browserslist-db": "^1.0.9" 883 | }, 884 | "bin": { 885 | "browserslist": "cli.js" 886 | }, 887 | "engines": { 888 | "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" 889 | } 890 | }, 891 | "node_modules/call-bind": { 892 | "version": "1.0.2", 893 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 894 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 895 | "dev": true, 896 | "dependencies": { 897 | "function-bind": "^1.1.1", 898 | "get-intrinsic": "^1.0.2" 899 | }, 900 | "funding": { 901 | "url": "https://github.com/sponsors/ljharb" 902 | } 903 | }, 904 | "node_modules/caniuse-lite": { 905 | "version": "1.0.30001442", 906 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001442.tgz", 907 | "integrity": "sha512-239m03Pqy0hwxYPYR5JwOIxRJfLTWtle9FV8zosfV5pHg+/51uD4nxcUlM8+mWWGfwKtt8lJNHnD3cWw9VZ6ow==", 908 | "dev": true, 909 | "funding": [ 910 | { 911 | "type": "opencollective", 912 | "url": "https://opencollective.com/browserslist" 913 | }, 914 | { 915 | "type": "tidelift", 916 | "url": "https://tidelift.com/funding/github/npm/caniuse-lite" 917 | } 918 | ], 919 | "peer": true 920 | }, 921 | "node_modules/chalk": { 922 | "version": "2.4.2", 923 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 924 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 925 | "dev": true, 926 | "peer": true, 927 | "dependencies": { 928 | "ansi-styles": "^3.2.1", 929 | "escape-string-regexp": "^1.0.5", 930 | "supports-color": "^5.3.0" 931 | }, 932 | "engines": { 933 | "node": ">=4" 934 | } 935 | }, 936 | "node_modules/color-convert": { 937 | "version": "1.9.3", 938 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 939 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 940 | "dev": true, 941 | "peer": true, 942 | "dependencies": { 943 | "color-name": "1.1.3" 944 | } 945 | }, 946 | "node_modules/color-name": { 947 | "version": "1.1.3", 948 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 949 | "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", 950 | "dev": true, 951 | "peer": true 952 | }, 953 | "node_modules/convert-source-map": { 954 | "version": "1.9.0", 955 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", 956 | "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", 957 | "dev": true, 958 | "peer": true 959 | }, 960 | "node_modules/debug": { 961 | "version": "4.3.4", 962 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 963 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 964 | "dev": true, 965 | "dependencies": { 966 | "ms": "2.1.2" 967 | }, 968 | "engines": { 969 | "node": ">=6.0" 970 | }, 971 | "peerDependenciesMeta": { 972 | "supports-color": { 973 | "optional": true 974 | } 975 | } 976 | }, 977 | "node_modules/deepmerge": { 978 | "version": "4.2.2", 979 | "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", 980 | "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", 981 | "dev": true, 982 | "engines": { 983 | "node": ">=0.10.0" 984 | } 985 | }, 986 | "node_modules/electron-to-chromium": { 987 | "version": "1.4.284", 988 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", 989 | "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", 990 | "dev": true, 991 | "peer": true 992 | }, 993 | "node_modules/esbuild": { 994 | "version": "0.16.16", 995 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.16.tgz", 996 | "integrity": "sha512-24JyKq10KXM5EBIgPotYIJ2fInNWVVqflv3gicIyQqfmUqi4HvDW1VR790cBgLJHCl96Syy7lhoz7tLFcmuRmg==", 997 | "dev": true, 998 | "hasInstallScript": true, 999 | "bin": { 1000 | "esbuild": "bin/esbuild" 1001 | }, 1002 | "engines": { 1003 | "node": ">=12" 1004 | }, 1005 | "optionalDependencies": { 1006 | "@esbuild/android-arm": "0.16.16", 1007 | "@esbuild/android-arm64": "0.16.16", 1008 | "@esbuild/android-x64": "0.16.16", 1009 | "@esbuild/darwin-arm64": "0.16.16", 1010 | "@esbuild/darwin-x64": "0.16.16", 1011 | "@esbuild/freebsd-arm64": "0.16.16", 1012 | "@esbuild/freebsd-x64": "0.16.16", 1013 | "@esbuild/linux-arm": "0.16.16", 1014 | "@esbuild/linux-arm64": "0.16.16", 1015 | "@esbuild/linux-ia32": "0.16.16", 1016 | "@esbuild/linux-loong64": "0.16.16", 1017 | "@esbuild/linux-mips64el": "0.16.16", 1018 | "@esbuild/linux-ppc64": "0.16.16", 1019 | "@esbuild/linux-riscv64": "0.16.16", 1020 | "@esbuild/linux-s390x": "0.16.16", 1021 | "@esbuild/linux-x64": "0.16.16", 1022 | "@esbuild/netbsd-x64": "0.16.16", 1023 | "@esbuild/openbsd-x64": "0.16.16", 1024 | "@esbuild/sunos-x64": "0.16.16", 1025 | "@esbuild/win32-arm64": "0.16.16", 1026 | "@esbuild/win32-ia32": "0.16.16", 1027 | "@esbuild/win32-x64": "0.16.16" 1028 | } 1029 | }, 1030 | "node_modules/escalade": { 1031 | "version": "3.1.1", 1032 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 1033 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 1034 | "dev": true, 1035 | "peer": true, 1036 | "engines": { 1037 | "node": ">=6" 1038 | } 1039 | }, 1040 | "node_modules/escape-string-regexp": { 1041 | "version": "1.0.5", 1042 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 1043 | "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", 1044 | "dev": true, 1045 | "peer": true, 1046 | "engines": { 1047 | "node": ">=0.8.0" 1048 | } 1049 | }, 1050 | "node_modules/follow-redirects": { 1051 | "version": "1.15.2", 1052 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", 1053 | "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", 1054 | "dev": true, 1055 | "funding": [ 1056 | { 1057 | "type": "individual", 1058 | "url": "https://github.com/sponsors/RubenVerborgh" 1059 | } 1060 | ], 1061 | "engines": { 1062 | "node": ">=4.0" 1063 | }, 1064 | "peerDependenciesMeta": { 1065 | "debug": { 1066 | "optional": true 1067 | } 1068 | } 1069 | }, 1070 | "node_modules/fsevents": { 1071 | "version": "2.3.2", 1072 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 1073 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 1074 | "dev": true, 1075 | "hasInstallScript": true, 1076 | "optional": true, 1077 | "os": [ 1078 | "darwin" 1079 | ], 1080 | "engines": { 1081 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 1082 | } 1083 | }, 1084 | "node_modules/function-bind": { 1085 | "version": "1.1.1", 1086 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1087 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 1088 | "dev": true 1089 | }, 1090 | "node_modules/gensync": { 1091 | "version": "1.0.0-beta.2", 1092 | "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", 1093 | "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", 1094 | "dev": true, 1095 | "peer": true, 1096 | "engines": { 1097 | "node": ">=6.9.0" 1098 | } 1099 | }, 1100 | "node_modules/get-intrinsic": { 1101 | "version": "1.1.3", 1102 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", 1103 | "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", 1104 | "dev": true, 1105 | "dependencies": { 1106 | "function-bind": "^1.1.1", 1107 | "has": "^1.0.3", 1108 | "has-symbols": "^1.0.3" 1109 | }, 1110 | "funding": { 1111 | "url": "https://github.com/sponsors/ljharb" 1112 | } 1113 | }, 1114 | "node_modules/globals": { 1115 | "version": "11.12.0", 1116 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", 1117 | "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", 1118 | "dev": true, 1119 | "peer": true, 1120 | "engines": { 1121 | "node": ">=4" 1122 | } 1123 | }, 1124 | "node_modules/has": { 1125 | "version": "1.0.3", 1126 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1127 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1128 | "dev": true, 1129 | "dependencies": { 1130 | "function-bind": "^1.1.1" 1131 | }, 1132 | "engines": { 1133 | "node": ">= 0.4.0" 1134 | } 1135 | }, 1136 | "node_modules/has-flag": { 1137 | "version": "3.0.0", 1138 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 1139 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", 1140 | "dev": true, 1141 | "peer": true, 1142 | "engines": { 1143 | "node": ">=4" 1144 | } 1145 | }, 1146 | "node_modules/has-symbols": { 1147 | "version": "1.0.3", 1148 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 1149 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 1150 | "dev": true, 1151 | "engines": { 1152 | "node": ">= 0.4" 1153 | }, 1154 | "funding": { 1155 | "url": "https://github.com/sponsors/ljharb" 1156 | } 1157 | }, 1158 | "node_modules/is-core-module": { 1159 | "version": "2.11.0", 1160 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", 1161 | "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", 1162 | "dev": true, 1163 | "dependencies": { 1164 | "has": "^1.0.3" 1165 | }, 1166 | "funding": { 1167 | "url": "https://github.com/sponsors/ljharb" 1168 | } 1169 | }, 1170 | "node_modules/js-tokens": { 1171 | "version": "4.0.0", 1172 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1173 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 1174 | "dev": true, 1175 | "peer": true 1176 | }, 1177 | "node_modules/jsesc": { 1178 | "version": "2.5.2", 1179 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", 1180 | "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", 1181 | "dev": true, 1182 | "peer": true, 1183 | "bin": { 1184 | "jsesc": "bin/jsesc" 1185 | }, 1186 | "engines": { 1187 | "node": ">=4" 1188 | } 1189 | }, 1190 | "node_modules/json5": { 1191 | "version": "2.2.3", 1192 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", 1193 | "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", 1194 | "dev": true, 1195 | "peer": true, 1196 | "bin": { 1197 | "json5": "lib/cli.js" 1198 | }, 1199 | "engines": { 1200 | "node": ">=6" 1201 | } 1202 | }, 1203 | "node_modules/kleur": { 1204 | "version": "4.1.5", 1205 | "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", 1206 | "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", 1207 | "dev": true, 1208 | "engines": { 1209 | "node": ">=6" 1210 | } 1211 | }, 1212 | "node_modules/lodash.isequal": { 1213 | "version": "4.5.0", 1214 | "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", 1215 | "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", 1216 | "dev": true 1217 | }, 1218 | "node_modules/lru-cache": { 1219 | "version": "5.1.1", 1220 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", 1221 | "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", 1222 | "dev": true, 1223 | "peer": true, 1224 | "dependencies": { 1225 | "yallist": "^3.0.2" 1226 | } 1227 | }, 1228 | "node_modules/magic-string": { 1229 | "version": "0.27.0", 1230 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", 1231 | "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", 1232 | "dev": true, 1233 | "dependencies": { 1234 | "@jridgewell/sourcemap-codec": "^1.4.13" 1235 | }, 1236 | "engines": { 1237 | "node": ">=12" 1238 | } 1239 | }, 1240 | "node_modules/ms": { 1241 | "version": "2.1.2", 1242 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1243 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1244 | "dev": true 1245 | }, 1246 | "node_modules/nanoid": { 1247 | "version": "3.3.4", 1248 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", 1249 | "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", 1250 | "dev": true, 1251 | "bin": { 1252 | "nanoid": "bin/nanoid.cjs" 1253 | }, 1254 | "engines": { 1255 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 1256 | } 1257 | }, 1258 | "node_modules/node-releases": { 1259 | "version": "2.0.8", 1260 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.8.tgz", 1261 | "integrity": "sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==", 1262 | "dev": true, 1263 | "peer": true 1264 | }, 1265 | "node_modules/nprogress": { 1266 | "version": "0.2.0", 1267 | "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", 1268 | "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==", 1269 | "dev": true 1270 | }, 1271 | "node_modules/object-inspect": { 1272 | "version": "1.12.2", 1273 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", 1274 | "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", 1275 | "dev": true, 1276 | "funding": { 1277 | "url": "https://github.com/sponsors/ljharb" 1278 | } 1279 | }, 1280 | "node_modules/path-parse": { 1281 | "version": "1.0.7", 1282 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1283 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 1284 | "dev": true 1285 | }, 1286 | "node_modules/picocolors": { 1287 | "version": "1.0.0", 1288 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 1289 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 1290 | "dev": true 1291 | }, 1292 | "node_modules/postcss": { 1293 | "version": "8.4.21", 1294 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", 1295 | "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", 1296 | "dev": true, 1297 | "funding": [ 1298 | { 1299 | "type": "opencollective", 1300 | "url": "https://opencollective.com/postcss/" 1301 | }, 1302 | { 1303 | "type": "tidelift", 1304 | "url": "https://tidelift.com/funding/github/npm/postcss" 1305 | } 1306 | ], 1307 | "dependencies": { 1308 | "nanoid": "^3.3.4", 1309 | "picocolors": "^1.0.0", 1310 | "source-map-js": "^1.0.2" 1311 | }, 1312 | "engines": { 1313 | "node": "^10 || ^12 || >=14" 1314 | } 1315 | }, 1316 | "node_modules/qs": { 1317 | "version": "6.11.0", 1318 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", 1319 | "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", 1320 | "dev": true, 1321 | "dependencies": { 1322 | "side-channel": "^1.0.4" 1323 | }, 1324 | "engines": { 1325 | "node": ">=0.6" 1326 | }, 1327 | "funding": { 1328 | "url": "https://github.com/sponsors/ljharb" 1329 | } 1330 | }, 1331 | "node_modules/resolve": { 1332 | "version": "1.22.1", 1333 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", 1334 | "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", 1335 | "dev": true, 1336 | "dependencies": { 1337 | "is-core-module": "^2.9.0", 1338 | "path-parse": "^1.0.7", 1339 | "supports-preserve-symlinks-flag": "^1.0.0" 1340 | }, 1341 | "bin": { 1342 | "resolve": "bin/resolve" 1343 | }, 1344 | "funding": { 1345 | "url": "https://github.com/sponsors/ljharb" 1346 | } 1347 | }, 1348 | "node_modules/rollup": { 1349 | "version": "3.9.1", 1350 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.9.1.tgz", 1351 | "integrity": "sha512-GswCYHXftN8ZKGVgQhTFUJB/NBXxrRGgO2NCy6E8s1rwEJ4Q9/VttNqcYfEvx4dTo4j58YqdC3OVztPzlKSX8w==", 1352 | "dev": true, 1353 | "bin": { 1354 | "rollup": "dist/bin/rollup" 1355 | }, 1356 | "engines": { 1357 | "node": ">=14.18.0", 1358 | "npm": ">=8.0.0" 1359 | }, 1360 | "optionalDependencies": { 1361 | "fsevents": "~2.3.2" 1362 | } 1363 | }, 1364 | "node_modules/semver": { 1365 | "version": "6.3.0", 1366 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 1367 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 1368 | "dev": true, 1369 | "peer": true, 1370 | "bin": { 1371 | "semver": "bin/semver.js" 1372 | } 1373 | }, 1374 | "node_modules/side-channel": { 1375 | "version": "1.0.4", 1376 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 1377 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 1378 | "dev": true, 1379 | "dependencies": { 1380 | "call-bind": "^1.0.0", 1381 | "get-intrinsic": "^1.0.2", 1382 | "object-inspect": "^1.9.0" 1383 | }, 1384 | "funding": { 1385 | "url": "https://github.com/sponsors/ljharb" 1386 | } 1387 | }, 1388 | "node_modules/source-map-js": { 1389 | "version": "1.0.2", 1390 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 1391 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 1392 | "dev": true, 1393 | "engines": { 1394 | "node": ">=0.10.0" 1395 | } 1396 | }, 1397 | "node_modules/supports-color": { 1398 | "version": "5.5.0", 1399 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1400 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1401 | "dev": true, 1402 | "peer": true, 1403 | "dependencies": { 1404 | "has-flag": "^3.0.0" 1405 | }, 1406 | "engines": { 1407 | "node": ">=4" 1408 | } 1409 | }, 1410 | "node_modules/supports-preserve-symlinks-flag": { 1411 | "version": "1.0.0", 1412 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 1413 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 1414 | "dev": true, 1415 | "engines": { 1416 | "node": ">= 0.4" 1417 | }, 1418 | "funding": { 1419 | "url": "https://github.com/sponsors/ljharb" 1420 | } 1421 | }, 1422 | "node_modules/svelte": { 1423 | "version": "3.55.1", 1424 | "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.55.1.tgz", 1425 | "integrity": "sha512-S+87/P0Ve67HxKkEV23iCdAh/SX1xiSfjF1HOglno/YTbSTW7RniICMCofWGdJJbdjw3S+0PfFb1JtGfTXE0oQ==", 1426 | "dev": true, 1427 | "engines": { 1428 | "node": ">= 8" 1429 | } 1430 | }, 1431 | "node_modules/svelte-hmr": { 1432 | "version": "0.15.1", 1433 | "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.1.tgz", 1434 | "integrity": "sha512-BiKB4RZ8YSwRKCNVdNxK/GfY+r4Kjgp9jCLEy0DuqAKfmQtpL38cQK3afdpjw4sqSs4PLi3jIPJIFp259NkZtA==", 1435 | "dev": true, 1436 | "engines": { 1437 | "node": "^12.20 || ^14.13.1 || >= 16" 1438 | }, 1439 | "peerDependencies": { 1440 | "svelte": ">=3.19.0" 1441 | } 1442 | }, 1443 | "node_modules/to-fast-properties": { 1444 | "version": "2.0.0", 1445 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", 1446 | "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", 1447 | "dev": true, 1448 | "peer": true, 1449 | "engines": { 1450 | "node": ">=4" 1451 | } 1452 | }, 1453 | "node_modules/update-browserslist-db": { 1454 | "version": "1.0.10", 1455 | "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", 1456 | "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", 1457 | "dev": true, 1458 | "funding": [ 1459 | { 1460 | "type": "opencollective", 1461 | "url": "https://opencollective.com/browserslist" 1462 | }, 1463 | { 1464 | "type": "tidelift", 1465 | "url": "https://tidelift.com/funding/github/npm/browserslist" 1466 | } 1467 | ], 1468 | "peer": true, 1469 | "dependencies": { 1470 | "escalade": "^3.1.1", 1471 | "picocolors": "^1.0.0" 1472 | }, 1473 | "bin": { 1474 | "browserslist-lint": "cli.js" 1475 | }, 1476 | "peerDependencies": { 1477 | "browserslist": ">= 4.21.0" 1478 | } 1479 | }, 1480 | "node_modules/vite": { 1481 | "version": "4.0.4", 1482 | "resolved": "https://registry.npmjs.org/vite/-/vite-4.0.4.tgz", 1483 | "integrity": "sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==", 1484 | "dev": true, 1485 | "dependencies": { 1486 | "esbuild": "^0.16.3", 1487 | "postcss": "^8.4.20", 1488 | "resolve": "^1.22.1", 1489 | "rollup": "^3.7.0" 1490 | }, 1491 | "bin": { 1492 | "vite": "bin/vite.js" 1493 | }, 1494 | "engines": { 1495 | "node": "^14.18.0 || >=16.0.0" 1496 | }, 1497 | "optionalDependencies": { 1498 | "fsevents": "~2.3.2" 1499 | }, 1500 | "peerDependencies": { 1501 | "@types/node": ">= 14", 1502 | "less": "*", 1503 | "sass": "*", 1504 | "stylus": "*", 1505 | "sugarss": "*", 1506 | "terser": "^5.4.0" 1507 | }, 1508 | "peerDependenciesMeta": { 1509 | "@types/node": { 1510 | "optional": true 1511 | }, 1512 | "less": { 1513 | "optional": true 1514 | }, 1515 | "sass": { 1516 | "optional": true 1517 | }, 1518 | "stylus": { 1519 | "optional": true 1520 | }, 1521 | "sugarss": { 1522 | "optional": true 1523 | }, 1524 | "terser": { 1525 | "optional": true 1526 | } 1527 | } 1528 | }, 1529 | "node_modules/vitefu": { 1530 | "version": "0.2.4", 1531 | "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.4.tgz", 1532 | "integrity": "sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==", 1533 | "dev": true, 1534 | "peerDependencies": { 1535 | "vite": "^3.0.0 || ^4.0.0" 1536 | }, 1537 | "peerDependenciesMeta": { 1538 | "vite": { 1539 | "optional": true 1540 | } 1541 | } 1542 | }, 1543 | "node_modules/yallist": { 1544 | "version": "3.1.1", 1545 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", 1546 | "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", 1547 | "dev": true, 1548 | "peer": true 1549 | } 1550 | } 1551 | } 1552 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "my-vue-app", 3 | "private": true, 4 | "version": "0.0.0", 5 | "type": "module", 6 | "scripts": { 7 | "dev": "vite", 8 | "build": "vite build", 9 | "preview": "vite preview" 10 | }, 11 | "devDependencies": { 12 | "@sveltejs/vite-plugin-svelte": "^2.0.0", 13 | "svelte": "^3.54.0", 14 | "vite": "^4.0.0", 15 | "@babel/plugin-syntax-dynamic-import": "^7.8.3", 16 | "@inertiajs/inertia": "^0.11.1", 17 | "@inertiajs/inertia-svelte": "^0.8.0", 18 | "@inertiajs/progress": "^0.2.7" 19 | } 20 | } -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | asgiref==3.6.0 2 | Django==4.1.5 3 | django-configurations==2.4 4 | sqlparse==0.4.3 5 | inertia-django==0.5.2 6 | django-vite==2.0.2 7 | colorlog==6.7.0 -------------------------------------------------------------------------------- /sample_app/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progressify/django-inertia-svelte-template-starter/eb902ba64c95ec647eb35160bb9d8c4e41f81e3f/sample_app/__init__.py -------------------------------------------------------------------------------- /sample_app/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | # Register your models here. 4 | -------------------------------------------------------------------------------- /sample_app/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class SampleAppConfig(AppConfig): 5 | default_auto_field = 'django.db.models.BigAutoField' 6 | name = 'sample_app' 7 | -------------------------------------------------------------------------------- /sample_app/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progressify/django-inertia-svelte-template-starter/eb902ba64c95ec647eb35160bb9d8c4e41f81e3f/sample_app/migrations/__init__.py -------------------------------------------------------------------------------- /sample_app/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | 3 | # Create your models here. 4 | -------------------------------------------------------------------------------- /sample_app/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /sample_app/urls.py: -------------------------------------------------------------------------------- 1 | from django.urls import path 2 | from sample_app import views 3 | 4 | 5 | app_name = 'sample_app' 6 | 7 | urlpatterns = [ 8 | path('', views.Index.as_view(), name='index'), 9 | path('about/', views.About.as_view(), name='about'), 10 | ] 11 | -------------------------------------------------------------------------------- /sample_app/views.py: -------------------------------------------------------------------------------- 1 | from django.views import View 2 | from inertia import render 3 | import logging 4 | 5 | 6 | class Index(View): 7 | def get(self, request): 8 | logger = logging.getLogger("Index") 9 | logger.debug("DEBUG") 10 | logger.info("INFO") 11 | logger.error("ERROR") 12 | logger.warning("WARNING") 13 | logger.critical("CRITICAL HIT! ") 14 | return render(request, 'sample_app/index', props={ 15 | 'events': [ 16 | 'Milano', 17 | 'Napoli', 18 | ], 19 | 'page_name': 'Home' 20 | }) 21 | 22 | 23 | class About(View): 24 | def get(self, request): 25 | return render(request, 'sample_app/about', props={ 26 | 'events': [ 27 | 'Nola', 28 | 'Cimitile', 29 | ], 30 | 'page_name': 'About us' 31 | }) 32 | -------------------------------------------------------------------------------- /static/assets/css/admin.css: -------------------------------------------------------------------------------- 1 | /* (A) GLOBAL */ 2 | * { 3 | font-family: Arial, Helvetica, sans-serif; 4 | box-sizing: border-box; 5 | } 6 | body { 7 | padding: 0; margin: 0; 8 | } 9 | #app { 10 | display: flex; 11 | min-height: 100vh; 12 | padding: 0; margin: 0; 13 | } 14 | 15 | /* (B) SIDEBAR */ 16 | /* (B1) SIDEBAR ITSELF */ 17 | #pgside { 18 | width: 200px; 19 | flex-shrink: 0; 20 | transition: width 0.2s; 21 | background: #283039; 22 | } 23 | 24 | /* (B2) USER OR BRANDING */ 25 | #pgside #pguser { 26 | display: flex; 27 | align-items: center; 28 | padding: 10px 5px; 29 | } 30 | #pgside #pguser img { 31 | width: 50px; 32 | margin-right: 5px; 33 | border-radius: 50% 34 | } 35 | 36 | /* (B3) SIDEBAR ITEMS */ 37 | #pgside, #pgside a { color: #fff; } 38 | #pgside a { 39 | display: block; 40 | padding: 20px; 41 | width: 100%; 42 | text-decoration: none; 43 | cursor: pointer; 44 | } 45 | #pgside a.current { background: #7c1919; } 46 | #pgside a:hover { background: #9b2323; } 47 | 48 | /* (B4) SIDEBAR ICONS & TEXT */ 49 | #pgside i.ico, #pgside i.txt { font-style: normal; } 50 | #pgside i.ico { 51 | font-size: 1.1em; 52 | margin-right: 10px; 53 | } 54 | 55 | /* (B5) SMALL SCREEN TRANSFORMATION */ 56 | @media screen and (max-width:768px) { 57 | #pgside { width: 70px; } 58 | #pgside #pguser { justify-content: center; } 59 | #pgside a { 60 | text-align: center; 61 | padding: 20px 0; 62 | } 63 | #pgside i.ico { 64 | font-size: 1.5em; 65 | margin-right: 0; 66 | } 67 | #pgside i.txt { display: none; } 68 | } 69 | 70 | /* (C) MAIN CONTENTS */ 71 | #pgmain { 72 | flex-grow: 1; 73 | padding: 20px; 74 | background: #f2f2f2; 75 | } -------------------------------------------------------------------------------- /static/assets/img/potato.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/progressify/django-inertia-svelte-template-starter/eb902ba64c95ec647eb35160bb9d8c4e41f81e3f/static/assets/img/potato.png -------------------------------------------------------------------------------- /static/src/js/main.js: -------------------------------------------------------------------------------- 1 | import { createInertiaApp } from '@inertiajs/inertia-svelte' 2 | import { InertiaProgress } from '@inertiajs/progress' 3 | import Layout from '../pages/layout.svelte' 4 | 5 | InertiaProgress.init(); 6 | 7 | createInertiaApp({ 8 | resolve: async (name) => { 9 | const comps = import.meta.glob('../pages/**/*.svelte'); 10 | const match = comps[`../pages/${name}.svelte`]; 11 | const page = (await match()); 12 | 13 | return Object.assign({layout: Layout}, page); 14 | }, 15 | setup({ el, App, props }) { 16 | new App({ target: el, props }) 17 | }, 18 | }); 19 | -------------------------------------------------------------------------------- /static/src/pages/another_app/contacts.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | > {$page.props.page_name} 7 | 8 | -------------------------------------------------------------------------------- /static/src/pages/layout.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 |
7 | 8 | 9 |
10 | 11 | MY ADMIN 12 |
13 | 14 | 15 | 16 | 17 | Home 18 | 19 | 20 | 21 | About us 22 | 23 | 24 | 25 | Contacts 26 | 27 |
28 | 29 | 30 |
31 | 32 |
-------------------------------------------------------------------------------- /static/src/pages/sample_app/about.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | > {$page.props.page_name} 7 | 8 | -------------------------------------------------------------------------------- /static/src/pages/sample_app/index.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | > {$page.props.page_name} 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /templates/base.html: -------------------------------------------------------------------------------- 1 | {% load django_vite %} 2 | {% load static %} 3 | 4 | 5 | 6 | Django + Inertia.js + Svelte = ❤️ 7 | 8 | 9 | 10 | 11 | 12 | 13 | {% vite_hmr_client %} 14 | {% vite_asset 'js/main.js' %} 15 | 16 | 17 | {% block inertia %}{% endblock %} 18 | 19 | -------------------------------------------------------------------------------- /vite.config.js: -------------------------------------------------------------------------------- 1 | import { resolve } from 'path'; 2 | import { defineConfig } from 'vite' 3 | import { svelte } from '@sveltejs/vite-plugin-svelte' 4 | 5 | // https://vitejs.dev/config/ 6 | export default defineConfig({ 7 | plugins: [ 8 | svelte() 9 | ], 10 | root: resolve('./static/src'), 11 | base: '/static/', 12 | server: { 13 | host: 'localhost', 14 | port: 3000, 15 | open: false, 16 | watch: { 17 | usePolling: true, 18 | disableGlobbing: false, 19 | }, 20 | }, 21 | resolve: { 22 | extensions: ['.js', '.jsx', '.json', '.svelte'], 23 | }, 24 | build: { 25 | outDir: resolve('./static/dist'), 26 | assetsDir: '', 27 | manifest: true, 28 | emptyOutDir: true, 29 | target: 'es2015', 30 | rollupOptions: { 31 | input: { 32 | main: resolve('./static/src/js/main.js'), 33 | }, 34 | output: { 35 | chunkFileNames: undefined, 36 | }, 37 | }, 38 | }, 39 | }) 40 | --------------------------------------------------------------------------------