commit
						c07bb959cf
					
				
					 61 changed files with 22998 additions and 5 deletions
				
			
		
							
								
								
									
										12
									
								
								.editorconfig
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								.editorconfig
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,12 @@ | ||||||
|  | # top-most EditorConfig file | ||||||
|  | root = true | ||||||
|  | 
 | ||||||
|  | [*] | ||||||
|  | indent_style = space | ||||||
|  | indent_size = tab | ||||||
|  | tab_width = 4 | ||||||
|  | end_of_line = lf | ||||||
|  | charset = utf-8 | ||||||
|  | trim_trailing_whitespace = true | ||||||
|  | insert_final_newline = true | ||||||
|  | max_line_length = 120 | ||||||
							
								
								
									
										4
									
								
								.github/ISSUE_TEMPLATE/bug-report.md
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/ISSUE_TEMPLATE/bug-report.md
									
										
									
									
										vendored
									
									
								
							|  | @ -1,10 +1,9 @@ | ||||||
| --- | --- | ||||||
| name: Bug rapport | name: Bug rapport | ||||||
| about: Maak een bug rapport om fouten te signaleren | about: Maak een bug rapport om fouten te signaleren | ||||||
| title: "`error message` of beschrijving" | title: '`error message` of beschrijving' | ||||||
| labels: bug | labels: bug | ||||||
| assignees: '' | assignees: '' | ||||||
| 
 |  | ||||||
| --- | --- | ||||||
| 
 | 
 | ||||||
| **Beschrijf de bug** | **Beschrijf de bug** | ||||||
|  | @ -12,6 +11,7 @@ Een duidelijke, beknopte beschrijving van de bug. | ||||||
| 
 | 
 | ||||||
| **Reproductie** | **Reproductie** | ||||||
| Stappen om het gedrag te reproduceren: | Stappen om het gedrag te reproduceren: | ||||||
|  | 
 | ||||||
| 1. Ga naar '...' | 1. Ga naar '...' | ||||||
| 2. Klik op '....' | 2. Klik op '....' | ||||||
| 3. Scroll naar beneden tot '....' | 3. Scroll naar beneden tot '....' | ||||||
|  |  | ||||||
							
								
								
									
										3
									
								
								.github/ISSUE_TEMPLATE/feature-request.md
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.github/ISSUE_TEMPLATE/feature-request.md
									
										
									
									
										vendored
									
									
								
							|  | @ -1,10 +1,9 @@ | ||||||
| --- | --- | ||||||
| name: Feature aanvragen | name: Feature aanvragen | ||||||
| about: Stel een feature voor | about: Stel een feature voor | ||||||
| title: "Korte beschrijving of naam" | title: 'Korte beschrijving of naam' | ||||||
| labels: enhancement | labels: enhancement | ||||||
| assignees: '' | assignees: '' | ||||||
| 
 |  | ||||||
| --- | --- | ||||||
| 
 | 
 | ||||||
| **Is your feature request related to a problem? Please describe.** | **Is your feature request related to a problem? Please describe.** | ||||||
|  |  | ||||||
							
								
								
									
										736
									
								
								.gitignore
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										736
									
								
								.gitignore
									
										
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,736 @@ | ||||||
|  | # ---> Node | ||||||
|  | # Logs | ||||||
|  | logs | ||||||
|  | *.log | ||||||
|  | npm-debug.log* | ||||||
|  | yarn-debug.log* | ||||||
|  | yarn-error.log* | ||||||
|  | lerna-debug.log* | ||||||
|  | .pnpm-debug.log* | ||||||
|  | 
 | ||||||
|  | # Diagnostic reports (https://nodejs.org/api/report.html) | ||||||
|  | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json | ||||||
|  | 
 | ||||||
|  | # Runtime data | ||||||
|  | pids | ||||||
|  | *.pid | ||||||
|  | *.seed | ||||||
|  | *.pid.lock | ||||||
|  | 
 | ||||||
|  | # Directory for instrumented libs generated by jscoverage/JSCover | ||||||
|  | lib-cov | ||||||
|  | 
 | ||||||
|  | # Coverage directory used by tools like istanbul | ||||||
|  | coverage | ||||||
|  | *.lcov | ||||||
|  | 
 | ||||||
|  | # nyc test coverage | ||||||
|  | .nyc_output | ||||||
|  | 
 | ||||||
|  | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) | ||||||
|  | .grunt | ||||||
|  | 
 | ||||||
|  | # Bower dependency directory (https://bower.io/) | ||||||
|  | bower_components | ||||||
|  | 
 | ||||||
|  | # node-waf configuration | ||||||
|  | .lock-wscript | ||||||
|  | 
 | ||||||
|  | # Compiled binary addons (https://nodejs.org/api/addons.html) | ||||||
|  | build/Release | ||||||
|  | 
 | ||||||
|  | # Dependency directories | ||||||
|  | node_modules/ | ||||||
|  | jspm_packages/ | ||||||
|  | 
 | ||||||
|  | # Snowpack dependency directory (https://snowpack.dev/) | ||||||
|  | web_modules/ | ||||||
|  | 
 | ||||||
|  | # TypeScript cache | ||||||
|  | *.tsbuildinfo | ||||||
|  | 
 | ||||||
|  | # Optional npm cache directory | ||||||
|  | .npm | ||||||
|  | 
 | ||||||
|  | # Optional eslint cache | ||||||
|  | .eslintcache | ||||||
|  | 
 | ||||||
|  | # Optional stylelint cache | ||||||
|  | .stylelintcache | ||||||
|  | 
 | ||||||
|  | # Microbundle cache | ||||||
|  | .rpt2_cache/ | ||||||
|  | .rts2_cache_cjs/ | ||||||
|  | .rts2_cache_es/ | ||||||
|  | .rts2_cache_umd/ | ||||||
|  | 
 | ||||||
|  | # Optional REPL history | ||||||
|  | .node_repl_history | ||||||
|  | 
 | ||||||
|  | # Output of 'npm pack' | ||||||
|  | *.tgz | ||||||
|  | 
 | ||||||
|  | # Yarn Integrity file | ||||||
|  | .yarn-integrity | ||||||
|  | 
 | ||||||
|  | # dotenv environment variable files | ||||||
|  | .env | ||||||
|  | .env.development.local | ||||||
|  | .env.test.local | ||||||
|  | .env.production.local | ||||||
|  | .env.local | ||||||
|  | 
 | ||||||
|  | # parcel-bundler cache (https://parceljs.org/) | ||||||
|  | .cache | ||||||
|  | .parcel-cache | ||||||
|  | 
 | ||||||
|  | # Next.js build output | ||||||
|  | .next | ||||||
|  | out | ||||||
|  | 
 | ||||||
|  | # Nuxt.js build / generate output | ||||||
|  | .nuxt | ||||||
|  | dist | ||||||
|  | 
 | ||||||
|  | # Gatsby files | ||||||
|  | .cache/ | ||||||
|  | # Comment in the public line in if your project uses Gatsby and not Next.js | ||||||
|  | # https://nextjs.org/blog/next-9-1#public-directory-support | ||||||
|  | # public | ||||||
|  | 
 | ||||||
|  | # vuepress build output | ||||||
|  | .vuepress/dist | ||||||
|  | 
 | ||||||
|  | # vuepress v2.x temp and cache directory | ||||||
|  | .temp | ||||||
|  | .cache | ||||||
|  | 
 | ||||||
|  | # Docusaurus cache and generated files | ||||||
|  | .docusaurus | ||||||
|  | 
 | ||||||
|  | # Serverless directories | ||||||
|  | .serverless/ | ||||||
|  | 
 | ||||||
|  | # FuseBox cache | ||||||
|  | .fusebox/ | ||||||
|  | 
 | ||||||
|  | # DynamoDB Local files | ||||||
|  | .dynamodb/ | ||||||
|  | 
 | ||||||
|  | # TernJS port file | ||||||
|  | .tern-port | ||||||
|  | 
 | ||||||
|  | # Stores VSCode versions used for testing VSCode extensions | ||||||
|  | .vscode-test | ||||||
|  | 
 | ||||||
|  | # yarn v2 | ||||||
|  | .yarn/cache | ||||||
|  | .yarn/unplugged | ||||||
|  | .yarn/build-state.yml | ||||||
|  | .yarn/install-state.gz | ||||||
|  | .pnp.* | ||||||
|  | 
 | ||||||
|  | # ---> Vue | ||||||
|  | # gitignore template for Vue.js projects | ||||||
|  | # | ||||||
|  | # Recommended template: Node.gitignore | ||||||
|  | 
 | ||||||
|  | # TODO: where does this rule come from? | ||||||
|  | docs/_book | ||||||
|  | 
 | ||||||
|  | # TODO: where does this rule come from? | ||||||
|  | test/ | ||||||
|  | 
 | ||||||
|  | # ---> JetBrains | ||||||
|  | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider | ||||||
|  | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 | ||||||
|  | 
 | ||||||
|  | # User-specific stuff | ||||||
|  | .idea/**/workspace.xml | ||||||
|  | .idea/**/tasks.xml | ||||||
|  | .idea/**/usage.statistics.xml | ||||||
|  | .idea/**/dictionaries | ||||||
|  | .idea/**/shelf | ||||||
|  | 
 | ||||||
|  | # AWS User-specific | ||||||
|  | .idea/**/aws.xml | ||||||
|  | 
 | ||||||
|  | # Generated files | ||||||
|  | .idea/**/contentModel.xml | ||||||
|  | 
 | ||||||
|  | # Sensitive or high-churn files | ||||||
|  | .idea/**/dataSources/ | ||||||
|  | .idea/**/dataSources.ids | ||||||
|  | .idea/**/dataSources.local.xml | ||||||
|  | .idea/**/sqlDataSources.xml | ||||||
|  | .idea/**/dynamic.xml | ||||||
|  | .idea/**/uiDesigner.xml | ||||||
|  | .idea/**/dbnavigator.xml | ||||||
|  | 
 | ||||||
|  | # Gradle | ||||||
|  | .idea/**/gradle.xml | ||||||
|  | .idea/**/libraries | ||||||
|  | 
 | ||||||
|  | # Gradle and Maven with auto-import | ||||||
|  | # When using Gradle or Maven with auto-import, you should exclude module files, | ||||||
|  | # since they will be recreated, and may cause churn.  Uncomment if using | ||||||
|  | # auto-import. | ||||||
|  | # .idea/artifacts | ||||||
|  | # .idea/compiler.xml | ||||||
|  | # .idea/jarRepositories.xml | ||||||
|  | # .idea/modules.xml | ||||||
|  | # .idea/*.iml | ||||||
|  | # .idea/modules | ||||||
|  | # *.iml | ||||||
|  | # *.ipr | ||||||
|  | 
 | ||||||
|  | # CMake | ||||||
|  | cmake-build-*/ | ||||||
|  | 
 | ||||||
|  | # Mongo Explorer plugin | ||||||
|  | .idea/**/mongoSettings.xml | ||||||
|  | 
 | ||||||
|  | # File-based project format | ||||||
|  | *.iws | ||||||
|  | 
 | ||||||
|  | # IntelliJ | ||||||
|  | out/ | ||||||
|  | 
 | ||||||
|  | # mpeltonen/sbt-idea plugin | ||||||
|  | .idea_modules/ | ||||||
|  | 
 | ||||||
|  | # JIRA plugin | ||||||
|  | atlassian-ide-plugin.xml | ||||||
|  | 
 | ||||||
|  | # Cursive Clojure plugin | ||||||
|  | .idea/replstate.xml | ||||||
|  | 
 | ||||||
|  | # SonarLint plugin | ||||||
|  | .idea/sonarlint/ | ||||||
|  | 
 | ||||||
|  | # Crashlytics plugin (for Android Studio and IntelliJ) | ||||||
|  | com_crashlytics_export_strings.xml | ||||||
|  | crashlytics.properties | ||||||
|  | crashlytics-build.properties | ||||||
|  | fabric.properties | ||||||
|  | 
 | ||||||
|  | # Editor-based Rest Client | ||||||
|  | .idea/httpRequests | ||||||
|  | 
 | ||||||
|  | # Android studio 3.1+ serialized cache file | ||||||
|  | .idea/caches/build_file_checksums.ser | ||||||
|  | 
 | ||||||
|  | # ---> VisualStudio | ||||||
|  | ## Ignore Visual Studio temporary files, build results, and | ||||||
|  | ## files generated by popular Visual Studio add-ons. | ||||||
|  | ## | ||||||
|  | ## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore | ||||||
|  | 
 | ||||||
|  | # User-specific files | ||||||
|  | *.rsuser | ||||||
|  | *.suo | ||||||
|  | *.user | ||||||
|  | *.userosscache | ||||||
|  | *.sln.docstates | ||||||
|  | 
 | ||||||
|  | # User-specific files (MonoDevelop/Xamarin Studio) | ||||||
|  | *.userprefs | ||||||
|  | 
 | ||||||
|  | # Mono auto generated files | ||||||
|  | mono_crash.* | ||||||
|  | 
 | ||||||
|  | # Build results | ||||||
|  | [Dd]ebug/ | ||||||
|  | [Dd]ebugPublic/ | ||||||
|  | [Rr]elease/ | ||||||
|  | [Rr]eleases/ | ||||||
|  | x64/ | ||||||
|  | x86/ | ||||||
|  | [Ww][Ii][Nn]32/ | ||||||
|  | [Aa][Rr][Mm]/ | ||||||
|  | [Aa][Rr][Mm]64/ | ||||||
|  | bld/ | ||||||
|  | [Bb]in/ | ||||||
|  | [Oo]bj/ | ||||||
|  | [Ll]og/ | ||||||
|  | [Ll]ogs/ | ||||||
|  | 
 | ||||||
|  | # Visual Studio 2015/2017 cache/options directory | ||||||
|  | .vs/ | ||||||
|  | # Uncomment if you have tasks that create the project's static files in wwwroot | ||||||
|  | #wwwroot/ | ||||||
|  | 
 | ||||||
|  | # Visual Studio 2017 auto generated files | ||||||
|  | Generated\ Files/ | ||||||
|  | 
 | ||||||
|  | # MSTest test Results | ||||||
|  | [Tt]est[Rr]esult*/ | ||||||
|  | [Bb]uild[Ll]og.* | ||||||
|  | 
 | ||||||
|  | # NUnit | ||||||
|  | *.VisualState.xml | ||||||
|  | TestResult.xml | ||||||
|  | nunit-*.xml | ||||||
|  | 
 | ||||||
|  | # Build Results of an ATL Project | ||||||
|  | [Dd]ebugPS/ | ||||||
|  | [Rr]eleasePS/ | ||||||
|  | dlldata.c | ||||||
|  | 
 | ||||||
|  | # Benchmark Results | ||||||
|  | BenchmarkDotNet.Artifacts/ | ||||||
|  | 
 | ||||||
|  | # .NET Core | ||||||
|  | project.lock.json | ||||||
|  | project.fragment.lock.json | ||||||
|  | artifacts/ | ||||||
|  | 
 | ||||||
|  | # ASP.NET Scaffolding | ||||||
|  | ScaffoldingReadMe.txt | ||||||
|  | 
 | ||||||
|  | # StyleCop | ||||||
|  | StyleCopReport.xml | ||||||
|  | 
 | ||||||
|  | # Files built by Visual Studio | ||||||
|  | *_i.c | ||||||
|  | *_p.c | ||||||
|  | *_h.h | ||||||
|  | *.ilk | ||||||
|  | *.meta | ||||||
|  | *.obj | ||||||
|  | *.iobj | ||||||
|  | *.pch | ||||||
|  | *.pdb | ||||||
|  | *.ipdb | ||||||
|  | *.pgc | ||||||
|  | *.pgd | ||||||
|  | *.rsp | ||||||
|  | *.sbr | ||||||
|  | *.tlb | ||||||
|  | *.tli | ||||||
|  | *.tlh | ||||||
|  | *.tmp | ||||||
|  | *.tmp_proj | ||||||
|  | *_wpftmp.csproj | ||||||
|  | *.log | ||||||
|  | *.tlog | ||||||
|  | *.vspscc | ||||||
|  | *.vssscc | ||||||
|  | .builds | ||||||
|  | *.pidb | ||||||
|  | *.svclog | ||||||
|  | *.scc | ||||||
|  | 
 | ||||||
|  | # Chutzpah Test files | ||||||
|  | _Chutzpah* | ||||||
|  | 
 | ||||||
|  | # Visual C++ cache files | ||||||
|  | ipch/ | ||||||
|  | *.aps | ||||||
|  | *.ncb | ||||||
|  | *.opendb | ||||||
|  | *.opensdf | ||||||
|  | *.sdf | ||||||
|  | *.cachefile | ||||||
|  | *.VC.db | ||||||
|  | *.VC.VC.opendb | ||||||
|  | 
 | ||||||
|  | # Visual Studio profiler | ||||||
|  | *.psess | ||||||
|  | *.vsp | ||||||
|  | *.vspx | ||||||
|  | *.sap | ||||||
|  | 
 | ||||||
|  | # Visual Studio Trace Files | ||||||
|  | *.e2e | ||||||
|  | 
 | ||||||
|  | # TFS 2012 Local Workspace | ||||||
|  | $tf/ | ||||||
|  | 
 | ||||||
|  | # Guidance Automation Toolkit | ||||||
|  | *.gpState | ||||||
|  | 
 | ||||||
|  | # ReSharper is a .NET coding add-in | ||||||
|  | _ReSharper*/ | ||||||
|  | *.[Rr]e[Ss]harper | ||||||
|  | *.DotSettings.user | ||||||
|  | 
 | ||||||
|  | # TeamCity is a build add-in | ||||||
|  | _TeamCity* | ||||||
|  | 
 | ||||||
|  | # DotCover is a Code Coverage Tool | ||||||
|  | *.dotCover | ||||||
|  | 
 | ||||||
|  | # AxoCover is a Code Coverage Tool | ||||||
|  | .axoCover/* | ||||||
|  | !.axoCover/settings.json | ||||||
|  | 
 | ||||||
|  | # Coverlet is a free, cross platform Code Coverage Tool | ||||||
|  | coverage*.json | ||||||
|  | coverage*.xml | ||||||
|  | coverage*.info | ||||||
|  | 
 | ||||||
|  | # Visual Studio code coverage results | ||||||
|  | *.coverage | ||||||
|  | *.coveragexml | ||||||
|  | 
 | ||||||
|  | # NCrunch | ||||||
|  | _NCrunch_* | ||||||
|  | .*crunch*.local.xml | ||||||
|  | nCrunchTemp_* | ||||||
|  | 
 | ||||||
|  | # MightyMoose | ||||||
|  | *.mm.* | ||||||
|  | AutoTest.Net/ | ||||||
|  | 
 | ||||||
|  | # Web workbench (sass) | ||||||
|  | .sass-cache/ | ||||||
|  | 
 | ||||||
|  | # Installshield output folder | ||||||
|  | [Ee]xpress/ | ||||||
|  | 
 | ||||||
|  | # DocProject is a documentation generator add-in | ||||||
|  | DocProject/buildhelp/ | ||||||
|  | DocProject/Help/*.HxT | ||||||
|  | DocProject/Help/*.HxC | ||||||
|  | DocProject/Help/*.hhc | ||||||
|  | DocProject/Help/*.hhk | ||||||
|  | DocProject/Help/*.hhp | ||||||
|  | DocProject/Help/Html2 | ||||||
|  | DocProject/Help/html | ||||||
|  | 
 | ||||||
|  | # Click-Once directory | ||||||
|  | publish/ | ||||||
|  | 
 | ||||||
|  | # Publish Web Output | ||||||
|  | *.[Pp]ublish.xml | ||||||
|  | *.azurePubxml | ||||||
|  | # Note: Comment the next line if you want to checkin your web deploy settings, | ||||||
|  | # but database connection strings (with potential passwords) will be unencrypted | ||||||
|  | *.pubxml | ||||||
|  | *.publishproj | ||||||
|  | 
 | ||||||
|  | # Microsoft Azure Web App publish settings. Comment the next line if you want to | ||||||
|  | # checkin your Azure Web App publish settings, but sensitive information contained | ||||||
|  | # in these scripts will be unencrypted | ||||||
|  | PublishScripts/ | ||||||
|  | 
 | ||||||
|  | # NuGet Packages | ||||||
|  | *.nupkg | ||||||
|  | # NuGet Symbol Packages | ||||||
|  | *.snupkg | ||||||
|  | # The packages folder can be ignored because of Package Restore | ||||||
|  | **/[Pp]ackages/* | ||||||
|  | # except build/, which is used as an MSBuild target. | ||||||
|  | !**/[Pp]ackages/build/ | ||||||
|  | # Uncomment if necessary however generally it will be regenerated when needed | ||||||
|  | #!**/[Pp]ackages/repositories.config | ||||||
|  | # NuGet v3's project.json files produces more ignorable files | ||||||
|  | *.nuget.props | ||||||
|  | *.nuget.targets | ||||||
|  | 
 | ||||||
|  | # Microsoft Azure Build Output | ||||||
|  | csx/ | ||||||
|  | *.build.csdef | ||||||
|  | 
 | ||||||
|  | # Microsoft Azure Emulator | ||||||
|  | ecf/ | ||||||
|  | rcf/ | ||||||
|  | 
 | ||||||
|  | # Windows Store app package directories and files | ||||||
|  | AppPackages/ | ||||||
|  | BundleArtifacts/ | ||||||
|  | Package.StoreAssociation.xml | ||||||
|  | _pkginfo.txt | ||||||
|  | *.appx | ||||||
|  | *.appxbundle | ||||||
|  | *.appxupload | ||||||
|  | 
 | ||||||
|  | # Visual Studio cache files | ||||||
|  | # files ending in .cache can be ignored | ||||||
|  | *.[Cc]ache | ||||||
|  | # but keep track of directories ending in .cache | ||||||
|  | !?*.[Cc]ache/ | ||||||
|  | 
 | ||||||
|  | # Others | ||||||
|  | ClientBin/ | ||||||
|  | ~$* | ||||||
|  | *~ | ||||||
|  | *.dbmdl | ||||||
|  | *.dbproj.schemaview | ||||||
|  | *.jfm | ||||||
|  | *.pfx | ||||||
|  | *.publishsettings | ||||||
|  | orleans.codegen.cs | ||||||
|  | 
 | ||||||
|  | # Including strong name files can present a security risk | ||||||
|  | # (https://github.com/github/gitignore/pull/2483#issue-259490424) | ||||||
|  | #*.snk | ||||||
|  | 
 | ||||||
|  | # Since there are multiple workflows, uncomment next line to ignore bower_components | ||||||
|  | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) | ||||||
|  | #bower_components/ | ||||||
|  | 
 | ||||||
|  | # RIA/Silverlight projects | ||||||
|  | Generated_Code/ | ||||||
|  | 
 | ||||||
|  | # Backup & report files from converting an old project file | ||||||
|  | # to a newer Visual Studio version. Backup files are not needed, | ||||||
|  | # because we have git ;-) | ||||||
|  | _UpgradeReport_Files/ | ||||||
|  | Backup*/ | ||||||
|  | UpgradeLog*.XML | ||||||
|  | UpgradeLog*.htm | ||||||
|  | ServiceFabricBackup/ | ||||||
|  | *.rptproj.bak | ||||||
|  | 
 | ||||||
|  | # SQL Server files | ||||||
|  | *.mdf | ||||||
|  | *.ldf | ||||||
|  | *.ndf | ||||||
|  | 
 | ||||||
|  | # Business Intelligence projects | ||||||
|  | *.rdl.data | ||||||
|  | *.bim.layout | ||||||
|  | *.bim_*.settings | ||||||
|  | *.rptproj.rsuser | ||||||
|  | *- [Bb]ackup.rdl | ||||||
|  | *- [Bb]ackup ([0-9]).rdl | ||||||
|  | *- [Bb]ackup ([0-9][0-9]).rdl | ||||||
|  | 
 | ||||||
|  | # Microsoft Fakes | ||||||
|  | FakesAssemblies/ | ||||||
|  | 
 | ||||||
|  | # GhostDoc plugin setting file | ||||||
|  | *.GhostDoc.xml | ||||||
|  | 
 | ||||||
|  | # Node.js Tools for Visual Studio | ||||||
|  | .ntvs_analysis.dat | ||||||
|  | node_modules/ | ||||||
|  | 
 | ||||||
|  | # Visual Studio 6 build log | ||||||
|  | *.plg | ||||||
|  | 
 | ||||||
|  | # Visual Studio 6 workspace options file | ||||||
|  | *.opt | ||||||
|  | 
 | ||||||
|  | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) | ||||||
|  | *.vbw | ||||||
|  | 
 | ||||||
|  | # Visual Studio 6 auto-generated project file (contains which files were open etc.) | ||||||
|  | *.vbp | ||||||
|  | 
 | ||||||
|  | # Visual Studio 6 workspace and project file (working project files containing files to include in project) | ||||||
|  | *.dsw | ||||||
|  | *.dsp | ||||||
|  | 
 | ||||||
|  | # Visual Studio 6 technical files | ||||||
|  | *.ncb | ||||||
|  | *.aps | ||||||
|  | 
 | ||||||
|  | # Visual Studio LightSwitch build output | ||||||
|  | **/*.HTMLClient/GeneratedArtifacts | ||||||
|  | **/*.DesktopClient/GeneratedArtifacts | ||||||
|  | **/*.DesktopClient/ModelManifest.xml | ||||||
|  | **/*.Server/GeneratedArtifacts | ||||||
|  | **/*.Server/ModelManifest.xml | ||||||
|  | _Pvt_Extensions | ||||||
|  | 
 | ||||||
|  | # Paket dependency manager | ||||||
|  | .paket/paket.exe | ||||||
|  | paket-files/ | ||||||
|  | 
 | ||||||
|  | # FAKE - F# Make | ||||||
|  | .fake/ | ||||||
|  | 
 | ||||||
|  | # CodeRush personal settings | ||||||
|  | .cr/personal | ||||||
|  | 
 | ||||||
|  | # Python Tools for Visual Studio (PTVS) | ||||||
|  | __pycache__/ | ||||||
|  | *.pyc | ||||||
|  | 
 | ||||||
|  | # Cake - Uncomment if you are using it | ||||||
|  | # tools/** | ||||||
|  | # !tools/packages.config | ||||||
|  | 
 | ||||||
|  | # Tabs Studio | ||||||
|  | *.tss | ||||||
|  | 
 | ||||||
|  | # Telerik's JustMock configuration file | ||||||
|  | *.jmconfig | ||||||
|  | 
 | ||||||
|  | # BizTalk build output | ||||||
|  | *.btp.cs | ||||||
|  | *.btm.cs | ||||||
|  | *.odx.cs | ||||||
|  | *.xsd.cs | ||||||
|  | 
 | ||||||
|  | # OpenCover UI analysis results | ||||||
|  | OpenCover/ | ||||||
|  | 
 | ||||||
|  | # Azure Stream Analytics local run output | ||||||
|  | ASALocalRun/ | ||||||
|  | 
 | ||||||
|  | # MSBuild Binary and Structured Log | ||||||
|  | *.binlog | ||||||
|  | 
 | ||||||
|  | # NVidia Nsight GPU debugger configuration file | ||||||
|  | *.nvuser | ||||||
|  | 
 | ||||||
|  | # MFractors (Xamarin productivity tool) working folder | ||||||
|  | .mfractor/ | ||||||
|  | 
 | ||||||
|  | # Local History for Visual Studio | ||||||
|  | .localhistory/ | ||||||
|  | 
 | ||||||
|  | # Visual Studio History (VSHistory) files | ||||||
|  | .vshistory/ | ||||||
|  | 
 | ||||||
|  | # BeatPulse healthcheck temp database | ||||||
|  | healthchecksdb | ||||||
|  | 
 | ||||||
|  | # Backup folder for Package Reference Convert tool in Visual Studio 2017 | ||||||
|  | MigrationBackup/ | ||||||
|  | 
 | ||||||
|  | # Ionide (cross platform F# VS Code tools) working folder | ||||||
|  | .ionide/ | ||||||
|  | 
 | ||||||
|  | # Fody - auto-generated XML schema | ||||||
|  | FodyWeavers.xsd | ||||||
|  | 
 | ||||||
|  | # VS Code files for those working on multiple tools | ||||||
|  | .vscode/* | ||||||
|  | !.vscode/settings.json | ||||||
|  | !.vscode/tasks.json | ||||||
|  | !.vscode/launch.json | ||||||
|  | !.vscode/extensions.json | ||||||
|  | *.code-workspace | ||||||
|  | 
 | ||||||
|  | # Local History for Visual Studio Code | ||||||
|  | .history/ | ||||||
|  | 
 | ||||||
|  | # Windows Installer files from build outputs | ||||||
|  | *.cab | ||||||
|  | *.msi | ||||||
|  | *.msix | ||||||
|  | *.msm | ||||||
|  | *.msp | ||||||
|  | 
 | ||||||
|  | # JetBrains Rider | ||||||
|  | *.sln.iml | ||||||
|  | 
 | ||||||
|  | # ---> VisualStudioCode | ||||||
|  | .vscode/* | ||||||
|  | !.vscode/settings.json | ||||||
|  | !.vscode/tasks.json | ||||||
|  | !.vscode/launch.json | ||||||
|  | !.vscode/extensions.json | ||||||
|  | !.vscode/*.code-snippets | ||||||
|  | 
 | ||||||
|  | # Local History for Visual Studio Code | ||||||
|  | .history/ | ||||||
|  | 
 | ||||||
|  | # Built Visual Studio Code Extensions | ||||||
|  | *.vsix | ||||||
|  | 
 | ||||||
|  | # ---> macOS | ||||||
|  | # General | ||||||
|  | .DS_Store | ||||||
|  | .AppleDouble | ||||||
|  | .LSOverride | ||||||
|  | 
 | ||||||
|  | # Icon must end with two \r | ||||||
|  | Icon | ||||||
|  | 
 | ||||||
|  | # Thumbnails | ||||||
|  | ._* | ||||||
|  | 
 | ||||||
|  | # Files that might appear in the root of a volume | ||||||
|  | .DocumentRevisions-V100 | ||||||
|  | .fseventsd | ||||||
|  | .Spotlight-V100 | ||||||
|  | .TemporaryItems | ||||||
|  | .Trashes | ||||||
|  | .VolumeIcon.icns | ||||||
|  | .com.apple.timemachine.donotpresent | ||||||
|  | 
 | ||||||
|  | # Directories potentially created on remote AFP share | ||||||
|  | .AppleDB | ||||||
|  | .AppleDesktop | ||||||
|  | Network Trash Folder | ||||||
|  | Temporary Items | ||||||
|  | .apdisk | ||||||
|  | 
 | ||||||
|  | # ---> Vim | ||||||
|  | # Swap | ||||||
|  | [._]*.s[a-v][a-z] | ||||||
|  | !*.svg  # comment out if you don't need vector files | ||||||
|  | [._]*.sw[a-p] | ||||||
|  | [._]s[a-rt-v][a-z] | ||||||
|  | [._]ss[a-gi-z] | ||||||
|  | [._]sw[a-p] | ||||||
|  | 
 | ||||||
|  | # Session | ||||||
|  | Session.vim | ||||||
|  | Sessionx.vim | ||||||
|  | 
 | ||||||
|  | # Temporary | ||||||
|  | .netrwhist | ||||||
|  | *~ | ||||||
|  | # Auto-generated tag files | ||||||
|  | tags | ||||||
|  | # Persistent undo | ||||||
|  | [._]*.un~ | ||||||
|  | 
 | ||||||
|  | # ---> Emacs | ||||||
|  | # -*- mode: gitignore; -*- | ||||||
|  | *~ | ||||||
|  | \#*\# | ||||||
|  | /.emacs.desktop | ||||||
|  | /.emacs.desktop.lock | ||||||
|  | *.elc | ||||||
|  | auto-save-list | ||||||
|  | tramp | ||||||
|  | .\#* | ||||||
|  | 
 | ||||||
|  | # Org-mode | ||||||
|  | .org-id-locations | ||||||
|  | *_archive | ||||||
|  | 
 | ||||||
|  | # flymake-mode | ||||||
|  | *_flymake.* | ||||||
|  | 
 | ||||||
|  | # eshell files | ||||||
|  | /eshell/history | ||||||
|  | /eshell/lastdir | ||||||
|  | 
 | ||||||
|  | # elpa packages | ||||||
|  | /elpa/ | ||||||
|  | 
 | ||||||
|  | # reftex files | ||||||
|  | *.rel | ||||||
|  | 
 | ||||||
|  | # AUCTeX auto folder | ||||||
|  | /auto/ | ||||||
|  | 
 | ||||||
|  | # cask packages | ||||||
|  | .cask/ | ||||||
|  | dist/ | ||||||
|  | 
 | ||||||
|  | # Flycheck | ||||||
|  | flycheck_*.el | ||||||
|  | 
 | ||||||
|  | # server auth directory | ||||||
|  | /server/ | ||||||
|  | 
 | ||||||
|  | # projectiles files | ||||||
|  | .projectile | ||||||
|  | 
 | ||||||
|  | # directory configuration | ||||||
|  | .dir-locals.el | ||||||
|  | 
 | ||||||
|  | # network security | ||||||
|  | /network-security.data | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
							
								
								
									
										10
									
								
								.vscode/extensions.json
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								.vscode/extensions.json
									
										
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,10 @@ | ||||||
|  | { | ||||||
|  |   "recommendations": [ | ||||||
|  |     "Vue.volar", | ||||||
|  |     "vitest.explorer", | ||||||
|  |     "ms-playwright.playwright", | ||||||
|  |     "dbaeumer.vscode-eslint", | ||||||
|  |     "EditorConfig.EditorConfig", | ||||||
|  |     "esbenp.prettier-vscode" | ||||||
|  |   ] | ||||||
|  | } | ||||||
							
								
								
									
										13
									
								
								.vscode/settings.json
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								.vscode/settings.json
									
										
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,13 @@ | ||||||
|  | { | ||||||
|  |   "explorer.fileNesting.enabled": true, | ||||||
|  |   "explorer.fileNesting.patterns": { | ||||||
|  |     "tsconfig.json": "tsconfig.*.json, env.d.ts", | ||||||
|  |     "vite.config.*": "jsconfig*, vitest.config.*, cypress.config.*, playwright.config.*", | ||||||
|  |     "package.json": "package-lock.json, pnpm*, .yarnrc*, yarn*, .eslint*, eslint*, .prettier*, prettier*, .editorconfig" | ||||||
|  |   }, | ||||||
|  |   "editor.codeActionsOnSave": { | ||||||
|  |     "source.fixAll.eslint": "explicit" | ||||||
|  |   }, | ||||||
|  |   "editor.formatOnSave": false, | ||||||
|  |   "editor.defaultFormatter": "esbenp.prettier-vscode" | ||||||
|  | } | ||||||
							
								
								
									
										71
									
								
								CONTRIBUTING.md
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										71
									
								
								CONTRIBUTING.md
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,71 @@ | ||||||
|  | # Hoe bijdragen aan Dwengo-1? | ||||||
|  | 
 | ||||||
|  | ## Issues | ||||||
|  | 
 | ||||||
|  | Maak gebruik van de [label set](https://github.com/SELab-2/Dwengo-1/labels). | ||||||
|  | 
 | ||||||
|  | Voor bug reports: | ||||||
|  | 
 | ||||||
|  | Geef zo veel mogelijk informatie. Als er error berichten zijn, graag in tekst bijvoegen. Geen screenshots van error | ||||||
|  | messages, enkel van visuele bugs. | ||||||
|  | 
 | ||||||
|  | Ken jezelf toe aan een issue als je eraan werkt, zodat iedereen een overzicht heeft van waar aan gewerkt wordt en door | ||||||
|  | wie. Zo wordt onnodig werk vermeden. | ||||||
|  | 
 | ||||||
|  | ## Workflow | ||||||
|  | 
 | ||||||
|  | We zullen [Gitflow](https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow) gebruiken | ||||||
|  | 
 | ||||||
|  | Lees [hier](wiki) meer over deze beslissing | ||||||
|  | 
 | ||||||
|  | Concreet: | ||||||
|  | 
 | ||||||
|  | - `main` | ||||||
|  |     - Incl. tags (`v1.2.3`) | ||||||
|  | - `dev` | ||||||
|  |     - `feat/my-feat`: Voor features die uit geen of meer dan 1 issue bestaan | ||||||
|  |     - `feat/this-#x`: Voor features die aan een issue gelinkt kunnen worden | ||||||
|  |     - `fix/something-#x`: Voor (minder dringende) bug fixes. Bug fixes worden aan een issue gelinkt. | ||||||
|  | - `release/x.y.z`: Release prep branch | ||||||
|  | 
 | ||||||
|  | ## Commits | ||||||
|  | 
 | ||||||
|  | Maken gebruik van [conventional commits](https://www.conventionalcommits.org/) | ||||||
|  | 
 | ||||||
|  | Lees [hier](wiki) meer over deze beslissing | ||||||
|  | 
 | ||||||
|  | Concreet: | ||||||
|  | 
 | ||||||
|  | ``` | ||||||
|  | <type>(<optional scope>): <description> | ||||||
|  | 
 | ||||||
|  | type options: | ||||||
|  |     feat, fix, refactor, test, docs, build, ci, chore, ... | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | Als je een commit 'fixt', gebruik dan [ | ||||||
|  | `git commit --fixup`](https://git-scm.com/docs/git-commit#Documentation/git-commit.txt---fixupamendrewordltcommitgt) | ||||||
|  | 
 | ||||||
|  | Als je een commit niet alleen hebt geschreven, maak dan | ||||||
|  | een [commit met meerdere auteurs](https://docs.github.com/en/pull-requests/committing-changes-to-your-project/creating-and-editing-commits/creating-a-commit-with-multiple-authors). | ||||||
|  | 
 | ||||||
|  | ## Pull request... | ||||||
|  | 
 | ||||||
|  | Als je aan visuele features werkt, voeg dan een screenshot van de omgeving van de feature toe, voor en nadat de feature | ||||||
|  | geïmplementeerd werd. | ||||||
|  | 
 | ||||||
|  | Start een draft pull request vanaf je een nieuwe feature branch pusht naar de server. | ||||||
|  | 
 | ||||||
|  | Policies | ||||||
|  | 
 | ||||||
|  | - naar `main`: kan enkel vanuit `release/x.y.z` | ||||||
|  | - naar `dev`: wordt nagekeken alvorens te mergen | ||||||
|  | - elders: vrije keuze | ||||||
|  | 
 | ||||||
|  | ## Coding conventions | ||||||
|  | 
 | ||||||
|  | - Formatting: [Prettier](https://prettier.io/) | ||||||
|  | - Linting: Maak gebruik van [ESLint](https://typescript-eslint.io/) of aan de hand van de [ | ||||||
|  |   `npm` commando's](package.json). | ||||||
|  | 
 | ||||||
|  | Voel je vrij om zelf commit hooks te installeren, maar we dwingen dit niet af. | ||||||
							
								
								
									
										52
									
								
								README.md
									
										
									
									
									
								
							
							
						
						
									
										52
									
								
								README.md
									
										
									
									
									
								
							|  | @ -1 +1,51 @@ | ||||||
| # Dwengo-1 | <h1 align="center">Dwengo-1</h1> | ||||||
|  | 
 | ||||||
|  | <p align="center"> | ||||||
|  | <span><a href="https://ugentbe-my.sharepoint.com/:f:/r/personal/bart_mesuere_ugent_be/Documents/Onderwijs/SELab2/2024-2025/mappen%20studenten/groep1" alt="OneDrive"> | ||||||
|  | OneDrive</a></span> | ||||||
|  | <span><a href="https://www.figma.com/files/project/339220191" alt="Figma sjabloon"> | ||||||
|  | Figma</a></span> | ||||||
|  | <span><a href="../Dwengo-opgave" alt="projectopgave"> | ||||||
|  | Projectopgave</a></span> | ||||||
|  | </p> | ||||||
|  | 
 | ||||||
|  | <ul align="center" style="list-style-type: none"> | ||||||
|  | <li>Projectleider: Fransisco Van Langenhove (@Gabriellvl)</li> | ||||||
|  | <li>Technische lead: Tibo De Peuter (@tdpeuter)</li> | ||||||
|  | <li>Systeembeheerder: Timo De Meyst (@kloep1)</li> | ||||||
|  | <li>Customer relations officer: Adriaan Jacquet (@WhisperinCheetah)</li> | ||||||
|  | </ul> | ||||||
|  | 
 | ||||||
|  | Dit is de monorepo voor [Dwengo-1](https://sel2-1.ugent.be), een interactief leerplatform waar leerkrachten opdrachten | ||||||
|  | en lessen kunnen samenstellen hun leerlingen en hun vooruitgang kunnen opvolgen. | ||||||
|  | 
 | ||||||
|  | ## Installatie | ||||||
|  | 
 | ||||||
|  | ### Quick start | ||||||
|  | 
 | ||||||
|  | 1. Installeer Docker en Docker Compose op je systeem (zie [Docker](https://docs.docker.com/get-docker/)). | ||||||
|  | 2. Clone de repository. | ||||||
|  | 3. Voer `docker-compose up` uit in de root van de repository. | ||||||
|  | 
 | ||||||
|  | ```bash | ||||||
|  | docker compose version | ||||||
|  | git clone https://github.com/SELab-2/Dwengo-1.git | ||||||
|  | cd Dwengo-1 | ||||||
|  | docker-compose up | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | ### Handmatige installatie | ||||||
|  | 
 | ||||||
|  | Zie de submappen voor de installatie-instructies van de verschillende services. | ||||||
|  | 
 | ||||||
|  | ## Architectuur | ||||||
|  | 
 | ||||||
|  | ``` | ||||||
|  | hier overzichtsdiagram invoegen | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | We maken gebruik van ... Meer informatie over deze ontwerpsbeslissingen kan je vinden in de [architectuurdocumentatie](./architectuur). | ||||||
|  | 
 | ||||||
|  | ## Bijdragen aan Dwengo-1 | ||||||
|  | 
 | ||||||
|  | Zie [CONTRIBUTING.md](./CONTRIBUTING.md) voor meer informatie over hoe je kan bijdragen aan Dwengo-1. | ||||||
|  |  | ||||||
							
								
								
									
										1
									
								
								backend/.env.example
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								backend/.env.example
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1 @@ | ||||||
|  | PORT=3000 | ||||||
							
								
								
									
										2
									
								
								backend/config/db/init.sql
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								backend/config/db/init.sql
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,2 @@ | ||||||
|  | -- Create the database | ||||||
|  | CREATE DATABASE dwengo; | ||||||
							
								
								
									
										11
									
								
								backend/eslint.config.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								backend/eslint.config.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,11 @@ | ||||||
|  | import globals from 'globals'; | ||||||
|  | import rootConfig from '../eslint.config'; | ||||||
|  | 
 | ||||||
|  | export default [ | ||||||
|  |     ...rootConfig, | ||||||
|  |     { | ||||||
|  |         languageOptions: { | ||||||
|  |             globals: globals.node, | ||||||
|  |         }, | ||||||
|  |     }, | ||||||
|  | ]; | ||||||
							
								
								
									
										4447
									
								
								backend/package-lock.json
									
										
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										4447
									
								
								backend/package-lock.json
									
										
									
										generated
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										33
									
								
								backend/package.json
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								backend/package.json
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,33 @@ | ||||||
|  | { | ||||||
|  |     "name": "dwengo-1-backend", | ||||||
|  |     "version": "0.0.1", | ||||||
|  |     "description": "Backend for Dwengo-1", | ||||||
|  |     "private": true, | ||||||
|  |     "type": "module", | ||||||
|  |     "scripts": { | ||||||
|  |         "build": "tsc --project tsconfig.json", | ||||||
|  |         "dev": "tsx watch --env-file=.env.development.local src/app.ts", | ||||||
|  |         "start": "node --env-file=.env dist/app.js", | ||||||
|  |         "format": "prettier --write src/", | ||||||
|  |         "format-check": "prettier --check src/", | ||||||
|  |         "lint": "eslint . --fix", | ||||||
|  |         "test:unit": "vitest --run" | ||||||
|  |     }, | ||||||
|  |     "dependencies": { | ||||||
|  |         "@mikro-orm/core": "^6.4.6", | ||||||
|  |         "@mikro-orm/postgresql": "^6.4.6", | ||||||
|  |         "@mikro-orm/reflection": "^6.4.6", | ||||||
|  |         "dotenv": "^16.4.7", | ||||||
|  |         "express": "^5.0.1" | ||||||
|  |     }, | ||||||
|  |     "devDependencies": { | ||||||
|  |         "@mikro-orm/cli": "^6.4.6", | ||||||
|  |         "@types/express": "^5.0.0", | ||||||
|  |         "@types/node": "^22.13.4", | ||||||
|  |         "globals": "^15.15.0", | ||||||
|  |         "ts-node": "^10.9.2", | ||||||
|  |         "tsx": "^4.19.3", | ||||||
|  |         "typescript": "^5.7.3", | ||||||
|  |         "vitest": "^3.0.6" | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										22
									
								
								backend/src/app.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								backend/src/app.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,22 @@ | ||||||
|  | import express, { Express, Response } from 'express'; | ||||||
|  | import initORM from './orm.js'; | ||||||
|  | 
 | ||||||
|  | const app: Express = express(); | ||||||
|  | const port: string | number = process.env.PORT || 3000; | ||||||
|  | 
 | ||||||
|  | // TODO Replace with Express routes
 | ||||||
|  | app.get('/', (_, res: Response) => { | ||||||
|  |     res.json({ | ||||||
|  |         message: 'Hello Dwengo!', | ||||||
|  |     }); | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | async function startServer() { | ||||||
|  |     await initORM(); | ||||||
|  | 
 | ||||||
|  |     app.listen(port, () => { | ||||||
|  |         console.log(`Server is running at http://localhost:${port}`); | ||||||
|  |     }); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | startServer(); | ||||||
							
								
								
									
										13
									
								
								backend/src/entities/user.entity.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								backend/src/entities/user.entity.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,13 @@ | ||||||
|  | import { Entity, PrimaryKey, Property } from '@mikro-orm/core'; | ||||||
|  | 
 | ||||||
|  | @Entity() | ||||||
|  | export class User { | ||||||
|  |     @PrimaryKey({ type: 'number' }) | ||||||
|  |     id!: number; | ||||||
|  | 
 | ||||||
|  |     @Property() | ||||||
|  |     firstName: string = ''; | ||||||
|  | 
 | ||||||
|  |     @Property() | ||||||
|  |     lastName: string = ''; | ||||||
|  | } | ||||||
							
								
								
									
										12
									
								
								backend/src/mikro-orm.config.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								backend/src/mikro-orm.config.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,12 @@ | ||||||
|  | import { Options } from '@mikro-orm/core'; | ||||||
|  | import { PostgreSqlDriver } from '@mikro-orm/postgresql'; | ||||||
|  | 
 | ||||||
|  | const config: Options = { | ||||||
|  |     driver: PostgreSqlDriver, | ||||||
|  |     dbName: 'dwengo', | ||||||
|  |     entities: ['dist/**/*.entity.js'], | ||||||
|  |     entitiesTs: ['src/**/*.entity.ts'], | ||||||
|  |     debug: true, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | export default config; | ||||||
							
								
								
									
										6
									
								
								backend/src/orm.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								backend/src/orm.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | ||||||
|  | import { MikroORM } from '@mikro-orm/core'; | ||||||
|  | import config from './mikro-orm.config.js'; | ||||||
|  | 
 | ||||||
|  | export default async function initORM() { | ||||||
|  |     await MikroORM.init(config); | ||||||
|  | } | ||||||
							
								
								
									
										9
									
								
								backend/tests/example.test.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								backend/tests/example.test.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,9 @@ | ||||||
|  | import { describe, it, expect } from "vitest"; | ||||||
|  | 
 | ||||||
|  | describe("Sample test", () => { | ||||||
|  |     it("should sum to 2", () => { | ||||||
|  |         const expected = 2; | ||||||
|  |         const result = 1 + 1; | ||||||
|  |         expect(result).toBe(expected); | ||||||
|  |     }); | ||||||
|  | }) | ||||||
							
								
								
									
										10
									
								
								backend/tsconfig.json
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								backend/tsconfig.json
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,10 @@ | ||||||
|  | { | ||||||
|  |     "extends": "../tsconfig.json", | ||||||
|  |     "include": [ | ||||||
|  |         "src/**/*.ts" | ||||||
|  |     ], | ||||||
|  |     "compilerOptions": { | ||||||
|  |         "rootDir": "./src", | ||||||
|  |         "outDir": "./dist" | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										16
									
								
								docker-compose.yml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								docker-compose.yml
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,16 @@ | ||||||
|  | services: | ||||||
|  |   db: | ||||||
|  |     image: postgres:latest | ||||||
|  |     environment: | ||||||
|  |       POSTGRES_USER: postgres | ||||||
|  |       POSTGRES_PASSWORD: postgres | ||||||
|  |       POSTGRES_DB: postgres | ||||||
|  |     ports: | ||||||
|  |       - "5432:5432" | ||||||
|  |     network_mode: "host" | ||||||
|  |     volumes: | ||||||
|  |         - postgres_data:/var/lib/postgresql/data | ||||||
|  |         - ./backend/config/db/init.sql:/docker-entrypoint-initdb.d/init.sql | ||||||
|  | 
 | ||||||
|  | volumes: | ||||||
|  |     postgres_data: | ||||||
							
								
								
									
										82
									
								
								eslint.config.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										82
									
								
								eslint.config.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,82 @@ | ||||||
|  | import pluginJs from '@eslint/js'; | ||||||
|  | import tseslint from 'typescript-eslint'; | ||||||
|  | import prettierConfig from 'eslint-config-prettier'; | ||||||
|  | 
 | ||||||
|  | import { includeIgnoreFile } from '@eslint/compat'; | ||||||
|  | import path from 'node:path'; | ||||||
|  | import { fileURLToPath } from 'node:url'; | ||||||
|  | 
 | ||||||
|  | const __filename = fileURLToPath(import.meta.url); | ||||||
|  | const __dirname = path.dirname(__filename); | ||||||
|  | const gitignorePath = path.resolve(__dirname, '.gitignore'); | ||||||
|  | 
 | ||||||
|  | export default [ | ||||||
|  |     pluginJs.configs.recommended, | ||||||
|  |     ...tseslint.configs.recommended, | ||||||
|  |     prettierConfig, | ||||||
|  |     includeIgnoreFile(gitignorePath), | ||||||
|  |     { | ||||||
|  |         ignores: ['**/dist/**', '**/.node_modules/**', '**/coverage/**'], | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         languageOptions: { | ||||||
|  |             ecmaVersion: 'latest', | ||||||
|  |             sourceType: 'module', | ||||||
|  |         }, | ||||||
|  |         linterOptions: { | ||||||
|  |             reportUnusedInlineConfigs: 'error', | ||||||
|  |         }, | ||||||
|  |         rules: { | ||||||
|  |             'no-await-in-loop': 'warn', | ||||||
|  |             'no-constructor-return': 'error', | ||||||
|  |             'no-duplicate-imports': 'error', | ||||||
|  |             'no-inner-declarations': 'error', | ||||||
|  |             'no-self-compare': 'error', | ||||||
|  |             'no-template-curly-in-string': 'error', | ||||||
|  |             'no-unmodified-loop-condition': 'warn', | ||||||
|  |             'no-unreachable-loop': 'warn', | ||||||
|  |             'no-use-before-define': 'error', | ||||||
|  |             'no-useless-assignment': 'error', | ||||||
|  | 
 | ||||||
|  |             'arrow-body-style': ['warn', 'always'], | ||||||
|  |             'block-scoped-var': 'warn', | ||||||
|  |             camelcase: 'warn', | ||||||
|  |             'capitalized-comments': 'warn', | ||||||
|  |             'consistent-return': 'warn', | ||||||
|  |             'consistent-this': 'error', | ||||||
|  |             curly: 'error', | ||||||
|  |             'default-case': 'error', | ||||||
|  |             'default-case-last': 'error', | ||||||
|  |             'default-param-last': 'error', | ||||||
|  |             'dot-notation': 'warn', | ||||||
|  |             eqeqeq: 'error', | ||||||
|  |             'func-names': 'warn', | ||||||
|  |             'func-style': ['warn', 'declaration'], | ||||||
|  |             'grouped-accessor-pairs': ['warn', 'getBeforeSet'], | ||||||
|  |             'guard-for-in': 'warn', | ||||||
|  |             'logical-assignment-operators': 'warn', | ||||||
|  |             'max-classes-per-file': 'warn', | ||||||
|  |             'no-alert': 'error', | ||||||
|  |             'no-array-constructor': 'warn', | ||||||
|  |             'no-bitwise': 'warn', | ||||||
|  |             'no-console': 'warn', | ||||||
|  |             'no-continue': 'warn', | ||||||
|  |             'no-else-return': 'warn', | ||||||
|  |             'no-empty-function': 'warn', | ||||||
|  |             'no-eq-null': 'error', | ||||||
|  |             'no-eval': 'error', | ||||||
|  |             'no-extend-native': 'error', | ||||||
|  |             'no-extra-label': 'error', | ||||||
|  |             'no-implicit-coercion': 'warn', | ||||||
|  |             'no-implied-eval': 'error', | ||||||
|  |             'no-invalid-this': 'error', | ||||||
|  |             'no-iterator': 'error', | ||||||
|  |             'no-label-var': 'warn', | ||||||
|  |             'no-labels': 'warn', | ||||||
|  |             'no-loop-func': 'error', | ||||||
|  |             'no-multi-assign': 'error', | ||||||
|  |             'no-nested-ternary': 'error', | ||||||
|  |             'no-object-constructor': 'error', | ||||||
|  |         }, | ||||||
|  |     }, | ||||||
|  | ]; | ||||||
							
								
								
									
										1
									
								
								frontend/.gitattributes
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								frontend/.gitattributes
									
										
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1 @@ | ||||||
|  | * text=auto eol=lf | ||||||
							
								
								
									
										33
									
								
								frontend/.gitignore
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								frontend/.gitignore
									
										
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,33 @@ | ||||||
|  | # Logs | ||||||
|  | logs | ||||||
|  | *.log | ||||||
|  | npm-debug.log* | ||||||
|  | yarn-debug.log* | ||||||
|  | yarn-error.log* | ||||||
|  | pnpm-debug.log* | ||||||
|  | lerna-debug.log* | ||||||
|  | 
 | ||||||
|  | node_modules | ||||||
|  | .DS_Store | ||||||
|  | dist | ||||||
|  | dist-ssr | ||||||
|  | coverage | ||||||
|  | *.local | ||||||
|  | 
 | ||||||
|  | /cypress/videos/ | ||||||
|  | /cypress/screenshots/ | ||||||
|  | 
 | ||||||
|  | # Editor directories and files | ||||||
|  | .vscode/* | ||||||
|  | !.vscode/extensions.json | ||||||
|  | .idea | ||||||
|  | *.suo | ||||||
|  | *.ntvs* | ||||||
|  | *.njsproj | ||||||
|  | *.sln | ||||||
|  | *.sw? | ||||||
|  | 
 | ||||||
|  | *.tsbuildinfo | ||||||
|  | 
 | ||||||
|  | test-results/ | ||||||
|  | playwright-report/ | ||||||
							
								
								
									
										64
									
								
								frontend/README.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								frontend/README.md
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,64 @@ | ||||||
|  | # dwengo-1-frontend | ||||||
|  | 
 | ||||||
|  | This template should help get you started developing with Vue 3 in Vite. | ||||||
|  | 
 | ||||||
|  | ## Recommended IDE Setup | ||||||
|  | 
 | ||||||
|  | [VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur). | ||||||
|  | 
 | ||||||
|  | ## Type Support for `.vue` Imports in TS | ||||||
|  | 
 | ||||||
|  | TypeScript cannot handle type information for `.vue` imports by default, so we replace the `tsc` CLI with `vue-tsc` for type checking. In editors, we need [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) to make the TypeScript language service aware of `.vue` types. | ||||||
|  | 
 | ||||||
|  | ## Customize configuration | ||||||
|  | 
 | ||||||
|  | See [Vite Configuration Reference](https://vite.dev/config/). | ||||||
|  | 
 | ||||||
|  | ## Project Setup | ||||||
|  | 
 | ||||||
|  | ```sh | ||||||
|  | npm install | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | ### Compile and Hot-Reload for Development | ||||||
|  | 
 | ||||||
|  | ```sh | ||||||
|  | npm run dev | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | ### Type-Check, Compile and Minify for Production | ||||||
|  | 
 | ||||||
|  | ```sh | ||||||
|  | npm run build | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | ### Run Unit Tests with [Vitest](https://vitest.dev/) | ||||||
|  | 
 | ||||||
|  | ```sh | ||||||
|  | npm run test:unit | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | ### Run End-to-End Tests with [Playwright](https://playwright.dev) | ||||||
|  | 
 | ||||||
|  | ```sh | ||||||
|  | # Install browsers for the first run | ||||||
|  | npx playwright install | ||||||
|  | 
 | ||||||
|  | # When testing on CI, must build the project first | ||||||
|  | npm run build | ||||||
|  | 
 | ||||||
|  | # Runs the end-to-end tests | ||||||
|  | npm run test:e2e | ||||||
|  | # Runs the tests only on Chromium | ||||||
|  | npm run test:e2e -- --project=chromium | ||||||
|  | # Runs the tests of a specific file | ||||||
|  | npm run test:e2e -- tests/example.spec.ts | ||||||
|  | # Runs the tests in debug mode | ||||||
|  | npm run test:e2e -- --debug | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | ### Lint with [ESLint](https://eslint.org/) | ||||||
|  | 
 | ||||||
|  | ```sh | ||||||
|  | npm run lint | ||||||
|  | ``` | ||||||
							
								
								
									
										4
									
								
								frontend/e2e/tsconfig.json
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								frontend/e2e/tsconfig.json
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | ||||||
|  | { | ||||||
|  |     "extends": "@tsconfig/node22/tsconfig.json", | ||||||
|  |     "include": ["./**/*"] | ||||||
|  | } | ||||||
							
								
								
									
										8
									
								
								frontend/e2e/vue.spec.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								frontend/e2e/vue.spec.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,8 @@ | ||||||
|  | import { test, expect } from '@playwright/test'; | ||||||
|  | 
 | ||||||
|  | // See here how to get started:
 | ||||||
|  | // https://playwright.dev/docs/intro
 | ||||||
|  | test('visits the app root url', async ({ page }) => { | ||||||
|  |     await page.goto('/'); | ||||||
|  |     await expect(page.locator('h1')).toHaveText('You did it!'); | ||||||
|  | }); | ||||||
							
								
								
									
										1
									
								
								frontend/env.d.ts
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								frontend/env.d.ts
									
										
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1 @@ | ||||||
|  | /// <reference types="vite/client" />
 | ||||||
							
								
								
									
										45
									
								
								frontend/eslint.config.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								frontend/eslint.config.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,45 @@ | ||||||
|  | import pluginVue from 'eslint-plugin-vue'; | ||||||
|  | import { | ||||||
|  |     defineConfigWithVueTs, | ||||||
|  |     vueTsConfigs, | ||||||
|  | } from '@vue/eslint-config-typescript'; | ||||||
|  | import pluginVitest from '@vitest/eslint-plugin'; | ||||||
|  | import pluginPlaywright from 'eslint-plugin-playwright'; | ||||||
|  | import skipFormatting from '@vue/eslint-config-prettier/skip-formatting'; | ||||||
|  | import rootConfig from '../eslint.config'; | ||||||
|  | 
 | ||||||
|  | // To allow more languages other than `ts` in `.vue` files, uncomment the following lines:
 | ||||||
|  | // Import { configureVueProject } from '@vue/eslint-config-typescript'
 | ||||||
|  | // ConfigureVueProject({ scriptLangs: ['ts', 'tsx'] })
 | ||||||
|  | // More info at https://github.com/vuejs/eslint-config-typescript/#advanced-setup
 | ||||||
|  | 
 | ||||||
|  | const vueConfig = defineConfigWithVueTs( | ||||||
|  |     { | ||||||
|  |         name: 'app/files-to-lint', | ||||||
|  |         files: ['**/*.{ts,mts,tsx,vue}'], | ||||||
|  |     }, | ||||||
|  | 
 | ||||||
|  |     { | ||||||
|  |         name: 'app/files-to-ignore', | ||||||
|  |         ignores: ['**/dist/**', '**/dist-ssr/**', '**/coverage/**'], | ||||||
|  |     }, | ||||||
|  | 
 | ||||||
|  |     pluginVue.configs['flat/essential'], | ||||||
|  |     vueTsConfigs.recommended, | ||||||
|  | 
 | ||||||
|  |     { | ||||||
|  |         ...pluginVitest.configs.recommended, | ||||||
|  |         files: ['src/**/__tests__/*'], | ||||||
|  |     }, | ||||||
|  | 
 | ||||||
|  |     { | ||||||
|  |         ...pluginPlaywright.configs['flat/recommended'], | ||||||
|  |         files: ['e2e/**/*.{test,spec}.{js,ts,jsx,tsx}'], | ||||||
|  |     }, | ||||||
|  |     skipFormatting | ||||||
|  | ); | ||||||
|  | 
 | ||||||
|  | export default [ | ||||||
|  |     ...rootConfig, | ||||||
|  |     ...vueConfig | ||||||
|  | ] | ||||||
							
								
								
									
										13
									
								
								frontend/index.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								frontend/index.html
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,13 @@ | ||||||
|  | <!doctype html> | ||||||
|  | <html lang=""> | ||||||
|  |     <head> | ||||||
|  |         <meta charset="UTF-8" /> | ||||||
|  |         <link rel="icon" href="/favicon.ico" /> | ||||||
|  |         <meta name="viewport" content="width=device-width, initial-scale=1.0" /> | ||||||
|  |         <title>Vite App</title> | ||||||
|  |     </head> | ||||||
|  |     <body> | ||||||
|  |         <div id="app"></div> | ||||||
|  |         <script type="module" src="/src/main.ts"></script> | ||||||
|  |     </body> | ||||||
|  | </html> | ||||||
							
								
								
									
										6825
									
								
								frontend/package-lock.json
									
										
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										6825
									
								
								frontend/package-lock.json
									
										
									
										generated
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										45
									
								
								frontend/package.json
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								frontend/package.json
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,45 @@ | ||||||
|  | { | ||||||
|  |     "name": "dwengo-1-frontend", | ||||||
|  |     "version": "0.0.1", | ||||||
|  |     "description": "Frontend for Dwengo-1", | ||||||
|  |     "private": true, | ||||||
|  |     "type": "module", | ||||||
|  |     "scripts": { | ||||||
|  |         "build": "vite build", | ||||||
|  |         "dev": "vite", | ||||||
|  |         "preview": "vite preview", | ||||||
|  |         "type-check": "vue-tsc --build", | ||||||
|  |         "format": "prettier --write src/", | ||||||
|  |         "format-check": "prettier --check src/", | ||||||
|  |         "lint": "eslint . --fix", | ||||||
|  |         "test:unit": "vitest --run", | ||||||
|  |         "test:e2e": "playwright test" | ||||||
|  |     }, | ||||||
|  |     "dependencies": { | ||||||
|  |         "vue": "^3.5.13", | ||||||
|  |         "vue-router": "^4.5.0", | ||||||
|  |         "vuetify": "^3.7.12" | ||||||
|  |     }, | ||||||
|  |     "devDependencies": { | ||||||
|  |         "@playwright/test": "^1.50.1", | ||||||
|  |         "@tsconfig/node22": "^22.0.0", | ||||||
|  |         "@types/jsdom": "^21.1.7", | ||||||
|  |         "@types/node": "^22.13.4", | ||||||
|  |         "@vitejs/plugin-vue": "^5.2.1", | ||||||
|  |         "@vitest/eslint-plugin": "1.1.31", | ||||||
|  |         "@vue/eslint-config-prettier": "^10.2.0", | ||||||
|  |         "@vue/eslint-config-typescript": "^14.4.0", | ||||||
|  |         "@vue/test-utils": "^2.4.6", | ||||||
|  |         "@vue/tsconfig": "^0.7.0", | ||||||
|  |         "eslint": "^9.20.1", | ||||||
|  |         "eslint-plugin-playwright": "^2.2.0", | ||||||
|  |         "eslint-plugin-vue": "^9.32.0", | ||||||
|  |         "jsdom": "^26.0.0", | ||||||
|  |         "npm-run-all2": "^7.0.2", | ||||||
|  |         "typescript": "~5.7.3", | ||||||
|  |         "vite": "^6.1.0", | ||||||
|  |         "vite-plugin-vue-devtools": "^7.7.2", | ||||||
|  |         "vitest": "^3.0.5", | ||||||
|  |         "vue-tsc": "^2.2.2" | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										112
									
								
								frontend/playwright.config.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										112
									
								
								frontend/playwright.config.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,112 @@ | ||||||
|  | import process from 'node:process'; | ||||||
|  | import { defineConfig, devices } from '@playwright/test'; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Read environment variables from file. | ||||||
|  |  * https://github.com/motdotla/dotenv
 | ||||||
|  |  */ | ||||||
|  | // Require('dotenv').config();
 | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * See https://playwright.dev/docs/test-configuration.
 | ||||||
|  |  */ | ||||||
|  | export default defineConfig({ | ||||||
|  |     testDir: './e2e', | ||||||
|  |     /* Maximum time one test can run for. */ | ||||||
|  |     timeout: 30 * 1000, | ||||||
|  |     expect: { | ||||||
|  |         /** | ||||||
|  |          * Maximum time expect() should wait for the condition to be met. | ||||||
|  |          * For example in `await expect(locator).toHaveText();` | ||||||
|  |          */ | ||||||
|  |         timeout: 5000, | ||||||
|  |     }, | ||||||
|  |     /* Fail the build on CI if you accidentally left test.only in the source code. */ | ||||||
|  |     forbidOnly: Boolean(process.env.CI), | ||||||
|  |     /* Retry on CI only */ | ||||||
|  |     retries: process.env.CI ? 2 : 0, | ||||||
|  |     /* Opt out of parallel tests on CI. */ | ||||||
|  |     workers: process.env.CI ? 1 : undefined, | ||||||
|  |     /* Reporter to use. See https://playwright.dev/docs/test-reporters */ | ||||||
|  |     reporter: 'html', | ||||||
|  |     /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ | ||||||
|  |     use: { | ||||||
|  |         /* Maximum time each action such as `click()` can take. Defaults to 0 (no limit). */ | ||||||
|  |         actionTimeout: 0, | ||||||
|  |         /* Base URL to use in actions like `await page.goto('/')`. */ | ||||||
|  |         baseURL: process.env.CI | ||||||
|  |             ? 'http://localhost:4173' | ||||||
|  |             : 'http://localhost:5173', | ||||||
|  | 
 | ||||||
|  |         /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ | ||||||
|  |         trace: 'on-first-retry', | ||||||
|  | 
 | ||||||
|  |         /* Only on CI systems run the tests headless */ | ||||||
|  |         headless: Boolean(process.env.CI), | ||||||
|  |     }, | ||||||
|  | 
 | ||||||
|  |     /* Configure projects for major browsers */ | ||||||
|  |     projects: [ | ||||||
|  |         { | ||||||
|  |             name: 'chromium', | ||||||
|  |             use: { | ||||||
|  |                 ...devices['Desktop Chrome'], | ||||||
|  |             }, | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |             name: 'firefox', | ||||||
|  |             use: { | ||||||
|  |                 ...devices['Desktop Firefox'], | ||||||
|  |             }, | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |             name: 'webkit', | ||||||
|  |             use: { | ||||||
|  |                 ...devices['Desktop Safari'], | ||||||
|  |             }, | ||||||
|  |         }, | ||||||
|  | 
 | ||||||
|  |         /* Test against mobile viewports. */ | ||||||
|  |         // {
 | ||||||
|  |         //   Name: 'Mobile Chrome',
 | ||||||
|  |         //   Use: {
 | ||||||
|  |         //     ...devices['Pixel 5'],
 | ||||||
|  |         //   },
 | ||||||
|  |         // },
 | ||||||
|  |         // {
 | ||||||
|  |         //   Name: 'Mobile Safari',
 | ||||||
|  |         //   Use: {
 | ||||||
|  |         //     ...devices['iPhone 12'],
 | ||||||
|  |         //   },
 | ||||||
|  |         // },
 | ||||||
|  | 
 | ||||||
|  |         /* Test against branded browsers. */ | ||||||
|  |         // {
 | ||||||
|  |         //   Name: 'Microsoft Edge',
 | ||||||
|  |         //   Use: {
 | ||||||
|  |         //     Channel: 'msedge',
 | ||||||
|  |         //   },
 | ||||||
|  |         // },
 | ||||||
|  |         // {
 | ||||||
|  |         //   Name: 'Google Chrome',
 | ||||||
|  |         //   Use: {
 | ||||||
|  |         //     Channel: 'chrome',
 | ||||||
|  |         //   },
 | ||||||
|  |         // },
 | ||||||
|  |     ], | ||||||
|  | 
 | ||||||
|  |     /* Folder for test artifacts such as screenshots, videos, traces, etc. */ | ||||||
|  |     // OutputDir: 'test-results/',
 | ||||||
|  | 
 | ||||||
|  |     /* Run your local dev server before starting the tests */ | ||||||
|  |     webServer: { | ||||||
|  |         /** | ||||||
|  |          * Use the dev server by default for faster feedback loop. | ||||||
|  |          * Use the preview server on CI for more realistic testing. | ||||||
|  |          * Playwright will re-use the local server if there is already a dev-server running. | ||||||
|  |          */ | ||||||
|  |         command: process.env.CI ? 'npm run preview' : 'npm run dev', | ||||||
|  |         port: process.env.CI ? 4173 : 5173, | ||||||
|  |         reuseExistingServer: !process.env.CI, | ||||||
|  |     }, | ||||||
|  | }); | ||||||
							
								
								
									
										11
									
								
								frontend/prettier.config.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								frontend/prettier.config.js
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,11 @@ | ||||||
|  | /** | ||||||
|  |  * @type {import("prettier").Options} | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | const rootConfig = import ('../prettier.config.js'); | ||||||
|  | 
 | ||||||
|  | export default { | ||||||
|  |     ...rootConfig, | ||||||
|  |     vueIndentScriptAndStyle: true, | ||||||
|  |     singleAttributePerLine: true | ||||||
|  | }; | ||||||
							
								
								
									
										
											BIN
										
									
								
								frontend/public/favicon.ico
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								frontend/public/favicon.ico
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 4.2 KiB | 
							
								
								
									
										91
									
								
								frontend/src/App.vue
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								frontend/src/App.vue
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,91 @@ | ||||||
|  | <script setup lang="ts"> | ||||||
|  |     import { RouterLink, RouterView } from "vue-router"; | ||||||
|  |     import HelloWorld from "./components/HelloWorld.vue"; | ||||||
|  | </script> | ||||||
|  | 
 | ||||||
|  | <template> | ||||||
|  |     <header> | ||||||
|  |         <img | ||||||
|  |             alt="Vue logo" | ||||||
|  |             class="logo" | ||||||
|  |             src="@/assets/logo.svg" | ||||||
|  |             width="125" | ||||||
|  |             height="125" | ||||||
|  |         /> | ||||||
|  | 
 | ||||||
|  |         <div class="wrapper"> | ||||||
|  |             <HelloWorld msg="You did it!" /> | ||||||
|  | 
 | ||||||
|  |             <nav> | ||||||
|  |                 <RouterLink to="/">Home</RouterLink> | ||||||
|  |                 <RouterLink to="/about">About</RouterLink> | ||||||
|  |             </nav> | ||||||
|  |         </div> | ||||||
|  |     </header> | ||||||
|  | 
 | ||||||
|  |     <RouterView /> | ||||||
|  | </template> | ||||||
|  | 
 | ||||||
|  | <style scoped> | ||||||
|  |     header { | ||||||
|  |         line-height: 1.5; | ||||||
|  |         max-height: 100vh; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     .logo { | ||||||
|  |         display: block; | ||||||
|  |         margin: 0 auto 2rem; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     nav { | ||||||
|  |         width: 100%; | ||||||
|  |         font-size: 12px; | ||||||
|  |         text-align: center; | ||||||
|  |         margin-top: 2rem; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     nav a.router-link-exact-active { | ||||||
|  |         color: var(--color-text); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     nav a.router-link-exact-active:hover { | ||||||
|  |         background-color: transparent; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     nav a { | ||||||
|  |         display: inline-block; | ||||||
|  |         padding: 0 1rem; | ||||||
|  |         border-left: 1px solid var(--color-border); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     nav a:first-of-type { | ||||||
|  |         border: 0; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @media (min-width: 1024px) { | ||||||
|  |         header { | ||||||
|  |             display: flex; | ||||||
|  |             place-items: center; | ||||||
|  |             padding-right: calc(var(--section-gap) / 2); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .logo { | ||||||
|  |             margin: 0 2rem 0 0; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         header .wrapper { | ||||||
|  |             display: flex; | ||||||
|  |             place-items: flex-start; | ||||||
|  |             flex-wrap: wrap; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         nav { | ||||||
|  |             text-align: left; | ||||||
|  |             margin-left: -1rem; | ||||||
|  |             font-size: 1rem; | ||||||
|  | 
 | ||||||
|  |             padding: 1rem 0; | ||||||
|  |             margin-top: 1rem; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | </style> | ||||||
							
								
								
									
										86
									
								
								frontend/src/assets/base.css
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								frontend/src/assets/base.css
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,86 @@ | ||||||
|  | /* color palette from <https://github.com/vuejs/theme> */ | ||||||
|  | :root { | ||||||
|  |     --vt-c-white: #ffffff; | ||||||
|  |     --vt-c-white-soft: #f8f8f8; | ||||||
|  |     --vt-c-white-mute: #f2f2f2; | ||||||
|  | 
 | ||||||
|  |     --vt-c-black: #181818; | ||||||
|  |     --vt-c-black-soft: #222222; | ||||||
|  |     --vt-c-black-mute: #282828; | ||||||
|  | 
 | ||||||
|  |     --vt-c-indigo: #2c3e50; | ||||||
|  | 
 | ||||||
|  |     --vt-c-divider-light-1: rgba(60, 60, 60, 0.29); | ||||||
|  |     --vt-c-divider-light-2: rgba(60, 60, 60, 0.12); | ||||||
|  |     --vt-c-divider-dark-1: rgba(84, 84, 84, 0.65); | ||||||
|  |     --vt-c-divider-dark-2: rgba(84, 84, 84, 0.48); | ||||||
|  | 
 | ||||||
|  |     --vt-c-text-light-1: var(--vt-c-indigo); | ||||||
|  |     --vt-c-text-light-2: rgba(60, 60, 60, 0.66); | ||||||
|  |     --vt-c-text-dark-1: var(--vt-c-white); | ||||||
|  |     --vt-c-text-dark-2: rgba(235, 235, 235, 0.64); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* semantic color variables for this project */ | ||||||
|  | :root { | ||||||
|  |     --color-background: var(--vt-c-white); | ||||||
|  |     --color-background-soft: var(--vt-c-white-soft); | ||||||
|  |     --color-background-mute: var(--vt-c-white-mute); | ||||||
|  | 
 | ||||||
|  |     --color-border: var(--vt-c-divider-light-2); | ||||||
|  |     --color-border-hover: var(--vt-c-divider-light-1); | ||||||
|  | 
 | ||||||
|  |     --color-heading: var(--vt-c-text-light-1); | ||||||
|  |     --color-text: var(--vt-c-text-light-1); | ||||||
|  | 
 | ||||||
|  |     --section-gap: 160px; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | @media (prefers-color-scheme: dark) { | ||||||
|  |     :root { | ||||||
|  |         --color-background: var(--vt-c-black); | ||||||
|  |         --color-background-soft: var(--vt-c-black-soft); | ||||||
|  |         --color-background-mute: var(--vt-c-black-mute); | ||||||
|  | 
 | ||||||
|  |         --color-border: var(--vt-c-divider-dark-2); | ||||||
|  |         --color-border-hover: var(--vt-c-divider-dark-1); | ||||||
|  | 
 | ||||||
|  |         --color-heading: var(--vt-c-text-dark-1); | ||||||
|  |         --color-text: var(--vt-c-text-dark-2); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | *, | ||||||
|  | *::before, | ||||||
|  | *::after { | ||||||
|  |     box-sizing: border-box; | ||||||
|  |     margin: 0; | ||||||
|  |     font-weight: normal; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | body { | ||||||
|  |     min-height: 100vh; | ||||||
|  |     color: var(--color-text); | ||||||
|  |     background: var(--color-background); | ||||||
|  |     transition: | ||||||
|  |         color 0.5s, | ||||||
|  |         background-color 0.5s; | ||||||
|  |     line-height: 1.6; | ||||||
|  |     font-family: | ||||||
|  |         Inter, | ||||||
|  |         -apple-system, | ||||||
|  |         BlinkMacSystemFont, | ||||||
|  |         "Segoe UI", | ||||||
|  |         Roboto, | ||||||
|  |         Oxygen, | ||||||
|  |         Ubuntu, | ||||||
|  |         Cantarell, | ||||||
|  |         "Fira Sans", | ||||||
|  |         "Droid Sans", | ||||||
|  |         "Helvetica Neue", | ||||||
|  |         sans-serif; | ||||||
|  |     font-size: 15px; | ||||||
|  |     text-rendering: optimizeLegibility; | ||||||
|  |     -webkit-font-smoothing: antialiased; | ||||||
|  |     -moz-osx-font-smoothing: grayscale; | ||||||
|  | } | ||||||
							
								
								
									
										1
									
								
								frontend/src/assets/logo.svg
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								frontend/src/assets/logo.svg
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1 @@ | ||||||
|  | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 261.76 226.69"><path d="M161.096.001l-30.225 52.351L100.647.001H-.005l130.877 226.688L261.749.001z" fill="#41b883"/><path d="M161.096.001l-30.225 52.351L100.647.001H52.346l78.526 136.01L209.398.001z" fill="#34495e"/></svg> | ||||||
| After Width: | Height: | Size: 276 B | 
							
								
								
									
										35
									
								
								frontend/src/assets/main.css
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								frontend/src/assets/main.css
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,35 @@ | ||||||
|  | @import "./base.css"; | ||||||
|  | 
 | ||||||
|  | #app { | ||||||
|  |     max-width: 1280px; | ||||||
|  |     margin: 0 auto; | ||||||
|  |     padding: 2rem; | ||||||
|  |     font-weight: normal; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | a, | ||||||
|  | .green { | ||||||
|  |     text-decoration: none; | ||||||
|  |     color: hsla(160, 100%, 37%, 1); | ||||||
|  |     transition: 0.4s; | ||||||
|  |     padding: 3px; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | @media (hover: hover) { | ||||||
|  |     a:hover { | ||||||
|  |         background-color: hsla(160, 100%, 37%, 0.2); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | @media (min-width: 1024px) { | ||||||
|  |     body { | ||||||
|  |         display: flex; | ||||||
|  |         place-items: center; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     #app { | ||||||
|  |         display: grid; | ||||||
|  |         grid-template-columns: 1fr 1fr; | ||||||
|  |         padding: 0 2rem; | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										52
									
								
								frontend/src/components/HelloWorld.vue
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								frontend/src/components/HelloWorld.vue
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,52 @@ | ||||||
|  | <script setup lang="ts"> | ||||||
|  |     defineProps<{ | ||||||
|  |         msg: string; | ||||||
|  |     }>(); | ||||||
|  | </script> | ||||||
|  | 
 | ||||||
|  | <template> | ||||||
|  |     <div class="greetings"> | ||||||
|  |         <h1 class="green">{{ msg }}</h1> | ||||||
|  |         <h3> | ||||||
|  |             You’ve successfully created a project with | ||||||
|  |             <a | ||||||
|  |                 href="https://vite.dev/" | ||||||
|  |                 target="_blank" | ||||||
|  |                 rel="noopener" | ||||||
|  |                 >Vite</a | ||||||
|  |             > | ||||||
|  |             + | ||||||
|  |             <a | ||||||
|  |                 href="https://vuejs.org/" | ||||||
|  |                 target="_blank" | ||||||
|  |                 rel="noopener" | ||||||
|  |                 >Vue 3</a | ||||||
|  |             >. What's next? | ||||||
|  |         </h3> | ||||||
|  |     </div> | ||||||
|  | </template> | ||||||
|  | 
 | ||||||
|  | <style scoped> | ||||||
|  |     h1 { | ||||||
|  |         font-weight: 500; | ||||||
|  |         font-size: 2.6rem; | ||||||
|  |         position: relative; | ||||||
|  |         top: -10px; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     h3 { | ||||||
|  |         font-size: 1.2rem; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     .greetings h1, | ||||||
|  |     .greetings h3 { | ||||||
|  |         text-align: center; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @media (min-width: 1024px) { | ||||||
|  |         .greetings h1, | ||||||
|  |         .greetings h3 { | ||||||
|  |             text-align: left; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | </style> | ||||||
							
								
								
									
										178
									
								
								frontend/src/components/TheWelcome.vue
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										178
									
								
								frontend/src/components/TheWelcome.vue
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,178 @@ | ||||||
|  | <script setup lang="ts"> | ||||||
|  |     import WelcomeItem from "./WelcomeItem.vue"; | ||||||
|  |     import DocumentationIcon from "./icons/IconDocumentation.vue"; | ||||||
|  |     import ToolingIcon from "./icons/IconTooling.vue"; | ||||||
|  |     import EcosystemIcon from "./icons/IconEcosystem.vue"; | ||||||
|  |     import CommunityIcon from "./icons/IconCommunity.vue"; | ||||||
|  |     import SupportIcon from "./icons/IconSupport.vue"; | ||||||
|  | 
 | ||||||
|  |     function openReadmeInEditor() { | ||||||
|  |         return fetch("/__open-in-editor?file=README.md"); | ||||||
|  |     } | ||||||
|  | </script> | ||||||
|  | 
 | ||||||
|  | <template> | ||||||
|  |     <WelcomeItem> | ||||||
|  |         <template #icon> | ||||||
|  |             <DocumentationIcon /> | ||||||
|  |         </template> | ||||||
|  |         <template #heading>Documentation</template> | ||||||
|  | 
 | ||||||
|  |         Vue’s | ||||||
|  |         <a | ||||||
|  |             href="https://vuejs.org/" | ||||||
|  |             target="_blank" | ||||||
|  |             rel="noopener" | ||||||
|  |             >official documentation</a | ||||||
|  |         > | ||||||
|  |         provides you with all information you need to get started. | ||||||
|  |     </WelcomeItem> | ||||||
|  | 
 | ||||||
|  |     <WelcomeItem> | ||||||
|  |         <template #icon> | ||||||
|  |             <ToolingIcon /> | ||||||
|  |         </template> | ||||||
|  |         <template #heading>Tooling</template> | ||||||
|  | 
 | ||||||
|  |         This project is served and bundled with | ||||||
|  |         <a | ||||||
|  |             href="https://vite.dev/guide/features.html" | ||||||
|  |             target="_blank" | ||||||
|  |             rel="noopener" | ||||||
|  |             >Vite</a | ||||||
|  |         >. The recommended IDE setup is | ||||||
|  |         <a | ||||||
|  |             href="https://code.visualstudio.com/" | ||||||
|  |             target="_blank" | ||||||
|  |             rel="noopener" | ||||||
|  |             >VSCode</a | ||||||
|  |         > | ||||||
|  |         + | ||||||
|  |         <a | ||||||
|  |             href="https://github.com/johnsoncodehk/volar" | ||||||
|  |             target="_blank" | ||||||
|  |             rel="noopener" | ||||||
|  |             >Volar</a | ||||||
|  |         >. If you need to test your components and web pages, check out | ||||||
|  |         <a | ||||||
|  |             href="https://vitest.dev/" | ||||||
|  |             target="_blank" | ||||||
|  |             rel="noopener" | ||||||
|  |             >Vitest</a | ||||||
|  |         > | ||||||
|  |         and | ||||||
|  |         <a | ||||||
|  |             href="https://www.cypress.io/" | ||||||
|  |             target="_blank" | ||||||
|  |             rel="noopener" | ||||||
|  |             >Cypress</a | ||||||
|  |         > | ||||||
|  |         / | ||||||
|  |         <a | ||||||
|  |             href="https://playwright.dev/" | ||||||
|  |             target="_blank" | ||||||
|  |             rel="noopener" | ||||||
|  |             >Playwright</a | ||||||
|  |         >. | ||||||
|  | 
 | ||||||
|  |         <br /> | ||||||
|  | 
 | ||||||
|  |         More instructions are available in | ||||||
|  |         <a | ||||||
|  |             href="javascript:void(0)" | ||||||
|  |             @click="openReadmeInEditor" | ||||||
|  |             ><code>README.md</code></a | ||||||
|  |         >. | ||||||
|  |     </WelcomeItem> | ||||||
|  | 
 | ||||||
|  |     <WelcomeItem> | ||||||
|  |         <template #icon> | ||||||
|  |             <EcosystemIcon /> | ||||||
|  |         </template> | ||||||
|  |         <template #heading>Ecosystem</template> | ||||||
|  | 
 | ||||||
|  |         Get official tools and libraries for your project: | ||||||
|  |         <a | ||||||
|  |             href="https://pinia.vuejs.org/" | ||||||
|  |             target="_blank" | ||||||
|  |             rel="noopener" | ||||||
|  |             >Pinia</a | ||||||
|  |         >, | ||||||
|  |         <a | ||||||
|  |             href="https://router.vuejs.org/" | ||||||
|  |             target="_blank" | ||||||
|  |             rel="noopener" | ||||||
|  |             >Vue Router</a | ||||||
|  |         >, | ||||||
|  |         <a | ||||||
|  |             href="https://test-utils.vuejs.org/" | ||||||
|  |             target="_blank" | ||||||
|  |             rel="noopener" | ||||||
|  |             >Vue Test Utils</a | ||||||
|  |         >, and | ||||||
|  |         <a | ||||||
|  |             href="https://github.com/vuejs/devtools" | ||||||
|  |             target="_blank" | ||||||
|  |             rel="noopener" | ||||||
|  |             >Vue Dev Tools</a | ||||||
|  |         >. If you need more resources, we suggest paying | ||||||
|  |         <a | ||||||
|  |             href="https://github.com/vuejs/awesome-vue" | ||||||
|  |             target="_blank" | ||||||
|  |             rel="noopener" | ||||||
|  |             >Awesome Vue</a | ||||||
|  |         > | ||||||
|  |         a visit. | ||||||
|  |     </WelcomeItem> | ||||||
|  | 
 | ||||||
|  |     <WelcomeItem> | ||||||
|  |         <template #icon> | ||||||
|  |             <CommunityIcon /> | ||||||
|  |         </template> | ||||||
|  |         <template #heading>Community</template> | ||||||
|  | 
 | ||||||
|  |         Got stuck? Ask your question on | ||||||
|  |         <a | ||||||
|  |             href="https://chat.vuejs.org" | ||||||
|  |             target="_blank" | ||||||
|  |             rel="noopener" | ||||||
|  |             >Vue Land</a | ||||||
|  |         > | ||||||
|  |         (our official Discord server), or | ||||||
|  |         <a | ||||||
|  |             href="https://stackoverflow.com/questions/tagged/vue.js" | ||||||
|  |             target="_blank" | ||||||
|  |             rel="noopener" | ||||||
|  |             >StackOverflow</a | ||||||
|  |         >. You should also follow the official | ||||||
|  |         <a | ||||||
|  |             href="https://bsky.app/profile/vuejs.org" | ||||||
|  |             target="_blank" | ||||||
|  |             rel="noopener" | ||||||
|  |             >@vuejs.org</a | ||||||
|  |         > | ||||||
|  |         Bluesky account or the | ||||||
|  |         <a | ||||||
|  |             href="https://x.com/vuejs" | ||||||
|  |             target="_blank" | ||||||
|  |             rel="noopener" | ||||||
|  |             >@vuejs</a | ||||||
|  |         > | ||||||
|  |         X account for latest news in the Vue world. | ||||||
|  |     </WelcomeItem> | ||||||
|  | 
 | ||||||
|  |     <WelcomeItem> | ||||||
|  |         <template #icon> | ||||||
|  |             <SupportIcon /> | ||||||
|  |         </template> | ||||||
|  |         <template #heading>Support Vue</template> | ||||||
|  | 
 | ||||||
|  |         As an independent project, Vue relies on community backing for its sustainability. You can help us by | ||||||
|  |         <a | ||||||
|  |             href="https://vuejs.org/sponsor/" | ||||||
|  |             target="_blank" | ||||||
|  |             rel="noopener" | ||||||
|  |             >becoming a sponsor</a | ||||||
|  |         >. | ||||||
|  |     </WelcomeItem> | ||||||
|  | </template> | ||||||
							
								
								
									
										87
									
								
								frontend/src/components/WelcomeItem.vue
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								frontend/src/components/WelcomeItem.vue
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,87 @@ | ||||||
|  | <template> | ||||||
|  |     <div class="item"> | ||||||
|  |         <i> | ||||||
|  |             <slot name="icon"></slot> | ||||||
|  |         </i> | ||||||
|  |         <div class="details"> | ||||||
|  |             <h3> | ||||||
|  |                 <slot name="heading"></slot> | ||||||
|  |             </h3> | ||||||
|  |             <slot></slot> | ||||||
|  |         </div> | ||||||
|  |     </div> | ||||||
|  | </template> | ||||||
|  | 
 | ||||||
|  | <style scoped> | ||||||
|  |     .item { | ||||||
|  |         margin-top: 2rem; | ||||||
|  |         display: flex; | ||||||
|  |         position: relative; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     .details { | ||||||
|  |         flex: 1; | ||||||
|  |         margin-left: 1rem; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     i { | ||||||
|  |         display: flex; | ||||||
|  |         place-items: center; | ||||||
|  |         place-content: center; | ||||||
|  |         width: 32px; | ||||||
|  |         height: 32px; | ||||||
|  | 
 | ||||||
|  |         color: var(--color-text); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     h3 { | ||||||
|  |         font-size: 1.2rem; | ||||||
|  |         font-weight: 500; | ||||||
|  |         margin-bottom: 0.4rem; | ||||||
|  |         color: var(--color-heading); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @media (min-width: 1024px) { | ||||||
|  |         .item { | ||||||
|  |             margin-top: 0; | ||||||
|  |             padding: 0.4rem 0 1rem calc(var(--section-gap) / 2); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         i { | ||||||
|  |             top: calc(50% - 25px); | ||||||
|  |             left: -26px; | ||||||
|  |             position: absolute; | ||||||
|  |             border: 1px solid var(--color-border); | ||||||
|  |             background: var(--color-background); | ||||||
|  |             border-radius: 8px; | ||||||
|  |             width: 50px; | ||||||
|  |             height: 50px; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .item:before { | ||||||
|  |             content: " "; | ||||||
|  |             border-left: 1px solid var(--color-border); | ||||||
|  |             position: absolute; | ||||||
|  |             left: 0; | ||||||
|  |             bottom: calc(50% + 25px); | ||||||
|  |             height: calc(50% - 25px); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .item:after { | ||||||
|  |             content: " "; | ||||||
|  |             border-left: 1px solid var(--color-border); | ||||||
|  |             position: absolute; | ||||||
|  |             left: 0; | ||||||
|  |             top: calc(50% + 25px); | ||||||
|  |             height: calc(50% - 25px); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .item:first-of-type:before { | ||||||
|  |             display: none; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         .item:last-of-type:after { | ||||||
|  |             display: none; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | </style> | ||||||
							
								
								
									
										11
									
								
								frontend/src/components/__tests__/HelloWorld.spec.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								frontend/src/components/__tests__/HelloWorld.spec.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,11 @@ | ||||||
|  | import { describe, it, expect } from "vitest"; | ||||||
|  | 
 | ||||||
|  | import { mount } from "@vue/test-utils"; | ||||||
|  | import HelloWorld from "../HelloWorld.vue"; | ||||||
|  | 
 | ||||||
|  | describe("HelloWorld", () => { | ||||||
|  |     it("renders properly", () => { | ||||||
|  |         const wrapper = mount(HelloWorld, { props: { msg: "Hello Vitest" } }); | ||||||
|  |         expect(wrapper.text()).toContain("Hello Vitest"); | ||||||
|  |     }); | ||||||
|  | }); | ||||||
							
								
								
									
										12
									
								
								frontend/src/components/icons/IconCommunity.vue
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								frontend/src/components/icons/IconCommunity.vue
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,12 @@ | ||||||
|  | <template> | ||||||
|  |     <svg | ||||||
|  |         xmlns="http://www.w3.org/2000/svg" | ||||||
|  |         width="20" | ||||||
|  |         height="20" | ||||||
|  |         fill="currentColor" | ||||||
|  |     > | ||||||
|  |         <path | ||||||
|  |             d="M15 4a1 1 0 1 0 0 2V4zm0 11v-1a1 1 0 0 0-1 1h1zm0 4l-.707.707A1 1 0 0 0 16 19h-1zm-4-4l.707-.707A1 1 0 0 0 11 14v1zm-4.707-1.293a1 1 0 0 0-1.414 1.414l1.414-1.414zm-.707.707l-.707-.707.707.707zM9 11v-1a1 1 0 0 0-.707.293L9 11zm-4 0h1a1 1 0 0 0-1-1v1zm0 4H4a1 1 0 0 0 1.707.707L5 15zm10-9h2V4h-2v2zm2 0a1 1 0 0 1 1 1h2a3 3 0 0 0-3-3v2zm1 1v6h2V7h-2zm0 6a1 1 0 0 1-1 1v2a3 3 0 0 0 3-3h-2zm-1 1h-2v2h2v-2zm-3 1v4h2v-4h-2zm1.707 3.293l-4-4-1.414 1.414 4 4 1.414-1.414zM11 14H7v2h4v-2zm-4 0c-.276 0-.525-.111-.707-.293l-1.414 1.414C5.42 15.663 6.172 16 7 16v-2zm-.707 1.121l3.414-3.414-1.414-1.414-3.414 3.414 1.414 1.414zM9 12h4v-2H9v2zm4 0a3 3 0 0 0 3-3h-2a1 1 0 0 1-1 1v2zm3-3V3h-2v6h2zm0-6a3 3 0 0 0-3-3v2a1 1 0 0 1 1 1h2zm-3-3H3v2h10V0zM3 0a3 3 0 0 0-3 3h2a1 1 0 0 1 1-1V0zM0 3v6h2V3H0zm0 6a3 3 0 0 0 3 3v-2a1 1 0 0 1-1-1H0zm3 3h2v-2H3v2zm1-1v4h2v-4H4zm1.707 4.707l.586-.586-1.414-1.414-.586.586 1.414 1.414z" | ||||||
|  |         /> | ||||||
|  |     </svg> | ||||||
|  | </template> | ||||||
							
								
								
									
										12
									
								
								frontend/src/components/icons/IconDocumentation.vue
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								frontend/src/components/icons/IconDocumentation.vue
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,12 @@ | ||||||
|  | <template> | ||||||
|  |     <svg | ||||||
|  |         xmlns="http://www.w3.org/2000/svg" | ||||||
|  |         width="20" | ||||||
|  |         height="17" | ||||||
|  |         fill="currentColor" | ||||||
|  |     > | ||||||
|  |         <path | ||||||
|  |             d="M11 2.253a1 1 0 1 0-2 0h2zm-2 13a1 1 0 1 0 2 0H9zm.447-12.167a1 1 0 1 0 1.107-1.666L9.447 3.086zM1 2.253L.447 1.42A1 1 0 0 0 0 2.253h1zm0 13H0a1 1 0 0 0 1.553.833L1 15.253zm8.447.833a1 1 0 1 0 1.107-1.666l-1.107 1.666zm0-14.666a1 1 0 1 0 1.107 1.666L9.447 1.42zM19 2.253h1a1 1 0 0 0-.447-.833L19 2.253zm0 13l-.553.833A1 1 0 0 0 20 15.253h-1zm-9.553-.833a1 1 0 1 0 1.107 1.666L9.447 14.42zM9 2.253v13h2v-13H9zm1.553-.833C9.203.523 7.42 0 5.5 0v2c1.572 0 2.961.431 3.947 1.086l1.107-1.666zM5.5 0C3.58 0 1.797.523.447 1.42l1.107 1.666C2.539 2.431 3.928 2 5.5 2V0zM0 2.253v13h2v-13H0zm1.553 13.833C2.539 15.431 3.928 15 5.5 15v-2c-1.92 0-3.703.523-5.053 1.42l1.107 1.666zM5.5 15c1.572 0 2.961.431 3.947 1.086l1.107-1.666C9.203 13.523 7.42 13 5.5 13v2zm5.053-11.914C11.539 2.431 12.928 2 14.5 2V0c-1.92 0-3.703.523-5.053 1.42l1.107 1.666zM14.5 2c1.573 0 2.961.431 3.947 1.086l1.107-1.666C18.203.523 16.421 0 14.5 0v2zm3.5.253v13h2v-13h-2zm1.553 12.167C18.203 13.523 16.421 13 14.5 13v2c1.573 0 2.961.431 3.947 1.086l1.107-1.666zM14.5 13c-1.92 0-3.703.523-5.053 1.42l1.107 1.666C11.539 15.431 12.928 15 14.5 15v-2z" | ||||||
|  |         /> | ||||||
|  |     </svg> | ||||||
|  | </template> | ||||||
							
								
								
									
										12
									
								
								frontend/src/components/icons/IconEcosystem.vue
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								frontend/src/components/icons/IconEcosystem.vue
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,12 @@ | ||||||
|  | <template> | ||||||
|  |     <svg | ||||||
|  |         xmlns="http://www.w3.org/2000/svg" | ||||||
|  |         width="18" | ||||||
|  |         height="20" | ||||||
|  |         fill="currentColor" | ||||||
|  |     > | ||||||
|  |         <path | ||||||
|  |             d="M11.447 8.894a1 1 0 1 0-.894-1.789l.894 1.789zm-2.894-.789a1 1 0 1 0 .894 1.789l-.894-1.789zm0 1.789a1 1 0 1 0 .894-1.789l-.894 1.789zM7.447 7.106a1 1 0 1 0-.894 1.789l.894-1.789zM10 9a1 1 0 1 0-2 0h2zm-2 2.5a1 1 0 1 0 2 0H8zm9.447-5.606a1 1 0 1 0-.894-1.789l.894 1.789zm-2.894-.789a1 1 0 1 0 .894 1.789l-.894-1.789zm2 .789a1 1 0 1 0 .894-1.789l-.894 1.789zm-1.106-2.789a1 1 0 1 0-.894 1.789l.894-1.789zM18 5a1 1 0 1 0-2 0h2zm-2 2.5a1 1 0 1 0 2 0h-2zm-5.447-4.606a1 1 0 1 0 .894-1.789l-.894 1.789zM9 1l.447-.894a1 1 0 0 0-.894 0L9 1zm-2.447.106a1 1 0 1 0 .894 1.789l-.894-1.789zm-6 3a1 1 0 1 0 .894 1.789L.553 4.106zm2.894.789a1 1 0 1 0-.894-1.789l.894 1.789zm-2-.789a1 1 0 1 0-.894 1.789l.894-1.789zm1.106 2.789a1 1 0 1 0 .894-1.789l-.894 1.789zM2 5a1 1 0 1 0-2 0h2zM0 7.5a1 1 0 1 0 2 0H0zm8.553 12.394a1 1 0 1 0 .894-1.789l-.894 1.789zm-1.106-2.789a1 1 0 1 0-.894 1.789l.894-1.789zm1.106 1a1 1 0 1 0 .894 1.789l-.894-1.789zm2.894.789a1 1 0 1 0-.894-1.789l.894 1.789zM8 19a1 1 0 1 0 2 0H8zm2-2.5a1 1 0 1 0-2 0h2zm-7.447.394a1 1 0 1 0 .894-1.789l-.894 1.789zM1 15H0a1 1 0 0 0 .553.894L1 15zm1-2.5a1 1 0 1 0-2 0h2zm12.553 2.606a1 1 0 1 0 .894 1.789l-.894-1.789zM17 15l.447.894A1 1 0 0 0 18 15h-1zm1-2.5a1 1 0 1 0-2 0h2zm-7.447-5.394l-2 1 .894 1.789 2-1-.894-1.789zm-1.106 1l-2-1-.894 1.789 2 1 .894-1.789zM8 9v2.5h2V9H8zm8.553-4.894l-2 1 .894 1.789 2-1-.894-1.789zm.894 0l-2-1-.894 1.789 2 1 .894-1.789zM16 5v2.5h2V5h-2zm-4.553-3.894l-2-1-.894 1.789 2 1 .894-1.789zm-2.894-1l-2 1 .894 1.789 2-1L8.553.106zM1.447 5.894l2-1-.894-1.789-2 1 .894 1.789zm-.894 0l2 1 .894-1.789-2-1-.894 1.789zM0 5v2.5h2V5H0zm9.447 13.106l-2-1-.894 1.789 2 1 .894-1.789zm0 1.789l2-1-.894-1.789-2 1 .894 1.789zM10 19v-2.5H8V19h2zm-6.553-3.894l-2-1-.894 1.789 2 1 .894-1.789zM2 15v-2.5H0V15h2zm13.447 1.894l2-1-.894-1.789-2 1 .894 1.789zM18 15v-2.5h-2V15h2z" | ||||||
|  |         /> | ||||||
|  |     </svg> | ||||||
|  | </template> | ||||||
							
								
								
									
										12
									
								
								frontend/src/components/icons/IconSupport.vue
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								frontend/src/components/icons/IconSupport.vue
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,12 @@ | ||||||
|  | <template> | ||||||
|  |     <svg | ||||||
|  |         xmlns="http://www.w3.org/2000/svg" | ||||||
|  |         width="20" | ||||||
|  |         height="20" | ||||||
|  |         fill="currentColor" | ||||||
|  |     > | ||||||
|  |         <path | ||||||
|  |             d="M10 3.22l-.61-.6a5.5 5.5 0 0 0-7.666.105 5.5 5.5 0 0 0-.114 7.665L10 18.78l8.39-8.4a5.5 5.5 0 0 0-.114-7.665 5.5 5.5 0 0 0-7.666-.105l-.61.61z" | ||||||
|  |         /> | ||||||
|  |     </svg> | ||||||
|  | </template> | ||||||
							
								
								
									
										19
									
								
								frontend/src/components/icons/IconTooling.vue
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								frontend/src/components/icons/IconTooling.vue
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,19 @@ | ||||||
|  | <!-- This icon is from <https://github.com/Templarian/MaterialDesign>, distributed under Apache 2.0 (https://www.apache.org/licenses/LICENSE-2.0) license--> | ||||||
|  | <template> | ||||||
|  |     <svg | ||||||
|  |         xmlns="http://www.w3.org/2000/svg" | ||||||
|  |         xmlns:xlink="http://www.w3.org/1999/xlink" | ||||||
|  |         aria-hidden="true" | ||||||
|  |         role="img" | ||||||
|  |         class="iconify iconify--mdi" | ||||||
|  |         width="24" | ||||||
|  |         height="24" | ||||||
|  |         preserveAspectRatio="xMidYMid meet" | ||||||
|  |         viewBox="0 0 24 24" | ||||||
|  |     > | ||||||
|  |         <path | ||||||
|  |             d="M20 18v-4h-3v1h-2v-1H9v1H7v-1H4v4h16M6.33 8l-1.74 4H7v-1h2v1h6v-1h2v1h2.41l-1.74-4H6.33M9 5v1h6V5H9m12.84 7.61c.1.22.16.48.16.8V18c0 .53-.21 1-.6 1.41c-.4.4-.85.59-1.4.59H4c-.55 0-1-.19-1.4-.59C2.21 19 2 18.53 2 18v-4.59c0-.32.06-.58.16-.8L4.5 7.22C4.84 6.41 5.45 6 6.33 6H7V5c0-.55.18-1 .57-1.41C7.96 3.2 8.44 3 9 3h6c.56 0 1.04.2 1.43.59c.39.41.57.86.57 1.41v1h.67c.88 0 1.49.41 1.83 1.22l2.34 5.39z" | ||||||
|  |             fill="currentColor" | ||||||
|  |         ></path> | ||||||
|  |     </svg> | ||||||
|  | </template> | ||||||
							
								
								
									
										24
									
								
								frontend/src/main.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								frontend/src/main.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,24 @@ | ||||||
|  | import "./assets/main.css"; | ||||||
|  | import { createApp } from "vue"; | ||||||
|  | 
 | ||||||
|  | // Vuetify
 | ||||||
|  | import "vuetify/styles"; | ||||||
|  | import { createVuetify } from "vuetify"; | ||||||
|  | import * as components from "vuetify/components"; | ||||||
|  | import * as directives from "vuetify/directives"; | ||||||
|  | 
 | ||||||
|  | // Components
 | ||||||
|  | import App from "./App.vue"; | ||||||
|  | import router from "./router"; | ||||||
|  | 
 | ||||||
|  | const app = createApp(App); | ||||||
|  | 
 | ||||||
|  | app.use(router); | ||||||
|  | 
 | ||||||
|  | const vuetify = createVuetify({ | ||||||
|  |     components, | ||||||
|  |     directives, | ||||||
|  | }); | ||||||
|  | app.use(vuetify); | ||||||
|  | 
 | ||||||
|  | app.mount("#app"); | ||||||
							
								
								
									
										25
									
								
								frontend/src/router/index.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								frontend/src/router/index.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,25 @@ | ||||||
|  | import { createRouter, createWebHistory } from "vue-router"; | ||||||
|  | import HomeView from "../views/HomeView.vue"; | ||||||
|  | 
 | ||||||
|  | const router = createRouter({ | ||||||
|  |     history: createWebHistory(import.meta.env.BASE_URL), | ||||||
|  |     routes: [ | ||||||
|  |         { | ||||||
|  |             path: "/", | ||||||
|  |             name: "home", | ||||||
|  |             component: HomeView, | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |             path: "/about", | ||||||
|  |             name: "about", | ||||||
|  |             // Route level code-splitting
 | ||||||
|  |             // This generates a separate chunk (About.[hash].js) for this route
 | ||||||
|  |             // Which is lazy-loaded when the route is visited.
 | ||||||
|  |             component: () => { | ||||||
|  |                 return import("../views/AboutView.vue"); | ||||||
|  |             }, | ||||||
|  |         }, | ||||||
|  |     ], | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | export default router; | ||||||
							
								
								
									
										16
									
								
								frontend/src/views/AboutView.vue
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								frontend/src/views/AboutView.vue
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,16 @@ | ||||||
|  | <template> | ||||||
|  |     <div class="about"> | ||||||
|  |         <h1>This is an about page</h1> | ||||||
|  |         <v-slider></v-slider> | ||||||
|  |     </div> | ||||||
|  | </template> | ||||||
|  | 
 | ||||||
|  | <style> | ||||||
|  |     @media (min-width: 1024px) { | ||||||
|  |         .about { | ||||||
|  |             min-height: 100vh; | ||||||
|  |             display: flex; | ||||||
|  |             align-items: center; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | </style> | ||||||
							
								
								
									
										9
									
								
								frontend/src/views/HomeView.vue
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								frontend/src/views/HomeView.vue
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,9 @@ | ||||||
|  | <script setup lang="ts"> | ||||||
|  |     import TheWelcome from "../components/TheWelcome.vue"; | ||||||
|  | </script> | ||||||
|  | 
 | ||||||
|  | <template> | ||||||
|  |     <main> | ||||||
|  |         <TheWelcome /> | ||||||
|  |     </main> | ||||||
|  | </template> | ||||||
							
								
								
									
										12
									
								
								frontend/tsconfig.app.json
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								frontend/tsconfig.app.json
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,12 @@ | ||||||
|  | { | ||||||
|  |     "extends": "@vue/tsconfig/tsconfig.dom.json", | ||||||
|  |     "include": ["env.d.ts", "src/**/*", "src/**/*.vue"], | ||||||
|  |     "exclude": ["src/**/__tests__/*"], | ||||||
|  |     "compilerOptions": { | ||||||
|  |         "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", | ||||||
|  | 
 | ||||||
|  |         "paths": { | ||||||
|  |             "@/*": ["./src/*"] | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										14
									
								
								frontend/tsconfig.json
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								frontend/tsconfig.json
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,14 @@ | ||||||
|  | { | ||||||
|  |     "files": [], | ||||||
|  |     "references": [ | ||||||
|  |         { | ||||||
|  |             "path": "./tsconfig.node.json" | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |             "path": "./tsconfig.app.json" | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |             "path": "./tsconfig.vitest.json" | ||||||
|  |         } | ||||||
|  |     ] | ||||||
|  | } | ||||||
							
								
								
									
										19
									
								
								frontend/tsconfig.node.json
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								frontend/tsconfig.node.json
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,19 @@ | ||||||
|  | { | ||||||
|  |     "extends": "@tsconfig/node22/tsconfig.json", | ||||||
|  |     "include": [ | ||||||
|  |         "vite.config.*", | ||||||
|  |         "vitest.config.*", | ||||||
|  |         "cypress.config.*", | ||||||
|  |         "nightwatch.conf.*", | ||||||
|  |         "playwright.config.*", | ||||||
|  |         "eslint.config.*" | ||||||
|  |     ], | ||||||
|  |     "compilerOptions": { | ||||||
|  |         "noEmit": true, | ||||||
|  |         "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", | ||||||
|  | 
 | ||||||
|  |         "module": "ESNext", | ||||||
|  |         "moduleResolution": "Bundler", | ||||||
|  |         "types": ["node"] | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										11
									
								
								frontend/tsconfig.vitest.json
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								frontend/tsconfig.vitest.json
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,11 @@ | ||||||
|  | { | ||||||
|  |     "extends": "./tsconfig.app.json", | ||||||
|  |     "include": ["src/**/__tests__/*", "env.d.ts"], | ||||||
|  |     "exclude": [], | ||||||
|  |     "compilerOptions": { | ||||||
|  |         "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.vitest.tsbuildinfo", | ||||||
|  | 
 | ||||||
|  |         "lib": [], | ||||||
|  |         "types": ["node", "jsdom"] | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										15
									
								
								frontend/vite.config.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								frontend/vite.config.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,15 @@ | ||||||
|  | import { fileURLToPath, URL } from 'node:url'; | ||||||
|  | 
 | ||||||
|  | import { defineConfig } from 'vite'; | ||||||
|  | import vue from '@vitejs/plugin-vue'; | ||||||
|  | import vueDevTools from 'vite-plugin-vue-devtools'; | ||||||
|  | 
 | ||||||
|  | // https://vite.dev/config/
 | ||||||
|  | export default defineConfig({ | ||||||
|  |     plugins: [vue(), vueDevTools()], | ||||||
|  |     resolve: { | ||||||
|  |         alias: { | ||||||
|  |             '@': fileURLToPath(new URL('./src', import.meta.url)), | ||||||
|  |         }, | ||||||
|  |     }, | ||||||
|  | }); | ||||||
							
								
								
									
										14
									
								
								frontend/vitest.config.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								frontend/vitest.config.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,14 @@ | ||||||
|  | import { fileURLToPath } from 'node:url'; | ||||||
|  | import { mergeConfig, defineConfig, configDefaults } from 'vitest/config'; | ||||||
|  | import viteConfig from './vite.config'; | ||||||
|  | 
 | ||||||
|  | export default mergeConfig( | ||||||
|  |     viteConfig, | ||||||
|  |     defineConfig({ | ||||||
|  |         test: { | ||||||
|  |             environment: 'jsdom', | ||||||
|  |             exclude: [...configDefaults.exclude, 'e2e/**'], | ||||||
|  |             root: fileURLToPath(new URL('./', import.meta.url)), | ||||||
|  |         }, | ||||||
|  |     }), | ||||||
|  | ); | ||||||
							
								
								
									
										9334
									
								
								package-lock.json
									
										
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										9334
									
								
								package-lock.json
									
										
									
										generated
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										38
									
								
								package.json
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								package.json
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,38 @@ | ||||||
|  | { | ||||||
|  |     "name": "dwengo-1-monorepo", | ||||||
|  |     "version": "0.0.1", | ||||||
|  |     "description": "Monorepo for Dwengo-1", | ||||||
|  |     "private": true, | ||||||
|  |     "type": "module", | ||||||
|  |     "scripts": { | ||||||
|  |         "build": "npm run build --ws", | ||||||
|  |         "format": "npm run format --ws", | ||||||
|  |         "format-check": "npm run format-check --ws", | ||||||
|  |         "lint": "npm run lint --ws", | ||||||
|  |         "test:unit": "npm run test:unit --ws" | ||||||
|  |     }, | ||||||
|  |     "workspaces": [ | ||||||
|  |         "backend", | ||||||
|  |         "frontend" | ||||||
|  |     ], | ||||||
|  |     "repository": { | ||||||
|  |         "type": "git", | ||||||
|  |         "url": "git+https://github.com/SELab-2/Dwengo-1.git" | ||||||
|  |     }, | ||||||
|  |     "license": "MIT", | ||||||
|  |     "bugs": { | ||||||
|  |         "url": "https://github.com/SELab-2/Dwengo-1/issues" | ||||||
|  |     }, | ||||||
|  |     "homepage": "https://sel2-1.ugent.be/", | ||||||
|  |     "devDependencies": { | ||||||
|  |         "@eslint/compat": "^1.2.6", | ||||||
|  |         "@eslint/js": "^9.20.0", | ||||||
|  |         "@types/eslint-config-prettier": "^6.11.3", | ||||||
|  |         "@typescript-eslint/eslint-plugin": "^8.24.1", | ||||||
|  |         "@typescript-eslint/parser": "^8.24.1", | ||||||
|  |         "eslint": "^9.20.1", | ||||||
|  |         "eslint-config-prettier": "^10.0.1", | ||||||
|  |         "jiti": "^2.4.2", | ||||||
|  |         "typescript-eslint": "^8.24.1" | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										13
									
								
								prettier.config.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								prettier.config.js
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,13 @@ | ||||||
|  | /** | ||||||
|  |  * @type {import("prettier").Options} | ||||||
|  |  */ | ||||||
|  | export default { | ||||||
|  |     printWidth: 80, | ||||||
|  |     semi: true, | ||||||
|  |     singleQuote: true, | ||||||
|  |     trailingComma: 'es5', | ||||||
|  |     bracketSpacing: true, | ||||||
|  |     objectWrap: 'preserve', | ||||||
|  |     bracketSameLine: false, | ||||||
|  |     arrowParens: 'always', | ||||||
|  | } | ||||||
							
								
								
									
										124
									
								
								tsconfig.json
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										124
									
								
								tsconfig.json
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,124 @@ | ||||||
|  | { | ||||||
|  |     "compilerOptions": { | ||||||
|  |         /* Visit https://aka.ms/tsconfig to read more about this file */ | ||||||
|  | 
 | ||||||
|  |         /* Projects */ | ||||||
|  |         // "incremental": true,                              /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ | ||||||
|  |         // "composite": true,                                /* Enable constraints that allow a TypeScript project to be used with project references. */ | ||||||
|  |         // "tsBuildInfoFile": "./.tsbuildinfo",              /* Specify the path to .tsbuildinfo incremental compilation file. */ | ||||||
|  |         // "disableSourceOfProjectReferenceRedirect": true,  /* Disable preferring source files instead of declaration files when referencing composite projects. */ | ||||||
|  |         // "disableSolutionSearching": true,                 /* Opt a project out of multi-project reference checking when editing. */ | ||||||
|  |         // "disableReferencedProjectLoad": true,             /* Reduce the number of projects loaded automatically by TypeScript. */ | ||||||
|  | 
 | ||||||
|  |         /* Language and Environment */ | ||||||
|  |         "target": "ESNext", | ||||||
|  |         /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ | ||||||
|  |         // "lib": [],                                        /* Specify a set of bundled library declaration files that describe the target runtime environment. */ | ||||||
|  |         // "jsx": "preserve",                                /* Specify what JSX code is generated. */ | ||||||
|  |         "experimentalDecorators": true, | ||||||
|  |         /* Enable experimental support for legacy experimental decorators. */ | ||||||
|  |         "emitDecoratorMetadata": true, | ||||||
|  |         /* Emit design-type metadata for decorated declarations in source files. */ | ||||||
|  |         // "jsxFactory": "",                                 /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ | ||||||
|  |         // "jsxFragmentFactory": "",                         /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ | ||||||
|  |         // "jsxImportSource": "",                            /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ | ||||||
|  |         // "reactNamespace": "",                             /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ | ||||||
|  |         // "noLib": true,                                    /* Disable including any library files, including the default lib.d.ts. */ | ||||||
|  |         // "useDefineForClassFields": true,                  /* Emit ECMAScript-standard-compliant class fields. */ | ||||||
|  |         "moduleDetection": "force", | ||||||
|  |         /* Control what method is used to detect module-format JS files. */ | ||||||
|  | 
 | ||||||
|  |         /* Modules */ | ||||||
|  |         "module": "ESNext", | ||||||
|  |         /* Specify what module code is generated. */ | ||||||
|  |         // "rootDir": "./src", | ||||||
|  |         /* Specify the root folder within your source files. */ | ||||||
|  |         "moduleResolution": "node", | ||||||
|  |         /* Specify how TypeScript looks up a file from a given module specifier. */ | ||||||
|  |         // "baseUrl": "./",                                  /* Specify the base directory to resolve non-relative module names. */ | ||||||
|  |         // "paths": {},                                      /* Specify a set of entries that re-map imports to additional lookup locations. */ | ||||||
|  |         // "rootDirs": [],                                   /* Allow multiple folders to be treated as one when resolving modules. */ | ||||||
|  |         // "typeRoots": [],                                  /* Specify multiple folders that act like './node_modules/@types'. */ | ||||||
|  |         // "types": [],                                      /* Specify type package names to be included without being referenced in a source file. */ | ||||||
|  |         // "allowUmdGlobalAccess": true,                     /* Allow accessing UMD globals from modules. */ | ||||||
|  |         // "moduleSuffixes": [],                             /* List of file name suffixes to search when resolving a module. */ | ||||||
|  |         // "allowImportingTsExtensions": true,               /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ | ||||||
|  |         // "rewriteRelativeImportExtensions": true,          /* Rewrite '.ts', '.tsx', '.mts', and '.cts' file extensions in relative import paths to their JavaScript equivalent in output files. */ | ||||||
|  |         // "resolvePackageJsonExports": true,                /* Use the package.json 'exports' field when resolving package imports. */ | ||||||
|  |         // "resolvePackageJsonImports": true,                /* Use the package.json 'imports' field when resolving imports. */ | ||||||
|  |         // "customConditions": [],                           /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ | ||||||
|  |         // "noUncheckedSideEffectImports": true,             /* Check side effect imports. */ | ||||||
|  |         // "resolveJsonModule": true,                        /* Enable importing .json files. */ | ||||||
|  |         // "allowArbitraryExtensions": true,                 /* Enable importing files with any extension, provided a declaration file is present. */ | ||||||
|  |         // "noResolve": true,                                /* Disallow 'import's, 'require's or '<reference>'s from expanding the number of files TypeScript should add to a project. */ | ||||||
|  | 
 | ||||||
|  |         /* JavaScript Support */ | ||||||
|  |         "allowJs": true, | ||||||
|  |         /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ | ||||||
|  |         // "checkJs": true,                                  /* Enable error reporting in type-checked JavaScript files. */ | ||||||
|  |         // "maxNodeModuleJsDepth": 1,                        /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ | ||||||
|  | 
 | ||||||
|  |         /* Emit */ | ||||||
|  |         // "declaration": true,                              /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ | ||||||
|  |         // "declarationMap": true,                           /* Create sourcemaps for d.ts files. */ | ||||||
|  |         // "emitDeclarationOnly": true,                      /* Only output d.ts files and not JavaScript files. */ | ||||||
|  |         // "sourceMap": true,                                /* Create source map files for emitted JavaScript files. */ | ||||||
|  |         // "inlineSourceMap": true,                          /* Include sourcemap files inside the emitted JavaScript. */ | ||||||
|  |         // "noEmit": true,                                   /* Disable emitting files from a compilation. */ | ||||||
|  |         // "outFile": "./",                                  /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ | ||||||
|  |         // "outDir": "./dist", | ||||||
|  |         /* Specify an output folder for all emitted files. */ | ||||||
|  |         // "removeComments": true,                           /* Disable emitting comments. */ | ||||||
|  |         // "importHelpers": true,                            /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ | ||||||
|  |         // "downlevelIteration": true,                       /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ | ||||||
|  |         // "sourceRoot": "",                                 /* Specify the root path for debuggers to find the reference source code. */ | ||||||
|  |         // "mapRoot": "",                                    /* Specify the location where debugger should locate map files instead of generated locations. */ | ||||||
|  |         // "inlineSources": true,                            /* Include source code in the sourcemaps inside the emitted JavaScript. */ | ||||||
|  |         // "emitBOM": true,                                  /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ | ||||||
|  |         // "newLine": "crlf",                                /* Set the newline character for emitting files. */ | ||||||
|  |         // "stripInternal": true,                            /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ | ||||||
|  |         // "noEmitHelpers": true,                            /* Disable generating custom helper functions like '__extends' in compiled output. */ | ||||||
|  |         // "noEmitOnError": true,                            /* Disable emitting files if any type checking errors are reported. */ | ||||||
|  |         // "preserveConstEnums": true,                       /* Disable erasing 'const enum' declarations in generated code. */ | ||||||
|  |         // "declarationDir": "./",                           /* Specify the output directory for generated declaration files. */ | ||||||
|  | 
 | ||||||
|  |         /* Interop Constraints */ | ||||||
|  |         // "isolatedModules": true,                          /* Ensure that each file can be safely transpiled without relying on other imports. */ | ||||||
|  |         // "verbatimModuleSyntax": true,                     /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ | ||||||
|  |         // "isolatedDeclarations": true,                     /* Require sufficient annotation on exports so other tools can trivially generate declaration files. */ | ||||||
|  |         // "allowSyntheticDefaultImports": true,             /* Allow 'import x from y' when a module doesn't have a default export. */ | ||||||
|  |         "esModuleInterop": true, | ||||||
|  |         /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ | ||||||
|  |         // "preserveSymlinks": true,                         /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ | ||||||
|  |         "forceConsistentCasingInFileNames": true, | ||||||
|  |         /* Ensure that casing is correct in imports. */ | ||||||
|  | 
 | ||||||
|  |         /* Type Checking */ | ||||||
|  |         "strict": true, | ||||||
|  |         /* Enable all strict type-checking options. */ | ||||||
|  |         // "noImplicitAny": true,                           /* Enable error reporting for expressions and declarations with an implied 'any' type. */ | ||||||
|  |         // "strictNullChecks": true,                         /* When type checking, take into account 'null' and 'undefined'. */ | ||||||
|  |         // "strictFunctionTypes": true,                      /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ | ||||||
|  |         // "strictBindCallApply": true,                      /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ | ||||||
|  |         // "strictPropertyInitialization": true,             /* Check for class properties that are declared but not set in the constructor. */ | ||||||
|  |         // "strictBuiltinIteratorReturn": true,              /* Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'. */ | ||||||
|  |         // "noImplicitThis": true,                           /* Enable error reporting when 'this' is given the type 'any'. */ | ||||||
|  |         // "useUnknownInCatchVariables": true,               /* Default catch clause variables as 'unknown' instead of 'any'. */ | ||||||
|  |         // "alwaysStrict": true,                             /* Ensure 'use strict' is always emitted. */ | ||||||
|  |         // "noUnusedLocals": true,                           /* Enable error reporting when local variables aren't read. */ | ||||||
|  |         // "noUnusedParameters": true,                       /* Raise an error when a function parameter isn't read. */ | ||||||
|  |         // "exactOptionalPropertyTypes": true,               /* Interpret optional property types as written, rather than adding 'undefined'. */ | ||||||
|  |         // "noImplicitReturns": true,                        /* Enable error reporting for codepaths that do not explicitly return in a function. */ | ||||||
|  |         // "noFallthroughCasesInSwitch": true,               /* Enable error reporting for fallthrough cases in switch statements. */ | ||||||
|  |         // "noUncheckedIndexedAccess": true,                 /* Add 'undefined' to a type when accessed using an index. */ | ||||||
|  |         // "noImplicitOverride": true,                       /* Ensure overriding members in derived classes are marked with an override modifier. */ | ||||||
|  |         // "noPropertyAccessFromIndexSignature": true,       /* Enforces using indexed accessors for keys declared using an indexed type. */ | ||||||
|  |         // "allowUnusedLabels": true,                        /* Disable error reporting for unused labels. */ | ||||||
|  |         // "allowUnreachableCode": true,                     /* Disable error reporting for unreachable code. */ | ||||||
|  | 
 | ||||||
|  |         /* Completeness */ | ||||||
|  |         // "skipDefaultLibCheck": true,                      /* Skip type checking .d.ts files that are included with TypeScript. */ | ||||||
|  |         "skipLibCheck": true | ||||||
|  |         /* Skip type checking all .d.ts files. */ | ||||||
|  |     } | ||||||
|  | } | ||||||
		Reference in a new issue
	
	 Adriaan J.
						Adriaan J.