@turnipxenon/pineapple 1.1.2

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 (322) hide show
  1. package/README.md +38 -0
  2. package/dist/app.postcss +94 -0
  3. package/dist/assets/bg_tiled/bg_tiled_ares.png +0 -0
  4. package/dist/assets/bg_tiled/bg_tiled_corn.png +0 -0
  5. package/dist/assets/bg_tiled/bg_tiled_pineapple.png +0 -0
  6. package/dist/assets/bg_tiled/bg_tiled_reinhard.png +0 -0
  7. package/dist/assets/bg_tiled/bg_tiled_tomato.png +0 -0
  8. package/dist/assets/bg_tiled/bg_tiled_turnip.png +0 -0
  9. package/dist/assets/characters/ares/ares_blushing.webp +0 -0
  10. package/dist/assets/characters/ares/ares_disappointed.webp +0 -0
  11. package/dist/assets/characters/ares/ares_happy.webp +0 -0
  12. package/dist/assets/characters/ares/ares_lets_go.webp +0 -0
  13. package/dist/assets/characters/ares/ares_logo.webp +0 -0
  14. package/dist/assets/characters/ares/ares_mad.webp +0 -0
  15. package/dist/assets/characters/ares/ares_neutral.webp +0 -0
  16. package/dist/assets/characters/ares/ares_slightly_mad.webp +0 -0
  17. package/dist/assets/characters/ares/ares_surprised.webp +0 -0
  18. package/dist/assets/characters/ares/ares_yay.webp +0 -0
  19. package/dist/assets/game_dev/footage-chef-wings.gif +0 -0
  20. package/dist/assets/game_dev/footage-depreciation.webm +0 -0
  21. package/dist/assets/game_dev/footage-thinking-of-flowers.webm +0 -0
  22. package/dist/assets/game_dev/screenshot-game-jam-mama.png +0 -0
  23. package/dist/assets/game_dev/screenshot-string-hop.png +0 -0
  24. package/dist/assets/game_dev/screenshot-wet-ass-road.png +0 -0
  25. package/dist/assets/icons/chat_cursor.svg +47 -0
  26. package/dist/assets/icons/external_link.svg +50 -0
  27. package/dist/assets/temp/background-image.jpg +0 -0
  28. package/dist/assets/temp/bitbucket-logo.png +0 -0
  29. package/dist/assets/temp/github-logo.png +0 -0
  30. package/dist/assets/temp/header-hep-cat.mp4 +0 -0
  31. package/dist/assets/temp/header-hep-cat.ogg +0 -0
  32. package/dist/assets/temp/header-hep-cat.webm +0 -0
  33. package/dist/assets/temp/header-pengi.mp4 +0 -0
  34. package/dist/assets/temp/header-pengi.webm +0 -0
  35. package/dist/assets/temp/header-soulwork.mp4 +0 -0
  36. package/dist/assets/temp/header-soulwork.ogg +0 -0
  37. package/dist/assets/temp/header-soulwork.webm +0 -0
  38. package/dist/components/DialogOverlay.svelte +93 -0
  39. package/dist/components/DialogOverlay.svelte.d.ts +14 -0
  40. package/dist/components/LazyAsset.svelte +96 -0
  41. package/dist/components/LazyAsset.svelte.d.ts +20 -0
  42. package/dist/components/LazyAssetType.d.ts +10 -0
  43. package/dist/components/LazyAssetType.js +12 -0
  44. package/dist/components/PineappleBaseLayout.svelte +186 -0
  45. package/dist/components/PineappleBaseLayout.svelte.d.ts +19 -0
  46. package/dist/components/RandomizedBackground.svelte +62 -0
  47. package/dist/components/RandomizedBackground.svelte.d.ts +16 -0
  48. package/dist/components/RandomizedImage.svelte +29 -0
  49. package/dist/components/RandomizedImage.svelte.d.ts +17 -0
  50. package/dist/components/dialog_manager/DialogManager.d.ts +77 -0
  51. package/dist/components/dialog_manager/DialogManager.js +239 -0
  52. package/dist/components/dialog_manager/DialogManagerStore.d.ts +41 -0
  53. package/dist/components/dialog_manager/DialogManagerStore.js +45 -0
  54. package/dist/components/dialog_manager/DialogProcessor.d.ts +13 -0
  55. package/dist/components/dialog_manager/DialogProcessor.js +62 -0
  56. package/dist/components/dialog_manager/DialogUtils.d.ts +5 -0
  57. package/dist/components/dialog_manager/DialogUtils.js +8 -0
  58. package/dist/components/dialog_manager/behavior_tree/core/BTreeUtils.d.ts +15 -0
  59. package/dist/components/dialog_manager/behavior_tree/core/BTreeUtils.js +34 -0
  60. package/dist/components/dialog_manager/behavior_tree/core/BaseBehaviorResult.d.ts +4 -0
  61. package/dist/components/dialog_manager/behavior_tree/core/BaseBehaviorResult.js +1 -0
  62. package/dist/components/dialog_manager/behavior_tree/core/BehaviorNode.d.ts +3 -0
  63. package/dist/components/dialog_manager/behavior_tree/core/BehaviorNode.js +1 -0
  64. package/dist/components/dialog_manager/behavior_tree/core/BehaviorStatus.d.ts +5 -0
  65. package/dist/components/dialog_manager/behavior_tree/core/BehaviorStatus.js +6 -0
  66. package/dist/components/dialog_manager/behavior_tree/core/SelectorNode.d.ts +12 -0
  67. package/dist/components/dialog_manager/behavior_tree/core/SelectorNode.js +22 -0
  68. package/dist/components/dialog_manager/behavior_tree/expression/ExpressionArguments.d.ts +5 -0
  69. package/dist/components/dialog_manager/behavior_tree/expression/ExpressionArguments.js +1 -0
  70. package/dist/components/dialog_manager/behavior_tree/expression/ExpressionBehaviorNode.d.ts +4 -0
  71. package/dist/components/dialog_manager/behavior_tree/expression/ExpressionBehaviorNode.js +1 -0
  72. package/dist/components/dialog_manager/behavior_tree/expression/ExpressionEvaluator.d.ts +15 -0
  73. package/dist/components/dialog_manager/behavior_tree/expression/ExpressionEvaluator.js +220 -0
  74. package/dist/components/dialog_manager/behavior_tree/expression/ExpressionResult.d.ts +5 -0
  75. package/dist/components/dialog_manager/behavior_tree/expression/ExpressionResult.js +1 -0
  76. package/dist/components/dialog_manager/behavior_tree/expression/ExpressionSelectorNode.d.ts +8 -0
  77. package/dist/components/dialog_manager/behavior_tree/expression/ExpressionSelectorNode.js +15 -0
  78. package/dist/components/dialog_manager/behavior_tree/expression/ExpressionState.d.ts +3 -0
  79. package/dist/components/dialog_manager/behavior_tree/expression/ExpressionState.js +1 -0
  80. package/dist/components/dialog_manager/behavior_tree/expression/OperandNode.d.ts +10 -0
  81. package/dist/components/dialog_manager/behavior_tree/expression/OperandNode.js +15 -0
  82. package/dist/components/dialog_manager/behavior_tree/expression/OperatorNode.d.ts +11 -0
  83. package/dist/components/dialog_manager/behavior_tree/expression/OperatorNode.js +30 -0
  84. package/dist/components/dialog_manager/behavior_tree/expression/commands/CommandExpressionNode.d.ts +6 -0
  85. package/dist/components/dialog_manager/behavior_tree/expression/commands/CommandExpressionNode.js +21 -0
  86. package/dist/components/dialog_manager/behavior_tree/expression/commands/CommandLogicNode.d.ts +9 -0
  87. package/dist/components/dialog_manager/behavior_tree/expression/commands/CommandLogicNode.js +19 -0
  88. package/dist/components/dialog_manager/behavior_tree/expression/commands/CommandMap.d.ts +9 -0
  89. package/dist/components/dialog_manager/behavior_tree/expression/commands/CommandMap.js +18 -0
  90. package/dist/components/dialog_manager/behavior_tree/expression/commands/RandomRangeCommand.d.ts +15 -0
  91. package/dist/components/dialog_manager/behavior_tree/expression/commands/RandomRangeCommand.js +24 -0
  92. package/dist/components/dialog_manager/behavior_tree/expression/commands/VisitedCommand.d.ts +20 -0
  93. package/dist/components/dialog_manager/behavior_tree/expression/commands/VisitedCommand.js +32 -0
  94. package/dist/components/dialog_manager/behavior_tree/expression/commands/VisitedCountCommand.d.ts +13 -0
  95. package/dist/components/dialog_manager/behavior_tree/expression/commands/VisitedCountCommand.js +25 -0
  96. package/dist/components/dialog_manager/behavior_tree/expression/operators/AndOperator.d.ts +7 -0
  97. package/dist/components/dialog_manager/behavior_tree/expression/operators/AndOperator.js +15 -0
  98. package/dist/components/dialog_manager/behavior_tree/expression/operators/EqualityOperator.d.ts +7 -0
  99. package/dist/components/dialog_manager/behavior_tree/expression/operators/EqualityOperator.js +14 -0
  100. package/dist/components/dialog_manager/behavior_tree/expression/operators/GreaterThanEqualOperator.d.ts +7 -0
  101. package/dist/components/dialog_manager/behavior_tree/expression/operators/GreaterThanEqualOperator.js +12 -0
  102. package/dist/components/dialog_manager/behavior_tree/expression/operators/GreaterThanOperator.d.ts +7 -0
  103. package/dist/components/dialog_manager/behavior_tree/expression/operators/GreaterThanOperator.js +12 -0
  104. package/dist/components/dialog_manager/behavior_tree/expression/operators/InequalityOperator.d.ts +7 -0
  105. package/dist/components/dialog_manager/behavior_tree/expression/operators/InequalityOperator.js +12 -0
  106. package/dist/components/dialog_manager/behavior_tree/expression/operators/LessThanEqualOperator.d.ts +7 -0
  107. package/dist/components/dialog_manager/behavior_tree/expression/operators/LessThanEqualOperator.js +12 -0
  108. package/dist/components/dialog_manager/behavior_tree/expression/operators/LessThanOperator.d.ts +7 -0
  109. package/dist/components/dialog_manager/behavior_tree/expression/operators/LessThanOperator.js +12 -0
  110. package/dist/components/dialog_manager/behavior_tree/expression/operators/NegationOperator.d.ts +7 -0
  111. package/dist/components/dialog_manager/behavior_tree/expression/operators/NegationOperator.js +13 -0
  112. package/dist/components/dialog_manager/behavior_tree/expression/operators/OperatorLogicNode.d.ts +17 -0
  113. package/dist/components/dialog_manager/behavior_tree/expression/operators/OperatorLogicNode.js +32 -0
  114. package/dist/components/dialog_manager/behavior_tree/expression/operators/OperatorMap.d.ts +9 -0
  115. package/dist/components/dialog_manager/behavior_tree/expression/operators/OperatorMap.js +47 -0
  116. package/dist/components/dialog_manager/behavior_tree/expression/operators/OrOperator.d.ts +7 -0
  117. package/dist/components/dialog_manager/behavior_tree/expression/operators/OrOperator.js +13 -0
  118. package/dist/components/dialog_manager/behavior_tree/expression/operators/XorOperator.d.ts +7 -0
  119. package/dist/components/dialog_manager/behavior_tree/expression/operators/XorOperator.js +17 -0
  120. package/dist/components/dialog_manager/behavior_tree/expression/operators/arithmetic/DivisionOperator.d.ts +7 -0
  121. package/dist/components/dialog_manager/behavior_tree/expression/operators/arithmetic/DivisionOperator.js +14 -0
  122. package/dist/components/dialog_manager/behavior_tree/expression/operators/arithmetic/MinusOperator.d.ts +7 -0
  123. package/dist/components/dialog_manager/behavior_tree/expression/operators/arithmetic/MinusOperator.js +14 -0
  124. package/dist/components/dialog_manager/behavior_tree/expression/operators/arithmetic/MultiplicationOperator.d.ts +7 -0
  125. package/dist/components/dialog_manager/behavior_tree/expression/operators/arithmetic/MultiplicationOperator.js +12 -0
  126. package/dist/components/dialog_manager/behavior_tree/expression/operators/arithmetic/PlusOperator.d.ts +7 -0
  127. package/dist/components/dialog_manager/behavior_tree/expression/operators/arithmetic/PlusOperator.js +14 -0
  128. package/dist/components/dialog_manager/behavior_tree/expression/operators/arithmetic/RemainderDivisionOperator.d.ts +7 -0
  129. package/dist/components/dialog_manager/behavior_tree/expression/operators/arithmetic/RemainderDivisionOperator.js +14 -0
  130. package/dist/components/dialog_manager/behavior_tree/line_core/LineBehaviorNode.d.ts +4 -0
  131. package/dist/components/dialog_manager/behavior_tree/line_core/LineBehaviorNode.js +1 -0
  132. package/dist/components/dialog_manager/behavior_tree/line_core/LineBehaviorResult.d.ts +6 -0
  133. package/dist/components/dialog_manager/behavior_tree/line_core/LineBehaviorResult.js +1 -0
  134. package/dist/components/dialog_manager/behavior_tree/line_core/LineNodeArguments.d.ts +6 -0
  135. package/dist/components/dialog_manager/behavior_tree/line_core/LineNodeArguments.js +1 -0
  136. package/dist/components/dialog_manager/behavior_tree/line_core/LineSelectorNode.d.ts +8 -0
  137. package/dist/components/dialog_manager/behavior_tree/line_core/LineSelectorNode.js +15 -0
  138. package/dist/components/dialog_manager/behavior_tree/line_processors/BehaviorState.d.ts +5 -0
  139. package/dist/components/dialog_manager/behavior_tree/line_processors/BehaviorState.js +5 -0
  140. package/dist/components/dialog_manager/behavior_tree/line_processors/ElseIfNode.d.ts +11 -0
  141. package/dist/components/dialog_manager/behavior_tree/line_processors/ElseIfNode.js +53 -0
  142. package/dist/components/dialog_manager/behavior_tree/line_processors/ElseNode.d.ts +11 -0
  143. package/dist/components/dialog_manager/behavior_tree/line_processors/ElseNode.js +49 -0
  144. package/dist/components/dialog_manager/behavior_tree/line_processors/EndIfNode.d.ts +11 -0
  145. package/dist/components/dialog_manager/behavior_tree/line_processors/EndIfNode.js +23 -0
  146. package/dist/components/dialog_manager/behavior_tree/line_processors/IfMode.d.ts +6 -0
  147. package/dist/components/dialog_manager/behavior_tree/line_processors/IfMode.js +8 -0
  148. package/dist/components/dialog_manager/behavior_tree/line_processors/IfNode.d.ts +12 -0
  149. package/dist/components/dialog_manager/behavior_tree/line_processors/IfNode.js +43 -0
  150. package/dist/components/dialog_manager/behavior_tree/line_processors/IgnoreGuardNode.d.ts +11 -0
  151. package/dist/components/dialog_manager/behavior_tree/line_processors/IgnoreGuardNode.js +25 -0
  152. package/dist/components/dialog_manager/behavior_tree/line_processors/IgnoreJumpNode.d.ts +6 -0
  153. package/dist/components/dialog_manager/behavior_tree/line_processors/IgnoreJumpNode.js +18 -0
  154. package/dist/components/dialog_manager/behavior_tree/line_processors/LineCommentNode.d.ts +6 -0
  155. package/dist/components/dialog_manager/behavior_tree/line_processors/LineCommentNode.js +17 -0
  156. package/dist/components/dialog_manager/behavior_tree/line_processors/NormalLineProcessorNode.d.ts +10 -0
  157. package/dist/components/dialog_manager/behavior_tree/line_processors/NormalLineProcessorNode.js +38 -0
  158. package/dist/components/dialog_manager/behavior_tree/line_processors/SetVariableNode.d.ts +11 -0
  159. package/dist/components/dialog_manager/behavior_tree/line_processors/SetVariableNode.js +31 -0
  160. package/dist/components/dialog_manager/behavior_tree/line_processors/commands/DeclareCommand.d.ts +8 -0
  161. package/dist/components/dialog_manager/behavior_tree/line_processors/commands/DeclareCommand.js +39 -0
  162. package/dist/components/dialog_manager/behavior_tree/line_processors/commands/JumpCommand.d.ts +8 -0
  163. package/dist/components/dialog_manager/behavior_tree/line_processors/commands/JumpCommand.js +40 -0
  164. package/dist/components/dialog_manager/behavior_tree/line_processors/commands/UnvisitCommand.d.ts +9 -0
  165. package/dist/components/dialog_manager/behavior_tree/line_processors/commands/UnvisitCommand.js +28 -0
  166. package/dist/index.d.ts +8 -0
  167. package/dist/index.js +8 -0
  168. package/dist/scripts/SetDefaultEnvironment.d.ts +1 -0
  169. package/dist/scripts/SetDefaultEnvironment.js +41 -0
  170. package/dist/scripts/pineapple_fiber/PineappleWeaver.d.ts +9 -0
  171. package/dist/scripts/pineapple_fiber/PineappleWeaver.js +201 -0
  172. package/dist/scripts/util/FileManagement.d.ts +7 -0
  173. package/dist/scripts/util/FileManagement.js +35 -0
  174. package/dist/scripts/util/ManualCheck.d.ts +1 -0
  175. package/dist/scripts/util/ManualCheck.js +28 -0
  176. package/dist/scripts/util/ManualCheckRun.d.ts +1 -0
  177. package/dist/scripts/util/ManualCheckRun.js +6 -0
  178. package/dist/store.d.ts +17 -0
  179. package/dist/store.js +17 -0
  180. package/dist/styles/DefaultGridContainer.css +61 -0
  181. package/dist/theme.postcss +107 -0
  182. package/dist/types/BlogBlurbMeta.d.ts +11 -0
  183. package/dist/types/BlogBlurbMeta.js +16 -0
  184. package/dist/types/BreadcrumbData.d.ts +4 -0
  185. package/dist/types/BreadcrumbData.js +1 -0
  186. package/dist/types/pineapple_fiber/DialogDetail.d.ts +6 -0
  187. package/dist/types/pineapple_fiber/DialogDetail.js +1 -0
  188. package/dist/types/pineapple_fiber/DialogState.d.ts +5 -0
  189. package/dist/types/pineapple_fiber/DialogState.js +6 -0
  190. package/dist/types/pineapple_fiber/DialogVariableStore.d.ts +2 -0
  191. package/dist/types/pineapple_fiber/DialogVariableStore.js +20 -0
  192. package/dist/types/pineapple_fiber/PortraitType.d.ts +11 -0
  193. package/dist/types/pineapple_fiber/PortraitType.js +12 -0
  194. package/dist/util/stable_random.d.ts +2 -0
  195. package/dist/util/stable_random.js +15 -0
  196. package/package.json +67 -0
  197. package/src/app.html +13 -0
  198. package/src/lib/app.postcss +94 -0
  199. package/src/lib/assets/bg_tiled/bg_tiled_ares.png +0 -0
  200. package/src/lib/assets/bg_tiled/bg_tiled_corn.png +0 -0
  201. package/src/lib/assets/bg_tiled/bg_tiled_pineapple.png +0 -0
  202. package/src/lib/assets/bg_tiled/bg_tiled_reinhard.png +0 -0
  203. package/src/lib/assets/bg_tiled/bg_tiled_tomato.png +0 -0
  204. package/src/lib/assets/bg_tiled/bg_tiled_turnip.png +0 -0
  205. package/src/lib/assets/characters/ares/ares_blushing.webp +0 -0
  206. package/src/lib/assets/characters/ares/ares_disappointed.webp +0 -0
  207. package/src/lib/assets/characters/ares/ares_happy.webp +0 -0
  208. package/src/lib/assets/characters/ares/ares_lets_go.webp +0 -0
  209. package/src/lib/assets/characters/ares/ares_logo.webp +0 -0
  210. package/src/lib/assets/characters/ares/ares_mad.webp +0 -0
  211. package/src/lib/assets/characters/ares/ares_neutral.webp +0 -0
  212. package/src/lib/assets/characters/ares/ares_slightly_mad.webp +0 -0
  213. package/src/lib/assets/characters/ares/ares_surprised.webp +0 -0
  214. package/src/lib/assets/characters/ares/ares_yay.webp +0 -0
  215. package/src/lib/assets/game_dev/footage-chef-wings.gif +0 -0
  216. package/src/lib/assets/game_dev/footage-depreciation.webm +0 -0
  217. package/src/lib/assets/game_dev/footage-thinking-of-flowers.webm +0 -0
  218. package/src/lib/assets/game_dev/screenshot-game-jam-mama.png +0 -0
  219. package/src/lib/assets/game_dev/screenshot-string-hop.png +0 -0
  220. package/src/lib/assets/game_dev/screenshot-wet-ass-road.png +0 -0
  221. package/src/lib/assets/icons/chat_cursor.svg +47 -0
  222. package/src/lib/assets/icons/external_link.svg +50 -0
  223. package/src/lib/assets/temp/background-image.jpg +0 -0
  224. package/src/lib/assets/temp/bitbucket-logo.png +0 -0
  225. package/src/lib/assets/temp/github-logo.png +0 -0
  226. package/src/lib/assets/temp/header-hep-cat.mp4 +0 -0
  227. package/src/lib/assets/temp/header-hep-cat.ogg +0 -0
  228. package/src/lib/assets/temp/header-hep-cat.webm +0 -0
  229. package/src/lib/assets/temp/header-pengi.mp4 +0 -0
  230. package/src/lib/assets/temp/header-pengi.webm +0 -0
  231. package/src/lib/assets/temp/header-soulwork.mp4 +0 -0
  232. package/src/lib/assets/temp/header-soulwork.ogg +0 -0
  233. package/src/lib/assets/temp/header-soulwork.webm +0 -0
  234. package/src/lib/components/DialogOverlay.svelte +100 -0
  235. package/src/lib/components/LazyAsset.svelte +114 -0
  236. package/src/lib/components/LazyAssetType.ts +11 -0
  237. package/src/lib/components/PineappleBaseLayout.svelte +165 -0
  238. package/src/lib/components/RandomizedBackground.svelte +77 -0
  239. package/src/lib/components/RandomizedImage.svelte +31 -0
  240. package/src/lib/components/dialog_manager/DialogManager.ts +282 -0
  241. package/src/lib/components/dialog_manager/DialogManagerStore.ts +52 -0
  242. package/src/lib/components/dialog_manager/DialogProcessor.ts +68 -0
  243. package/src/lib/components/dialog_manager/DialogUtils.ts +10 -0
  244. package/src/lib/components/dialog_manager/behavior_tree/core/BTreeUtils.ts +40 -0
  245. package/src/lib/components/dialog_manager/behavior_tree/core/BaseBehaviorResult.ts +5 -0
  246. package/src/lib/components/dialog_manager/behavior_tree/core/BehaviorNode.ts +3 -0
  247. package/src/lib/components/dialog_manager/behavior_tree/core/BehaviorStatus.ts +5 -0
  248. package/src/lib/components/dialog_manager/behavior_tree/core/SelectorNode.ts +32 -0
  249. package/src/lib/components/dialog_manager/behavior_tree/expression/ExpressionArguments.ts +6 -0
  250. package/src/lib/components/dialog_manager/behavior_tree/expression/ExpressionBehaviorNode.ts +5 -0
  251. package/src/lib/components/dialog_manager/behavior_tree/expression/ExpressionEvaluator.ts +236 -0
  252. package/src/lib/components/dialog_manager/behavior_tree/expression/ExpressionResult.ts +6 -0
  253. package/src/lib/components/dialog_manager/behavior_tree/expression/ExpressionSelectorNode.ts +20 -0
  254. package/src/lib/components/dialog_manager/behavior_tree/expression/ExpressionState.ts +3 -0
  255. package/src/lib/components/dialog_manager/behavior_tree/expression/OperandNode.ts +19 -0
  256. package/src/lib/components/dialog_manager/behavior_tree/expression/OperatorNode.ts +37 -0
  257. package/src/lib/components/dialog_manager/behavior_tree/expression/commands/CommandExpressionNode.ts +28 -0
  258. package/src/lib/components/dialog_manager/behavior_tree/expression/commands/CommandLogicNode.ts +34 -0
  259. package/src/lib/components/dialog_manager/behavior_tree/expression/commands/CommandMap.ts +26 -0
  260. package/src/lib/components/dialog_manager/behavior_tree/expression/commands/RandomRangeCommand.ts +31 -0
  261. package/src/lib/components/dialog_manager/behavior_tree/expression/commands/VisitedCommand.ts +38 -0
  262. package/src/lib/components/dialog_manager/behavior_tree/expression/commands/VisitedCountCommand.ts +28 -0
  263. package/src/lib/components/dialog_manager/behavior_tree/expression/operators/AndOperator.ts +24 -0
  264. package/src/lib/components/dialog_manager/behavior_tree/expression/operators/EqualityOperator.ts +21 -0
  265. package/src/lib/components/dialog_manager/behavior_tree/expression/operators/GreaterThanEqualOperator.ts +21 -0
  266. package/src/lib/components/dialog_manager/behavior_tree/expression/operators/GreaterThanOperator.ts +21 -0
  267. package/src/lib/components/dialog_manager/behavior_tree/expression/operators/InequalityOperator.ts +19 -0
  268. package/src/lib/components/dialog_manager/behavior_tree/expression/operators/LessThanEqualOperator.ts +21 -0
  269. package/src/lib/components/dialog_manager/behavior_tree/expression/operators/LessThanOperator.ts +21 -0
  270. package/src/lib/components/dialog_manager/behavior_tree/expression/operators/NegationOperator.ts +20 -0
  271. package/src/lib/components/dialog_manager/behavior_tree/expression/operators/OperatorLogicNode.ts +42 -0
  272. package/src/lib/components/dialog_manager/behavior_tree/expression/operators/OperatorMap.ts +53 -0
  273. package/src/lib/components/dialog_manager/behavior_tree/expression/operators/OrOperator.ts +22 -0
  274. package/src/lib/components/dialog_manager/behavior_tree/expression/operators/XorOperator.ts +24 -0
  275. package/src/lib/components/dialog_manager/behavior_tree/expression/operators/arithmetic/DivisionOperator.ts +23 -0
  276. package/src/lib/components/dialog_manager/behavior_tree/expression/operators/arithmetic/MinusOperator.ts +23 -0
  277. package/src/lib/components/dialog_manager/behavior_tree/expression/operators/arithmetic/MultiplicationOperator.ts +21 -0
  278. package/src/lib/components/dialog_manager/behavior_tree/expression/operators/arithmetic/PlusOperator.ts +23 -0
  279. package/src/lib/components/dialog_manager/behavior_tree/expression/operators/arithmetic/RemainderDivisionOperator.ts +23 -0
  280. package/src/lib/components/dialog_manager/behavior_tree/line_core/LineBehaviorNode.ts +5 -0
  281. package/src/lib/components/dialog_manager/behavior_tree/line_core/LineBehaviorResult.ts +7 -0
  282. package/src/lib/components/dialog_manager/behavior_tree/line_core/LineNodeArguments.ts +7 -0
  283. package/src/lib/components/dialog_manager/behavior_tree/line_core/LineSelectorNode.ts +20 -0
  284. package/src/lib/components/dialog_manager/behavior_tree/line_processors/BehaviorState.ts +6 -0
  285. package/src/lib/components/dialog_manager/behavior_tree/line_processors/ElseIfNode.ts +59 -0
  286. package/src/lib/components/dialog_manager/behavior_tree/line_processors/ElseNode.ts +55 -0
  287. package/src/lib/components/dialog_manager/behavior_tree/line_processors/EndIfNode.ts +28 -0
  288. package/src/lib/components/dialog_manager/behavior_tree/line_processors/IfMode.ts +7 -0
  289. package/src/lib/components/dialog_manager/behavior_tree/line_processors/IfNode.ts +49 -0
  290. package/src/lib/components/dialog_manager/behavior_tree/line_processors/IgnoreGuardNode.ts +30 -0
  291. package/src/lib/components/dialog_manager/behavior_tree/line_processors/IgnoreJumpNode.ts +24 -0
  292. package/src/lib/components/dialog_manager/behavior_tree/line_processors/LineCommentNode.ts +22 -0
  293. package/src/lib/components/dialog_manager/behavior_tree/line_processors/NormalLineProcessorNode.ts +48 -0
  294. package/src/lib/components/dialog_manager/behavior_tree/line_processors/SetVariableNode.ts +37 -0
  295. package/src/lib/components/dialog_manager/behavior_tree/line_processors/commands/DeclareCommand.ts +48 -0
  296. package/src/lib/components/dialog_manager/behavior_tree/line_processors/commands/JumpCommand.ts +51 -0
  297. package/src/lib/components/dialog_manager/behavior_tree/line_processors/commands/UnvisitCommand.ts +34 -0
  298. package/src/lib/index.ts +9 -0
  299. package/src/lib/scripts/SetDefaultEnvironment.ts +45 -0
  300. package/src/lib/scripts/pineapple_fiber/PineappleWeaver.ts +252 -0
  301. package/src/lib/scripts/util/FileManagement.ts +38 -0
  302. package/src/lib/scripts/util/ManualCheck.ts +32 -0
  303. package/src/lib/scripts/util/ManualCheckRun.ts +7 -0
  304. package/src/lib/store.ts +18 -0
  305. package/src/lib/styles/DefaultGridContainer.css +61 -0
  306. package/src/lib/theme.postcss +107 -0
  307. package/src/lib/types/BlogBlurbMeta.ts +16 -0
  308. package/src/lib/types/BreadcrumbData.ts +4 -0
  309. package/src/lib/types/pineapple_fiber/DialogDetail.ts +7 -0
  310. package/src/lib/types/pineapple_fiber/DialogState.ts +5 -0
  311. package/src/lib/types/pineapple_fiber/DialogVariableStore.ts +24 -0
  312. package/src/lib/types/pineapple_fiber/PortraitType.ts +11 -0
  313. package/src/lib/util/stable_random.ts +16 -0
  314. package/src/routes/+error.svelte +26 -0
  315. package/src/routes/+layout.svelte +23 -0
  316. package/src/routes/+page.svelte +41 -0
  317. package/src/routes/Error.yarn +7 -0
  318. package/src/routes/ErrorYarn.ts +24 -0
  319. package/src/routes/portfolio/+page.svelte +0 -0
  320. package/src/types.d.ts +8 -0
  321. package/static/default-card.png +0 -0
  322. package/static/favicon.png +0 -0
@@ -0,0 +1,41 @@
1
+ /**
2
+ * DialogManagerStore is for variables that will be used as a Svelte store
3
+ * or is saved in local storage
4
+ */
5
+ /// <reference types="svelte" />
6
+ import type { DialogMapStore } from "../../types/pineapple_fiber/DialogVariableStore";
7
+ import type { DialogDetail } from "../../types/pineapple_fiber/DialogDetail";
8
+ import { DialogManager } from "./DialogManager";
9
+ /**
10
+ * Enables the dialogue overlay
11
+ *
12
+ * @example
13
+ * When updating to false, remember to restore the value to true, our default value, onDestroy.
14
+ * Avoid async to prevent weird flashes of updates!
15
+ * ```
16
+ * import {enableDialogueOverlay} from "../../store.ts";
17
+ * enableDialogueOverlay.update(() => false);
18
+ *
19
+ * onDestroy(() => {
20
+ * enableDialogueOverlay.update(() => true);
21
+ * });
22
+ * ```
23
+ */
24
+ export declare const enableDialogueOverlay: import("svelte/store").Writable<boolean>;
25
+ export declare const dialogVariableStore: DialogMapStore;
26
+ export declare const updateRate: number;
27
+ export declare const defaultDialogMessage: DialogDetail[];
28
+ /**
29
+ * strictly must be declared last! or you might receive a weird error that looks like:
30
+ *
31
+ * 2:04:21 AM [vite] Error when evaluating SSR module /src/lib/components/dialog_manager/DialogManagerStore.ts:
32
+ * |- TypeError: Cannot read properties of undefined (reading '0')
33
+ * at <instance_members_initializer> (/src/lib/components/dialog_manager/DialogManager.ts:38:67)
34
+ * at new DialogManager (/src/lib/components/dialog_manager/DialogManager.ts:53:14)
35
+ * at eval (/src/lib/components/dialog_manager/DialogManagerStore.ts:15:23)
36
+ * at async instantiateModule (file:///C:/Users/Pumpkin/Projects/Web/pineapple/node_modules/vite/dist/node/chunks/dep-934dbc7c.js:54360:9)
37
+ *
38
+ * what this means is that one member of dialogManager cannot be initialized. in our case, it was the
39
+ * defaultDialogMessage not yet being initialized
40
+ */
41
+ export declare const dialogManager: DialogManager;
@@ -0,0 +1,45 @@
1
+ /**
2
+ * DialogManagerStore is for variables that will be used as a Svelte store
3
+ * or is saved in local storage
4
+ */
5
+ import { createNewMapStore } from "../../types/pineapple_fiber/DialogVariableStore";
6
+ import { writable } from "svelte/store";
7
+ import { DialogManager } from "./DialogManager";
8
+ /**
9
+ * Enables the dialogue overlay
10
+ *
11
+ * @example
12
+ * When updating to false, remember to restore the value to true, our default value, onDestroy.
13
+ * Avoid async to prevent weird flashes of updates!
14
+ * ```
15
+ * import {enableDialogueOverlay} from "../../store.ts";
16
+ * enableDialogueOverlay.update(() => false);
17
+ *
18
+ * onDestroy(() => {
19
+ * enableDialogueOverlay.update(() => true);
20
+ * });
21
+ * ```
22
+ */
23
+ export const enableDialogueOverlay = writable(true);
24
+ export const dialogVariableStore = createNewMapStore();
25
+ export const updateRate = 40 / 1000; // *at least* 40ms per letter
26
+ // todo: if we go through doing yarn to typescript, move this!
27
+ export const defaultDialogMessage = [
28
+ {
29
+ textContent: `<p>Have you drank water? Or perhaps, you've checked out <a target="_blank" class="external-link" href="http://crouton.net">one of the best webpages</a> out there?`
30
+ }
31
+ ];
32
+ /**
33
+ * strictly must be declared last! or you might receive a weird error that looks like:
34
+ *
35
+ * 2:04:21 AM [vite] Error when evaluating SSR module /src/lib/components/dialog_manager/DialogManagerStore.ts:
36
+ * |- TypeError: Cannot read properties of undefined (reading '0')
37
+ * at <instance_members_initializer> (/src/lib/components/dialog_manager/DialogManager.ts:38:67)
38
+ * at new DialogManager (/src/lib/components/dialog_manager/DialogManager.ts:53:14)
39
+ * at eval (/src/lib/components/dialog_manager/DialogManagerStore.ts:15:23)
40
+ * at async instantiateModule (file:///C:/Users/Pumpkin/Projects/Web/pineapple/node_modules/vite/dist/node/chunks/dep-934dbc7c.js:54360:9)
41
+ *
42
+ * what this means is that one member of dialogManager cannot be initialized. in our case, it was the
43
+ * defaultDialogMessage not yet being initialized
44
+ */
45
+ export const dialogManager = new DialogManager();
@@ -0,0 +1,13 @@
1
+ import type { DialogDetail } from "../../types/pineapple_fiber/DialogDetail";
2
+ import { LineSelectorNode } from "./behavior_tree/line_core/LineSelectorNode";
3
+ /**
4
+ * DialogProcessor processes dialogs
5
+ */
6
+ export declare class DialogProcessor {
7
+ processingTree: LineSelectorNode;
8
+ /**
9
+ * process the dialog line by line and return a presentable string
10
+ * @param dialogDetail
11
+ */
12
+ processDialog: (dialogDetail: DialogDetail) => string;
13
+ }
@@ -0,0 +1,62 @@
1
+ import { BehaviorState } from "./behavior_tree/line_processors/BehaviorState";
2
+ import { IfNode } from "./behavior_tree/line_processors/IfNode";
3
+ import { EndIfNode } from "./behavior_tree/line_processors/EndIfNode";
4
+ import { ElseNode } from "./behavior_tree/line_processors/ElseNode";
5
+ import { ElseIfNode } from "./behavior_tree/line_processors/ElseIfNode";
6
+ import { SetVariableNode } from "./behavior_tree/line_processors/SetVariableNode";
7
+ import { IgnoreGuardNode } from "./behavior_tree/line_processors/IgnoreGuardNode";
8
+ import { NormalLineProcessorNode } from "./behavior_tree/line_processors/NormalLineProcessorNode";
9
+ import { LineSelectorNode } from "./behavior_tree/line_core/LineSelectorNode";
10
+ import { browser } from "$app/environment";
11
+ import { LineCommentNode } from "./behavior_tree/line_processors/LineCommentNode";
12
+ import { DeclareCommand } from "./behavior_tree/line_processors/commands/DeclareCommand";
13
+ import { JumpCommand } from "./behavior_tree/line_processors/commands/JumpCommand";
14
+ import { IgnoreJumpNode } from "./behavior_tree/line_processors/IgnoreJumpNode";
15
+ import { UnvisitCommand } from "./behavior_tree/line_processors/commands/UnvisitCommand";
16
+ /**
17
+ * DialogProcessor processes dialogs
18
+ */
19
+ export class DialogProcessor {
20
+ processingTree = new LineSelectorNode([
21
+ /*region comment based formats*/
22
+ new IgnoreJumpNode(), // must be prioritized above line comment node
23
+ new LineCommentNode(),
24
+ /*endregion commend based formats*/
25
+ new EndIfNode(),
26
+ new ElseIfNode(),
27
+ new ElseNode(),
28
+ new IfNode(),
29
+ new IgnoreGuardNode(),
30
+ /*region commands*/
31
+ new SetVariableNode(),
32
+ new DeclareCommand(),
33
+ new JumpCommand(),
34
+ new UnvisitCommand(),
35
+ /*endregion commands*/
36
+ new NormalLineProcessorNode()
37
+ ]);
38
+ /**
39
+ * process the dialog line by line and return a presentable string
40
+ * @param dialogDetail
41
+ */
42
+ processDialog = (dialogDetail) => {
43
+ if (!browser) {
44
+ return ""; // don't process any line in the server
45
+ }
46
+ let currentState = new BehaviorState();
47
+ // split each yarn line
48
+ return dialogDetail.textContent
49
+ .trim()
50
+ .split("\n")
51
+ .map((line_, index) => {
52
+ const result = this.processingTree.process({
53
+ initState: currentState,
54
+ line: line_.trim(),
55
+ lineIndex: index
56
+ });
57
+ currentState = result.nextState;
58
+ return result.renderedLine;
59
+ })
60
+ .join("\n"); // combine all processed lines
61
+ };
62
+ }
@@ -0,0 +1,5 @@
1
+ declare class _DialogUtils {
2
+ isNodeVisited: (dialogId: string) => boolean;
3
+ }
4
+ export declare const DialogUtils: _DialogUtils;
5
+ export {};
@@ -0,0 +1,8 @@
1
+ import { dialogVariableStore } from "./DialogManagerStore";
2
+ class _DialogUtils {
3
+ isNodeVisited = (dialogId) => {
4
+ const value = Number(dialogVariableStore.getItem(`+${dialogId}`));
5
+ return !isNaN(value) && value > 0;
6
+ };
7
+ }
8
+ export const DialogUtils = new _DialogUtils();
@@ -0,0 +1,15 @@
1
+ declare class BTreeUtils {
2
+ /**
3
+ * peek the top of a stack object with the assumption it's not an empty stack
4
+ * todo: add possible protection like an assertion
5
+ * @param stack
6
+ * @return top of the stack
7
+ */
8
+ peek: <T>(stack: T[]) => T;
9
+ removeQuotes: (value: string) => string;
10
+ simplifyToken: (oldToken: string) => string;
11
+ isTrue: (value: string) => boolean;
12
+ isFalse: (value: string) => boolean;
13
+ }
14
+ export declare const btreeUtils: BTreeUtils;
15
+ export {};
@@ -0,0 +1,34 @@
1
+ class BTreeUtils {
2
+ /**
3
+ * peek the top of a stack object with the assumption it's not an empty stack
4
+ * todo: add possible protection like an assertion
5
+ * @param stack
6
+ * @return top of the stack
7
+ */
8
+ peek = (stack) => {
9
+ return stack[stack.length - 1];
10
+ };
11
+ removeQuotes = (value) => {
12
+ return value
13
+ .replace(/^"/, "") // remove possible " at the start: https://stackoverflow.com/a/2182602
14
+ .replace(/"$/, ""); // remove possible " at the end: https://stackoverflow.com/a/12249011
15
+ };
16
+ simplifyToken = (oldToken) => {
17
+ if (oldToken[0] == "$") {
18
+ const value = localStorage.getItem(oldToken);
19
+ if (value) {
20
+ return value;
21
+ }
22
+ console.error(`Value obtained in local storage false: ${oldToken}`);
23
+ return "";
24
+ }
25
+ return btreeUtils.removeQuotes(oldToken);
26
+ };
27
+ isTrue = (value) => {
28
+ return value.trim().toLowerCase() === "true";
29
+ };
30
+ isFalse = (value) => {
31
+ return value.trim().toLowerCase() === "false";
32
+ };
33
+ }
34
+ export const btreeUtils = new BTreeUtils();
@@ -0,0 +1,4 @@
1
+ import type { BehaviorStatus } from "./BehaviorStatus";
2
+ export interface BaseBehaviorResult {
3
+ status: BehaviorStatus;
4
+ }
@@ -0,0 +1,3 @@
1
+ export interface BehaviorNode<Argument, Result> {
2
+ process: (nodeArgs: Argument) => Result;
3
+ }
@@ -0,0 +1,5 @@
1
+ export declare enum BehaviorStatus {
2
+ Running = 0,
3
+ Success = 1,
4
+ Failure = 2
5
+ }
@@ -0,0 +1,6 @@
1
+ export var BehaviorStatus;
2
+ (function (BehaviorStatus) {
3
+ BehaviorStatus[BehaviorStatus["Running"] = 0] = "Running";
4
+ BehaviorStatus[BehaviorStatus["Success"] = 1] = "Success";
5
+ BehaviorStatus[BehaviorStatus["Failure"] = 2] = "Failure";
6
+ })(BehaviorStatus || (BehaviorStatus = {}));
@@ -0,0 +1,12 @@
1
+ import type { BehaviorNode } from "./BehaviorNode";
2
+ import type { BaseBehaviorResult } from "./BaseBehaviorResult";
3
+ /**
4
+ * Selector is a composite behavior node where it tries to process everything until it
5
+ * finds a non-failing node
6
+ */
7
+ export declare abstract class SelectorNode<Argument, Result extends BaseBehaviorResult> implements BehaviorNode<Argument, Result> {
8
+ nodeList: BehaviorNode<Argument, Result>[];
9
+ abstract defaultResult: () => Result;
10
+ protected constructor(nodeList: BehaviorNode<Argument, Result>[]);
11
+ process(nodeArgs: Argument): Result;
12
+ }
@@ -0,0 +1,22 @@
1
+ import { BehaviorStatus } from "./BehaviorStatus";
2
+ /**
3
+ * Selector is a composite behavior node where it tries to process everything until it
4
+ * finds a non-failing node
5
+ */
6
+ export class SelectorNode {
7
+ nodeList;
8
+ constructor(nodeList) {
9
+ this.nodeList = nodeList;
10
+ }
11
+ process(nodeArgs) {
12
+ let finalResult = this.defaultResult();
13
+ for (const node of this.nodeList) {
14
+ const currentResult = node.process(nodeArgs);
15
+ if (currentResult.status !== BehaviorStatus.Failure) {
16
+ finalResult = currentResult;
17
+ break;
18
+ }
19
+ }
20
+ return finalResult;
21
+ }
22
+ }
@@ -0,0 +1,5 @@
1
+ import type { ExpressionState } from "./ExpressionState";
2
+ export interface ExpressionArguments {
3
+ token: string;
4
+ initState: ExpressionState;
5
+ }
@@ -0,0 +1,4 @@
1
+ import type { BehaviorNode } from "../core/BehaviorNode";
2
+ import type { ExpressionArguments } from "./ExpressionArguments";
3
+ import type { ExpressionResult } from "./ExpressionResult";
4
+ export type ExpressionBehaviorNode = BehaviorNode<ExpressionArguments, ExpressionResult>;
@@ -0,0 +1,15 @@
1
+ import { ExpressionSelectorNode } from "./ExpressionSelectorNode";
2
+ declare class ExpressionEvaluator {
3
+ evaluatorTree: ExpressionSelectorNode;
4
+ isNumeric: (str: string) => boolean;
5
+ getPrecedence: (token: string) => number;
6
+ evaluateFreeform: (line: string, prefix: string) => string[];
7
+ /**
8
+ * evaluates a yarn if or elseif statement
9
+ * @param line is the current line being evaluated
10
+ * @param prefix is either "<<if" or "<<elseif"
11
+ */
12
+ evaluate: (line: string, prefix: string) => boolean;
13
+ }
14
+ export declare const expressionEvaluator: ExpressionEvaluator;
15
+ export {};
@@ -0,0 +1,220 @@
1
+ import { browser } from "$app/environment";
2
+ import { OperatorNode } from "./OperatorNode";
3
+ import { OperandNode } from "./OperandNode";
4
+ import { ExpressionSelectorNode } from "./ExpressionSelectorNode";
5
+ import { btreeUtils } from "../core/BTreeUtils";
6
+ import { CommandExpressionNode } from "./commands/CommandExpressionNode";
7
+ class ExpressionEvaluator {
8
+ evaluatorTree = new ExpressionSelectorNode([
9
+ new OperatorNode(),
10
+ new CommandExpressionNode(),
11
+ new OperandNode()
12
+ ]);
13
+ // from https://stackoverflow.com/a/175787/17836168
14
+ isNumeric = (str) => {
15
+ return (
16
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
17
+ // @ts-ignore
18
+ !isNaN(str) && // use type coercion to parse the _entirety_ of the string (`parseFloat` alone does not do this)...
19
+ !isNaN(parseFloat(str))); // ...and ensure strings of whitespace fail
20
+ };
21
+ getPrecedence = (token) => {
22
+ switch (token) {
23
+ case "&&":
24
+ case "||":
25
+ case "^":
26
+ return 1;
27
+ case "==":
28
+ case "!=":
29
+ return 2;
30
+ case "<":
31
+ case ">":
32
+ case ">=":
33
+ case "<=":
34
+ return 3;
35
+ case "+":
36
+ case "-":
37
+ return 4;
38
+ case "*":
39
+ case "/":
40
+ case "%":
41
+ return 3;
42
+ case "!":
43
+ return 4;
44
+ case "(":
45
+ case ")":
46
+ return 0; // hack lol
47
+ default:
48
+ // usable to test if operator lol
49
+ // console.error(`Unknown token: ${token}`);
50
+ return -1;
51
+ }
52
+ };
53
+ evaluateFreeform = (line, prefix) => {
54
+ if (!browser) {
55
+ return []; // do not process when not in browser
56
+ }
57
+ // tokenize first!
58
+ const infixTokens = [];
59
+ const expression = line
60
+ .split("//")[0]
61
+ .trim()
62
+ .slice(prefix === "" ? 0 : prefix.trim().length + 1, line.length - 2);
63
+ // region tokenizer
64
+ // console.log("Tokenizing:", expression);
65
+ const operators = "+-*/%!<>=&|^";
66
+ let currentToken = "";
67
+ let escapeToggle = false;
68
+ let quoteToggle = false;
69
+ let operatorFound = false;
70
+ for (const character of expression) {
71
+ if (escapeToggle) {
72
+ currentToken += character;
73
+ escapeToggle = false;
74
+ }
75
+ else if (quoteToggle) {
76
+ currentToken += character;
77
+ if (character === '"') {
78
+ infixTokens.push(currentToken);
79
+ currentToken = "";
80
+ quoteToggle = false;
81
+ }
82
+ }
83
+ else if (operatorFound) {
84
+ if (operators.includes(character)) {
85
+ currentToken += character;
86
+ }
87
+ else if ("()".includes(character)) {
88
+ if (currentToken !== "") {
89
+ infixTokens.push(currentToken);
90
+ }
91
+ infixTokens.push(character);
92
+ currentToken = "";
93
+ operatorFound = false;
94
+ }
95
+ else {
96
+ operatorFound = false;
97
+ infixTokens.push(currentToken);
98
+ if (character !== " ") {
99
+ currentToken = character;
100
+ }
101
+ else {
102
+ currentToken = "";
103
+ }
104
+ }
105
+ }
106
+ else if (character === "," || character === " ") {
107
+ if (currentToken !== "") {
108
+ infixTokens.push(currentToken);
109
+ currentToken = "";
110
+ }
111
+ }
112
+ else if (character === '"') {
113
+ // do quote stuff unless we had an escape toggle
114
+ currentToken += character;
115
+ quoteToggle = true;
116
+ }
117
+ else if (operators.includes(character)) {
118
+ if (currentToken !== "") {
119
+ infixTokens.push(currentToken);
120
+ }
121
+ currentToken = character;
122
+ operatorFound = true;
123
+ }
124
+ else if ("()".includes(character)) {
125
+ if (currentToken !== "") {
126
+ // determine if function
127
+ if (currentToken[0] !== "$" && // should not be a variable stand-in
128
+ currentToken[0] !== '"' && // should not be a string literal
129
+ !this.isNumeric(currentToken[0]) // should not be a number literal
130
+ ) {
131
+ currentToken = `#${currentToken}`;
132
+ }
133
+ infixTokens.push(currentToken);
134
+ }
135
+ infixTokens.push(character);
136
+ currentToken = "";
137
+ }
138
+ else {
139
+ currentToken += character;
140
+ }
141
+ }
142
+ if (currentToken !== "") {
143
+ infixTokens.push(currentToken);
144
+ }
145
+ // console.log(infixTokens);
146
+ // endregion tokenizer
147
+ // region infix to postfix
148
+ // convert from infix to postfix
149
+ // algo from https://www.geeksforgeeks.org/convert-infix-expression-to-postfix-expression/
150
+ // console.log(infixTokens);
151
+ const postfixTokens = [];
152
+ const stack = [];
153
+ infixTokens.forEach((token) => {
154
+ if (token.startsWith("#")) {
155
+ stack.push(token);
156
+ }
157
+ else if (token === "(") {
158
+ stack.push("(");
159
+ }
160
+ else if (token === ")") {
161
+ while (btreeUtils.peek(stack) !== "(") {
162
+ // just for safety
163
+ if (stack.length === 0) {
164
+ console.error("Assumption was made in postfix conversion that stack will not be empty! It was wrong!");
165
+ throw new Error("Wrong postfix conversion!");
166
+ }
167
+ postfixTokens.push(stack.pop());
168
+ }
169
+ stack.pop(); // remove "("
170
+ if (stack.length > 0 && btreeUtils.peek(stack).startsWith("#")) {
171
+ postfixTokens.push(stack.pop());
172
+ }
173
+ }
174
+ else if (![-1, 5].includes(this.getPrecedence(token))) {
175
+ while (stack.length > 0 &&
176
+ this.getPrecedence(btreeUtils.peek(stack)) >= this.getPrecedence(token)) {
177
+ postfixTokens.push(stack.pop());
178
+ }
179
+ stack.push(token);
180
+ }
181
+ else {
182
+ // operand
183
+ postfixTokens.push(token);
184
+ }
185
+ });
186
+ // pop all remaining elements from the stack
187
+ while (stack.length > 0) {
188
+ postfixTokens.push(stack.pop());
189
+ }
190
+ // console.log("Finished postfix", postfixTokens);
191
+ // endregion infix to postfix
192
+ // evaluate
193
+ let currentState = {
194
+ operandStack: []
195
+ };
196
+ postfixTokens.forEach((token) => {
197
+ // console.log("Current token", token);
198
+ const result = this.evaluatorTree.process({
199
+ initState: currentState,
200
+ token: token
201
+ });
202
+ // console.log("Token evaluated with result", result.nextState.operandStack.toString());
203
+ currentState = result.nextState;
204
+ });
205
+ // console.log("Result", currentState.operandStack);
206
+ return currentState.operandStack;
207
+ };
208
+ /**
209
+ * evaluates a yarn if or elseif statement
210
+ * @param line is the current line being evaluated
211
+ * @param prefix is either "<<if" or "<<elseif"
212
+ */
213
+ evaluate = (line, prefix) => {
214
+ if (!browser) {
215
+ return false; // do not process when not in browser
216
+ }
217
+ return String(btreeUtils.peek(this.evaluateFreeform(line, prefix))) === "true";
218
+ };
219
+ }
220
+ export const expressionEvaluator = new ExpressionEvaluator();
@@ -0,0 +1,5 @@
1
+ import type { BaseBehaviorResult } from "../core/BaseBehaviorResult";
2
+ import type { ExpressionState } from "./ExpressionState";
3
+ export interface ExpressionResult extends BaseBehaviorResult {
4
+ nextState: ExpressionState;
5
+ }
@@ -0,0 +1,8 @@
1
+ import { SelectorNode } from "../core/SelectorNode";
2
+ import type { ExpressionArguments } from "./ExpressionArguments";
3
+ import type { ExpressionResult } from "./ExpressionResult";
4
+ import type { ExpressionBehaviorNode } from "./ExpressionBehaviorNode";
5
+ export declare class ExpressionSelectorNode extends SelectorNode<ExpressionArguments, ExpressionResult> {
6
+ constructor(nodeList: ExpressionBehaviorNode[]);
7
+ defaultResult: () => ExpressionResult;
8
+ }
@@ -0,0 +1,15 @@
1
+ import { SelectorNode } from "../core/SelectorNode";
2
+ import { BehaviorStatus } from "../core/BehaviorStatus";
3
+ export class ExpressionSelectorNode extends SelectorNode {
4
+ constructor(nodeList) {
5
+ super(nodeList);
6
+ }
7
+ defaultResult = () => {
8
+ return {
9
+ nextState: {
10
+ operandStack: []
11
+ },
12
+ status: BehaviorStatus.Failure
13
+ };
14
+ };
15
+ }
@@ -0,0 +1,3 @@
1
+ export interface ExpressionState {
2
+ operandStack: string[];
3
+ }
@@ -0,0 +1,10 @@
1
+ import type { ExpressionBehaviorNode } from "./ExpressionBehaviorNode";
2
+ import type { ExpressionArguments } from "./ExpressionArguments";
3
+ import type { ExpressionResult } from "./ExpressionResult";
4
+ /**
5
+ * Puts the token as an operand
6
+ * It's always successful
7
+ */
8
+ export declare class OperandNode implements ExpressionBehaviorNode {
9
+ process(nodeArgs: ExpressionArguments): ExpressionResult;
10
+ }
@@ -0,0 +1,15 @@
1
+ import { BehaviorStatus } from "../core/BehaviorStatus";
2
+ import { btreeUtils } from "../core/BTreeUtils";
3
+ /**
4
+ * Puts the token as an operand
5
+ * It's always successful
6
+ */
7
+ export class OperandNode {
8
+ process(nodeArgs) {
9
+ nodeArgs.initState.operandStack.push(btreeUtils.simplifyToken(nodeArgs.token));
10
+ return {
11
+ nextState: nodeArgs.initState,
12
+ status: BehaviorStatus.Success
13
+ };
14
+ }
15
+ }
@@ -0,0 +1,11 @@
1
+ import type { ExpressionBehaviorNode } from "./ExpressionBehaviorNode";
2
+ import type { ExpressionArguments } from "./ExpressionArguments";
3
+ import type { ExpressionResult } from "./ExpressionResult";
4
+ /**
5
+ * A leaf node that returns:
6
+ * - Success if the current token is an operator, and does its associated logic
7
+ * - Failure if it is not an operator
8
+ */
9
+ export declare class OperatorNode implements ExpressionBehaviorNode {
10
+ process(nodeArgs: ExpressionArguments): ExpressionResult;
11
+ }