@kaspernj/api-maker 1.0.2011 → 1.0.2012

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 (410) hide show
  1. package/{.eslintrc.cjs → .eslintrc.js} +10 -1
  2. package/README.md +35 -0
  3. package/android/build.gradle +43 -0
  4. package/android/src/main/AndroidManifest.xml +2 -0
  5. package/android/src/main/java/expo/modules/api_maker/ApiMakerModule.kt +50 -0
  6. package/android/src/main/java/expo/modules/api_maker/ApiMakerView.kt +30 -0
  7. package/build/api.js +120 -0
  8. package/build/attribute-not-loaded-error.js +2 -0
  9. package/build/base-component.js +5 -0
  10. package/build/base-error.js +33 -0
  11. package/build/base-model/attribute.js +25 -0
  12. package/build/base-model/column.js +11 -0
  13. package/build/base-model/reflection.js +14 -0
  14. package/build/base-model/scope.js +11 -0
  15. package/build/base-model.js +828 -0
  16. package/build/bootstrap/attribute-row.js +135 -0
  17. package/build/bootstrap/attribute-rows.js +31 -0
  18. package/build/bootstrap/card.js +138 -0
  19. package/build/bootstrap/checkbox.js +97 -0
  20. package/build/bootstrap/checkboxes.js +183 -0
  21. package/build/bootstrap/index.js +2 -0
  22. package/build/bootstrap/input.js +129 -0
  23. package/build/bootstrap/invalid-feedback.js +27 -0
  24. package/build/bootstrap/paginate.js +150 -0
  25. package/build/bootstrap/radio-buttons.js +72 -0
  26. package/build/bootstrap/select.js +88 -0
  27. package/build/bootstrap/sort-link.js +131 -0
  28. package/build/cable-connection-pool.js +128 -0
  29. package/build/cable-subscription-pool.js +207 -0
  30. package/build/cable-subscription.js +21 -0
  31. package/build/cache-key-generator.js +81 -0
  32. package/build/can-can.js +134 -0
  33. package/build/channels-consumer.js +9 -0
  34. package/build/collection-loader.js +48 -0
  35. package/build/collection.js +280 -0
  36. package/build/command-submit-data.js +81 -0
  37. package/build/commands-pool.js +195 -0
  38. package/build/compose.js +9 -0
  39. package/build/config.js +62 -0
  40. package/build/custom-error.js +5 -0
  41. package/build/data-set-to-attributes.js +10 -0
  42. package/build/deserializer.js +56 -0
  43. package/build/destroy-error.js +5 -0
  44. package/build/devise.js +112 -0
  45. package/build/draggable-sort/controller.js +136 -0
  46. package/build/draggable-sort/index.js +114 -0
  47. package/build/draggable-sort/item.js +188 -0
  48. package/build/error-logger.js +101 -0
  49. package/build/error-messages.js +13 -0
  50. package/build/event-connection.js +32 -0
  51. package/build/event-emitter-listener.js +15 -0
  52. package/build/event-model-class.js +24 -0
  53. package/build/events.js +5 -0
  54. package/build/flash-message.js +79 -0
  55. package/build/form.js +83 -0
  56. package/build/history-expo.js +20 -0
  57. package/build/history-react-native.js +20 -0
  58. package/build/history.js +3 -0
  59. package/build/index.js +3 -0
  60. package/build/inputs/attachment.js +133 -0
  61. package/build/inputs/auto-submit.js +36 -0
  62. package/build/inputs/checkbox.js +138 -0
  63. package/build/inputs/checkboxes.js +112 -0
  64. package/build/inputs/id-for-component.js +15 -0
  65. package/build/inputs/input-wrapper.js +19 -0
  66. package/build/inputs/input.js +243 -0
  67. package/build/inputs/money.js +179 -0
  68. package/build/inputs/name-for-component.js +13 -0
  69. package/build/inputs/select.js +93 -0
  70. package/build/instance-of-class-name.js +23 -0
  71. package/build/key-value-store.js +53 -0
  72. package/build/link.js +73 -0
  73. package/build/logger.js +30 -0
  74. package/build/modal.js +38 -0
  75. package/build/model-class-require.js +13 -0
  76. package/build/model-events.js +30 -0
  77. package/build/model-name.js +28 -0
  78. package/build/model-prop-type.js +101 -0
  79. package/build/model-recipes-loader.js +32 -0
  80. package/build/model-recipes-model-loader.js +357 -0
  81. package/build/models-response-reader.js +40 -0
  82. package/build/models.js +8 -0
  83. package/build/money-formatter.js +78 -0
  84. package/build/not-loaded-error.js +2 -0
  85. package/build/params.js +61 -0
  86. package/build/preloaded.js +38 -0
  87. package/build/resize-observer.js +11 -0
  88. package/build/result.js +13 -0
  89. package/build/router/route.js +270 -0
  90. package/build/router/switch.js +72 -0
  91. package/build/router.js +59 -0
  92. package/build/routes-native.js +202 -0
  93. package/build/routes.js +50 -0
  94. package/build/run-last.js +35 -0
  95. package/build/serializer.js +63 -0
  96. package/build/services.js +20 -0
  97. package/build/session-status-updater.js +134 -0
  98. package/build/source-maps-loader.js +184 -0
  99. package/build/super-admin/config-reader.js +85 -0
  100. package/build/super-admin/edit-page/edit-attribute-checkbox.js +85 -0
  101. package/build/super-admin/edit-page/edit-attribute-content.js +55 -0
  102. package/build/super-admin/edit-page/edit-attribute-input.js +79 -0
  103. package/build/super-admin/edit-page/edit-attribute.js +77 -0
  104. package/build/super-admin/edit-page.js +123 -0
  105. package/build/super-admin/has-edit-config.js +12 -0
  106. package/build/super-admin/index-page.js +25 -0
  107. package/build/super-admin/index.js +181 -0
  108. package/build/super-admin/layout/header/index.js +161 -0
  109. package/build/super-admin/layout/index.js +164 -0
  110. package/build/super-admin/layout/menu/index.js +206 -0
  111. package/build/super-admin/layout/menu/menu-content.js +46 -0
  112. package/build/super-admin/layout/menu/menu-item.js +84 -0
  113. package/build/super-admin/layout/no-access.js +27 -0
  114. package/build/super-admin/model-class-table.js +61 -0
  115. package/build/super-admin/models.js +8 -0
  116. package/build/super-admin/show-nav.js +51 -0
  117. package/build/super-admin/show-page/belongs-to-attribute-row.js +29 -0
  118. package/build/super-admin/show-page/index.js +141 -0
  119. package/build/super-admin/show-reflection-actions.js +47 -0
  120. package/build/super-admin/show-reflection-link.js +48 -0
  121. package/build/super-admin/show-reflection-page.js +48 -0
  122. package/build/table/column-content.js +117 -0
  123. package/build/table/column-identifier.js +18 -0
  124. package/build/table/column-visible.js +7 -0
  125. package/build/table/components/column.js +21 -0
  126. package/build/table/components/flat-list.js +21 -0
  127. package/build/table/components/header.js +26 -0
  128. package/build/table/components/row.js +26 -0
  129. package/build/table/filters/attribute-element.js +44 -0
  130. package/build/table/filters/filter-form.js +402 -0
  131. package/build/table/filters/filter.js +90 -0
  132. package/build/table/filters/index.js +184 -0
  133. package/build/table/filters/load-search-modal.js +175 -0
  134. package/build/table/filters/reflection-element.js +37 -0
  135. package/build/table/filters/save-search-modal.js +88 -0
  136. package/build/table/filters/scope-element.js +42 -0
  137. package/build/table/header-column-content.js +68 -0
  138. package/build/table/header-column.js +144 -0
  139. package/build/table/header-select.js +105 -0
  140. package/build/table/model-callback-args.js +10 -0
  141. package/build/table/model-column.js +97 -0
  142. package/build/table/model-row.js +193 -0
  143. package/build/table/select-calculator.js +63 -0
  144. package/build/table/settings/column-row.js +97 -0
  145. package/build/table/settings/download-action.js +79 -0
  146. package/build/table/settings/index.js +92 -0
  147. package/build/table/table-settings.js +219 -0
  148. package/build/table/table.js +972 -0
  149. package/build/table/use-sorting.js +34 -0
  150. package/build/table/widths.js +75 -0
  151. package/build/table/worker-plugins-check-all-checkbox.js +125 -0
  152. package/build/table/worker-plugins-checkbox.js +115 -0
  153. package/build/translated-attributes.js +10 -0
  154. package/build/translated-collections.js +12 -0
  155. package/build/updated-attribute.js +76 -0
  156. package/build/url-encode.js +15 -0
  157. package/build/use-breakpoint.js +62 -0
  158. package/build/use-can-can.js +55 -0
  159. package/build/use-collection.js +225 -0
  160. package/build/use-created-event.js +52 -0
  161. package/build/use-current-user.js +76 -0
  162. package/build/use-destroyed-event.js +60 -0
  163. package/build/use-event-emitter.js +13 -0
  164. package/build/use-event-listener.js +16 -0
  165. package/build/use-input.js +137 -0
  166. package/build/use-model-event.js +60 -0
  167. package/build/use-model.js +169 -0
  168. package/build/use-resize-observer.js +23 -0
  169. package/build/use-router.js +104 -0
  170. package/build/use-screen-layout.js +39 -0
  171. package/build/use-updated-event.js +60 -0
  172. package/build/use-validation-errors.js +30 -0
  173. package/build/utils/card.js +51 -0
  174. package/build/utils/checkbox.js +78 -0
  175. package/build/utils/checkboxes.js +163 -0
  176. package/build/utils/default-style.js +18 -0
  177. package/build/utils/icon.js +23 -0
  178. package/build/utils/invalid-feedback.js +19 -0
  179. package/build/utils/modal.js +62 -0
  180. package/build/utils/text.js +19 -0
  181. package/build/validation-error.js +28 -0
  182. package/build/validation-errors.js +98 -0
  183. package/build/with-api-maker.js +29 -0
  184. package/build/with-collection.js +14 -0
  185. package/build/with-current-user.js +10 -0
  186. package/build/with-model.js +15 -0
  187. package/build/with-router.js +22 -0
  188. package/expo-module.config.json +17 -0
  189. package/ios/ApiMaker.podspec +29 -0
  190. package/ios/ApiMakerModule.swift +48 -0
  191. package/ios/ApiMakerView.swift +38 -0
  192. package/link.sh +8 -0
  193. package/package.json +49 -46
  194. package/src/{api.mjs → api.js} +38 -37
  195. package/src/base-component.jsx +5 -0
  196. package/src/{base-error.mjs → base-error.js} +4 -6
  197. package/src/base-model/attribute.js +33 -0
  198. package/src/base-model/column.js +13 -0
  199. package/src/base-model/reflection.js +15 -0
  200. package/src/base-model/scope.js +12 -0
  201. package/src/{base-model.mjs → base-model.js} +302 -144
  202. package/src/bootstrap/attribute-row.jsx +135 -0
  203. package/src/bootstrap/attribute-rows.jsx +27 -0
  204. package/src/bootstrap/card.jsx +149 -0
  205. package/src/bootstrap/checkbox.jsx +86 -0
  206. package/src/bootstrap/checkboxes.jsx +185 -0
  207. package/src/bootstrap/index.js +0 -0
  208. package/src/bootstrap/input.jsx +173 -0
  209. package/src/bootstrap/invalid-feedback.jsx +31 -0
  210. package/src/bootstrap/paginate.jsx +187 -0
  211. package/src/bootstrap/radio-buttons.jsx +87 -0
  212. package/src/bootstrap/select.jsx +110 -0
  213. package/src/bootstrap/sort-link.jsx +106 -0
  214. package/src/{cable-connection-pool.mjs → cable-connection-pool.js} +16 -36
  215. package/src/{cable-subscription-pool.mjs → cable-subscription-pool.js} +26 -21
  216. package/src/{cable-subscription.mjs → cable-subscription.js} +6 -4
  217. package/src/cache-key-generator.js +100 -0
  218. package/src/{can-can.mjs → can-can.js} +13 -12
  219. package/src/channels-consumer.js +10 -0
  220. package/src/collection-loader.jsx +58 -224
  221. package/src/{collection.mjs → collection.js} +98 -44
  222. package/src/{command-submit-data.mjs → command-submit-data.js} +2 -7
  223. package/src/{commands-pool.mjs → commands-pool.js} +57 -41
  224. package/src/compose.js +11 -0
  225. package/src/{config.mjs → config.js} +6 -2
  226. package/src/{custom-error.mjs → custom-error.js} +1 -1
  227. package/src/data-set-to-attributes.js +13 -0
  228. package/src/{deserializer.mjs → deserializer.js} +3 -3
  229. package/src/destroy-error.js +7 -0
  230. package/src/devise.js +129 -0
  231. package/src/draggable-sort/controller.js +137 -0
  232. package/src/draggable-sort/index.jsx +108 -0
  233. package/src/draggable-sort/item.jsx +174 -0
  234. package/src/{error-logger.mjs → error-logger.js} +12 -7
  235. package/src/{error-messages.mjs → error-messages.js} +1 -0
  236. package/src/event-connection.jsx +1 -1
  237. package/src/event-emitter-listener.jsx +8 -27
  238. package/src/event-model-class.jsx +2 -4
  239. package/src/events.js +7 -0
  240. package/src/flash-message.js +70 -0
  241. package/src/form.jsx +91 -0
  242. package/src/history-expo.js +23 -0
  243. package/src/history-react-native.js +25 -0
  244. package/src/history.js +3 -0
  245. package/src/index.js +3 -0
  246. package/src/inputs/attachment.jsx +108 -0
  247. package/src/inputs/auto-submit.js +37 -0
  248. package/src/inputs/checkbox.jsx +125 -0
  249. package/src/inputs/checkboxes.jsx +116 -0
  250. package/src/inputs/id-for-component.js +15 -0
  251. package/src/inputs/input-wrapper.jsx +16 -0
  252. package/src/inputs/input.jsx +260 -0
  253. package/src/inputs/money.jsx +187 -0
  254. package/src/inputs/name-for-component.js +15 -0
  255. package/src/inputs/select.jsx +104 -0
  256. package/src/{key-value-store.mjs → key-value-store.js} +1 -1
  257. package/src/link.jsx +54 -9
  258. package/src/logger.js +38 -0
  259. package/src/modal.jsx +37 -0
  260. package/src/model-class-require.js +17 -0
  261. package/src/{model-events.mjs → model-events.js} +1 -1
  262. package/src/{model-name.mjs → model-name.js} +8 -8
  263. package/src/{model-recipes-loader.mjs → model-recipes-loader.js} +1 -1
  264. package/src/{model-recipes-model-loader.mjs → model-recipes-model-loader.js} +5 -5
  265. package/src/{models-response-reader.mjs → models-response-reader.js} +3 -4
  266. package/src/models.js +7 -0
  267. package/src/{models.mjs.erb → models.js.erb} +6 -3
  268. package/src/{money-formatter.mjs → money-formatter.js} +5 -4
  269. package/src/{params.mjs → params.js} +17 -7
  270. package/src/{preloaded.mjs → preloaded.js} +2 -2
  271. package/src/resize-observer.jsx +10 -0
  272. package/src/result.js +13 -0
  273. package/src/router/route.jsx +246 -0
  274. package/src/router/switch.jsx +76 -0
  275. package/src/router.jsx +23 -21
  276. package/src/{routes-native.mjs → routes-native.js} +12 -6
  277. package/src/{routes.mjs → routes.js} +1 -1
  278. package/src/run-last.js +39 -0
  279. package/src/{serializer.mjs → serializer.js} +2 -2
  280. package/src/{services.mjs → services.js} +1 -1
  281. package/src/session-status-updater.js +172 -0
  282. package/src/{source-maps-loader.mjs → source-maps-loader.js} +54 -28
  283. package/src/super-admin/config-reader.jsx +93 -0
  284. package/src/super-admin/edit-page/edit-attribute-checkbox.jsx +81 -0
  285. package/src/super-admin/edit-page/edit-attribute-content.jsx +57 -0
  286. package/src/super-admin/edit-page/edit-attribute-input.jsx +71 -0
  287. package/src/super-admin/edit-page/edit-attribute.jsx +81 -0
  288. package/src/super-admin/edit-page.jsx +117 -0
  289. package/src/super-admin/has-edit-config.js +15 -0
  290. package/src/super-admin/index-page.jsx +23 -0
  291. package/src/super-admin/index.jsx +197 -0
  292. package/src/super-admin/layout/header/index.jsx +144 -0
  293. package/src/super-admin/layout/header/style.scss +45 -0
  294. package/src/super-admin/layout/index.jsx +154 -0
  295. package/src/super-admin/layout/menu/index.jsx +171 -0
  296. package/src/super-admin/layout/menu/menu-content.jsx +43 -0
  297. package/src/super-admin/layout/menu/menu-item.jsx +70 -0
  298. package/src/super-admin/layout/menu/style.scss +11 -0
  299. package/src/super-admin/layout/no-access.jsx +26 -0
  300. package/src/super-admin/model-class-table.jsx +66 -0
  301. package/src/super-admin/models.js +11 -0
  302. package/src/super-admin/show-nav.jsx +44 -0
  303. package/src/super-admin/show-page/belongs-to-attribute-row.jsx +30 -0
  304. package/src/super-admin/show-page/index.jsx +141 -0
  305. package/src/super-admin/show-reflection-actions.jsx +49 -0
  306. package/src/super-admin/show-reflection-link.jsx +40 -0
  307. package/src/super-admin/show-reflection-page.jsx +47 -0
  308. package/src/super-admin/stylesheets/variables.scss +11 -0
  309. package/src/table/column-content.jsx +122 -0
  310. package/src/table/column-identifier.js +23 -0
  311. package/src/table/column-visible.js +7 -0
  312. package/src/table/components/column.jsx +19 -0
  313. package/src/table/components/flat-list.jsx +19 -0
  314. package/src/table/components/header.jsx +21 -0
  315. package/src/table/components/row.jsx +23 -0
  316. package/src/table/filters/attribute-element.jsx +47 -0
  317. package/src/table/filters/filter-form.jsx +407 -0
  318. package/src/table/filters/filter.jsx +70 -0
  319. package/src/table/filters/index.jsx +170 -0
  320. package/src/table/filters/load-search-modal.jsx +146 -0
  321. package/src/table/filters/reflection-element.jsx +38 -0
  322. package/src/table/filters/save-search-modal.jsx +74 -0
  323. package/src/table/filters/scope-element.jsx +44 -0
  324. package/src/table/header-column-content.jsx +55 -0
  325. package/src/table/header-column.jsx +129 -0
  326. package/src/table/header-select.jsx +73 -0
  327. package/src/table/model-callback-args.js +10 -0
  328. package/src/table/model-column.jsx +82 -0
  329. package/src/table/model-row.jsx +136 -0
  330. package/src/table/select-calculator.js +65 -0
  331. package/src/table/settings/column-row.jsx +93 -0
  332. package/src/table/settings/download-action.jsx +68 -0
  333. package/src/table/settings/index.jsx +65 -0
  334. package/src/table/table-settings.js +263 -0
  335. package/src/table/table.jsx +950 -0
  336. package/src/table/use-sorting.js +35 -0
  337. package/src/table/variables.scss +11 -0
  338. package/src/table/widths.jsx +87 -0
  339. package/src/table/worker-plugins-check-all-checkbox.jsx +112 -0
  340. package/src/table/worker-plugins-checkbox.jsx +104 -0
  341. package/src/translated-attributes.js +11 -0
  342. package/src/{translated-collections.mjs → translated-collections.js} +3 -2
  343. package/src/updated-attribute.jsx +1 -1
  344. package/src/url-encode.js +18 -0
  345. package/src/use-breakpoint.js +76 -0
  346. package/src/use-can-can.js +55 -0
  347. package/src/use-collection.js +280 -0
  348. package/src/use-created-event.js +55 -0
  349. package/src/use-current-user.js +88 -0
  350. package/src/use-destroyed-event.js +60 -0
  351. package/src/use-event-emitter.js +15 -0
  352. package/src/use-event-listener.js +19 -0
  353. package/src/use-input.js +157 -0
  354. package/src/use-model-event.js +60 -0
  355. package/src/use-model.js +189 -0
  356. package/src/use-resize-observer.js +24 -0
  357. package/src/use-router.jsx +128 -0
  358. package/src/use-screen-layout.js +49 -0
  359. package/src/use-updated-event.js +60 -0
  360. package/src/use-validation-errors.js +33 -0
  361. package/src/utils/card.jsx +49 -0
  362. package/src/utils/checkbox.jsx +80 -0
  363. package/src/utils/checkboxes.jsx +158 -0
  364. package/src/utils/default-style.jsx +25 -0
  365. package/src/utils/icon.jsx +21 -0
  366. package/src/utils/invalid-feedback.jsx +20 -0
  367. package/src/utils/modal.jsx +60 -0
  368. package/src/utils/text.jsx +16 -0
  369. package/src/{validation-error.mjs → validation-error.js} +9 -5
  370. package/src/{validation-errors.mjs → validation-errors.js} +15 -27
  371. package/src/with-api-maker.jsx +31 -0
  372. package/src/with-collection.jsx +17 -0
  373. package/src/with-current-user.jsx +7 -25
  374. package/src/with-model.jsx +16 -0
  375. package/src/with-router.jsx +7 -129
  376. package/__tests__/base-model.test.js +0 -71
  377. package/__tests__/cable-connection-pool.test.js +0 -227
  378. package/__tests__/cable-subscription-pool.test.js +0 -26
  379. package/__tests__/can-can.test.js +0 -34
  380. package/__tests__/collection.test.js +0 -51
  381. package/__tests__/custom-error.test.js +0 -13
  382. package/__tests__/model-name.test.js +0 -34
  383. package/__tests__/model-prop-type.test.js +0 -113
  384. package/__tests__/params.test.js +0 -40
  385. package/__tests__/routes-native.test.js +0 -103
  386. package/__tests__/routes.test.js +0 -46
  387. package/__tests__/serializer.test.js +0 -30
  388. package/__tests__/support/task.js +0 -27
  389. package/__tests__/support/user.js +0 -32
  390. package/index.js +0 -1
  391. package/jest.config.js +0 -4
  392. package/src/can-can-loader.jsx +0 -54
  393. package/src/channels-consumer.mjs +0 -3
  394. package/src/destroy-error.mjs +0 -7
  395. package/src/devise.mjs +0 -122
  396. package/src/event-created.jsx +0 -65
  397. package/src/event-destroyed.jsx +0 -29
  398. package/src/event-listener.jsx +0 -38
  399. package/src/event-updated.jsx +0 -74
  400. package/src/logger.mjs +0 -25
  401. package/src/model-class-require.mjs +0 -10
  402. package/src/model-load-wrapper.jsx +0 -116
  403. package/src/result.mjs +0 -29
  404. package/src/session-status-updater.mjs +0 -116
  405. package/webpack.config.js +0 -15
  406. /package/src/{attribute-not-loaded-error.mjs → attribute-not-loaded-error.js} +0 -0
  407. /package/src/{instance-of-class-name.mjs → instance-of-class-name.js} +0 -0
  408. /package/src/{model-prop-type.mjs → model-prop-type.js} +0 -0
  409. /package/src/{not-loaded-error.mjs → not-loaded-error.js} +0 -0
  410. /package/src/{translated-collections-data.mjs.erb → translated-collections-data.js.erb} +0 -0
@@ -1,103 +0,0 @@
1
- import RoutesNative from "../src/routes-native.mjs"
2
- const testRoutes = () => ({
3
- routes: [
4
- {"name": "blank", "path": "/blank", "component": "blank"},
5
-
6
- {"name": "root", "path": "", "component": "dashboard"},
7
-
8
- {"name": "new_drink", "path": "/drinks/new", "component": "drinks/edit"},
9
- {"name": "edit_drink", "path": "/drinks/:id/edit", "component": "drinks/edit"},
10
- {"name": "drink", "path": "/drinks/:id", "component": "drinks/show"},
11
- {"name": "drinks", "path": "/drinks", "component": "drinks/index"}
12
- ]
13
- })
14
- const testTranslations = () => ({
15
- locales: {
16
- da: {
17
- routes: {
18
- drink: "drink",
19
- edit: "rediger"
20
- }
21
- },
22
- en: {
23
- routes: {
24
- drink: "drink",
25
- edit: "edit"
26
- }
27
- }
28
- }
29
- })
30
-
31
- const routesNative = ({args, currentLocale}) => {
32
- const test = new RoutesNative({
33
- getLocale: () => currentLocale
34
- })
35
-
36
- test.loadRouteTranslations(testTranslations())
37
- test.loadRouteDefinitions(testRoutes(), args)
38
-
39
- return test
40
- }
41
-
42
- describe("RoutesNative", () => {
43
- it("translates routes from the current locale", () => {
44
- const test = routesNative({args: {localized: true}, currentLocale: "da"})
45
- const daRoute = test.editDrinkPath(5)
46
-
47
- expect(daRoute).toEqual("/da/drinks/5/rediger")
48
- })
49
-
50
- it("translates routes from the locale-param", () => {
51
- const test = routesNative({args: {localized: true}, currentLocale: "en"})
52
- const daRoute = test.editDrinkPath(5, {locale: "da"})
53
-
54
- expect(daRoute).toEqual("/da/drinks/5/rediger")
55
- })
56
-
57
- it("defaults to the locale given by the getLocale callback", () => {
58
- const test = routesNative({args: {localized: true}, currentLocale: "en"})
59
- const daRoute = test.editDrinkPath(5)
60
-
61
- expect(daRoute).toEqual("/en/drinks/5/edit")
62
- })
63
-
64
- it("uses the rest of the params as a query string", () => {
65
- const test = routesNative({args: {localized: true}, currentLocale: "en"})
66
- const daRoute = test.editDrinkPath(5, {drink: {name: "Pina Colada"}, locale: "da"})
67
-
68
- expect(daRoute).toEqual("/da/drinks/5/rediger?drink%5Bname%5D=Pina%20Colada")
69
- })
70
-
71
- it("translates a route without localization", () => {
72
- const test = routesNative({currentLocale: "en"})
73
- const daRoute = test.editDrinkPath(5, {drink: {name: "Pina Colada"}})
74
-
75
- expect(daRoute).toEqual("/drinks/5/edit?drink%5Bname%5D=Pina%20Colada")
76
- })
77
-
78
- it("generates urls", () => {
79
- if (!globalThis.location) globalThis.location = {} // eslint-disable-line jest/no-if
80
-
81
- globalThis.location.host = "localhost"
82
- globalThis.location.protocol = "http:"
83
-
84
- const test = routesNative({args: {localized: true}, currentLocale: "en"})
85
- const daRoute = test.editDrinkUrl(5, {drink: {name: "Pina Colada"}, locale: "da"})
86
-
87
- expect(daRoute).toEqual("http://localhost/da/drinks/5/rediger?drink%5Bname%5D=Pina%20Colada")
88
- })
89
-
90
- it("generates urls with custom options", () => {
91
- const test = routesNative({args: {localized: true}, currentLocale: "en"})
92
- const daRoute = test.editDrinkUrl(5, {drink: {name: "Pina Colada"}, locale: "da", host: "google.com", port: 123, protocol: "https"})
93
-
94
- expect(daRoute).toEqual("https://google.com:123/da/drinks/5/rediger?drink%5Bname%5D=Pina%20Colada")
95
- })
96
-
97
- it("generates urls without locales", () => {
98
- const test = routesNative({currentLocale: "en"})
99
- const daRoute = test.editDrinkUrl(5, {drink: {name: "Pina Colada"}, locale: "da", host: "google.com", port: 123, protocol: "https"})
100
-
101
- expect(daRoute).toEqual("https://google.com:123/drinks/5/edit?drink%5Bname%5D=Pina%20Colada")
102
- })
103
- })
@@ -1,46 +0,0 @@
1
- import Routes from "../src/routes.mjs"
2
- const testRoutes = {
3
- routes: [
4
- {"name": "blank", "path": "/blank", "component": "blank"},
5
-
6
- {"name": "root", "path": "", "component": "dashboard"},
7
-
8
- {"name": "new_drink", "path": "/drinks/new", "component": "drinks/edit"},
9
- {"name": "edit_drink", "path": "/drinks/:id/edit", "component": "drinks/edit"},
10
- {"name": "drink", "path": "/drinks/:id", "component": "drinks/show"},
11
- {"name": "drinks", "path": "/drinks", "component": "drinks/index"}
12
- ]
13
- }
14
- const fakeJsRoutes = {
15
- blankPath: () => "/blank",
16
- blankUrl: () => "https://localhost/blank",
17
- newDrinkPath: () => "/drinks/new",
18
- newDrinkUrl: () => "/drinks/new",
19
- editDrinkPath: (drinkId) => `/drinks/${drinkId}/edit`,
20
- editDrinkUrl: (drinkId) => `https://localhost/drinks/${drinkId}/edit`,
21
- drinkPath: (drinkId) => `/druiks/${drinkId}`,
22
- drinkUrl: (drinkId) => `https://localhost/drinks/${drinkId}`,
23
- drinksPath: () => "/drinks",
24
- drinksUrl: () => "https://localhost/drinks",
25
- rootPath: () => "/root",
26
- rootUrl: () => "https://localhost"
27
- }
28
-
29
- const routes = new Routes({
30
- jsRoutes: fakeJsRoutes,
31
- routeDefinitions: testRoutes
32
- })
33
-
34
- describe("Routes", () => {
35
- it("generates paths", () => {
36
- const daRoute = routes.editDrinkPath(5)
37
-
38
- expect(daRoute).toEqual("/drinks/5/edit")
39
- })
40
-
41
- it("generates urls", () => {
42
- const daRoute = routes.editDrinkUrl(5)
43
-
44
- expect(daRoute).toEqual("https://localhost/drinks/5/edit")
45
- })
46
- })
@@ -1,30 +0,0 @@
1
- import Serializer from "../src/serializer.mjs"
2
- import User from "./support/user.mjs"
3
-
4
- describe("Serializer", () => {
5
- test("it serializes model classes", () => {
6
- const testObject = {
7
- userModel: User
8
- }
9
- const serialized = Serializer.serialize(testObject)
10
-
11
- expect(serialized).toEqual({userModel: {api_maker_type: "resource", name: "User"}})
12
- })
13
-
14
- test("it serializes dates", () => {
15
- // Mock time zone offset
16
- var getTimezoneOffset = Date.prototype.getTimezoneOffset
17
-
18
- Date.prototype.getTimezoneOffset = function () {
19
- return -120
20
- }
21
-
22
- const date = new Date(1985, 5, 17, 10, 30, 5)
23
- const serialized = Serializer.serialize(date)
24
-
25
- // Restore time zone offset
26
- Date.prototype.getTimezoneOffset = getTimezoneOffset
27
-
28
- expect(serialized).toEqual({api_maker_type: "datetime", value: "1985-6-17 10:30:5+0200"})
29
- })
30
- })
@@ -1,27 +0,0 @@
1
- export default class Task {
2
- static modelClassData () {
3
- return {
4
- attributes: [],
5
- name: "Task"
6
- }
7
- }
8
-
9
- static modelName () {
10
- return "Task"
11
- }
12
-
13
- constructor ({a, b, isNewRecord = false, r} = {}) {
14
- this.abilities = b
15
- this._isNewRecord = isNewRecord
16
- this.modelData = a
17
- this.relationshipsCache = r
18
- }
19
-
20
- isNewRecord () {
21
- return this._isNewRecord
22
- }
23
-
24
- isPersisted () {
25
- return !this._isNewRecord
26
- }
27
- }
@@ -1,32 +0,0 @@
1
- import BaseModel from "../../src/base-model.mjs"
2
-
3
- export default class User extends BaseModel {
4
- static modelClassData () {
5
- return {
6
- attributes: [],
7
- name: "User",
8
- primaryKey: "id"
9
- }
10
- }
11
-
12
- static modelName () {
13
- return "User"
14
- }
15
-
16
- constructor ({a, b, isNewRecord = false, r}) {
17
- super({a})
18
-
19
- this.abilities = b
20
- this._isNewRecord = isNewRecord
21
- this.modelData = a
22
- this.relationshipsCache = r
23
- }
24
-
25
- isNewRecord () {
26
- return this._isNewRecord
27
- }
28
-
29
- isPersisted () {
30
- return !this._isNewRecord
31
- }
32
- }
package/index.js DELETED
@@ -1 +0,0 @@
1
- export {}
package/jest.config.js DELETED
@@ -1,4 +0,0 @@
1
- export default {
2
- testRegex: "__tests__/.*\.test\.(m|)js$", // eslint-disable-line no-useless-escape
3
- transform: {}
4
- }
@@ -1,54 +0,0 @@
1
- import ApiMakerEventEmitterListener from "./event-emitter-listener"
2
- import {digg, digs} from "diggerize"
3
- import CanCan from "./can-can.mjs"
4
- import PropTypes from "prop-types"
5
- import propTypesExact from "prop-types-exact"
6
- import React from "react"
7
-
8
- export default class ApiMakerCanCanLoader extends React.PureComponent {
9
- static propTypes = propTypesExact({
10
- abilities: PropTypes.array.isRequired,
11
- component: PropTypes.object.isRequired
12
- })
13
-
14
- componentDidMount () {
15
- this.loadAbilities()
16
- }
17
-
18
- async loadAbilities () {
19
- const canCan = CanCan.current()
20
- const {abilities} = digs(this.props, "abilities")
21
-
22
- await canCan.loadAbilities(abilities)
23
-
24
- this.updateComponent({canCan})
25
- }
26
-
27
- render () {
28
- const canCan = CanCan.current()
29
- const events = digg(canCan, "events")
30
-
31
- return (
32
- <ApiMakerEventEmitterListener
33
- event="onResetAbilities"
34
- events={events}
35
- onCalled={this.onResetAbilities}
36
- />
37
- )
38
- }
39
-
40
- onResetAbilities = () => {
41
- this.updateComponent({canCan: undefined})
42
- this.loadAbilities()
43
- }
44
-
45
- updateComponent (updatedState) {
46
- const {component} = digs(this.props, "component")
47
-
48
- if (component.shape) {
49
- component.shape.set(updatedState)
50
- } else {
51
- component.setState(updatedState)
52
- }
53
- }
54
- }
@@ -1,3 +0,0 @@
1
- import {createConsumer} from "@rails/actioncable"
2
-
3
- export default createConsumer()
@@ -1,7 +0,0 @@
1
- import BaseError from "./base-error.mjs"
2
-
3
- class DestroyError extends BaseError {}
4
-
5
- DestroyError.apiMakerType = "DestroyError"
6
-
7
- export default DestroyError
package/src/devise.mjs DELETED
@@ -1,122 +0,0 @@
1
- import CanCan from "./can-can.mjs"
2
- import Deserializer from "./deserializer.mjs"
3
- import {digg} from "diggerize"
4
- import EventEmitter from "events"
5
- import inflection from "inflection"
6
- import modelClassRequire from "./model-class-require.mjs"
7
- import Services from "./services.mjs"
8
-
9
- export default class ApiMakerDevise {
10
- static callSignOutEvent (args) {
11
- ApiMakerDevise.events().emit("onDeviseSignOut", {args})
12
- }
13
-
14
- static current () {
15
- if (!globalThis.currentApiMakerDevise)
16
- globalThis.currentApiMakerDevise = new ApiMakerDevise()
17
-
18
- return globalThis.currentApiMakerDevise
19
- }
20
-
21
- static events () {
22
- if (!globalThis.apiMakerDeviseEvents) {
23
- globalThis.apiMakerDeviseEvents = new EventEmitter()
24
- globalThis.apiMakerDeviseEvents.setMaxListeners(1000)
25
- }
26
-
27
- return globalThis.apiMakerDeviseEvents
28
- }
29
-
30
- static addUserScope (scope) {
31
- const currentMethodName = `current${inflection.camelize(scope)}`
32
-
33
- ApiMakerDevise[currentMethodName] = function () {
34
- return ApiMakerDevise.current().getCurrentScope(scope)
35
- }
36
-
37
- const isSignedInMethodName = `is${inflection.camelize(scope)}SignedIn`
38
-
39
- ApiMakerDevise[isSignedInMethodName] = function () {
40
- if (ApiMakerDevise.current().getCurrentScope(scope)) {
41
- return true
42
- }
43
-
44
- return false
45
- }
46
- }
47
-
48
- static async signIn (username, password, args = {}) {
49
- if (!args.scope) args.scope = "user"
50
-
51
- const postData = {username, password, args}
52
- const response = await Services.current().sendRequest("Devise::SignIn", postData)
53
-
54
- let model = response.model
55
-
56
- if (Array.isArray(model)) model = model[0]
57
-
58
- await CanCan.current().resetAbilities()
59
-
60
- ApiMakerDevise.updateSession(model)
61
- ApiMakerDevise.events().emit("onDeviseSignIn", Object.assign({username}, args))
62
-
63
- return {model, response}
64
- }
65
-
66
- static updateSession (model) {
67
- const scope = digg(model.modelClassData(), "name")
68
- const camelizedScopeName = inflection.camelize(scope, true)
69
-
70
- ApiMakerDevise.current().currents[camelizedScopeName] = model
71
- }
72
-
73
- static setSignedOut (args) {
74
- ApiMakerDevise.current().currents[inflection.camelize(args.scope, true)] = null
75
- }
76
-
77
- static async signOut (args = {}) {
78
- if (!args.scope)
79
- args.scope = "user"
80
-
81
- const response = await Services.current().sendRequest("Devise::SignOut", {args})
82
-
83
- await CanCan.current().resetAbilities()
84
-
85
- // Cannot use the class because they would both import each other
86
- if (globalThis.apiMakerSessionStatusUpdater) {
87
- globalThis.apiMakerSessionStatusUpdater.updateSessionStatus()
88
- }
89
-
90
- ApiMakerDevise.setSignedOut(args)
91
- ApiMakerDevise.callSignOutEvent(args)
92
-
93
- return response
94
- }
95
-
96
- constructor () {
97
- this.currents = {}
98
- }
99
-
100
- getCurrentScope (scope) {
101
- if (!(scope in this.currents))
102
- this.currents[scope] = this.loadCurrentScope(scope)
103
-
104
- return this.currents[scope]
105
- }
106
-
107
- loadCurrentScope (scope) {
108
- const scopeData = globalThis.apiMakerDeviseCurrent[scope]
109
-
110
- if (!scopeData) return null
111
-
112
- const parsedScopeData = Deserializer.parse(scopeData)
113
-
114
- // Might be a collection with preloaded relationships
115
- if (Array.isArray(parsedScopeData)) return parsedScopeData[0]
116
-
117
- const ModelClass = modelClassRequire(scope)
118
- const modelInstance = new ModelClass({data: parsedScopeData})
119
-
120
- return modelInstance
121
- }
122
- }
@@ -1,65 +0,0 @@
1
- import debounce from "debounce"
2
- import ModelEvents from "./model-events.mjs"
3
- import PropTypes from "prop-types"
4
- import propTypesExact from "prop-types-exact"
5
- import React from "react"
6
-
7
- export default class ApiMakerEventCreated extends React.PureComponent {
8
- static defaultProps = {
9
- active: true
10
- }
11
-
12
- static propTypes = propTypesExact({
13
- active: PropTypes.bool.isRequired,
14
- debounce: PropTypes.oneOfType([
15
- PropTypes.bool,
16
- PropTypes.number
17
- ]),
18
- modelClass: PropTypes.func.isRequired,
19
- onCreated: PropTypes.func.isRequired
20
- })
21
-
22
- componentDidMount () {
23
- this.connect()
24
- }
25
-
26
- componentWillUnmount () {
27
- if (this.connectCreated) {
28
- this.connectCreated.unsubscribe()
29
- }
30
- }
31
-
32
- connect () {
33
- this.connectCreated = ModelEvents.connectCreated(this.props.modelClass, (...args) => this.onCreated(...args))
34
- }
35
-
36
- debounce () {
37
- if (!this.debounceInstance) {
38
- const {onCreated} = digs(this.props, "onCreated")
39
-
40
- if (typeof this.props.debounce == "number") {
41
- this.debounceInstance = debounce(onCreated, this.props.debounce)
42
- } else {
43
- this.debounceInstance = debounce(onCreated)
44
- }
45
- }
46
-
47
- return this.debounceInstance
48
- }
49
-
50
- onCreated (...args) {
51
- if (!this.props.active) {
52
- return
53
- }
54
-
55
- if (this.props.debounce) {
56
- this.debounce()(...args)
57
- } else {
58
- this.props.onCreated(...args)
59
- }
60
- }
61
-
62
- render () {
63
- return null
64
- }
65
- }
@@ -1,29 +0,0 @@
1
- import ModelEvents from "./model-events.mjs"
2
- import PropTypes from "prop-types"
3
- import propTypesExact from "prop-types-exact"
4
- import React from "react"
5
-
6
- export default class ApiMakerEventDestroyed extends React.PureComponent {
7
- static propTypes = propTypesExact({
8
- model: PropTypes.object.isRequired,
9
- onDestroyed: PropTypes.func.isRequired
10
- })
11
-
12
- componentDidMount () {
13
- this.connect()
14
- }
15
-
16
- componentWillUnmount () {
17
- if (this.connectDestroyed) {
18
- this.connectDestroyed.unsubscribe()
19
- }
20
- }
21
-
22
- connect () {
23
- this.connectDestroyed = ModelEvents.connectDestroyed(this.props.model, this.props.onDestroyed)
24
- }
25
-
26
- render () {
27
- return null
28
- }
29
- }
@@ -1,38 +0,0 @@
1
- import PropTypes from "prop-types"
2
- import propTypesExact from "prop-types-exact"
3
- import React from "react"
4
-
5
- export default class ApiMakerEventListener extends React.PureComponent {
6
- static callEvent (target, eventName, args = []) {
7
- let event = document.createEvent("Event")
8
- event.initEvent(eventName, false, true)
9
- target.dispatchEvent(event, args)
10
- }
11
-
12
- static propTypes = propTypesExact({
13
- event: PropTypes.string.isRequired,
14
- onCalled: PropTypes.func.isRequired,
15
- target: PropTypes.object.isRequired
16
- })
17
-
18
- constructor (props) {
19
- super(props)
20
- this.onCalled = this.onCalled.bind(this)
21
- }
22
-
23
- componentDidMount () {
24
- this.props.target.addEventListener(this.props.event, this.onCalled)
25
- }
26
-
27
- componentWillUnmount () {
28
- this.props.target.removeEventListener(this.props.event, this.onCalled)
29
- }
30
-
31
- onCalled (...args) {
32
- this.props.onCalled.apply(null, args)
33
- }
34
-
35
- render () {
36
- return null
37
- }
38
- }
@@ -1,74 +0,0 @@
1
- import debounce from "debounce"
2
- import ModelEvents from "./model-events.mjs"
3
- import PropTypes from "prop-types"
4
- import propTypesExact from "prop-types-exact"
5
- import React from "react"
6
-
7
- export default class ApiMakerEventUpdated extends React.PureComponent {
8
- static defaultProps = {
9
- active: true
10
- }
11
-
12
- static propTypes = propTypesExact({
13
- active: PropTypes.bool.isRequired,
14
- debounce: PropTypes.oneOfType([
15
- PropTypes.bool,
16
- PropTypes.number
17
- ]),
18
- model: PropTypes.object.isRequired,
19
- onConnected: PropTypes.func,
20
- onUpdated: PropTypes.func.isRequired
21
- })
22
-
23
- componentDidMount () {
24
- this.connect()
25
- }
26
-
27
- componentWillUnmount () {
28
- if (this.connectUpdated) {
29
- this.connectUpdated.unsubscribe()
30
- }
31
-
32
- if (this.onConnectedListener) {
33
- this.connectUpdated.events.removeListener("connected", this.props.onConnected)
34
- }
35
- }
36
-
37
- connect () {
38
- const {model, onConnected} = this.props
39
-
40
- this.connectUpdated = ModelEvents.connectUpdated(model, this.onUpdated)
41
-
42
- if (onConnected) {
43
- this.onConnectedListener = this.connectUpdated.events.addListener("connected", this.props.onConnected)
44
- }
45
- }
46
-
47
- debounce () {
48
- if (!this.debounceInstance) {
49
- if (typeof this.props.debounce == "number") {
50
- this.debounceInstance = debounce(this.props.onUpdated, this.props.debounce)
51
- } else {
52
- this.debounceInstance = debounce(this.props.onUpdated)
53
- }
54
- }
55
-
56
- return this.debounceInstance
57
- }
58
-
59
- onUpdated = (...args) => {
60
- if (!this.props.active) {
61
- return
62
- }
63
-
64
- if (this.props.debounce) {
65
- this.debounce()(...args)
66
- } else {
67
- this.props.onUpdated(...args)
68
- }
69
- }
70
-
71
- render () {
72
- return null
73
- }
74
- }
package/src/logger.mjs DELETED
@@ -1,25 +0,0 @@
1
- const shared = {}
2
-
3
- export default class ApiMakerLogger {
4
- static current () {
5
- if (!shared.apiMakerLogger) {
6
- shared.apiMakerLogger = new ApiMakerLogger()
7
- // shared.apiMakerLogger.setDebug(true)
8
- }
9
-
10
- return shared.apiMakerLogger
11
- }
12
-
13
- static log (message) {
14
- ApiMakerLogger.current().log(message)
15
- }
16
-
17
- log (message) {
18
- if (this.debug)
19
- console.log("ApiMaker", message)
20
- }
21
-
22
- setDebug (value) {
23
- this.debug = value
24
- }
25
- }
@@ -1,10 +0,0 @@
1
- import {digg} from "diggerize"
2
- import inflection from "inflection"
3
- import * as models from "@kaspernj/api-maker/src/models.mjs.erb"
4
-
5
- export default (modelName) => {
6
- const requireName = inflection.camelize(modelName)
7
- const ModelClass = digg(models, requireName)
8
-
9
- return ModelClass
10
- }