perttool 0.2.0 → 0.4.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.
Files changed (259) hide show
  1. package/CHANGELOG.md +81 -1
  2. package/README.md +121 -28
  3. package/dist/analysis/temporal-deadline.d.ts +59 -0
  4. package/dist/analysis/temporal-deadline.d.ts.map +1 -0
  5. package/dist/analysis/temporal-deadline.js +387 -0
  6. package/dist/analysis/temporal-deadline.js.map +1 -0
  7. package/dist/analysis/temporal-precedence.d.ts +45 -0
  8. package/dist/analysis/temporal-precedence.d.ts.map +1 -0
  9. package/dist/analysis/temporal-precedence.js +123 -0
  10. package/dist/analysis/temporal-precedence.js.map +1 -0
  11. package/dist/analysis/temporal-resource.d.ts +66 -0
  12. package/dist/analysis/temporal-resource.d.ts.map +1 -0
  13. package/dist/analysis/temporal-resource.js +292 -0
  14. package/dist/analysis/temporal-resource.js.map +1 -0
  15. package/dist/application/check.d.ts +16 -0
  16. package/dist/application/check.d.ts.map +1 -1
  17. package/dist/application/check.js +51 -0
  18. package/dist/application/check.js.map +1 -1
  19. package/dist/application/contract4.d.ts +17 -0
  20. package/dist/application/contract4.d.ts.map +1 -0
  21. package/dist/application/contract4.js +27 -0
  22. package/dist/application/contract4.js.map +1 -0
  23. package/dist/application/contract5-governance.d.ts +8 -0
  24. package/dist/application/contract5-governance.d.ts.map +1 -0
  25. package/dist/application/contract5-governance.js +12 -0
  26. package/dist/application/contract5-governance.js.map +1 -0
  27. package/dist/application/init.d.ts +3 -11
  28. package/dist/application/init.d.ts.map +1 -1
  29. package/dist/application/init.js +16 -129
  30. package/dist/application/init.js.map +1 -1
  31. package/dist/application/mutate.d.ts +19 -0
  32. package/dist/application/mutate.d.ts.map +1 -1
  33. package/dist/application/mutate.js +34 -16
  34. package/dist/application/mutate.js.map +1 -1
  35. package/dist/application/next.d.ts +2 -0
  36. package/dist/application/next.d.ts.map +1 -1
  37. package/dist/application/next.js +7 -1
  38. package/dist/application/next.js.map +1 -1
  39. package/dist/application/project.d.ts +4 -22
  40. package/dist/application/project.d.ts.map +1 -1
  41. package/dist/application/project.js +3 -51
  42. package/dist/application/project.js.map +1 -1
  43. package/dist/application/target-check.d.ts +34 -0
  44. package/dist/application/target-check.d.ts.map +1 -0
  45. package/dist/application/target-check.js +90 -0
  46. package/dist/application/target-check.js.map +1 -0
  47. package/dist/application/target-governance-init.d.ts +36 -0
  48. package/dist/application/target-governance-init.d.ts.map +1 -0
  49. package/dist/application/target-governance-init.js +185 -0
  50. package/dist/application/target-governance-init.js.map +1 -0
  51. package/dist/application/target-governance-mutation.d.ts +20 -0
  52. package/dist/application/target-governance-mutation.d.ts.map +1 -0
  53. package/dist/application/target-governance-mutation.js +175 -0
  54. package/dist/application/target-governance-mutation.js.map +1 -0
  55. package/dist/application/target-governance-project.d.ts +34 -0
  56. package/dist/application/target-governance-project.d.ts.map +1 -0
  57. package/dist/application/target-governance-project.js +80 -0
  58. package/dist/application/target-governance-project.js.map +1 -0
  59. package/dist/application/target-governance-projection.d.ts +18 -0
  60. package/dist/application/target-governance-projection.d.ts.map +1 -0
  61. package/dist/application/target-governance-projection.js +248 -0
  62. package/dist/application/target-governance-projection.js.map +1 -0
  63. package/dist/application/target-governance-write.d.ts +17 -0
  64. package/dist/application/target-governance-write.d.ts.map +1 -0
  65. package/dist/application/target-governance-write.js +55 -0
  66. package/dist/application/target-governance-write.js.map +1 -0
  67. package/dist/application/target-grammar-boundary.d.ts +22 -0
  68. package/dist/application/target-grammar-boundary.d.ts.map +1 -0
  69. package/dist/application/target-grammar-boundary.js +91 -0
  70. package/dist/application/target-grammar-boundary.js.map +1 -0
  71. package/dist/application/target-mutate.d.ts +10 -0
  72. package/dist/application/target-mutate.d.ts.map +1 -0
  73. package/dist/application/target-mutate.js +81 -0
  74. package/dist/application/target-mutate.js.map +1 -0
  75. package/dist/application/target-project.d.ts +28 -0
  76. package/dist/application/target-project.d.ts.map +1 -0
  77. package/dist/application/target-project.js +60 -0
  78. package/dist/application/target-project.js.map +1 -0
  79. package/dist/application/target-temporal-analysis.d.ts +140 -0
  80. package/dist/application/target-temporal-analysis.d.ts.map +1 -0
  81. package/dist/application/target-temporal-analysis.js +414 -0
  82. package/dist/application/target-temporal-analysis.js.map +1 -0
  83. package/dist/application/target-temporal-input.d.ts +86 -0
  84. package/dist/application/target-temporal-input.d.ts.map +1 -0
  85. package/dist/application/target-temporal-input.js +240 -0
  86. package/dist/application/target-temporal-input.js.map +1 -0
  87. package/dist/application/target-unit-migration-candidate.d.ts +60 -0
  88. package/dist/application/target-unit-migration-candidate.d.ts.map +1 -0
  89. package/dist/application/target-unit-migration-candidate.js +294 -0
  90. package/dist/application/target-unit-migration-candidate.js.map +1 -0
  91. package/dist/application/target-unit-migration-request.d.ts +35 -0
  92. package/dist/application/target-unit-migration-request.d.ts.map +1 -0
  93. package/dist/application/target-unit-migration-request.js +70 -0
  94. package/dist/application/target-unit-migration-request.js.map +1 -0
  95. package/dist/application/target-unit-migration-result.d.ts +66 -0
  96. package/dist/application/target-unit-migration-result.d.ts.map +1 -0
  97. package/dist/application/target-unit-migration-result.js +86 -0
  98. package/dist/application/target-unit-migration-result.js.map +1 -0
  99. package/dist/application/unit-migration.d.ts +16 -0
  100. package/dist/application/unit-migration.d.ts.map +1 -0
  101. package/dist/application/unit-migration.js +11 -0
  102. package/dist/application/unit-migration.js.map +1 -0
  103. package/dist/cli.js +383 -132
  104. package/dist/cli.js.map +1 -1
  105. package/dist/command/discovery.d.ts +3 -3
  106. package/dist/command/discovery.d.ts.map +1 -1
  107. package/dist/command/discovery.js +149 -22
  108. package/dist/command/discovery.js.map +1 -1
  109. package/dist/command/registry.d.ts +8 -2
  110. package/dist/command/registry.d.ts.map +1 -1
  111. package/dist/command/registry.js +14 -1
  112. package/dist/command/registry.js.map +1 -1
  113. package/dist/command/target-governance-discovery.d.ts +31 -0
  114. package/dist/command/target-governance-discovery.d.ts.map +1 -0
  115. package/dist/command/target-governance-discovery.js +390 -0
  116. package/dist/command/target-governance-discovery.js.map +1 -0
  117. package/dist/command/target-governance-usage.d.ts +22 -0
  118. package/dist/command/target-governance-usage.d.ts.map +1 -0
  119. package/dist/command/target-governance-usage.js +116 -0
  120. package/dist/command/target-governance-usage.js.map +1 -0
  121. package/dist/command/usage.d.ts +2 -0
  122. package/dist/command/usage.d.ts.map +1 -1
  123. package/dist/command/usage.js +44 -26
  124. package/dist/command/usage.js.map +1 -1
  125. package/dist/conversion/mermaid-import.d.ts.map +1 -1
  126. package/dist/conversion/mermaid-import.js +3 -2
  127. package/dist/conversion/mermaid-import.js.map +1 -1
  128. package/dist/conversion/mermaid.d.ts.map +1 -1
  129. package/dist/conversion/mermaid.js +27 -0
  130. package/dist/conversion/mermaid.js.map +1 -1
  131. package/dist/formatter/source-formatter.d.ts +12 -0
  132. package/dist/formatter/source-formatter.d.ts.map +1 -1
  133. package/dist/formatter/source-formatter.js +59 -6
  134. package/dist/formatter/source-formatter.js.map +1 -1
  135. package/dist/formatter/target-source-formatter.d.ts +9 -0
  136. package/dist/formatter/target-source-formatter.d.ts.map +1 -0
  137. package/dist/formatter/target-source-formatter.js +52 -0
  138. package/dist/formatter/target-source-formatter.js.map +1 -0
  139. package/dist/governance/authority.d.ts +21 -0
  140. package/dist/governance/authority.d.ts.map +1 -0
  141. package/dist/governance/authority.js +206 -0
  142. package/dist/governance/authority.js.map +1 -0
  143. package/dist/governance/guidance.d.ts +2 -0
  144. package/dist/governance/guidance.d.ts.map +1 -0
  145. package/dist/governance/guidance.js +2 -0
  146. package/dist/governance/guidance.js.map +1 -0
  147. package/dist/governance/source.d.ts +37 -0
  148. package/dist/governance/source.d.ts.map +1 -0
  149. package/dist/governance/source.js +103 -0
  150. package/dist/governance/source.js.map +1 -0
  151. package/dist/governance/types.d.ts +41 -0
  152. package/dist/governance/types.d.ts.map +1 -0
  153. package/dist/governance/types.js +2 -0
  154. package/dist/governance/types.js.map +1 -0
  155. package/dist/help/guide.d.ts +8 -5
  156. package/dist/help/guide.d.ts.map +1 -1
  157. package/dist/help/guide.js +1 -1
  158. package/dist/help/guide.js.map +1 -1
  159. package/dist/help/registry.d.ts.map +1 -1
  160. package/dist/help/registry.js +124 -13
  161. package/dist/help/registry.js.map +1 -1
  162. package/dist/help/target-governance-guide.d.ts +10 -0
  163. package/dist/help/target-governance-guide.d.ts.map +1 -0
  164. package/dist/help/target-governance-guide.js +57 -0
  165. package/dist/help/target-governance-guide.js.map +1 -0
  166. package/dist/index.d.ts +25 -17
  167. package/dist/index.d.ts.map +1 -1
  168. package/dist/index.js +8 -8
  169. package/dist/index.js.map +1 -1
  170. package/dist/io/safe-write.d.ts +11 -0
  171. package/dist/io/safe-write.d.ts.map +1 -1
  172. package/dist/io/safe-write.js +40 -10
  173. package/dist/io/safe-write.js.map +1 -1
  174. package/dist/io/target-safe-write.d.ts +10 -0
  175. package/dist/io/target-safe-write.d.ts.map +1 -0
  176. package/dist/io/target-safe-write.js +51 -0
  177. package/dist/io/target-safe-write.js.map +1 -0
  178. package/dist/migration/conversion.d.ts +40 -0
  179. package/dist/migration/conversion.d.ts.map +1 -0
  180. package/dist/migration/conversion.js +106 -0
  181. package/dist/migration/conversion.js.map +1 -0
  182. package/dist/migration/grammar-boundary.d.ts +20 -0
  183. package/dist/migration/grammar-boundary.d.ts.map +1 -0
  184. package/dist/migration/grammar-boundary.js +95 -0
  185. package/dist/migration/grammar-boundary.js.map +1 -0
  186. package/dist/migration/request.d.ts +79 -0
  187. package/dist/migration/request.d.ts.map +1 -0
  188. package/dist/migration/request.js +308 -0
  189. package/dist/migration/request.js.map +1 -0
  190. package/dist/model/calendar-arithmetic.d.ts +46 -0
  191. package/dist/model/calendar-arithmetic.d.ts.map +1 -0
  192. package/dist/model/calendar-arithmetic.js +236 -0
  193. package/dist/model/calendar-arithmetic.js.map +1 -0
  194. package/dist/model/calendar.d.ts +22 -0
  195. package/dist/model/calendar.d.ts.map +1 -0
  196. package/dist/model/calendar.js +83 -0
  197. package/dist/model/calendar.js.map +1 -0
  198. package/dist/model/declaration-fields.d.ts +22 -0
  199. package/dist/model/declaration-fields.d.ts.map +1 -0
  200. package/dist/model/declaration-fields.js +72 -0
  201. package/dist/model/declaration-fields.js.map +1 -0
  202. package/dist/model/exact-duration-source.d.ts +10 -0
  203. package/dist/model/exact-duration-source.d.ts.map +1 -0
  204. package/dist/model/exact-duration-source.js +69 -0
  205. package/dist/model/exact-duration-source.js.map +1 -0
  206. package/dist/model/rational.d.ts +2 -2
  207. package/dist/model/rational.d.ts.map +1 -1
  208. package/dist/model/rational.js +3 -1
  209. package/dist/model/rational.js.map +1 -1
  210. package/dist/model/syntax.d.ts +9 -2
  211. package/dist/model/syntax.d.ts.map +1 -1
  212. package/dist/model/syntax.js +20 -4
  213. package/dist/model/syntax.js.map +1 -1
  214. package/dist/model/target-calendar.d.ts +25 -0
  215. package/dist/model/target-calendar.d.ts.map +1 -0
  216. package/dist/model/target-calendar.js +56 -0
  217. package/dist/model/target-calendar.js.map +1 -0
  218. package/dist/mutation/advance.d.ts +11 -0
  219. package/dist/mutation/advance.d.ts.map +1 -1
  220. package/dist/mutation/advance.js +37 -7
  221. package/dist/mutation/advance.js.map +1 -1
  222. package/dist/mutation/milestone.d.ts +10 -1
  223. package/dist/mutation/milestone.d.ts.map +1 -1
  224. package/dist/mutation/milestone.js +77 -21
  225. package/dist/mutation/milestone.js.map +1 -1
  226. package/dist/mutation/project.d.ts +11 -1
  227. package/dist/mutation/project.d.ts.map +1 -1
  228. package/dist/mutation/project.js +117 -11
  229. package/dist/mutation/project.js.map +1 -1
  230. package/dist/mutation/target-types.d.ts +59 -0
  231. package/dist/mutation/target-types.d.ts.map +1 -0
  232. package/dist/mutation/target-types.js +2 -0
  233. package/dist/mutation/target-types.js.map +1 -0
  234. package/dist/mutation/task.d.ts +12 -1
  235. package/dist/mutation/task.d.ts.map +1 -1
  236. package/dist/mutation/task.js +108 -49
  237. package/dist/mutation/task.js.map +1 -1
  238. package/dist/mutation/types.d.ts +16 -3
  239. package/dist/mutation/types.d.ts.map +1 -1
  240. package/dist/parser/document-parser.d.ts +21 -0
  241. package/dist/parser/document-parser.d.ts.map +1 -1
  242. package/dist/parser/document-parser.js +197 -38
  243. package/dist/parser/document-parser.js.map +1 -1
  244. package/dist/recommendation/override-types.d.ts +2 -2
  245. package/dist/recommendation/override.d.ts +2 -2
  246. package/dist/recommendation/override.d.ts.map +1 -1
  247. package/dist/recommendation/override.js +49 -12
  248. package/dist/recommendation/override.js.map +1 -1
  249. package/dist/semantic/target-validator.d.ts +46 -0
  250. package/dist/semantic/target-validator.d.ts.map +1 -0
  251. package/dist/semantic/target-validator.js +130 -0
  252. package/dist/semantic/target-validator.js.map +1 -0
  253. package/dist/semantic/validator.d.ts +3 -0
  254. package/dist/semantic/validator.d.ts.map +1 -1
  255. package/dist/semantic/validator.js +78 -5
  256. package/dist/semantic/validator.js.map +1 -1
  257. package/dist/version.d.ts +1 -1
  258. package/dist/version.js +1 -1
  259. package/package.json +1 -1
@@ -0,0 +1,236 @@
1
+ import { add, compare, multiply, rational, subtract } from "./rational.js";
2
+ export const CALENDAR_ARITHMETIC_IDENTITY = Object.freeze({
3
+ id: "perttool.calendar-projection",
4
+ version: 1,
5
+ profileId: "perttool.calendar.continuous-fixed-offset",
6
+ profileVersion: 1,
7
+ });
8
+ function leapYearsBefore(year) {
9
+ return (Math.floor((year + 3) / 4) -
10
+ Math.floor((year + 99) / 100) +
11
+ Math.floor((year + 399) / 400));
12
+ }
13
+ function isLeapYear(year) {
14
+ return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);
15
+ }
16
+ const monthOffsets = Object.freeze([
17
+ 0,
18
+ 31,
19
+ 59,
20
+ 90,
21
+ 120,
22
+ 151,
23
+ 181,
24
+ 212,
25
+ 243,
26
+ 273,
27
+ 304,
28
+ 334,
29
+ ]);
30
+ export function civilDayNumber(value) {
31
+ const beforeMonth = monthOffsets[value.month - 1];
32
+ const leapAdjustment = value.month > 2 && isLeapYear(value.year) ? 1 : 0;
33
+ return (BigInt(value.year * 365 + leapYearsBefore(value.year)) +
34
+ BigInt(beforeMonth + leapAdjustment + value.day - 1));
35
+ }
36
+ export function instantKey(value) {
37
+ const wholeSeconds = civilDayNumber(value) * 86400n +
38
+ BigInt(value.hour * 3_600 + value.minute * 60) -
39
+ BigInt(value.offsetMinutes * 60);
40
+ return add(rational(wholeSeconds), value.second);
41
+ }
42
+ export function compareCalendarValues(left, right) {
43
+ if (left.kind !== right.kind)
44
+ return "incomparable_temporal_kinds";
45
+ const order = left.kind === "date"
46
+ ? compare(rational(civilDayNumber(left)), rational(civilDayNumber(right)))
47
+ : compare(instantKey(left), instantKey(right));
48
+ return order < 0 ? "less" : order > 0 ? "greater" : "equal";
49
+ }
50
+ export function subtractCalendarValues(left, right) {
51
+ if (left.kind !== right.kind) {
52
+ return Object.freeze({
53
+ state: "unavailable",
54
+ difference: null,
55
+ cause: "incomparable_temporal_kinds",
56
+ });
57
+ }
58
+ const difference = left.kind === "date"
59
+ ? {
60
+ kind: "calendar_days",
61
+ exact: subtract(rational(civilDayNumber(left)), rational(civilDayNumber(right))),
62
+ }
63
+ : {
64
+ kind: "si_seconds",
65
+ exact: subtract(instantKey(left), instantKey(right)),
66
+ };
67
+ return Object.freeze({
68
+ state: "available",
69
+ difference: Object.freeze(difference),
70
+ cause: null,
71
+ });
72
+ }
73
+ export function scaleCalendarDifference(difference, scalar) {
74
+ return Object.freeze({
75
+ kind: difference.kind,
76
+ exact: multiply(difference.exact, scalar),
77
+ });
78
+ }
79
+ function floorRational(value) {
80
+ const quotient = value.numerator / value.denominator;
81
+ const remainder = value.numerator % value.denominator;
82
+ return value.numerator < 0n && remainder !== 0n
83
+ ? quotient - 1n
84
+ : quotient;
85
+ }
86
+ function dateFromCivilDayNumber(dayNumber) {
87
+ const maximumDay = civilDayNumber({ year: 9999, month: 12, day: 31 });
88
+ if (dayNumber < 0n || dayNumber > maximumDay)
89
+ return null;
90
+ let lower = 0;
91
+ let upper = 10_000;
92
+ while (lower + 1 < upper) {
93
+ const middle = Math.floor((lower + upper) / 2);
94
+ const firstDay = civilDayNumber({ year: middle, month: 1, day: 1 });
95
+ if (firstDay <= dayNumber)
96
+ lower = middle;
97
+ else
98
+ upper = middle;
99
+ }
100
+ const year = lower;
101
+ const dayOfYear = Number(dayNumber - civilDayNumber({ year, month: 1, day: 1 }));
102
+ let month = 1;
103
+ while (month < 12) {
104
+ const nextMonth = civilDayNumber({ year, month: month + 1, day: 1 });
105
+ if (nextMonth > dayNumber)
106
+ break;
107
+ month += 1;
108
+ }
109
+ const day = Number(dayNumber - civilDayNumber({ year, month, day: 1 }) + 1n);
110
+ if (dayOfYear < 0)
111
+ return null;
112
+ return { year, month, day };
113
+ }
114
+ function finiteDecimal(value) {
115
+ let denominator = value.denominator;
116
+ let twos = 0;
117
+ let fives = 0;
118
+ while (denominator % 2n === 0n) {
119
+ denominator /= 2n;
120
+ twos += 1;
121
+ }
122
+ while (denominator % 5n === 0n) {
123
+ denominator /= 5n;
124
+ fives += 1;
125
+ }
126
+ if (denominator !== 1n)
127
+ return null;
128
+ const scale = Math.max(twos, fives);
129
+ const scaled = value.numerator *
130
+ 2n ** BigInt(scale - twos) *
131
+ 5n ** BigInt(scale - fives);
132
+ if (scale === 0)
133
+ return scaled.toString();
134
+ const negative = scaled < 0n;
135
+ const digits = (negative ? -scaled : scaled)
136
+ .toString()
137
+ .padStart(scale + 1, "0");
138
+ const whole = digits.slice(0, -scale);
139
+ const fraction = digits.slice(-scale).replace(/0+$/, "");
140
+ return `${negative ? "-" : ""}${whole}${fraction.length === 0 ? "" : `.${fraction}`}`;
141
+ }
142
+ function pad(value, width = 2) {
143
+ return value.toString().padStart(width, "0");
144
+ }
145
+ function normalizedDateTimeText(value) {
146
+ const second = finiteDecimal(value.second);
147
+ if (second === null)
148
+ return null;
149
+ const [whole, fraction] = second.split(".");
150
+ const offset = value.offsetMinutes === 0
151
+ ? "Z"
152
+ : `${value.offsetMinutes < 0 ? "-" : "+"}${pad(Math.floor(Math.abs(value.offsetMinutes) / 60))}:${pad(Math.abs(value.offsetMinutes) % 60)}`;
153
+ return `${pad(value.year, 4)}-${pad(value.month)}-${pad(value.day)}T${pad(value.hour)}:${pad(value.minute)}:${pad(Number(whole))}${fraction === undefined ? "" : `.${fraction}`}${offset}`;
154
+ }
155
+ export function projectRelativeCalendarValue(anchor, effectiveUnit, relative) {
156
+ if (anchor.kind === "date") {
157
+ if (effectiveUnit === "hour") {
158
+ return Object.freeze({
159
+ state: "unavailable",
160
+ value: null,
161
+ unavailableCauses: Object.freeze([
162
+ "date_anchor_has_no_clock",
163
+ ]),
164
+ });
165
+ }
166
+ if (relative.denominator !== 1n) {
167
+ return Object.freeze({
168
+ state: "unavailable",
169
+ value: null,
170
+ unavailableCauses: Object.freeze([
171
+ "fractional_date_projection",
172
+ ]),
173
+ });
174
+ }
175
+ const projected = dateFromCivilDayNumber(civilDayNumber(anchor) + relative.numerator);
176
+ if (projected === null) {
177
+ return Object.freeze({
178
+ state: "unavailable",
179
+ value: null,
180
+ unavailableCauses: Object.freeze(["calendar_range_overflow"]),
181
+ });
182
+ }
183
+ return Object.freeze({
184
+ state: "available",
185
+ value: Object.freeze({
186
+ kind: "date",
187
+ sourceText: `${pad(projected.year, 4)}-${pad(projected.month)}-${pad(projected.day)}`,
188
+ ...projected,
189
+ }),
190
+ unavailableCauses: Object.freeze([]),
191
+ });
192
+ }
193
+ const scalar = rational(effectiveUnit === "day" ? 86400n : 3600n);
194
+ const projectedInstant = add(instantKey(anchor), multiply(relative, scalar));
195
+ const localSeconds = add(projectedInstant, rational(BigInt(anchor.offsetMinutes * 60)));
196
+ const dayNumber = floorRational(rational(localSeconds.numerator, localSeconds.denominator * 86400n));
197
+ const projected = dateFromCivilDayNumber(dayNumber);
198
+ if (projected === null) {
199
+ return Object.freeze({
200
+ state: "unavailable",
201
+ value: null,
202
+ unavailableCauses: Object.freeze(["calendar_range_overflow"]),
203
+ });
204
+ }
205
+ let secondOfDay = subtract(localSeconds, rational(dayNumber * 86400n));
206
+ const hour = Number(floorRational(rational(secondOfDay.numerator, secondOfDay.denominator * 3600n)));
207
+ secondOfDay = subtract(secondOfDay, rational(BigInt(hour * 3_600)));
208
+ const minute = Number(floorRational(rational(secondOfDay.numerator, secondOfDay.denominator * 60n)));
209
+ const second = subtract(secondOfDay, rational(BigInt(minute * 60)));
210
+ const text = normalizedDateTimeText({
211
+ ...projected,
212
+ hour,
213
+ minute,
214
+ second,
215
+ offsetMinutes: anchor.offsetMinutes,
216
+ });
217
+ return Object.freeze({
218
+ state: "available",
219
+ value: Object.freeze({
220
+ kind: "date_time",
221
+ sourceText: text,
222
+ ...projected,
223
+ hour,
224
+ minute,
225
+ second: Object.freeze({
226
+ numerator: second.numerator.toString(),
227
+ denominator: second.denominator.toString(),
228
+ }),
229
+ offsetMinutes: anchor.offsetMinutes,
230
+ }),
231
+ unavailableCauses: text === null
232
+ ? Object.freeze(["exact_datetime_text_unavailable"])
233
+ : Object.freeze([]),
234
+ });
235
+ }
236
+ //# sourceMappingURL=calendar-arithmetic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendar-arithmetic.js","sourceRoot":"","sources":["../../src/model/calendar-arithmetic.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAI3E,MAAM,CAAC,MAAM,4BAA4B,GAAG,MAAM,CAAC,MAAM,CAAC;IACxD,EAAE,EAAE,8BAAuC;IAC3C,OAAO,EAAE,CAAU;IACnB,SAAS,EAAE,2CAAoD;IAC/D,cAAc,EAAE,CAAU;CAC3B,CAAC,CAAC;AA+CH,SAAS,eAAe,CAAC,IAAY;IACnC,OAAO,CACL,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC;QAC7B,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAC/B,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,KAAK,CAAC,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;IACjC,CAAC;IACD,EAAE;IACF,EAAE;IACF,EAAE;IACF,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;CACJ,CAAC,CAAC;AAEH,MAAM,UAAU,cAAc,CAC5B,KAA4D;IAE5D,MAAM,WAAW,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAE,CAAC;IACnD,MAAM,cAAc,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzE,OAAO,CACL,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtD,MAAM,CAAC,WAAW,GAAG,cAAc,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CACrD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,KAAqE;IAErE,MAAM,YAAY,GAChB,cAAc,CAAC,KAAK,CAAC,GAAG,MAAO;QAC/B,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC;QAC9C,MAAM,CAAC,KAAK,CAAC,aAAa,GAAG,EAAE,CAAC,CAAC;IACnC,OAAO,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,IAA2B,EAC3B,KAA4B;IAE5B,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI;QAAE,OAAO,6BAA6B,CAAC;IACnE,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,KAAK,MAAM;QAChC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1E,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,UAAU,CAClC,KAAuE,CACxE,CAAC,CAAC;IACP,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,IAA2B,EAC3B,KAA4B;IAE5B,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,KAAK,EAAE,aAAa;YACpB,UAAU,EAAE,IAAI;YAChB,KAAK,EAAE,6BAA6B;SACrC,CAAC,CAAC;IACL,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,KAAK,MAAM;QACrC,CAAC,CAAC;YACE,IAAI,EAAE,eAAwB;YAC9B,KAAK,EAAE,QAAQ,CACb,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAC9B,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAChC;SACF;QACH,CAAC,CAAC;YACE,IAAI,EAAE,YAAqB;YAC3B,KAAK,EAAE,QAAQ,CACb,UAAU,CAAC,IAAI,CAAC,EAChB,UAAU,CACR,KAGC,CACF,CACF;SACF,CAAC;IACN,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,KAAK,EAAE,WAAW;QAClB,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;QACrC,KAAK,EAAE,IAAI;KACZ,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,UAA8B,EAC9B,MAAgB;IAEhB,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,UAAU,CAAC,IAAI;QACrB,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC;KAC1C,CAAC,CAAC;AACL,CAAC;AAED,SAAS,aAAa,CAAC,KAAe;IACpC,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,WAAW,CAAC;IACrD,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,WAAW,CAAC;IACtD,OAAO,KAAK,CAAC,SAAS,GAAG,EAAE,IAAI,SAAS,KAAK,EAAE;QAC7C,CAAC,CAAC,QAAQ,GAAG,EAAE;QACf,CAAC,CAAC,QAAQ,CAAC;AACf,CAAC;AAED,SAAS,sBAAsB,CAC7B,SAAiB;IAEjB,MAAM,UAAU,GAAG,cAAc,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;IACtE,IAAI,SAAS,GAAG,EAAE,IAAI,SAAS,GAAG,UAAU;QAAE,OAAO,IAAI,CAAC;IAC1D,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,KAAK,GAAG,MAAM,CAAC;IACnB,OAAO,KAAK,GAAG,CAAC,GAAG,KAAK,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,cAAc,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACpE,IAAI,QAAQ,IAAI,SAAS;YAAE,KAAK,GAAG,MAAM,CAAC;;YACrC,KAAK,GAAG,MAAM,CAAC;IACtB,CAAC;IACD,MAAM,IAAI,GAAG,KAAK,CAAC;IACnB,MAAM,SAAS,GAAG,MAAM,CACtB,SAAS,GAAG,cAAc,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CACvD,CAAC;IACF,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO,KAAK,GAAG,EAAE,EAAE,CAAC;QAClB,MAAM,SAAS,GAAG,cAAc,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACrE,IAAI,SAAS,GAAG,SAAS;YAAE,MAAM;QACjC,KAAK,IAAI,CAAC,CAAC;IACb,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,CAChB,SAAS,GAAG,cAAc,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CACzD,CAAC;IACF,IAAI,SAAS,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/B,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AAC9B,CAAC;AAED,SAAS,aAAa,CAAC,KAAe;IACpC,IAAI,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;IACpC,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO,WAAW,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC;QAC/B,WAAW,IAAI,EAAE,CAAC;QAClB,IAAI,IAAI,CAAC,CAAC;IACZ,CAAC;IACD,OAAO,WAAW,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC;QAC/B,WAAW,IAAI,EAAE,CAAC;QAClB,KAAK,IAAI,CAAC,CAAC;IACb,CAAC;IACD,IAAI,WAAW,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IACpC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS;QAC5B,EAAE,IAAI,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;QAC1B,EAAE,IAAI,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC;IAC9B,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;IAC1C,MAAM,QAAQ,GAAG,MAAM,GAAG,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;SACzC,QAAQ,EAAE;SACV,QAAQ,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACzD,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,GACnC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,QAAQ,EAC3C,EAAE,CAAC;AACL,CAAC;AAED,SAAS,GAAG,CAAC,KAAa,EAAE,KAAK,GAAG,CAAC;IACnC,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,sBAAsB,CAC7B,KAQC;IAED,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACjC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,KAAK,CAAC;QACtC,CAAC,CAAC,GAAG;QACL,CAAC,CAAC,GAAG,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GACpC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,CACpD,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;IAClD,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAChE,GAAG,CAAC,KAAK,CAAC,IAAI,CAChB,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GACzC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,QAAQ,EAC5C,GAAG,MAAM,EAAE,CAAC;AACd,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,MAA6B,EAC7B,aAA2B,EAC3B,QAAkB;IAElB,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC3B,IAAI,aAAa,KAAK,MAAM,EAAE,CAAC;YAC7B,OAAO,MAAM,CAAC,MAAM,CAAC;gBACnB,KAAK,EAAE,aAAa;gBACpB,KAAK,EAAE,IAAI;gBACX,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC;oBAC/B,0BAA0B;iBAClB,CAAC;aACZ,CAAC,CAAC;QACL,CAAC;QACD,IAAI,QAAQ,CAAC,WAAW,KAAK,EAAE,EAAE,CAAC;YAChC,OAAO,MAAM,CAAC,MAAM,CAAC;gBACnB,KAAK,EAAE,aAAa;gBACpB,KAAK,EAAE,IAAI;gBACX,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC;oBAC/B,4BAA4B;iBACpB,CAAC;aACZ,CAAC,CAAC;QACL,CAAC;QACD,MAAM,SAAS,GAAG,sBAAsB,CACtC,cAAc,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,SAAS,CAC5C,CAAC;QACF,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACvB,OAAO,MAAM,CAAC,MAAM,CAAC;gBACnB,KAAK,EAAE,aAAa;gBACpB,KAAK,EAAE,IAAI;gBACX,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,yBAAyB,CAAU,CAAC;aACvE,CAAC,CAAC;QACL,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;gBACnB,IAAI,EAAE,MAAM;gBACZ,UAAU,EAAE,GAAG,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,IAC3D,GAAG,CAAC,SAAS,CAAC,GAAG,CACnB,EAAE;gBACF,GAAG,SAAS;aACb,CAAC;YACF,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;SACrC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,KAAK,KAAK,CAAC,CAAC,CAAC,MAAO,CAAC,CAAC,CAAC,KAAM,CAAC,CAAC;IACpE,MAAM,gBAAgB,GAAG,GAAG,CAC1B,UAAU,CAAC,MAAM,CAAC,EAClB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAC3B,CAAC;IACF,MAAM,YAAY,GAAG,GAAG,CACtB,gBAAgB,EAChB,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,CAAC,CAC5C,CAAC;IACF,MAAM,SAAS,GAAG,aAAa,CAC7B,QAAQ,CAAC,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,WAAW,GAAG,MAAO,CAAC,CACrE,CAAC;IACF,MAAM,SAAS,GAAG,sBAAsB,CAAC,SAAS,CAAC,CAAC;IACpD,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACvB,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,KAAK,EAAE,aAAa;YACpB,KAAK,EAAE,IAAI;YACX,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,yBAAyB,CAAU,CAAC;SACvE,CAAC,CAAC;IACL,CAAC;IACD,IAAI,WAAW,GAAG,QAAQ,CACxB,YAAY,EACZ,QAAQ,CAAC,SAAS,GAAG,MAAO,CAAC,CAC9B,CAAC;IACF,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAC/B,QAAQ,CAAC,WAAW,CAAC,SAAS,EAAE,WAAW,CAAC,WAAW,GAAG,KAAM,CAAC,CAClE,CAAC,CAAC;IACH,WAAW,GAAG,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACpE,MAAM,MAAM,GAAG,MAAM,CAAC,aAAa,CACjC,QAAQ,CAAC,WAAW,CAAC,SAAS,EAAE,WAAW,CAAC,WAAW,GAAG,GAAG,CAAC,CAC/D,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IACpE,MAAM,IAAI,GAAG,sBAAsB,CAAC;QAClC,GAAG,SAAS;QACZ,IAAI;QACJ,MAAM;QACN,MAAM;QACN,aAAa,EAAE,MAAM,CAAC,aAAa;KACpC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,KAAK,EAAE,WAAW;QAClB,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;YACnB,IAAI,EAAE,WAAW;YACjB,UAAU,EAAE,IAAI;YAChB,GAAG,SAAS;YACZ,IAAI;YACJ,MAAM;YACN,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;gBACpB,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE;gBACtC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE;aAC3C,CAAC;YACF,aAAa,EAAE,MAAM,CAAC,aAAa;SACpC,CAAC;QACF,iBAAiB,EAAE,IAAI,KAAK,IAAI;YAC9B,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,iCAAiC,CAAU,CAAC;YAC7D,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;KACtB,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { Rational } from "./rational.js";
2
+ export interface DeclaredCalendarDate {
3
+ readonly kind: "date";
4
+ readonly sourceText: string;
5
+ readonly year: number;
6
+ readonly month: number;
7
+ readonly day: number;
8
+ }
9
+ export interface DeclaredCalendarDateTime {
10
+ readonly kind: "date_time";
11
+ readonly sourceText: string;
12
+ readonly year: number;
13
+ readonly month: number;
14
+ readonly day: number;
15
+ readonly hour: number;
16
+ readonly minute: number;
17
+ readonly second: Rational;
18
+ readonly offsetMinutes: number;
19
+ }
20
+ export type DeclaredCalendarValue = DeclaredCalendarDate | DeclaredCalendarDateTime;
21
+ export declare function parseDeclaredCalendarValue(sourceText: string): DeclaredCalendarValue | undefined;
22
+ //# sourceMappingURL=calendar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendar.d.ts","sourceRoot":"","sources":["../../src/model/calendar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAG9C,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,MAAM,qBAAqB,GAC7B,oBAAoB,GACpB,wBAAwB,CAAC;AAmC7B,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,MAAM,GACjB,qBAAqB,GAAG,SAAS,CA2DnC"}
@@ -0,0 +1,83 @@
1
+ import { rational } from "./rational.js";
2
+ function isLeapYear(year) {
3
+ return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);
4
+ }
5
+ function daysInMonth(year, month) {
6
+ switch (month) {
7
+ case 2:
8
+ return isLeapYear(year) ? 29 : 28;
9
+ case 4:
10
+ case 6:
11
+ case 9:
12
+ case 11:
13
+ return 30;
14
+ default:
15
+ return 31;
16
+ }
17
+ }
18
+ function validDate(year, month, day) {
19
+ return (month >= 1 &&
20
+ month <= 12 &&
21
+ day >= 1 &&
22
+ day <= daysInMonth(year, month));
23
+ }
24
+ function exactSecond(whole, fraction) {
25
+ if (fraction === undefined)
26
+ return rational(BigInt(whole));
27
+ const denominator = 10n ** BigInt(fraction.length);
28
+ return rational(BigInt(whole) * denominator + BigInt(fraction), denominator);
29
+ }
30
+ export function parseDeclaredCalendarValue(sourceText) {
31
+ const dateMatch = /^(\d{4})-(\d{2})-(\d{2})$/.exec(sourceText);
32
+ if (dateMatch !== null) {
33
+ const year = Number(dateMatch[1]);
34
+ const month = Number(dateMatch[2]);
35
+ const day = Number(dateMatch[3]);
36
+ if (!validDate(year, month, day))
37
+ return undefined;
38
+ return {
39
+ kind: "date",
40
+ sourceText,
41
+ year,
42
+ month,
43
+ day,
44
+ };
45
+ }
46
+ const dateTimeMatch = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.(\d+))?(Z|([+-])(\d{2}):(\d{2}))$/.exec(sourceText);
47
+ if (dateTimeMatch === null)
48
+ return undefined;
49
+ const year = Number(dateTimeMatch[1]);
50
+ const month = Number(dateTimeMatch[2]);
51
+ const day = Number(dateTimeMatch[3]);
52
+ const hour = Number(dateTimeMatch[4]);
53
+ const minute = Number(dateTimeMatch[5]);
54
+ const secondWhole = Number(dateTimeMatch[6]);
55
+ const offsetHour = dateTimeMatch[9] === undefined
56
+ ? 0
57
+ : Number(dateTimeMatch[10]);
58
+ const offsetMinute = dateTimeMatch[9] === undefined
59
+ ? 0
60
+ : Number(dateTimeMatch[11]);
61
+ if (!validDate(year, month, day) ||
62
+ hour > 23 ||
63
+ minute > 59 ||
64
+ secondWhole > 59 ||
65
+ offsetHour > 23 ||
66
+ offsetMinute > 59) {
67
+ return undefined;
68
+ }
69
+ const offsetSign = dateTimeMatch[9] === "-" ? -1 : 1;
70
+ const offsetMagnitude = offsetHour * 60 + offsetMinute;
71
+ return {
72
+ kind: "date_time",
73
+ sourceText,
74
+ year,
75
+ month,
76
+ day,
77
+ hour,
78
+ minute,
79
+ second: exactSecond(dateTimeMatch[6], dateTimeMatch[7]),
80
+ offsetMinutes: offsetMagnitude === 0 ? 0 : offsetSign * offsetMagnitude,
81
+ };
82
+ }
83
+ //# sourceMappingURL=calendar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendar.js","sourceRoot":"","sources":["../../src/model/calendar.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AA0BzC,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,KAAK,CAAC,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,WAAW,CAAC,IAAY,EAAE,KAAa;IAC9C,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,CAAC;YACJ,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpC,KAAK,CAAC,CAAC;QACP,KAAK,CAAC,CAAC;QACP,KAAK,CAAC,CAAC;QACP,KAAK,EAAE;YACL,OAAO,EAAE,CAAC;QACZ;YACE,OAAO,EAAE,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,IAAY,EAAE,KAAa,EAAE,GAAW;IACzD,OAAO,CACL,KAAK,IAAI,CAAC;QACV,KAAK,IAAI,EAAE;QACX,GAAG,IAAI,CAAC;QACR,GAAG,IAAI,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAChC,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,KAAa,EAAE,QAA4B;IAC9D,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3D,MAAM,WAAW,GAAG,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACnD,OAAO,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,UAAkB;IAElB,MAAM,SAAS,GAAG,2BAA2B,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC/D,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC;YAAE,OAAO,SAAS,CAAC;QACnD,OAAO;YACL,IAAI,EAAE,MAAM;YACZ,UAAU;YACV,IAAI;YACJ,KAAK;YACL,GAAG;SACJ,CAAC;IACJ,CAAC;IAED,MAAM,aAAa,GACjB,wFAAwF,CAAC,IAAI,CAC3F,UAAU,CACX,CAAC;IACJ,IAAI,aAAa,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAE7C,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,MAAM,GAAG,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IACxC,MAAM,WAAW,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,aAAa,CAAC,CAAC,CAAC,KAAK,SAAS;QAC/C,CAAC,CAAC,CAAC;QACH,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9B,MAAM,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC,KAAK,SAAS;QACjD,CAAC,CAAC,CAAC;QACH,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;IAE9B,IACE,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC;QAC5B,IAAI,GAAG,EAAE;QACT,MAAM,GAAG,EAAE;QACX,WAAW,GAAG,EAAE;QAChB,UAAU,GAAG,EAAE;QACf,YAAY,GAAG,EAAE,EACjB,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,UAAU,GAAG,aAAa,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,MAAM,eAAe,GAAG,UAAU,GAAG,EAAE,GAAG,YAAY,CAAC;IACvD,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,UAAU;QACV,IAAI;QACJ,KAAK;QACL,GAAG;QACH,IAAI;QACJ,MAAM;QACN,MAAM,EAAE,WAAW,CAAC,aAAa,CAAC,CAAC,CAAE,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;QACxD,aAAa,EAAE,eAAe,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,eAAe;KACxE,CAAC;AACJ,CAAC"}
@@ -0,0 +1,22 @@
1
+ export declare const GRAMMAR_1_DECLARATION_FIELD_ORDER: {
2
+ readonly project: readonly ["version", "title", "description", "as_of", "duration_unit", "velocity", "finish", "critical_epsilon", "target_duration"];
3
+ readonly resource: readonly ["title", "description", "capacity", "tags"];
4
+ readonly milestone: readonly ["title", "description", "state", "tags"];
5
+ readonly task: readonly ["title", "description", "duration", "estimate", "status", "priority", "requires", "owner", "tags", "blocked_reason", "source"];
6
+ readonly gate: readonly ["reason"];
7
+ };
8
+ export declare const TARGET_GRAMMAR_2_DECLARATION_FIELD_ORDER: {
9
+ readonly project: readonly ["version", "title", "description", "as_of", "duration_unit", "velocity", "finish", "critical_epsilon", "target_duration"];
10
+ readonly resource: readonly ["title", "description", "capacity", "tags"];
11
+ readonly gate: readonly ["reason"];
12
+ readonly milestone: readonly ["title", "description", "state", "deadline", "tags"];
13
+ readonly task: readonly ["title", "description", "duration", "estimate", "not_before", "deadline", "status", "priority", "requires", "owner", "tags", "blocked_reason", "source"];
14
+ };
15
+ export declare const TARGET_GRAMMAR_4_DECLARATION_FIELD_ORDER: {
16
+ readonly resource: readonly ["title", "description", "capacity", "tags"];
17
+ readonly gate: readonly ["reason"];
18
+ readonly milestone: readonly ["title", "description", "state", "deadline", "tags"];
19
+ readonly task: readonly ["title", "description", "duration", "estimate", "not_before", "deadline", "status", "priority", "requires", "owner", "tags", "blocked_reason", "source"];
20
+ readonly project: readonly ["version", "title", "description", "as_of", "duration_unit", "velocity", "finish", "goal_owner", "goal_delegates", "dag_owner", "dag_delegates", "critical_epsilon", "target_duration"];
21
+ };
22
+ //# sourceMappingURL=declaration-fields.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"declaration-fields.d.ts","sourceRoot":"","sources":["../../src/model/declaration-fields.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,iCAAiC;;;;;;CA4B4B,CAAC;AAE3E,eAAO,MAAM,wCAAwC;;;;;;CAkBqB,CAAC;AAE3E,eAAO,MAAM,wCAAwC;;;;;;CAiBqB,CAAC"}
@@ -0,0 +1,72 @@
1
+ function freezeFieldOrder(fieldOrder) {
2
+ for (const fields of Object.values(fieldOrder))
3
+ Object.freeze(fields);
4
+ return Object.freeze(fieldOrder);
5
+ }
6
+ export const GRAMMAR_1_DECLARATION_FIELD_ORDER = freezeFieldOrder({
7
+ project: [
8
+ "version",
9
+ "title",
10
+ "description",
11
+ "as_of",
12
+ "duration_unit",
13
+ "velocity",
14
+ "finish",
15
+ "critical_epsilon",
16
+ "target_duration",
17
+ ],
18
+ resource: ["title", "description", "capacity", "tags"],
19
+ milestone: ["title", "description", "state", "tags"],
20
+ task: [
21
+ "title",
22
+ "description",
23
+ "duration",
24
+ "estimate",
25
+ "status",
26
+ "priority",
27
+ "requires",
28
+ "owner",
29
+ "tags",
30
+ "blocked_reason",
31
+ "source",
32
+ ],
33
+ gate: ["reason"],
34
+ });
35
+ export const TARGET_GRAMMAR_2_DECLARATION_FIELD_ORDER = freezeFieldOrder({
36
+ ...GRAMMAR_1_DECLARATION_FIELD_ORDER,
37
+ milestone: ["title", "description", "state", "deadline", "tags"],
38
+ task: [
39
+ "title",
40
+ "description",
41
+ "duration",
42
+ "estimate",
43
+ "not_before",
44
+ "deadline",
45
+ "status",
46
+ "priority",
47
+ "requires",
48
+ "owner",
49
+ "tags",
50
+ "blocked_reason",
51
+ "source",
52
+ ],
53
+ });
54
+ export const TARGET_GRAMMAR_4_DECLARATION_FIELD_ORDER = freezeFieldOrder({
55
+ ...TARGET_GRAMMAR_2_DECLARATION_FIELD_ORDER,
56
+ project: [
57
+ "version",
58
+ "title",
59
+ "description",
60
+ "as_of",
61
+ "duration_unit",
62
+ "velocity",
63
+ "finish",
64
+ "goal_owner",
65
+ "goal_delegates",
66
+ "dag_owner",
67
+ "dag_delegates",
68
+ "critical_epsilon",
69
+ "target_duration",
70
+ ],
71
+ });
72
+ //# sourceMappingURL=declaration-fields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"declaration-fields.js","sourceRoot":"","sources":["../../src/model/declaration-fields.ts"],"names":[],"mappings":"AAEA,SAAS,gBAAgB,CAEvB,UAAa;IACb,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;QAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACtE,OAAO,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,CAAC,MAAM,iCAAiC,GAAG,gBAAgB,CAAC;IAChE,OAAO,EAAE;QACP,SAAS;QACT,OAAO;QACP,aAAa;QACb,OAAO;QACP,eAAe;QACf,UAAU;QACV,QAAQ;QACR,kBAAkB;QAClB,iBAAiB;KAClB;IACD,QAAQ,EAAE,CAAC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,CAAC;IACtD,SAAS,EAAE,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,CAAC;IACpD,IAAI,EAAE;QACJ,OAAO;QACP,aAAa;QACb,UAAU;QACV,UAAU;QACV,QAAQ;QACR,UAAU;QACV,UAAU;QACV,OAAO;QACP,MAAM;QACN,gBAAgB;QAChB,QAAQ;KACT;IACD,IAAI,EAAE,CAAC,QAAQ,CAAC;CACuD,CAAC,CAAC;AAE3E,MAAM,CAAC,MAAM,wCAAwC,GAAG,gBAAgB,CAAC;IACvE,GAAG,iCAAiC;IACpC,SAAS,EAAE,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC;IAChE,IAAI,EAAE;QACJ,OAAO;QACP,aAAa;QACb,UAAU;QACV,UAAU;QACV,YAAY;QACZ,UAAU;QACV,QAAQ;QACR,UAAU;QACV,UAAU;QACV,OAAO;QACP,MAAM;QACN,gBAAgB;QAChB,QAAQ;KACT;CACsE,CAAC,CAAC;AAE3E,MAAM,CAAC,MAAM,wCAAwC,GAAG,gBAAgB,CAAC;IACvE,GAAG,wCAAwC;IAC3C,OAAO,EAAE;QACP,SAAS;QACT,OAAO;QACP,aAAa;QACb,OAAO;QACP,eAAe;QACf,UAAU;QACV,QAAQ;QACR,YAAY;QACZ,gBAAgB;QAChB,WAAW;QACX,eAAe;QACf,kBAAkB;QAClB,iBAAiB;KAClB;CACsE,CAAC,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { Rational } from "./rational.js";
2
+ import type { DurationUnit } from "./units.js";
3
+ export type ExactDurationSourceClassification = "decimal" | "fraction";
4
+ export interface ExactDurationSourceToken {
5
+ readonly classification: ExactDurationSourceClassification;
6
+ readonly token: string;
7
+ }
8
+ export declare function serializeExactDurationSource(value: Rational, unit: DurationUnit): ExactDurationSourceToken;
9
+ export declare function canonicalizeExactDurationSourceToken(source: string): ExactDurationSourceToken | null;
10
+ //# sourceMappingURL=exact-duration-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exact-duration-source.d.ts","sourceRoot":"","sources":["../../src/model/exact-duration-source.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,MAAM,iCAAiC,GAAG,SAAS,GAAG,UAAU,CAAC;AAEvE,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,cAAc,EAAE,iCAAiC,CAAC;IAC3D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAoCD,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,QAAQ,EACf,IAAI,EAAE,YAAY,GACjB,wBAAwB,CAmB1B;AAED,wBAAgB,oCAAoC,CAClD,MAAM,EAAE,MAAM,GACb,wBAAwB,GAAG,IAAI,CA+BjC"}
@@ -0,0 +1,69 @@
1
+ import { rational } from "./rational.js";
2
+ import { durationSuffix } from "./units.js";
3
+ const exactDurationTokenPattern = /^([0-9]+)(?:\.([0-9]+)|\/([0-9]+))?([dhp])$/;
4
+ function divideOut(value, factor) {
5
+ let remainder = value;
6
+ let exponent = 0;
7
+ while (remainder % factor === 0n) {
8
+ remainder /= factor;
9
+ exponent += 1;
10
+ }
11
+ return { remainder, exponent };
12
+ }
13
+ function exactTerminatingDecimal(value) {
14
+ const powersOfTwo = divideOut(value.denominator, 2n);
15
+ const powersOfFive = divideOut(powersOfTwo.remainder, 5n);
16
+ if (powersOfFive.remainder !== 1n)
17
+ return null;
18
+ const scale = Math.max(powersOfTwo.exponent, powersOfFive.exponent);
19
+ if (scale === 0)
20
+ return value.numerator.toString();
21
+ const scaledNumerator = value.numerator *
22
+ 2n ** BigInt(scale - powersOfTwo.exponent) *
23
+ 5n ** BigInt(scale - powersOfFive.exponent);
24
+ const digits = scaledNumerator.toString().padStart(scale + 1, "0");
25
+ const whole = digits.slice(0, -scale);
26
+ const fraction = digits.slice(-scale).replace(/0+$/, "");
27
+ return fraction === "" ? whole : `${whole}.${fraction}`;
28
+ }
29
+ export function serializeExactDurationSource(value, unit) {
30
+ const normalized = rational(value.numerator, value.denominator);
31
+ if (normalized.numerator < 0n) {
32
+ throw new Error("Duration Rational must not be negative");
33
+ }
34
+ const suffix = durationSuffix(unit);
35
+ if (normalized.numerator === 0n) {
36
+ return { classification: "decimal", token: `0${suffix}` };
37
+ }
38
+ const decimal = exactTerminatingDecimal(normalized);
39
+ if (decimal !== null) {
40
+ return { classification: "decimal", token: `${decimal}${suffix}` };
41
+ }
42
+ return {
43
+ classification: "fraction",
44
+ token: `${normalized.numerator}/${normalized.denominator}${suffix}`,
45
+ };
46
+ }
47
+ export function canonicalizeExactDurationSourceToken(source) {
48
+ const match = exactDurationTokenPattern.exec(source);
49
+ if (match === null)
50
+ return null;
51
+ const whole = match[1];
52
+ const decimalFraction = match[2];
53
+ const fractionDenominator = match[3];
54
+ const suffix = match[4];
55
+ if (whole === undefined ||
56
+ (suffix !== "d" && suffix !== "h" && suffix !== "p")) {
57
+ return null;
58
+ }
59
+ const unit = suffix === "d" ? "day" : suffix === "h" ? "hour" : "point";
60
+ if (fractionDenominator !== undefined) {
61
+ const denominator = BigInt(fractionDenominator);
62
+ if (denominator === 0n)
63
+ return null;
64
+ return serializeExactDurationSource(rational(BigInt(whole), denominator), unit);
65
+ }
66
+ const fraction = decimalFraction ?? "";
67
+ return serializeExactDurationSource(rational(BigInt(`${whole}${fraction}`), 10n ** BigInt(fraction.length)), unit);
68
+ }
69
+ //# sourceMappingURL=exact-duration-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exact-duration-source.js","sourceRoot":"","sources":["../../src/model/exact-duration-source.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { DurationValue } from "./syntax.js";
1
+ import type { ExactDurationValue } from "./syntax.js";
2
2
  export interface Rational {
3
3
  readonly numerator: bigint;
4
4
  readonly denominator: bigint;
@@ -6,7 +6,7 @@ export interface Rational {
6
6
  export declare function rational(numerator: bigint, denominator?: bigint): Rational;
7
7
  export declare const ZERO: Rational;
8
8
  export declare const ONE: Rational;
9
- export declare function rationalFromDuration(value: DurationValue): Rational;
9
+ export declare function rationalFromDuration(value: ExactDurationValue): Rational;
10
10
  export declare function add(left: Rational, right: Rational): Rational;
11
11
  export declare function subtract(left: Rational, right: Rational): Rational;
12
12
  export declare function multiply(left: Rational, right: Rational): Rational;
@@ -1 +1 @@
1
- {"version":3,"file":"rational.d.ts","sourceRoot":"","sources":["../../src/model/rational.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAaD,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,SAAK,GAAG,QAAQ,CAStE;AAED,eAAO,MAAM,IAAI,UAAe,CAAC;AACjC,eAAO,MAAM,GAAG,UAAe,CAAC;AAEhC,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,aAAa,GAAG,QAAQ,CAEnE;AAED,wBAAgB,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,GAAG,QAAQ,CAK7D;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,GAAG,QAAQ,CAKlE;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,GAAG,QAAQ,CAKlE;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,GAAG,QAAQ,CAMhE;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,QAAQ,GAAG,QAAQ,CAEhD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,QAAQ,CAIlD;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,GAAG,MAAM,CAI/D;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,GAAG,QAAQ,CAEjE;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,GAAG,QAAQ,CAEjE;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAE/C;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAiBxE"}
1
+ {"version":3,"file":"rational.d.ts","sourceRoot":"","sources":["../../src/model/rational.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtD,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAaD,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,SAAK,GAAG,QAAQ,CAStE;AAED,eAAO,MAAM,IAAI,UAAe,CAAC;AACjC,eAAO,MAAM,GAAG,UAAe,CAAC;AAEhC,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,kBAAkB,GAAG,QAAQ,CAIxE;AAED,wBAAgB,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,GAAG,QAAQ,CAK7D;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,GAAG,QAAQ,CAKlE;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,GAAG,QAAQ,CAKlE;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,GAAG,QAAQ,CAMhE;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,QAAQ,GAAG,QAAQ,CAEhD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,QAAQ,CAIlD;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,GAAG,MAAM,CAI/D;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,GAAG,QAAQ,CAEjE;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,GAAG,QAAQ,CAEjE;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAE/C;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAiBxE"}
@@ -23,7 +23,9 @@ export function rational(numerator, denominator = 1n) {
23
23
  export const ZERO = rational(0n);
24
24
  export const ONE = rational(1n);
25
25
  export function rationalFromDuration(value) {
26
- return rational(value.digits, 10n ** BigInt(value.scale));
26
+ return "numerator" in value
27
+ ? rational(value.numerator, value.denominator)
28
+ : rational(value.digits, 10n ** BigInt(value.scale));
27
29
  }
28
30
  export function add(left, right) {
29
31
  return rational(left.numerator * right.denominator + right.numerator * left.denominator, left.denominator * right.denominator);
@@ -1 +1 @@
1
- {"version":3,"file":"rational.js","sourceRoot":"","sources":["../../src/model/rational.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rational.js","sourceRoot":"","sources":["../../src/model/rational.ts"],"names":[],"mappings":"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"}