@dismissible/nestjs-dismissible-item 0.0.2-canary.585db17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +119 -0
- package/jest.config.ts +27 -0
- package/package.json +48 -0
- package/project.json +42 -0
- package/src/dismissible-item.factory.spec.ts +104 -0
- package/src/dismissible-item.factory.ts +68 -0
- package/src/dismissible-item.module.ts +8 -0
- package/src/dismissible-item.ts +39 -0
- package/src/index.ts +3 -0
- package/tsconfig.json +16 -0
- package/tsconfig.lib.json +14 -0
- package/tsconfig.spec.json +12 -0
package/README.md
ADDED
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
# @dismissible/nestjs-dismissible-item
|
|
2
|
+
|
|
3
|
+
Core data models and factory for dismissible items in NestJS applications.
|
|
4
|
+
|
|
5
|
+
> **Part of the Dismissible API** - This library is part of the [Dismissible API](https://dismissible.io) ecosystem. Visit [dismissible.io](https://dismissible.io) for more information and documentation.
|
|
6
|
+
|
|
7
|
+
## Overview
|
|
8
|
+
|
|
9
|
+
This library provides the foundational data structures for the Dismissible system:
|
|
10
|
+
|
|
11
|
+
- `DismissibleItemDto` - The core data transfer object representing a dismissible item
|
|
12
|
+
- `DismissibleItemFactory` - Factory for creating and manipulating dismissible items
|
|
13
|
+
|
|
14
|
+
## Installation
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
npm install @dismissible/nestjs-dismissible-item
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Getting Started
|
|
21
|
+
|
|
22
|
+
### Basic Usage
|
|
23
|
+
|
|
24
|
+
The `DismissibleItemDto` class represents a dismissible item with the following properties:
|
|
25
|
+
|
|
26
|
+
- `id` - Unique identifier for the item
|
|
27
|
+
- `userId` - User identifier who owns the item
|
|
28
|
+
- `createdAt` - Timestamp when the item was created
|
|
29
|
+
- `dismissedAt` - Optional timestamp when the item was dismissed
|
|
30
|
+
|
|
31
|
+
```typescript
|
|
32
|
+
import { DismissibleItemDto } from '@dismissible/nestjs-dismissible-item';
|
|
33
|
+
|
|
34
|
+
const item: DismissibleItemDto = {
|
|
35
|
+
id: 'welcome-banner',
|
|
36
|
+
userId: 'user-123',
|
|
37
|
+
createdAt: new Date(),
|
|
38
|
+
};
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Using the Factory
|
|
42
|
+
|
|
43
|
+
The `DismissibleItemFactory` provides methods for creating and manipulating items:
|
|
44
|
+
|
|
45
|
+
```typescript
|
|
46
|
+
import { Module } from '@nestjs/common';
|
|
47
|
+
import {
|
|
48
|
+
DismissibleItemModule,
|
|
49
|
+
DismissibleItemFactory,
|
|
50
|
+
} from '@dismissible/nestjs-dismissible-item';
|
|
51
|
+
|
|
52
|
+
@Module({
|
|
53
|
+
imports: [DismissibleItemModule],
|
|
54
|
+
})
|
|
55
|
+
export class AppModule {}
|
|
56
|
+
|
|
57
|
+
// In your service
|
|
58
|
+
import { Injectable } from '@nestjs/common';
|
|
59
|
+
import { DismissibleItemFactory, DismissibleItemDto } from '@dismissible/nestjs-dismissible-item';
|
|
60
|
+
|
|
61
|
+
@Injectable()
|
|
62
|
+
export class MyService {
|
|
63
|
+
constructor(private readonly itemFactory: DismissibleItemFactory) {}
|
|
64
|
+
|
|
65
|
+
createItem(): DismissibleItemDto {
|
|
66
|
+
return this.itemFactory.create({
|
|
67
|
+
id: 'welcome-banner',
|
|
68
|
+
userId: 'user-123',
|
|
69
|
+
createdAt: new Date(),
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
dismissItem(item: DismissibleItemDto): DismissibleItemDto {
|
|
74
|
+
return this.itemFactory.createDismissed(item, new Date());
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
restoreItem(item: DismissibleItemDto): DismissibleItemDto {
|
|
78
|
+
return this.itemFactory.createRestored(item);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## API Reference
|
|
84
|
+
|
|
85
|
+
### DismissibleItemDto
|
|
86
|
+
|
|
87
|
+
The main data transfer object for dismissible items.
|
|
88
|
+
|
|
89
|
+
```typescript
|
|
90
|
+
class DismissibleItemDto {
|
|
91
|
+
id: string;
|
|
92
|
+
userId: string;
|
|
93
|
+
createdAt: Date;
|
|
94
|
+
dismissedAt?: Date;
|
|
95
|
+
}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### DismissibleItemFactory
|
|
99
|
+
|
|
100
|
+
Factory for creating and manipulating dismissible items.
|
|
101
|
+
|
|
102
|
+
#### Methods
|
|
103
|
+
|
|
104
|
+
- `create(options)` - Create a new item from options
|
|
105
|
+
- `clone(item)` - Create a clone of an existing item
|
|
106
|
+
- `createDismissed(item, dismissedAt)` - Create a dismissed version of an item
|
|
107
|
+
- `createRestored(item)` - Create a restored (non-dismissed) version of an item
|
|
108
|
+
|
|
109
|
+
## Related Packages
|
|
110
|
+
|
|
111
|
+
This library is typically used alongside other Dismissible packages:
|
|
112
|
+
|
|
113
|
+
- `@dismissible/nestjs-dismissible` - Main dismissible service and module
|
|
114
|
+
- `@dismissible/nestjs-storage` - Storage interface and adapters
|
|
115
|
+
- `@dismissible/nestjs-postgres-storage` - PostgreSQL storage adapter
|
|
116
|
+
|
|
117
|
+
## License
|
|
118
|
+
|
|
119
|
+
MIT
|
package/jest.config.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export default {
|
|
2
|
+
displayName: 'dismissible-item',
|
|
3
|
+
preset: '../../jest.preset.js',
|
|
4
|
+
testEnvironment: 'node',
|
|
5
|
+
transform: {
|
|
6
|
+
'^.+\\.[tj]s$': ['ts-jest', { tsconfig: '<rootDir>/tsconfig.json' }],
|
|
7
|
+
},
|
|
8
|
+
moduleFileExtensions: ['ts', 'js', 'html'],
|
|
9
|
+
coverageDirectory: '../../coverage/libs/dismissible-item',
|
|
10
|
+
collectCoverageFrom: [
|
|
11
|
+
'src/**/*.ts',
|
|
12
|
+
'!src/**/*.spec.ts',
|
|
13
|
+
'!src/**/*.interface.ts',
|
|
14
|
+
'!src/**/*.dto.ts',
|
|
15
|
+
'!src/**/*.enum.ts',
|
|
16
|
+
'!src/**/index.ts',
|
|
17
|
+
'!src/**/*.module.ts',
|
|
18
|
+
],
|
|
19
|
+
coverageThreshold: {
|
|
20
|
+
global: {
|
|
21
|
+
branches: 80,
|
|
22
|
+
functions: 80,
|
|
23
|
+
lines: 80,
|
|
24
|
+
statements: 80,
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
};
|
package/package.json
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@dismissible/nestjs-dismissible-item",
|
|
3
|
+
"version": "0.0.2-canary.585db17.0",
|
|
4
|
+
"description": "Dismissible item library",
|
|
5
|
+
"main": "./src/index.js",
|
|
6
|
+
"types": "./src/index.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"import": "./src/index.mjs",
|
|
10
|
+
"require": "./src/index.js",
|
|
11
|
+
"types": "./src/index.d.ts"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"peerDependencies": {
|
|
15
|
+
"@nestjs/common": "^11.0.0",
|
|
16
|
+
"@nestjs/swagger": "^11.0.0",
|
|
17
|
+
"class-validator": "^0.14.0",
|
|
18
|
+
"class-transformer": "^0.5.0"
|
|
19
|
+
},
|
|
20
|
+
"peerDependenciesMeta": {
|
|
21
|
+
"@nestjs/common": {
|
|
22
|
+
"optional": false
|
|
23
|
+
},
|
|
24
|
+
"@nestjs/swagger": {
|
|
25
|
+
"optional": false
|
|
26
|
+
},
|
|
27
|
+
"class-validator": {
|
|
28
|
+
"optional": false
|
|
29
|
+
},
|
|
30
|
+
"class-transformer": {
|
|
31
|
+
"optional": false
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
"keywords": [
|
|
35
|
+
"nestjs",
|
|
36
|
+
"dismissible",
|
|
37
|
+
"dismissible-item"
|
|
38
|
+
],
|
|
39
|
+
"author": "",
|
|
40
|
+
"license": "MIT",
|
|
41
|
+
"repository": {
|
|
42
|
+
"type": "git",
|
|
43
|
+
"url": "https://github.com/DismissibleIo/dismissible-api"
|
|
44
|
+
},
|
|
45
|
+
"publishConfig": {
|
|
46
|
+
"access": "public"
|
|
47
|
+
}
|
|
48
|
+
}
|
package/project.json
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "dismissible-item",
|
|
3
|
+
"$schema": "../../node_modules/nx/schemas/project-schema.json",
|
|
4
|
+
"sourceRoot": "libs/dismissible-item/src",
|
|
5
|
+
"projectType": "library",
|
|
6
|
+
"tags": [],
|
|
7
|
+
"targets": {
|
|
8
|
+
"build": {
|
|
9
|
+
"executor": "@nx/js:tsc",
|
|
10
|
+
"outputs": ["{options.outputPath}"],
|
|
11
|
+
"options": {
|
|
12
|
+
"outputPath": "dist/libs/dismissible-item",
|
|
13
|
+
"main": "libs/dismissible-item/src/index.ts",
|
|
14
|
+
"tsConfig": "libs/dismissible-item/tsconfig.lib.json",
|
|
15
|
+
"assets": ["libs/dismissible-item/package.json", "libs/dismissible-item/README.md"],
|
|
16
|
+
"generatePackageJson": true
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"lint": {
|
|
20
|
+
"executor": "@nx/eslint:lint",
|
|
21
|
+
"outputs": ["{options.outputFile}"],
|
|
22
|
+
"options": {
|
|
23
|
+
"lintFilePatterns": ["libs/dismissible-item/**/*.ts"]
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"test": {
|
|
27
|
+
"executor": "@nx/jest:jest",
|
|
28
|
+
"outputs": ["{workspaceRoot}/coverage/libs/dismissible-item"],
|
|
29
|
+
"options": {
|
|
30
|
+
"jestConfig": "libs/dismissible-item/jest.config.ts",
|
|
31
|
+
"passWithNoTests": true
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
"npm-publish": {
|
|
35
|
+
"executor": "nx:run-commands",
|
|
36
|
+
"options": {
|
|
37
|
+
"command": "npm publish --access public",
|
|
38
|
+
"cwd": "dist/libs/dismissible-item"
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { DismissibleItemFactory } from './dismissible-item.factory';
|
|
2
|
+
import { DismissibleItemDto } from './dismissible-item';
|
|
3
|
+
|
|
4
|
+
describe('DismissibleItemFactory', () => {
|
|
5
|
+
let factory: DismissibleItemFactory;
|
|
6
|
+
|
|
7
|
+
beforeEach(() => {
|
|
8
|
+
factory = new DismissibleItemFactory();
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
describe('create', () => {
|
|
12
|
+
it('should create a DismissibleItemDto instance', () => {
|
|
13
|
+
const item = factory.create({
|
|
14
|
+
id: 'test-id',
|
|
15
|
+
createdAt: new Date('2024-01-15T10:00:00.000Z'),
|
|
16
|
+
userId: 'test-user-id',
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
expect(item).toBeInstanceOf(DismissibleItemDto);
|
|
20
|
+
expect(item.id).toBe('test-id');
|
|
21
|
+
expect(item.createdAt).toEqual(new Date('2024-01-15T10:00:00.000Z'));
|
|
22
|
+
expect(item.userId).toBe('test-user-id');
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
it('should handle optional properties when undefined', () => {
|
|
26
|
+
const item = factory.create({
|
|
27
|
+
id: 'test-id',
|
|
28
|
+
createdAt: new Date('2024-01-15T10:00:00.000Z'),
|
|
29
|
+
userId: 'test-user-id',
|
|
30
|
+
dismissedAt: undefined,
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
expect(item.id).toBe('test-id');
|
|
34
|
+
expect(item.createdAt).toEqual(new Date('2024-01-15T10:00:00.000Z'));
|
|
35
|
+
expect(item.userId).toBe('test-user-id');
|
|
36
|
+
expect(item.dismissedAt).toBeUndefined();
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
it('should include optional properties when provided', () => {
|
|
40
|
+
const item = factory.create({
|
|
41
|
+
id: 'test-id',
|
|
42
|
+
createdAt: new Date('2024-01-15T10:00:00.000Z'),
|
|
43
|
+
userId: 'user-123',
|
|
44
|
+
dismissedAt: new Date('2024-01-15T12:00:00.000Z'),
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
expect(item.userId).toBe('user-123');
|
|
48
|
+
expect(item.dismissedAt).toEqual(new Date('2024-01-15T12:00:00.000Z'));
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
describe('clone', () => {
|
|
53
|
+
it('should create an identical copy of an item', () => {
|
|
54
|
+
const original = factory.create({
|
|
55
|
+
id: 'test-id',
|
|
56
|
+
createdAt: new Date('2024-01-15T10:00:00.000Z'),
|
|
57
|
+
userId: 'user-123',
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
const cloned = factory.clone(original);
|
|
61
|
+
|
|
62
|
+
expect(cloned).toBeInstanceOf(DismissibleItemDto);
|
|
63
|
+
expect(cloned).toEqual(original);
|
|
64
|
+
expect(cloned).not.toBe(original); // Different object reference
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
describe('createDismissed', () => {
|
|
69
|
+
it('should create a dismissed version with dismissedAt set', () => {
|
|
70
|
+
const original = factory.create({
|
|
71
|
+
id: 'test-id',
|
|
72
|
+
createdAt: new Date('2024-01-15T10:00:00.000Z'),
|
|
73
|
+
userId: 'user-123',
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
const dismissed = factory.createDismissed(original, new Date('2024-01-15T12:00:00.000Z'));
|
|
77
|
+
|
|
78
|
+
expect(dismissed).toBeInstanceOf(DismissibleItemDto);
|
|
79
|
+
expect(dismissed.id).toBe(original.id);
|
|
80
|
+
expect(dismissed.createdAt).toEqual(original.createdAt);
|
|
81
|
+
expect(dismissed.userId).toBe(original.userId);
|
|
82
|
+
expect(dismissed.dismissedAt).toEqual(new Date('2024-01-15T12:00:00.000Z'));
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
describe('createRestored', () => {
|
|
87
|
+
it('should create a restored version without dismissedAt', () => {
|
|
88
|
+
const dismissed = factory.create({
|
|
89
|
+
id: 'test-id',
|
|
90
|
+
createdAt: new Date('2024-01-15T10:00:00.000Z'),
|
|
91
|
+
userId: 'user-123',
|
|
92
|
+
dismissedAt: new Date('2024-01-15T12:00:00.000Z'),
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
const restored = factory.createRestored(dismissed);
|
|
96
|
+
|
|
97
|
+
expect(restored).toBeInstanceOf(DismissibleItemDto);
|
|
98
|
+
expect(restored.id).toBe(dismissed.id);
|
|
99
|
+
expect(restored.createdAt).toEqual(dismissed.createdAt);
|
|
100
|
+
expect(restored.userId).toBe(dismissed.userId);
|
|
101
|
+
expect(restored.dismissedAt).toBeUndefined();
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
});
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { Injectable } from '@nestjs/common';
|
|
2
|
+
import { plainToInstance } from 'class-transformer';
|
|
3
|
+
import { DismissibleItemDto } from './dismissible-item';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Options for creating a dismissible item.
|
|
7
|
+
*/
|
|
8
|
+
export interface ICreateDismissibleItemOptions {
|
|
9
|
+
id: string;
|
|
10
|
+
createdAt: Date;
|
|
11
|
+
userId: string;
|
|
12
|
+
dismissedAt?: Date;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Factory for creating DismissibleItemDto instances.
|
|
17
|
+
* Uses class-transformer to ensure proper class instantiation.
|
|
18
|
+
*/
|
|
19
|
+
@Injectable()
|
|
20
|
+
export class DismissibleItemFactory {
|
|
21
|
+
/**
|
|
22
|
+
* Create a new DismissibleItemDto instance from the provided options.
|
|
23
|
+
* Uses plainToInstance to ensure the result is a proper class instance.
|
|
24
|
+
*/
|
|
25
|
+
create(options: ICreateDismissibleItemOptions): DismissibleItemDto {
|
|
26
|
+
return plainToInstance(DismissibleItemDto, options, {
|
|
27
|
+
excludeExtraneousValues: false,
|
|
28
|
+
enableImplicitConversion: true,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Create a clone of an existing DismissibleItemDto.
|
|
34
|
+
*/
|
|
35
|
+
clone(item: DismissibleItemDto): DismissibleItemDto {
|
|
36
|
+
return this.create({
|
|
37
|
+
id: item.id,
|
|
38
|
+
createdAt: item.createdAt,
|
|
39
|
+
userId: item.userId,
|
|
40
|
+
dismissedAt: item.dismissedAt,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Create a dismissed version of an existing item.
|
|
46
|
+
*/
|
|
47
|
+
createDismissed(item: DismissibleItemDto, dismissedAt: Date): DismissibleItemDto {
|
|
48
|
+
return this.create({
|
|
49
|
+
id: item.id,
|
|
50
|
+
createdAt: item.createdAt,
|
|
51
|
+
userId: item.userId,
|
|
52
|
+
dismissedAt,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Create a restored (non-dismissed) version of an existing item.
|
|
58
|
+
* Removes the dismissedAt property.
|
|
59
|
+
*/
|
|
60
|
+
createRestored(item: DismissibleItemDto): DismissibleItemDto {
|
|
61
|
+
return this.create({
|
|
62
|
+
id: item.id,
|
|
63
|
+
createdAt: item.createdAt,
|
|
64
|
+
userId: item.userId,
|
|
65
|
+
dismissedAt: undefined,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
|
|
2
|
+
import { IsString, IsDate, IsOptional } from 'class-validator';
|
|
3
|
+
import { Type } from 'class-transformer';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Represents a dismissible item in the system.
|
|
7
|
+
*/
|
|
8
|
+
export class DismissibleItemDto {
|
|
9
|
+
@ApiProperty({
|
|
10
|
+
description: 'Unique identifier for the item',
|
|
11
|
+
example: 'welcome-banner-v2',
|
|
12
|
+
})
|
|
13
|
+
@IsString()
|
|
14
|
+
id!: string;
|
|
15
|
+
|
|
16
|
+
@ApiProperty({
|
|
17
|
+
description: 'User identifier who created the item',
|
|
18
|
+
example: 'user-123',
|
|
19
|
+
})
|
|
20
|
+
@IsString()
|
|
21
|
+
userId!: string;
|
|
22
|
+
|
|
23
|
+
@ApiProperty({
|
|
24
|
+
description: 'When the item was created',
|
|
25
|
+
example: '2024-01-15T10:30:00.000Z',
|
|
26
|
+
})
|
|
27
|
+
@IsDate()
|
|
28
|
+
@Type(() => Date)
|
|
29
|
+
createdAt!: Date;
|
|
30
|
+
|
|
31
|
+
@ApiPropertyOptional({
|
|
32
|
+
description: 'When the item was dismissed, if applicable',
|
|
33
|
+
example: '2024-01-15T12:00:00.000Z',
|
|
34
|
+
})
|
|
35
|
+
@IsOptional()
|
|
36
|
+
@IsDate()
|
|
37
|
+
@Type(() => Date)
|
|
38
|
+
dismissedAt?: Date;
|
|
39
|
+
}
|
package/src/index.ts
ADDED
package/tsconfig.json
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"extends": "./tsconfig.json",
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"outDir": "../../dist/out-tsc",
|
|
5
|
+
"declaration": true,
|
|
6
|
+
"module": "commonjs",
|
|
7
|
+
"types": ["node"],
|
|
8
|
+
"emitDecoratorMetadata": true,
|
|
9
|
+
"experimentalDecorators": true,
|
|
10
|
+
"target": "ES2021"
|
|
11
|
+
},
|
|
12
|
+
"exclude": ["node_modules", "**/*.spec.ts", "**/*.test.ts"],
|
|
13
|
+
"include": ["src/**/*.ts"]
|
|
14
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"extends": "./tsconfig.json",
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"outDir": "../../dist/out-tsc",
|
|
5
|
+
"module": "commonjs",
|
|
6
|
+
"types": ["node", "jest"],
|
|
7
|
+
"emitDecoratorMetadata": true,
|
|
8
|
+
"experimentalDecorators": true,
|
|
9
|
+
"target": "ES2021"
|
|
10
|
+
},
|
|
11
|
+
"include": ["src/**/*.spec.ts", "src/**/*.test.ts"]
|
|
12
|
+
}
|