dirvi-lib 0.8.1 → 0.9.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 (194) hide show
  1. package/dist/app/app-api.d.ts +74 -0
  2. package/dist/app/app-api.d.ts.map +1 -0
  3. package/dist/app/app-api.js +11 -0
  4. package/dist/app/effect-to-action.d.ts +6 -0
  5. package/dist/app/effect-to-action.d.ts.map +1 -0
  6. package/dist/app/effect-to-action.js +120 -0
  7. package/dist/app/index.d.ts +6 -0
  8. package/dist/app/index.d.ts.map +1 -0
  9. package/dist/app/index.js +5 -0
  10. package/dist/app/reducer-action.d.ts +40 -0
  11. package/dist/app/reducer-action.d.ts.map +1 -0
  12. package/dist/app/reducer.d.ts +5 -0
  13. package/dist/app/reducer.d.ts.map +1 -0
  14. package/dist/app/reducer.js +115 -0
  15. package/dist/app/view-api.d.ts +11 -0
  16. package/dist/app/view-api.d.ts.map +1 -0
  17. package/dist/feedback/feedback.impl.d.ts +9 -0
  18. package/dist/feedback/feedback.impl.d.ts.map +1 -0
  19. package/dist/feedback/feedback.impl.js +34 -0
  20. package/dist/feedback/feedback.types.d.ts +24 -0
  21. package/dist/feedback/feedback.types.d.ts.map +1 -0
  22. package/dist/feedback/index.d.ts +3 -0
  23. package/dist/feedback/index.d.ts.map +1 -0
  24. package/dist/feedback/index.js +1 -0
  25. package/dist/index.d.ts +5 -7
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +5 -7
  28. package/dist/input/application/index.d.ts.map +1 -0
  29. package/dist/input/application/intent-to-effect-no-state.test.d.ts.map +1 -0
  30. package/dist/input/application/intent-to-effect.d.ts +14 -0
  31. package/dist/input/application/intent-to-effect.d.ts.map +1 -0
  32. package/dist/{tree-surfer-ui → input}/application/intent-to-effect.js +66 -42
  33. package/dist/input/application/parse-command.d.ts +14 -0
  34. package/dist/input/application/parse-command.d.ts.map +1 -0
  35. package/dist/input/application/parse-command.js +92 -0
  36. package/dist/input/application/parse-normal-command.d.ts +12 -0
  37. package/dist/input/application/parse-normal-command.d.ts.map +1 -0
  38. package/dist/input/application/parse-normal-command.js +89 -0
  39. package/dist/input/application/tokenize-normal-command.d.ts +24 -0
  40. package/dist/input/application/tokenize-normal-command.d.ts.map +1 -0
  41. package/dist/input/application/tokenize-normal-command.js +110 -0
  42. package/dist/{tree-surfer-ui → input}/application/user-input-to-intent.d.ts +4 -2
  43. package/dist/input/application/user-input-to-intent.d.ts.map +1 -0
  44. package/dist/{tree-surfer-ui → input}/application/user-input-to-intent.js +9 -6
  45. package/dist/input/application/user-input-to-intent.test.d.ts.map +1 -0
  46. package/dist/input/domain/effect.d.ts +84 -0
  47. package/dist/input/domain/effect.d.ts.map +1 -0
  48. package/dist/input/domain/index.d.ts.map +1 -0
  49. package/dist/input/domain/input-mode-state.d.ts.map +1 -0
  50. package/dist/input/domain/intent.d.ts.map +1 -0
  51. package/dist/input/domain/user-input.d.ts.map +1 -0
  52. package/dist/trees/cursor.d.ts.map +1 -0
  53. package/dist/trees/fold-node/deprecated/fold-node.impl.d.ts +10 -0
  54. package/dist/trees/fold-node/deprecated/fold-node.impl.d.ts.map +1 -0
  55. package/dist/trees/fold-node/deprecated/fold-node.impl.js +248 -0
  56. package/dist/trees/fold-node/deprecated/fold-node.test.d.ts +2 -0
  57. package/dist/trees/fold-node/deprecated/fold-node.test.d.ts.map +1 -0
  58. package/dist/trees/fold-node/deprecated/fold-node.test.js +130 -0
  59. package/dist/{tree-surfer/fold-node → trees/fold-node/deprecated}/fold-node.types.d.ts +15 -76
  60. package/dist/trees/fold-node/deprecated/fold-node.types.d.ts.map +1 -0
  61. package/dist/trees/fold-node/fold-node.impl.d.ts +16 -0
  62. package/dist/trees/fold-node/fold-node.impl.d.ts.map +1 -0
  63. package/dist/trees/fold-node/fold-node.impl.js +472 -0
  64. package/dist/trees/fold-node/fold-node.model.d.ts +120 -0
  65. package/dist/trees/fold-node/fold-node.model.d.ts.map +1 -0
  66. package/dist/trees/fold-node/fold-node.model.js +80 -0
  67. package/dist/trees/fold-node/fold-node.types.d.ts +214 -0
  68. package/dist/trees/fold-node/fold-node.types.d.ts.map +1 -0
  69. package/dist/trees/fold-node/index.d.ts +4 -0
  70. package/dist/trees/fold-node/index.d.ts.map +1 -0
  71. package/dist/trees/fold-node/index.js +3 -0
  72. package/dist/trees/index.d.ts +9 -0
  73. package/dist/trees/index.d.ts.map +1 -0
  74. package/dist/trees/index.js +8 -0
  75. package/dist/trees/nav-node/nav-node.impl.d.ts +29 -0
  76. package/dist/trees/nav-node/nav-node.impl.d.ts.map +1 -0
  77. package/dist/{tree-surfer → trees}/nav-node/nav-node.impl.js +89 -42
  78. package/dist/trees/nav-node/nav-node.types.d.ts +103 -0
  79. package/dist/trees/nav-node/nav-node.types.d.ts.map +1 -0
  80. package/dist/trees/nav-node/nav-node.types.js +1 -0
  81. package/dist/trees/state/state.impl.d.ts +8 -0
  82. package/dist/trees/state/state.impl.d.ts.map +1 -0
  83. package/dist/trees/state/state.impl.js +128 -0
  84. package/dist/trees/state/state.schemas.d.ts +25 -0
  85. package/dist/trees/state/state.schemas.d.ts.map +1 -0
  86. package/dist/trees/state/state.schemas.js +17 -0
  87. package/dist/trees/state/state.types.d.ts +36 -0
  88. package/dist/trees/state/state.types.d.ts.map +1 -0
  89. package/dist/trees/state/state.types.js +1 -0
  90. package/dist/trees/tree-node/deprecated/tree-node.arb.d.ts.map +1 -0
  91. package/dist/trees/tree-node/deprecated/tree-node.arb.debug.test.d.ts.map +1 -0
  92. package/dist/{tree-surfer/tree-node → trees/tree-node/deprecated}/tree-node.arb.debug.test.js +1 -1
  93. package/dist/trees/tree-node/deprecated/tree-node.impl.d.ts.map +1 -0
  94. package/dist/trees/tree-node/deprecated/tree-node.schemas.d.ts.map +1 -0
  95. package/dist/trees/tree-node/deprecated/tree-node.test.d.ts.map +1 -0
  96. package/dist/trees/tree-node/deprecated/tree-node.types.d.ts.map +1 -0
  97. package/dist/trees/tree-node/deprecated/tree-node.types.js +1 -0
  98. package/dist/trees/tree-node/index.d.ts +5 -0
  99. package/dist/trees/tree-node/index.d.ts.map +1 -0
  100. package/dist/trees/tree-node/index.js +2 -0
  101. package/dist/trees/tree-node/tree-node.arb.d.ts +104 -0
  102. package/dist/trees/tree-node/tree-node.arb.d.ts.map +1 -0
  103. package/dist/trees/tree-node/tree-node.arb.js +191 -0
  104. package/dist/trees/tree-node/tree-node.impl.d.ts +15 -0
  105. package/dist/trees/tree-node/tree-node.impl.d.ts.map +1 -0
  106. package/dist/trees/tree-node/tree-node.impl.js +286 -0
  107. package/dist/trees/tree-node/tree-node.model.d.ts +78 -0
  108. package/dist/trees/tree-node/tree-node.model.d.ts.map +1 -0
  109. package/dist/trees/tree-node/tree-node.model.js +37 -0
  110. package/dist/trees/tree-node/tree-node.types.d.ts +419 -0
  111. package/dist/trees/tree-node/tree-node.types.d.ts.map +1 -0
  112. package/dist/trees/tree-node/tree-node.types.js +1 -0
  113. package/package.json +1 -1
  114. package/dist/tree-surfer/cursor.d.ts.map +0 -1
  115. package/dist/tree-surfer/fold-node/fold-node.arb.d.ts +0 -2
  116. package/dist/tree-surfer/fold-node/fold-node.arb.d.ts.map +0 -1
  117. package/dist/tree-surfer/fold-node/fold-node.impl.d.ts +0 -4
  118. package/dist/tree-surfer/fold-node/fold-node.impl.d.ts.map +0 -1
  119. package/dist/tree-surfer/fold-node/fold-node.impl.js +0 -149
  120. package/dist/tree-surfer/fold-node/fold-node.schema.d.ts +0 -5
  121. package/dist/tree-surfer/fold-node/fold-node.schema.d.ts.map +0 -1
  122. package/dist/tree-surfer/fold-node/fold-node.schema.js +0 -9
  123. package/dist/tree-surfer/fold-node/fold-node.types.d.ts.map +0 -1
  124. package/dist/tree-surfer/fold-node/tree-node.test.d.ts.map +0 -1
  125. package/dist/tree-surfer/fold-node/tree-node.test.js +0 -90
  126. package/dist/tree-surfer/index.d.ts +0 -13
  127. package/dist/tree-surfer/index.d.ts.map +0 -1
  128. package/dist/tree-surfer/index.js +0 -12
  129. package/dist/tree-surfer/nav-node/nav-node.impl.d.ts +0 -6
  130. package/dist/tree-surfer/nav-node/nav-node.impl.d.ts.map +0 -1
  131. package/dist/tree-surfer/nav-node/nav-node.types.d.ts +0 -70
  132. package/dist/tree-surfer/nav-node/nav-node.types.d.ts.map +0 -1
  133. package/dist/tree-surfer/state/state.impl.d.ts +0 -7
  134. package/dist/tree-surfer/state/state.impl.d.ts.map +0 -1
  135. package/dist/tree-surfer/state/state.impl.js +0 -89
  136. package/dist/tree-surfer/state/state.schemas.d.ts +0 -9
  137. package/dist/tree-surfer/state/state.schemas.d.ts.map +0 -1
  138. package/dist/tree-surfer/state/state.schemas.js +0 -8
  139. package/dist/tree-surfer/state/state.types.d.ts +0 -21
  140. package/dist/tree-surfer/state/state.types.d.ts.map +0 -1
  141. package/dist/tree-surfer/tree-node/tree-node.arb.d.ts.map +0 -1
  142. package/dist/tree-surfer/tree-node/tree-node.arb.debug.test.d.ts.map +0 -1
  143. package/dist/tree-surfer/tree-node/tree-node.impl.d.ts.map +0 -1
  144. package/dist/tree-surfer/tree-node/tree-node.schemas.d.ts.map +0 -1
  145. package/dist/tree-surfer/tree-node/tree-node.test.d.ts +0 -2
  146. package/dist/tree-surfer/tree-node/tree-node.test.d.ts.map +0 -1
  147. package/dist/tree-surfer/tree-node/tree-node.types.d.ts.map +0 -1
  148. package/dist/tree-surfer-ui/application/index.d.ts.map +0 -1
  149. package/dist/tree-surfer-ui/application/intent-to-effect-no-state.test.d.ts.map +0 -1
  150. package/dist/tree-surfer-ui/application/intent-to-effect.d.ts +0 -10
  151. package/dist/tree-surfer-ui/application/intent-to-effect.d.ts.map +0 -1
  152. package/dist/tree-surfer-ui/application/parse-command.d.ts +0 -4
  153. package/dist/tree-surfer-ui/application/parse-command.d.ts.map +0 -1
  154. package/dist/tree-surfer-ui/application/parse-command.js +0 -48
  155. package/dist/tree-surfer-ui/application/user-input-to-intent.d.ts.map +0 -1
  156. package/dist/tree-surfer-ui/application/user-input-to-intent.test.d.ts.map +0 -1
  157. package/dist/tree-surfer-ui/domain/effect.d.ts +0 -43
  158. package/dist/tree-surfer-ui/domain/effect.d.ts.map +0 -1
  159. package/dist/tree-surfer-ui/domain/index.d.ts.map +0 -1
  160. package/dist/tree-surfer-ui/domain/input-mode-state.d.ts.map +0 -1
  161. package/dist/tree-surfer-ui/domain/intent.d.ts.map +0 -1
  162. package/dist/tree-surfer-ui/domain/user-input.d.ts.map +0 -1
  163. /package/dist/{tree-surfer-ui/domain/effect.js → app/reducer-action.js} +0 -0
  164. /package/dist/{tree-surfer-ui/domain/input-mode-state.js → app/view-api.js} +0 -0
  165. /package/dist/{tree-surfer-ui/domain/intent.js → feedback/feedback.types.js} +0 -0
  166. /package/dist/{tree-surfer-ui → input}/application/index.d.ts +0 -0
  167. /package/dist/{tree-surfer-ui → input}/application/index.js +0 -0
  168. /package/dist/{tree-surfer-ui → input}/application/intent-to-effect-no-state.test.d.ts +0 -0
  169. /package/dist/{tree-surfer-ui → input}/application/intent-to-effect-no-state.test.js +0 -0
  170. /package/dist/{tree-surfer-ui → input}/application/user-input-to-intent.test.d.ts +0 -0
  171. /package/dist/{tree-surfer-ui → input}/application/user-input-to-intent.test.js +0 -0
  172. /package/dist/{tree-surfer-ui/domain/user-input.js → input/domain/effect.js} +0 -0
  173. /package/dist/{tree-surfer-ui → input}/domain/index.d.ts +0 -0
  174. /package/dist/{tree-surfer-ui → input}/domain/index.js +0 -0
  175. /package/dist/{tree-surfer-ui → input}/domain/input-mode-state.d.ts +0 -0
  176. /package/dist/{tree-surfer/fold-node/fold-node.arb.js → input/domain/input-mode-state.js} +0 -0
  177. /package/dist/{tree-surfer-ui → input}/domain/intent.d.ts +0 -0
  178. /package/dist/{tree-surfer/fold-node/fold-node.types.js → input/domain/intent.js} +0 -0
  179. /package/dist/{tree-surfer-ui → input}/domain/user-input.d.ts +0 -0
  180. /package/dist/{tree-surfer/nav-node/nav-node.types.js → input/domain/user-input.js} +0 -0
  181. /package/dist/{tree-surfer → trees}/cursor.d.ts +0 -0
  182. /package/dist/{tree-surfer → trees}/cursor.js +0 -0
  183. /package/dist/{tree-surfer/state/state.types.js → trees/fold-node/deprecated/fold-node.types.js} +0 -0
  184. /package/dist/{tree-surfer/tree-node/tree-node.types.js → trees/fold-node/fold-node.types.js} +0 -0
  185. /package/dist/{tree-surfer/tree-node → trees/tree-node/deprecated}/tree-node.arb.d.ts +0 -0
  186. /package/dist/{tree-surfer/tree-node → trees/tree-node/deprecated}/tree-node.arb.debug.test.d.ts +0 -0
  187. /package/dist/{tree-surfer/tree-node → trees/tree-node/deprecated}/tree-node.arb.js +0 -0
  188. /package/dist/{tree-surfer/tree-node → trees/tree-node/deprecated}/tree-node.impl.d.ts +0 -0
  189. /package/dist/{tree-surfer/tree-node → trees/tree-node/deprecated}/tree-node.impl.js +0 -0
  190. /package/dist/{tree-surfer/tree-node → trees/tree-node/deprecated}/tree-node.schemas.d.ts +0 -0
  191. /package/dist/{tree-surfer/tree-node → trees/tree-node/deprecated}/tree-node.schemas.js +0 -0
  192. /package/dist/{tree-surfer/fold-node → trees/tree-node/deprecated}/tree-node.test.d.ts +0 -0
  193. /package/dist/{tree-surfer/tree-node → trees/tree-node/deprecated}/tree-node.test.js +0 -0
  194. /package/dist/{tree-surfer/tree-node → trees/tree-node/deprecated}/tree-node.types.d.ts +0 -0
@@ -1,4 +1,5 @@
1
1
  import { parseCommand } from './parse-command.js';
2
+ import { parseNormalCommand } from './parse-normal-command.js';
2
3
  export function createIntentToEffect(stateApi, cursorApi, treeNodeApi) {
3
4
  return (intent, state) => {
4
5
  switch (intent.intentType) {
@@ -7,7 +8,7 @@ export function createIntentToEffect(stateApi, cursorApi, treeNodeApi) {
7
8
  case 'normalRight':
8
9
  return normalInteractRightToEffect(state, stateApi, cursorApi, treeNodeApi);
9
10
  case 'normalLeft':
10
- return normalInteractLeftToEffect(state);
11
+ return normalInteractLeftToEffect(state, cursorApi);
11
12
  case 'normalDown':
12
13
  return dispatchAction({
13
14
  effectActionType: 'nextEntry',
@@ -51,45 +52,60 @@ export function createIntentToEffect(stateApi, cursorApi, treeNodeApi) {
51
52
  }
52
53
  };
53
54
  }
55
+ // =============================================================================
56
+ // Normal mode
57
+ // =============================================================================
58
+ function keepNormalBuffer(normalBuffer) {
59
+ return {
60
+ effectType: 'setInputState',
61
+ inputState: {
62
+ inputMode: 'normal',
63
+ normalBuffer,
64
+ },
65
+ };
66
+ }
54
67
  function dispatchAction(action) {
55
68
  return {
56
69
  effectType: 'dispatchEffectAction',
57
70
  action,
58
71
  };
59
72
  }
60
- // Sets the buffer. Three possibilities:
61
- // - New command buffer is recognized as a motion, this dispatches the
62
- // "effect action". Consumer will know to reset the input state.
63
- // - Prefix of a possible motion, updates normal buffer.
64
- // - Not a prefix, clears the buffer.
73
+ function clearBuffer() {
74
+ return {
75
+ effectType: 'setInputState',
76
+ inputState: {
77
+ inputMode: 'normal',
78
+ normalBuffer: '',
79
+ },
80
+ };
81
+ }
82
+ /**
83
+ * Sets the normal-mode command buffer.
84
+ *
85
+ * Three possibilities:
86
+ *
87
+ * - The buffer is a recognized motion: dispatch its effect action.
88
+ * - The buffer is a prefix of a possible motion: retain it.
89
+ * - The buffer is not a valid prefix: clear it.
90
+ */
65
91
  function normalBufferToEffectResult(updatedNormalBuffer) {
66
- switch (updatedNormalBuffer) {
67
- case 'z':
68
- return {
69
- effectType: 'setInputState',
70
- inputState: {
71
- inputMode: 'normal',
72
- normalBuffer: updatedNormalBuffer,
73
- },
74
- };
75
- case 'zc':
76
- return dispatchAction({
77
- effectActionType: 'fold',
78
- });
79
- case 'zo':
80
- return dispatchAction({
81
- effectActionType: 'unfold',
82
- });
83
- default:
84
- return {
85
- effectType: 'setInputState',
86
- inputState: {
87
- inputMode: 'normal',
88
- normalBuffer: '',
89
- },
90
- };
92
+ const commandResult = parseNormalCommand(updatedNormalBuffer);
93
+ switch (commandResult.kind) {
94
+ case 'incomplete':
95
+ return keepNormalBuffer(updatedNormalBuffer);
96
+ case 'complete':
97
+ return dispatchAction(commandResult.action);
98
+ case 'invalid':
99
+ return clearBuffer();
91
100
  }
92
101
  }
102
+ /**
103
+ * Handles normal-mode right interaction.
104
+ *
105
+ * - A closed branch requests loading its children.
106
+ * - An open branch dispatches an action that closes/unloads its children.
107
+ * - A leaf has no right-interaction effect.
108
+ */
93
109
  function normalInteractRightToEffect(state, stateApi, cursorApi, treeNodeApi) {
94
110
  const currentEntry = stateApi.getNodeAtCursor(state);
95
111
  if (currentEntry === undefined) {
@@ -99,23 +115,31 @@ function normalInteractRightToEffect(state, stateApi, cursorApi, treeNodeApi) {
99
115
  if (path === undefined) {
100
116
  return undefined;
101
117
  }
102
- if (treeNodeApi.isBranch(currentEntry)) {
103
- if (currentEntry.children === null) {
118
+ switch (treeNodeApi.kind(currentEntry)) {
119
+ case 'unloaded-branch':
104
120
  return {
105
121
  effectType: 'loadBranchEntries',
106
122
  path,
107
123
  };
108
- }
109
- return dispatchAction({
110
- effectActionType: 'setBranchEntries',
111
- path,
112
- entries: null,
113
- });
124
+ case 'loaded-branch':
125
+ return dispatchAction({
126
+ effectActionType: 'setBranchEntries',
127
+ path,
128
+ entries: null,
129
+ });
130
+ case 'leaf':
131
+ return undefined;
114
132
  }
115
- return;
116
133
  }
117
- function normalInteractLeftToEffect(state) {
118
- if (state.cursor.length === 0) {
134
+ /**
135
+ * Handles normal-mode left interaction.
136
+ *
137
+ * Left from the root has no effect. Otherwise dispatch navigation to the
138
+ * parent entry.
139
+ */
140
+ function normalInteractLeftToEffect(state, cursorApi) {
141
+ const path = cursorApi.getPath(state.cursor);
142
+ if (path === undefined || path.length === 0) {
119
143
  return undefined;
120
144
  }
121
145
  return dispatchAction({
@@ -0,0 +1,14 @@
1
+ import type { SerializableKey } from '../../trees/index.js';
2
+ import type { Effect } from '../domain/index.js';
3
+ /**
4
+ * Parses a command-line command into an application effect.
5
+ *
6
+ * Command parsing is independent of the concrete tree-node value type, but the
7
+ * generic parameters allow its result to compose with the application's
8
+ * Effect<Id, Value> pipeline.
9
+ *
10
+ * @typeParam Id - The sibling-unique tree-node ID type.
11
+ * @typeParam Value - Application-owned data stored in each tree node.
12
+ */
13
+ export declare function parseCommand<Id extends SerializableKey, Value>(commandLine: string): Effect<Id, Value> | undefined;
14
+ //# sourceMappingURL=parse-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-command.d.ts","sourceRoot":"","sources":["../../../src/input/application/parse-command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AA0CjD;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,EAAE,SAAS,eAAe,EAAE,KAAK,EAC5D,WAAW,EAAE,MAAM,GAClB,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,SAAS,CAyD/B"}
@@ -0,0 +1,92 @@
1
+ const DEFAULT_VIEW_NAME = 'default';
2
+ function parseFoldCommand(commandArgs) {
3
+ const [subcommand, name] = commandArgs;
4
+ switch (subcommand) {
5
+ case 'list':
6
+ return commandArgs.length === 1
7
+ ? {
8
+ effectType: 'listFolds',
9
+ }
10
+ : {
11
+ effectType: 'unrecognizedCommand',
12
+ commandLine: `fold ${commandArgs.join(' ')}`,
13
+ };
14
+ case 'create':
15
+ return name === undefined || commandArgs.length !== 2
16
+ ? {
17
+ effectType: 'unrecognizedCommand',
18
+ commandLine: `fold ${commandArgs.join(' ')}`,
19
+ }
20
+ : {
21
+ effectType: 'dispatchEffectAction',
22
+ action: {
23
+ effectActionType: 'createFoldTree',
24
+ name,
25
+ },
26
+ };
27
+ default:
28
+ return {
29
+ effectType: 'unrecognizedCommand',
30
+ commandLine: `fold ${commandArgs.join(' ')}`,
31
+ };
32
+ }
33
+ }
34
+ /**
35
+ * Parses a command-line command into an application effect.
36
+ *
37
+ * Command parsing is independent of the concrete tree-node value type, but the
38
+ * generic parameters allow its result to compose with the application's
39
+ * Effect<Id, Value> pipeline.
40
+ *
41
+ * @typeParam Id - The sibling-unique tree-node ID type.
42
+ * @typeParam Value - Application-owned data stored in each tree node.
43
+ */
44
+ export function parseCommand(commandLine) {
45
+ const command = commandLine.trim().replace(/^:/, '');
46
+ if (command === "") {
47
+ return undefined;
48
+ }
49
+ const [commandName, ...commandArgs] = command.split(/\s+/);
50
+ switch (commandName) {
51
+ case 'q':
52
+ return {
53
+ effectType: 'quit',
54
+ exitMessage: '',
55
+ };
56
+ case 'fold':
57
+ return parseFoldCommand(commandArgs);
58
+ case 'evlp':
59
+ return {
60
+ effectType: 'emitVisibleLeavesPaths',
61
+ };
62
+ case 'mkview!':
63
+ return {
64
+ effectType: 'saveView',
65
+ name: commandArgs[0] || DEFAULT_VIEW_NAME,
66
+ overwrite: true,
67
+ };
68
+ case 'loadview':
69
+ return {
70
+ effectType: 'loadView',
71
+ name: commandArgs[0] || DEFAULT_VIEW_NAME,
72
+ };
73
+ default:
74
+ return {
75
+ effectType: 'unrecognizedCommand',
76
+ commandLine,
77
+ };
78
+ }
79
+ /*
80
+ * Vim-style view commands:
81
+ *
82
+ * :mkview!
83
+ * :mkview! project
84
+ * :loadview
85
+ * :loadview project
86
+ *
87
+ * The name may contain spaces, so capture the remainder of the command
88
+ * instead of splitting on whitespace.
89
+ *
90
+ * TODO Later: mkview that checks if a same-named view already exists.
91
+ */
92
+ }
@@ -0,0 +1,12 @@
1
+ import type { SerializableKey } from '../../trees/index.js';
2
+ import type { EffectAction } from '../domain/index.js';
3
+ export type ParseNormalCommandResult<Id extends SerializableKey, Value> = {
4
+ kind: 'incomplete';
5
+ } | {
6
+ kind: 'complete';
7
+ action: EffectAction<Id, Value>;
8
+ } | {
9
+ kind: 'invalid';
10
+ };
11
+ export declare function parseNormalCommand<Id extends SerializableKey, Value>(normalBuffer: string): ParseNormalCommandResult<Id, Value>;
12
+ //# sourceMappingURL=parse-normal-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-normal-command.d.ts","sourceRoot":"","sources":["../../../src/input/application/parse-normal-command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAOvD,MAAM,MAAM,wBAAwB,CAAC,EAAE,SAAS,eAAe,EAAE,KAAK,IAClE;IACE,IAAI,EAAE,YAAY,CAAC;CACpB,GACD;IACE,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,YAAY,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;CACjC,GACD;IACE,IAAI,EAAE,SAAS,CAAC;CACjB,CAAC;AAEN,wBAAgB,kBAAkB,CAAC,EAAE,SAAS,eAAe,EAAE,KAAK,EAClE,YAAY,EAAE,MAAM,GACnB,wBAAwB,CAAC,EAAE,EAAE,KAAK,CAAC,CAwCrC"}
@@ -0,0 +1,89 @@
1
+ import { tokenizeNormalCommand, } from './tokenize-normal-command.js';
2
+ export function parseNormalCommand(normalBuffer) {
3
+ const tokens = tokenizeNormalCommand(normalBuffer);
4
+ if (tokens.some(isInvalidToken)) {
5
+ return {
6
+ kind: 'invalid',
7
+ };
8
+ }
9
+ const [firstToken, secondToken] = tokens;
10
+ if (firstToken === undefined) {
11
+ return {
12
+ kind: 'invalid',
13
+ };
14
+ }
15
+ if (firstToken.tokenType === 'validInteger') {
16
+ if (secondToken === undefined) {
17
+ return {
18
+ kind: 'incomplete',
19
+ };
20
+ }
21
+ if (tokens.length !== 2) {
22
+ return {
23
+ kind: 'invalid',
24
+ };
25
+ }
26
+ return tokenToResult(secondToken, firstToken.value);
27
+ }
28
+ if (tokens.length !== 1) {
29
+ return {
30
+ kind: 'invalid',
31
+ };
32
+ }
33
+ return tokenToResult(firstToken, 0);
34
+ }
35
+ function isInvalidToken(token) {
36
+ return (token.tokenType === 'invalidInteger' || token.tokenType === 'invalidCommand');
37
+ }
38
+ function tokenToResult(token, index) {
39
+ switch (token.tokenType) {
40
+ case 'partialCommand':
41
+ return {
42
+ kind: 'incomplete',
43
+ };
44
+ case 'foldCommand':
45
+ return {
46
+ kind: 'complete',
47
+ action: foldCommandToAction(token, index),
48
+ };
49
+ case 'validInteger':
50
+ case 'invalidInteger':
51
+ case 'invalidCommand':
52
+ return {
53
+ kind: 'invalid',
54
+ };
55
+ }
56
+ }
57
+ function foldCommandToAction(foldCommand, index) {
58
+ const foldTree = {
59
+ foldTreeReferenceType: 'index',
60
+ index,
61
+ };
62
+ switch (foldCommand.foldCommandType) {
63
+ case 'addToFoldTree':
64
+ return {
65
+ effectActionType: 'addToFoldTree',
66
+ foldTree,
67
+ };
68
+ case 'removeFromFoldTree':
69
+ return {
70
+ effectActionType: 'removeFromFoldTree',
71
+ foldTree,
72
+ };
73
+ case 'fold':
74
+ return {
75
+ effectActionType: 'fold',
76
+ foldTree,
77
+ };
78
+ case 'unfold':
79
+ return {
80
+ effectActionType: 'unfold',
81
+ foldTree,
82
+ };
83
+ case 'toggleFold':
84
+ return {
85
+ effectActionType: 'toggleFold',
86
+ foldTree,
87
+ };
88
+ }
89
+ }
@@ -0,0 +1,24 @@
1
+ export type ValidInteger = {
2
+ tokenType: 'validInteger';
3
+ value: number;
4
+ };
5
+ export type InvalidInteger = {
6
+ tokenType: 'invalidInteger';
7
+ value: string;
8
+ };
9
+ export type PartialCommand = {
10
+ tokenType: 'partialCommand';
11
+ commandType: 'fold';
12
+ };
13
+ export type FoldCommand = {
14
+ tokenType: 'foldCommand';
15
+ foldCommandType: 'addToFoldTree' | 'removeFromFoldTree' | 'fold' | 'unfold' | 'toggleFold';
16
+ };
17
+ export type InvalidCommand = {
18
+ tokenType: 'invalidCommand';
19
+ value: string;
20
+ };
21
+ export type Token = ValidInteger | InvalidInteger | PartialCommand | FoldCommand | InvalidCommand;
22
+ export type Tokens = readonly Token[];
23
+ export declare function tokenizeNormalCommand(normalBuffer: string): Tokens;
24
+ //# sourceMappingURL=tokenize-normal-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenize-normal-command.d.ts","sourceRoot":"","sources":["../../../src/input/application/tokenize-normal-command.ts"],"names":[],"mappings":"AAiCA,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,EAAE,cAAc,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,EAAE,gBAAgB,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,EAAE,gBAAgB,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,SAAS,EAAE,aAAa,CAAC;IACzB,eAAe,EACX,eAAe,GACf,oBAAoB,GACpB,MAAM,GACN,QAAQ,GACR,YAAY,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,EAAE,gBAAgB,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,KAAK,GACb,YAAY,GACZ,cAAc,GACd,cAAc,GACd,WAAW,GACX,cAAc,CAAC;AAEnB,MAAM,MAAM,MAAM,GAAG,SAAS,KAAK,EAAE,CAAC;AAUtC,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAalE"}
@@ -0,0 +1,110 @@
1
+ function createNormalBufferReader(normalBuffer) {
2
+ return {
3
+ normalBuffer,
4
+ position: 0,
5
+ };
6
+ }
7
+ function peek(reader) {
8
+ return reader.normalBuffer.at(reader.position);
9
+ }
10
+ function consume(reader) {
11
+ const character = peek(reader);
12
+ if (character !== undefined) {
13
+ reader.position += 1;
14
+ }
15
+ return character;
16
+ }
17
+ function isDecimalDigit(character) {
18
+ if (character === undefined) {
19
+ return false;
20
+ }
21
+ return character >= '0' && character <= '9';
22
+ }
23
+ export function tokenizeNormalCommand(normalBuffer) {
24
+ const reader = createNormalBufferReader(normalBuffer);
25
+ const tokens = [];
26
+ while (peek(reader) !== undefined) {
27
+ if (isDecimalDigit(peek(reader))) {
28
+ tokens.push(tokenizeInteger(reader));
29
+ }
30
+ else {
31
+ tokens.push(tokenizeCommand(reader));
32
+ }
33
+ }
34
+ return tokens;
35
+ }
36
+ function tokenizeInteger(reader) {
37
+ let value = '';
38
+ while (true) {
39
+ const character = peek(reader);
40
+ if (!isDecimalDigit(character)) {
41
+ break;
42
+ }
43
+ consume(reader);
44
+ value += character;
45
+ }
46
+ const parsedValue = Number(value);
47
+ if (!Number.isSafeInteger(parsedValue)) {
48
+ return {
49
+ tokenType: 'invalidInteger',
50
+ value,
51
+ };
52
+ }
53
+ return {
54
+ tokenType: 'validInteger',
55
+ value: parsedValue,
56
+ };
57
+ }
58
+ function tokenizeCommand(reader) {
59
+ const character = consume(reader);
60
+ switch (character) {
61
+ case 'z':
62
+ return tokenizeFoldCommand(reader);
63
+ default:
64
+ return {
65
+ tokenType: 'invalidCommand',
66
+ value: character ?? '',
67
+ };
68
+ }
69
+ }
70
+ function tokenizeFoldCommand(reader) {
71
+ const character = consume(reader);
72
+ if (character === undefined) {
73
+ return {
74
+ tokenType: 'partialCommand',
75
+ commandType: 'fold',
76
+ };
77
+ }
78
+ switch (character) {
79
+ case 'f':
80
+ return {
81
+ tokenType: 'foldCommand',
82
+ foldCommandType: 'addToFoldTree',
83
+ };
84
+ case 'd':
85
+ return {
86
+ tokenType: 'foldCommand',
87
+ foldCommandType: 'removeFromFoldTree',
88
+ };
89
+ case 'c':
90
+ return {
91
+ tokenType: 'foldCommand',
92
+ foldCommandType: 'fold',
93
+ };
94
+ case 'o':
95
+ return {
96
+ tokenType: 'foldCommand',
97
+ foldCommandType: 'unfold',
98
+ };
99
+ case 'a':
100
+ return {
101
+ tokenType: 'foldCommand',
102
+ foldCommandType: 'toggleFold',
103
+ };
104
+ default:
105
+ return {
106
+ tokenType: 'invalidCommand',
107
+ value: `z${character}`,
108
+ };
109
+ }
110
+ }
@@ -1,9 +1,11 @@
1
1
  import { UserInput, InputModeState, Intent } from '../domain/index.js';
2
2
  /**
3
+ * Converts a user input, mode and mode's buffer into an intent.
4
+ *
3
5
  * By design "intent = input + mode + modeState", so it interprets the key
4
- * inputs depending on the mode and input so far. No context in terms of UI.
6
+ * inputs depending on the mode and mode's buffer. No other context.
5
7
  *
6
- * @param userInput - the key user input.
8
+ * @param userInput - the user input pressed now.
7
9
  * @param inputModeState - the current mode and the user inputs so far.
8
10
  * @returns The user's intent.
9
11
  */
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-input-to-intent.d.ts","sourceRoot":"","sources":["../../../src/input/application/user-input-to-intent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEvE;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,SAAS,EACpB,cAAc,EAAE,cAAc,GAC7B,MAAM,GAAG,SAAS,CAQpB"}
@@ -1,8 +1,10 @@
1
1
  /**
2
+ * Converts a user input, mode and mode's buffer into an intent.
3
+ *
2
4
  * By design "intent = input + mode + modeState", so it interprets the key
3
- * inputs depending on the mode and input so far. No context in terms of UI.
5
+ * inputs depending on the mode and mode's buffer. No other context.
4
6
  *
5
- * @param userInput - the key user input.
7
+ * @param userInput - the user input pressed now.
6
8
  * @param inputModeState - the current mode and the user inputs so far.
7
9
  * @returns The user's intent.
8
10
  */
@@ -15,6 +17,7 @@ export function userInputToIntent(userInput, inputModeState) {
15
17
  }
16
18
  }
17
19
  function normalUserInputToIntent(userInput, normalBuffer) {
20
+ // Esc cancels of current key sequence
18
21
  if (userInput.userInputType === 'esc') {
19
22
  return {
20
23
  intentType: 'setNormalBuffer',
@@ -46,10 +49,6 @@ function normalUserInputToIntent(userInput, normalBuffer) {
46
49
  function normalCharacterToIntent(character, normalBuffer) {
47
50
  if (normalBuffer === '') {
48
51
  switch (character) {
49
- case 'l':
50
- return {
51
- intentType: 'normalRight',
52
- };
53
52
  case 'h':
54
53
  return {
55
54
  intentType: 'normalLeft',
@@ -62,6 +61,10 @@ function normalCharacterToIntent(character, normalBuffer) {
62
61
  return {
63
62
  intentType: 'normalUp',
64
63
  };
64
+ case 'l':
65
+ return {
66
+ intentType: 'normalRight',
67
+ };
65
68
  case ':':
66
69
  return {
67
70
  intentType: 'enterCommandLineMode',
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-input-to-intent.test.d.ts","sourceRoot":"","sources":["../../../src/input/application/user-input-to-intent.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,84 @@
1
+ import type { InputModeState } from './input-mode-state.js';
2
+ import type { SerializableKey, TreeNode } from '../../trees/index.js';
3
+ /**
4
+ * An effect produced by interpreting an intent against the current state.
5
+ *
6
+ * @typeParam Id - The sibling-unique tree-node ID type.
7
+ * @typeParam Value - Application-owned data stored in each tree node.
8
+ */
9
+ export type Effect<Id extends SerializableKey, Value> = Readonly<{
10
+ effectType: 'dispatchEffectAction';
11
+ action: EffectAction<Id, Value>;
12
+ }> | Readonly<{
13
+ effectType: 'loadBranchEntries';
14
+ path: readonly Id[];
15
+ }> | Readonly<{
16
+ effectType: 'saveView';
17
+ name: string;
18
+ overwrite: boolean;
19
+ }> | Readonly<{
20
+ effectType: 'loadView';
21
+ name: string;
22
+ }> | Readonly<{
23
+ effectType: 'emitVisibleLeavesPaths';
24
+ }> | Readonly<{
25
+ effectType: 'listFolds';
26
+ }> | Readonly<{
27
+ effectType: 'quit';
28
+ exitMessage: string;
29
+ }> | Readonly<{
30
+ effectType: 'setInputState';
31
+ inputState: InputModeState;
32
+ }> | Readonly<{
33
+ effectType: 'unrecognizedCommand';
34
+ commandLine: string;
35
+ }>;
36
+ /**
37
+ * A user-facing reference to a fold tree.
38
+ *
39
+ * Indexes are local to a view and may be reused after deletion. Names are
40
+ * durable references intended for command-line use.
41
+ */
42
+ export type FoldTreeReference = Readonly<{
43
+ foldTreeReferenceType: 'index';
44
+ index: number;
45
+ }> | Readonly<{
46
+ foldTreeReferenceType: 'name';
47
+ name: string;
48
+ }>;
49
+ /**
50
+ * An action interpreted by the state reducer.
51
+ *
52
+ * @typeParam Id - The sibling-unique tree-node ID type.
53
+ * @typeParam Value - Application-owned data stored in each tree node.
54
+ */
55
+ export type EffectAction<Id extends SerializableKey, Value> = Readonly<{
56
+ effectActionType: 'nextEntry';
57
+ }> | Readonly<{
58
+ effectActionType: 'prevEntry';
59
+ }> | Readonly<{
60
+ effectActionType: 'setBranchEntries';
61
+ path: readonly Id[];
62
+ entries: readonly TreeNode<Id, Value>[] | null;
63
+ }> | Readonly<{
64
+ effectActionType: 'navigateToParent';
65
+ }> | Readonly<{
66
+ effectActionType: 'addToFoldTree';
67
+ foldTree: FoldTreeReference;
68
+ }> | Readonly<{
69
+ effectActionType: 'removeFromFoldTree';
70
+ foldTree: FoldTreeReference;
71
+ }> | Readonly<{
72
+ effectActionType: 'fold';
73
+ foldTree: FoldTreeReference;
74
+ }> | Readonly<{
75
+ effectActionType: 'unfold';
76
+ foldTree: FoldTreeReference;
77
+ }> | Readonly<{
78
+ effectActionType: 'toggleFold';
79
+ foldTree: FoldTreeReference;
80
+ }> | Readonly<{
81
+ effectActionType: 'createFoldTree';
82
+ name: string;
83
+ }>;
84
+ //# sourceMappingURL=effect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect.d.ts","sourceRoot":"","sources":["../../../src/input/domain/effect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEtE;;;;;GAKG;AACH,MAAM,MAAM,MAAM,CAAC,EAAE,SAAS,eAAe,EAAE,KAAK,IAChD,QAAQ,CAAC;IACP,UAAU,EAAE,sBAAsB,CAAC;IACnC,MAAM,EAAE,YAAY,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;CACjC,CAAC,GACF,QAAQ,CAAC;IACP,UAAU,EAAE,mBAAmB,CAAC;IAChC,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC;CACrB,CAAC,GACF,QAAQ,CAAC;IACP,UAAU,EAAE,UAAU,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC,GACF,QAAQ,CAAC;IACP,UAAU,EAAE,UAAU,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC,GACF,QAAQ,CAAC;IACP,UAAU,EAAE,wBAAwB,CAAC;CACtC,CAAC,GACF,QAAQ,CAAC;IACP,UAAU,EAAE,WAAW,CAAC;CACzB,CAAC,GACF,QAAQ,CAAC;IACP,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC,GACF,QAAQ,CAAC;IACP,UAAU,EAAE,eAAe,CAAC;IAC5B,UAAU,EAAE,cAAc,CAAC;CAC5B,CAAC,GACF,QAAQ,CAAC;IACP,UAAU,EAAE,qBAAqB,CAAC;IAClC,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC,CAAC;AAEP;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GACzB,QAAQ,CAAC;IACP,qBAAqB,EAAE,OAAO,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;CACf,CAAC,GACF,QAAQ,CAAC;IACP,qBAAqB,EAAE,MAAM,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;CACd,CAAC,CAAC;AAEP;;;;;GAKG;AACH,MAAM,MAAM,YAAY,CAAC,EAAE,SAAS,eAAe,EAAE,KAAK,IACtD,QAAQ,CAAC;IACP,gBAAgB,EAAE,WAAW,CAAC;CAC/B,CAAC,GACF,QAAQ,CAAC;IACP,gBAAgB,EAAE,WAAW,CAAC;CAC/B,CAAC,GACF,QAAQ,CAAC;IACP,gBAAgB,EAAE,kBAAkB,CAAC;IACrC,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC;IACpB,OAAO,EAAE,SAAS,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC;CAChD,CAAC,GACF,QAAQ,CAAC;IACP,gBAAgB,EAAE,kBAAkB,CAAC;CACtC,CAAC,GACF,QAAQ,CAAC;IACP,gBAAgB,EAAE,eAAe,CAAC;IAClC,QAAQ,EAAE,iBAAiB,CAAC;CAC7B,CAAC,GACF,QAAQ,CAAC;IACP,gBAAgB,EAAE,oBAAoB,CAAC;IACvC,QAAQ,EAAE,iBAAiB,CAAC;CAC7B,CAAC,GACF,QAAQ,CAAC;IACP,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,iBAAiB,CAAC;CAC7B,CAAC,GACF,QAAQ,CAAC;IACP,gBAAgB,EAAE,QAAQ,CAAC;IAC3B,QAAQ,EAAE,iBAAiB,CAAC;CAC7B,CAAC,GACF,QAAQ,CAAC;IACP,gBAAgB,EAAE,YAAY,CAAC;IAC/B,QAAQ,EAAE,iBAAiB,CAAC;CAC7B,CAAC,GACF,QAAQ,CAAC;IACP,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,IAAI,EAAE,MAAM,CAAC;CACd,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/input/domain/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input-mode-state.d.ts","sourceRoot":"","sources":["../../../src/input/domain/input-mode-state.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GACtB;IACE,SAAS,EAAE,QAAQ,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB,GACD;IACE,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intent.d.ts","sourceRoot":"","sources":["../../../src/input/domain/intent.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GAAG,gBAAgB,GAAG,iBAAiB,CAAC;AAE1D,MAAM,MAAM,gBAAgB,GACxB;IACE,UAAU,EAAE,aAAa,CAAC;CAC3B,GACD;IACE,UAAU,EAAE,YAAY,CAAC;CAC1B,GACD;IACE,UAAU,EAAE,YAAY,CAAC;CAC1B,GACD;IACE,UAAU,EAAE,UAAU,CAAC;CACxB,GACD;IACE,UAAU,EAAE,iBAAiB,CAAC;IAC9B,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEN,MAAM,MAAM,iBAAiB,GACzB;IACE,UAAU,EAAE,sBAAsB,CAAC;CACpC,GACD;IACE,UAAU,EAAE,gBAAgB,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;CACrB,GACD;IACE,UAAU,EAAE,oBAAoB,CAAC;IACjC,WAAW,EAAE,MAAM,CAAC;CACrB,GACD;IACE,UAAU,EAAE,qBAAqB,CAAC;CACnC,CAAC"}