@solidxai/core 0.1.6-beta.7 → 0.1.6
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/dist/controllers/scheduled-job.controller.d.ts +0 -1
- package/dist/controllers/scheduled-job.controller.d.ts.map +1 -1
- package/dist/controllers/scheduled-job.controller.js +0 -12
- package/dist/controllers/scheduled-job.controller.js.map +1 -1
- package/dist/entities/chatter-message-details.entity.d.ts +0 -1
- package/dist/entities/chatter-message-details.entity.d.ts.map +1 -1
- package/dist/entities/chatter-message-details.entity.js +1 -5
- package/dist/entities/chatter-message-details.entity.js.map +1 -1
- package/dist/entities/common.entity.js +1 -1
- package/dist/entities/common.entity.js.map +1 -1
- package/dist/entities/legacy-common.entity.d.ts.map +1 -1
- package/dist/entities/legacy-common.entity.js +1 -1
- package/dist/entities/legacy-common.entity.js.map +1 -1
- package/dist/helpers/field-crud-managers/MediaFieldCrudManager.d.ts +1 -0
- package/dist/helpers/field-crud-managers/MediaFieldCrudManager.d.ts.map +1 -1
- package/dist/helpers/field-crud-managers/MediaFieldCrudManager.js +8 -9
- package/dist/helpers/field-crud-managers/MediaFieldCrudManager.js.map +1 -1
- package/dist/interfaces.d.ts +1 -4
- package/dist/interfaces.d.ts.map +1 -1
- package/dist/interfaces.js.map +1 -1
- package/dist/seeders/seed-data/solid-core-metadata.json +3 -73
- package/dist/services/authentication.service.d.ts.map +1 -1
- package/dist/services/authentication.service.js +21 -45
- package/dist/services/authentication.service.js.map +1 -1
- package/dist/services/chatter-message.service.d.ts.map +1 -1
- package/dist/services/chatter-message.service.js +0 -26
- package/dist/services/chatter-message.service.js.map +1 -1
- package/dist/services/dashboard-question.service.d.ts +0 -4
- package/dist/services/dashboard-question.service.d.ts.map +1 -1
- package/dist/services/dashboard-question.service.js +8 -22
- package/dist/services/dashboard-question.service.js.map +1 -1
- package/dist/services/model-metadata.service.d.ts.map +1 -1
- package/dist/services/model-metadata.service.js +6 -101
- package/dist/services/model-metadata.service.js.map +1 -1
- package/dist/services/question-data-providers/chartjs-sql-data-provider.service.d.ts +4 -2
- package/dist/services/question-data-providers/chartjs-sql-data-provider.service.d.ts.map +1 -1
- package/dist/services/question-data-providers/chartjs-sql-data-provider.service.js +1 -2
- package/dist/services/question-data-providers/chartjs-sql-data-provider.service.js.map +1 -1
- package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.d.ts +5 -2
- package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.d.ts.map +1 -1
- package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.js +1 -2
- package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.js.map +1 -1
- package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.d.ts +5 -2
- package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.d.ts.map +1 -1
- package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.js +1 -2
- package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.js.map +1 -1
- package/dist/services/queues/database-subscriber.service.d.ts +2 -4
- package/dist/services/queues/database-subscriber.service.d.ts.map +1 -1
- package/dist/services/queues/database-subscriber.service.js +1 -9
- package/dist/services/queues/database-subscriber.service.js.map +1 -1
- package/dist/services/queues/publisher-factory.service.d.ts.map +1 -1
- package/dist/services/queues/publisher-factory.service.js +6 -4
- package/dist/services/queues/publisher-factory.service.js.map +1 -1
- package/dist/services/queues/rabbitmq-subscriber.service.d.ts +2 -4
- package/dist/services/queues/rabbitmq-subscriber.service.d.ts.map +1 -1
- package/dist/services/queues/rabbitmq-subscriber.service.js +1 -9
- package/dist/services/queues/rabbitmq-subscriber.service.js.map +1 -1
- package/dist/services/scheduled-job.service.d.ts +1 -6
- package/dist/services/scheduled-job.service.d.ts.map +1 -1
- package/dist/services/scheduled-job.service.js +2 -26
- package/dist/services/scheduled-job.service.js.map +1 -1
- package/dist/services/scheduled-jobs/scheduler.interface.d.ts +0 -2
- package/dist/services/scheduled-jobs/scheduler.interface.d.ts.map +1 -1
- package/dist/services/scheduled-jobs/scheduler.interface.js.map +1 -1
- package/dist/services/scheduled-jobs/scheduler.service.d.ts +2 -6
- package/dist/services/scheduled-jobs/scheduler.service.d.ts.map +1 -1
- package/dist/services/scheduled-jobs/scheduler.service.js +15 -55
- package/dist/services/scheduled-jobs/scheduler.service.js.map +1 -1
- package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.d.ts.map +1 -1
- package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.js +1 -4
- package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.js.map +1 -1
- package/dist/transformers/typeorm/local-date-time-transformer.d.ts +4 -4
- package/dist/transformers/typeorm/local-date-time-transformer.d.ts.map +1 -1
- package/dist/transformers/typeorm/local-date-time-transformer.js +28 -25
- package/dist/transformers/typeorm/local-date-time-transformer.js.map +1 -1
- package/package.json +1 -1
- package/src/controllers/scheduled-job.controller.ts +0 -6
- package/src/entities/chatter-message-details.entity.ts +0 -3
- package/src/entities/common.entity.ts +2 -2
- package/src/entities/legacy-common.entity.ts +4 -3
- package/src/helpers/field-crud-managers/MediaFieldCrudManager.ts +9 -9
- package/src/interfaces.ts +1 -7
- package/src/seeders/seed-data/solid-core-metadata.json +3 -73
- package/src/services/authentication.service.ts +24 -47
- package/src/services/chatter-message.service.ts +0 -26
- package/src/services/dashboard-question.service.ts +4 -23
- package/src/services/model-metadata.service.ts +7 -109
- package/src/services/question-data-providers/chartjs-sql-data-provider.service.ts +7 -3
- package/src/services/question-data-providers/prime-react-datatable-sql-data-provider.service.ts +8 -4
- package/src/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.ts +8 -4
- package/src/services/queues/database-subscriber.service.ts +1 -12
- package/src/services/queues/publisher-factory.service.ts +6 -8
- package/src/services/queues/rabbitmq-subscriber.service.ts +1 -12
- package/src/services/scheduled-job.service.ts +2 -31
- package/src/services/scheduled-jobs/scheduler.interface.ts +1 -4
- package/src/services/scheduled-jobs/scheduler.service.ts +16 -60
- package/src/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.ts +1 -4
- package/src/transformers/typeorm/local-date-time-transformer.ts +33 -41
- package/dist/services/question-data-providers/interfaces.d.ts +0 -1
- package/dist/services/question-data-providers/interfaces.d.ts.map +0 -1
- package/dist/services/question-data-providers/interfaces.js +0 -1
- package/dist/services/question-data-providers/interfaces.js.map +0 -1
- package/src/services/question-data-providers/interfaces.ts +0 -0
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Injectable, Logger } from '@nestjs/common';
|
|
2
2
|
import { ModuleRef } from "@nestjs/core";
|
|
3
3
|
import { InjectEntityManager } from '@nestjs/typeorm';
|
|
4
4
|
import { ScheduledJob } from 'src/entities/scheduled-job.entity';
|
|
5
|
-
import { SolidRegistry } from 'src/helpers/solid-registry';
|
|
6
5
|
import { ScheduledJobRepository } from 'src/repository/scheduled-job.repository';
|
|
7
6
|
import { EntityManager } from 'typeorm';
|
|
8
7
|
import { CRUDService } from './crud.service';
|
|
9
|
-
import { SchedulerServiceImpl } from './scheduled-jobs/scheduler.service';
|
|
10
8
|
|
|
11
9
|
@Injectable()
|
|
12
10
|
export class ScheduledJobService extends CRUDService<ScheduledJob> {
|
|
@@ -18,36 +16,9 @@ export class ScheduledJobService extends CRUDService<ScheduledJob> {
|
|
|
18
16
|
// @InjectRepository(ScheduledJob)
|
|
19
17
|
// readonly repo: Repository<ScheduledJob>,
|
|
20
18
|
readonly repo: ScheduledJobRepository,
|
|
21
|
-
readonly moduleRef: ModuleRef
|
|
22
|
-
private readonly solidRegistry: SolidRegistry,
|
|
23
|
-
private readonly schedulerService: SchedulerServiceImpl,
|
|
19
|
+
readonly moduleRef: ModuleRef
|
|
24
20
|
|
|
25
21
|
) {
|
|
26
22
|
super(entityManager, repo, 'scheduledJob', 'solid-core', moduleRef);
|
|
27
23
|
}
|
|
28
|
-
|
|
29
|
-
async triggerRun(id: number): Promise<ScheduledJob> {
|
|
30
|
-
const job = await this.repo.findOne({ where: { id } });
|
|
31
|
-
if (!job) {
|
|
32
|
-
throw new NotFoundException(`Scheduled job with id ${id} not found`);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
const handler = this.solidRegistry.getScheduledJobProviderInstance(job.job);
|
|
36
|
-
if (!handler) {
|
|
37
|
-
throw new BadRequestException(`Scheduled job handler not found: ${job.job}`);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
this.logger.log(`Manually triggering scheduled job id=${job.id}, job=${job.job}`);
|
|
41
|
-
|
|
42
|
-
await handler.execute(job);
|
|
43
|
-
|
|
44
|
-
const finishedAt = new Date();
|
|
45
|
-
job.lastRunAt = finishedAt;
|
|
46
|
-
job.nextRunAt = this.schedulerService.computeNextRunAt(job, finishedAt);
|
|
47
|
-
await this.repo.save(job);
|
|
48
|
-
|
|
49
|
-
this.logger.log(`Completed manual trigger for scheduled job id=${job.id}, nextRunAt=${job.nextRunAt?.toISOString?.()}`);
|
|
50
|
-
|
|
51
|
-
return job;
|
|
52
|
-
}
|
|
53
24
|
}
|
|
@@ -94,21 +94,22 @@ export class SchedulerServiceImpl implements ISchedulerService {
|
|
|
94
94
|
}
|
|
95
95
|
|
|
96
96
|
private shouldRunNow(job: ScheduledJob, now: Date): boolean {
|
|
97
|
-
const today =
|
|
98
|
-
|
|
99
|
-
const timeNow = this.toHHMM(now); // hh:mm
|
|
97
|
+
const today = now.toISOString().split('T')[0]; // yyyy-mm-dd
|
|
98
|
+
const timeNow = now.toTimeString().slice(0, 5); // hh:mm
|
|
100
99
|
|
|
101
100
|
// 1. Check startDate / endDate
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
if (startDate && today < startDate) return false;
|
|
105
|
-
if (endDate && today > endDate) return false;
|
|
101
|
+
if (job.startDate && new Date(today) < new Date(job.startDate)) return false;
|
|
102
|
+
if (job.endDate && new Date(today) > new Date(job.endDate)) return false;
|
|
106
103
|
|
|
107
104
|
// 2. Check startTime / endTime
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
105
|
+
if (job.startTime) {
|
|
106
|
+
const jobStart = job.startTime.toTimeString().slice(0, 5);
|
|
107
|
+
if (timeNow < jobStart) return false;
|
|
108
|
+
}
|
|
109
|
+
if (job.endTime) {
|
|
110
|
+
const jobEnd = job.endTime.toTimeString().slice(0, 5);
|
|
111
|
+
if (timeNow > jobEnd) return false;
|
|
112
|
+
}
|
|
112
113
|
|
|
113
114
|
// 3. Check custom frequency
|
|
114
115
|
if (job.frequency.toLowerCase() === 'custom') {
|
|
@@ -120,7 +121,8 @@ export class SchedulerServiceImpl implements ISchedulerService {
|
|
|
120
121
|
// 3. Check dayOfWeek (for weekly)
|
|
121
122
|
if (job.frequency.toLowerCase() === 'weekly' && job.dayOfWeek) {
|
|
122
123
|
const todayName = now.toLocaleString('en-US', { weekday: 'long' }); // e.g., "Monday"
|
|
123
|
-
const days =
|
|
124
|
+
// const days = job.dayOfWeek.split(',').map(d => d.trim());
|
|
125
|
+
const days = JSON.parse(job.dayOfWeek) as string[];
|
|
124
126
|
if (!days.includes(todayName)) return false;
|
|
125
127
|
}
|
|
126
128
|
|
|
@@ -133,53 +135,7 @@ export class SchedulerServiceImpl implements ISchedulerService {
|
|
|
133
135
|
return true;
|
|
134
136
|
}
|
|
135
137
|
|
|
136
|
-
private
|
|
137
|
-
try {
|
|
138
|
-
const parsed = JSON.parse(dayOfWeek);
|
|
139
|
-
return Array.isArray(parsed) ? parsed : [];
|
|
140
|
-
} catch (error) {
|
|
141
|
-
this.logger.warn(`Invalid dayOfWeek JSON '${dayOfWeek}'`, error as any);
|
|
142
|
-
return [];
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
private toDateOnly(value: Date | string | null | undefined): Date | null {
|
|
147
|
-
if (!value) return null;
|
|
148
|
-
|
|
149
|
-
if (value instanceof Date) {
|
|
150
|
-
const d = new Date(value);
|
|
151
|
-
d.setHours(0, 0, 0, 0);
|
|
152
|
-
return d;
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
const parsed = new Date(value);
|
|
156
|
-
if (Number.isNaN(parsed.getTime())) return null;
|
|
157
|
-
|
|
158
|
-
parsed.setHours(0, 0, 0, 0);
|
|
159
|
-
return parsed;
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
private toHHMM(value: Date | string | null | undefined): string | null {
|
|
163
|
-
if (!value) return null;
|
|
164
|
-
|
|
165
|
-
if (value instanceof Date) {
|
|
166
|
-
return value.toTimeString().slice(0, 5);
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
if (typeof value === 'string') {
|
|
170
|
-
const match = value.match(/^(\d{2}):(\d{2})/);
|
|
171
|
-
if (match) return `${match[1]}:${match[2]}`;
|
|
172
|
-
|
|
173
|
-
const parsed = new Date(value);
|
|
174
|
-
if (!Number.isNaN(parsed.getTime())) {
|
|
175
|
-
return parsed.toTimeString().slice(0, 5);
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
return null;
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
public computeNextRunForCustomCron(job: ScheduledJob, from: Date): Date {
|
|
138
|
+
private computeNextRunForCustomCron(job: ScheduledJob, from: Date): Date {
|
|
183
139
|
const base = new Date(from);
|
|
184
140
|
|
|
185
141
|
if (!job.cronExpression) {
|
|
@@ -209,7 +165,7 @@ export class SchedulerServiceImpl implements ISchedulerService {
|
|
|
209
165
|
}
|
|
210
166
|
}
|
|
211
167
|
|
|
212
|
-
|
|
168
|
+
private computeNextRunAt(job: ScheduledJob, from: Date): Date {
|
|
213
169
|
const base = new Date(from);
|
|
214
170
|
|
|
215
171
|
switch (job.frequency.toLowerCase()) {
|
|
@@ -3,7 +3,6 @@ import { SelectionProvider } from "src/decorators/selection-provider.decorator";
|
|
|
3
3
|
import { SolidRegistry } from "src/helpers/solid-registry";
|
|
4
4
|
import { IDashboardQuestionDataProvider, IDashboardVariableSelectionProvider, ISelectionProvider, ISelectionProviderContext, ISelectionProviderValues } from "../../interfaces";
|
|
5
5
|
import { SQL_DYNAMIC_PROVIDER_NAME } from "../dashboard.service";
|
|
6
|
-
import { CHARTJS_SQL_DATA_PROVIDER_NAME, INBUILT_SQL_DATA_PROVIDERS, PRIME_REACT_DATATABLE_SQL_DATA_PROVIDER_NAME, PRIME_REACT_METER_GROUP_SQL_DATA_PROVIDER_NAME } from "../dashboard-question.service";
|
|
7
6
|
|
|
8
7
|
|
|
9
8
|
@SelectionProvider()
|
|
@@ -35,9 +34,7 @@ export class ListOfDashboardQuestionProvidersSelectionProvider implements ISelec
|
|
|
35
34
|
async values(query: string, ctxt: ISelectionProviderContext): Promise<readonly ISelectionProviderValues[]> {
|
|
36
35
|
const dashboardSelectionProviders = this.solidRegistry.getDashboardQuestionDataProviders()
|
|
37
36
|
//Exclude the SQL dynamic provider from the list, (since although it is a dashboard selection provider, it is not a valid option for the user to select)
|
|
38
|
-
return dashboardSelectionProviders
|
|
39
|
-
.filter(provider => !INBUILT_SQL_DATA_PROVIDERS.includes(provider.name()))
|
|
40
|
-
.map(i => {
|
|
37
|
+
return dashboardSelectionProviders.map(i => {
|
|
41
38
|
return { label: i.name, value: i.name };
|
|
42
39
|
});
|
|
43
40
|
}
|
|
@@ -20,67 +20,59 @@ function dateToUtcComponentString(d: Date): string {
|
|
|
20
20
|
const ss = pad(d.getUTCSeconds());
|
|
21
21
|
const ms = pad(d.getUTCMilliseconds(), 3);
|
|
22
22
|
|
|
23
|
-
// A
|
|
23
|
+
// A “naive” timestamp string representing the DB wall-clock components
|
|
24
24
|
return `${yyyy}-${mm}-${dd} ${hh}:${mi}:${ss}.${ms}`;
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
wallTimeMode: (process.env.SOLIDX_TIME_STORED_AS_WALL_TIME || "").toLowerCase() === "true",
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* Returns a dayjs instance positioned at the wall-clock time for the given Date.
|
|
36
|
-
* - Wall-clock mode ON: dayjs in the configured timezone (components = wall-clock components)
|
|
37
|
-
* - Wall-clock mode OFF: dayjs in UTC
|
|
38
|
-
* Counterpart to serializeDate — use this to format/display a date value correctly.
|
|
39
|
-
*/
|
|
40
|
-
export function parseDate(date: Date): dayjs.Dayjs {
|
|
41
|
-
const { tz, wallTimeMode } = getWallClockConfig();
|
|
42
|
-
if (!wallTimeMode) return dayjs.utc(date);
|
|
43
|
-
return dayjs(date).tz(tz);
|
|
44
|
-
}
|
|
27
|
+
export const LocalDateTimeTransformer: ValueTransformer & { utc: ValueTransformer } = {
|
|
28
|
+
// DB → Entity
|
|
29
|
+
from(value: Date | string | null | undefined): Date | null | undefined {
|
|
45
30
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
* - Wall-clock mode ON: "YYYY-MM-DD HH:mm:ss.SSS" in the configured timezone (no Z suffix)
|
|
49
|
-
* - Wall-clock mode OFF: ISO 8601 UTC string with Z suffix
|
|
50
|
-
* The presence/absence of the Z suffix lets consumers distinguish the two cases.
|
|
51
|
-
*/
|
|
52
|
-
export function serializeDate(date: Date): string {
|
|
53
|
-
const { wallTimeMode } = getWallClockConfig();
|
|
54
|
-
if (!wallTimeMode) return date.toISOString();
|
|
55
|
-
return parseDate(date).format("YYYY-MM-DD HH:mm:ss.SSS");
|
|
56
|
-
}
|
|
31
|
+
const SOLIDX_WALL_TIME_TZ = process.env.SOLIDX_WALL_TIME_TIMEZONE || process.env.SOLIDX_TIMEZONE || "UTC";
|
|
32
|
+
const SOLIDX_TIME_STORED_AS_WALL_TIME = (process.env.SOLIDX_TIME_STORED_AS_WALL_TIME || "").toLowerCase() === "true";
|
|
57
33
|
|
|
58
|
-
|
|
59
|
-
// DB -> Entity
|
|
60
|
-
from(value: Date | string | null | undefined): Date | null | undefined {
|
|
61
|
-
// critical... super important to return undefined here
|
|
34
|
+
// critical... super important to return undefined here
|
|
62
35
|
if (value === undefined) return undefined;
|
|
63
36
|
if (value === null) return null;
|
|
64
37
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
if (!wallTimeMode) {
|
|
38
|
+
if (!SOLIDX_TIME_STORED_AS_WALL_TIME) {
|
|
68
39
|
return dayjs(value).toDate();
|
|
69
40
|
}
|
|
70
41
|
|
|
71
42
|
const naive = value instanceof Date ? dateToUtcComponentString(value) : String(value);
|
|
72
|
-
return dayjs.tz(naive,
|
|
43
|
+
return dayjs.tz(naive, SOLIDX_WALL_TIME_TZ).utc().toDate();
|
|
73
44
|
},
|
|
74
45
|
|
|
75
|
-
// Entity
|
|
46
|
+
// Entity → DB
|
|
76
47
|
to(value: Date | null | undefined): Date | null | undefined {
|
|
77
|
-
|
|
48
|
+
|
|
49
|
+
const SOLIDX_WALL_TIME_TZ = process.env.SOLIDX_WALL_TIME_TIMEZONE || process.env.SOLIDX_TIMEZONE || "UTC";
|
|
50
|
+
const SOLIDX_TIME_STORED_AS_WALL_TIME = (process.env.SOLIDX_TIME_STORED_AS_WALL_TIME || "").toLowerCase() === "true";
|
|
51
|
+
|
|
52
|
+
// critical... super important to return undefined here
|
|
78
53
|
if (value === undefined) return undefined;
|
|
79
54
|
if (value === null) return null;
|
|
80
55
|
|
|
81
|
-
|
|
56
|
+
if (!SOLIDX_TIME_STORED_AS_WALL_TIME) {
|
|
57
|
+
return dayjs(value).toDate();
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const wallTimeStr = dayjs(value).tz(SOLIDX_WALL_TIME_TZ).format("YYYY-MM-DD HH:mm:ss.SSS");
|
|
82
61
|
return dayjs.utc(wallTimeStr).toDate();
|
|
83
62
|
},
|
|
84
63
|
|
|
64
|
+
utc: {
|
|
65
|
+
from(value: Date | string | null | undefined): Date | null | undefined {
|
|
66
|
+
if (value === undefined) return undefined;
|
|
67
|
+
if (value === null) return null;
|
|
68
|
+
return dayjs(value).toDate();
|
|
69
|
+
},
|
|
70
|
+
to(value: Date | null | undefined): Date | null | undefined {
|
|
71
|
+
if (value === undefined) return undefined;
|
|
72
|
+
if (value === null) return null;
|
|
73
|
+
return dayjs(value).toDate();
|
|
74
|
+
}
|
|
75
|
+
}
|
|
85
76
|
};
|
|
86
77
|
|
|
78
|
+
export const UtcDateTimeTransformer = LocalDateTimeTransformer.utc;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
//# sourceMappingURL=interfaces.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../src/services/question-data-providers/interfaces.ts"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
//# sourceMappingURL=interfaces.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../src/services/question-data-providers/interfaces.ts"],"names":[],"mappings":"","sourcesContent":[""]}
|
|
File without changes
|