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