perttool 0.2.0 → 0.3.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/CHANGELOG.md +47 -1
- package/README.md +60 -27
- package/dist/analysis/temporal-deadline.d.ts +59 -0
- package/dist/analysis/temporal-deadline.d.ts.map +1 -0
- package/dist/analysis/temporal-deadline.js +387 -0
- package/dist/analysis/temporal-deadline.js.map +1 -0
- package/dist/analysis/temporal-precedence.d.ts +45 -0
- package/dist/analysis/temporal-precedence.d.ts.map +1 -0
- package/dist/analysis/temporal-precedence.js +123 -0
- package/dist/analysis/temporal-precedence.js.map +1 -0
- package/dist/analysis/temporal-resource.d.ts +66 -0
- package/dist/analysis/temporal-resource.d.ts.map +1 -0
- package/dist/analysis/temporal-resource.js +292 -0
- package/dist/analysis/temporal-resource.js.map +1 -0
- package/dist/application/check.d.ts +16 -0
- package/dist/application/check.d.ts.map +1 -1
- package/dist/application/check.js +51 -0
- package/dist/application/check.js.map +1 -1
- package/dist/application/contract4.d.ts +17 -0
- package/dist/application/contract4.d.ts.map +1 -0
- package/dist/application/contract4.js +27 -0
- package/dist/application/contract4.js.map +1 -0
- package/dist/application/init.d.ts +2 -1
- package/dist/application/init.d.ts.map +1 -1
- package/dist/application/init.js +11 -2
- package/dist/application/init.js.map +1 -1
- package/dist/application/mutate.d.ts +19 -0
- package/dist/application/mutate.d.ts.map +1 -1
- package/dist/application/mutate.js +34 -16
- package/dist/application/mutate.js.map +1 -1
- package/dist/application/next.d.ts +2 -0
- package/dist/application/next.d.ts.map +1 -1
- package/dist/application/next.js +7 -1
- package/dist/application/next.js.map +1 -1
- package/dist/application/project.d.ts +3 -1
- package/dist/application/project.d.ts.map +1 -1
- package/dist/application/project.js +2 -1
- package/dist/application/project.js.map +1 -1
- package/dist/application/target-check.d.ts +34 -0
- package/dist/application/target-check.d.ts.map +1 -0
- package/dist/application/target-check.js +90 -0
- package/dist/application/target-check.js.map +1 -0
- package/dist/application/target-grammar-boundary.d.ts +22 -0
- package/dist/application/target-grammar-boundary.d.ts.map +1 -0
- package/dist/application/target-grammar-boundary.js +91 -0
- package/dist/application/target-grammar-boundary.js.map +1 -0
- package/dist/application/target-mutate.d.ts +8 -0
- package/dist/application/target-mutate.d.ts.map +1 -0
- package/dist/application/target-mutate.js +56 -0
- package/dist/application/target-mutate.js.map +1 -0
- package/dist/application/target-project.d.ts +28 -0
- package/dist/application/target-project.d.ts.map +1 -0
- package/dist/application/target-project.js +60 -0
- package/dist/application/target-project.js.map +1 -0
- package/dist/application/target-temporal-analysis.d.ts +138 -0
- package/dist/application/target-temporal-analysis.d.ts.map +1 -0
- package/dist/application/target-temporal-analysis.js +409 -0
- package/dist/application/target-temporal-analysis.js.map +1 -0
- package/dist/application/target-temporal-input.d.ts +86 -0
- package/dist/application/target-temporal-input.d.ts.map +1 -0
- package/dist/application/target-temporal-input.js +238 -0
- package/dist/application/target-temporal-input.js.map +1 -0
- package/dist/application/target-unit-migration-candidate.d.ts +60 -0
- package/dist/application/target-unit-migration-candidate.d.ts.map +1 -0
- package/dist/application/target-unit-migration-candidate.js +290 -0
- package/dist/application/target-unit-migration-candidate.js.map +1 -0
- package/dist/application/target-unit-migration-request.d.ts +35 -0
- package/dist/application/target-unit-migration-request.d.ts.map +1 -0
- package/dist/application/target-unit-migration-request.js +68 -0
- package/dist/application/target-unit-migration-request.js.map +1 -0
- package/dist/application/target-unit-migration-result.d.ts +66 -0
- package/dist/application/target-unit-migration-result.d.ts.map +1 -0
- package/dist/application/target-unit-migration-result.js +86 -0
- package/dist/application/target-unit-migration-result.js.map +1 -0
- package/dist/application/unit-migration.d.ts +13 -0
- package/dist/application/unit-migration.d.ts.map +1 -0
- package/dist/application/unit-migration.js +9 -0
- package/dist/application/unit-migration.js.map +1 -0
- package/dist/cli.js +264 -26
- package/dist/cli.js.map +1 -1
- package/dist/command/discovery.d.ts +3 -3
- package/dist/command/discovery.d.ts.map +1 -1
- package/dist/command/discovery.js +149 -22
- package/dist/command/discovery.js.map +1 -1
- package/dist/command/registry.d.ts +1 -1
- package/dist/command/registry.d.ts.map +1 -1
- package/dist/command/registry.js +14 -1
- package/dist/command/registry.js.map +1 -1
- package/dist/command/usage.js +3 -3
- package/dist/formatter/source-formatter.d.ts +12 -0
- package/dist/formatter/source-formatter.d.ts.map +1 -1
- package/dist/formatter/source-formatter.js +48 -6
- package/dist/formatter/source-formatter.js.map +1 -1
- package/dist/formatter/target-source-formatter.d.ts +8 -0
- package/dist/formatter/target-source-formatter.d.ts.map +1 -0
- package/dist/formatter/target-source-formatter.js +36 -0
- package/dist/formatter/target-source-formatter.js.map +1 -0
- package/dist/help/guide.d.ts +1 -1
- package/dist/help/guide.js +1 -1
- package/dist/help/registry.d.ts.map +1 -1
- package/dist/help/registry.js +124 -13
- package/dist/help/registry.js.map +1 -1
- package/dist/index.d.ts +9 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/io/safe-write.d.ts +7 -0
- package/dist/io/safe-write.d.ts.map +1 -1
- package/dist/io/safe-write.js +19 -10
- package/dist/io/safe-write.js.map +1 -1
- package/dist/io/target-safe-write.d.ts +7 -0
- package/dist/io/target-safe-write.d.ts.map +1 -0
- package/dist/io/target-safe-write.js +33 -0
- package/dist/io/target-safe-write.js.map +1 -0
- package/dist/migration/conversion.d.ts +40 -0
- package/dist/migration/conversion.d.ts.map +1 -0
- package/dist/migration/conversion.js +106 -0
- package/dist/migration/conversion.js.map +1 -0
- package/dist/migration/grammar-boundary.d.ts +20 -0
- package/dist/migration/grammar-boundary.d.ts.map +1 -0
- package/dist/migration/grammar-boundary.js +92 -0
- package/dist/migration/grammar-boundary.js.map +1 -0
- package/dist/migration/request.d.ts +79 -0
- package/dist/migration/request.d.ts.map +1 -0
- package/dist/migration/request.js +308 -0
- package/dist/migration/request.js.map +1 -0
- package/dist/model/calendar-arithmetic.d.ts +46 -0
- package/dist/model/calendar-arithmetic.d.ts.map +1 -0
- package/dist/model/calendar-arithmetic.js +236 -0
- package/dist/model/calendar-arithmetic.js.map +1 -0
- package/dist/model/calendar.d.ts +22 -0
- package/dist/model/calendar.d.ts.map +1 -0
- package/dist/model/calendar.js +83 -0
- package/dist/model/calendar.js.map +1 -0
- package/dist/model/declaration-fields.d.ts +15 -0
- package/dist/model/declaration-fields.d.ts.map +1 -0
- package/dist/model/declaration-fields.js +54 -0
- package/dist/model/declaration-fields.js.map +1 -0
- package/dist/model/exact-duration-source.d.ts +10 -0
- package/dist/model/exact-duration-source.d.ts.map +1 -0
- package/dist/model/exact-duration-source.js +69 -0
- package/dist/model/exact-duration-source.js.map +1 -0
- package/dist/model/rational.d.ts +2 -2
- package/dist/model/rational.d.ts.map +1 -1
- package/dist/model/rational.js +3 -1
- package/dist/model/rational.js.map +1 -1
- package/dist/model/syntax.d.ts +9 -2
- package/dist/model/syntax.d.ts.map +1 -1
- package/dist/model/syntax.js +20 -4
- package/dist/model/syntax.js.map +1 -1
- package/dist/model/target-calendar.d.ts +25 -0
- package/dist/model/target-calendar.d.ts.map +1 -0
- package/dist/model/target-calendar.js +56 -0
- package/dist/model/target-calendar.js.map +1 -0
- package/dist/mutation/advance.d.ts.map +1 -1
- package/dist/mutation/advance.js +21 -4
- package/dist/mutation/advance.js.map +1 -1
- package/dist/mutation/milestone.d.ts +10 -1
- package/dist/mutation/milestone.d.ts.map +1 -1
- package/dist/mutation/milestone.js +77 -21
- package/dist/mutation/milestone.js.map +1 -1
- package/dist/mutation/project.d.ts +7 -1
- package/dist/mutation/project.d.ts.map +1 -1
- package/dist/mutation/project.js +18 -5
- package/dist/mutation/project.js.map +1 -1
- package/dist/mutation/target-types.d.ts +42 -0
- package/dist/mutation/target-types.d.ts.map +1 -0
- package/dist/mutation/target-types.js +2 -0
- package/dist/mutation/target-types.js.map +1 -0
- package/dist/mutation/task.d.ts +12 -1
- package/dist/mutation/task.d.ts.map +1 -1
- package/dist/mutation/task.js +108 -49
- package/dist/mutation/task.js.map +1 -1
- package/dist/mutation/types.d.ts +8 -2
- package/dist/mutation/types.d.ts.map +1 -1
- package/dist/parser/document-parser.d.ts +14 -0
- package/dist/parser/document-parser.d.ts.map +1 -1
- package/dist/parser/document-parser.js +142 -38
- package/dist/parser/document-parser.js.map +1 -1
- package/dist/recommendation/override-types.d.ts +2 -2
- package/dist/recommendation/override.d.ts +2 -2
- package/dist/recommendation/override.d.ts.map +1 -1
- package/dist/recommendation/override.js +49 -12
- package/dist/recommendation/override.js.map +1 -1
- package/dist/semantic/target-validator.d.ts +36 -0
- package/dist/semantic/target-validator.d.ts.map +1 -0
- package/dist/semantic/target-validator.js +87 -0
- package/dist/semantic/target-validator.js.map +1 -0
- package/dist/semantic/validator.d.ts +2 -0
- package/dist/semantic/validator.d.ts.map +1 -1
- package/dist/semantic/validator.js +50 -5
- package/dist/semantic/validator.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import type { SourceSpan } from "../model/diagnostics.js";
|
|
2
|
+
import type { Rational } from "../model/rational.js";
|
|
3
|
+
import type { DocumentNode } from "../model/syntax.js";
|
|
4
|
+
import type { DurationUnit, Velocity } from "../model/units.js";
|
|
5
|
+
import type { MigrationGrammarVersion, MigrationVelocityDisposition } from "./grammar-boundary.js";
|
|
6
|
+
export declare const UNIT_MIGRATION_IDENTITY: Readonly<{
|
|
7
|
+
readonly id: "perttool.unit-migration";
|
|
8
|
+
readonly version: 2;
|
|
9
|
+
}>;
|
|
10
|
+
export type UnitMigrationCause = "invalid_original" | "invalid_replacement_velocity" | "missing_velocity" | "unsupported_direction" | "velocity_period_mismatch" | "same_unit_velocity_change" | "unsupported_duration_field" | "invalid_candidate";
|
|
11
|
+
export type UnitMigrationDiagnosticCode = "PTMIG-401" | "PTMIG-402" | "PTMIG-403" | "PTMIG-404" | "PTMIG-405" | "PTMIG-406" | "PTMIG-407" | "PTMIG-409";
|
|
12
|
+
export declare const UNIT_MIGRATION_DIAGNOSTIC_CODES: Readonly<Record<UnitMigrationCause, UnitMigrationDiagnosticCode>>;
|
|
13
|
+
export interface UnitMigrationRequest {
|
|
14
|
+
readonly targetUnit: DurationUnit;
|
|
15
|
+
readonly replacementVelocity?: string | null;
|
|
16
|
+
}
|
|
17
|
+
export interface NormalizedUnitMigrationRequest {
|
|
18
|
+
readonly targetUnit: DurationUnit;
|
|
19
|
+
readonly replacementVelocity: string | null;
|
|
20
|
+
}
|
|
21
|
+
export interface UnitMigrationUnavailableCause {
|
|
22
|
+
readonly cause: UnitMigrationCause;
|
|
23
|
+
readonly diagnosticCode: UnitMigrationDiagnosticCode;
|
|
24
|
+
readonly fieldPaths: readonly string[];
|
|
25
|
+
}
|
|
26
|
+
export interface ExactMigrationVelocity extends Velocity {
|
|
27
|
+
readonly inputToken: string;
|
|
28
|
+
}
|
|
29
|
+
export interface UnitMigrationDurationField {
|
|
30
|
+
readonly entityKind: "project" | "task";
|
|
31
|
+
readonly entityId: string;
|
|
32
|
+
readonly fieldPath: string;
|
|
33
|
+
readonly sourceUnit: DurationUnit;
|
|
34
|
+
readonly sourceToken: string;
|
|
35
|
+
readonly sourceValue: Rational;
|
|
36
|
+
readonly valueSpan: SourceSpan;
|
|
37
|
+
}
|
|
38
|
+
export interface UnitMigrationPreservedTemporalField {
|
|
39
|
+
readonly entityKind: "project" | "milestone" | "task";
|
|
40
|
+
readonly entityId: string;
|
|
41
|
+
readonly fieldPath: string;
|
|
42
|
+
readonly sourceToken: string;
|
|
43
|
+
readonly valueSpan: SourceSpan;
|
|
44
|
+
}
|
|
45
|
+
export interface UnitMigrationValidatedSource {
|
|
46
|
+
readonly grammarVersion: MigrationGrammarVersion;
|
|
47
|
+
readonly document: DocumentNode;
|
|
48
|
+
}
|
|
49
|
+
export interface PreparedUnitMigrationRequest {
|
|
50
|
+
readonly ok: true;
|
|
51
|
+
readonly unitMigration: typeof UNIT_MIGRATION_IDENTITY;
|
|
52
|
+
readonly sourceGrammarVersion: MigrationGrammarVersion;
|
|
53
|
+
readonly sourceUnit: DurationUnit;
|
|
54
|
+
readonly targetUnit: DurationUnit;
|
|
55
|
+
readonly changed: boolean;
|
|
56
|
+
readonly effectiveVelocity: ExactMigrationVelocity | null;
|
|
57
|
+
readonly velocityDisposition: MigrationVelocityDisposition | null;
|
|
58
|
+
readonly durationInventory: readonly UnitMigrationDurationField[];
|
|
59
|
+
readonly preservedTemporalFields: readonly UnitMigrationPreservedTemporalField[];
|
|
60
|
+
readonly unavailableCauses: readonly UnitMigrationUnavailableCause[];
|
|
61
|
+
}
|
|
62
|
+
export interface RejectedUnitMigrationRequest {
|
|
63
|
+
readonly ok: false;
|
|
64
|
+
readonly unitMigration: typeof UNIT_MIGRATION_IDENTITY;
|
|
65
|
+
readonly sourceGrammarVersion: MigrationGrammarVersion;
|
|
66
|
+
readonly sourceUnit: DurationUnit;
|
|
67
|
+
readonly targetUnit: DurationUnit;
|
|
68
|
+
readonly changed: false;
|
|
69
|
+
readonly effectiveVelocity: null;
|
|
70
|
+
readonly velocityDisposition: null;
|
|
71
|
+
readonly durationInventory: readonly UnitMigrationDurationField[];
|
|
72
|
+
readonly preservedTemporalFields: readonly UnitMigrationPreservedTemporalField[];
|
|
73
|
+
readonly unavailableCauses: readonly UnitMigrationUnavailableCause[];
|
|
74
|
+
}
|
|
75
|
+
export type UnitMigrationRequestPreparation = PreparedUnitMigrationRequest | RejectedUnitMigrationRequest;
|
|
76
|
+
export declare function normalizeUnitMigrationRequest(request: UnitMigrationRequest): NormalizedUnitMigrationRequest;
|
|
77
|
+
export declare function unitMigrationCause(kind: UnitMigrationCause, fieldPaths?: readonly string[]): UnitMigrationUnavailableCause;
|
|
78
|
+
export declare function prepareUnitMigrationRequest(source: UnitMigrationValidatedSource, request: NormalizedUnitMigrationRequest): UnitMigrationRequestPreparation;
|
|
79
|
+
//# sourceMappingURL=request.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/migration/request.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
import { compare, divide, rational } from "../model/rational.js";
|
|
2
|
+
import { fieldNamed } from "../model/syntax.js";
|
|
3
|
+
export const UNIT_MIGRATION_IDENTITY = Object.freeze({
|
|
4
|
+
id: "perttool.unit-migration",
|
|
5
|
+
version: 2,
|
|
6
|
+
});
|
|
7
|
+
export const UNIT_MIGRATION_DIAGNOSTIC_CODES = Object.freeze({
|
|
8
|
+
invalid_original: "PTMIG-401",
|
|
9
|
+
invalid_replacement_velocity: "PTMIG-402",
|
|
10
|
+
missing_velocity: "PTMIG-403",
|
|
11
|
+
unsupported_direction: "PTMIG-404",
|
|
12
|
+
velocity_period_mismatch: "PTMIG-405",
|
|
13
|
+
same_unit_velocity_change: "PTMIG-406",
|
|
14
|
+
unsupported_duration_field: "PTMIG-407",
|
|
15
|
+
invalid_candidate: "PTMIG-409",
|
|
16
|
+
});
|
|
17
|
+
const requestKeys = new Set(["targetUnit", "replacementVelocity"]);
|
|
18
|
+
const durationUnits = new Set(["day", "hour", "point"]);
|
|
19
|
+
function isRecord(value) {
|
|
20
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
21
|
+
}
|
|
22
|
+
export function normalizeUnitMigrationRequest(request) {
|
|
23
|
+
if (!isRecord(request)) {
|
|
24
|
+
throw new TypeError("unit migration request must be an object");
|
|
25
|
+
}
|
|
26
|
+
for (const key of Object.keys(request)) {
|
|
27
|
+
if (!requestKeys.has(key)) {
|
|
28
|
+
throw new TypeError(`unit migration request field ${key} is unsupported`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
if (!durationUnits.has(request.targetUnit)) {
|
|
32
|
+
throw new TypeError("unit migration targetUnit must be day, hour, or point");
|
|
33
|
+
}
|
|
34
|
+
const replacementVelocity = request.replacementVelocity ?? null;
|
|
35
|
+
if (replacementVelocity !== null &&
|
|
36
|
+
typeof replacementVelocity !== "string") {
|
|
37
|
+
throw new TypeError("unit migration replacementVelocity must be a string or null");
|
|
38
|
+
}
|
|
39
|
+
return Object.freeze({
|
|
40
|
+
targetUnit: request.targetUnit,
|
|
41
|
+
replacementVelocity,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
function unitFromSuffix(suffix) {
|
|
45
|
+
return suffix === "d" ? "day" : suffix === "h" ? "hour" : "point";
|
|
46
|
+
}
|
|
47
|
+
function exactDurationValue(value) {
|
|
48
|
+
if (!isRecord(value))
|
|
49
|
+
return false;
|
|
50
|
+
if (value["suffix"] !== "d" && value["suffix"] !== "h" && value["suffix"] !== "p") {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
return ((typeof value["digits"] === "bigint" &&
|
|
54
|
+
typeof value["scale"] === "number") ||
|
|
55
|
+
(typeof value["numerator"] === "bigint" &&
|
|
56
|
+
typeof value["denominator"] === "bigint"));
|
|
57
|
+
}
|
|
58
|
+
function exactDurationRational(value) {
|
|
59
|
+
return "numerator" in value
|
|
60
|
+
? rational(value.numerator, value.denominator)
|
|
61
|
+
: rational(value.digits, 10n ** BigInt(value.scale));
|
|
62
|
+
}
|
|
63
|
+
function decimalRational(source) {
|
|
64
|
+
if (!/^[0-9]+(?:\.[0-9]+)?$/.test(source))
|
|
65
|
+
return null;
|
|
66
|
+
const [whole, fraction = ""] = source.split(".");
|
|
67
|
+
if (whole === undefined)
|
|
68
|
+
return null;
|
|
69
|
+
return rational(BigInt(`${whole}${fraction}`), 10n ** BigInt(fraction.length));
|
|
70
|
+
}
|
|
71
|
+
function parseReplacementVelocity(source) {
|
|
72
|
+
const match = /^([0-9]+(?:\.[0-9]+)?)p\/([0-9]+(?:\.[0-9]+)?)([dh])$/.exec(source);
|
|
73
|
+
if (match === null)
|
|
74
|
+
return null;
|
|
75
|
+
const points = decimalRational(match[1]);
|
|
76
|
+
const period = decimalRational(match[2]);
|
|
77
|
+
if (points === null ||
|
|
78
|
+
period === null ||
|
|
79
|
+
points.numerator <= 0n ||
|
|
80
|
+
period.numerator <= 0n) {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
return Object.freeze({
|
|
84
|
+
points,
|
|
85
|
+
period,
|
|
86
|
+
periodUnit: match[3] === "d" ? "day" : "hour",
|
|
87
|
+
inputToken: source,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
function declaredVelocity(value) {
|
|
91
|
+
if (value === undefined)
|
|
92
|
+
return null;
|
|
93
|
+
return Object.freeze({
|
|
94
|
+
points: exactDurationRational(value.points),
|
|
95
|
+
period: exactDurationRational(value.period),
|
|
96
|
+
periodUnit: value.period.suffix === "d" ? "day" : "hour",
|
|
97
|
+
inputToken: value.text,
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
function velocitySemanticallyEqual(left, right) {
|
|
101
|
+
return (left.periodUnit === right.periodUnit &&
|
|
102
|
+
compare(divide(left.points, left.period), divide(right.points, right.period)) === 0);
|
|
103
|
+
}
|
|
104
|
+
function cause(kind, fieldPaths) {
|
|
105
|
+
return Object.freeze({
|
|
106
|
+
cause: kind,
|
|
107
|
+
diagnosticCode: UNIT_MIGRATION_DIAGNOSTIC_CODES[kind],
|
|
108
|
+
fieldPaths: Object.freeze([...fieldPaths]),
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
export function unitMigrationCause(kind, fieldPaths = []) {
|
|
112
|
+
return cause(kind, fieldPaths);
|
|
113
|
+
}
|
|
114
|
+
function projectFrom(document) {
|
|
115
|
+
const project = document.declarations.find((declaration) => declaration.kind === "project");
|
|
116
|
+
if (project === undefined) {
|
|
117
|
+
throw new Error("validated migration source has no project declaration");
|
|
118
|
+
}
|
|
119
|
+
return project;
|
|
120
|
+
}
|
|
121
|
+
function sourceDurationUnit(document) {
|
|
122
|
+
const field = fieldNamed(projectFrom(document), "duration_unit");
|
|
123
|
+
if (field?.value !== "day" &&
|
|
124
|
+
field?.value !== "hour" &&
|
|
125
|
+
field?.value !== "point") {
|
|
126
|
+
throw new Error("validated migration source has no duration unit");
|
|
127
|
+
}
|
|
128
|
+
return field.value;
|
|
129
|
+
}
|
|
130
|
+
function scalarFields(field) {
|
|
131
|
+
return field.children ?? [field];
|
|
132
|
+
}
|
|
133
|
+
function durationFieldPath(declarationKind, declarationId, field, parent) {
|
|
134
|
+
if (declarationKind === "project" &&
|
|
135
|
+
parent === field &&
|
|
136
|
+
(field.name === "critical_epsilon" || field.name === "target_duration")) {
|
|
137
|
+
return `project.${field.name}`;
|
|
138
|
+
}
|
|
139
|
+
if (declarationKind !== "task")
|
|
140
|
+
return null;
|
|
141
|
+
if (parent === field && field.name === "duration") {
|
|
142
|
+
return `task.${declarationId}.duration`;
|
|
143
|
+
}
|
|
144
|
+
if (parent.name === "estimate" &&
|
|
145
|
+
(field.name === "optimistic" ||
|
|
146
|
+
field.name === "most_likely" ||
|
|
147
|
+
field.name === "pessimistic")) {
|
|
148
|
+
return `task.${declarationId}.estimate.${field.name}`;
|
|
149
|
+
}
|
|
150
|
+
return null;
|
|
151
|
+
}
|
|
152
|
+
function inventoryDurationFields(source, sourceUnit) {
|
|
153
|
+
const fields = [];
|
|
154
|
+
const unsupportedFieldPaths = [];
|
|
155
|
+
for (const declaration of source.document.declarations) {
|
|
156
|
+
for (const parent of declaration.fields) {
|
|
157
|
+
for (const field of scalarFields(parent)) {
|
|
158
|
+
if (!exactDurationValue(field.value))
|
|
159
|
+
continue;
|
|
160
|
+
const fieldPath = durationFieldPath(declaration.kind, declaration.id, field, parent);
|
|
161
|
+
if (fieldPath === null) {
|
|
162
|
+
unsupportedFieldPaths.push(`${declaration.kind}.${declaration.id}.${parent.name}${parent === field ? "" : `.${field.name}`}`);
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
const valueUnit = unitFromSuffix(field.value.suffix);
|
|
166
|
+
if (valueUnit !== sourceUnit) {
|
|
167
|
+
throw new Error("validated migration source contains a mismatched Duration unit");
|
|
168
|
+
}
|
|
169
|
+
fields.push(Object.freeze({
|
|
170
|
+
entityKind: declaration.kind,
|
|
171
|
+
entityId: declaration.id,
|
|
172
|
+
fieldPath,
|
|
173
|
+
sourceUnit,
|
|
174
|
+
sourceToken: field.rawValue,
|
|
175
|
+
sourceValue: exactDurationRational(field.value),
|
|
176
|
+
valueSpan: field.valueSpan,
|
|
177
|
+
}));
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
return unsupportedFieldPaths.length === 0
|
|
182
|
+
? { ok: true, fields: Object.freeze(fields) }
|
|
183
|
+
: {
|
|
184
|
+
ok: false,
|
|
185
|
+
unsupportedFieldPaths: Object.freeze(unsupportedFieldPaths),
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
function preservedTemporalFields(document) {
|
|
189
|
+
const fields = [];
|
|
190
|
+
for (const declaration of document.declarations) {
|
|
191
|
+
for (const field of declaration.fields) {
|
|
192
|
+
const fieldPath = declaration.kind === "project" && field.name === "as_of"
|
|
193
|
+
? "project.as_of"
|
|
194
|
+
: declaration.kind === "milestone" && field.name === "deadline"
|
|
195
|
+
? `milestone.${declaration.id}.deadline`
|
|
196
|
+
: declaration.kind === "task" && field.name === "not_before"
|
|
197
|
+
? `task.${declaration.id}.not_before`
|
|
198
|
+
: declaration.kind === "task" && field.name === "deadline"
|
|
199
|
+
? `task.${declaration.id}.deadline`
|
|
200
|
+
: null;
|
|
201
|
+
if (fieldPath === null)
|
|
202
|
+
continue;
|
|
203
|
+
fields.push(Object.freeze({
|
|
204
|
+
entityKind: declaration.kind,
|
|
205
|
+
entityId: declaration.id,
|
|
206
|
+
fieldPath,
|
|
207
|
+
sourceToken: field.rawValue,
|
|
208
|
+
valueSpan: field.valueSpan,
|
|
209
|
+
}));
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
return Object.freeze(fields);
|
|
213
|
+
}
|
|
214
|
+
function reject(source, sourceUnit, targetUnit, unavailableCause) {
|
|
215
|
+
return Object.freeze({
|
|
216
|
+
ok: false,
|
|
217
|
+
unitMigration: UNIT_MIGRATION_IDENTITY,
|
|
218
|
+
sourceGrammarVersion: source.grammarVersion,
|
|
219
|
+
sourceUnit,
|
|
220
|
+
targetUnit,
|
|
221
|
+
changed: false,
|
|
222
|
+
effectiveVelocity: null,
|
|
223
|
+
velocityDisposition: null,
|
|
224
|
+
durationInventory: Object.freeze([]),
|
|
225
|
+
preservedTemporalFields: Object.freeze([]),
|
|
226
|
+
unavailableCauses: Object.freeze([unavailableCause]),
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
export function prepareUnitMigrationRequest(source, request) {
|
|
230
|
+
const sourceUnit = sourceDurationUnit(source.document);
|
|
231
|
+
const targetUnit = request.targetUnit;
|
|
232
|
+
const project = projectFrom(source.document);
|
|
233
|
+
const replacement = request.replacementVelocity === null
|
|
234
|
+
? null
|
|
235
|
+
: parseReplacementVelocity(request.replacementVelocity);
|
|
236
|
+
if (request.replacementVelocity !== null && replacement === null) {
|
|
237
|
+
return reject(source, sourceUnit, targetUnit, cause("invalid_replacement_velocity", [
|
|
238
|
+
"request.replacement_velocity",
|
|
239
|
+
]));
|
|
240
|
+
}
|
|
241
|
+
if (sourceUnit === targetUnit && replacement !== null) {
|
|
242
|
+
return reject(source, sourceUnit, targetUnit, cause("same_unit_velocity_change", [
|
|
243
|
+
"request.replacement_velocity",
|
|
244
|
+
]));
|
|
245
|
+
}
|
|
246
|
+
if (sourceUnit !== "point" &&
|
|
247
|
+
targetUnit !== "point" &&
|
|
248
|
+
sourceUnit !== targetUnit) {
|
|
249
|
+
return reject(source, sourceUnit, targetUnit, cause("unsupported_direction", [
|
|
250
|
+
"project.duration_unit",
|
|
251
|
+
"request.target_unit",
|
|
252
|
+
]));
|
|
253
|
+
}
|
|
254
|
+
const declaredField = fieldNamed(project, "velocity");
|
|
255
|
+
const declared = declaredVelocity(declaredField?.value);
|
|
256
|
+
if (sourceUnit !== targetUnit && replacement === null && declared === null) {
|
|
257
|
+
return reject(source, sourceUnit, targetUnit, cause("missing_velocity", ["project.velocity"]));
|
|
258
|
+
}
|
|
259
|
+
let effectiveVelocity = null;
|
|
260
|
+
let velocityDisposition = null;
|
|
261
|
+
if (sourceUnit !== targetUnit) {
|
|
262
|
+
if (replacement === null) {
|
|
263
|
+
effectiveVelocity = declared;
|
|
264
|
+
velocityDisposition = "retained";
|
|
265
|
+
}
|
|
266
|
+
else if (declared !== null &&
|
|
267
|
+
velocitySemanticallyEqual(declared, replacement)) {
|
|
268
|
+
effectiveVelocity = declared;
|
|
269
|
+
velocityDisposition = "retained";
|
|
270
|
+
}
|
|
271
|
+
else {
|
|
272
|
+
effectiveVelocity = replacement;
|
|
273
|
+
velocityDisposition = declared === null ? "inserted" : "replaced";
|
|
274
|
+
}
|
|
275
|
+
if (effectiveVelocity === null) {
|
|
276
|
+
throw new Error("changing migration has no effective velocity");
|
|
277
|
+
}
|
|
278
|
+
const requiredPeriodUnit = sourceUnit === "point" ? targetUnit : sourceUnit;
|
|
279
|
+
if (effectiveVelocity.periodUnit !== requiredPeriodUnit) {
|
|
280
|
+
return reject(source, sourceUnit, targetUnit, cause("velocity_period_mismatch", [
|
|
281
|
+
replacement === null
|
|
282
|
+
? "project.velocity"
|
|
283
|
+
: "request.replacement_velocity",
|
|
284
|
+
sourceUnit === "point"
|
|
285
|
+
? "request.target_unit"
|
|
286
|
+
: "project.duration_unit",
|
|
287
|
+
]));
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
const inventory = inventoryDurationFields(source, sourceUnit);
|
|
291
|
+
if (!inventory.ok) {
|
|
292
|
+
return reject(source, sourceUnit, targetUnit, cause("unsupported_duration_field", inventory.unsupportedFieldPaths));
|
|
293
|
+
}
|
|
294
|
+
return Object.freeze({
|
|
295
|
+
ok: true,
|
|
296
|
+
unitMigration: UNIT_MIGRATION_IDENTITY,
|
|
297
|
+
sourceGrammarVersion: source.grammarVersion,
|
|
298
|
+
sourceUnit,
|
|
299
|
+
targetUnit,
|
|
300
|
+
changed: sourceUnit !== targetUnit,
|
|
301
|
+
effectiveVelocity,
|
|
302
|
+
velocityDisposition,
|
|
303
|
+
durationInventory: inventory.fields,
|
|
304
|
+
preservedTemporalFields: preservedTemporalFields(source.document),
|
|
305
|
+
unavailableCauses: Object.freeze([]),
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
//# sourceMappingURL=request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request.js","sourceRoot":"","sources":["../../src/migration/request.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { DeclaredCalendarValue } from "./calendar.js";
|
|
2
|
+
import type { Rational } from "./rational.js";
|
|
3
|
+
import type { TargetCalendarValue } from "./target-calendar.js";
|
|
4
|
+
import type { CalendarUnit } from "./units.js";
|
|
5
|
+
export declare const CALENDAR_ARITHMETIC_IDENTITY: Readonly<{
|
|
6
|
+
id: "perttool.calendar-projection";
|
|
7
|
+
version: 1;
|
|
8
|
+
profileId: "perttool.calendar.continuous-fixed-offset";
|
|
9
|
+
profileVersion: 1;
|
|
10
|
+
}>;
|
|
11
|
+
export type CalendarUnavailableCause = "missing_temporal_anchor" | "incomparable_temporal_kinds" | "date_anchor_has_no_clock" | "fractional_date_projection" | "calendar_range_overflow" | "exact_datetime_text_unavailable";
|
|
12
|
+
export interface CalendarDifference {
|
|
13
|
+
readonly kind: "calendar_days" | "si_seconds";
|
|
14
|
+
readonly exact: Rational;
|
|
15
|
+
}
|
|
16
|
+
export interface UnavailableCalendarRelationship {
|
|
17
|
+
readonly state: "unavailable";
|
|
18
|
+
readonly difference: null;
|
|
19
|
+
readonly cause: CalendarUnavailableCause;
|
|
20
|
+
}
|
|
21
|
+
export interface AvailableCalendarRelationship {
|
|
22
|
+
readonly state: "available";
|
|
23
|
+
readonly difference: CalendarDifference;
|
|
24
|
+
readonly cause: null;
|
|
25
|
+
}
|
|
26
|
+
export type CalendarRelationship = UnavailableCalendarRelationship | AvailableCalendarRelationship;
|
|
27
|
+
export interface AvailableProjectedCalendarValue {
|
|
28
|
+
readonly state: "available";
|
|
29
|
+
readonly value: TargetCalendarValue;
|
|
30
|
+
readonly unavailableCauses: readonly CalendarUnavailableCause[];
|
|
31
|
+
}
|
|
32
|
+
export interface UnavailableProjectedCalendarValue {
|
|
33
|
+
readonly state: "unavailable";
|
|
34
|
+
readonly value: null;
|
|
35
|
+
readonly unavailableCauses: readonly CalendarUnavailableCause[];
|
|
36
|
+
}
|
|
37
|
+
export type ProjectedCalendarValue = AvailableProjectedCalendarValue | UnavailableProjectedCalendarValue;
|
|
38
|
+
export declare function civilDayNumber(value: Pick<DeclaredCalendarValue, "year" | "month" | "day">): bigint;
|
|
39
|
+
export declare function instantKey(value: Extract<DeclaredCalendarValue, {
|
|
40
|
+
readonly kind: "date_time";
|
|
41
|
+
}>): Rational;
|
|
42
|
+
export declare function compareCalendarValues(left: DeclaredCalendarValue, right: DeclaredCalendarValue): "less" | "equal" | "greater" | "incomparable_temporal_kinds";
|
|
43
|
+
export declare function subtractCalendarValues(left: DeclaredCalendarValue, right: DeclaredCalendarValue): CalendarRelationship;
|
|
44
|
+
export declare function scaleCalendarDifference(difference: CalendarDifference, scalar: Rational): CalendarDifference;
|
|
45
|
+
export declare function projectRelativeCalendarValue(anchor: DeclaredCalendarValue, effectiveUnit: CalendarUnit, relative: Rational): ProjectedCalendarValue;
|
|
46
|
+
//# sourceMappingURL=calendar-arithmetic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calendar-arithmetic.d.ts","sourceRoot":"","sources":["../../src/model/calendar-arithmetic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,eAAO,MAAM,4BAA4B;QACnC,8BAA8B;aACzB,CAAC;eACC,2CAA2C;oBACtC,CAAC;EACjB,CAAC;AAEH,MAAM,MAAM,wBAAwB,GAChC,yBAAyB,GACzB,6BAA6B,GAC7B,0BAA0B,GAC1B,4BAA4B,GAC5B,yBAAyB,GACzB,iCAAiC,CAAC;AAEtC,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,YAAY,CAAC;IAC9C,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;CAC1B;AAED,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,wBAAwB,CAAC;CAC1C;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;CACtB;AAED,MAAM,MAAM,oBAAoB,GAC5B,+BAA+B,GAC/B,6BAA6B,CAAC;AAElC,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAC;IACpC,QAAQ,CAAC,iBAAiB,EAAE,SAAS,wBAAwB,EAAE,CAAC;CACjE;AAED,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;IACrB,QAAQ,CAAC,iBAAiB,EAAE,SAAS,wBAAwB,EAAE,CAAC;CACjE;AAED,MAAM,MAAM,sBAAsB,GAC9B,+BAA+B,GAC/B,iCAAiC,CAAC;AA6BtC,wBAAgB,cAAc,CAC5B,KAAK,EAAE,IAAI,CAAC,qBAAqB,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC,GAC3D,MAAM,CAOR;AAED,wBAAgB,UAAU,CACxB,KAAK,EAAE,OAAO,CAAC,qBAAqB,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;CAAE,CAAC,GACpE,QAAQ,CAMV;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,qBAAqB,EAC3B,KAAK,EAAE,qBAAqB,GAC3B,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,6BAA6B,CAQ9D;AAED,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,qBAAqB,EAC3B,KAAK,EAAE,qBAAqB,GAC3B,oBAAoB,CAiCtB;AAED,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,kBAAkB,EAC9B,MAAM,EAAE,QAAQ,GACf,kBAAkB,CAKpB;AAmGD,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,qBAAqB,EAC7B,aAAa,EAAE,YAAY,EAC3B,QAAQ,EAAE,QAAQ,GACjB,sBAAsB,CAoGxB"}
|