@mrtdown/core 2.0.0-alpha.1 → 2.0.0-alpha.10
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/helpers/normalizeRecurringPeriod.d.ts +1 -1
- package/dist/helpers/normalizeRecurringPeriod.js +1 -1
- package/dist/helpers/normalizeRecurringPeriod.js.map +1 -1
- package/dist/helpers/normalizeRecurringPeriod.test.js.map +1 -1
- package/dist/helpers/resolvePeriods.d.ts +20 -5
- package/dist/helpers/resolvePeriods.js +15 -1
- package/dist/helpers/resolvePeriods.js.map +1 -1
- package/dist/helpers/resolvePeriods.test.js.map +1 -1
- package/dist/index.d.ts +22 -18
- package/dist/index.js +22 -18
- package/dist/index.js.map +1 -1
- package/dist/schema/Landmark.js.map +1 -1
- package/dist/schema/Line.d.ts +6 -0
- package/dist/schema/Line.js +2 -1
- package/dist/schema/Line.js.map +1 -1
- package/dist/schema/Operator.js.map +1 -1
- package/dist/schema/Service.js.map +1 -1
- package/dist/schema/Station.d.ts +7 -0
- package/dist/schema/Station.js +7 -6
- package/dist/schema/Station.js.map +1 -1
- package/dist/schema/Town.js.map +1 -1
- package/dist/schema/common.d.ts +4 -0
- package/dist/schema/common.js +3 -0
- package/dist/schema/common.js.map +1 -1
- package/dist/schema/issue/bundle.js.map +1 -1
- package/dist/schema/issue/cause.js.map +1 -1
- package/dist/schema/issue/claim.js.map +1 -1
- package/dist/schema/issue/entity.d.ts +6 -0
- package/dist/schema/issue/entity.js +6 -1
- package/dist/schema/issue/entity.js.map +1 -1
- package/dist/schema/issue/evidence.d.ts +6 -0
- package/dist/schema/issue/evidence.js +9 -4
- package/dist/schema/issue/evidence.js.map +1 -1
- package/dist/schema/issue/facilityEffect.d.ts +5 -0
- package/dist/schema/issue/facilityEffect.js +6 -2
- package/dist/schema/issue/facilityEffect.js.map +1 -1
- package/dist/schema/issue/id.js.map +1 -1
- package/dist/schema/issue/impactEvent.js.map +1 -1
- package/dist/schema/issue/issue.js +2 -4
- package/dist/schema/issue/issue.js.map +1 -1
- package/dist/schema/issue/issueType.js.map +1 -1
- package/dist/schema/issue/period.js.map +1 -1
- package/dist/schema/issue/serviceEffect.d.ts +7 -0
- package/dist/schema/issue/serviceEffect.js +10 -4
- package/dist/schema/issue/serviceEffect.js.map +1 -1
- package/dist/schema/issue/serviceScope.d.ts +6 -0
- package/dist/schema/issue/serviceScope.js +8 -3
- package/dist/schema/issue/serviceScope.js.map +1 -1
- package/dist/util/assert.js.map +1 -1
- package/package.json +21 -61
- package/README.md +0 -107
- package/dist/constants.d.ts +0 -10
- package/dist/constants.js +0 -11
- package/dist/constants.js.map +0 -1
- package/dist/helpers/calculateDurationWithinServiceHours.d.ts +0 -2
- package/dist/helpers/calculateDurationWithinServiceHours.js +0 -13
- package/dist/helpers/calculateDurationWithinServiceHours.js.map +0 -1
- package/dist/helpers/calculateDurationWithinServiceHours.test.d.ts +0 -1
- package/dist/helpers/calculateDurationWithinServiceHours.test.js +0 -83
- package/dist/helpers/calculateDurationWithinServiceHours.test.js.map +0 -1
- package/dist/helpers/computeImpactFromEvidenceClaims.d.ts +0 -21
- package/dist/helpers/computeImpactFromEvidenceClaims.js +0 -293
- package/dist/helpers/computeImpactFromEvidenceClaims.js.map +0 -1
- package/dist/helpers/computeImpactFromEvidenceClaims.test.d.ts +0 -1
- package/dist/helpers/computeImpactFromEvidenceClaims.test.js +0 -544
- package/dist/helpers/computeImpactFromEvidenceClaims.test.js.map +0 -1
- package/dist/helpers/computeStartOfDaysWithinInterval.d.ts +0 -2
- package/dist/helpers/computeStartOfDaysWithinInterval.js +0 -15
- package/dist/helpers/computeStartOfDaysWithinInterval.js.map +0 -1
- package/dist/helpers/computeStartOfDaysWithinInterval.test.d.ts +0 -1
- package/dist/helpers/computeStartOfDaysWithinInterval.test.js +0 -126
- package/dist/helpers/computeStartOfDaysWithinInterval.test.js.map +0 -1
- package/dist/helpers/estimateOpenAICost.d.ts +0 -40
- package/dist/helpers/estimateOpenAICost.js +0 -55
- package/dist/helpers/estimateOpenAICost.js.map +0 -1
- package/dist/helpers/keyForAffectedEntity.d.ts +0 -7
- package/dist/helpers/keyForAffectedEntity.js +0 -14
- package/dist/helpers/keyForAffectedEntity.js.map +0 -1
- package/dist/helpers/splitIntervalByServiceHours.d.ts +0 -2
- package/dist/helpers/splitIntervalByServiceHours.js +0 -30
- package/dist/helpers/splitIntervalByServiceHours.js.map +0 -1
- package/dist/helpers/splitIntervalByServiceHours.test.d.ts +0 -1
- package/dist/helpers/splitIntervalByServiceHours.test.js +0 -152
- package/dist/helpers/splitIntervalByServiceHours.test.js.map +0 -1
- package/dist/helpers/sumIntervalDuration.d.ts +0 -2
- package/dist/helpers/sumIntervalDuration.js +0 -9
- package/dist/helpers/sumIntervalDuration.js.map +0 -1
- package/dist/repo/MRTDownRepository.d.ts +0 -23
- package/dist/repo/MRTDownRepository.js +0 -28
- package/dist/repo/MRTDownRepository.js.map +0 -1
- package/dist/repo/common/FileStore.d.ts +0 -12
- package/dist/repo/common/FileStore.js +0 -27
- package/dist/repo/common/FileStore.js.map +0 -1
- package/dist/repo/common/StandardRepository.d.ts +0 -32
- package/dist/repo/common/StandardRepository.js +0 -58
- package/dist/repo/common/StandardRepository.js.map +0 -1
- package/dist/repo/common/store.d.ts +0 -29
- package/dist/repo/common/store.js +0 -2
- package/dist/repo/common/store.js.map +0 -1
- package/dist/repo/issue/IssueRepository.d.ts +0 -36
- package/dist/repo/issue/IssueRepository.js +0 -177
- package/dist/repo/issue/IssueRepository.js.map +0 -1
- package/dist/repo/issue/helpers/deriveCurrentState.d.ts +0 -51
- package/dist/repo/issue/helpers/deriveCurrentState.js +0 -113
- package/dist/repo/issue/helpers/deriveCurrentState.js.map +0 -1
- package/dist/repo/issue/helpers/deriveCurrentState.test.d.ts +0 -1
- package/dist/repo/issue/helpers/deriveCurrentState.test.js +0 -477
- package/dist/repo/issue/helpers/deriveCurrentState.test.js.map +0 -1
- package/dist/repo/landmark/LandmarkRepository.d.ts +0 -7
- package/dist/repo/landmark/LandmarkRepository.js +0 -12
- package/dist/repo/landmark/LandmarkRepository.js.map +0 -1
- package/dist/repo/line/LineRepository.d.ts +0 -13
- package/dist/repo/line/LineRepository.js +0 -32
- package/dist/repo/line/LineRepository.js.map +0 -1
- package/dist/repo/operator/OperatorRepository.d.ts +0 -7
- package/dist/repo/operator/OperatorRepository.js +0 -12
- package/dist/repo/operator/OperatorRepository.js.map +0 -1
- package/dist/repo/service/ServiceRepository.d.ts +0 -19
- package/dist/repo/service/ServiceRepository.js +0 -39
- package/dist/repo/service/ServiceRepository.js.map +0 -1
- package/dist/repo/station/StationRepository.d.ts +0 -13
- package/dist/repo/station/StationRepository.js +0 -30
- package/dist/repo/station/StationRepository.js.map +0 -1
- package/dist/repo/town/TownRepository.d.ts +0 -7
- package/dist/repo/town/TownRepository.js +0 -12
- package/dist/repo/town/TownRepository.js.map +0 -1
- package/dist/util/ingestContent/helpers/getSlugDateTimeFromClaims.d.ts +0 -7
- package/dist/util/ingestContent/helpers/getSlugDateTimeFromClaims.js +0 -24
- package/dist/util/ingestContent/helpers/getSlugDateTimeFromClaims.js.map +0 -1
- package/dist/util/ingestContent/index.d.ts +0 -12
- package/dist/util/ingestContent/index.js +0 -171
- package/dist/util/ingestContent/index.js.map +0 -1
- package/dist/util/ingestContent/types.d.ts +0 -32
- package/dist/util/ingestContent/types.js +0 -2
- package/dist/util/ingestContent/types.js.map +0 -1
- package/dist/write/MRTDownWriter.d.ts +0 -27
- package/dist/write/MRTDownWriter.js +0 -27
- package/dist/write/MRTDownWriter.js.map +0 -1
- package/dist/write/common/FileWriteStore.d.ts +0 -13
- package/dist/write/common/FileWriteStore.js +0 -31
- package/dist/write/common/FileWriteStore.js.map +0 -1
- package/dist/write/common/StandardWriter.d.ts +0 -14
- package/dist/write/common/StandardWriter.js +0 -17
- package/dist/write/common/StandardWriter.js.map +0 -1
- package/dist/write/common/store.d.ts +0 -32
- package/dist/write/common/store.js +0 -2
- package/dist/write/common/store.js.map +0 -1
- package/dist/write/id/IdGenerator.d.ts +0 -18
- package/dist/write/id/IdGenerator.js +0 -23
- package/dist/write/id/IdGenerator.js.map +0 -1
- package/dist/write/issue/IssueWriter.d.ts +0 -12
- package/dist/write/issue/IssueWriter.js +0 -33
- package/dist/write/issue/IssueWriter.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { PeriodFixed, PeriodRecurring } from '
|
|
1
|
+
import type { PeriodFixed, PeriodRecurring } from '../schema/issue/period.js';
|
|
2
2
|
/**
|
|
3
3
|
* Normalize a recurring period into a list of fixed periods.
|
|
4
4
|
* @param period - The recurring period to normalize.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { DateTime } from 'luxon';
|
|
2
2
|
import { DateTime as DateTimeRust, Frequency, RRule, RRuleSet, Weekday, } from 'rrule-rust';
|
|
3
|
-
import { assert } from '
|
|
3
|
+
import { assert } from '../util/assert.js';
|
|
4
4
|
function toFrequency(frequency) {
|
|
5
5
|
switch (frequency) {
|
|
6
6
|
case 'daily':
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalizeRecurringPeriod.js","sourceRoot":"
|
|
1
|
+
{"version":3,"file":"normalizeRecurringPeriod.js","sourceRoot":"","sources":["../../src/helpers/normalizeRecurringPeriod.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EACL,QAAQ,IAAI,YAAY,EACxB,SAAS,EAET,KAAK,EACL,QAAQ,EACR,OAAO,GACR,MAAM,YAAY,CAAC;AAMpB,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,SAAS,WAAW,CAAC,SAA0B;IAC7C,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,OAAO;YACV,OAAO,SAAS,CAAC,KAAK,CAAC;QACzB,KAAK,QAAQ;YACX,OAAO,SAAS,CAAC,MAAM,CAAC;QAC1B,KAAK,SAAS;YACZ,OAAO,SAAS,CAAC,OAAO,CAAC;QAC3B,KAAK,QAAQ;YACX,OAAO,SAAS,CAAC,MAAM,CAAC;QAC1B;YACE,MAAM,IAAI,KAAK,CAAC,sBAAsB,SAAS,EAAE,CAAC,CAAC;IACvD,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CACnB,UAAyC;IAEzC,MAAM,MAAM,GAA2B,EAAE,CAAC;IAE1C,KAAK,MAAM,GAAG,IAAI,UAAU,IAAI,EAAE,EAAE,CAAC;QACnC,QAAQ,GAAG,EAAE,CAAC;YACZ,KAAK,IAAI;gBACP,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAC5B,MAAM;YACR,KAAK,IAAI;gBACP,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBAC7B,MAAM;YACR,KAAK,IAAI;gBACP,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBAC/B,MAAM;YACR,KAAK,IAAI;gBACP,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAC9B,MAAM;YACR,KAAK,IAAI;gBACP,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAC5B,MAAM;YACR,KAAK,IAAI;gBACP,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAC9B,MAAM;YACR,KAAK,IAAI;gBACP,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAC5B,MAAM;YACR;gBACE,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,SAAS,CAAC,UAAyC;IAK1D,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACzD,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,yBAAyB,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;IAE3E,OAAO;QACL,MAAM,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC;QAC1B,QAAQ,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC;QAC9B,QAAQ,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC;KAC/B,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CACtC,MAAuB;IAEvB,MAAM,YAAY,GAAkB,EAAE,CAAC;IAEvC,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE;QACxE,aAAa,EAAE,IAAI;KACpB,CAAC,CAAC;IACH,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,yBAAyB,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IACnE,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE;QACpE,aAAa,EAAE,IAAI;KACpB,CAAC,CAAC;IACH,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,yBAAyB,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAE/D,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAE7C,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC;QAC5B,OAAO,EAAE,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QACpD,IAAI,EAAE,MAAM,CAAC,QAAQ;QACrB,MAAM,EAAE;YACN,IAAI,KAAK,CAAC;gBACR,KAAK,EAAE,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAChD,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC;gBACxC,QAAQ,EAAE,CAAC;gBACX,SAAS,EAAE,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC;gBAC1C,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;aAC3B,CAAC;SACH;QACD,OAAO,EAAE,MAAM,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YAC1C,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE;gBAC/D,aAAa,EAAE,IAAI;aACpB,CAAC,CAAC;YACH,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,yBAAyB,IAAI,EAAE,CAAC,CAAC;YAC1D,OAAO,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;QACtD,CAAC,CAAC;KACH,CAAC,CAAC;IAEH,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAClE,MAAM,CACJ,eAAe,CAAC,OAAO,EACvB,yBAAyB,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,CACnD,CAAC;IAEF,KAAK,MAAM,EAAE,IAAI,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE;YACxE,aAAa,EAAE,IAAI;SACpB,CAAC,CAAC;QACH,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACxB,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC;YAChC,GAAG,EAAE,CAAC,QAAQ,EAAE;YAChB,IAAI,EAAE,eAAe,CAAC,QAAQ,EAAE,CAAC,IAAI;YACrC,MAAM,EAAE,eAAe,CAAC,QAAQ,EAAE,CAAC,MAAM;YACzC,MAAM,EAAE,eAAe,CAAC,QAAQ,EAAE,CAAC,MAAM;SAC1C,CAAC,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACtB,YAAY,CAAC,IAAI,CAAC;YAChB,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE;YACxB,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE;SACrB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalizeRecurringPeriod.test.js","sourceRoot":"
|
|
1
|
+
{"version":3,"file":"normalizeRecurringPeriod.test.js","sourceRoot":"","sources":["../../src/helpers/normalizeRecurringPeriod.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
import
|
|
1
|
+
import z from 'zod';
|
|
2
|
+
import type { Period } from '../schema/issue/period.js';
|
|
3
|
+
export declare const ResolvePeriodsModeKindSchema: z.ZodEnum<{
|
|
4
|
+
canonical: "canonical";
|
|
5
|
+
operational: "operational";
|
|
6
|
+
}>;
|
|
7
|
+
export type ResolvePeriodsModeKind = z.infer<typeof ResolvePeriodsModeKindSchema>;
|
|
2
8
|
/**
|
|
3
9
|
* Optional inference tuning for operational mode.
|
|
4
10
|
*/
|
|
@@ -44,9 +50,9 @@ type ResolvePeriodsCrowdSignal = {
|
|
|
44
50
|
confidenceNow?: number | null;
|
|
45
51
|
};
|
|
46
52
|
export type ResolvePeriodsMode = {
|
|
47
|
-
kind: 'canonical'
|
|
53
|
+
kind: Extract<ResolvePeriodsModeKind, 'canonical'>;
|
|
48
54
|
} | {
|
|
49
|
-
kind: 'operational'
|
|
55
|
+
kind: Extract<ResolvePeriodsModeKind, 'operational'>;
|
|
50
56
|
/**
|
|
51
57
|
* Timestamp of the most recent evidence supporting an ongoing state
|
|
52
58
|
* for this entity.
|
|
@@ -75,8 +81,17 @@ export type ResolvePeriodsMode = {
|
|
|
75
81
|
*/
|
|
76
82
|
config?: ResolvePeriodsOperationalModeConfig;
|
|
77
83
|
};
|
|
78
|
-
export
|
|
79
|
-
|
|
84
|
+
export declare const ResolvePeriodsEndAtSourceSchema: z.ZodEnum<{
|
|
85
|
+
fact: "fact";
|
|
86
|
+
inferred: "inferred";
|
|
87
|
+
none: "none";
|
|
88
|
+
}>;
|
|
89
|
+
export type ResolvePeriodsEndAtSource = z.infer<typeof ResolvePeriodsEndAtSourceSchema>;
|
|
90
|
+
export declare const ResolvePeriodsEndAtReasonSchema: z.ZodEnum<{
|
|
91
|
+
crowd_decay: "crowd_decay";
|
|
92
|
+
evidence_timeout: "evidence_timeout";
|
|
93
|
+
}>;
|
|
94
|
+
export type ResolvePeriodsEndAtReason = z.infer<typeof ResolvePeriodsEndAtReasonSchema>;
|
|
80
95
|
/**
|
|
81
96
|
* Parameters for resolvePeriods().
|
|
82
97
|
*
|
|
@@ -1,11 +1,25 @@
|
|
|
1
1
|
import { DateTime } from 'luxon';
|
|
2
|
-
import
|
|
2
|
+
import z from 'zod';
|
|
3
|
+
import { assert } from '../util/assert.js';
|
|
3
4
|
import { normalizeRecurringPeriod } from './normalizeRecurringPeriod.js';
|
|
5
|
+
export const ResolvePeriodsModeKindSchema = z.enum([
|
|
6
|
+
'canonical',
|
|
7
|
+
'operational',
|
|
8
|
+
]);
|
|
4
9
|
const DEFAULTS = {
|
|
5
10
|
evidenceStaleAfterMinutes: 120,
|
|
6
11
|
crowdExitGraceMinutes: 30,
|
|
7
12
|
maxInferredDurationMinutes: 18 * 60,
|
|
8
13
|
};
|
|
14
|
+
export const ResolvePeriodsEndAtSourceSchema = z.enum([
|
|
15
|
+
'fact',
|
|
16
|
+
'inferred',
|
|
17
|
+
'none',
|
|
18
|
+
]);
|
|
19
|
+
export const ResolvePeriodsEndAtReasonSchema = z.enum([
|
|
20
|
+
'crowd_decay',
|
|
21
|
+
'evidence_timeout',
|
|
22
|
+
]);
|
|
9
23
|
function resolveByMode(args) {
|
|
10
24
|
const { period, mode, asOf, lastEvidenceAt, crowd, config } = args;
|
|
11
25
|
const startAtDt = DateTime.fromISO(period.startAt, { setZone: true });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolvePeriods.js","sourceRoot":"/","sources":["helpers/resolvePeriods.ts"],"names":[],"mappings":"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","sourcesContent":["import { DateTime } from 'luxon';\nimport type { Period, PeriodFixed } from '#schema/issue/period.js';\nimport { assert } from '#util/assert.js';\nimport { normalizeRecurringPeriod } from './normalizeRecurringPeriod.js';\n\nconst DEFAULTS: ResolvePeriodsOperationalModeConfig = {\n evidenceStaleAfterMinutes: 120,\n crowdExitGraceMinutes: 30,\n maxInferredDurationMinutes: 18 * 60,\n};\n\n/**\n * Optional inference tuning for operational mode.\n */\ntype ResolvePeriodsOperationalModeConfig = {\n /**\n * Minutes after `lastEvidenceAt` before an open period is considered stale.\n *\n * @default 120\n */\n evidenceStaleAfterMinutes?: number;\n /**\n * Grace minutes after crowd activity decays before inferring resolution.\n *\n * @default 30\n */\n crowdExitGraceMinutes?: number;\n /**\n * Hard cap for inferred period length from `startAt`.\n *\n * @default 1080\n */\n maxInferredDurationMinutes?: number;\n};\n\n/**\n * Crowd-derived signal used as a positive indicator of ongoing disruption.\n */\ntype ResolvePeriodsCrowdSignal = {\n /**\n * Whether crowd reports currently indicate active disruption.\n */\n activeNow: boolean;\n /**\n * Most recent timestamp when crowd activity was observed.\n */\n lastActiveAt?: string | null;\n /**\n * Explicit timestamp when crowd reports indicate resolution.\n */\n exitedAt?: string | null;\n /**\n * Optional model confidence for `activeNow` in the [0, 1] range.\n */\n confidenceNow?: number | null;\n};\n\nexport type ResolvePeriodsMode =\n | { kind: 'canonical' }\n | {\n kind: 'operational';\n /**\n * Timestamp of the most recent evidence supporting an ongoing state\n * for this entity.\n *\n * If provided and endAt is null:\n * - May be used to infer an end time after a configured staleness window.\n *\n * If null or undefined:\n * - No evidence-timeout inference will occur.\n */\n lastEvidenceAt?: string | null;\n /**\n * Optional crowd signal state for this entity.\n *\n * Crowd data is treated as a positive signal:\n * - activeNow = true -> disruption likely ongoing.\n * - exitedAt or lastActiveAt may be used to infer resolution.\n */\n crowd?: ResolvePeriodsCrowdSignal | null;\n /**\n * Optional configuration overrides for inference behavior.\n *\n * If omitted, sensible defaults are used.\n *\n * @default { evidenceStaleAfterMinutes: 120, crowdExitGraceMinutes: 30, maxInferredDurationMinutes: 1080 }\n */\n config?: ResolvePeriodsOperationalModeConfig;\n };\n\nexport type ResolvePeriodsEndAtSource = 'fact' | 'inferred' | 'none';\nexport type ResolvePeriodsEndAtReason = 'crowd_decay' | 'evidence_timeout';\n\n/**\n * Parameters for resolvePeriods().\n *\n * These inputs provide:\n * - The canonical periods to resolve\n * - The evaluation timestamp (`asOf`)\n * - The normalization strategy (`mode`)\n * - Optional contextual signals used for inference (evidence + crowd)\n *\n * None of these inputs modify canonical storage. They are used only to\n * derive a view suitable for UI or analytics.\n */\nexport type ResolvePeriodsParams = {\n /**\n * Canonical periods for a single entity (service or facility).\n *\n * Requirements:\n * - startAt and endAt must be ISO 8601 strings with timezone offsets.\n * - endAt may be null when resolution was not explicitly recorded.\n *\n * These are treated as factual inputs. resolvePeriods() does not\n * mutate or rewrite them.\n */\n periods: Period[];\n\n /**\n * The timestamp at which normalization is evaluated.\n *\n * Must be an ISO 8601 string with timezone offset (e.g. +08:00).\n *\n * Examples:\n * - Determines whether a period is currently active.\n * - Prevents inferred end times from extending into the future.\n */\n asOf: string;\n\n /**\n * Controls how open-ended periods are interpreted.\n */\n mode: ResolvePeriodsMode;\n};\n\n/**\n * Normalized periods returned by `resolvePeriods()`.\n *\n * Each item preserves canonical `startAt`/`endAt` values and adds mode-aware\n * resolution metadata for consumers that need either factual timelines or\n * operational \"active now\" behavior.\n */\ntype ResolvePeriodsResult = {\n /**\n * Start timestamp from canonical period data.\n */\n startAt: string;\n /**\n * Canonical end timestamp as stored in source data.\n *\n * This remains null for open-ended canonical periods.\n */\n endAt: string | null;\n /**\n * Effective end timestamp for the selected mode.\n *\n * - \"canonical\": equals `endAt`\n * - \"operational\": may be inferred (end of day when inferred)\n */\n endAtResolved: string | null;\n /**\n * Origin of `endAtResolved`.\n */\n endAtSource: ResolvePeriodsEndAtSource;\n /**\n * Heuristic used when `endAtSource` is \"inferred\".\n */\n endAtReason?: ResolvePeriodsEndAtReason;\n}[];\n\nfunction resolveByMode(args: {\n period: PeriodFixed;\n mode: ResolvePeriodsMode['kind'];\n asOf: DateTime;\n lastEvidenceAt?: string | null;\n crowd?: ResolvePeriodsCrowdSignal | null;\n config: ResolvePeriodsOperationalModeConfig;\n}): ResolvePeriodsResult[number] {\n const { period, mode, asOf, lastEvidenceAt, crowd, config } = args;\n const startAtDt = DateTime.fromISO(period.startAt, { setZone: true });\n assert(startAtDt.isValid, `Invalid ISO datetime: ${period.startAt}`);\n\n if (mode === 'canonical') {\n return {\n ...period,\n endAtResolved: period.endAt,\n endAtSource: period.endAt ? 'fact' : 'none',\n };\n }\n\n if (period.endAt) {\n return {\n ...period,\n endAtResolved: period.endAt,\n endAtSource: 'fact',\n };\n }\n\n const evidenceTimeoutEnd = lastEvidenceAt\n ? (() => {\n const parsedLastEvidenceAt = DateTime.fromISO(lastEvidenceAt, {\n setZone: true,\n });\n assert(\n parsedLastEvidenceAt.isValid,\n `Invalid ISO datetime: ${lastEvidenceAt}`,\n );\n return parsedLastEvidenceAt.plus({\n minutes: config.evidenceStaleAfterMinutes,\n });\n })()\n : null;\n\n let crowdDecayEnd: DateTime | null = null;\n if (crowd) {\n if (crowd.exitedAt) {\n crowdDecayEnd = DateTime.fromISO(crowd.exitedAt, { setZone: true });\n assert(crowdDecayEnd.isValid, `Invalid ISO datetime: ${crowd.exitedAt}`);\n } else if (!crowd.activeNow && crowd.lastActiveAt) {\n const parsedLastActiveAt = DateTime.fromISO(crowd.lastActiveAt, {\n setZone: true,\n });\n assert(\n parsedLastActiveAt.isValid,\n `Invalid ISO datetime: ${crowd.lastActiveAt}`,\n );\n crowdDecayEnd = parsedLastActiveAt.plus({\n minutes: config.crowdExitGraceMinutes,\n });\n }\n }\n\n const inferredCandidate = crowdDecayEnd ?? evidenceTimeoutEnd;\n const inferredReason: ResolvePeriodsResult[number]['endAtReason'] =\n crowdDecayEnd\n ? 'crowd_decay'\n : evidenceTimeoutEnd\n ? 'evidence_timeout'\n : undefined;\n\n if (!inferredCandidate || !inferredReason) {\n return {\n ...period,\n endAtResolved: null,\n endAtSource: 'none',\n };\n }\n\n const maxInferredEnd = startAtDt.plus({\n minutes: config.maxInferredDurationMinutes,\n });\n\n // Inferred end = end of day (00:00 next day, exclusive) in Singapore timezone.\n let inferredEnd = inferredCandidate\n .setZone('Asia/Singapore')\n .startOf('day')\n .plus({ days: 1 });\n\n // Never infer an end before the period starts.\n if (inferredEnd < startAtDt) {\n inferredEnd = startAtDt;\n }\n // Never infer beyond the configured operational maximum window.\n if (inferredEnd > maxInferredEnd) {\n inferredEnd = maxInferredEnd;\n }\n\n // If inferred close time is in the future relative to asOf, keep it open.\n if (inferredEnd > asOf) {\n return {\n ...period,\n endAtResolved: null,\n endAtSource: 'none',\n };\n }\n\n return {\n ...period,\n endAtResolved: inferredEnd.toISO(),\n endAtSource: 'inferred',\n endAtReason: inferredReason,\n };\n}\n\n/**\n * Resolves canonical Period[] into a view suitable for UI or statistics.\n *\n * This function does NOT mutate canonical period data. It derives a view over\n * stored periods depending on the selected normalization mode.\n *\n * The core problem this solves:\n * - In real operations, disruption \"end\" is often not explicitly reported.\n * - Crowd reports are positive-only (people report problems more than resolution).\n * - Canonical logs should not fabricate timestamps, but the product still needs:\n * - a usable \"active now\" experience, and\n * - honest uptime/statistics.\n *\n * ---------------------------------------------------------------------\n * MODES\n * ---------------------------------------------------------------------\n *\n * 1) \"canonical\" (truth / audit)\n *\n * Intended for:\n * - Issue detail timelines and audit views (\"what do we actually know?\")\n * - Debugging and deterministic replay\n * - Data exports and downstream processing\n *\n * Behavior:\n * - Returns periods exactly as stored.\n * - endAtresolved === endAt.\n * - Open-ended periods (endAt = null) remain open.\n * - No inferred end times are introduced.\n *\n * Use this when you want maximum factual integrity and reproducibility.\n *\n *\n * 2) \"operational\" (live UX)\n *\n * Intended for:\n * - Live disruption UI (homepage banners, \"active now\", notifications)\n * - User-facing duration display (\"likely ended around ...\")\n * - Operational dashboards where preventing \"zombie incidents\" is important\n *\n * Behavior:\n * - If a period has a factual endAt, use it.\n * - If endAt is null, attempt to infer an end time using heuristics such as:\n * - crowd signal decay (preferred when available)\n * - evidence staleness timeout (fallback)\n * - Inferred ends are annotated:\n * endAtSource = \"inferred\"\n * endAtReason = \"crowd_decay\" | \"evidence_timeout\"\n * - If inference would produce an end time later than `asOf`,\n * the period remains open (still active).\n *\n * IMPORTANT:\n * - Inferred ends are derived and reversible.\n * - They must NOT be written back into canonical storage.\n *\n * Inferred ends are set to end of day (00:00 next day, exclusive) in Singapore\n * timezone, not duration-based. This avoids artificially shortening disruption.\n *\n * Use this when you want a stable, user-friendly view of \"what's happening now\"\n * even when reporting is incomplete.\n *\n *\n * ---------------------------------------------------------------------\n * DESIGN PRINCIPLE\n * ---------------------------------------------------------------------\n *\n * Canonical data must remain factually correct and append-only.\n * Heuristics (timeouts, crowd decay, assumptions) belong in derived views,\n * not in canonical period storage.\n */\nexport function resolvePeriods(\n params: ResolvePeriodsParams,\n): ResolvePeriodsResult {\n const { periods, asOf, mode } = params;\n const lastEvidenceAt =\n mode.kind === 'operational' ? mode.lastEvidenceAt : undefined;\n const crowd = mode.kind === 'operational' ? (mode.crowd ?? null) : null;\n const config = mode.kind === 'operational' ? mode.config : undefined;\n\n const normalizedPeriods = periods.flatMap((period) => {\n switch (period.kind) {\n case 'fixed':\n return [period];\n case 'recurring':\n return normalizeRecurringPeriod(period);\n default:\n // @ts-expect-error - we only support fixed and recurring periods for now\n throw new Error(`Invalid period kind: ${period.kind}`);\n }\n });\n\n const effectiveConfig = {\n evidenceStaleAfterMinutes:\n config?.evidenceStaleAfterMinutes ?? DEFAULTS.evidenceStaleAfterMinutes,\n crowdExitGraceMinutes:\n config?.crowdExitGraceMinutes ?? DEFAULTS.crowdExitGraceMinutes,\n maxInferredDurationMinutes:\n config?.maxInferredDurationMinutes ?? DEFAULTS.maxInferredDurationMinutes,\n };\n const asOfDt = DateTime.fromISO(asOf, { setZone: true });\n assert(asOfDt.isValid, `Invalid ISO datetime: ${asOf}`);\n const sorted = [...normalizedPeriods].sort((a, b) => {\n const aStart = DateTime.fromISO(a.startAt, { setZone: true });\n const bStart = DateTime.fromISO(b.startAt, { setZone: true });\n assert(aStart.isValid, `Invalid ISO datetime: ${a.startAt}`);\n assert(bStart.isValid, `Invalid ISO datetime: ${b.startAt}`);\n return aStart.toMillis() - bStart.toMillis();\n });\n\n return sorted.map((period) =>\n resolveByMode({\n period: { ...period },\n mode: mode.kind,\n asOf: asOfDt,\n lastEvidenceAt,\n crowd,\n config: effectiveConfig,\n }),\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"resolvePeriods.js","sourceRoot":"","sources":["../../src/helpers/resolvePeriods.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolvePeriods.test.js","sourceRoot":"/","sources":["helpers/resolvePeriods.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, expect, test } from 'vitest';\nimport type { Period } from '#schema/issue/period.js';\nimport { resolvePeriods } from './resolvePeriods.js';\n\ndescribe('resolvePeriods', () => {\n const asOf = '2025-01-01T12:00:00+08:00';\n const factEndedPeriod: Period[] = [\n {\n kind: 'fixed',\n startAt: '2025-01-01T08:00:00+08:00',\n endAt: '2025-01-01T09:00:00+08:00',\n },\n ];\n\n test('keeps fact-ended period in all modes', () => {\n const canonical = resolvePeriods({\n periods: factEndedPeriod,\n asOf,\n mode: { kind: 'canonical' },\n });\n const operational = resolvePeriods({\n periods: factEndedPeriod,\n asOf,\n mode: { kind: 'operational' },\n });\n\n expect(canonical[0]).toMatchObject({\n startAt: '2025-01-01T08:00:00+08:00',\n endAt: '2025-01-01T09:00:00+08:00',\n endAtResolved: '2025-01-01T09:00:00+08:00',\n endAtSource: 'fact',\n });\n expect(operational[0].endAtSource).toBe('fact');\n });\n\n test('open period with no evidence and no crowd remains open', () => {\n const result = resolvePeriods({\n periods: [\n {\n kind: 'fixed',\n startAt: '2025-01-01T08:00:00+08:00',\n endAt: null,\n },\n ],\n asOf,\n mode: { kind: 'operational' },\n });\n\n expect(result[0]).toMatchObject({\n endAt: null,\n endAtResolved: null,\n endAtSource: 'none',\n });\n });\n\n test('open period infers end from evidence timeout only', () => {\n const result = resolvePeriods({\n periods: [\n {\n kind: 'fixed',\n startAt: '2025-01-01T08:00:00+08:00',\n endAt: null,\n },\n ],\n asOf: '2025-01-02T01:00:00+08:00', // Past inferred end-of-day (2025-01-02T00:00)\n mode: {\n kind: 'operational',\n lastEvidenceAt: '2025-01-01T09:00:00+08:00',\n },\n });\n\n expect(result[0]).toMatchObject({\n endAtResolved: '2025-01-02T00:00:00.000+08:00',\n endAtSource: 'inferred',\n endAtReason: 'evidence_timeout',\n });\n });\n\n test('crowd exited inference wins over evidence timeout', () => {\n const result = resolvePeriods({\n periods: [\n {\n kind: 'fixed',\n startAt: '2025-01-01T08:00:00+08:00',\n endAt: null,\n },\n ],\n asOf: '2025-01-02T01:00:00+08:00', // Past inferred end-of-day (2025-01-02T00:00)\n mode: {\n kind: 'operational',\n lastEvidenceAt: '2025-01-01T09:00:00+08:00',\n crowd: {\n activeNow: false,\n exitedAt: '2025-01-01T10:15:00+08:00',\n },\n },\n });\n\n expect(result[0]).toMatchObject({\n endAtResolved: '2025-01-02T00:00:00.000+08:00',\n endAtSource: 'inferred',\n endAtReason: 'crowd_decay',\n });\n });\n\n test('crowd.activeNow=true prevents crowd-based inference fallback', () => {\n const result = resolvePeriods({\n periods: [\n {\n kind: 'fixed',\n startAt: '2025-01-01T08:00:00+08:00',\n endAt: null,\n },\n ],\n asOf,\n mode: {\n kind: 'operational',\n crowd: {\n activeNow: true,\n lastActiveAt: '2025-01-01T09:30:00+08:00',\n },\n },\n });\n\n expect(result[0]).toMatchObject({\n endAtResolved: null,\n endAtSource: 'none',\n });\n });\n\n test('clamps inferred end to maxInferredDurationMinutes', () => {\n const result = resolvePeriods({\n periods: [\n {\n kind: 'fixed',\n startAt: '2025-01-01T08:00:00+08:00',\n endAt: null,\n },\n ],\n asOf: '2025-01-02T13:00:00+08:00',\n mode: {\n kind: 'operational',\n lastEvidenceAt: '2025-01-02T10:00:00+08:00',\n config: {\n maxInferredDurationMinutes: 60,\n },\n },\n });\n\n expect(result[0]).toMatchObject({\n endAtResolved: '2025-01-01T09:00:00.000+08:00',\n endAtSource: 'inferred',\n endAtReason: 'evidence_timeout',\n });\n });\n\n test('does not close period when inferred end is later than asOf', () => {\n const result = resolvePeriods({\n periods: [\n {\n kind: 'fixed',\n startAt: '2025-01-01T08:00:00+08:00',\n endAt: null,\n },\n ],\n asOf: '2025-01-01T10:00:00+08:00',\n mode: {\n kind: 'operational',\n lastEvidenceAt: '2025-01-01T09:30:00+08:00',\n },\n });\n\n expect(result[0]).toMatchObject({\n endAtResolved: null,\n endAtSource: 'none',\n });\n });\n\n test('expands recurring periods into fixed periods in canonical mode', () => {\n const result = resolvePeriods({\n periods: [\n {\n kind: 'recurring',\n frequency: 'daily',\n startAt: '2025-01-01T00:00:00+08:00',\n endAt: '2025-01-03T23:59:59+08:00',\n daysOfWeek: null,\n timeWindow: {\n startAt: '08:00:00',\n endAt: '10:00:00',\n },\n timeZone: 'Asia/Singapore',\n excludedDates: null,\n },\n ],\n asOf,\n mode: { kind: 'canonical' },\n });\n\n expect(result).toEqual([\n {\n kind: 'fixed',\n startAt: '2025-01-01T08:00:00.000+08:00',\n endAt: '2025-01-01T10:00:00.000+08:00',\n endAtResolved: '2025-01-01T10:00:00.000+08:00',\n endAtSource: 'fact',\n },\n {\n kind: 'fixed',\n startAt: '2025-01-02T08:00:00.000+08:00',\n endAt: '2025-01-02T10:00:00.000+08:00',\n endAtResolved: '2025-01-02T10:00:00.000+08:00',\n endAtSource: 'fact',\n },\n {\n kind: 'fixed',\n startAt: '2025-01-03T08:00:00.000+08:00',\n endAt: '2025-01-03T10:00:00.000+08:00',\n endAtResolved: '2025-01-03T10:00:00.000+08:00',\n endAtSource: 'fact',\n },\n ]);\n });\n\n test('sorts normalized recurring periods together with fixed periods', () => {\n const result = resolvePeriods({\n periods: [\n {\n kind: 'fixed',\n startAt: '2025-01-01T07:00:00+08:00',\n endAt: '2025-01-01T07:30:00+08:00',\n },\n {\n kind: 'recurring',\n frequency: 'daily',\n startAt: '2025-01-01T00:00:00+08:00',\n endAt: '2025-01-02T23:59:59+08:00',\n daysOfWeek: null,\n timeWindow: {\n startAt: '08:00:00',\n endAt: '09:00:00',\n },\n timeZone: 'Asia/Singapore',\n excludedDates: null,\n },\n ],\n asOf,\n mode: { kind: 'operational' },\n });\n\n expect(result.map((period) => period.startAt)).toEqual([\n '2025-01-01T07:00:00+08:00',\n '2025-01-01T08:00:00.000+08:00',\n '2025-01-02T08:00:00.000+08:00',\n ]);\n expect(result.every((period) => period.endAtSource === 'fact')).toBe(true);\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"resolvePeriods.test.js","sourceRoot":"","sources":["../../src/helpers/resolvePeriods.test.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,18 +1,22 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
3
|
-
export
|
|
4
|
-
export
|
|
5
|
-
export
|
|
6
|
-
export
|
|
7
|
-
export
|
|
8
|
-
export
|
|
9
|
-
export
|
|
10
|
-
export
|
|
11
|
-
export
|
|
12
|
-
export
|
|
13
|
-
export
|
|
14
|
-
export
|
|
15
|
-
export
|
|
16
|
-
export
|
|
17
|
-
export
|
|
18
|
-
export
|
|
1
|
+
export * from './helpers/normalizeRecurringPeriod.js';
|
|
2
|
+
export * from './helpers/resolvePeriods.js';
|
|
3
|
+
export * from './schema/common.js';
|
|
4
|
+
export * from './schema/issue/bundle.js';
|
|
5
|
+
export * from './schema/issue/cause.js';
|
|
6
|
+
export * from './schema/issue/claim.js';
|
|
7
|
+
export * from './schema/issue/entity.js';
|
|
8
|
+
export * from './schema/issue/evidence.js';
|
|
9
|
+
export * from './schema/issue/facilityEffect.js';
|
|
10
|
+
export * from './schema/issue/id.js';
|
|
11
|
+
export * from './schema/issue/impactEvent.js';
|
|
12
|
+
export * from './schema/issue/issue.js';
|
|
13
|
+
export * from './schema/issue/issueType.js';
|
|
14
|
+
export * from './schema/issue/period.js';
|
|
15
|
+
export * from './schema/issue/serviceEffect.js';
|
|
16
|
+
export * from './schema/issue/serviceScope.js';
|
|
17
|
+
export * from './schema/Landmark.js';
|
|
18
|
+
export * from './schema/Line.js';
|
|
19
|
+
export * from './schema/Operator.js';
|
|
20
|
+
export * from './schema/Service.js';
|
|
21
|
+
export * from './schema/Station.js';
|
|
22
|
+
export * from './schema/Town.js';
|
package/dist/index.js
CHANGED
|
@@ -1,19 +1,23 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
3
|
-
export
|
|
4
|
-
export
|
|
5
|
-
export
|
|
6
|
-
export
|
|
7
|
-
export
|
|
8
|
-
export
|
|
9
|
-
export
|
|
10
|
-
export
|
|
11
|
-
export
|
|
12
|
-
export
|
|
13
|
-
export
|
|
14
|
-
export
|
|
15
|
-
export
|
|
16
|
-
export
|
|
17
|
-
export
|
|
18
|
-
export
|
|
1
|
+
export * from './helpers/normalizeRecurringPeriod.js';
|
|
2
|
+
export * from './helpers/resolvePeriods.js';
|
|
3
|
+
export * from './schema/common.js';
|
|
4
|
+
export * from './schema/issue/bundle.js';
|
|
5
|
+
export * from './schema/issue/cause.js';
|
|
6
|
+
export * from './schema/issue/claim.js';
|
|
7
|
+
export * from './schema/issue/entity.js';
|
|
8
|
+
export * from './schema/issue/evidence.js';
|
|
9
|
+
export * from './schema/issue/facilityEffect.js';
|
|
10
|
+
export * from './schema/issue/id.js';
|
|
11
|
+
export * from './schema/issue/impactEvent.js';
|
|
12
|
+
export * from './schema/issue/issue.js';
|
|
13
|
+
export * from './schema/issue/issueType.js';
|
|
14
|
+
export * from './schema/issue/period.js';
|
|
15
|
+
export * from './schema/issue/serviceEffect.js';
|
|
16
|
+
export * from './schema/issue/serviceScope.js';
|
|
17
|
+
export * from './schema/Landmark.js';
|
|
18
|
+
export * from './schema/Line.js';
|
|
19
|
+
export * from './schema/Operator.js';
|
|
20
|
+
export * from './schema/Service.js';
|
|
21
|
+
export * from './schema/Station.js';
|
|
22
|
+
export * from './schema/Town.js';
|
|
19
23
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uCAAuC,CAAC;AACtD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kCAAkC,CAAC;AACjD,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,iCAAiC,CAAC;AAChD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Landmark.js","sourceRoot":"
|
|
1
|
+
{"version":3,"file":"Landmark.js","sourceRoot":"","sources":["../../src/schema/Landmark.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AACpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,IAAI,EAAE,kBAAkB;CACzB,CAAC,CAAC"}
|
package/dist/schema/Line.d.ts
CHANGED
|
@@ -23,6 +23,12 @@ export declare const LineOperatingHoursSchema: z.ZodObject<{
|
|
|
23
23
|
}, z.z.core.$strip>;
|
|
24
24
|
}, z.z.core.$strip>;
|
|
25
25
|
export type LineOperatingHours = z.infer<typeof LineOperatingHoursSchema>;
|
|
26
|
+
export declare const LineTypeSchema: z.ZodEnum<{
|
|
27
|
+
"mrt.high": "mrt.high";
|
|
28
|
+
"mrt.medium": "mrt.medium";
|
|
29
|
+
lrt: "lrt";
|
|
30
|
+
}>;
|
|
31
|
+
export type LineType = z.infer<typeof LineTypeSchema>;
|
|
26
32
|
export declare const LineSchema: z.ZodObject<{
|
|
27
33
|
id: z.ZodString;
|
|
28
34
|
name: z.ZodObject<{
|
package/dist/schema/Line.js
CHANGED
|
@@ -22,10 +22,11 @@ export const LineOperatingHoursSchema = z.object({
|
|
|
22
22
|
end: z.string(),
|
|
23
23
|
}),
|
|
24
24
|
});
|
|
25
|
+
export const LineTypeSchema = z.enum(['mrt.high', 'mrt.medium', 'lrt']);
|
|
25
26
|
export const LineSchema = z.object({
|
|
26
27
|
id: z.string(),
|
|
27
28
|
name: TranslationsSchema,
|
|
28
|
-
type:
|
|
29
|
+
type: LineTypeSchema,
|
|
29
30
|
color: z.string(),
|
|
30
31
|
startedAt: z.iso.date().nullable(),
|
|
31
32
|
serviceIds: z.array(z.string()),
|
package/dist/schema/Line.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Line.js","sourceRoot":"
|
|
1
|
+
{"version":3,"file":"Line.js","sourceRoot":"","sources":["../../src/schema/Line.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AACpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC,CAAC;AAGH;;;GAGG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC;QACjB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,QAAQ;QAC3B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;KAChB,CAAC;IACF,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC;QACjB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;QACjB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;KAChB,CAAC;CACH,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC;AAGxE,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,IAAI,EAAE,kBAAkB;IACxB,IAAI,EAAE,cAAc;IACpB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IAClC,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC/B,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC;IACtC,cAAc,EAAE,wBAAwB,CAAC,QAAQ,EAAE;CACpD,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Operator.js","sourceRoot":"
|
|
1
|
+
{"version":3,"file":"Operator.js","sourceRoot":"","sources":["../../src/schema/Operator.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AACpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,IAAI,EAAE,kBAAkB;IACxB,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE;IACvB,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;CACxB,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Service.js","sourceRoot":"
|
|
1
|
+
{"version":3,"file":"Service.js","sourceRoot":"","sources":["../../src/schema/Service.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AACpB,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEvE,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QACb,QAAQ,EAAE,CAAC,CAAC,KAAK,CACf,CAAC,CAAC,MAAM,CAAC;YACP,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;YACrB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;SACxB,CAAC,CACH;KACF,CAAC;IACF,cAAc,EAAE,oBAAoB;CACrC,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,IAAI,EAAE,kBAAkB;IACxB;;OAEG;IACH,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC;CAC1C,CAAC,CAAC"}
|
package/dist/schema/Station.d.ts
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
import z from 'zod';
|
|
2
|
+
export declare const StationStructureTypeSchema: z.ZodEnum<{
|
|
3
|
+
elevated: "elevated";
|
|
4
|
+
underground: "underground";
|
|
5
|
+
at_grade: "at_grade";
|
|
6
|
+
in_building: "in_building";
|
|
7
|
+
}>;
|
|
8
|
+
export type StationStructureType = z.infer<typeof StationStructureTypeSchema>;
|
|
2
9
|
export declare const StationSchema: z.ZodObject<{
|
|
3
10
|
id: z.ZodString;
|
|
4
11
|
name: z.ZodObject<{
|
package/dist/schema/Station.js
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import z from 'zod';
|
|
2
2
|
import { TranslationsSchema } from './common.js';
|
|
3
|
+
export const StationStructureTypeSchema = z.enum([
|
|
4
|
+
'elevated',
|
|
5
|
+
'underground',
|
|
6
|
+
'at_grade',
|
|
7
|
+
'in_building',
|
|
8
|
+
]);
|
|
3
9
|
export const StationSchema = z.object({
|
|
4
10
|
id: z.string(),
|
|
5
11
|
name: TranslationsSchema,
|
|
@@ -12,12 +18,7 @@ export const StationSchema = z.object({
|
|
|
12
18
|
code: z.string(),
|
|
13
19
|
startedAt: z.string(),
|
|
14
20
|
endedAt: z.string().nullable(),
|
|
15
|
-
structureType:
|
|
16
|
-
'elevated',
|
|
17
|
-
'underground',
|
|
18
|
-
'at_grade',
|
|
19
|
-
'in_building',
|
|
20
|
-
]),
|
|
21
|
+
structureType: StationStructureTypeSchema,
|
|
21
22
|
})),
|
|
22
23
|
landmarkIds: z.array(z.string()),
|
|
23
24
|
townId: z.string(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Station.js","sourceRoot":"
|
|
1
|
+
{"version":3,"file":"Station.js","sourceRoot":"","sources":["../../src/schema/Station.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AACpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,IAAI,CAAC;IAC/C,UAAU;IACV,aAAa;IACb,UAAU;IACV,aAAa;CACd,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,IAAI,EAAE,kBAAkB;IACxB,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC;QACZ,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;QACpB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;KACtB,CAAC;IACF,YAAY,EAAE,CAAC,CAAC,KAAK,CACnB,CAAC,CAAC,MAAM,CAAC;QACP,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;QAClB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;QACrB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC9B,aAAa,EAAE,0BAA0B;KAC1C,CAAC,CACH;IACD,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAChC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;CACnB,CAAC,CAAC"}
|
package/dist/schema/Town.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Town.js","sourceRoot":"
|
|
1
|
+
{"version":3,"file":"Town.js","sourceRoot":"","sources":["../../src/schema/Town.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AACpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,IAAI,EAAE,kBAAkB;CACzB,CAAC,CAAC"}
|
package/dist/schema/common.d.ts
CHANGED
|
@@ -11,6 +11,10 @@ export declare const TranslationsSchema: z.ZodObject<{
|
|
|
11
11
|
ta: z.ZodNullable<z.ZodString>;
|
|
12
12
|
}, z.core.$strip>;
|
|
13
13
|
export type Translations = z.infer<typeof TranslationsSchema>;
|
|
14
|
+
export declare const TranslationsMetaSchema: z.ZodObject<{
|
|
15
|
+
source: z.ZodString;
|
|
16
|
+
}, z.core.$strip>;
|
|
17
|
+
export type TranslationsMeta = z.infer<typeof TranslationsMetaSchema>;
|
|
14
18
|
export declare const OperatingHoursSchema: z.ZodObject<{
|
|
15
19
|
weekdays: z.ZodObject<{
|
|
16
20
|
start: z.ZodISOTime;
|
package/dist/schema/common.js
CHANGED
|
@@ -10,6 +10,9 @@ export const TranslationsSchema = z.object({
|
|
|
10
10
|
ms: z.string().nullable(),
|
|
11
11
|
ta: z.string().nullable(),
|
|
12
12
|
});
|
|
13
|
+
export const TranslationsMetaSchema = z.object({
|
|
14
|
+
source: z.string(),
|
|
15
|
+
});
|
|
13
16
|
export const OperatingHoursSchema = z.object({
|
|
14
17
|
weekdays: z.object({
|
|
15
18
|
start: z.iso.time(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.js","sourceRoot":"
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/schema/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACzB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC1B,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;CACnB,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC;QACjB,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE;QACnB,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE;KAClB,CAAC;IACF,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC;QACjB,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE;QACnB,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE;KAClB,CAAC;CACH,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bundle.js","sourceRoot":"
|
|
1
|
+
{"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../../src/schema/issue/bundle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,KAAK,EAAE,WAAW;IAClB,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC;IACjC,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC;IACxC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;CAC1E,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cause.js","sourceRoot":"
|
|
1
|
+
{"version":3,"file":"cause.js","sourceRoot":"","sources":["../../../src/schema/issue/cause.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AAEpB,2CAA2C;AAC3C,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,IAAI,CAAC;IAC1C,cAAc;IACd,aAAa;IACb,aAAa;IACb,aAAa;IACb,eAAe;IACf,UAAU;IACV,SAAS;IACT,oBAAoB;IACpB,qBAAqB;IACrB,OAAO;CACR,CAAC,CAAC;AAGH,4CAA4C;AAC5C,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC,CAAC;AAG/E,sCAAsC;AACtC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC;IACrC,iBAAiB;IACjB,kBAAkB;IAClB,wBAAwB;IACxB,oBAAoB;CACrB,CAAC,CAAC;AAGH,qDAAqD;AACrD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC;IACxC,qBAAqB;IACrB,sBAAsB;IACtB,gBAAgB;CACjB,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claim.js","sourceRoot":"
|
|
1
|
+
{"version":3,"file":"claim.js","sourceRoot":"","sources":["../../../src/schema/issue/claim.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AACpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;AAG9E,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;IAC/D,iBAAiB;IACjB,qBAAqB;IACrB,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC;QAC7B,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;KAC1C,CAAC;IACF,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;QAC3B,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;KACxC,CAAC;CACH,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,MAAM,EAAE,oBAAoB;IAC5B,MAAM,EAAE,CAAC;SACN,MAAM,CAAC;QACN,OAAO,EAAE,mBAAmB,CAAC,QAAQ,EAAE;QACvC,QAAQ,EAAE,oBAAoB,CAAC,QAAQ,EAAE;KAC1C,CAAC;SACD,QAAQ,EAAE;IACb,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,QAAQ,EAAE;KAChD,CAAC;IACF,YAAY,EAAE,uBAAuB,CAAC,QAAQ,EAAE;IAChD,SAAS,EAAE,oBAAoB,CAAC,QAAQ,EAAE;IAC1C,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,QAAQ,EAAE;CAC/C,CAAC,CAAC"}
|
|
@@ -4,6 +4,12 @@ export declare const AffectedEntityServiceSchema: z.ZodObject<{
|
|
|
4
4
|
serviceId: z.ZodString;
|
|
5
5
|
}, z.z.core.$strip>;
|
|
6
6
|
export type AffectedEntityService = z.infer<typeof AffectedEntityServiceSchema>;
|
|
7
|
+
export declare const AffectedEntityFacilityKindSchema: z.ZodEnum<{
|
|
8
|
+
lift: "lift";
|
|
9
|
+
escalator: "escalator";
|
|
10
|
+
"screen-door": "screen-door";
|
|
11
|
+
}>;
|
|
12
|
+
export type AffectedEntityFacilityKind = z.infer<typeof AffectedEntityFacilityKindSchema>;
|
|
7
13
|
export declare const AffectedEntityFacilitySchema: z.ZodObject<{
|
|
8
14
|
type: z.ZodLiteral<"facility">;
|
|
9
15
|
stationId: z.ZodString;
|
|
@@ -7,10 +7,15 @@ export const AffectedEntityServiceSchema = z.object({
|
|
|
7
7
|
type: z.literal('service'),
|
|
8
8
|
serviceId: z.string(),
|
|
9
9
|
});
|
|
10
|
+
export const AffectedEntityFacilityKindSchema = z.enum([
|
|
11
|
+
'lift',
|
|
12
|
+
'escalator',
|
|
13
|
+
'screen-door',
|
|
14
|
+
]);
|
|
10
15
|
export const AffectedEntityFacilitySchema = z.object({
|
|
11
16
|
type: z.literal('facility'),
|
|
12
17
|
stationId: z.string(),
|
|
13
|
-
kind:
|
|
18
|
+
kind: AffectedEntityFacilityKindSchema,
|
|
14
19
|
});
|
|
15
20
|
export const AffectedEntitySchema = z.discriminatedUnion('type', [
|
|
16
21
|
AffectedEntityServiceSchema,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity.js","sourceRoot":"
|
|
1
|
+
{"version":3,"file":"entity.js","sourceRoot":"","sources":["../../../src/schema/issue/entity.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AACpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IAClD,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;IAC1B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;CACtB,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,CAAC,IAAI,CAAC;IACrD,MAAM;IACN,WAAW;IACX,aAAa;CACd,CAAC,CAAC;AAKH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC,MAAM,CAAC;IACnD,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;IAC3B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,IAAI,EAAE,gCAAgC;CACvC,CAAC,CAAC;AAKH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;IAC/D,2BAA2B;IAC3B,4BAA4B;CAC7B,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC;IAC1C,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC;IAC9B,MAAM,EAAE,oBAAoB;IAC5B,OAAO,EAAE,CAAC;SACP,MAAM,CAAC;QACN,OAAO,EAAE,mBAAmB,CAAC,QAAQ,EAAE;QACvC,QAAQ,EAAE,oBAAoB,CAAC,QAAQ,EAAE;KAC1C,CAAC;SACD,QAAQ,EAAE;CACd,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,gCAAgC,GAAG,uBAAuB,CAAC,MAAM,CAAC;IAC7E,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KACjC,CAAC;CACH,CAAC,CAAC"}
|
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
import z from 'zod';
|
|
2
|
+
export declare const EvidenceTypeSchema: z.ZodEnum<{
|
|
3
|
+
"official-statement": "official-statement";
|
|
4
|
+
"public.report": "public.report";
|
|
5
|
+
"media.report": "media.report";
|
|
6
|
+
}>;
|
|
7
|
+
export type EvidenceType = z.infer<typeof EvidenceTypeSchema>;
|
|
2
8
|
export declare const EvidenceRenderSchema: z.ZodObject<{
|
|
3
9
|
text: z.ZodObject<{
|
|
4
10
|
'en-SG': z.ZodString;
|