diff --git a/srcANGULAR/.ci/build_unix-any.sh b/Angular/.ci/build_unix-any.sh similarity index 84% rename from srcANGULAR/.ci/build_unix-any.sh rename to Angular/.ci/build_unix-any.sh index da40b822..0e5571ef 100644 --- a/srcANGULAR/.ci/build_unix-any.sh +++ b/Angular/.ci/build_unix-any.sh @@ -33,6 +33,7 @@ ${PROJECT_SKU}-docs_any-any " +FS_Remake_Directory "${PROJECT_PATH_ROOT}/${PROJECT_PATH_BUILD}" I18N_Activate_Environment @@ -56,6 +57,19 @@ fi +___source="${PROJECT_PATH_ROOT}/${PROJECT_ANGULAR}/dist/browser" +___dest="${PROJECT_PATH_ROOT}/${PROJECT_PATH_DOCS}" +I18N_Export "$___dest" +FS_Make_Directory "$___dest" +FS_Copy_All "${___source}/" "$___dest" +if [ $? -ne 0 ]; then + I18N_Export_Failed + return 1 +fi + + + + # placeholding flag files old_IFS="$IFS" while IFS="" read -r __line || [ -n "$__line" ]; do diff --git a/srcANGULAR/.ci/build_windows-any.ps1 b/Angular/.ci/build_windows-any.ps1 similarity index 82% rename from srcANGULAR/.ci/build_windows-any.ps1 rename to Angular/.ci/build_windows-any.ps1 index 75494779..34318d58 100644 --- a/srcANGULAR/.ci/build_windows-any.ps1 +++ b/Angular/.ci/build_windows-any.ps1 @@ -32,6 +32,7 @@ $__placeholders = @( ) +$null = FS-Remake-Directory "${env:PROJECT_PATH_ROOT}\${env:PROJECT_PATH_BUILD}" $null = I18N-Activate-Environment @@ -56,6 +57,19 @@ if ($___process -ne 0) { +$___source = "${env:PROJECT_PATH_ROOT}\${env:PROJECT_ANGULAR}\dist\browser" +$___dest = "${env:PROJECT_PATH_ROOT}\${env:PROJECT_PATH_DOCS}" +$null = I18N-Export "${___dest}" +$null = FS-Make-Directory "${___dest}" +$___process = FS-Copy-All "${___source}\" "${___dest}" +if ($___process -ne 0) { + $null = I18N-Export-Failed + return 1 +} + + + + # placeholding flag files foreach ($__line in $__placeholders) { if ($(STRINGS-Is-Empty "${__line}") -eq 0) { diff --git a/srcANGULAR/.ci/materialize_unix-any.sh b/Angular/.ci/materialize_unix-any.sh similarity index 100% rename from srcANGULAR/.ci/materialize_unix-any.sh rename to Angular/.ci/materialize_unix-any.sh diff --git a/srcANGULAR/.ci/materialize_windows-any.ps1 b/Angular/.ci/materialize_windows-any.ps1 similarity index 100% rename from srcANGULAR/.ci/materialize_windows-any.ps1 rename to Angular/.ci/materialize_windows-any.ps1 diff --git a/srcANGULAR/.ci/prepare_unix-any.sh b/Angular/.ci/prepare_unix-any.sh similarity index 100% rename from srcANGULAR/.ci/prepare_unix-any.sh rename to Angular/.ci/prepare_unix-any.sh diff --git a/srcANGULAR/.ci/prepare_windows-any.ps1 b/Angular/.ci/prepare_windows-any.ps1 similarity index 100% rename from srcANGULAR/.ci/prepare_windows-any.ps1 rename to Angular/.ci/prepare_windows-any.ps1 diff --git a/srcANGULAR/.ci/test_unix-any.sh b/Angular/.ci/test_unix-any.sh similarity index 100% rename from srcANGULAR/.ci/test_unix-any.sh rename to Angular/.ci/test_unix-any.sh diff --git a/srcANGULAR/.ci/test_windows-any.ps1 b/Angular/.ci/test_windows-any.ps1 similarity index 100% rename from srcANGULAR/.ci/test_windows-any.ps1 rename to Angular/.ci/test_windows-any.ps1 diff --git a/Angular/README.md b/Angular/README.md new file mode 100644 index 00000000..42442fc9 --- /dev/null +++ b/Angular/README.md @@ -0,0 +1,79 @@ +# AutomataCI Static Site Generator Angular Setup + +This document is mainly for Angular developer to understand what is going on +with the organization here. Most of the resources are the same. + + + + +## Directory Structures + +Unlike what was recommended by Angular, AutomataCI prepares 2 separate +components directories: + +1. `contents/` - organize the pages +2. `services/` - where your libraries and components stays + +The `contents/` structures the website page hirarchy and imports the `services/` +libraries to construct the page. + + + + +## Server-Side Rendering (SSR) or Static Site Generation (SSG) First + +There is a high chance this project is likely being used to generate JAM Stack. +Hence, AutomataCI prioritizes the SSR and SSG (pre-rendering) facilities. + + + + +## Setting website Base URL + +To set the Base URL, make sure you update the `baseHref` and `deployUrl` data +inside `angular.json`: + +``` +diff --git a/angular/angular.json b/angular/angular.json +index 5379d9e..fb2e8fa 100644 +--- a/angular/angular.json ++++ b/angular/angular.json +@@ -46,6 +46,8 @@ + }, + "configurations": { + "production": { ++ "baseHref": "https://www.example.com/", ++ "deployUrl": "https://www.example.com/", + "budgets": [ + { + "type": "initial", +``` + +Then make sure you edit `assets/CNAME` and add only the domain name inside. This +is for GitHub or GitLab authentication use. + +Then update the `assets/manifest.webmanifest` for PWA settings. Specifically, +look for `start_url` and etc. + + + + +## For development + +Everything is the same as Angular: `$ ng serve` + + + + +## For Tests + +Everything is the same as Angular: `$ ng test` OR `$ ng e2e` + + + + +## For Production + +Everything is the same as Angular: `$ ng build` + +For full automation, use: `$ ./automataCI/ci.sh.ps1 build` diff --git a/srcANGULAR/angular.json b/Angular/angular.json similarity index 68% rename from srcANGULAR/angular.json rename to Angular/angular.json index e02099b6..fb2e8fa6 100644 --- a/srcANGULAR/angular.json +++ b/Angular/angular.json @@ -7,32 +7,47 @@ "projectType": "application", "schematics": {}, "root": "", - "sourceRoot": "src", + "sourceRoot": ".", "prefix": "app", "architect": { "build": { "builder": "@angular-devkit/build-angular:application", "options": { + "crossOrigin": "anonymous", "outputPath": { - "base": "../public" + "base": "dist", + "browser": "browser", + "server": "server" }, - "index": "src/index.html", + "index": "app.html", "polyfills": [ "zone.js" ], "tsConfig": "tsconfig.app.json", - "assets": [ - "src/favicon.ico", - "src/assets" - ], + "assets": [{ + "glob": "**/*", + "input": "assets", + "output": "." + }], "styles": [ - "src/styles.css" + "app.css" + ], + "scripts": [ + "app.js" ], - "scripts": [], - "browser": "src/main.ts" + "browser": "main.ts", + "server": "main.server.ts", + "prerender": { + "routesFile": "prerender-routes.txt" + }, + "ssr": { + "entry": "server.ts" + } }, "configurations": { "production": { + "baseHref": "https://www.example.com/", + "deployUrl": "https://www.example.com/", "budgets": [ { "type": "initial", @@ -45,7 +60,8 @@ "maximumError": "4kb" } ], - "outputHashing": "all" + "outputHashing": "all", + "serviceWorker": "ngsw-config.json" }, "development": { "optimization": false, @@ -83,14 +99,17 @@ "zone.js/testing" ], "tsConfig": "tsconfig.spec.json", - "assets": [ - "src/favicon.ico", - "src/assets" - ], + "assets": [{ + "glob": "**/*", + "input": "assets", + "output": "." + }], "styles": [ - "src/styles.css" + "app.css" ], - "scripts": [] + "scripts": [ + "app.js" + ] } } } diff --git a/Angular/app.config.server.ts b/Angular/app.config.server.ts new file mode 100644 index 00000000..1420c354 --- /dev/null +++ b/Angular/app.config.server.ts @@ -0,0 +1,16 @@ +/* + * COPYRIGHT LICENSE NOTICE HERE + */ +import { mergeApplicationConfig, ApplicationConfig } from '@angular/core'; +import { provideServerRendering } from '@angular/platform-server'; +import { appConfig } from './app.config'; + + + + +const serverConfig: ApplicationConfig = { + providers: [ + provideServerRendering() + ] +}; +export const config = mergeApplicationConfig(appConfig, serverConfig); diff --git a/Angular/app.config.ts b/Angular/app.config.ts new file mode 100644 index 00000000..05dad157 --- /dev/null +++ b/Angular/app.config.ts @@ -0,0 +1,23 @@ +/* + * COPYRIGHT LICENSE NOTICE HERE + */ +import { ApplicationConfig, isDevMode } from '@angular/core'; +import { provideRouter } from '@angular/router'; + +import { routes } from './app.routes'; +import { provideClientHydration } from '@angular/platform-browser'; +import { provideServiceWorker } from '@angular/service-worker'; + + + + +export const appConfig: ApplicationConfig = { + providers: [ + provideRouter(routes), + provideClientHydration(), + provideServiceWorker('ngsw-worker.js', { + enabled: !isDevMode(), + registrationStrategy: 'registerWhenStable:30000' + }) + ] +}; diff --git a/Angular/app.css b/Angular/app.css new file mode 100644 index 00000000..0e6b958a --- /dev/null +++ b/Angular/app.css @@ -0,0 +1,3 @@ +/* + * COPYRIGHT LICENSE NOTICE HERE + */ diff --git a/Angular/app.html b/Angular/app.html new file mode 100644 index 00000000..44f7ea9b --- /dev/null +++ b/Angular/app.html @@ -0,0 +1,122 @@ + + + + + Website + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Angular/app.js b/Angular/app.js new file mode 100644 index 00000000..0e6b958a --- /dev/null +++ b/Angular/app.js @@ -0,0 +1,3 @@ +/* + * COPYRIGHT LICENSE NOTICE HERE + */ diff --git a/Angular/app.routes.ts b/Angular/app.routes.ts new file mode 100644 index 00000000..88719dd8 --- /dev/null +++ b/Angular/app.routes.ts @@ -0,0 +1,20 @@ +/* + * COPYRIGHT LICENSE NOTICE HERE + */ +import { Routes } from '@angular/router'; + +import { Page_Root } from "./contents/page"; +import { Page_404 } from "./contents/404/page"; +import { Page_Lang } from "./contents/lang/page"; + + + + +export const routes: Routes = [ + { path: '', component: Page_Root }, + { path: 'en', component: Page_Lang, data: { lang: 'en' } }, + + + // catch all + { path: '**', component: Page_404 }, +]; diff --git a/Angular/app.ts b/Angular/app.ts new file mode 100644 index 00000000..9b9bcf16 --- /dev/null +++ b/Angular/app.ts @@ -0,0 +1,22 @@ +/* + * COPYRIGHT LICENSE NOTICE HERE + */ +import { Component } from '@angular/core'; +import { RouterOutlet } from '@angular/router'; + + + + +/* Overall Application Component + * (1) Required placeholder for everything to work properly. + * (2) Leave this as it is and only work on contents/ (Pages) and + * services/ (Components). + */ +@Component({ + selector: 'app-root', + standalone: true, + imports: [RouterOutlet], + template: '', + styles: [] +}) +export class App {} diff --git a/Angular/assets/.nojekyll b/Angular/assets/.nojekyll new file mode 100644 index 00000000..8f38b297 --- /dev/null +++ b/Angular/assets/.nojekyll @@ -0,0 +1 @@ +No Jekyll \ No newline at end of file diff --git a/Angular/assets/CNAME b/Angular/assets/CNAME new file mode 100644 index 00000000..396d471f --- /dev/null +++ b/Angular/assets/CNAME @@ -0,0 +1 @@ +www.example.com diff --git a/Angular/assets/browserconfig.xml b/Angular/assets/browserconfig.xml new file mode 100644 index 00000000..9c8fceb5 --- /dev/null +++ b/Angular/assets/browserconfig.xml @@ -0,0 +1,13 @@ + + + + + + + + + + #021B79 + + + diff --git a/Angular/assets/logos/icon-monochrome_1200x1200.svg b/Angular/assets/logos/icon-monochrome_1200x1200.svg new file mode 100644 index 00000000..2fe762eb --- /dev/null +++ b/Angular/assets/logos/icon-monochrome_1200x1200.svg @@ -0,0 +1,28 @@ + + + +AutomataCI's InsigniaAutomataCI's InsigniaSun, 27 Oct 2024 09:42:34 +0000(Holloway) Chew, Kean HoCC-BY-ND-4.0(Holloway) Chew, Kean Hochewkeanho-automatacihttps://github.com/ChewKeanHo/AutomataCI/ApplicationEnglishAutomataCICILogologo, automataci, ciThe (Holloway) Chew, Kean Ho's AutomataCI logo. diff --git a/Angular/assets/logos/icon.ico b/Angular/assets/logos/icon.ico new file mode 100644 index 00000000..5cd4e7aa Binary files /dev/null and b/Angular/assets/logos/icon.ico differ diff --git a/Angular/assets/logos/icon_1024x1024.png b/Angular/assets/logos/icon_1024x1024.png new file mode 100644 index 00000000..bf714524 Binary files /dev/null and b/Angular/assets/logos/icon_1024x1024.png differ diff --git a/Angular/assets/logos/icon_114x114.png b/Angular/assets/logos/icon_114x114.png new file mode 100644 index 00000000..fb8e676b Binary files /dev/null and b/Angular/assets/logos/icon_114x114.png differ diff --git a/Angular/assets/logos/icon_1200x1200.png b/Angular/assets/logos/icon_1200x1200.png new file mode 100644 index 00000000..7658b31e Binary files /dev/null and b/Angular/assets/logos/icon_1200x1200.png differ diff --git a/Angular/assets/logos/icon_1200x1200.svg b/Angular/assets/logos/icon_1200x1200.svg new file mode 100644 index 00000000..9eafd6f7 --- /dev/null +++ b/Angular/assets/logos/icon_1200x1200.svg @@ -0,0 +1,44 @@ + + + +AutomataCI's InsigniaAutomataCI's InsigniaSun, 27 Oct 2024 09:42:34 +0000(Holloway) Chew, Kean HoCC-BY-ND-4.0(Holloway) Chew, Kean Hochewkeanho-automatacihttps://github.com/ChewKeanHo/AutomataCI/ApplicationEnglishAutomataCICILogologo, automataci, ciThe (Holloway) Chew, Kean Ho's AutomataCI logo. diff --git a/Angular/assets/logos/icon_1200x200.svg b/Angular/assets/logos/icon_1200x200.svg new file mode 100644 index 00000000..3c631115 --- /dev/null +++ b/Angular/assets/logos/icon_1200x200.svg @@ -0,0 +1,43 @@ + +(Holloway) Chew, Kean Ho's AutomataCI Banner(Holloway) Chew, Kean Ho's AutomataCI BannerSun, 27 Oct 2024 09:42:34 +0000(Holloway) Chew, Kean HoCC-BY-ND-4.0(Holloway) Chew, Kean Hochewkeanho-automatacihttps://github.com/ChewKeanHo/AutomataCI/ApplicationEnglishbannerautomatacicibanner, automataci, ciThe banner promoting (Holloway) Chew, Kean Ho's AutomataCI. diff --git a/Angular/assets/logos/icon_120x120.png b/Angular/assets/logos/icon_120x120.png new file mode 100644 index 00000000..bd18c529 Binary files /dev/null and b/Angular/assets/logos/icon_120x120.png differ diff --git a/Angular/assets/logos/icon_128x128.png b/Angular/assets/logos/icon_128x128.png new file mode 100644 index 00000000..903e9c41 Binary files /dev/null and b/Angular/assets/logos/icon_128x128.png differ diff --git a/Angular/assets/logos/icon_144x144.png b/Angular/assets/logos/icon_144x144.png new file mode 100644 index 00000000..9ce6eca1 Binary files /dev/null and b/Angular/assets/logos/icon_144x144.png differ diff --git a/Angular/assets/logos/icon_150x150.png b/Angular/assets/logos/icon_150x150.png new file mode 100644 index 00000000..cc9592a8 Binary files /dev/null and b/Angular/assets/logos/icon_150x150.png differ diff --git a/Angular/assets/logos/icon_152x152.png b/Angular/assets/logos/icon_152x152.png new file mode 100644 index 00000000..a9328c86 Binary files /dev/null and b/Angular/assets/logos/icon_152x152.png differ diff --git a/Angular/assets/logos/icon_192x192.png b/Angular/assets/logos/icon_192x192.png new file mode 100644 index 00000000..cb84826c Binary files /dev/null and b/Angular/assets/logos/icon_192x192.png differ diff --git a/Angular/assets/logos/icon_310x150.png b/Angular/assets/logos/icon_310x150.png new file mode 100644 index 00000000..0614284d Binary files /dev/null and b/Angular/assets/logos/icon_310x150.png differ diff --git a/Angular/assets/logos/icon_310x310.png b/Angular/assets/logos/icon_310x310.png new file mode 100644 index 00000000..f9d5cd48 Binary files /dev/null and b/Angular/assets/logos/icon_310x310.png differ diff --git a/Angular/assets/logos/icon_384x384.png b/Angular/assets/logos/icon_384x384.png new file mode 100644 index 00000000..6d43fb5b Binary files /dev/null and b/Angular/assets/logos/icon_384x384.png differ diff --git a/Angular/assets/logos/icon_480x480.png b/Angular/assets/logos/icon_480x480.png new file mode 100644 index 00000000..85402154 Binary files /dev/null and b/Angular/assets/logos/icon_480x480.png differ diff --git a/Angular/assets/logos/icon_512x512.png b/Angular/assets/logos/icon_512x512.png new file mode 100644 index 00000000..e573888b Binary files /dev/null and b/Angular/assets/logos/icon_512x512.png differ diff --git a/Angular/assets/logos/icon_57x57.png b/Angular/assets/logos/icon_57x57.png new file mode 100644 index 00000000..4179f675 Binary files /dev/null and b/Angular/assets/logos/icon_57x57.png differ diff --git a/Angular/assets/logos/icon_60x60.png b/Angular/assets/logos/icon_60x60.png new file mode 100644 index 00000000..176f678c Binary files /dev/null and b/Angular/assets/logos/icon_60x60.png differ diff --git a/Angular/assets/logos/icon_70x70.png b/Angular/assets/logos/icon_70x70.png new file mode 100644 index 00000000..226df7a6 Binary files /dev/null and b/Angular/assets/logos/icon_70x70.png differ diff --git a/Angular/assets/logos/icon_72x72.png b/Angular/assets/logos/icon_72x72.png new file mode 100644 index 00000000..11ba20f1 Binary files /dev/null and b/Angular/assets/logos/icon_72x72.png differ diff --git a/Angular/assets/logos/icon_96x96.png b/Angular/assets/logos/icon_96x96.png new file mode 100644 index 00000000..c9d170a1 Binary files /dev/null and b/Angular/assets/logos/icon_96x96.png differ diff --git a/Angular/assets/manifest.webmanifest b/Angular/assets/manifest.webmanifest new file mode 100644 index 00000000..0c451c8f --- /dev/null +++ b/Angular/assets/manifest.webmanifest @@ -0,0 +1,175 @@ +{ + "name": "Brand Name", + "short_name": "brand", + "lang": "en", + "description": "description here", + "categories": [ + "CAT 1", + "CAT 2", + "CAT 3" + ], + "id": "#0000FF", + "theme_color": "#0000FF", + "background_color": "#021B79", + "display": "standalone", + "display_override": [ + "standalone", + "minimal-ui", + "browser" + ], + "scope": "./", + "start_url": "./", + "orientation": "any", + "prefer_related_applications": false, + "protocol_handlers": [ + { + "protocol": "web+brand", + "url": "/?query=%s" + } + ], + "related_applications": [ + { + "id": "/", + "platform": "webapp", + "url": "/" + } + ], + "screenshots": [ + { + "label": "Brand Name", + "platform": "wide", + "sizes": "1200x630", + "src": "/logos/icon_512x512.png", + "type": "image/png" + } + ], + "shortcuts": [ + { + "description": "To Main Dashboard", + "icons": [ + { + "purpose": "any", + "sizes": "1200x1200", + "src": "/logos/icon_1200x1200.png", + "type": "image/png" + } + ], + "name": "Home \\u0026 Dashboard", + "short_name": "Dashboard", + "url": "/" + } + ], + "icons": [ + { + "src": "/logos/icon_57x57.png", + "sizes": "57x57", + "type": "image/png", + "purpose": "any" + }, { + "src": "/logos/icon_60x60.png", + "sizes": "60x60", + "type": "image/png", + "purpose": "any" + }, { + "src": "/logos/icon_70x70.png", + "sizes": "70x70", + "type": "image/png", + "purpose": "any" + }, { + "src": "/logos/icon_72x72.png", + "sizes": "72x72", + "type": "image/png", + "purpose": "any" + }, { + "src": "/logos/icon_76x76.png", + "sizes": "76x76", + "type": "image/png", + "purpose": "any" + }, { + "src": "/logos/icon_96x96.png", + "sizes": "96x96", + "type": "image/png", + "purpose": "any" + }, { + "src": "/logos/icon_114x114.png", + "sizes": "114x114", + "type": "image/png", + "purpose": "any" + }, { + "src": "/logos/icon_120x120.png", + "sizes": "96x96", + "type": "image/png", + "purpose": "any" + }, { + "src": "/logos/icon_128x128.png", + "sizes": "128x128", + "type": "image/png", + "purpose": "any" + }, { + "src": "/logos/icon_144x144.png", + "sizes": "144x144", + "type": "image/png", + "purpose": "any" + }, { + "src": "/logos/icon_150x150.png", + "sizes": "150x150", + "type": "image/png", + "purpose": "any" + }, { + "src": "/logos/icon_152x152.png", + "sizes": "152x152", + "type": "image/png", + "purpose": "any" + }, { + "src": "/logos/icon_180x180.png", + "sizes": "152x152", + "type": "image/png", + "purpose": "any" + }, { + "src": "/logos/icon_192x192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "any" + }, { + "src": "/logos/icon_310x310.png", + "sizes": "310x310", + "type": "image/png", + "purpose": "any" + }, { + "src": "/logos/icon_384x384.png", + "sizes": "384x384", + "type": "image/png", + "purpose": "any" + }, { + "src": "/logos/icon_480x480.png", + "sizes": "480x480", + "type": "image/png", + "purpose": "any" + }, { + "src": "/logos/icon_512x512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "any" + }, { + "src": "/logos/icon_1024x1024.png", + "sizes": "1024x1024", + "type": "image/png", + "purpose": "any" + }, { + "src": "/logos/icon_1200x1200.svg", + "sizes": "1200x1200", + "type": "image/svg+xml", + "purpose": "any" + }, { + "src": "/logos/icon_1200x1200.png", + "sizes": "1200x1200", + "type": "image/png", + "purpose": "any" + }, { + "purpose": "maskable any", + "sizes": "1200x1200", + "src": "/logos/icon-monochrome_1200x1200.svg", + "type": "image/svg+xml" + } + ] +} diff --git a/Angular/assets/robots.txt b/Angular/assets/robots.txt new file mode 100644 index 00000000..c2a49f4f --- /dev/null +++ b/Angular/assets/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Allow: / diff --git a/Angular/contents/404/page.css b/Angular/contents/404/page.css new file mode 100644 index 00000000..0e6b958a --- /dev/null +++ b/Angular/contents/404/page.css @@ -0,0 +1,3 @@ +/* + * COPYRIGHT LICENSE NOTICE HERE + */ diff --git a/Angular/contents/404/page.html b/Angular/contents/404/page.html new file mode 100644 index 00000000..a201fdca --- /dev/null +++ b/Angular/contents/404/page.html @@ -0,0 +1,8 @@ + +
+

Hello, {{ title }}

+

Just for extra testing

+
+ diff --git a/Angular/contents/404/page.spec.ts b/Angular/contents/404/page.spec.ts new file mode 100644 index 00000000..2939fa99 --- /dev/null +++ b/Angular/contents/404/page.spec.ts @@ -0,0 +1,22 @@ +/* + * COPYRIGHT LICENSE NOTICE HERE + */ +import { TestBed } from '@angular/core/testing'; +import { Page_404 } from './page'; + + + + +describe('Page_404', () => { + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [Page_404], + }).compileComponents(); + }); + + it('should create the app', () => { + const fixture = TestBed.createComponent(Page_404); + const app = fixture.componentInstance; + expect(app).toBeTruthy(); + }); +}); diff --git a/Angular/contents/404/page.ts b/Angular/contents/404/page.ts new file mode 100644 index 00000000..1393728b --- /dev/null +++ b/Angular/contents/404/page.ts @@ -0,0 +1,19 @@ +/* + * COPYRIGHT LICENSE NOTICE HERE + */ +import { Component } from '@angular/core'; +import { RouterOutlet } from '@angular/router'; + + + + +@Component({ + selector: 'page-404', + standalone: true, + imports: [RouterOutlet], + templateUrl: './page.html', + styleUrl: './page.css' +}) +export class Page_404 { + public title: string = "404"; +} diff --git a/Angular/contents/lang/page.css b/Angular/contents/lang/page.css new file mode 100644 index 00000000..0e6b958a --- /dev/null +++ b/Angular/contents/lang/page.css @@ -0,0 +1,3 @@ +/* + * COPYRIGHT LICENSE NOTICE HERE + */ diff --git a/Angular/contents/lang/page.html b/Angular/contents/lang/page.html new file mode 100644 index 00000000..a201fdca --- /dev/null +++ b/Angular/contents/lang/page.html @@ -0,0 +1,8 @@ + +
+

Hello, {{ title }}

+

Just for extra testing

+
+ diff --git a/Angular/contents/lang/page.spec.ts b/Angular/contents/lang/page.spec.ts new file mode 100644 index 00000000..15acb952 --- /dev/null +++ b/Angular/contents/lang/page.spec.ts @@ -0,0 +1,23 @@ +/* + * COPYRIGHT LICENSE NOTICE HERE + */ +import { TestBed } from '@angular/core/testing'; +import { Page_Lang } from './page'; + + + + +describe('Page_Lang', () => { + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [Page_Lang], + }).compileComponents(); + }); + + + it('should create the app', () => { + const fixture = TestBed.createComponent(Page_Lang); + const app = fixture.componentInstance; + expect(app).toBeTruthy(); + }); +}); diff --git a/Angular/contents/lang/page.ts b/Angular/contents/lang/page.ts new file mode 100644 index 00000000..7b09de41 --- /dev/null +++ b/Angular/contents/lang/page.ts @@ -0,0 +1,19 @@ +/* + * COPYRIGHT LICENSE NOTICE HERE + */ +import { Component } from '@angular/core'; +import { RouterOutlet } from '@angular/router'; + + + + +@Component({ + selector: 'page-lang', + standalone: true, + imports: [RouterOutlet], + templateUrl: './page.html', + styleUrl: './page.css' +}) +export class Page_Lang { + public title: string = "Lang"; +} diff --git a/Angular/contents/page.css b/Angular/contents/page.css new file mode 100644 index 00000000..0e6b958a --- /dev/null +++ b/Angular/contents/page.css @@ -0,0 +1,3 @@ +/* + * COPYRIGHT LICENSE NOTICE HERE + */ diff --git a/Angular/contents/page.html b/Angular/contents/page.html new file mode 100644 index 00000000..a201fdca --- /dev/null +++ b/Angular/contents/page.html @@ -0,0 +1,8 @@ + +
+

Hello, {{ title }}

+

Just for extra testing

+
+ diff --git a/Angular/contents/page.spec.ts b/Angular/contents/page.spec.ts new file mode 100644 index 00000000..464c4e4e --- /dev/null +++ b/Angular/contents/page.spec.ts @@ -0,0 +1,22 @@ +/* + * COPYRIGHT LICENSE NOTICE HERE + */ +import { TestBed } from '@angular/core/testing'; +import { Page_Root } from './page'; + + + + +describe('Page_Root', () => { + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [Page_Root], + }).compileComponents(); + }); + + it('should create the app', () => { + const fixture = TestBed.createComponent(Page_Root); + const app = fixture.componentInstance; + expect(app).toBeTruthy(); + }); +}); diff --git a/Angular/contents/page.ts b/Angular/contents/page.ts new file mode 100644 index 00000000..39800d7b --- /dev/null +++ b/Angular/contents/page.ts @@ -0,0 +1,19 @@ +/* + * COPYRIGHT LICENSE NOTICE HERE + */ +import { Component } from '@angular/core'; +import { RouterOutlet } from '@angular/router'; + + + + +@Component({ + selector: 'page-root', + standalone: true, + imports: [RouterOutlet], + templateUrl: './page.html', + styleUrl: './page.css' +}) +export class Page_Root { + public title: string = "Root"; +} diff --git a/Angular/main.server.ts b/Angular/main.server.ts new file mode 100644 index 00000000..2d9c2a45 --- /dev/null +++ b/Angular/main.server.ts @@ -0,0 +1,16 @@ +/* + * COPYRIGHT LICENSE NOTICE HERE + */ +import { bootstrapApplication } from '@angular/platform-browser'; +import { config } from './app.config.server'; +import { App } from './app'; + + + + +const bootstrap = () => bootstrapApplication(App, config); + + + + +export default bootstrap; diff --git a/Angular/main.ts b/Angular/main.ts new file mode 100644 index 00000000..7ea9e48d --- /dev/null +++ b/Angular/main.ts @@ -0,0 +1,12 @@ +/* + * COPYRIGHT LICENSE NOTICE HERE + */ +import { bootstrapApplication } from '@angular/platform-browser'; +import { appConfig } from './app.config'; +import { App } from './app'; + + + + +bootstrapApplication(App, appConfig) + .catch((err) => console.error(err)); diff --git a/Angular/ngsw-config.json b/Angular/ngsw-config.json new file mode 100644 index 00000000..4d80eea7 --- /dev/null +++ b/Angular/ngsw-config.json @@ -0,0 +1,30 @@ +{ + "$schema": "./node_modules/@angular/service-worker/config/schema.json", + "index": "/index.html", + "assetGroups": [ + { + "name": "app", + "installMode": "prefetch", + "resources": { + "files": [ + "/favicon.ico", + "/index.html", + "/manifest.webmanifest", + "/*.css", + "/*.js" + ] + } + }, + { + "name": "assets", + "installMode": "lazy", + "updateMode": "prefetch", + "resources": { + "files": [ + "/assets/**", + "/media/*.(svg|cur|jpg|jpeg|png|apng|webp|avif|gif|otf|ttf|woff|woff2)" + ] + } + } + ] +} diff --git a/srcANGULAR/package-lock.json b/Angular/package-lock.json similarity index 99% rename from srcANGULAR/package-lock.json rename to Angular/package-lock.json index d5f2a27c..15934ccf 100644 --- a/srcANGULAR/package-lock.json +++ b/Angular/package-lock.json @@ -15,7 +15,11 @@ "@angular/forms": "^18.2.9", "@angular/platform-browser": "^18.2.9", "@angular/platform-browser-dynamic": "^18.2.9", + "@angular/platform-server": "^18.2.9", "@angular/router": "^18.2.9", + "@angular/service-worker": "^18.2.9", + "@angular/ssr": "^18.2.10", + "express": "^4.18.2", "rxjs": "~7.8.0", "tslib": "^2.3.0", "zone.js": "~0.14.10" @@ -24,7 +28,9 @@ "@angular-devkit/build-angular": "^18.2.10", "@angular/cli": "^18.2.10", "@angular/compiler-cli": "^18.2.9", + "@types/express": "^4.17.17", "@types/jasmine": "~4.3.0", + "@types/node": "^18.18.0", "jasmine-core": "~4.6.0", "karma": "~6.4.0", "karma-chrome-launcher": "~3.2.0", @@ -659,6 +665,26 @@ "@angular/platform-browser": "18.2.9" } }, + "node_modules/@angular/platform-server": { + "version": "18.2.9", + "resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-18.2.9.tgz", + "integrity": "sha512-lKCFngM/xDH1et5vt5eYDCIpB9p+C1lGGcbAfrsDLnQmMxou506kOoLxW+a6KB1By8yonNFL18MsEPTDxRLtqw==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0", + "xhr2": "^0.2.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/animations": "18.2.9", + "@angular/common": "18.2.9", + "@angular/compiler": "18.2.9", + "@angular/core": "18.2.9", + "@angular/platform-browser": "18.2.9" + } + }, "node_modules/@angular/router": { "version": "18.2.9", "resolved": "https://registry.npmjs.org/@angular/router/-/router-18.2.9.tgz", @@ -677,6 +703,39 @@ "rxjs": "^6.5.3 || ^7.4.0" } }, + "node_modules/@angular/service-worker": { + "version": "18.2.9", + "resolved": "https://registry.npmjs.org/@angular/service-worker/-/service-worker-18.2.9.tgz", + "integrity": "sha512-AIXp5D1zcRjUxZjJhWRjQFP5ZkCCjqOe53diiOuI0gHu8cwdGUUKeY2fwGb3XWOOgglwH0zKIk1Pqq/8dKAylQ==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "bin": { + "ngsw-config": "ngsw-config.js" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/common": "18.2.9", + "@angular/core": "18.2.9" + } + }, + "node_modules/@angular/ssr": { + "version": "18.2.10", + "resolved": "https://registry.npmjs.org/@angular/ssr/-/ssr-18.2.10.tgz", + "integrity": "sha512-iCplUCLpOnEjMpcStNsH3LovYdGwR7qbTB5FnYwCUGk0VY8nwukB2oUO3h3jFRHtbA6BSbr5NIxdORKGhGhhoQ==", + "license": "MIT", + "dependencies": { + "critters": "0.0.24", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": "^18.0.0", + "@angular/core": "^18.0.0" + } + }, "node_modules/@babel/code-frame": { "version": "7.26.0", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.0.tgz", @@ -3094,6 +3153,16 @@ "node": ">=18" } }, + "node_modules/@inquirer/core/node_modules/@types/node": { + "version": "22.8.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.8.1.tgz", + "integrity": "sha512-k6Gi8Yyo8EtrNtkHXutUu2corfDf9su95VYVP10aGYMMROM6SAItZi0w1XszA6RtWTHSVp5OeFof37w0IEqCQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.8" + } + }, "node_modules/@inquirer/core/node_modules/signal-exit": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", @@ -3107,6 +3176,13 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@inquirer/core/node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "dev": true, + "license": "MIT" + }, "node_modules/@inquirer/core/node_modules/wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", @@ -4600,13 +4676,13 @@ } }, "node_modules/@types/node": { - "version": "22.8.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.8.1.tgz", - "integrity": "sha512-k6Gi8Yyo8EtrNtkHXutUu2corfDf9su95VYVP10aGYMMROM6SAItZi0w1XszA6RtWTHSVp5OeFof37w0IEqCQg==", + "version": "18.19.59", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.59.tgz", + "integrity": "sha512-vizm2EqwV/7Zay+A6J3tGl9Lhr7CjZe2HmWS988sefiEmsyP9CeXEleho6i4hJk/8UtZAo0bWN4QPZZr83RxvQ==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~6.19.8" + "undici-types": "~5.26.4" } }, "node_modules/@types/node-forge": { @@ -4907,7 +4983,6 @@ "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" @@ -5089,7 +5164,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -5118,7 +5192,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true, "license": "MIT" }, "node_modules/autoprefixer": { @@ -5303,7 +5376,6 @@ "version": "1.20.3", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", - "dev": true, "license": "MIT", "dependencies": { "bytes": "3.1.2", @@ -5328,7 +5400,6 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "dependencies": { "ms": "2.0.0" } @@ -5336,8 +5407,7 @@ "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/bonjour-service": { "version": "1.2.1", @@ -5354,7 +5424,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true, "license": "ISC" }, "node_modules/brace-expansion": { @@ -5463,7 +5532,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, "engines": { "node": ">= 0.8" } @@ -5550,7 +5618,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "dev": true, "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", @@ -5600,7 +5667,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -5834,7 +5900,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -5847,7 +5912,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, "license": "MIT" }, "node_modules/colorette": { @@ -5985,7 +6049,6 @@ "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" @@ -5998,7 +6061,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "dev": true, "engines": { "node": ">= 0.6" } @@ -6022,7 +6084,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true, "license": "MIT" }, "node_modules/copy-anything": { @@ -6157,7 +6218,6 @@ "version": "0.0.24", "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.24.tgz", "integrity": "sha512-Oyqew0FGM0wYUSNqR0L6AteO5MpMoUU0rhKRieXeiKs+PmRTxiJMyaunYB2KF6fQ3dzChXKCpbFOEJx3OQ1v/Q==", - "dev": true, "license": "Apache-2.0", "dependencies": { "chalk": "^4.1.0", @@ -6240,7 +6300,6 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "dev": true, "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0", @@ -6257,7 +6316,6 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">= 6" @@ -6371,7 +6429,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", @@ -6402,7 +6459,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, "engines": { "node": ">= 0.8" } @@ -6411,7 +6467,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true, "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" @@ -6469,7 +6524,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dev": true, "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", @@ -6484,7 +6538,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, "funding": [ { "type": "github", @@ -6497,7 +6550,6 @@ "version": "5.0.3", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dev": true, "license": "BSD-2-Clause", "dependencies": { "domelementtype": "^2.3.0" @@ -6513,7 +6565,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", - "dev": true, "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "^2.0.0", @@ -6534,8 +6585,7 @@ "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { "version": "1.5.47", @@ -6563,7 +6613,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true, "engines": { "node": ">= 0.8" } @@ -6668,7 +6717,6 @@ "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, "engines": { "node": ">=0.12" }, @@ -6731,7 +6779,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dev": true, "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.4" @@ -6744,7 +6791,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -6822,8 +6868,7 @@ "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, "node_modules/eslint-scope": { "version": "5.1.1", @@ -6882,7 +6927,6 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -6938,7 +6982,6 @@ "version": "4.21.1", "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", - "dev": true, "license": "MIT", "dependencies": { "accepts": "~1.3.8", @@ -6981,7 +7024,6 @@ "version": "0.7.1", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -6991,7 +7033,6 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "license": "MIT", "dependencies": { "ms": "2.0.0" @@ -7001,7 +7042,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -7011,7 +7051,6 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", - "dev": true, "license": "MIT", "dependencies": { "debug": "2.6.9", @@ -7030,14 +7069,12 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, "license": "MIT" }, "node_modules/express/node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -7267,7 +7304,6 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -7291,7 +7327,6 @@ "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -7348,7 +7383,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -7388,7 +7422,6 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -7490,7 +7523,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, "license": "MIT", "dependencies": { "get-intrinsic": "^1.1.3" @@ -7516,7 +7548,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -7526,7 +7557,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" @@ -7539,7 +7569,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -7552,7 +7581,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -7565,7 +7593,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", - "dev": true, "dependencies": { "function-bind": "^1.1.2" }, @@ -7666,7 +7693,6 @@ "version": "8.0.2", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "dev": true, "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", { @@ -7700,7 +7726,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", @@ -7716,7 +7741,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, "engines": { "node": ">= 0.8" } @@ -7812,7 +7836,6 @@ "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -7979,8 +8002,7 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/ini": { "version": "4.1.3", @@ -9257,7 +9279,6 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "dev": true, "engines": { "node": ">= 0.6" } @@ -9286,7 +9307,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", - "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -9312,7 +9332,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -9348,7 +9367,6 @@ "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, "engines": { "node": ">= 0.6" } @@ -9357,7 +9375,6 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, "dependencies": { "mime-db": "1.52.0" }, @@ -9635,7 +9652,6 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, "license": "MIT" }, "node_modules/msgpackr": { @@ -9699,7 +9715,6 @@ "version": "3.3.7", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "dev": true, "funding": [ { "type": "github", @@ -9758,7 +9773,6 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true, "engines": { "node": ">= 0.6" } @@ -10111,7 +10125,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0" @@ -10133,7 +10146,6 @@ "version": "1.13.2", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -10153,7 +10165,6 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, "dependencies": { "ee-first": "1.1.1" }, @@ -10430,7 +10441,6 @@ "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, "engines": { "node": ">= 0.8" } @@ -10488,7 +10498,6 @@ "version": "0.1.10", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==", - "dev": true, "license": "MIT" }, "node_modules/path-type": { @@ -10508,7 +10517,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true, "license": "ISC" }, "node_modules/picomatch": { @@ -10632,7 +10640,6 @@ "version": "8.4.41", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz", "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==", - "dev": true, "funding": [ { "type": "opencollective", @@ -10692,7 +10699,6 @@ "version": "0.2.3", "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", - "dev": true, "license": "MIT" }, "node_modules/postcss-modules-extract-imports": { @@ -10821,7 +10827,6 @@ "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, "license": "MIT", "dependencies": { "forwarded": "0.2.0", @@ -10835,7 +10840,6 @@ "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.10" @@ -10870,7 +10874,6 @@ "version": "6.13.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "dev": true, "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.6" @@ -10916,7 +10919,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true, "engines": { "node": ">= 0.6" } @@ -10925,7 +10927,6 @@ "version": "2.5.2", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "dev": true, "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -11284,7 +11285,6 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, "funding": [ { "type": "github", @@ -11303,8 +11303,7 @@ "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/sass": { "version": "1.77.6", @@ -11449,7 +11448,6 @@ "version": "0.19.0", "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", - "dev": true, "license": "MIT", "dependencies": { "debug": "2.6.9", @@ -11474,7 +11472,6 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "license": "MIT", "dependencies": { "ms": "2.0.0" @@ -11484,14 +11481,12 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, "license": "MIT" }, "node_modules/send/node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, "license": "MIT", "bin": { "mime": "cli.js" @@ -11504,7 +11499,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -11600,7 +11594,6 @@ "version": "1.16.2", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", - "dev": true, "license": "MIT", "dependencies": { "encodeurl": "~2.0.0", @@ -11616,7 +11609,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -11626,7 +11618,6 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dev": true, "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", @@ -11643,8 +11634,7 @@ "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, "node_modules/shallow-clone": { "version": "3.0.1", @@ -11696,7 +11686,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -11920,7 +11909,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -12167,7 +12155,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -12432,7 +12419,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, "engines": { "node": ">=0.6" } @@ -12501,7 +12487,6 @@ "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" @@ -12553,9 +12538,9 @@ } }, "node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", "dev": true, "license": "MIT" }, @@ -12655,7 +12640,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true, "engines": { "node": ">= 0.8" } @@ -12710,7 +12694,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dev": true, "engines": { "node": ">= 0.4.0" } @@ -12750,7 +12733,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true, "engines": { "node": ">= 0.8" } @@ -13750,6 +13732,15 @@ } } }, + "node_modules/xhr2": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/xhr2/-/xhr2-0.2.1.tgz", + "integrity": "sha512-sID0rrVCqkVNUn8t6xuv9+6FViXjUVXq8H5rWOH2rz9fDNQEd4g0EA2XlcEdJXRz5BMEn4O1pJFdT+z4YHhoWw==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", diff --git a/srcANGULAR/package.json b/Angular/package.json similarity index 64% rename from srcANGULAR/package.json rename to Angular/package.json index 80b4d604..c92a0195 100644 --- a/srcANGULAR/package.json +++ b/Angular/package.json @@ -3,10 +3,11 @@ "version": "0.0.0", "scripts": { "ng": "ng", - "start": "ng serve", - "build": "ng build", - "watch": "ng build --watch --configuration development", - "test": "ng test" + "start": "clear && ng serve", + "build": "clear && ng build", + "watch": "clear && ng build --watch --configuration development", + "test": "clear && ng test --no-watch --code-coverage --browsers ChromeHeadless", + "serve:ssr:app": "node dist/app/server/server.mjs" }, "private": true, "dependencies": { @@ -17,7 +18,11 @@ "@angular/forms": "^18.2.9", "@angular/platform-browser": "^18.2.9", "@angular/platform-browser-dynamic": "^18.2.9", + "@angular/platform-server": "^18.2.9", "@angular/router": "^18.2.9", + "@angular/service-worker": "^18.2.9", + "@angular/ssr": "^18.2.10", + "express": "^4.18.2", "rxjs": "~7.8.0", "tslib": "^2.3.0", "zone.js": "~0.14.10" @@ -26,7 +31,9 @@ "@angular-devkit/build-angular": "^18.2.10", "@angular/cli": "^18.2.10", "@angular/compiler-cli": "^18.2.9", + "@types/express": "^4.17.17", "@types/jasmine": "~4.3.0", + "@types/node": "^18.18.0", "jasmine-core": "~4.6.0", "karma": "~6.4.0", "karma-chrome-launcher": "~3.2.0", @@ -35,4 +42,4 @@ "karma-jasmine-html-reporter": "~2.1.0", "typescript": "~5.4.2" } -} \ No newline at end of file +} diff --git a/Angular/prerender-routes.txt b/Angular/prerender-routes.txt new file mode 100644 index 00000000..96f392d2 --- /dev/null +++ b/Angular/prerender-routes.txt @@ -0,0 +1,3 @@ +/ +/en +/404 diff --git a/Angular/server.ts b/Angular/server.ts new file mode 100644 index 00000000..544b283d --- /dev/null +++ b/Angular/server.ts @@ -0,0 +1,65 @@ +/* + * COPYRIGHT LICENSE NOTICE HERE + */ +import { APP_BASE_HREF } from '@angular/common'; +import { CommonEngine } from '@angular/ssr'; +import express from 'express'; +import { fileURLToPath } from 'node:url'; +import { dirname, join, resolve } from 'node:path'; +import AppServerModule from './main.server'; + + + + +// The Express app is exported so that it can be used by serverless Functions. +export function app(): express.Express { + const server = express(); + const serverDistFolder = dirname(fileURLToPath(import.meta.url)); + const browserDistFolder = resolve(serverDistFolder, '../browser'); + const indexHtml = join(serverDistFolder, 'index.server.html'); + const commonEngine = new CommonEngine(); + + + server.set('view engine', 'html'); + server.set('views', browserDistFolder); + // Example Express Rest API endpoints + // server.get('/api/**', (req, res) => { }); + // Serve static files from /browser + server.get('**', express.static(browserDistFolder, { + maxAge: '1y', + index: 'index.html', + })); + + + // All regular routes use the Angular engine + server.get('**', (req, res, next) => { + const { protocol, originalUrl, baseUrl, headers } = req; + + commonEngine + .render({ + bootstrap: AppServerModule, + documentFilePath: indexHtml, + url: `${protocol}://${headers.host}${originalUrl}`, + publicPath: browserDistFolder, + providers: [{ provide: APP_BASE_HREF, useValue: baseUrl }], + }) + .then((html) => res.send(html)) + .catch((err) => next(err)); + }); + + return server; +} + + + + +function run(): void { + const port = process.env['PORT'] || 4000; + + // Start up the Node server + const server = app(); + server.listen(port, () => { + console.log(`Node Express server listening on http://localhost:${port}`); + }); +} +run(); diff --git a/srcANGULAR/src/services/sample/Entity.ts b/Angular/services/Entity/Entity.ts similarity index 76% rename from srcANGULAR/src/services/sample/Entity.ts rename to Angular/services/Entity/Entity.ts index 1cde3fe0..f9af7d25 100644 --- a/srcANGULAR/src/services/sample/Entity.ts +++ b/Angular/services/Entity/Entity.ts @@ -1,4 +1,6 @@ -// [ COPYRIGHT CLASE HERE ] +/* + * COPYRIGHT LICENSE NOTICE HERE + */ import { Injectable } from '@angular/core'; diff --git a/srcANGULAR/src/services/sample/Greeter.spec.ts b/Angular/services/Greeter/Greeter.spec.ts similarity index 92% rename from srcANGULAR/src/services/sample/Greeter.spec.ts rename to Angular/services/Greeter/Greeter.spec.ts index c32f5d26..c4334658 100644 --- a/srcANGULAR/src/services/sample/Greeter.spec.ts +++ b/Angular/services/Greeter/Greeter.spec.ts @@ -1,6 +1,9 @@ +/* + * COPYRIGHT LICENSE NOTICE HERE + */ import { TestBed } from '@angular/core/testing'; -import { Greeter } from 'src/services/sample/Greeter'; +import { Greeter } from './Greeter'; diff --git a/srcANGULAR/src/services/sample/Greeter.ts b/Angular/services/Greeter/Greeter.ts similarity index 91% rename from srcANGULAR/src/services/sample/Greeter.ts rename to Angular/services/Greeter/Greeter.ts index 281deedc..3dcf3106 100644 --- a/srcANGULAR/src/services/sample/Greeter.ts +++ b/Angular/services/Greeter/Greeter.ts @@ -1,4 +1,6 @@ -// [ COPYRIGHT CLASE HERE ] +/* + * COPYRIGHT LICENSE NOTICE HERE + */ import { Injectable } from '@angular/core'; diff --git a/srcANGULAR/src/services/sample/Location.ts b/Angular/services/Location/Location.ts similarity index 81% rename from srcANGULAR/src/services/sample/Location.ts rename to Angular/services/Location/Location.ts index 1bc24c3a..344620d8 100644 --- a/srcANGULAR/src/services/sample/Location.ts +++ b/Angular/services/Location/Location.ts @@ -1,4 +1,6 @@ -// [ COPYRIGHT CLASE HERE ] +/* + * COPYRIGHT LICENSE NOTICE HERE + */ import { Injectable } from '@angular/core'; diff --git a/srcANGULAR/tsconfig.app.json b/Angular/tsconfig.app.json similarity index 60% rename from srcANGULAR/tsconfig.app.json rename to Angular/tsconfig.app.json index 374cc9d2..ad3b0093 100644 --- a/srcANGULAR/tsconfig.app.json +++ b/Angular/tsconfig.app.json @@ -3,12 +3,17 @@ "extends": "./tsconfig.json", "compilerOptions": { "outDir": "./out-tsc/app", - "types": [] + "types": [ + "node" + ] }, "files": [ - "src/main.ts" + "main.ts", + "main.server.ts", + "server.ts" ], "include": [ - "src/**/*.d.ts" + "contents/**/*.d.ts", + "services/**/*.d.ts" ] } diff --git a/srcANGULAR/tsconfig.json b/Angular/tsconfig.json similarity index 100% rename from srcANGULAR/tsconfig.json rename to Angular/tsconfig.json diff --git a/srcANGULAR/tsconfig.spec.json b/Angular/tsconfig.spec.json similarity index 67% rename from srcANGULAR/tsconfig.spec.json rename to Angular/tsconfig.spec.json index c939db86..51af0741 100644 --- a/srcANGULAR/tsconfig.spec.json +++ b/Angular/tsconfig.spec.json @@ -8,7 +8,9 @@ ] }, "include": [ - "**/**/*.spec.ts", - "**/**/*.d.ts" + "contents/**/*.spec.ts", + "contents/**/*.d.ts", + "services/**/*.spec.ts", + "services/**/*.d.ts" ] } diff --git a/CONFIG.toml b/CONFIG.toml index db20562f..a74fb409 100644 --- a/CONFIG.toml +++ b/CONFIG.toml @@ -230,7 +230,7 @@ AUTOMATACI_LANG = '' # shall notify the CI provider to setup a localized virtual environment for # development automatically. # -# To enable it: simply supply the path (e.g. default is 'srcANGULAR'). +# To enable it: simply supply the path (e.g. 'Angular' for 'Angular/'). # To disable it: simply supply an empty path (e.g. default is ''). PROJECT_ANGULAR = '' diff --git a/srcANGULAR/README.md b/srcANGULAR/README.md deleted file mode 100644 index c3675866..00000000 --- a/srcANGULAR/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# App - -This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 16.2.6. - -## Development server - -Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The application will automatically reload if you change any of the source files. - -## Code scaffolding - -Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`. - -## Build - -Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. - -## Running unit tests - -Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io). - -## Running end-to-end tests - -Run `ng e2e` to execute the end-to-end tests via a platform of your choice. To use this command, you need to first add a package that implements end-to-end testing capabilities. - -## Further help - -To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page. diff --git a/srcANGULAR/src/assets/.gitkeep b/srcANGULAR/src/assets/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/srcANGULAR/src/favicon.ico b/srcANGULAR/src/favicon.ico deleted file mode 100644 index 997406ad..00000000 Binary files a/srcANGULAR/src/favicon.ico and /dev/null differ diff --git a/srcANGULAR/src/index.html b/srcANGULAR/src/index.html deleted file mode 100644 index 822ed94b..00000000 --- a/srcANGULAR/src/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - App - - - - - - - - diff --git a/srcANGULAR/src/main.ts b/srcANGULAR/src/main.ts deleted file mode 100644 index cd9c9133..00000000 --- a/srcANGULAR/src/main.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; - -import { AppModule } from './module'; - - - - -platformBrowserDynamic().bootstrapModule(AppModule) - .catch(err => console.error(err)); diff --git a/srcANGULAR/src/module.ts b/srcANGULAR/src/module.ts deleted file mode 100644 index 2102197c..00000000 --- a/srcANGULAR/src/module.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { NgModule } from '@angular/core'; -import { BrowserModule } from '@angular/platform-browser'; - -import { AppRoutingModule } from './routing'; -import { LandingPageComponent } from './pages/landing/content.component'; - -@NgModule({ - declarations: [ - LandingPageComponent - ], - imports: [ - BrowserModule, - AppRoutingModule - ], - providers: [], - bootstrap: [LandingPageComponent] -}) -export class AppModule { } diff --git a/srcANGULAR/src/pages/landing/content.component.css b/srcANGULAR/src/pages/landing/content.component.css deleted file mode 100644 index e69de29b..00000000 diff --git a/srcANGULAR/src/pages/landing/content.component.html b/srcANGULAR/src/pages/landing/content.component.html deleted file mode 100644 index e1c9e749..00000000 --- a/srcANGULAR/src/pages/landing/content.component.html +++ /dev/null @@ -1,6 +0,0 @@ -
-
-

{{ statement }}

-
-
- diff --git a/srcANGULAR/src/pages/landing/content.component.spec.ts b/srcANGULAR/src/pages/landing/content.component.spec.ts deleted file mode 100644 index 0c777cc5..00000000 --- a/srcANGULAR/src/pages/landing/content.component.spec.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TestBed } from '@angular/core/testing'; -import { RouterTestingModule } from '@angular/router/testing'; -import { LandingPageComponent } from './content.component'; - - - - -describe('LandingPageComponent', () => { - beforeEach(() => TestBed.configureTestingModule({ - imports: [RouterTestingModule], - declarations: [LandingPageComponent] - })); - - it('should create the app', () => { - const fixture = TestBed.createComponent(LandingPageComponent); - const app = fixture.componentInstance; - expect(app).toBeTruthy(); - }); -}); diff --git a/srcANGULAR/src/pages/landing/content.component.ts b/srcANGULAR/src/pages/landing/content.component.ts deleted file mode 100644 index 465ed448..00000000 --- a/srcANGULAR/src/pages/landing/content.component.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Component } from '@angular/core'; - -import { Greeter } from 'src/services/sample/Greeter'; -import { Entity } from 'src/services/sample/Entity'; -import { Location } from 'src/services/sample/Location'; - - - - -@Component({ - selector: 'app-root', - templateUrl: './content.component.html', - styleUrls: ['./content.component.css'] -}) -export class LandingPageComponent { - statement: string = ''; - - - constructor() { - let greeter = new Greeter(); - let location = new Location(); - let entity = new Entity(); - - this.statement = greeter.Process(entity.Name, location.Name); - } -} diff --git a/srcANGULAR/src/routing.ts b/srcANGULAR/src/routing.ts deleted file mode 100644 index 346b2b3b..00000000 --- a/srcANGULAR/src/routing.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; - -const routes: Routes = []; - -@NgModule({ - imports: [RouterModule.forRoot(routes)], - exports: [RouterModule] -}) - -export class AppRoutingModule { } diff --git a/srcANGULAR/src/styles.css b/srcANGULAR/src/styles.css deleted file mode 100644 index 90d4ee00..00000000 --- a/srcANGULAR/src/styles.css +++ /dev/null @@ -1 +0,0 @@ -/* You can add global styles to this file, and also import other style files */