Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3361642b26 | ||
|
|
fc829ad0af | ||
|
|
b0266e31ea | ||
|
|
492cd3a34c | ||
|
|
96053b7f5d | ||
|
|
2013ac5256 | ||
|
|
9142cf56cf | ||
|
|
c05c08f994 | ||
|
|
0aab8e1bb9 | ||
|
|
7127744454 | ||
|
|
26d8bf5184 | ||
|
|
9ff7cb503a | ||
|
|
420dacf379 | ||
|
|
a213caaf92 | ||
|
|
cbdaa8991c | ||
|
|
2caab553aa | ||
|
|
7c1538ee66 | ||
|
|
1ff20d4fcd | ||
|
|
2435f3f01b | ||
|
|
6078b552dd | ||
|
|
d07375b10f | ||
|
|
5769d2e653 | ||
|
|
d6f5b7a7ed | ||
|
|
d70489b111 | ||
|
|
d80749489f | ||
|
|
8ce6582123 | ||
|
|
2b5468090a | ||
|
|
327255b466 | ||
|
|
d3515f89e5 |
No files matched your search
@@ -24,7 +24,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v4
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
name: Dependabot Auto-merge
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches: [main]
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
pull-requests: write
|
||||
|
||||
jobs:
|
||||
auto-merge:
|
||||
name: Auto-merge Dependabot minor and patch updates
|
||||
runs-on: ubuntu-latest
|
||||
if: github.actor == 'dependabot[bot]'
|
||||
steps:
|
||||
- name: Fetch Dependabot metadata
|
||||
id: metadata
|
||||
uses: dependabot/fetch-metadata@v2.5.0
|
||||
|
||||
- name: Auto-merge minor and patch updates
|
||||
if: |
|
||||
steps.metadata.outputs.update-type == 'version-update:semver-minor' ||
|
||||
steps.metadata.outputs.update-type == 'version-update:semver-patch'
|
||||
run: gh pr merge --auto --squash "$PR_URL"
|
||||
env:
|
||||
PR_URL: ${{ github.event.pull_request.html_url }}
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
@@ -16,7 +16,7 @@ jobs:
|
||||
security-events: write
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
@@ -52,7 +52,7 @@ jobs:
|
||||
cache-to: type=gha,mode=max
|
||||
|
||||
- name: Run Trivy vulnerability scanner
|
||||
uses: aquasecurity/trivy-action@0.33.1
|
||||
uses: aquasecurity/trivy-action@0.34.1
|
||||
with:
|
||||
image-ref: ghcr.io/thoguet/vac-optimizer@${{ steps.build.outputs.digest }}
|
||||
format: 'sarif'
|
||||
|
||||
@@ -11,7 +11,7 @@ jobs:
|
||||
name: Lint Check
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v6
|
||||
@@ -20,7 +20,7 @@ jobs:
|
||||
cache: 'npm'
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
run: npm ci --legacy-peer-deps
|
||||
|
||||
- name: Check code formatting with Prettier
|
||||
run: npx prettier --check "src/**/*.{ts,html,scss,css,json}"
|
||||
@@ -32,7 +32,7 @@ jobs:
|
||||
name: TypeScript Type Check
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v6
|
||||
@@ -41,7 +41,7 @@ jobs:
|
||||
cache: 'npm'
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
run: npm ci --legacy-peer-deps
|
||||
|
||||
- name: Run TypeScript compiler
|
||||
run: npx tsc --noEmit
|
||||
@@ -50,7 +50,7 @@ jobs:
|
||||
name: Unit Tests
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v6
|
||||
@@ -59,7 +59,7 @@ jobs:
|
||||
cache: 'npm'
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
run: npm ci --legacy-peer-deps
|
||||
|
||||
- name: Run unit tests
|
||||
run: npm test -- --watch=false --browsers=ChromeHeadless --code-coverage
|
||||
@@ -76,7 +76,7 @@ jobs:
|
||||
name: Build Application
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v6
|
||||
@@ -85,7 +85,7 @@ jobs:
|
||||
cache: 'npm'
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
run: npm ci --legacy-peer-deps
|
||||
|
||||
- name: Build production bundle
|
||||
run: npm run build -- --configuration production
|
||||
@@ -98,7 +98,7 @@ jobs:
|
||||
echo "Build completed successfully"
|
||||
|
||||
- name: Upload build artifacts
|
||||
uses: actions/upload-artifact@v5
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: build-artifacts
|
||||
path: dist/
|
||||
|
||||
+27
-27
@@ -4,31 +4,31 @@ import prettier from 'eslint-config-prettier';
|
||||
import prettierPlugin from 'eslint-plugin-prettier';
|
||||
|
||||
export default [
|
||||
eslintJs.configs.recommended,
|
||||
...tseslint.configs.recommended,
|
||||
prettier,
|
||||
{
|
||||
files: ['**/*.ts'],
|
||||
plugins: {
|
||||
prettier: prettierPlugin,
|
||||
},
|
||||
languageOptions: {
|
||||
parserOptions: {
|
||||
projectService: true,
|
||||
tsconfigRootDir: import.meta.dirname,
|
||||
},
|
||||
},
|
||||
rules: {
|
||||
'prettier/prettier': 'error',
|
||||
'@typescript-eslint/no-explicit-any': 'warn',
|
||||
'@typescript-eslint/explicit-function-return-type': 'off',
|
||||
'@typescript-eslint/no-unused-vars': [
|
||||
'error',
|
||||
{ argsIgnorePattern: '^_', varsIgnorePattern: '^_' },
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
ignores: ['dist/**', 'node_modules/**', '.angular/**', 'coverage/**'],
|
||||
},
|
||||
eslintJs.configs.recommended,
|
||||
...tseslint.configs.recommended,
|
||||
prettier,
|
||||
{
|
||||
files: ['**/*.ts'],
|
||||
plugins: {
|
||||
prettier: prettierPlugin,
|
||||
},
|
||||
languageOptions: {
|
||||
parserOptions: {
|
||||
projectService: true,
|
||||
tsconfigRootDir: import.meta.dirname,
|
||||
},
|
||||
},
|
||||
rules: {
|
||||
'prettier/prettier': 'error',
|
||||
'@typescript-eslint/no-explicit-any': 'warn',
|
||||
'@typescript-eslint/explicit-function-return-type': 'off',
|
||||
'@typescript-eslint/no-unused-vars': [
|
||||
'error',
|
||||
{ argsIgnorePattern: '^_', varsIgnorePattern: '^_' },
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
ignores: ['dist/**', 'node_modules/**', '.angular/**', 'coverage/**'],
|
||||
},
|
||||
];
|
||||
Generated
+14916
-15134
File diff suppressed because it is too large.
Load diff
+69
-69
@@ -1,71 +1,71 @@
|
||||
{
|
||||
"name": "vac-optimizer",
|
||||
"version": "1.5.0",
|
||||
"scripts": {
|
||||
"ng": "ng",
|
||||
"start": "ng serve",
|
||||
"build": "ng build",
|
||||
"watch": "ng build --watch --configuration development",
|
||||
"test": "ng test",
|
||||
"serve:ssr:vac-optimizer": "node dist/vac-optimizer/server/server.mjs",
|
||||
"lint": "eslint \"src/**/*.ts\"",
|
||||
"lint:fix": "eslint \"src/**/*.ts\" --fix",
|
||||
"format": "prettier --write \"src/**/*.{ts,html,scss,css,json}\"",
|
||||
"format:check": "prettier --check \"src/**/*.{ts,html,scss,css,json}\""
|
||||
},
|
||||
"prettier": {
|
||||
"printWidth": 100,
|
||||
"singleQuote": true,
|
||||
"overrides": [
|
||||
{
|
||||
"files": "*.html",
|
||||
"options": {
|
||||
"parser": "angular"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"@angular/animations": "^21.0.1",
|
||||
"@angular/cdk": "^21.0.1",
|
||||
"@angular/common": "^21.0.1",
|
||||
"@angular/compiler": "^21.0.1",
|
||||
"@angular/core": "^21.0.1",
|
||||
"@angular/forms": "^21.0.1",
|
||||
"@angular/material": "^21.0.1",
|
||||
"@angular/platform-browser": "^21.0.1",
|
||||
"@angular/platform-server": "^21.0.1",
|
||||
"@angular/router": "^21.0.1",
|
||||
"@angular/ssr": "^21.0.1",
|
||||
"date-holidays": "^3.26.2",
|
||||
"dayjs": "^1.11.19",
|
||||
"express": "^5.1.0",
|
||||
"rxjs": "~7.8.0",
|
||||
"tslib": "^2.3.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@angular/build": "^21.0.1",
|
||||
"@angular/cli": "^21.0.1",
|
||||
"@angular/compiler-cli": "^21.0.1",
|
||||
"@eslint/js": "^9.39.1",
|
||||
"@types/express": "^5.0.1",
|
||||
"@types/jasmine": "~5.1.0",
|
||||
"@types/jest": "^30.0.0",
|
||||
"@types/node": "^24.10.0",
|
||||
"eslint": "^9.39.1",
|
||||
"eslint-config-prettier": "^10.1.8",
|
||||
"eslint-plugin-prettier": "^5.5.4",
|
||||
"jasmine-core": "~5.12.1",
|
||||
"jest": "^30.2.0",
|
||||
"jest-preset-angular": "^15.0.3",
|
||||
"karma": "~6.4.0",
|
||||
"karma-chrome-launcher": "~3.2.0",
|
||||
"karma-coverage": "~2.2.0",
|
||||
"karma-jasmine": "~5.1.0",
|
||||
"karma-jasmine-html-reporter": "~2.1.0",
|
||||
"prettier": "^3.6.2",
|
||||
"typescript": "~5.9.2",
|
||||
"typescript-eslint": "^8.46.4"
|
||||
}
|
||||
"name": "vac-optimizer",
|
||||
"version": "1.5.0",
|
||||
"scripts": {
|
||||
"ng": "ng",
|
||||
"start": "ng serve",
|
||||
"build": "ng build",
|
||||
"watch": "ng build --watch --configuration development",
|
||||
"test": "ng test",
|
||||
"serve:ssr:vac-optimizer": "node dist/vac-optimizer/server/server.mjs",
|
||||
"lint": "eslint \"src/**/*.ts\"",
|
||||
"lint:fix": "eslint \"src/**/*.ts\" --fix",
|
||||
"format": "prettier --write \"src/**/*.{ts,html,scss,css,json}\"",
|
||||
"format:check": "prettier --check \"src/**/*.{ts,html,scss,css,json}\""
|
||||
},
|
||||
"prettier": {
|
||||
"printWidth": 100,
|
||||
"singleQuote": true,
|
||||
"overrides": [
|
||||
{
|
||||
"files": "*.html",
|
||||
"options": {
|
||||
"parser": "angular"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"@angular/animations": "21.2.0",
|
||||
"@angular/cdk": "^21.2.0",
|
||||
"@angular/common": "21.2.0",
|
||||
"@angular/compiler": "21.2.0",
|
||||
"@angular/core": "21.2.0",
|
||||
"@angular/forms": "21.2.0",
|
||||
"@angular/material": "^21.2.0",
|
||||
"@angular/platform-browser": "21.2.0",
|
||||
"@angular/platform-server": "21.2.0",
|
||||
"@angular/router": "21.2.0",
|
||||
"@angular/ssr": "21.2.0",
|
||||
"date-holidays": "^3.26.8",
|
||||
"dayjs": "^1.11.19",
|
||||
"express": "^5.2.1",
|
||||
"rxjs": "~7.8.2",
|
||||
"tslib": "^2.8.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@angular/build": "21.1.5",
|
||||
"@angular/cli": "21.1.5",
|
||||
"@angular/compiler-cli": "21.1.5",
|
||||
"@eslint/js": "^10.0.1",
|
||||
"@types/express": "^5.0.6",
|
||||
"@types/jasmine": "~6.0.0",
|
||||
"@types/jest": "^30.0.0",
|
||||
"@types/node": "^25.3.0",
|
||||
"eslint": "^10.0.1",
|
||||
"eslint-config-prettier": "^10.1.8",
|
||||
"eslint-plugin-prettier": "^5.5.5",
|
||||
"jasmine-core": "~6.1.0",
|
||||
"jest": "^30.2.0",
|
||||
"jest-preset-angular": "^16.0.0",
|
||||
"karma": "~6.4.4",
|
||||
"karma-chrome-launcher": "~3.2.0",
|
||||
"karma-coverage": "~2.2.1",
|
||||
"karma-jasmine": "~5.1.0",
|
||||
"karma-jasmine-html-reporter": "~2.2.0",
|
||||
"prettier": "^3.8.1",
|
||||
"typescript": "~5.9.3",
|
||||
"typescript-eslint": "^8.56.1"
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Component, effect, signal, inject } from '@angular/core';
|
||||
import { Component, effect, signal, inject, untracked } from '@angular/core';
|
||||
import { UserInputService } from '../../services/user-input-service';
|
||||
import { MatCard, MatCardContent } from '@angular/material/card';
|
||||
import { CalendarMonth } from '../calendar-month/calendar-month';
|
||||
@@ -34,9 +34,11 @@ export class CalendarYear {
|
||||
|
||||
constructor() {
|
||||
effect(() => {
|
||||
this.userInput.computeTriggerSignal();
|
||||
|
||||
this.selectedDates = this.calendarService.getSelectedDatesForYear();
|
||||
const vacationData = this.userInput.vacationNumberSignal();
|
||||
const c = this.calendarSettingsService.get('samediMalin')();
|
||||
const vacationData = untracked(() => this.userInput.vacationNumberSignal());
|
||||
const c = untracked(() => this.calendarSettingsService.get('samediMalin')());
|
||||
console.log('Samedi Malin setting:', c);
|
||||
console.log('Optimizing vacations with data:', vacationData);
|
||||
this.isLoading.set(true);
|
||||
|
||||
@@ -3,7 +3,11 @@
|
||||
<div class="listOfDays">
|
||||
@for (day of daysOff; track day.id) {
|
||||
<div class="day-input-wrapper" animate.enter="day-enter" animate.leave="day-leave">
|
||||
<app-day-input [day]="day" (dayChange)="updateDay($index, $event)" (deleteEntry)="removeFromList($index)"></app-day-input>
|
||||
<app-day-input
|
||||
[day]="day"
|
||||
(dayChange)="updateDay($index, $event)"
|
||||
(deleteEntry)="removeFromList($index)"
|
||||
></app-day-input>
|
||||
</div>
|
||||
}
|
||||
<mat-card class="add-day-card mat-elevation-z2" (click)="addDay()">
|
||||
|
||||
@@ -2,10 +2,12 @@ import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { provideZonelessChangeDetection } from '@angular/core';
|
||||
import { UserInput } from './user-input';
|
||||
import { provideAnimationsAsync } from '@angular/platform-browser/animations/async';
|
||||
import { UserInputService } from '../../services/user-input-service';
|
||||
|
||||
describe('UserInput', () => {
|
||||
let component: UserInput;
|
||||
let fixture: ComponentFixture<UserInput>;
|
||||
let userInputService: UserInputService;
|
||||
|
||||
beforeEach(async () => {
|
||||
await TestBed.configureTestingModule({
|
||||
@@ -15,6 +17,7 @@ describe('UserInput', () => {
|
||||
|
||||
fixture = TestBed.createComponent(UserInput);
|
||||
component = fixture.componentInstance;
|
||||
userInputService = TestBed.inject(UserInputService);
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
@@ -22,20 +25,22 @@ describe('UserInput', () => {
|
||||
expect(component).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should initialize form with values from service', () => {
|
||||
expect(component.userInputForm).toBeDefined();
|
||||
expect(component.userInputForm.get('CP')).toBeDefined();
|
||||
expect(component.userInputForm.get('RTT')).toBeDefined();
|
||||
expect(component.userInputForm.get('Others')).toBeDefined();
|
||||
it('should initialize with vacation days from service', () => {
|
||||
const vacationDays = userInputService.vacationNumberSignal();
|
||||
expect(vacationDays).toBeDefined();
|
||||
expect(Array.isArray(vacationDays)).toBe(true);
|
||||
expect(vacationDays.length).toBeGreaterThan(0);
|
||||
});
|
||||
|
||||
it('should have valid form controls', () => {
|
||||
const cpControl = component.userInputForm.get('CP');
|
||||
const rttControl = component.userInputForm.get('RTT');
|
||||
const othersControl = component.userInputForm.get('Others');
|
||||
it('should add a new vacation day', () => {
|
||||
const initialLength = userInputService.vacationNumberSignal().length;
|
||||
component.addDay();
|
||||
expect(userInputService.vacationNumberSignal().length).toBe(initialLength + 1);
|
||||
});
|
||||
|
||||
expect(cpControl).toBeTruthy();
|
||||
expect(rttControl).toBeTruthy();
|
||||
expect(othersControl).toBeTruthy();
|
||||
it('should remove a vacation day', () => {
|
||||
const initialLength = userInputService.vacationNumberSignal().length;
|
||||
component.removeFromList(0);
|
||||
expect(userInputService.vacationNumberSignal().length).toBe(initialLength - 1);
|
||||
});
|
||||
});
|
||||
@@ -72,7 +72,6 @@ export class UserInput {
|
||||
}
|
||||
|
||||
public triggerComputation() {
|
||||
// Trigger signal update by setting a new array reference
|
||||
this.userInputService.vacationNumberSignal.update((days) => [...days]);
|
||||
this.userInputService.requestComputation();
|
||||
}
|
||||
}
|
||||
@@ -5,7 +5,6 @@
|
||||
justify-content: space-between;
|
||||
padding: 16px;
|
||||
gap: 16px;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.dateInput {
|
||||
|
||||
@@ -273,7 +273,7 @@ export class SelectedDate implements SelectedDateInterface {
|
||||
getClasses(date: Date): string {
|
||||
let returnType: DayType | string = '';
|
||||
if (this.type && date >= this.range.start! && date <= this.range.end!) {
|
||||
returnType = returnType += this.type + ' ';
|
||||
returnType += this.type + ' ';
|
||||
}
|
||||
return returnType;
|
||||
}
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
import { TestBed } from '@angular/core/testing';
|
||||
import { provideZonelessChangeDetection } from '@angular/core';
|
||||
import { UserInputService } from './user-input-service';
|
||||
import { SelectableDayType, VacDay } from './calendar-service';
|
||||
|
||||
describe('UserInput', () => {
|
||||
describe('UserInputService', () => {
|
||||
let service: UserInputService;
|
||||
|
||||
beforeEach(() => {
|
||||
@@ -16,19 +17,41 @@ describe('UserInput', () => {
|
||||
expect(service).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should initialize with random vacation numbers', () => {
|
||||
it('should initialize with vacation days array', () => {
|
||||
const vacations = service.vacationNumberSignal();
|
||||
expect(vacations.cp).toBeGreaterThanOrEqual(1);
|
||||
expect(vacations.cp).toBeLessThanOrEqual(9);
|
||||
expect(vacations.rtt).toBeGreaterThanOrEqual(1);
|
||||
expect(vacations.rtt).toBeLessThanOrEqual(9);
|
||||
expect(vacations.other).toBeGreaterThanOrEqual(1);
|
||||
expect(vacations.other).toBeLessThanOrEqual(9);
|
||||
expect(Array.isArray(vacations)).toBe(true);
|
||||
expect(vacations.length).toBeGreaterThan(0);
|
||||
});
|
||||
|
||||
it('should have vacation days with valid properties', () => {
|
||||
const vacations = service.vacationNumberSignal();
|
||||
vacations.forEach((day) => {
|
||||
expect(day.id).toBeDefined();
|
||||
expect(day.type).toBeDefined();
|
||||
expect(day.numberOfDays).toBeGreaterThanOrEqual(1);
|
||||
expect(day.numberOfDays).toBeLessThanOrEqual(9);
|
||||
expect(day.expiryDate).toBeInstanceOf(Date);
|
||||
});
|
||||
});
|
||||
|
||||
it('should update vacation number signal', () => {
|
||||
const newVacations = { cp: 5, rtt: 3, other: 2 };
|
||||
const newVacations: VacDay[] = [
|
||||
{
|
||||
id: 'test-id',
|
||||
type: SelectableDayType.CP,
|
||||
numberOfDays: 5,
|
||||
expiryDate: new Date(),
|
||||
},
|
||||
];
|
||||
service.vacationNumberSignal.set(newVacations);
|
||||
expect(service.vacationNumberSignal()).toEqual(newVacations);
|
||||
});
|
||||
|
||||
it('should create a new vacation day', () => {
|
||||
const newDay = service.createVacationDay();
|
||||
expect(newDay.id).toBeDefined();
|
||||
expect(newDay.type).toBe(SelectableDayType.CP);
|
||||
expect(newDay.numberOfDays).toBe(1);
|
||||
expect(newDay.expiryDate).toBeInstanceOf(Date);
|
||||
});
|
||||
});
|
||||
@@ -44,4 +44,9 @@ export class UserInputService {
|
||||
|
||||
readonly vacationNumberSignal = signal<VacDay[]>(this.getInitialValues());
|
||||
readonly remainingVacationDaysSignal = signal<VacDay[]>([]);
|
||||
readonly computeTriggerSignal = signal(0);
|
||||
|
||||
public requestComputation(): void {
|
||||
this.computeTriggerSignal.update((count) => count + 1);
|
||||
}
|
||||
}
|
||||
+3
-9
@@ -4,14 +4,8 @@
|
||||
"extends": "./tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"outDir": "./out-tsc/app",
|
||||
"types": [
|
||||
"node"
|
||||
]
|
||||
"types": ["node"]
|
||||
},
|
||||
"include": [
|
||||
"src/**/*.ts"
|
||||
],
|
||||
"exclude": [
|
||||
"src/**/*.spec.ts"
|
||||
]
|
||||
"include": ["src/**/*.ts"],
|
||||
"exclude": ["src/**/*.spec.ts"]
|
||||
}
|
||||
+1
-1
@@ -31,4 +31,4 @@
|
||||
"path": "./tsconfig.spec.json"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
+3
-7
@@ -4,11 +4,7 @@
|
||||
"extends": "./tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"outDir": "./out-tsc/spec",
|
||||
"types": [
|
||||
"jasmine"
|
||||
]
|
||||
"types": ["jasmine"]
|
||||
},
|
||||
"include": [
|
||||
"src/**/*.ts"
|
||||
]
|
||||
}
|
||||
"include": ["src/**/*.ts"]
|
||||
}
|
||||
Reference in new issue
Block a user