perttool 0.9.4 → 0.10.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 +29 -1
- package/README.md +38 -17
- package/dist/application/cli-facade.d.ts +33 -8
- package/dist/application/cli-facade.d.ts.map +1 -1
- package/dist/application/cli-facade.js +1 -2
- package/dist/application/cli-facade.js.map +1 -1
- package/dist/application/contract9-assurance-mutation.d.ts +35 -0
- package/dist/application/contract9-assurance-mutation.d.ts.map +1 -0
- package/dist/application/contract9-assurance-mutation.js +146 -0
- package/dist/application/contract9-assurance-mutation.js.map +1 -0
- package/dist/application/contract9-assurance.d.ts +23 -0
- package/dist/application/contract9-assurance.d.ts.map +1 -0
- package/dist/application/contract9-assurance.js +114 -0
- package/dist/application/contract9-assurance.js.map +1 -0
- package/dist/application/contract9-candidate.d.ts +33 -0
- package/dist/application/contract9-candidate.d.ts.map +1 -0
- package/dist/application/contract9-candidate.js +39 -0
- package/dist/application/contract9-candidate.js.map +1 -0
- package/dist/application/contract9-format-migration.d.ts +22 -0
- package/dist/application/contract9-format-migration.d.ts.map +1 -0
- package/dist/application/contract9-format-migration.js +52 -0
- package/dist/application/contract9-format-migration.js.map +1 -0
- package/dist/application/contract9-mixed-mutation.d.ts +14 -0
- package/dist/application/contract9-mixed-mutation.d.ts.map +1 -0
- package/dist/application/contract9-mixed-mutation.js +88 -0
- package/dist/application/contract9-mixed-mutation.js.map +1 -0
- package/dist/application/contract9-project.d.ts +15 -0
- package/dist/application/contract9-project.d.ts.map +1 -0
- package/dist/application/contract9-project.js +24 -0
- package/dist/application/contract9-project.js.map +1 -0
- package/dist/application/contract9-projection.d.ts +23 -0
- package/dist/application/contract9-projection.d.ts.map +1 -0
- package/dist/application/contract9-projection.js +89 -0
- package/dist/application/contract9-projection.js.map +1 -0
- package/dist/application/contract9-runtime.d.ts +43 -0
- package/dist/application/contract9-runtime.d.ts.map +1 -0
- package/dist/application/contract9-runtime.js +36 -0
- package/dist/application/contract9-runtime.js.map +1 -0
- package/dist/application/contract9-temporal-context.d.ts +15 -0
- package/dist/application/contract9-temporal-context.d.ts.map +1 -0
- package/dist/application/contract9-temporal-context.js +127 -0
- package/dist/application/contract9-temporal-context.js.map +1 -0
- package/dist/application/contract9-temporal-mutation.d.ts +20 -0
- package/dist/application/contract9-temporal-mutation.d.ts.map +1 -0
- package/dist/application/contract9-temporal-mutation.js +78 -0
- package/dist/application/contract9-temporal-mutation.js.map +1 -0
- package/dist/application/contract9-temporal.d.ts +17 -0
- package/dist/application/contract9-temporal.d.ts.map +1 -0
- package/dist/application/contract9-temporal.js +65 -0
- package/dist/application/contract9-temporal.js.map +1 -0
- package/dist/application/contract9-write.d.ts +28 -0
- package/dist/application/contract9-write.d.ts.map +1 -0
- package/dist/application/contract9-write.js +25 -0
- package/dist/application/contract9-write.js.map +1 -0
- package/dist/application/editor-milestone-acceptance.d.ts +4 -0
- package/dist/application/editor-milestone-acceptance.d.ts.map +1 -1
- package/dist/application/editor-milestone-acceptance.js +90 -0
- package/dist/application/editor-milestone-acceptance.js.map +1 -1
- package/dist/application/editor-repair.d.ts +12 -0
- package/dist/application/editor-repair.d.ts.map +1 -0
- package/dist/application/editor-repair.js +74 -0
- package/dist/application/editor-repair.js.map +1 -0
- package/dist/application/target-postdue-analysis.d.ts +18 -0
- package/dist/application/target-postdue-analysis.d.ts.map +1 -0
- package/dist/application/target-postdue-analysis.js +26 -0
- package/dist/application/target-postdue-analysis.js.map +1 -0
- package/dist/application/target-postdue-check.d.ts +10 -0
- package/dist/application/target-postdue-check.d.ts.map +1 -0
- package/dist/application/target-postdue-check.js +18 -0
- package/dist/application/target-postdue-check.js.map +1 -0
- package/dist/application/target-postdue-next.d.ts +10 -0
- package/dist/application/target-postdue-next.d.ts.map +1 -0
- package/dist/application/target-postdue-next.js +13 -0
- package/dist/application/target-postdue-next.js.map +1 -0
- package/dist/application/target-postdue-projection.d.ts +11 -0
- package/dist/application/target-postdue-projection.d.ts.map +1 -0
- package/dist/application/target-postdue-projection.js +17 -0
- package/dist/application/target-postdue-projection.js.map +1 -0
- package/dist/assurance/canonical.d.ts +3 -3
- package/dist/assurance/canonical.d.ts.map +1 -1
- package/dist/assurance/canonical.js +19 -6
- package/dist/assurance/canonical.js.map +1 -1
- package/dist/assurance/evaluate.d.ts.map +1 -1
- package/dist/assurance/evaluate.js +10 -2
- package/dist/assurance/evaluate.js.map +1 -1
- package/dist/assurance/types.d.ts +11 -1
- package/dist/assurance/types.d.ts.map +1 -1
- package/dist/cli.js +184 -85
- package/dist/cli.js.map +1 -1
- package/dist/command/contract9-discovery.d.ts +17 -0
- package/dist/command/contract9-discovery.d.ts.map +1 -0
- package/dist/command/contract9-discovery.js +126 -0
- package/dist/command/contract9-discovery.js.map +1 -0
- package/dist/command/contract9-usage.d.ts +24 -0
- package/dist/command/contract9-usage.d.ts.map +1 -0
- package/dist/command/contract9-usage.js +23 -0
- package/dist/command/contract9-usage.js.map +1 -0
- package/dist/core/index.d.ts +4 -3
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1 -1
- package/dist/editor/repair.d.ts +95 -0
- package/dist/editor/repair.d.ts.map +1 -0
- package/dist/editor/repair.js +232 -0
- package/dist/editor/repair.js.map +1 -0
- package/dist/editor/semantic-fingerprint.d.ts +8 -0
- package/dist/editor/semantic-fingerprint.d.ts.map +1 -0
- package/dist/editor/semantic-fingerprint.js +177 -0
- package/dist/editor/semantic-fingerprint.js.map +1 -0
- package/dist/help/assurance-guide.js +7 -7
- package/dist/help/assurance-guide.js.map +1 -1
- package/dist/help/contract9-guide.d.ts +10 -0
- package/dist/help/contract9-guide.d.ts.map +1 -0
- package/dist/help/contract9-guide.js +32 -0
- package/dist/help/contract9-guide.js.map +1 -0
- package/dist/help/guide.d.ts +1 -1
- package/dist/help/guide.d.ts.map +1 -1
- package/dist/index.d.ts +10 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/mutation/advance.d.ts.map +1 -1
- package/dist/mutation/advance.js.map +1 -1
- package/dist/perttool-vscode-private-0.0.0-d1578b9.vsix +0 -0
- package/dist/recommendation/override-types.d.ts +2 -2
- package/dist/recommendation/override.js +2 -2
- package/dist/schema/registry.d.ts +1 -1
- package/dist/schema/registry.js +8 -8
- package/dist/session/document-session.d.ts +23 -0
- package/dist/session/document-session.d.ts.map +1 -1
- package/dist/session/document-session.js +104 -2
- package/dist/session/document-session.js.map +1 -1
- package/dist/temporal-schedule/alert-types.d.ts +109 -0
- package/dist/temporal-schedule/alert-types.d.ts.map +1 -0
- package/dist/temporal-schedule/alert-types.js +2 -0
- package/dist/temporal-schedule/alert-types.js.map +1 -0
- package/dist/temporal-schedule/alert.d.ts +4 -0
- package/dist/temporal-schedule/alert.d.ts.map +1 -0
- package/dist/temporal-schedule/alert.js +214 -0
- package/dist/temporal-schedule/alert.js.map +1 -0
- package/dist/temporal-schedule/calendar-mutation.d.ts +11 -0
- package/dist/temporal-schedule/calendar-mutation.d.ts.map +1 -0
- package/dist/temporal-schedule/calendar-mutation.js +59 -0
- package/dist/temporal-schedule/calendar-mutation.js.map +1 -0
- package/dist/temporal-schedule/calendar.d.ts +16 -0
- package/dist/temporal-schedule/calendar.d.ts.map +1 -0
- package/dist/temporal-schedule/calendar.js +179 -0
- package/dist/temporal-schedule/calendar.js.map +1 -0
- package/dist/temporal-schedule/constraint-types.d.ts +47 -0
- package/dist/temporal-schedule/constraint-types.d.ts.map +1 -0
- package/dist/temporal-schedule/constraint-types.js +2 -0
- package/dist/temporal-schedule/constraint-types.js.map +1 -0
- package/dist/temporal-schedule/constraint.d.ts +7 -0
- package/dist/temporal-schedule/constraint.d.ts.map +1 -0
- package/dist/temporal-schedule/constraint.js +224 -0
- package/dist/temporal-schedule/constraint.js.map +1 -0
- package/dist/temporal-schedule/entity-mutation.d.ts +31 -0
- package/dist/temporal-schedule/entity-mutation.d.ts.map +1 -0
- package/dist/temporal-schedule/entity-mutation.js +107 -0
- package/dist/temporal-schedule/entity-mutation.js.map +1 -0
- package/dist/temporal-schedule/format.d.ts +9 -0
- package/dist/temporal-schedule/format.d.ts.map +1 -0
- package/dist/temporal-schedule/format.js +183 -0
- package/dist/temporal-schedule/format.js.map +1 -0
- package/dist/temporal-schedule/required-types.d.ts +68 -0
- package/dist/temporal-schedule/required-types.d.ts.map +1 -0
- package/dist/temporal-schedule/required-types.js +2 -0
- package/dist/temporal-schedule/required-types.js.map +1 -0
- package/dist/temporal-schedule/required.d.ts +5 -0
- package/dist/temporal-schedule/required.d.ts.map +1 -0
- package/dist/temporal-schedule/required.js +183 -0
- package/dist/temporal-schedule/required.js.map +1 -0
- package/dist/temporal-schedule/schedule-graph.d.ts +8 -0
- package/dist/temporal-schedule/schedule-graph.d.ts.map +1 -0
- package/dist/temporal-schedule/schedule-graph.js +33 -0
- package/dist/temporal-schedule/schedule-graph.js.map +1 -0
- package/dist/temporal-schedule/scheduler-types.d.ts +115 -0
- package/dist/temporal-schedule/scheduler-types.d.ts.map +1 -0
- package/dist/temporal-schedule/scheduler-types.js +2 -0
- package/dist/temporal-schedule/scheduler-types.js.map +1 -0
- package/dist/temporal-schedule/scheduler.d.ts +12 -0
- package/dist/temporal-schedule/scheduler.d.ts.map +1 -0
- package/dist/temporal-schedule/scheduler.js +584 -0
- package/dist/temporal-schedule/scheduler.js.map +1 -0
- package/dist/temporal-schedule/source-lexical.d.ts +30 -0
- package/dist/temporal-schedule/source-lexical.d.ts.map +1 -0
- package/dist/temporal-schedule/source-lexical.js +166 -0
- package/dist/temporal-schedule/source-lexical.js.map +1 -0
- package/dist/temporal-schedule/source-types.d.ts +124 -0
- package/dist/temporal-schedule/source-types.d.ts.map +1 -0
- package/dist/temporal-schedule/source-types.js +2 -0
- package/dist/temporal-schedule/source-types.js.map +1 -0
- package/dist/temporal-schedule/source-values.d.ts +17 -0
- package/dist/temporal-schedule/source-values.d.ts.map +1 -0
- package/dist/temporal-schedule/source-values.js +138 -0
- package/dist/temporal-schedule/source-values.js.map +1 -0
- package/dist/temporal-schedule/source.d.ts +17 -0
- package/dist/temporal-schedule/source.d.ts.map +1 -0
- package/dist/temporal-schedule/source.js +520 -0
- package/dist/temporal-schedule/source.js.map +1 -0
- package/dist/temporal-schedule/tzdb-2026c.d.ts +7 -0
- package/dist/temporal-schedule/tzdb-2026c.d.ts.map +1 -0
- package/dist/temporal-schedule/tzdb-2026c.js +611 -0
- package/dist/temporal-schedule/tzdb-2026c.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +1 -1
- package/schemas/Perttool.AdvanceResult.v3.schema.json +1 -1
- package/schemas/Perttool.AgentGuidanceResult.v1.schema.json +1 -1
- package/schemas/{Perttool.AnalysisResult.v6.schema.json → Perttool.AnalysisResult.v7.schema.json} +178 -6
- package/schemas/{Perttool.CheckResult.v5.schema.json → Perttool.CheckResult.v6.schema.json} +10 -6
- package/schemas/Perttool.CliError.v1.schema.json +1 -1
- package/schemas/Perttool.CommandHelpResult.v1.schema.json +2 -2
- package/schemas/Perttool.ExportResult.v1.schema.json +1 -1
- package/schemas/Perttool.FormatResult.v1.schema.json +1 -1
- package/schemas/Perttool.GuideResult.v1.schema.json +1 -1
- package/schemas/Perttool.HistoricalGraphResult.v1.schema.json +1 -1
- package/schemas/Perttool.ImportResult.v1.schema.json +1 -1
- package/schemas/Perttool.InitResult.v1.schema.json +1 -1
- package/schemas/Perttool.MilestoneAcceptanceMigrationResult.v1.schema.json +1 -1
- package/schemas/Perttool.MilestoneAcceptanceResult.v1.schema.json +1 -1
- package/schemas/{Perttool.MutationResult.v5.schema.json → Perttool.MutationResult.v6.schema.json} +4 -4
- package/schemas/{Perttool.NextResult.v7.schema.json → Perttool.NextResult.v8.schema.json} +10 -6
- package/schemas/Perttool.OverrideDecision.v1.schema.json +1 -1
- package/schemas/{Perttool.PlanAssuranceResult.v1.schema.json → Perttool.PlanAssuranceResult.v2.schema.json} +5 -5
- package/schemas/Perttool.ProjectHistoryResult.v1.schema.json +1 -1
- package/schemas/{Perttool.ProjectResult.v4.schema.json → Perttool.ProjectResult.v5.schema.json} +70 -7
- package/schemas/Perttool.SchemaResult.v1.schema.json +1 -1
- package/schemas/{Perttool.UnitMigrationResult.v3.schema.json → Perttool.UnitMigrationResult.v4.schema.json} +5 -5
- package/schemas/Perttool.VelocityObservationResult.v1.schema.json +1 -1
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { SourcePosition, SourceSpan } from "../model/diagnostics.js";
|
|
2
|
+
export interface TemporalSourceLine {
|
|
3
|
+
readonly text: string;
|
|
4
|
+
readonly start: number;
|
|
5
|
+
readonly contentEnd: number;
|
|
6
|
+
readonly end: number;
|
|
7
|
+
readonly number: number;
|
|
8
|
+
}
|
|
9
|
+
export type TemporalDeclarationKind = "project" | "resource" | "milestone" | "task" | "calendar" | "other";
|
|
10
|
+
export interface TemporalDeclarationBlock {
|
|
11
|
+
readonly kind: TemporalDeclarationKind;
|
|
12
|
+
readonly id: string;
|
|
13
|
+
readonly header: TemporalSourceLine;
|
|
14
|
+
readonly lines: readonly TemporalSourceLine[];
|
|
15
|
+
readonly span: SourceSpan;
|
|
16
|
+
readonly idSpan: SourceSpan;
|
|
17
|
+
}
|
|
18
|
+
export declare function splitTemporalSourceLines(text: string): readonly TemporalSourceLine[];
|
|
19
|
+
export declare function sourcePosition(line: TemporalSourceLine, column: number): SourcePosition;
|
|
20
|
+
export declare function sourceLineSpan(line: TemporalSourceLine): SourceSpan;
|
|
21
|
+
export declare function sourceSliceSpan(line: TemporalSourceLine, start: number, end: number): SourceSpan;
|
|
22
|
+
export declare function scanTemporalDeclarationBlocks(text: string): readonly TemporalDeclarationBlock[];
|
|
23
|
+
export declare function fieldLine(line: TemporalSourceLine): Readonly<{
|
|
24
|
+
name: string;
|
|
25
|
+
rawValue: string;
|
|
26
|
+
valueColumn: number;
|
|
27
|
+
}> | null;
|
|
28
|
+
export declare function temporalScheduleBaseText(text: string, blocks: readonly TemporalDeclarationBlock[]): string;
|
|
29
|
+
export declare function declaredTemporalGrammarVersion(blocks: readonly TemporalDeclarationBlock[]): number;
|
|
30
|
+
//# sourceMappingURL=source-lexical.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-lexical.d.ts","sourceRoot":"","sources":["../../src/temporal-schedule/source-lexical.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAE1E,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,uBAAuB,GAC/B,SAAS,GACT,UAAU,GACV,WAAW,GACX,MAAM,GACN,UAAU,GACV,OAAO,CAAC;AAEZ,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,IAAI,EAAE,uBAAuB,CAAC;IACvC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAC9C,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;CAC7B;AAOD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,kBAAkB,EAAE,CAuBpF;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,kBAAkB,EACxB,MAAM,EAAE,MAAM,GACb,cAAc,CAMhB;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,kBAAkB,GAAG,UAAU,CAKnE;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,kBAAkB,EACxB,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,GACV,UAAU,CAKZ;AAmCD,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,MAAM,GACX,SAAS,wBAAwB,EAAE,CAwBrC;AAED,wBAAgB,SAAS,CACvB,IAAI,EAAE,kBAAkB,GACvB,QAAQ,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,IAAI,CAM1E;AAwBD,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,SAAS,wBAAwB,EAAE,GAC1C,MAAM,CAoBR;AAED,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,SAAS,wBAAwB,EAAE,GAC1C,MAAM,CAMR"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
const identifier = "[A-Za-z][A-Za-z0-9_-]*";
|
|
2
|
+
const simpleHeader = new RegExp(`^(project|resource|milestone) (${identifier}):$`, "u");
|
|
3
|
+
const edgeHeader = new RegExp(`^(task|gate) (${identifier}) ${identifier} -> ${identifier}:$`, "u");
|
|
4
|
+
const otherHeader = new RegExp(`^[a-z_]+ (${identifier})(?: [^:]*)?:$`, "u");
|
|
5
|
+
export function splitTemporalSourceLines(text) {
|
|
6
|
+
if (text.length === 0)
|
|
7
|
+
return Object.freeze([]);
|
|
8
|
+
const result = [];
|
|
9
|
+
let start = 0;
|
|
10
|
+
let number = 0;
|
|
11
|
+
while (start < text.length) {
|
|
12
|
+
const newline = text.indexOf("\n", start);
|
|
13
|
+
const end = newline === -1 ? text.length : newline + 1;
|
|
14
|
+
const rawContentEnd = newline === -1 ? text.length : newline;
|
|
15
|
+
const contentEnd = rawContentEnd > start && text[rawContentEnd - 1] === "\r"
|
|
16
|
+
? rawContentEnd - 1
|
|
17
|
+
: rawContentEnd;
|
|
18
|
+
result.push(Object.freeze({
|
|
19
|
+
text: text.slice(start, contentEnd),
|
|
20
|
+
start,
|
|
21
|
+
contentEnd,
|
|
22
|
+
end,
|
|
23
|
+
number,
|
|
24
|
+
}));
|
|
25
|
+
start = end;
|
|
26
|
+
number += 1;
|
|
27
|
+
}
|
|
28
|
+
return Object.freeze(result);
|
|
29
|
+
}
|
|
30
|
+
export function sourcePosition(line, column) {
|
|
31
|
+
return Object.freeze({
|
|
32
|
+
offset: line.start + column,
|
|
33
|
+
line: line.number,
|
|
34
|
+
column,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
export function sourceLineSpan(line) {
|
|
38
|
+
return Object.freeze({
|
|
39
|
+
start: sourcePosition(line, 0),
|
|
40
|
+
end: sourcePosition(line, line.text.length),
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
export function sourceSliceSpan(line, start, end) {
|
|
44
|
+
return Object.freeze({
|
|
45
|
+
start: sourcePosition(line, start),
|
|
46
|
+
end: sourcePosition(line, end),
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
function headerIdentity(line) {
|
|
50
|
+
const text = line.number === 0 && line.text.startsWith("\uFEFF")
|
|
51
|
+
? line.text.slice(1)
|
|
52
|
+
: line.text;
|
|
53
|
+
const calendar = new RegExp(`^calendar (${identifier}):$`, "u").exec(text);
|
|
54
|
+
if (calendar !== null)
|
|
55
|
+
return { kind: "calendar", id: calendar[1] };
|
|
56
|
+
const simple = simpleHeader.exec(text);
|
|
57
|
+
if (simple !== null) {
|
|
58
|
+
return {
|
|
59
|
+
kind: simple[1],
|
|
60
|
+
id: simple[2],
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
const edge = edgeHeader.exec(text);
|
|
64
|
+
if (edge !== null) {
|
|
65
|
+
return { kind: edge[1] === "task" ? "task" : "other", id: edge[2] };
|
|
66
|
+
}
|
|
67
|
+
const other = otherHeader.exec(text);
|
|
68
|
+
return other === null ? null : { kind: "other", id: other[1] };
|
|
69
|
+
}
|
|
70
|
+
function blockEnd(lines, start) {
|
|
71
|
+
let index = start + 1;
|
|
72
|
+
while (index < lines.length) {
|
|
73
|
+
const text = lines[index].text;
|
|
74
|
+
if (text !== "" && !text.startsWith(" ") && !text.startsWith("\t"))
|
|
75
|
+
break;
|
|
76
|
+
index += 1;
|
|
77
|
+
}
|
|
78
|
+
return index;
|
|
79
|
+
}
|
|
80
|
+
export function scanTemporalDeclarationBlocks(text) {
|
|
81
|
+
const lines = splitTemporalSourceLines(text);
|
|
82
|
+
const result = [];
|
|
83
|
+
for (let index = 0; index < lines.length; index += 1) {
|
|
84
|
+
const header = lines[index];
|
|
85
|
+
const identity = headerIdentity(header);
|
|
86
|
+
if (identity === null)
|
|
87
|
+
continue;
|
|
88
|
+
const end = blockEnd(lines, index);
|
|
89
|
+
const blockLines = lines.slice(index + 1, end);
|
|
90
|
+
const idStart = header.text.indexOf(identity.id);
|
|
91
|
+
const last = blockLines.at(-1) ?? header;
|
|
92
|
+
result.push(Object.freeze({
|
|
93
|
+
...identity,
|
|
94
|
+
header,
|
|
95
|
+
lines: Object.freeze(blockLines),
|
|
96
|
+
span: Object.freeze({
|
|
97
|
+
start: sourcePosition(header, 0),
|
|
98
|
+
end: sourcePosition(last, last.text.length),
|
|
99
|
+
}),
|
|
100
|
+
idSpan: sourceSliceSpan(header, idStart, idStart + identity.id.length),
|
|
101
|
+
}));
|
|
102
|
+
index = end - 1;
|
|
103
|
+
}
|
|
104
|
+
return Object.freeze(result);
|
|
105
|
+
}
|
|
106
|
+
export function fieldLine(line) {
|
|
107
|
+
const match = /^ ([a-z_]+)(?: (.*))?$/u.exec(line.text);
|
|
108
|
+
if (match === null)
|
|
109
|
+
return null;
|
|
110
|
+
const name = match[1];
|
|
111
|
+
const rawValue = match[2] ?? "";
|
|
112
|
+
return { name, rawValue, valueColumn: rawValue === "" ? line.text.length : name.length + 3 };
|
|
113
|
+
}
|
|
114
|
+
function maskedLine(line) {
|
|
115
|
+
const endingLength = line.end - line.contentEnd;
|
|
116
|
+
const ending = endingLength === 0 ? "" : endingLength === 2 ? "\r\n" : "\n";
|
|
117
|
+
const contentLength = line.contentEnd - line.start;
|
|
118
|
+
if (contentLength === 0)
|
|
119
|
+
return ending;
|
|
120
|
+
return `#${" ".repeat(contentLength - 1)}${ending}`;
|
|
121
|
+
}
|
|
122
|
+
const projectFields = new Set(["time_zone", "tzdb", "calendar", "workday"]);
|
|
123
|
+
const resourceFields = new Set([
|
|
124
|
+
"calendar",
|
|
125
|
+
"available_from",
|
|
126
|
+
"available_until",
|
|
127
|
+
"availability",
|
|
128
|
+
]);
|
|
129
|
+
function isOwnedField(kind, name) {
|
|
130
|
+
if (kind === "project")
|
|
131
|
+
return projectFields.has(name);
|
|
132
|
+
if (kind === "resource")
|
|
133
|
+
return resourceFields.has(name);
|
|
134
|
+
return (kind === "task" || kind === "milestone") && name === "when";
|
|
135
|
+
}
|
|
136
|
+
export function temporalScheduleBaseText(text, blocks) {
|
|
137
|
+
const replacements = new Map();
|
|
138
|
+
for (const block of blocks) {
|
|
139
|
+
if (block.kind === "calendar") {
|
|
140
|
+
replacements.set(block.header.start, maskedLine(block.header));
|
|
141
|
+
for (const line of block.lines)
|
|
142
|
+
replacements.set(line.start, maskedLine(line));
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
for (const line of block.lines) {
|
|
146
|
+
const field = fieldLine(line);
|
|
147
|
+
if (field !== null && isOwnedField(block.kind, field.name)) {
|
|
148
|
+
replacements.set(line.start, maskedLine(line));
|
|
149
|
+
}
|
|
150
|
+
else if (block.kind === "project" && /^ version 8$/u.test(line.text)) {
|
|
151
|
+
const ending = text.slice(line.contentEnd, line.end);
|
|
152
|
+
replacements.set(line.start, `${line.text.slice(0, -1)}7${ending}`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
const lines = splitTemporalSourceLines(text);
|
|
157
|
+
return lines.map((line) => replacements.get(line.start) ?? text.slice(line.start, line.end)).join("");
|
|
158
|
+
}
|
|
159
|
+
export function declaredTemporalGrammarVersion(blocks) {
|
|
160
|
+
const project = blocks.find(({ kind }) => kind === "project");
|
|
161
|
+
const version = project?.lines
|
|
162
|
+
.map(fieldLine)
|
|
163
|
+
.find((field) => field?.name === "version")?.rawValue;
|
|
164
|
+
return version === undefined ? 1 : /^\d+$/u.test(version) ? Number(version) : Number.NaN;
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=source-lexical.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-lexical.js","sourceRoot":"","sources":["../../src/temporal-schedule/source-lexical.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import type { SourceSpan } from "../model/diagnostics.js";
|
|
2
|
+
import type { Rational } from "../model/rational.js";
|
|
3
|
+
import type { TextEdit } from "../mutation/text-edits.js";
|
|
4
|
+
export interface TemporalScheduleSourceCapability {
|
|
5
|
+
readonly id: "perttool.target-grammar-8-temporal-schedule-source";
|
|
6
|
+
readonly version: 1;
|
|
7
|
+
readonly grammarVersion: 8;
|
|
8
|
+
}
|
|
9
|
+
export type Weekday = "mon" | "tue" | "wed" | "thu" | "fri" | "sat" | "sun";
|
|
10
|
+
export interface TemporalInstantSource {
|
|
11
|
+
readonly sourceText: string;
|
|
12
|
+
readonly instantSeconds: Rational;
|
|
13
|
+
readonly offsetMinutes: number;
|
|
14
|
+
readonly span: SourceSpan;
|
|
15
|
+
}
|
|
16
|
+
export interface CalendarWindowSource {
|
|
17
|
+
readonly startMinute: number;
|
|
18
|
+
readonly endMinute: number;
|
|
19
|
+
readonly span: SourceSpan;
|
|
20
|
+
}
|
|
21
|
+
export interface CalendarDaySource {
|
|
22
|
+
readonly weekday: Weekday;
|
|
23
|
+
readonly windows: readonly CalendarWindowSource[];
|
|
24
|
+
readonly span: SourceSpan;
|
|
25
|
+
}
|
|
26
|
+
export interface CalendarExceptionSource {
|
|
27
|
+
readonly date: string;
|
|
28
|
+
readonly windows: readonly CalendarWindowSource[];
|
|
29
|
+
readonly span: SourceSpan;
|
|
30
|
+
}
|
|
31
|
+
export interface CalendarSourceModel {
|
|
32
|
+
readonly id: string;
|
|
33
|
+
readonly span: SourceSpan;
|
|
34
|
+
readonly idSpan: SourceSpan;
|
|
35
|
+
readonly weekdays: readonly CalendarDaySource[];
|
|
36
|
+
readonly exceptions: readonly CalendarExceptionSource[];
|
|
37
|
+
}
|
|
38
|
+
export interface AvailabilityOverrideSource {
|
|
39
|
+
readonly start: TemporalInstantSource;
|
|
40
|
+
readonly end: TemporalInstantSource;
|
|
41
|
+
readonly capacity: number;
|
|
42
|
+
readonly span: SourceSpan;
|
|
43
|
+
}
|
|
44
|
+
export interface ResourceAvailabilitySource {
|
|
45
|
+
readonly resourceId: string;
|
|
46
|
+
readonly calendarId: string | null;
|
|
47
|
+
readonly availableFrom: TemporalInstantSource | null;
|
|
48
|
+
readonly availableUntil: TemporalInstantSource | null;
|
|
49
|
+
readonly overrides: readonly AvailabilityOverrideSource[];
|
|
50
|
+
readonly span: SourceSpan;
|
|
51
|
+
}
|
|
52
|
+
export type TaskEvent = "start" | "finish";
|
|
53
|
+
export type MilestoneEvent = "reach";
|
|
54
|
+
export type BoundDirection = "earliest" | "latest";
|
|
55
|
+
export interface EventBoundSource {
|
|
56
|
+
readonly entityKind: "task" | "milestone";
|
|
57
|
+
readonly entityId: string;
|
|
58
|
+
readonly event: TaskEvent | MilestoneEvent;
|
|
59
|
+
readonly direction: BoundDirection;
|
|
60
|
+
readonly value: TemporalInstantSource;
|
|
61
|
+
readonly span: SourceSpan;
|
|
62
|
+
}
|
|
63
|
+
export interface NamedZoneProfileSource {
|
|
64
|
+
readonly kind: "named_zone";
|
|
65
|
+
readonly zoneId: string;
|
|
66
|
+
readonly tzdbRelease: "2026c";
|
|
67
|
+
readonly calendarId: string;
|
|
68
|
+
readonly workdayHours: Rational | null;
|
|
69
|
+
}
|
|
70
|
+
export interface ContinuousProfileSource {
|
|
71
|
+
readonly kind: "continuous_fixed_offset";
|
|
72
|
+
}
|
|
73
|
+
export type TemporalCalendarProfileSource = NamedZoneProfileSource | ContinuousProfileSource;
|
|
74
|
+
export interface TemporalScheduleSourceModel {
|
|
75
|
+
readonly modelVersion: 1;
|
|
76
|
+
readonly grammarVersion: 8;
|
|
77
|
+
readonly documentId: string;
|
|
78
|
+
readonly asOf: TemporalInstantSource | null;
|
|
79
|
+
readonly profile: TemporalCalendarProfileSource;
|
|
80
|
+
readonly calendars: readonly CalendarSourceModel[];
|
|
81
|
+
readonly resources: readonly ResourceAvailabilitySource[];
|
|
82
|
+
readonly taskBounds: readonly EventBoundSource[];
|
|
83
|
+
readonly milestoneBounds: readonly EventBoundSource[];
|
|
84
|
+
}
|
|
85
|
+
export interface TemporalSourceDiagnostic {
|
|
86
|
+
readonly code: string;
|
|
87
|
+
readonly severity: "error" | "warning" | "info";
|
|
88
|
+
readonly message: string;
|
|
89
|
+
readonly entityId?: string;
|
|
90
|
+
readonly span?: SourceSpan;
|
|
91
|
+
readonly data?: Readonly<Record<string, unknown>>;
|
|
92
|
+
}
|
|
93
|
+
export interface TemporalScheduleSourceResult {
|
|
94
|
+
readonly ok: boolean;
|
|
95
|
+
readonly grammarVersion: number | null;
|
|
96
|
+
readonly documentId: string | null;
|
|
97
|
+
readonly model: TemporalScheduleSourceModel | null;
|
|
98
|
+
readonly diagnostics: readonly TemporalSourceDiagnostic[];
|
|
99
|
+
readonly diagnosticCounts: Readonly<{
|
|
100
|
+
errors: number;
|
|
101
|
+
warnings: number;
|
|
102
|
+
info: number;
|
|
103
|
+
}>;
|
|
104
|
+
readonly diagnosticsTruncated: boolean;
|
|
105
|
+
}
|
|
106
|
+
export interface TemporalScheduleFormatResult {
|
|
107
|
+
readonly ok: boolean;
|
|
108
|
+
readonly documentId: string | null;
|
|
109
|
+
readonly changed: boolean;
|
|
110
|
+
readonly formattedText: string | null;
|
|
111
|
+
readonly edits: readonly TextEdit[];
|
|
112
|
+
readonly diagnostics: readonly TemporalSourceDiagnostic[];
|
|
113
|
+
readonly diagnosticsTruncated: boolean;
|
|
114
|
+
}
|
|
115
|
+
export interface TemporalScheduleMutationResult {
|
|
116
|
+
readonly ok: boolean;
|
|
117
|
+
readonly documentId: string | null;
|
|
118
|
+
readonly changed: boolean;
|
|
119
|
+
readonly updatedText: string | null;
|
|
120
|
+
readonly edits: readonly TextEdit[];
|
|
121
|
+
readonly diagnostics: readonly TemporalSourceDiagnostic[];
|
|
122
|
+
readonly diagnosticsTruncated: boolean;
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=source-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-types.d.ts","sourceRoot":"","sources":["../../src/temporal-schedule/source-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-types.js","sourceRoot":"","sources":["../../src/temporal-schedule/source-types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type Rational } from "../model/rational.js";
|
|
2
|
+
import type { CalendarWindowSource, TemporalInstantSource } from "./source-types.js";
|
|
3
|
+
import { type TemporalSourceLine } from "./source-lexical.js";
|
|
4
|
+
export declare const TEMPORAL_TZDB_RELEASE: "2026c";
|
|
5
|
+
export declare function parseQuotedString(value: string): string | null;
|
|
6
|
+
export declare function parseTemporalInstant(value: string, line: TemporalSourceLine, column: number): TemporalInstantSource | null;
|
|
7
|
+
export declare function canonicalInstant(value: TemporalInstantSource): string;
|
|
8
|
+
export declare function compareInstants(left: TemporalInstantSource, right: TemporalInstantSource): number;
|
|
9
|
+
export declare function parseCalendarWindows(value: string, line: TemporalSourceLine, column: number): readonly CalendarWindowSource[] | null;
|
|
10
|
+
export declare function canonicalWindows(windows: readonly CalendarWindowSource[]): string;
|
|
11
|
+
export declare function validIsoDate(value: string): boolean;
|
|
12
|
+
export declare function parsePositiveWorkday(value: string): Rational | null;
|
|
13
|
+
export declare function canonicalWorkday(value: Rational): string;
|
|
14
|
+
export declare function zoneOffsetSeconds(zoneId: string, instant: Rational): number | null;
|
|
15
|
+
export declare function zoneOffsetMatches(zoneId: string, instant: TemporalInstantSource): boolean;
|
|
16
|
+
export declare function knownZone(zoneId: string): boolean;
|
|
17
|
+
//# sourceMappingURL=source-values.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-values.d.ts","sourceRoot":"","sources":["../../src/temporal-schedule/source-values.ts"],"names":[],"mappings":"AAQA,OAAO,EAA0B,KAAK,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,KAAK,EACV,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,qBAAqB,CAAC;AAM7B,eAAO,MAAM,qBAAqB,EAAG,OAAgB,CAAC;AAEtD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAO9D;AAeD,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,kBAAkB,EACxB,MAAM,EAAE,MAAM,GACb,qBAAqB,GAAG,IAAI,CAS9B;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,MAAM,CAIrE;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,qBAAqB,EAC3B,KAAK,EAAE,qBAAqB,GAC3B,MAAM,CAER;AAWD,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,kBAAkB,EACxB,MAAM,EAAE,MAAM,GACb,SAAS,oBAAoB,EAAE,GAAG,IAAI,CAyBxC;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,SAAS,oBAAoB,EAAE,GACvC,MAAM,CAMR;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CASnE;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,CAQxD;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,QAAQ,GAChB,MAAM,GAAG,IAAI,CAoBf;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAGT;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEjD"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { canonicalizeEventDateTimeSourceToken, parseDeclaredCalendarValue, parseEventDateTimeValue, } from "../model/calendar.js";
|
|
2
|
+
import { canonicalizeExactDurationSourceToken, } from "../model/exact-duration-source.js";
|
|
3
|
+
import { add, compare, rational } from "../model/rational.js";
|
|
4
|
+
import { sourceSliceSpan, } from "./source-lexical.js";
|
|
5
|
+
import { TZDB_2026C_RANGE, TZDB_2026C_TRANSITIONS, } from "./tzdb-2026c.js";
|
|
6
|
+
export const TEMPORAL_TZDB_RELEASE = "2026c";
|
|
7
|
+
export function parseQuotedString(value) {
|
|
8
|
+
try {
|
|
9
|
+
const parsed = JSON.parse(value);
|
|
10
|
+
return typeof parsed === "string" ? parsed : null;
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
function epochSeconds(value) {
|
|
17
|
+
if (value === undefined)
|
|
18
|
+
throw new Error("date-time is required");
|
|
19
|
+
const minuteEpoch = Date.UTC(value.year, value.month - 1, value.day, value.hour, value.minute, 0) / 1000 - value.offsetMinutes * 60;
|
|
20
|
+
return add(rational(BigInt(minuteEpoch)), value.second);
|
|
21
|
+
}
|
|
22
|
+
export function parseTemporalInstant(value, line, column) {
|
|
23
|
+
const parsed = parseEventDateTimeValue(value);
|
|
24
|
+
if (parsed === undefined)
|
|
25
|
+
return null;
|
|
26
|
+
return Object.freeze({
|
|
27
|
+
sourceText: value,
|
|
28
|
+
instantSeconds: epochSeconds(parsed),
|
|
29
|
+
offsetMinutes: parsed.offsetMinutes,
|
|
30
|
+
span: sourceSliceSpan(line, column, column + value.length),
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
export function canonicalInstant(value) {
|
|
34
|
+
const canonical = canonicalizeEventDateTimeSourceToken(value.sourceText);
|
|
35
|
+
if (canonical === null)
|
|
36
|
+
throw new Error("validated instant lost canonical source");
|
|
37
|
+
return canonical;
|
|
38
|
+
}
|
|
39
|
+
export function compareInstants(left, right) {
|
|
40
|
+
return compare(left.instantSeconds, right.instantSeconds);
|
|
41
|
+
}
|
|
42
|
+
function clockMinute(value, allowEndOfDay) {
|
|
43
|
+
if (allowEndOfDay && value === "24:00")
|
|
44
|
+
return 24 * 60;
|
|
45
|
+
const match = /^(\d{2}):(\d{2})$/u.exec(value);
|
|
46
|
+
if (match === null)
|
|
47
|
+
return null;
|
|
48
|
+
const hour = Number(match[1]);
|
|
49
|
+
const minute = Number(match[2]);
|
|
50
|
+
return hour <= 23 && minute <= 59 ? hour * 60 + minute : null;
|
|
51
|
+
}
|
|
52
|
+
export function parseCalendarWindows(value, line, column) {
|
|
53
|
+
if (value === "off")
|
|
54
|
+
return Object.freeze([]);
|
|
55
|
+
const result = [];
|
|
56
|
+
let cursor = 0;
|
|
57
|
+
for (const rawPart of value.split(",")) {
|
|
58
|
+
const leading = /^\s*/u.exec(rawPart)[0].length;
|
|
59
|
+
const trailing = /\s*$/u.exec(rawPart)[0].length;
|
|
60
|
+
const part = rawPart.slice(leading, rawPart.length - trailing);
|
|
61
|
+
const match = /^(\d{2}:\d{2})\.\.(\d{2}:\d{2}|24:00)$/u.exec(part);
|
|
62
|
+
if (match === null)
|
|
63
|
+
return null;
|
|
64
|
+
const start = clockMinute(match[1], false);
|
|
65
|
+
const end = clockMinute(match[2], true);
|
|
66
|
+
if (start === null || end === null || start >= end)
|
|
67
|
+
return null;
|
|
68
|
+
const partStart = column + cursor + leading;
|
|
69
|
+
result.push(Object.freeze({
|
|
70
|
+
startMinute: start,
|
|
71
|
+
endMinute: end,
|
|
72
|
+
span: sourceSliceSpan(line, partStart, partStart + part.length),
|
|
73
|
+
}));
|
|
74
|
+
cursor += rawPart.length + 1;
|
|
75
|
+
}
|
|
76
|
+
for (let index = 1; index < result.length; index += 1) {
|
|
77
|
+
if (result[index - 1].endMinute >= result[index].startMinute)
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
return Object.freeze(result);
|
|
81
|
+
}
|
|
82
|
+
export function canonicalWindows(windows) {
|
|
83
|
+
if (windows.length === 0)
|
|
84
|
+
return "off";
|
|
85
|
+
const clock = (value) => `${Math.floor(value / 60).toString().padStart(2, "0")}:${(value % 60).toString().padStart(2, "0")}`;
|
|
86
|
+
return windows.map(({ startMinute, endMinute }) => `${clock(startMinute)}..${clock(endMinute)}`).join(", ");
|
|
87
|
+
}
|
|
88
|
+
export function validIsoDate(value) {
|
|
89
|
+
return parseDeclaredCalendarValue(value)?.kind === "date";
|
|
90
|
+
}
|
|
91
|
+
export function parsePositiveWorkday(value) {
|
|
92
|
+
const token = canonicalizeExactDurationSourceToken(value);
|
|
93
|
+
if (token === null || !token.token.endsWith("h"))
|
|
94
|
+
return null;
|
|
95
|
+
const match = /^(\d+)(?:\.(\d+)|\/(\d+))?h$/u.exec(token.token);
|
|
96
|
+
const whole = BigInt(match[1]);
|
|
97
|
+
const parsed = match[3] === undefined
|
|
98
|
+
? rational(BigInt(`${match[1]}${match[2] ?? ""}`), 10n ** BigInt((match[2] ?? "").length))
|
|
99
|
+
: rational(whole, BigInt(match[3]));
|
|
100
|
+
return parsed.numerator > 0n ? parsed : null;
|
|
101
|
+
}
|
|
102
|
+
export function canonicalWorkday(value) {
|
|
103
|
+
const token = canonicalizeExactDurationSourceToken(value.denominator === 1n
|
|
104
|
+
? `${value.numerator}h`
|
|
105
|
+
: `${value.numerator}/${value.denominator}h`);
|
|
106
|
+
if (token === null)
|
|
107
|
+
throw new Error("validated workday lost canonical form");
|
|
108
|
+
return token.token;
|
|
109
|
+
}
|
|
110
|
+
export function zoneOffsetSeconds(zoneId, instant) {
|
|
111
|
+
const transitions = TZDB_2026C_TRANSITIONS[zoneId];
|
|
112
|
+
if (transitions === undefined)
|
|
113
|
+
return null;
|
|
114
|
+
if (compare(instant, rational(BigInt(TZDB_2026C_RANGE.start))) < 0 ||
|
|
115
|
+
compare(instant, rational(BigInt(TZDB_2026C_RANGE.end))) >= 0) {
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
let low = 0;
|
|
119
|
+
let high = transitions.length;
|
|
120
|
+
while (low < high) {
|
|
121
|
+
const middle = Math.floor((low + high) / 2);
|
|
122
|
+
if (compare(instant, rational(BigInt(transitions[middle][0]))) >= 0) {
|
|
123
|
+
low = middle + 1;
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
high = middle;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return transitions[Math.max(0, low - 1)][1];
|
|
130
|
+
}
|
|
131
|
+
export function zoneOffsetMatches(zoneId, instant) {
|
|
132
|
+
const seconds = zoneOffsetSeconds(zoneId, instant.instantSeconds);
|
|
133
|
+
return seconds !== null && seconds === instant.offsetMinutes * 60;
|
|
134
|
+
}
|
|
135
|
+
export function knownZone(zoneId) {
|
|
136
|
+
return TZDB_2026C_TRANSITIONS[zoneId] !== undefined;
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=source-values.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-values.js","sourceRoot":"","sources":["../../src/temporal-schedule/source-values.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type Rational } from "../model/rational.js";
|
|
2
|
+
import type { TemporalScheduleSourceCapability, TemporalScheduleSourceModel, TemporalScheduleSourceResult } from "./source-types.js";
|
|
3
|
+
export declare const TEMPORAL_SCHEDULE_SOURCE_MODEL_VERSION: 1;
|
|
4
|
+
export declare const TEMPORAL_SCHEDULE_SOURCE_CAPABILITY: TemporalScheduleSourceCapability;
|
|
5
|
+
export declare const TEMPORAL_SCHEDULE_SOURCE_LIMITS: Readonly<{
|
|
6
|
+
calendars: 256;
|
|
7
|
+
weeklyWindowsPerCalendar: 64;
|
|
8
|
+
exceptionsPerCalendar: 4096;
|
|
9
|
+
availabilityOverridesPerResource: 4096;
|
|
10
|
+
aggregateChangeInstants: 100000;
|
|
11
|
+
}>;
|
|
12
|
+
export declare function parseTemporalScheduleSource(text: string, capability: TemporalScheduleSourceCapability, options?: Readonly<{
|
|
13
|
+
maxDiagnostics?: number;
|
|
14
|
+
}>): TemporalScheduleSourceResult;
|
|
15
|
+
export declare function temporalScheduleSourceModel(result: TemporalScheduleSourceResult): TemporalScheduleSourceModel;
|
|
16
|
+
export declare function compareTemporalSourceInstants(left: Rational, right: Rational): number;
|
|
17
|
+
//# sourceMappingURL=source.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../src/temporal-schedule/source.ts"],"names":[],"mappings":"AAaA,OAAO,EAAW,KAAK,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAgB9D,OAAO,KAAK,EAWV,gCAAgC,EAChC,2BAA2B,EAC3B,4BAA4B,EAG7B,MAAM,mBAAmB,CAAC;AAa3B,eAAO,MAAM,sCAAsC,EAAG,CAAU,CAAC;AAEjE,eAAO,MAAM,mCAAmC,EAC9C,gCAIE,CAAC;AAEL,eAAO,MAAM,+BAA+B;;;;;;EAM1C,CAAC;AAqkBH,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,gCAAgC,EAC5C,OAAO,GAAE,QAAQ,CAAC;IAAE,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,CAAM,GAClD,4BAA4B,CA2D9B;AAED,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,4BAA4B,GACnC,2BAA2B,CAK7B;AAED,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,GAAG,MAAM,CAErF"}
|