├── src
├── assets
│ └── .gitkeep
├── app
│ ├── pages
│ │ ├── pages.component.html
│ │ ├── pages.module.ts
│ │ ├── pages.routes.ts
│ │ ├── sundays
│ │ │ ├── sundays.component.html
│ │ │ ├── sundays.module.ts
│ │ │ └── sundays.component.ts
│ │ └── pages.component.ts
│ ├── app.component.html
│ ├── app.component.ts
│ ├── app.component.scss
│ ├── app-routing.module.ts
│ ├── app.routes.ts
│ ├── app.module.ts
│ └── app.component.spec.ts
├── favicon.ico
├── main.ts
├── styles.scss
└── index.html
├── .vscode
├── extensions.json
├── launch.json
└── tasks.json
├── tsconfig.app.json
├── tsconfig.spec.json
├── .editorconfig
├── .gitignore
├── tsconfig.json
├── README.md
├── package.json
└── angular.json
/src/assets/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/app/pages/pages.component.html:
--------------------------------------------------------------------------------
1 | Pages Component
--------------------------------------------------------------------------------
/src/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/shark12062410/Sundays-Chanllenge/HEAD/src/favicon.ico
--------------------------------------------------------------------------------
/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=827846
3 | "recommendations": ["angular.ng-template"]
4 | }
5 |
--------------------------------------------------------------------------------
/src/app/app.component.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
Angular Code Challenge
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/src/main.ts:
--------------------------------------------------------------------------------
1 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
2 |
3 | import { AppModule } from './app/app.module';
4 |
5 |
6 | platformBrowserDynamic().bootstrapModule(AppModule)
7 | .catch(err => console.error(err));
8 |
--------------------------------------------------------------------------------
/src/app/app.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-root',
5 | templateUrl: './app.component.html',
6 | styleUrls: ['./app.component.scss']
7 | })
8 | export class AppComponent {
9 | title = 'sundays';
10 | }
11 |
--------------------------------------------------------------------------------
/src/app/app.component.scss:
--------------------------------------------------------------------------------
1 | .page-cont {
2 | display: flex;
3 | flex-direction: column;
4 | justify-content: start;
5 | align-items: center;
6 | height: 100vh;
7 |
8 | .title {
9 | font-weight: bold;
10 | font-size: 2rem;
11 | margin: 20px 0px;
12 | }
13 | }
--------------------------------------------------------------------------------
/src/styles.scss:
--------------------------------------------------------------------------------
1 | /* You can add global styles to this file, and also import other style files */
2 |
3 | html, body { height: 100%; }
4 | body { margin: 0; font-family: Roboto, "Helvetica Neue", sans-serif; }
5 |
6 | html, body { height: 100%; }
7 | body { margin: 0; font-family: Roboto, "Helvetica Neue", sans-serif; }
8 |
--------------------------------------------------------------------------------
/src/app/app-routing.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { RouterModule, Routes } from '@angular/router';
3 | import { appRoutes } from './app.routes';
4 |
5 | @NgModule({
6 | imports: [RouterModule.forRoot(appRoutes)],
7 | exports: [RouterModule]
8 | })
9 | export class AppRoutingModule { }
10 |
--------------------------------------------------------------------------------
/tsconfig.app.json:
--------------------------------------------------------------------------------
1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */
2 | {
3 | "extends": "./tsconfig.json",
4 | "compilerOptions": {
5 | "outDir": "./out-tsc/app",
6 | "types": []
7 | },
8 | "files": [
9 | "src/main.ts"
10 | ],
11 | "include": [
12 | "src/**/*.d.ts"
13 | ]
14 | }
15 |
--------------------------------------------------------------------------------
/tsconfig.spec.json:
--------------------------------------------------------------------------------
1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */
2 | {
3 | "extends": "./tsconfig.json",
4 | "compilerOptions": {
5 | "outDir": "./out-tsc/spec",
6 | "types": [
7 | "jasmine"
8 | ]
9 | },
10 | "include": [
11 | "src/**/*.spec.ts",
12 | "src/**/*.d.ts"
13 | ]
14 | }
15 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | # Editor configuration, see https://editorconfig.org
2 | root = true
3 |
4 | [*]
5 | charset = utf-8
6 | indent_style = space
7 | indent_size = 2
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
10 |
11 | [*.ts]
12 | quote_type = single
13 |
14 | [*.md]
15 | max_line_length = off
16 | trim_trailing_whitespace = false
17 |
--------------------------------------------------------------------------------
/src/app/pages/pages.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { PagesComponent } from './pages.component';
3 | import { RouterModule } from '@angular/router';
4 | import { pagesRoutes } from './pages.routes';
5 | @NgModule({
6 | declarations: [PagesComponent],
7 | imports: [
8 | RouterModule.forChild(pagesRoutes),
9 | ],
10 | exports: [PagesComponent],
11 | })
12 | export class PagesModule {}
13 |
--------------------------------------------------------------------------------
/src/app/pages/pages.routes.ts:
--------------------------------------------------------------------------------
1 | import { Routes } from "@angular/router";
2 | import { PagesComponent } from "./pages.component";
3 | import { SundaysComponent } from "./sundays/sundays.component";
4 | export const pagesRoutes: Routes = [
5 | {
6 | path: '',
7 | component: PagesComponent
8 | },
9 | {
10 | path : 'sundays',
11 | component: SundaysComponent,
12 | loadChildren: () => import('./sundays/sundays.module').then(m => m.SundaysModule)
13 | }
14 | ]
--------------------------------------------------------------------------------
/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
3 | "version": "0.2.0",
4 | "configurations": [
5 | {
6 | "name": "ng serve",
7 | "type": "chrome",
8 | "request": "launch",
9 | "preLaunchTask": "npm: start",
10 | "url": "http://localhost:4200/"
11 | },
12 | {
13 | "name": "ng test",
14 | "type": "chrome",
15 | "request": "launch",
16 | "preLaunchTask": "npm: test",
17 | "url": "http://localhost:9876/debug.html"
18 | }
19 | ]
20 | }
21 |
--------------------------------------------------------------------------------
/src/app/app.routes.ts:
--------------------------------------------------------------------------------
1 | import { Routes } from '@angular/router';
2 | import { PagesComponent } from './pages/pages.component';
3 | import { SundaysComponent } from './pages/sundays/sundays.component';
4 |
5 | export const appRoutes: Routes = [
6 | {
7 | path: '',
8 | pathMatch: 'full',
9 | redirectTo: 'pages/sundays',
10 | },
11 | {
12 | path: 'pages/sundays',
13 | loadChildren: () =>
14 | import('./pages/pages.module').then((m) => m.PagesModule),
15 | component: SundaysComponent,
16 | },
17 | {
18 | path: '**',
19 | redirectTo: 'pages/sundays',
20 | },
21 | ];
22 |
--------------------------------------------------------------------------------
/src/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Sundays
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # See http://help.github.com/ignore-files/ for more about ignoring files.
2 |
3 | # Compiled output
4 | /dist
5 | /tmp
6 | /out-tsc
7 | /bazel-out
8 |
9 | # Node
10 | /node_modules
11 | npm-debug.log
12 | yarn-error.log
13 |
14 | # IDEs and editors
15 | .idea/
16 | .project
17 | .classpath
18 | .c9/
19 | *.launch
20 | .settings/
21 | *.sublime-workspace
22 |
23 | # Visual Studio Code
24 | .vscode/*
25 | !.vscode/settings.json
26 | !.vscode/tasks.json
27 | !.vscode/launch.json
28 | !.vscode/extensions.json
29 | .history/*
30 |
31 | # Miscellaneous
32 | /.angular/cache
33 | .sass-cache/
34 | /connect.lock
35 | /coverage
36 | /libpeerconnection.log
37 | testem.log
38 | /typings
39 |
40 | # System files
41 | .DS_Store
42 | Thumbs.db
43 |
--------------------------------------------------------------------------------
/src/app/pages/sundays/sundays.component.html:
--------------------------------------------------------------------------------
1 |
2 | This is sundays project
3 |
4 |
5 | Choose Date Range
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 | {{ errorMessage }}
16 |
17 |
18 | Number of Sundays: {{ result }}
19 |
20 |
21 |
--------------------------------------------------------------------------------
/src/app/pages/sundays/sundays.module.ts:
--------------------------------------------------------------------------------
1 | import { BrowserModule } from '@angular/platform-browser';
2 | import { NgModule } from '@angular/core';
3 | import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
4 | import { ReactiveFormsModule } from '@angular/forms';
5 | import { MatDatepickerModule } from '@angular/material/datepicker';
6 | import { MatFormFieldModule } from '@angular/material/form-field';
7 | import { MatNativeDateModule } from '@angular/material/core';
8 | import { SundaysComponent } from './sundays.component';
9 | @NgModule({
10 | declarations: [SundaysComponent],
11 | imports: [
12 | BrowserModule,
13 | BrowserAnimationsModule,
14 | ReactiveFormsModule,
15 | MatDatepickerModule,
16 | MatFormFieldModule,
17 | MatNativeDateModule,
18 | ],
19 | exports: [SundaysComponent],
20 | })
21 | export class SundaysModule {}
22 |
--------------------------------------------------------------------------------
/src/app/app.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { AppRoutingModule } from './app-routing.module';
3 | import { AppComponent } from './app.component';
4 | import { BrowserModule } from '@angular/platform-browser';
5 | import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
6 | import { ReactiveFormsModule } from '@angular/forms';
7 | import { MatDatepickerModule } from '@angular/material/datepicker';
8 | import { MatFormFieldModule } from '@angular/material/form-field';
9 | import { MatNativeDateModule } from '@angular/material/core';
10 | @NgModule({
11 | declarations: [AppComponent],
12 | imports: [
13 | BrowserModule,
14 | BrowserAnimationsModule,
15 | ReactiveFormsModule,
16 | AppRoutingModule,
17 | MatDatepickerModule,
18 | MatFormFieldModule,
19 | MatNativeDateModule,
20 | ],
21 | providers: [],
22 | bootstrap: [AppComponent],
23 | })
24 | export class AppModule {}
25 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */
2 | {
3 | "compileOnSave": false,
4 | "compilerOptions": {
5 | "baseUrl": "./",
6 | "outDir": "./dist/out-tsc",
7 | "forceConsistentCasingInFileNames": true,
8 | "strict": true,
9 | "noImplicitOverride": true,
10 | "noPropertyAccessFromIndexSignature": true,
11 | "noImplicitReturns": true,
12 | "noFallthroughCasesInSwitch": true,
13 | "sourceMap": true,
14 | "declaration": false,
15 | "downlevelIteration": true,
16 | "experimentalDecorators": true,
17 | "moduleResolution": "node",
18 | "importHelpers": true,
19 | "target": "ES2022",
20 | "module": "ES2022",
21 | "useDefineForClassFields": false,
22 | "lib": [
23 | "ES2022",
24 | "dom"
25 | ]
26 | },
27 | "angularCompilerOptions": {
28 | "enableI18nLegacyMessageIdFormat": false,
29 | "strictInjectionParameters": true,
30 | "strictInputAccessModifiers": true,
31 | "strictTemplates": true
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/.vscode/tasks.json:
--------------------------------------------------------------------------------
1 | {
2 | // For more information, visit: https://go.microsoft.com/fwlink/?LinkId=733558
3 | "version": "2.0.0",
4 | "tasks": [
5 | {
6 | "type": "npm",
7 | "script": "start",
8 | "isBackground": true,
9 | "problemMatcher": {
10 | "owner": "typescript",
11 | "pattern": "$tsc",
12 | "background": {
13 | "activeOnStart": true,
14 | "beginsPattern": {
15 | "regexp": "(.*?)"
16 | },
17 | "endsPattern": {
18 | "regexp": "bundle generation complete"
19 | }
20 | }
21 | }
22 | },
23 | {
24 | "type": "npm",
25 | "script": "test",
26 | "isBackground": true,
27 | "problemMatcher": {
28 | "owner": "typescript",
29 | "pattern": "$tsc",
30 | "background": {
31 | "activeOnStart": true,
32 | "beginsPattern": {
33 | "regexp": "(.*?)"
34 | },
35 | "endsPattern": {
36 | "regexp": "bundle generation complete"
37 | }
38 | }
39 | }
40 | }
41 | ]
42 | }
43 |
--------------------------------------------------------------------------------
/src/app/app.component.spec.ts:
--------------------------------------------------------------------------------
1 | import { TestBed } from '@angular/core/testing';
2 | import { RouterTestingModule } from '@angular/router/testing';
3 | import { AppComponent } from './app.component';
4 |
5 | describe('AppComponent', () => {
6 | beforeEach(() => TestBed.configureTestingModule({
7 | imports: [RouterTestingModule],
8 | declarations: [AppComponent]
9 | }));
10 |
11 | it('should create the app', () => {
12 | const fixture = TestBed.createComponent(AppComponent);
13 | const app = fixture.componentInstance;
14 | expect(app).toBeTruthy();
15 | });
16 |
17 | it(`should have as title 'sundays'`, () => {
18 | const fixture = TestBed.createComponent(AppComponent);
19 | const app = fixture.componentInstance;
20 | expect(app.title).toEqual('sundays');
21 | });
22 |
23 | it('should render title', () => {
24 | const fixture = TestBed.createComponent(AppComponent);
25 | fixture.detectChanges();
26 | const compiled = fixture.nativeElement as HTMLElement;
27 | expect(compiled.querySelector('.content span')?.textContent).toContain('sundays app is running!');
28 | });
29 | });
30 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Angular Code Challengs - Sundays
2 |
3 | This code challenge requires you to complete the following
4 | 1. Add a new route for /pages/sundays and ensure that all pages redirect to that page by default
5 | 2. Create a new component under the "sundays" directory that does the following
6 | 1. Displays a material date range picker and apply the following validaation rules
7 | 1. Dates must be at least two years apart
8 | 2. The start must be in the future and cannot be a sunday
9 | 2. Watch for changes to the picking of dates and when two valid dates are selected then display the number of Sundays between the two dates (including the days selected) excluding any sunday that falls on or after the 28th of the month. You can just output this to the screen below the date picker
10 |
11 | Notes:
12 | 1. You can choose whichever date adapater you like
13 | 2. Don't worry about styling, just use the default material one provided
14 | 3. Extra marks if you use a Reactive Form and watch for the value changes using a RxJS stream.
15 |
16 | ## Timeframe
17 |
18 | This should take between 30 - 60 minutes to complete
19 |
20 | ## When finished
21 |
22 | Create your own public repository and upload to there and provide the link
23 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "sundays",
3 | "version": "0.0.0",
4 | "scripts": {
5 | "ng": "ng",
6 | "start": "ng serve",
7 | "build": "ng build",
8 | "watch": "ng build --watch --configuration development",
9 | "test": "ng test"
10 | },
11 | "private": true,
12 | "dependencies": {
13 | "@angular/animations": "^16.2.0",
14 | "@angular/cdk": "^16.2.7",
15 | "@angular/common": "^16.2.0",
16 | "@angular/compiler": "^16.2.0",
17 | "@angular/core": "^16.2.0",
18 | "@angular/forms": "^16.2.0",
19 | "@angular/material": "^16.2.7",
20 | "@angular/platform-browser": "^16.2.0",
21 | "@angular/platform-browser-dynamic": "^16.2.0",
22 | "@angular/router": "^16.2.0",
23 | "rxjs": "~7.8.0",
24 | "tslib": "^2.3.0",
25 | "zone.js": "~0.13.0"
26 | },
27 | "devDependencies": {
28 | "@angular-devkit/build-angular": "^16.2.1",
29 | "@angular/cli": "~16.2.1",
30 | "@angular/compiler-cli": "^16.2.0",
31 | "@types/jasmine": "~4.3.0",
32 | "jasmine-core": "~4.6.0",
33 | "karma": "~6.4.0",
34 | "karma-chrome-launcher": "~3.2.0",
35 | "karma-coverage": "~2.2.0",
36 | "karma-jasmine": "~5.1.0",
37 | "karma-jasmine-html-reporter": "~2.1.0",
38 | "typescript": "~5.1.3"
39 | }
40 | }
--------------------------------------------------------------------------------
/src/app/pages/pages.component.ts:
--------------------------------------------------------------------------------
1 | import { Component, OnInit, OnDestroy, ViewEncapsulation, ChangeDetectionStrategy } from '@angular/core';
2 | import { Subject } from 'rxjs';
3 |
4 | @Component({
5 | selector: 'pages',
6 | templateUrl: './pages.component.html',
7 | encapsulation: ViewEncapsulation.None,
8 | })
9 | export class PagesComponent implements OnInit, OnDestroy {
10 |
11 |
12 | // @Private Properties
13 | private _unsubscribeAll: Subject = new Subject;
14 |
15 |
16 | /**
17 | * Constructor
18 | */
19 | constructor() { }
20 |
21 |
22 | //--------------------------------------------------------------------------------
23 | // @Lifecycle Hooks
24 | //--------------------------------------------------------------------------------
25 |
26 | /**
27 | * OnInit
28 | */
29 | ngOnInit(): void {
30 |
31 | }
32 |
33 | /**
34 | * OnDestroy
35 | */
36 | ngOnDestroy() {
37 | this._unsubscribeAll.next(null);
38 | this._unsubscribeAll.complete();
39 | }
40 |
41 |
42 | //--------------------------------------------------------------------------------
43 | // @Public Methods
44 | //--------------------------------------------------------------------------------
45 |
46 |
47 | }
--------------------------------------------------------------------------------
/src/app/pages/sundays/sundays.component.ts:
--------------------------------------------------------------------------------
1 | import { Component, OnInit } from '@angular/core';
2 | import {
3 | FormControl,
4 | FormBuilder,
5 | FormGroup,
6 | Validators,
7 | } from '@angular/forms';
8 | import { __values } from 'tslib';
9 | import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
10 |
11 | @Component({
12 | selector: 'sundays-component',
13 | templateUrl: './sundays.component.html',
14 | })
15 | export class SundaysComponent implements OnInit {
16 | dateRange = new FormGroup({
17 | start: new FormControl(),
18 | end: new FormControl(),
19 | });
20 | result: number | null = null;
21 | errorMessage: string | null = null;
22 |
23 | constructor(private formBuilder: FormBuilder) {}
24 |
25 | ngOnInit(): void {
26 | this.dateRange = this.formBuilder.group({
27 | start: ['', [Validators.required]],
28 | end: ['', [Validators.required]],
29 | });
30 |
31 | this.dateRange.valueChanges
32 | .pipe(debounceTime(300), distinctUntilChanged())
33 | .subscribe(() => {
34 | this.calculateSundays();
35 | });
36 | }
37 |
38 | calculateSundays(): void {
39 | const startDate = new Date(this.dateRange.value.start);
40 | const endDate = new Date(this.dateRange.value.end);
41 |
42 | if (!this.isValidDateRange(startDate, endDate)) {
43 | this.result = null;
44 | return;
45 | }
46 |
47 | const sundaysCount = this.countSundays(startDate, endDate);
48 | this.result = sundaysCount;
49 | this.errorMessage = null;
50 | }
51 |
52 | isValidDateRange(startDate: Date, endDate: Date): boolean {
53 | if (!startDate || !endDate) {
54 | return false;
55 | }
56 |
57 | if (
58 | endDate < startDate ||
59 | endDate.getFullYear() - startDate.getFullYear() < 2
60 | ) {
61 | this.errorMessage = 'Dates must be at least two years apart';
62 | return false;
63 | }
64 |
65 | if (startDate.getDay() === 0 || startDate < new Date()) {
66 | this.errorMessage =
67 | 'The start must be in the future and cannot be a sunday';
68 | return false;
69 | }
70 | this.errorMessage = 'Please select valid dates.';
71 | return true;
72 | }
73 |
74 | countSundays(startDate: Date, endDate: Date): number {
75 | let count = 0;
76 | let currentDate = new Date(startDate);
77 |
78 | while (currentDate <= endDate) {
79 | if (currentDate.getDay() === 0 && currentDate.getDate() < 28) {
80 | count++;
81 | }
82 | //this is Sunday calculation
83 | currentDate.setDate(currentDate.getDate() + 1);
84 |
85 | }
86 |
87 | return count;
88 | }
89 | }
90 |
--------------------------------------------------------------------------------
/angular.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
3 | "version": 1,
4 | "newProjectRoot": "projects",
5 | "projects": {
6 | "sundays": {
7 | "projectType": "application",
8 | "schematics": {
9 | "@schematics/angular:component": {
10 | "style": "scss"
11 | }
12 | },
13 | "root": "",
14 | "sourceRoot": "src",
15 | "prefix": "app",
16 | "architect": {
17 | "build": {
18 | "builder": "@angular-devkit/build-angular:browser",
19 | "options": {
20 | "outputPath": "dist/sundays",
21 | "index": "src/index.html",
22 | "main": "src/main.ts",
23 | "polyfills": [
24 | "zone.js"
25 | ],
26 | "tsConfig": "tsconfig.app.json",
27 | "inlineStyleLanguage": "scss",
28 | "assets": [
29 | "src/favicon.ico",
30 | "src/assets"
31 | ],
32 | "styles": [
33 | "@angular/material/prebuilt-themes/indigo-pink.css",
34 | "src/styles.scss"
35 | ],
36 | "scripts": []
37 | },
38 | "configurations": {
39 | "production": {
40 | "budgets": [
41 | {
42 | "type": "initial",
43 | "maximumWarning": "500kb",
44 | "maximumError": "1mb"
45 | },
46 | {
47 | "type": "anyComponentStyle",
48 | "maximumWarning": "2kb",
49 | "maximumError": "4kb"
50 | }
51 | ],
52 | "outputHashing": "all"
53 | },
54 | "development": {
55 | "buildOptimizer": false,
56 | "optimization": false,
57 | "vendorChunk": true,
58 | "extractLicenses": false,
59 | "sourceMap": true,
60 | "namedChunks": true
61 | }
62 | },
63 | "defaultConfiguration": "production"
64 | },
65 | "serve": {
66 | "builder": "@angular-devkit/build-angular:dev-server",
67 | "configurations": {
68 | "production": {
69 | "browserTarget": "sundays:build:production"
70 | },
71 | "development": {
72 | "browserTarget": "sundays:build:development"
73 | }
74 | },
75 | "defaultConfiguration": "development"
76 | },
77 | "extract-i18n": {
78 | "builder": "@angular-devkit/build-angular:extract-i18n",
79 | "options": {
80 | "browserTarget": "sundays:build"
81 | }
82 | },
83 | "test": {
84 | "builder": "@angular-devkit/build-angular:karma",
85 | "options": {
86 | "polyfills": [
87 | "zone.js",
88 | "zone.js/testing"
89 | ],
90 | "tsConfig": "tsconfig.spec.json",
91 | "inlineStyleLanguage": "scss",
92 | "assets": [
93 | "src/favicon.ico",
94 | "src/assets"
95 | ],
96 | "styles": [
97 | "@angular/material/prebuilt-themes/indigo-pink.css",
98 | "src/styles.scss"
99 | ],
100 | "scripts": []
101 | }
102 | }
103 | }
104 | }
105 | },
106 | "cli": {
107 | "analytics": "77521ca5-0bb8-4b16-b657-bada04469769"
108 | }
109 | }
110 |
--------------------------------------------------------------------------------