apeframework 0.0.0-dev.2 → 0.0.0-dev.21

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 (462) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +4 -46
  3. package/cipher/Algorithm.d.ts +6 -0
  4. package/cipher/Algorithm.js +7 -0
  5. package/cipher/Cipher.d.ts +12 -0
  6. package/cipher/Cipher.js +32 -0
  7. package/cipher/errors/DecryptError.d.ts +5 -0
  8. package/cipher/errors/DecryptError.js +7 -0
  9. package/cipher/errors/SecretLengthError.d.ts +5 -0
  10. package/cipher/errors/SecretLengthError.js +7 -0
  11. package/cipher/validateSecretLength.d.ts +3 -0
  12. package/cipher/validateSecretLength.js +13 -0
  13. package/cli/Args.d.ts +5 -0
  14. package/cli/Args.js +1 -0
  15. package/cli/Command.d.ts +3 -0
  16. package/cli/Command.js +1 -0
  17. package/cli/getArgs.d.ts +3 -0
  18. package/cli/getArgs.js +5 -0
  19. package/cli/parseArgs.d.ts +3 -0
  20. package/cli/parseArgs.js +25 -0
  21. package/cli/utils/exit.d.ts +2 -0
  22. package/cli/utils/exit.js +4 -0
  23. package/cli/utils/formatList.d.ts +2 -0
  24. package/cli/utils/formatList.js +7 -0
  25. package/cli/utils/formatTable.d.ts +2 -0
  26. package/cli/utils/formatTable.js +19 -0
  27. package/cli/utils/formatText.d.ts +2 -0
  28. package/cli/utils/formatText.js +5 -0
  29. package/cli/utils/print.d.ts +2 -0
  30. package/cli/utils/print.js +4 -0
  31. package/cli/utils/printLn.d.ts +2 -0
  32. package/cli/utils/printLn.js +5 -0
  33. package/config/Config.d.ts +2 -0
  34. package/config/Config.js +1 -0
  35. package/config/Properties.d.ts +8 -0
  36. package/config/Properties.js +1 -0
  37. package/config/errors/FileReadError.d.ts +5 -0
  38. package/config/errors/FileReadError.js +7 -0
  39. package/config/errors/PropertyNameError.d.ts +5 -0
  40. package/config/errors/PropertyNameError.js +7 -0
  41. package/config/errors/PropertyParseError.d.ts +5 -0
  42. package/config/errors/PropertyParseError.js +7 -0
  43. package/config/getConfig.d.ts +14 -0
  44. package/config/getConfig.js +18 -0
  45. package/config/getPropertyEnvVar.d.ts +2 -0
  46. package/config/getPropertyEnvVar.js +10 -0
  47. package/config/parseProperty.d.ts +3 -0
  48. package/config/parseProperty.js +34 -0
  49. package/config/readFile.d.ts +2 -0
  50. package/config/readFile.js +25 -0
  51. package/config/validatePropertyName.d.ts +2 -0
  52. package/config/validatePropertyName.js +8 -0
  53. package/env/Env.d.ts +2 -0
  54. package/env/Env.js +1 -0
  55. package/env/errors/FileReadError.d.ts +5 -0
  56. package/env/errors/FileReadError.js +7 -0
  57. package/env/getEnv.d.ts +8 -0
  58. package/env/getEnv.js +12 -0
  59. package/env/readFile.d.ts +3 -0
  60. package/env/readFile.js +18 -0
  61. package/error/BaseError.d.ts +4 -0
  62. package/error/BaseError.js +9 -0
  63. package/jwt/Algorithm.d.ts +6 -0
  64. package/jwt/Algorithm.js +7 -0
  65. package/jwt/Jwt.d.ts +13 -0
  66. package/jwt/Jwt.js +32 -0
  67. package/jwt/Payload.d.ts +11 -0
  68. package/jwt/Payload.js +1 -0
  69. package/jwt/errors/SecretLengthError.d.ts +5 -0
  70. package/jwt/errors/SecretLengthError.js +7 -0
  71. package/jwt/validateSecretLength.d.ts +3 -0
  72. package/jwt/validateSecretLength.js +13 -0
  73. package/logger/Level.d.ts +10 -0
  74. package/logger/Level.js +11 -0
  75. package/logger/Logger.d.ts +10 -0
  76. package/logger/Logger.js +3 -0
  77. package/logger/Severity.d.ts +9 -0
  78. package/logger/Severity.js +10 -0
  79. package/logger/adapters/file/FileLogger.d.ts +20 -0
  80. package/logger/adapters/file/FileLogger.js +64 -0
  81. package/logger/adapters/file/errors/FileInitError.d.ts +5 -0
  82. package/logger/adapters/file/errors/FileInitError.js +7 -0
  83. package/logger/adapters/file/initFile.d.ts +2 -0
  84. package/logger/adapters/file/initFile.js +14 -0
  85. package/logger/adapters/noop/NoopLogger.d.ts +11 -0
  86. package/logger/adapters/noop/NoopLogger.js +11 -0
  87. package/logger/adapters/stdio/StdioLogger.d.ts +20 -0
  88. package/logger/adapters/stdio/StdioLogger.js +67 -0
  89. package/mailer/Address.d.ts +5 -0
  90. package/mailer/Address.js +1 -0
  91. package/mailer/Attachment.d.ts +7 -0
  92. package/mailer/Attachment.js +1 -0
  93. package/mailer/Event.d.ts +16 -0
  94. package/mailer/Event.js +1 -0
  95. package/mailer/List.d.ts +7 -0
  96. package/mailer/List.js +1 -0
  97. package/mailer/Location.d.ts +9 -0
  98. package/mailer/Location.js +1 -0
  99. package/mailer/Mail.d.ts +19 -0
  100. package/mailer/Mail.js +1 -0
  101. package/mailer/Mailer.d.ts +7 -0
  102. package/mailer/Mailer.js +47 -0
  103. package/mailer/Method.d.ts +5 -0
  104. package/mailer/Method.js +6 -0
  105. package/mailer/adapters/noop/NoopMailer.d.ts +7 -0
  106. package/mailer/adapters/noop/NoopMailer.js +9 -0
  107. package/mailer/adapters/smtp/SmtpMailer.d.ts +18 -0
  108. package/mailer/adapters/smtp/SmtpMailer.js +54 -0
  109. package/mailer/adapters/smtp/getAddress.d.ts +4 -0
  110. package/mailer/adapters/smtp/getAddress.js +9 -0
  111. package/mailer/adapters/smtp/getAddresses.d.ts +4 -0
  112. package/mailer/adapters/smtp/getAddresses.js +11 -0
  113. package/mailer/adapters/smtp/getAttachments.d.ts +4 -0
  114. package/mailer/adapters/smtp/getAttachments.js +14 -0
  115. package/mailer/errors/AddressEmailError.d.ts +5 -0
  116. package/mailer/errors/AddressEmailError.js +7 -0
  117. package/mailer/errors/EventAttachmentUrlError.d.ts +5 -0
  118. package/mailer/errors/EventAttachmentUrlError.js +7 -0
  119. package/mailer/errors/EventGeolocationError.d.ts +5 -0
  120. package/mailer/errors/EventGeolocationError.js +7 -0
  121. package/mailer/errors/EventUrlError.d.ts +5 -0
  122. package/mailer/errors/EventUrlError.js +7 -0
  123. package/mailer/errors/ListUrlError.d.ts +5 -0
  124. package/mailer/errors/ListUrlError.js +7 -0
  125. package/mailer/getIcalendar.d.ts +3 -0
  126. package/mailer/getIcalendar.js +32 -0
  127. package/mailer/validateAddressEmail.d.ts +2 -0
  128. package/mailer/validateAddressEmail.js +8 -0
  129. package/mailer/validateEventAttachmentUrl.d.ts +2 -0
  130. package/mailer/validateEventAttachmentUrl.js +8 -0
  131. package/mailer/validateEventGeolocation.d.ts +2 -0
  132. package/mailer/validateEventGeolocation.js +8 -0
  133. package/mailer/validateEventUrl.d.ts +2 -0
  134. package/mailer/validateEventUrl.js +8 -0
  135. package/mailer/validateListUrl.d.ts +2 -0
  136. package/mailer/validateListUrl.js +8 -0
  137. package/package.json +31 -32
  138. package/parser/Parser.d.ts +2 -0
  139. package/parser/Parser.js +1 -0
  140. package/parser/errors/ParseError.d.ts +5 -0
  141. package/parser/errors/ParseError.js +7 -0
  142. package/parser/factories/enum/createEnumParser.d.ts +6 -0
  143. package/parser/factories/enum/createEnumParser.js +10 -0
  144. package/parser/factories/unit/Unit.d.ts +5 -0
  145. package/parser/factories/unit/Unit.js +1 -0
  146. package/parser/factories/unit/createUnitParser.d.ts +7 -0
  147. package/parser/factories/unit/createUnitParser.js +33 -0
  148. package/parser/parseBoolean.d.ts +3 -0
  149. package/parser/parseBoolean.js +28 -0
  150. package/parser/parseBytes.d.ts +2 -0
  151. package/parser/parseBytes.js +51 -0
  152. package/parser/parseInteger.d.ts +3 -0
  153. package/parser/parseInteger.js +16 -0
  154. package/parser/parseMilliseconds.d.ts +2 -0
  155. package/parser/parseMilliseconds.js +27 -0
  156. package/parser/parseNumber.d.ts +3 -0
  157. package/parser/parseNumber.js +15 -0
  158. package/parser/parseString.d.ts +3 -0
  159. package/parser/parseString.js +11 -0
  160. package/pwd/Pwd.d.ts +9 -0
  161. package/pwd/Pwd.js +16 -0
  162. package/pwd/errors/HashRoundsError.d.ts +5 -0
  163. package/pwd/errors/HashRoundsError.js +7 -0
  164. package/pwd/validateHashRounds.d.ts +2 -0
  165. package/pwd/validateHashRounds.js +7 -0
  166. package/server/ErrorHandler.d.ts +3 -0
  167. package/server/ErrorHandler.js +1 -0
  168. package/server/Format.d.ts +9 -0
  169. package/server/Format.js +1 -0
  170. package/server/Handler.d.ts +3 -0
  171. package/server/Handler.js +1 -0
  172. package/server/Method.d.ts +8 -0
  173. package/server/Method.js +9 -0
  174. package/server/OpenApiFormat.d.ts +5 -0
  175. package/server/OpenApiFormat.js +6 -0
  176. package/server/Route.d.ts +12 -0
  177. package/server/Route.js +1 -0
  178. package/server/Schema.d.ts +9 -0
  179. package/server/Schema.js +1 -0
  180. package/server/Server.d.ts +37 -0
  181. package/server/Server.js +86 -0
  182. package/server/getAjv.d.ts +4 -0
  183. package/server/getAjv.js +19 -0
  184. package/tls/Tls.d.ts +7 -0
  185. package/tls/Tls.js +1 -0
  186. package/tls/errors/FileReadError.d.ts +5 -0
  187. package/tls/errors/FileReadError.js +7 -0
  188. package/tls/getTls.d.ts +8 -0
  189. package/tls/getTls.js +14 -0
  190. package/tls/readFile.d.ts +2 -0
  191. package/tls/readFile.js +14 -0
  192. package/utils/getRandomHexString.d.ts +2 -0
  193. package/utils/getRandomHexString.js +5 -0
  194. package/utils/getTimestamp.d.ts +2 -0
  195. package/utils/getTimestamp.js +4 -0
  196. package/utils/isValidEmail.d.ts +2 -0
  197. package/utils/isValidEmail.js +5 -0
  198. package/utils/isValidGeolocation.d.ts +2 -0
  199. package/utils/isValidGeolocation.js +7 -0
  200. package/utils/isValidHexString.d.ts +2 -0
  201. package/utils/isValidHexString.js +5 -0
  202. package/utils/isValidIsoDate.d.ts +2 -0
  203. package/utils/isValidIsoDate.js +5 -0
  204. package/utils/isValidJwtToken.d.ts +2 -0
  205. package/utils/isValidJwtToken.js +5 -0
  206. package/utils/isValidUrl.d.ts +2 -0
  207. package/utils/isValidUrl.js +16 -0
  208. package/utils/isValidUuid.d.ts +2 -0
  209. package/utils/isValidUuid.js +5 -0
  210. package/utils/wait.d.ts +2 -0
  211. package/utils/wait.js +6 -0
  212. package/api/api.d.ts +0 -7
  213. package/api/api.js +0 -2
  214. package/api/api.ts +0 -8
  215. package/api/auth.d.ts +0 -9
  216. package/api/auth.js +0 -11
  217. package/api/auth.ts +0 -9
  218. package/api/config.d.ts +0 -13
  219. package/api/config.js +0 -59
  220. package/api/config.ts +0 -69
  221. package/api/endpoint.d.ts +0 -20
  222. package/api/endpoint.js +0 -5
  223. package/api/endpoint.ts +0 -23
  224. package/api/handler.d.ts +0 -8
  225. package/api/handler.js +0 -13
  226. package/api/handler.ts +0 -23
  227. package/api/index.d.ts +0 -7
  228. package/api/index.js +0 -187
  229. package/api/index.ts +0 -97
  230. package/api/route.d.ts +0 -6
  231. package/api/route.js +0 -2
  232. package/api/route.ts +0 -4
  233. package/api/router.d.ts +0 -4
  234. package/api/router.js +0 -111
  235. package/api/router.ts +0 -36
  236. package/api/schema.d.ts +0 -29
  237. package/api/schema.js +0 -69
  238. package/api/schema.ts +0 -98
  239. package/app/app.d.ts +0 -6
  240. package/app/app.js +0 -2
  241. package/app/app.ts +0 -7
  242. package/app/boot.d.ts +0 -4
  243. package/app/boot.js +0 -2
  244. package/app/boot.ts +0 -5
  245. package/app/bundle.d.ts +0 -14
  246. package/app/bundle.js +0 -2
  247. package/app/bundle.ts +0 -15
  248. package/app/config.d.ts +0 -4
  249. package/app/config.js +0 -9
  250. package/app/config.ts +0 -9
  251. package/app/index.d.ts +0 -9
  252. package/app/index.js +0 -103
  253. package/app/index.ts +0 -32
  254. package/bin/ape-cli-ts.js +0 -4
  255. package/bin/ape-cli.js +0 -2
  256. package/cli/command.d.ts +0 -4
  257. package/cli/command.js +0 -2
  258. package/cli/command.ts +0 -7
  259. package/cli/index.d.ts +0 -2
  260. package/cli/index.js +0 -103
  261. package/cli/index.ts +0 -41
  262. package/cli/internal/api.d.ts +0 -3
  263. package/cli/internal/api.js +0 -110
  264. package/cli/internal/api.ts +0 -38
  265. package/cli/internal/index.d.ts +0 -2
  266. package/cli/internal/index.js +0 -13
  267. package/cli/internal/index.ts +0 -9
  268. package/cli/internal/migration.d.ts +0 -3
  269. package/cli/internal/migration.js +0 -214
  270. package/cli/internal/migration.ts +0 -110
  271. package/cli/internal/queue.d.ts +0 -3
  272. package/cli/internal/queue.js +0 -147
  273. package/cli/internal/queue.ts +0 -60
  274. package/cli/utils.d.ts +0 -18
  275. package/cli/utils.js +0 -52
  276. package/cli/utils.ts +0 -48
  277. package/config/config.d.ts +0 -5
  278. package/config/config.js +0 -2
  279. package/config/config.ts +0 -6
  280. package/config/configuration.d.ts +0 -63
  281. package/config/configuration.js +0 -2
  282. package/config/configuration.ts +0 -72
  283. package/config/default.d.ts +0 -33
  284. package/config/default.js +0 -34
  285. package/config/default.ts +0 -40
  286. package/config/env.d.ts +0 -66
  287. package/config/env.js +0 -72
  288. package/config/env.ts +0 -79
  289. package/config/index.d.ts +0 -8
  290. package/config/index.js +0 -91
  291. package/config/index.ts +0 -101
  292. package/config/loadFile.d.ts +0 -2
  293. package/config/loadFile.js +0 -13
  294. package/config/loadFile.ts +0 -9
  295. package/config/node.d.ts +0 -5
  296. package/config/node.js +0 -11
  297. package/config/node.ts +0 -7
  298. package/config/store.d.ts +0 -6
  299. package/config/store.js +0 -20
  300. package/config/store.ts +0 -15
  301. package/db/config/index.d.ts +0 -10
  302. package/db/config/index.js +0 -43
  303. package/db/config/index.ts +0 -35
  304. package/db/config/memory.d.ts +0 -3
  305. package/db/config/memory.js +0 -15
  306. package/db/config/memory.ts +0 -13
  307. package/db/config/mysql.d.ts +0 -3
  308. package/db/config/mysql.js +0 -56
  309. package/db/config/mysql.ts +0 -58
  310. package/db/config/postgres.d.ts +0 -3
  311. package/db/config/postgres.js +0 -59
  312. package/db/config/postgres.ts +0 -61
  313. package/db/config/sqlite.d.ts +0 -3
  314. package/db/config/sqlite.js +0 -21
  315. package/db/config/sqlite.ts +0 -20
  316. package/db/database.d.ts +0 -3
  317. package/db/database.js +0 -3
  318. package/db/database.ts +0 -5
  319. package/db/index.d.ts +0 -10
  320. package/db/index.js +0 -32
  321. package/db/index.ts +0 -26
  322. package/db/postProcess.d.ts +0 -3
  323. package/db/postProcess.js +0 -25
  324. package/db/postProcess.ts +0 -27
  325. package/db/schema/builder/_.d.ts +0 -30
  326. package/db/schema/builder/_.js +0 -87
  327. package/db/schema/builder/_.ts +0 -101
  328. package/db/schema/builder/columnBuilder.d.ts +0 -7
  329. package/db/schema/builder/columnBuilder.js +0 -14
  330. package/db/schema/builder/columnBuilder.ts +0 -15
  331. package/db/schema/builder/dataType.d.ts +0 -28
  332. package/db/schema/builder/dataType.js +0 -170
  333. package/db/schema/builder/dataType.ts +0 -184
  334. package/db/schema/builder/index.d.ts +0 -15
  335. package/db/schema/builder/index.js +0 -42
  336. package/db/schema/builder/index.ts +0 -50
  337. package/db/schema/builder/tableBuilder.d.ts +0 -45
  338. package/db/schema/builder/tableBuilder.js +0 -307
  339. package/db/schema/builder/tableBuilder.ts +0 -409
  340. package/db/schema/config.d.ts +0 -4
  341. package/db/schema/config.js +0 -5
  342. package/db/schema/config.ts +0 -3
  343. package/db/schema/index.d.ts +0 -7
  344. package/db/schema/index.js +0 -252
  345. package/db/schema/index.ts +0 -88
  346. package/db/schema/migration.d.ts +0 -6
  347. package/db/schema/migration.js +0 -2
  348. package/db/schema/migration.ts +0 -7
  349. package/db/schema/migrationList.d.ts +0 -5
  350. package/db/schema/migrationList.js +0 -2
  351. package/db/schema/migrationList.ts +0 -5
  352. package/db/schema/migrationSource.d.ts +0 -10
  353. package/db/schema/migrationSource.js +0 -60
  354. package/db/schema/migrationSource.ts +0 -24
  355. package/db/schema/schema.d.ts +0 -6
  356. package/db/schema/schema.js +0 -2
  357. package/db/schema/schema.ts +0 -7
  358. package/db/utils/index.d.ts +0 -7
  359. package/db/utils/index.js +0 -10
  360. package/db/utils/index.ts +0 -8
  361. package/db/utils/insertGetKey.d.ts +0 -8
  362. package/db/utils/insertGetKey.js +0 -109
  363. package/db/utils/insertGetKey.ts +0 -80
  364. package/i18n/config.d.ts +0 -4
  365. package/i18n/config.js +0 -9
  366. package/i18n/config.ts +0 -9
  367. package/i18n/i18n.d.ts +0 -5
  368. package/i18n/i18n.js +0 -2
  369. package/i18n/i18n.ts +0 -6
  370. package/i18n/index.d.ts +0 -8
  371. package/i18n/index.js +0 -155
  372. package/i18n/index.ts +0 -42
  373. package/i18n/internationalization.d.ts +0 -3
  374. package/i18n/internationalization.js +0 -2
  375. package/i18n/internationalization.ts +0 -5
  376. package/i18n/translation.d.ts +0 -4
  377. package/i18n/translation.js +0 -2
  378. package/i18n/translation.ts +0 -4
  379. package/jwt/config.d.ts +0 -5
  380. package/jwt/config.js +0 -12
  381. package/jwt/config.ts +0 -11
  382. package/jwt/index.d.ts +0 -8
  383. package/jwt/index.js +0 -90
  384. package/jwt/index.ts +0 -60
  385. package/jwt/jwt.d.ts +0 -6
  386. package/jwt/jwt.js +0 -2
  387. package/jwt/jwt.ts +0 -19
  388. package/jwt/user.d.ts +0 -4
  389. package/jwt/user.js +0 -2
  390. package/jwt/user.ts +0 -4
  391. package/log/config.d.ts +0 -23
  392. package/log/config.js +0 -47
  393. package/log/config.ts +0 -43
  394. package/log/index.d.ts +0 -4
  395. package/log/index.js +0 -9
  396. package/log/index.ts +0 -9
  397. package/log/logger.d.ts +0 -3
  398. package/log/logger.js +0 -2
  399. package/log/logger.ts +0 -5
  400. package/mail/config.d.ts +0 -4
  401. package/mail/config.js +0 -5
  402. package/mail/config.ts +0 -3
  403. package/mail/email.d.ts +0 -20
  404. package/mail/email.js +0 -2
  405. package/mail/email.ts +0 -21
  406. package/mail/index.d.ts +0 -2
  407. package/mail/index.js +0 -4
  408. package/mail/index.ts +0 -3
  409. package/mail/mail.d.ts +0 -12
  410. package/mail/mail.js +0 -2
  411. package/mail/mail.ts +0 -13
  412. package/mail/module/bypass/index.d.ts +0 -6
  413. package/mail/module/bypass/index.js +0 -74
  414. package/mail/module/bypass/index.ts +0 -9
  415. package/mail/module/config.d.ts +0 -11
  416. package/mail/module/config.js +0 -24
  417. package/mail/module/config.ts +0 -25
  418. package/mail/module/index.d.ts +0 -8
  419. package/mail/module/index.js +0 -107
  420. package/mail/module/index.ts +0 -61
  421. package/mail/module/smtp/config.d.ts +0 -6
  422. package/mail/module/smtp/config.js +0 -25
  423. package/mail/module/smtp/config.ts +0 -25
  424. package/mail/module/smtp/index.d.ts +0 -9
  425. package/mail/module/smtp/index.js +0 -104
  426. package/mail/module/smtp/index.ts +0 -36
  427. package/mq/index.d.ts +0 -3
  428. package/mq/index.js +0 -27
  429. package/mq/index.ts +0 -4
  430. package/mq/module/bypass/index.d.ts +0 -13
  431. package/mq/module/bypass/index.js +0 -86
  432. package/mq/module/bypass/index.ts +0 -20
  433. package/mq/module/config.d.ts +0 -6
  434. package/mq/module/config.js +0 -15
  435. package/mq/module/config.ts +0 -14
  436. package/mq/module/index.d.ts +0 -9
  437. package/mq/module/index.js +0 -93
  438. package/mq/module/index.ts +0 -24
  439. package/mq/module/redis/config.d.ts +0 -27
  440. package/mq/module/redis/config.js +0 -37
  441. package/mq/module/redis/config.ts +0 -34
  442. package/mq/module/redis/index.d.ts +0 -15
  443. package/mq/module/redis/index.js +0 -132
  444. package/mq/module/redis/index.ts +0 -60
  445. package/mq/mq.d.ts +0 -15
  446. package/mq/mq.js +0 -2
  447. package/mq/mq.ts +0 -18
  448. package/mq/queue.d.ts +0 -9
  449. package/mq/queue.js +0 -2
  450. package/mq/queue.ts +0 -11
  451. package/pwd/config.d.ts +0 -4
  452. package/pwd/config.js +0 -9
  453. package/pwd/config.ts +0 -9
  454. package/pwd/index.d.ts +0 -6
  455. package/pwd/index.js +0 -21
  456. package/pwd/index.ts +0 -20
  457. package/pwd/pwd.d.ts +0 -4
  458. package/pwd/pwd.js +0 -2
  459. package/pwd/pwd.ts +0 -4
  460. package/utils/index.d.ts +0 -25
  461. package/utils/index.js +0 -72
  462. package/utils/index.ts +0 -56
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2023 Matthieu Symoens
3
+ Copyright (c) 2024 Matthieu Symoens
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/README.md CHANGED
@@ -1,55 +1,13 @@
1
1
  # Ape Framework
2
2
 
3
- [Node.js](https://nodejs.org) API framework.
3
+ [Node.js](https://nodejs.org) app framework.
4
4
 
5
- NPM package: [apeframework](https://www.npmjs.com/package/apeframework)
5
+ NPM package: [apeframework](https://www.npmjs.com/package/apeframework).
6
6
 
7
- GitHub repository: [ApeCommerce/ape-framework](https://github.com/ApeCommerce/ape-framework)
7
+ GitHub repository: [ApeFramework/apeframework](https://github.com/ApeFramework/apeframework).
8
8
 
9
9
  ## Installation
10
10
 
11
11
  ```
12
- npm install apeframework
13
- ```
14
-
15
- ## Hello Ape!
16
-
17
- Let's make an API serving a `/hello` endpoint, in TypeScript.
18
-
19
- Create a `boot.ts` file at the root of the project:
20
-
21
- ```ts
22
- import type { Boot, Bundle } from 'apeframework/app';
23
-
24
- const welcome: Bundle = {
25
- bundleId: 'welcome',
26
- name: 'Welcome',
27
- routes: async () => [
28
- {
29
- endpoint: {
30
- method: 'GET',
31
- path: '/hello',
32
- },
33
- handler: async (request, reply) => reply.send('Hello Ape!'),
34
- },
35
- ],
36
- };
37
-
38
- const boot: Boot = {
39
- bundles: async () => [welcome],
40
- };
41
-
42
- export default boot;
43
- ```
44
-
45
- Start the API using Ape Framework's CLI:
46
-
47
- ```
48
- npx ape-cli-ts api start
49
- ```
50
-
51
- Request the API:
52
-
53
- ```
54
- curl http://localhost:3000/hello
12
+ yarn add apeframework
55
13
  ```
@@ -0,0 +1,6 @@
1
+ declare enum Algorithm {
2
+ AES128 = "aes-128-cbc",
3
+ AES192 = "aes-192-cbc",
4
+ AES256 = "aes-256-cbc"
5
+ }
6
+ export { Algorithm, };
@@ -0,0 +1,7 @@
1
+ var Algorithm;
2
+ (function (Algorithm) {
3
+ Algorithm["AES128"] = "aes-128-cbc";
4
+ Algorithm["AES192"] = "aes-192-cbc";
5
+ Algorithm["AES256"] = "aes-256-cbc";
6
+ })(Algorithm || (Algorithm = {}));
7
+ export { Algorithm, };
@@ -0,0 +1,12 @@
1
+ import type { Algorithm } from './Algorithm';
2
+ declare class Cipher {
3
+ private readonly algorithm;
4
+ private readonly secret;
5
+ constructor(params: {
6
+ algorithm: Algorithm;
7
+ secret: string;
8
+ });
9
+ encrypt(string: string): string;
10
+ decrypt(string: string): string;
11
+ }
12
+ export { Cipher, };
@@ -0,0 +1,32 @@
1
+ import crypto from 'crypto';
2
+ import { DecryptError } from './errors/DecryptError';
3
+ import { validateSecretLength } from './validateSecretLength';
4
+ class Cipher {
5
+ algorithm;
6
+ secret;
7
+ constructor(params) {
8
+ validateSecretLength(params.algorithm, params.secret);
9
+ this.algorithm = params.algorithm;
10
+ this.secret = Buffer.from(params.secret, 'utf8');
11
+ }
12
+ encrypt(string) {
13
+ const iv = crypto.randomBytes(16);
14
+ const cipher = crypto.createCipheriv(this.algorithm, this.secret, iv);
15
+ return iv.toString('hex')
16
+ + cipher.update(string, 'utf8', 'hex')
17
+ + cipher.final('hex');
18
+ }
19
+ decrypt(string) {
20
+ const buffer = Buffer.from(string, 'hex');
21
+ const iv = buffer.subarray(0, 16);
22
+ const decipher = crypto.createDecipheriv(this.algorithm, this.secret, iv);
23
+ try {
24
+ return decipher.update(buffer.subarray(16), undefined, 'utf8')
25
+ + decipher.final('utf8');
26
+ }
27
+ catch (error) {
28
+ throw new DecryptError(error.message);
29
+ }
30
+ }
31
+ }
32
+ export { Cipher, };
@@ -0,0 +1,5 @@
1
+ import { BaseError } from '../../error/BaseError';
2
+ declare class DecryptError extends BaseError {
3
+ constructor(message: string);
4
+ }
5
+ export { DecryptError, };
@@ -0,0 +1,7 @@
1
+ import { BaseError } from '../../error/BaseError';
2
+ class DecryptError extends BaseError {
3
+ constructor(message) {
4
+ super(`failed decrypting string: ${message}`);
5
+ }
6
+ }
7
+ export { DecryptError, };
@@ -0,0 +1,5 @@
1
+ import { BaseError } from '../../error/BaseError';
2
+ declare class SecretLengthError extends BaseError {
3
+ constructor();
4
+ }
5
+ export { SecretLengthError, };
@@ -0,0 +1,7 @@
1
+ import { BaseError } from '../../error/BaseError';
2
+ class SecretLengthError extends BaseError {
3
+ constructor() {
4
+ super('invalid secret length');
5
+ }
6
+ }
7
+ export { SecretLengthError, };
@@ -0,0 +1,3 @@
1
+ import { Algorithm } from './Algorithm';
2
+ declare const validateSecretLength: (algorithm: Algorithm, secret: string) => void;
3
+ export { validateSecretLength, };
@@ -0,0 +1,13 @@
1
+ import { Algorithm } from './Algorithm';
2
+ import { SecretLengthError } from './errors/SecretLengthError';
3
+ const secretLength = {
4
+ [Algorithm.AES128]: 16,
5
+ [Algorithm.AES192]: 24,
6
+ [Algorithm.AES256]: 32,
7
+ };
8
+ const validateSecretLength = (algorithm, secret) => {
9
+ if (Buffer.from(secret).length !== secretLength[algorithm]) {
10
+ throw new SecretLengthError();
11
+ }
12
+ };
13
+ export { validateSecretLength, };
package/cli/Args.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ interface Args {
2
+ positional: string[];
3
+ optional: Record<string, boolean | string | undefined>;
4
+ }
5
+ export { type Args, };
package/cli/Args.js ADDED
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,3 @@
1
+ import type { Args } from './Args';
2
+ type Command = (args: Args) => Promise<void>;
3
+ export { type Command, };
package/cli/Command.js ADDED
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,3 @@
1
+ import type { Args } from './Args';
2
+ declare const getArgs: () => Args;
3
+ export { getArgs, };
package/cli/getArgs.js ADDED
@@ -0,0 +1,5 @@
1
+ import { parseArgs } from './parseArgs';
2
+ const getArgs = () => {
3
+ return parseArgs(process.argv.slice(2));
4
+ };
5
+ export { getArgs, };
@@ -0,0 +1,3 @@
1
+ import type { Args } from './Args';
2
+ declare const parseArgs: (args: string[]) => Args;
3
+ export { parseArgs, };
@@ -0,0 +1,25 @@
1
+ import yargsParser from 'yargs-parser';
2
+ const parseArgs = (args) => {
3
+ const parsed = yargsParser(args, {
4
+ configuration: {
5
+ 'boolean-negation': false,
6
+ 'camel-case-expansion': true,
7
+ 'dot-notation': false,
8
+ 'duplicate-arguments-array': false,
9
+ 'flatten-duplicate-arrays': false,
10
+ 'greedy-arrays': false,
11
+ 'parse-numbers': false,
12
+ 'parse-positional-numbers': false,
13
+ 'short-option-groups': true,
14
+ 'strip-dashed': true,
15
+ },
16
+ });
17
+ const positional = parsed._;
18
+ const optional = parsed;
19
+ delete optional._;
20
+ return {
21
+ positional,
22
+ optional,
23
+ };
24
+ };
25
+ export { parseArgs, };
@@ -0,0 +1,2 @@
1
+ declare const exit: (code?: number) => void;
2
+ export { exit, };
@@ -0,0 +1,4 @@
1
+ const exit = (code) => {
2
+ process.exit(code);
3
+ };
4
+ export { exit, };
@@ -0,0 +1,2 @@
1
+ declare const formatList: (list: string[]) => string;
2
+ export { formatList, };
@@ -0,0 +1,7 @@
1
+ import { EOL } from 'os';
2
+ const formatList = (list) => {
3
+ return list
4
+ .map((item) => { return ` ${item}`; })
5
+ .join(EOL);
6
+ };
7
+ export { formatList, };
@@ -0,0 +1,2 @@
1
+ declare const formatTable: (table: string[][]) => string;
2
+ export { formatTable, };
@@ -0,0 +1,19 @@
1
+ import { EOL } from 'os';
2
+ const formatTable = (table) => {
3
+ const colLength = [];
4
+ table.forEach((row) => {
5
+ ['', ...row].forEach((col, i) => {
6
+ colLength[i] = col.length > (colLength[i] ?? 0)
7
+ ? col.length
8
+ : colLength[i] ?? 0;
9
+ });
10
+ });
11
+ return table
12
+ .map((row) => {
13
+ return ['', ...row]
14
+ .map((col, i) => { return col.padEnd(colLength[i], ' '); })
15
+ .join(' ');
16
+ })
17
+ .join(EOL);
18
+ };
19
+ export { formatTable, };
@@ -0,0 +1,2 @@
1
+ declare const formatText: (text: string[]) => string;
2
+ export { formatText, };
@@ -0,0 +1,5 @@
1
+ import { EOL } from 'os';
2
+ const formatText = (text) => {
3
+ return text.join(EOL);
4
+ };
5
+ export { formatText, };
@@ -0,0 +1,2 @@
1
+ declare const print: (s: string) => void;
2
+ export { print, };
@@ -0,0 +1,4 @@
1
+ const print = (s) => {
2
+ process.stdout.write(s);
3
+ };
4
+ export { print, };
@@ -0,0 +1,2 @@
1
+ declare const printLn: (s: string) => void;
2
+ export { printLn, };
@@ -0,0 +1,5 @@
1
+ import { EOL } from 'os';
2
+ const printLn = (s) => {
3
+ process.stdout.write(`${s}${EOL}`);
4
+ };
5
+ export { printLn, };
@@ -0,0 +1,2 @@
1
+ type Config = Record<string, any>;
2
+ export { type Config, };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,8 @@
1
+ import type { Parser } from '../parser/Parser';
2
+ type Properties<Type> = {
3
+ [Property in keyof Type]: {
4
+ parser: Parser<Type[Property]>;
5
+ default?: any;
6
+ };
7
+ };
8
+ export { type Properties, };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,5 @@
1
+ import { BaseError } from '../../error/BaseError';
2
+ declare class FileReadError extends BaseError {
3
+ constructor(path: string, message: string);
4
+ }
5
+ export { FileReadError, };
@@ -0,0 +1,7 @@
1
+ import { BaseError } from '../../error/BaseError';
2
+ class FileReadError extends BaseError {
3
+ constructor(path, message) {
4
+ super(`failed reading file "${path}": ${message}`);
5
+ }
6
+ }
7
+ export { FileReadError, };
@@ -0,0 +1,5 @@
1
+ import { BaseError } from '../../error/BaseError';
2
+ declare class PropertyNameError extends BaseError {
3
+ constructor(name: string);
4
+ }
5
+ export { PropertyNameError, };
@@ -0,0 +1,7 @@
1
+ import { BaseError } from '../../error/BaseError';
2
+ class PropertyNameError extends BaseError {
3
+ constructor(name) {
4
+ super(`invalid property name "${name}"`);
5
+ }
6
+ }
7
+ export { PropertyNameError, };
@@ -0,0 +1,5 @@
1
+ import { BaseError } from '../../error/BaseError';
2
+ declare class PropertyParseError extends BaseError {
3
+ constructor(name: string, source: string, message: string);
4
+ }
5
+ export { PropertyParseError, };
@@ -0,0 +1,7 @@
1
+ import { BaseError } from '../../error/BaseError';
2
+ class PropertyParseError extends BaseError {
3
+ constructor(name, source, message) {
4
+ super(`failed parsing property "${name}" from ${source}: ${message}`);
5
+ }
6
+ }
7
+ export { PropertyParseError, };
@@ -0,0 +1,14 @@
1
+ import type { Config } from './Config';
2
+ import type { Properties } from './Properties';
3
+ import type { Args } from '../cli/Args';
4
+ import type { Env } from '../env/Env';
5
+ declare const getConfig: <Type extends Config>(params: {
6
+ properties: Properties<Type>;
7
+ file?: {
8
+ path: string;
9
+ required?: boolean;
10
+ };
11
+ env?: Env;
12
+ args?: Args;
13
+ }) => Type;
14
+ export { getConfig, };
@@ -0,0 +1,18 @@
1
+ import { getPropertyEnvVar } from './getPropertyEnvVar';
2
+ import { parseProperty } from './parseProperty';
3
+ import { readFile } from './readFile';
4
+ import { validatePropertyName } from './validatePropertyName';
5
+ const getConfig = (params) => {
6
+ const file = params.file
7
+ ? readFile(params.file.path, params.file.required)
8
+ : {};
9
+ const env = params.env ?? {};
10
+ const args = params.args ?? { positional: [], optional: {} };
11
+ const config = {};
12
+ for (const name in params.properties) {
13
+ validatePropertyName(name);
14
+ config[name] = parseProperty(name, params.properties[name].parser, params.properties[name].default, file[name], env[getPropertyEnvVar(name)], args.optional[name]);
15
+ }
16
+ return config;
17
+ };
18
+ export { getConfig, };
@@ -0,0 +1,2 @@
1
+ declare const getPropertyEnvVar: (name: string) => string;
2
+ export { getPropertyEnvVar, };
@@ -0,0 +1,10 @@
1
+ const capitalLetterRegex = /[A-Z]/gu;
2
+ const capitalLetterReplacer = (letter) => {
3
+ return `_${letter}`;
4
+ };
5
+ const getPropertyEnvVar = (name) => {
6
+ return name
7
+ .replace(capitalLetterRegex, capitalLetterReplacer)
8
+ .toUpperCase();
9
+ };
10
+ export { getPropertyEnvVar, };
@@ -0,0 +1,3 @@
1
+ import type { Parser } from '../parser/Parser';
2
+ declare const parseProperty: <Type>(name: string, parser: Parser<Type>, defaultValue: any, fileValue: any, envValue: any, argsValue: any) => Type;
3
+ export { parseProperty, };
@@ -0,0 +1,34 @@
1
+ import { PropertyParseError } from './errors/PropertyParseError';
2
+ const parseProperty = (name, parser, defaultValue, fileValue, envValue, argsValue) => {
3
+ const sources = [
4
+ {
5
+ name: 'command line arguments',
6
+ value: argsValue,
7
+ },
8
+ {
9
+ name: 'environment variables',
10
+ value: envValue,
11
+ },
12
+ {
13
+ name: 'configuration file',
14
+ value: fileValue,
15
+ },
16
+ {
17
+ name: 'default value',
18
+ value: defaultValue,
19
+ },
20
+ ];
21
+ const source = sources.find((s) => {
22
+ return s.value !== undefined;
23
+ }) || {
24
+ name: 'undefined value',
25
+ value: undefined,
26
+ };
27
+ try {
28
+ return parser(source.value);
29
+ }
30
+ catch (error) {
31
+ throw new PropertyParseError(name, source.name, error.message);
32
+ }
33
+ };
34
+ export { parseProperty, };
@@ -0,0 +1,2 @@
1
+ declare const readFile: (path: string, required?: boolean) => Record<string, any>;
2
+ export { readFile, };
@@ -0,0 +1,25 @@
1
+ import fs from 'fs-extra';
2
+ import { FileReadError } from './errors/FileReadError';
3
+ const readFile = (path, required = false) => {
4
+ let json = {};
5
+ let fileExists;
6
+ try {
7
+ fileExists = fs.existsSync(path);
8
+ if (fileExists) {
9
+ json = fs.readJsonSync(path);
10
+ }
11
+ }
12
+ catch (error) {
13
+ throw new FileReadError(path, error.message);
14
+ }
15
+ if (required && !fileExists) {
16
+ throw new FileReadError(path, 'missing file');
17
+ }
18
+ if (typeof json !== 'object'
19
+ || Array.isArray(json)
20
+ || json === null) {
21
+ throw new FileReadError(path, 'invalid content');
22
+ }
23
+ return json;
24
+ };
25
+ export { readFile, };
@@ -0,0 +1,2 @@
1
+ declare const validatePropertyName: (name: string) => void;
2
+ export { validatePropertyName, };
@@ -0,0 +1,8 @@
1
+ import { PropertyNameError } from './errors/PropertyNameError';
2
+ const propertyNameRegex = /^[a-z](?:[0-9A-Za-z])*$/u;
3
+ const validatePropertyName = (name) => {
4
+ if (!propertyNameRegex.test(name)) {
5
+ throw new PropertyNameError(name);
6
+ }
7
+ };
8
+ export { validatePropertyName, };
package/env/Env.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ type Env = Record<string, string>;
2
+ export { type Env, };
package/env/Env.js ADDED
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,5 @@
1
+ import { BaseError } from '../../error/BaseError';
2
+ declare class FileReadError extends BaseError {
3
+ constructor(path: string, message: string);
4
+ }
5
+ export { FileReadError, };
@@ -0,0 +1,7 @@
1
+ import { BaseError } from '../../error/BaseError';
2
+ class FileReadError extends BaseError {
3
+ constructor(path, message) {
4
+ super(`failed reading file "${path}": ${message}`);
5
+ }
6
+ }
7
+ export { FileReadError, };
@@ -0,0 +1,8 @@
1
+ import type { Env } from './Env';
2
+ declare const getEnv: (params?: {
3
+ file?: {
4
+ path: string;
5
+ required?: boolean;
6
+ };
7
+ }) => Env;
8
+ export { getEnv, };
package/env/getEnv.js ADDED
@@ -0,0 +1,12 @@
1
+ import { readFile } from './readFile';
2
+ const getEnv = (params) => {
3
+ let file = {};
4
+ if (params?.file) {
5
+ file = readFile(params.file.path, params.file.required);
6
+ }
7
+ return {
8
+ ...file,
9
+ ...process.env,
10
+ };
11
+ };
12
+ export { getEnv, };
@@ -0,0 +1,3 @@
1
+ import type { Env } from './Env';
2
+ declare const readFile: (path: string, required?: boolean) => Env;
3
+ export { readFile, };
@@ -0,0 +1,18 @@
1
+ import dotenv from 'dotenv';
2
+ import fs from 'fs-extra';
3
+ import { FileReadError } from './errors/FileReadError';
4
+ const readFile = (path, required = false) => {
5
+ try {
6
+ if (fs.existsSync(path)) {
7
+ return dotenv.parse(fs.readFileSync(path));
8
+ }
9
+ }
10
+ catch (error) {
11
+ throw new FileReadError(path, error.message);
12
+ }
13
+ if (required) {
14
+ throw new FileReadError(path, 'missing file');
15
+ }
16
+ return {};
17
+ };
18
+ export { readFile, };
@@ -0,0 +1,4 @@
1
+ declare class BaseError extends Error {
2
+ constructor(message: string);
3
+ }
4
+ export { BaseError, };
@@ -0,0 +1,9 @@
1
+ class BaseError extends Error {
2
+ constructor(message) {
3
+ super(message);
4
+ this.name = new.target.name;
5
+ Error.captureStackTrace(this, new.target);
6
+ Object.setPrototypeOf(this, new.target.prototype);
7
+ }
8
+ }
9
+ export { BaseError, };
@@ -0,0 +1,6 @@
1
+ declare enum Algorithm {
2
+ HS256 = "HS256",
3
+ HS384 = "HS384",
4
+ HS512 = "HS512"
5
+ }
6
+ export { Algorithm, };
@@ -0,0 +1,7 @@
1
+ var Algorithm;
2
+ (function (Algorithm) {
3
+ Algorithm["HS256"] = "HS256";
4
+ Algorithm["HS384"] = "HS384";
5
+ Algorithm["HS512"] = "HS512";
6
+ })(Algorithm || (Algorithm = {}));
7
+ export { Algorithm, };