@slopware/sloppy-darwin-arm64 0.1.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (434) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +5 -0
  3. package/bin/sloppy +0 -0
  4. package/bin/sloppyc +0 -0
  5. package/docs/KNOWN_LIMITATIONS.md +16 -0
  6. package/docs/LICENSES.md +6 -0
  7. package/docs/NOTICE.md +8 -0
  8. package/examples/README.md +140 -0
  9. package/examples/auth-api/README.md +20 -0
  10. package/examples/auth-api/app.js +61 -0
  11. package/examples/auth-api/appsettings.json +7 -0
  12. package/examples/auth-api/sloppy.json +5 -0
  13. package/examples/cache-basic/README.md +9 -0
  14. package/examples/cache-basic/app.js +32 -0
  15. package/examples/cache-hybrid-postgres/README.md +10 -0
  16. package/examples/cache-hybrid-postgres/app.js +27 -0
  17. package/examples/cache-output-api/README.md +10 -0
  18. package/examples/cache-output-api/app.js +35 -0
  19. package/examples/codec-base64-hex/README.md +14 -0
  20. package/examples/codec-base64-hex/app.js +15 -0
  21. package/examples/codec-checksums/README.md +15 -0
  22. package/examples/codec-checksums/app.js +8 -0
  23. package/examples/codec-compression/README.md +13 -0
  24. package/examples/codec-compression/app.js +9 -0
  25. package/examples/codec-streaming-compression/README.md +19 -0
  26. package/examples/codec-streaming-compression/app.js +16 -0
  27. package/examples/codec-text-binary/README.md +16 -0
  28. package/examples/codec-text-binary/app.js +17 -0
  29. package/examples/compiler-hello/README.md +71 -0
  30. package/examples/compiler-hello/app.js +7 -0
  31. package/examples/compiler-hello/expected/app.js +8 -0
  32. package/examples/compiler-hello/expected/app.js.map +53 -0
  33. package/examples/compiler-hello/expected/app.plan.json +229 -0
  34. package/examples/compiler-hello/expected/routes.slrt +0 -0
  35. package/examples/config-basic/README.md +13 -0
  36. package/examples/config-basic/app.js +13 -0
  37. package/examples/config-basic/appsettings.json +7 -0
  38. package/examples/config-secrets-redaction/README.md +9 -0
  39. package/examples/config-secrets-redaction/app.js +9 -0
  40. package/examples/config-secrets-redaction/appsettings.json +5 -0
  41. package/examples/config-strict-mode/README.md +7 -0
  42. package/examples/config-strict-mode/app.js +10 -0
  43. package/examples/config-strict-mode/appsettings.json +7 -0
  44. package/examples/configured-api/README.md +38 -0
  45. package/examples/configured-api/app.js +12 -0
  46. package/examples/configured-api/appsettings.Development.json +5 -0
  47. package/examples/configured-api/appsettings.json +6 -0
  48. package/examples/configured-api/sloppy.json +5 -0
  49. package/examples/core-config-secrets/README.md +10 -0
  50. package/examples/core-config-secrets/app.js +15 -0
  51. package/examples/core-fs-time-codec/README.md +9 -0
  52. package/examples/core-fs-time-codec/app.js +8 -0
  53. package/examples/core-network-time-codec/README.md +11 -0
  54. package/examples/core-network-time-codec/app.js +20 -0
  55. package/examples/core-policy-audit/README.md +7 -0
  56. package/examples/core-policy-audit/app.js +22 -0
  57. package/examples/core-process-time-codec/README.md +8 -0
  58. package/examples/core-process-time-codec/app.js +28 -0
  59. package/examples/core-worker-time/README.md +8 -0
  60. package/examples/core-worker-time/app.js +17 -0
  61. package/examples/crypto-hash-hmac/README.md +17 -0
  62. package/examples/crypto-hash-hmac/app.js +29 -0
  63. package/examples/crypto-password/README.md +21 -0
  64. package/examples/crypto-password/app.js +12 -0
  65. package/examples/crypto-random-token/README.md +16 -0
  66. package/examples/crypto-random-token/app.js +12 -0
  67. package/examples/crypto-secret-constant-time/README.md +21 -0
  68. package/examples/crypto-secret-constant-time/app.js +15 -0
  69. package/examples/data-foundation/README.md +39 -0
  70. package/examples/data-foundation/app.js +63 -0
  71. package/examples/dependency-graph/README.md +19 -0
  72. package/examples/dependency-graph/fixtures/graph-helper/index.js +3 -0
  73. package/examples/dependency-graph/fixtures/graph-helper/package.json +6 -0
  74. package/examples/dependency-graph/package.json +7 -0
  75. package/examples/dependency-graph/public/message.txt +1 -0
  76. package/examples/dependency-graph/sloppy.json +9 -0
  77. package/examples/dependency-graph/src/main.ts +8 -0
  78. package/examples/dogfood/README.md +23 -0
  79. package/examples/dogfood/dogfood.json +136 -0
  80. package/examples/dynamic-module-include/README.md +20 -0
  81. package/examples/dynamic-module-include/public/readme.txt +1 -0
  82. package/examples/dynamic-module-include/sloppy.json +12 -0
  83. package/examples/dynamic-module-include/src/main.ts +6 -0
  84. package/examples/dynamic-module-include/src/plugins/alpha.js +3 -0
  85. package/examples/dynamic-module-include/src/plugins/beta.js +3 -0
  86. package/examples/ergonomics/README.md +42 -0
  87. package/examples/ergonomics/app.js +38 -0
  88. package/examples/framework-controller/README.md +12 -0
  89. package/examples/framework-controller/app.js +31 -0
  90. package/examples/framework-di-services/README.md +17 -0
  91. package/examples/framework-di-services/app.ts +40 -0
  92. package/examples/framework-explicit-binding/README.md +12 -0
  93. package/examples/framework-explicit-binding/app.ts +34 -0
  94. package/examples/framework-hello/README.md +16 -0
  95. package/examples/framework-hello/app.ts +16 -0
  96. package/examples/framework-postgres-crud/README.md +73 -0
  97. package/examples/framework-postgres-crud/app.ts +64 -0
  98. package/examples/framework-sqlite-crud/README.md +52 -0
  99. package/examples/framework-sqlite-crud/app.ts +90 -0
  100. package/examples/framework-sqlite-crud/appsettings.json +11 -0
  101. package/examples/framework-sqlserver-crud/README.md +73 -0
  102. package/examples/framework-sqlserver-crud/app.ts +64 -0
  103. package/examples/framework-validation-errors/README.md +12 -0
  104. package/examples/framework-validation-errors/app.ts +16 -0
  105. package/examples/fs-basic/README.md +24 -0
  106. package/examples/fs-basic/app.js +12 -0
  107. package/examples/fs-roots-policy/README.md +14 -0
  108. package/examples/fs-roots-policy/app.js +4 -0
  109. package/examples/fs-streams/README.md +18 -0
  110. package/examples/fs-streams/app.js +11 -0
  111. package/examples/fs-watch/README.md +19 -0
  112. package/examples/fs-watch/app.js +11 -0
  113. package/examples/hello/README.md +63 -0
  114. package/examples/hello/app.js +19 -0
  115. package/examples/hello-minimal/README.md +51 -0
  116. package/examples/hello-minimal/sloppy.json +5 -0
  117. package/examples/hello-minimal/src/main.ts +9 -0
  118. package/examples/http-client-basic/README.md +11 -0
  119. package/examples/http-client-basic/app.js +46 -0
  120. package/examples/http-client-generated/README.md +22 -0
  121. package/examples/http-client-generated/openapi.json +45 -0
  122. package/examples/http-client-resilience/README.md +4 -0
  123. package/examples/http-client-resilience/app.js +38 -0
  124. package/examples/http-client-runtime-loopback/README.md +24 -0
  125. package/examples/http-client-testhost/README.md +4 -0
  126. package/examples/http-client-testhost/app.js +27 -0
  127. package/examples/http-client-testhost-package-mock/README.md +26 -0
  128. package/examples/http-client-typed/README.md +5 -0
  129. package/examples/http-client-typed/app.js +33 -0
  130. package/examples/modules-api/README.md +30 -0
  131. package/examples/modules-api/app.js +9 -0
  132. package/examples/modules-api/modules/routes.js +16 -0
  133. package/examples/modules-api/sloppy.json +5 -0
  134. package/examples/modules-basic/README.md +32 -0
  135. package/examples/modules-basic/app.js +41 -0
  136. package/examples/net-deadline-cancel/README.md +13 -0
  137. package/examples/net-deadline-cancel/app.js +34 -0
  138. package/examples/net-local-ipc/README.md +12 -0
  139. package/examples/net-local-ipc/app.js +46 -0
  140. package/examples/net-policy-strict/README.md +12 -0
  141. package/examples/net-policy-strict/app.js +34 -0
  142. package/examples/net-tcp-client/README.md +10 -0
  143. package/examples/net-tcp-client/app.js +23 -0
  144. package/examples/net-tcp-echo/README.md +11 -0
  145. package/examples/net-tcp-echo/app.js +45 -0
  146. package/examples/net-tcp-server/README.md +10 -0
  147. package/examples/net-tcp-server/app.js +28 -0
  148. package/examples/node-compat-path-events/README.md +15 -0
  149. package/examples/node-compat-path-events/sloppy.json +6 -0
  150. package/examples/node-compat-path-events/src/main.ts +15 -0
  151. package/examples/ops-compiler/README.md +9 -0
  152. package/examples/ops-compiler/app.js +26 -0
  153. package/examples/ops-health-metrics-management/README.md +14 -0
  154. package/examples/ops-health-metrics-management/app.js +24 -0
  155. package/examples/orm-basic/README.md +17 -0
  156. package/examples/orm-basic/app.js +82 -0
  157. package/examples/orm-cursor-export/README.md +16 -0
  158. package/examples/orm-cursor-export/app.js +28 -0
  159. package/examples/orm-migrations/README.md +14 -0
  160. package/examples/orm-migrations/migrations/.gitkeep +1 -0
  161. package/examples/orm-migrations/sloppy.json +9 -0
  162. package/examples/orm-migrations/src/app.ts +34 -0
  163. package/examples/orm-relations-includes/README.md +10 -0
  164. package/examples/orm-relations-includes/app.js +47 -0
  165. package/examples/orm-testservices/README.md +37 -0
  166. package/examples/orm-testservices/test.mjs +32 -0
  167. package/examples/os-runtime-api/README.md +11 -0
  168. package/examples/os-runtime-api/app.js +44 -0
  169. package/examples/package-zod-like/README.md +28 -0
  170. package/examples/package-zod-like/fixtures/zod-like/index.js +48 -0
  171. package/examples/package-zod-like/fixtures/zod-like/package.json +12 -0
  172. package/examples/package-zod-like/package.json +7 -0
  173. package/examples/package-zod-like/sloppy.json +6 -0
  174. package/examples/package-zod-like/src/main.ts +16 -0
  175. package/examples/postgres-basic/README.md +31 -0
  176. package/examples/postgres-basic/app.js +50 -0
  177. package/examples/prealpha-control-plane/README.md +50 -0
  178. package/examples/prealpha-control-plane/appsettings.Development.json +11 -0
  179. package/examples/prealpha-control-plane/appsettings.json +15 -0
  180. package/examples/prealpha-control-plane/sloppy.json +5 -0
  181. package/examples/prealpha-control-plane/src/db/schema.js +7 -0
  182. package/examples/prealpha-control-plane/src/db/seed.js +6 -0
  183. package/examples/prealpha-control-plane/src/main.js +21 -0
  184. package/examples/prealpha-control-plane/src/routes/apps.js +34 -0
  185. package/examples/prealpha-control-plane/src/routes/builds.js +25 -0
  186. package/examples/prealpha-control-plane/src/routes/deployments.js +19 -0
  187. package/examples/prealpha-control-plane/src/routes/diagnostics.js +11 -0
  188. package/examples/prealpha-control-plane/src/routes/health.js +27 -0
  189. package/examples/prealpha-control-plane/src/routes/projects.js +38 -0
  190. package/examples/prealpha-control-plane/src/services/diagnosticsSink.js +11 -0
  191. package/examples/prealpha-control-plane/src/services/repositories.js +9 -0
  192. package/examples/prealpha-control-plane/src/validation/schemas.js +6 -0
  193. package/examples/program-fs-process/README.md +31 -0
  194. package/examples/program-fs-process/sloppy.json +9 -0
  195. package/examples/program-fs-process/src/main.ts +27 -0
  196. package/examples/program-hello/README.md +32 -0
  197. package/examples/program-hello/main.ts +8 -0
  198. package/examples/program-hello/message.ts +1 -0
  199. package/examples/program-hello/sloppy.json +5 -0
  200. package/examples/rate-limit-auth/README.md +3 -0
  201. package/examples/rate-limit-auth/app.js +14 -0
  202. package/examples/rate-limit-basic/README.md +3 -0
  203. package/examples/rate-limit-basic/app.js +13 -0
  204. package/examples/rate-limit-redis/README.md +5 -0
  205. package/examples/rate-limit-redis/app.js +20 -0
  206. package/examples/rate-limit-testhost/README.md +4 -0
  207. package/examples/rate-limit-testhost/app.js +13 -0
  208. package/examples/rate-limit-websocket/README.md +3 -0
  209. package/examples/rate-limit-websocket/app.js +16 -0
  210. package/examples/realtime-auth/README.md +8 -0
  211. package/examples/realtime-auth/app.js +25 -0
  212. package/examples/realtime-auth/test.mjs +43 -0
  213. package/examples/realtime-chat/README.md +8 -0
  214. package/examples/realtime-chat/app.js +32 -0
  215. package/examples/realtime-chat/test.mjs +52 -0
  216. package/examples/realtime-dashboard/README.md +20 -0
  217. package/examples/realtime-dashboard/app.js +37 -0
  218. package/examples/realtime-presence/README.md +8 -0
  219. package/examples/realtime-presence/app.js +32 -0
  220. package/examples/realtime-presence/test.mjs +50 -0
  221. package/examples/realtime-testhost/README.md +8 -0
  222. package/examples/realtime-testhost/test.mjs +31 -0
  223. package/examples/redis-basic/README.md +17 -0
  224. package/examples/redis-basic/app.js +39 -0
  225. package/examples/redis-cache/README.md +14 -0
  226. package/examples/redis-cache/app.js +36 -0
  227. package/examples/redis-locks/README.md +13 -0
  228. package/examples/redis-locks/app.js +49 -0
  229. package/examples/request-context/README.md +32 -0
  230. package/examples/request-context/app.js +15 -0
  231. package/examples/sqlite-basic/README.md +52 -0
  232. package/examples/sqlite-basic/app.js +56 -0
  233. package/examples/sqlserver-basic/README.md +36 -0
  234. package/examples/sqlserver-basic/app.js +59 -0
  235. package/examples/static-files-basic/README.md +11 -0
  236. package/examples/static-files-basic/app.js +12 -0
  237. package/examples/static-files-basic/public/app.js +1 -0
  238. package/examples/static-files-basic/public/site.css +3 -0
  239. package/examples/static-files-package/README.md +12 -0
  240. package/examples/static-files-package/app.js +10 -0
  241. package/examples/static-files-package/public/index.html +2 -0
  242. package/examples/static-files-precompressed/README.md +12 -0
  243. package/examples/static-files-precompressed/app.js +11 -0
  244. package/examples/static-files-precompressed/public/app.js +1 -0
  245. package/examples/static-files-precompressed/public/app.js.br +0 -0
  246. package/examples/static-files-precompressed/public/app.js.gz +0 -0
  247. package/examples/static-files-spa/README.md +12 -0
  248. package/examples/static-files-spa/app.js +16 -0
  249. package/examples/static-files-spa/dist/assets/app.js +1 -0
  250. package/examples/static-files-spa/dist/index.html +4 -0
  251. package/examples/static-files-testhost/README.md +8 -0
  252. package/examples/static-files-testhost/app.js +13 -0
  253. package/examples/static-files-testhost/public/app.js +1 -0
  254. package/examples/static-files-testhost/public/app.js.gz +0 -0
  255. package/examples/static-files-testhost/test.mjs +38 -0
  256. package/examples/testhost-basic/README.md +26 -0
  257. package/examples/testhost-db/README.md +31 -0
  258. package/examples/testservices-postgres/README.md +68 -0
  259. package/examples/testservices-redis/README.md +71 -0
  260. package/examples/testservices-sqlserver/README.md +75 -0
  261. package/examples/time-basic/README.md +18 -0
  262. package/examples/time-basic/app.js +12 -0
  263. package/examples/time-deadline-cancellation/README.md +11 -0
  264. package/examples/time-deadline-cancellation/app.js +27 -0
  265. package/examples/time-fake-clock/README.md +14 -0
  266. package/examples/time-fake-clock/app.js +25 -0
  267. package/examples/time-interval-schedule/README.md +13 -0
  268. package/examples/time-interval-schedule/app.js +60 -0
  269. package/examples/users-api-sqlite/README.md +74 -0
  270. package/examples/users-api-sqlite/app.js +11 -0
  271. package/examples/users-api-sqlite/appsettings.Development.json +11 -0
  272. package/examples/users-api-sqlite/appsettings.json +11 -0
  273. package/examples/users-api-sqlite/modules/users.js +40 -0
  274. package/examples/users-api-sqlite/sloppy.json +5 -0
  275. package/examples/validation-errors/README.md +36 -0
  276. package/examples/validation-errors/app.js +14 -0
  277. package/examples/validation-errors/invalid-user.http +6 -0
  278. package/examples/validation-errors/sloppy.json +5 -0
  279. package/examples/web-dynamic-routes/README.md +17 -0
  280. package/examples/web-dynamic-routes/app.ts +27 -0
  281. package/examples/webhooks-basic/README.md +11 -0
  282. package/examples/webhooks-basic/app.js +48 -0
  283. package/examples/websocket-auth/README.md +8 -0
  284. package/examples/websocket-auth/app.js +16 -0
  285. package/examples/websocket-echo/README.md +9 -0
  286. package/examples/websocket-echo/app.js +36 -0
  287. package/examples/websocket-json-schema/README.md +5 -0
  288. package/examples/websocket-json-schema/app.js +25 -0
  289. package/examples/websocket-testhost/README.md +11 -0
  290. package/examples/websocket-testhost/test.mjs +49 -0
  291. package/examples/workers-background-service/README.md +7 -0
  292. package/examples/workers-background-service/app.js +16 -0
  293. package/examples/workers-js-isolate/README.md +8 -0
  294. package/examples/workers-js-isolate/app.js +19 -0
  295. package/examples/workers-js-isolate/workers/parser.ts +11 -0
  296. package/examples/workers-shutdown/README.md +6 -0
  297. package/examples/workers-shutdown/app.js +26 -0
  298. package/examples/workers-workerpool/README.md +6 -0
  299. package/examples/workers-workerpool/app.js +23 -0
  300. package/examples/workers-workqueue/README.md +8 -0
  301. package/examples/workers-workqueue/app.js +24 -0
  302. package/manifest.json +59 -0
  303. package/package.json +31 -0
  304. package/stdlib/sloppy/README.md +177 -0
  305. package/stdlib/sloppy/app.js +2142 -0
  306. package/stdlib/sloppy/auth.js +1813 -0
  307. package/stdlib/sloppy/bootstrap.manifest.json +83 -0
  308. package/stdlib/sloppy/cache.js +1542 -0
  309. package/stdlib/sloppy/codec.js +1153 -0
  310. package/stdlib/sloppy/config.js +61 -0
  311. package/stdlib/sloppy/crypto.js +312 -0
  312. package/stdlib/sloppy/data.js +2945 -0
  313. package/stdlib/sloppy/ffi.js +185 -0
  314. package/stdlib/sloppy/fs.js +795 -0
  315. package/stdlib/sloppy/health.js +603 -0
  316. package/stdlib/sloppy/http.js +1595 -0
  317. package/stdlib/sloppy/index.js +59 -0
  318. package/stdlib/sloppy/internal/bytes.js +31 -0
  319. package/stdlib/sloppy/internal/capabilities.js +155 -0
  320. package/stdlib/sloppy/internal/config.js +640 -0
  321. package/stdlib/sloppy/internal/disposable.js +31 -0
  322. package/stdlib/sloppy/internal/headers.js +63 -0
  323. package/stdlib/sloppy/internal/intrinsics.js +2 -0
  324. package/stdlib/sloppy/internal/json.js +20 -0
  325. package/stdlib/sloppy/internal/logging.js +278 -0
  326. package/stdlib/sloppy/internal/modules.js +405 -0
  327. package/stdlib/sloppy/internal/redaction.js +87 -0
  328. package/stdlib/sloppy/internal/routes.js +2279 -0
  329. package/stdlib/sloppy/internal/runtime-classic.js +19837 -0
  330. package/stdlib/sloppy/internal/services.js +690 -0
  331. package/stdlib/sloppy/internal/shared.js +32 -0
  332. package/stdlib/sloppy/internal/testhost-diagnostics.js +88 -0
  333. package/stdlib/sloppy/internal/testhost-http-server.js +238 -0
  334. package/stdlib/sloppy/internal/testhost-http.js +118 -0
  335. package/stdlib/sloppy/internal/testhost-loopback.js +50 -0
  336. package/stdlib/sloppy/internal/testservices-docker.js +154 -0
  337. package/stdlib/sloppy/internal/validation.js +117 -0
  338. package/stdlib/sloppy/metrics.js +427 -0
  339. package/stdlib/sloppy/net.js +5208 -0
  340. package/stdlib/sloppy/node/assert/strict.js +39 -0
  341. package/stdlib/sloppy/node/assert.js +228 -0
  342. package/stdlib/sloppy/node/buffer.js +247 -0
  343. package/stdlib/sloppy/node/console.js +33 -0
  344. package/stdlib/sloppy/node/constants.js +9 -0
  345. package/stdlib/sloppy/node/crypto.js +89 -0
  346. package/stdlib/sloppy/node/diagnostics_channel.js +41 -0
  347. package/stdlib/sloppy/node/events.js +113 -0
  348. package/stdlib/sloppy/node/fs/promises.js +27 -0
  349. package/stdlib/sloppy/node/fs.js +280 -0
  350. package/stdlib/sloppy/node/http.js +11 -0
  351. package/stdlib/sloppy/node/https.js +11 -0
  352. package/stdlib/sloppy/node/module.js +40 -0
  353. package/stdlib/sloppy/node/os.js +22 -0
  354. package/stdlib/sloppy/node/path.js +78 -0
  355. package/stdlib/sloppy/node/perf_hooks.js +12 -0
  356. package/stdlib/sloppy/node/process.js +129 -0
  357. package/stdlib/sloppy/node/querystring.js +21 -0
  358. package/stdlib/sloppy/node/stream/promises.js +3 -0
  359. package/stdlib/sloppy/node/stream.js +132 -0
  360. package/stdlib/sloppy/node/string_decoder.js +23 -0
  361. package/stdlib/sloppy/node/timers.js +26 -0
  362. package/stdlib/sloppy/node/tty.js +18 -0
  363. package/stdlib/sloppy/node/url.js +17 -0
  364. package/stdlib/sloppy/node/util.js +95 -0
  365. package/stdlib/sloppy/node/zlib.js +72 -0
  366. package/stdlib/sloppy/orm.js +2188 -0
  367. package/stdlib/sloppy/os.js +580 -0
  368. package/stdlib/sloppy/problem-details.js +29 -0
  369. package/stdlib/sloppy/providers/sqlite.js +26 -0
  370. package/stdlib/sloppy/rate-limit.js +856 -0
  371. package/stdlib/sloppy/realtime.js +1508 -0
  372. package/stdlib/sloppy/redis.js +1272 -0
  373. package/stdlib/sloppy/request-id.js +184 -0
  374. package/stdlib/sloppy/request-logging.js +101 -0
  375. package/stdlib/sloppy/results.js +933 -0
  376. package/stdlib/sloppy/schema.js +546 -0
  377. package/stdlib/sloppy/testing.js +4081 -0
  378. package/stdlib/sloppy/testservices.js +1041 -0
  379. package/stdlib/sloppy/time.js +894 -0
  380. package/stdlib/sloppy/webhooks.js +1330 -0
  381. package/stdlib/sloppy/workers.js +986 -0
  382. package/templates/api/README.md +82 -0
  383. package/templates/api/appsettings.Development.json +14 -0
  384. package/templates/api/appsettings.json +13 -0
  385. package/templates/api/data/.gitkeep +1 -0
  386. package/templates/api/gitignore +4 -0
  387. package/templates/api/migrations/0001_create_users.sql +1 -0
  388. package/templates/api/package.json +16 -0
  389. package/templates/api/public/hello.txt +1 -0
  390. package/templates/api/sloppy.json +14 -0
  391. package/templates/api/src/config.ts +1 -0
  392. package/templates/api/src/db/migrate.ts +14 -0
  393. package/templates/api/src/db/schema.ts +4 -0
  394. package/templates/api/src/db/usersRepository.ts +23 -0
  395. package/templates/api/src/main.ts +18 -0
  396. package/templates/api/src/models/user.ts +7 -0
  397. package/templates/api/src/routes/health.ts +20 -0
  398. package/templates/api/src/routes/users.ts +40 -0
  399. package/templates/api/src/services/usersService.ts +21 -0
  400. package/templates/api/tsconfig.json +15 -0
  401. package/templates/cli/README.md +16 -0
  402. package/templates/cli/gitignore +2 -0
  403. package/templates/cli/package.json +13 -0
  404. package/templates/cli/sloppy.json +6 -0
  405. package/templates/cli/src/commands/echo.ts +9 -0
  406. package/templates/cli/src/commands/inspect.ts +20 -0
  407. package/templates/cli/src/main.ts +50 -0
  408. package/templates/cli/tsconfig.json +15 -0
  409. package/templates/minimal-api/README.md +14 -0
  410. package/templates/minimal-api/gitignore +3 -0
  411. package/templates/minimal-api/package.json +14 -0
  412. package/templates/minimal-api/sloppy.json +5 -0
  413. package/templates/minimal-api/src/main.ts +9 -0
  414. package/templates/minimal-api/tsconfig.json +15 -0
  415. package/templates/node-compat/README.md +40 -0
  416. package/templates/node-compat/gitignore +2 -0
  417. package/templates/node-compat/package.json +11 -0
  418. package/templates/node-compat/sloppy.json +6 -0
  419. package/templates/node-compat/src/main.ts +40 -0
  420. package/templates/package-api/README.md +44 -0
  421. package/templates/package-api/fixtures/validator-lite/index.js +7 -0
  422. package/templates/package-api/fixtures/validator-lite/package.json +6 -0
  423. package/templates/package-api/gitignore +3 -0
  424. package/templates/package-api/package.json +17 -0
  425. package/templates/package-api/sloppy.json +5 -0
  426. package/templates/package-api/src/main.ts +10 -0
  427. package/templates/package-api/src/routes/health.ts +5 -0
  428. package/templates/package-api/src/routes/users.ts +12 -0
  429. package/templates/package-api/tsconfig.json +15 -0
  430. package/templates/program/README.md +12 -0
  431. package/templates/program/gitignore +1 -0
  432. package/templates/program/package.json +10 -0
  433. package/templates/program/sloppy.json +6 -0
  434. package/templates/program/src/main.ts +9 -0
@@ -0,0 +1,405 @@
1
+ import { isPlainObject } from "./shared.js";
2
+
3
+ const MODULE_STATE = new WeakMap();
4
+ const FUNCTION_MODULE_NAME = "__sloppyModuleName";
5
+ const MODULE_NAME_PATTERN = /^[a-z][a-z0-9.-]*$/u;
6
+
7
+ function validateModuleName(name) {
8
+ if (typeof name !== "string" || name.length === 0) {
9
+ throw new TypeError("Sloppy module name must be a non-empty string.");
10
+ }
11
+
12
+ if (!MODULE_NAME_PATTERN.test(name)) {
13
+ throw new TypeError(
14
+ "Sloppy module name must start with a lowercase letter and contain only lowercase letters, digits, dots, or hyphens.",
15
+ );
16
+ }
17
+ }
18
+
19
+ function validateModuleMetadataKey(key) {
20
+ if (typeof key !== "string" || key.length === 0) {
21
+ throw new TypeError("Sloppy module metadata key must be a non-empty string.");
22
+ }
23
+ }
24
+
25
+ function validateModulePhaseCallback(callback, phase) {
26
+ if (typeof callback !== "function") {
27
+ throw new TypeError(`Sloppy module ${phase} phase callback must be a function.`);
28
+ }
29
+
30
+ if (callback.constructor?.name === "AsyncFunction") {
31
+ throw new TypeError(`Sloppy module ${phase} phase callback must be synchronous.`);
32
+ }
33
+ }
34
+
35
+ function snapshotMetadataValue(value) {
36
+ if (Array.isArray(value)) {
37
+ return Object.freeze(value.map(snapshotMetadataValue));
38
+ }
39
+
40
+ if (isPlainObject(value)) {
41
+ const snapshot = {};
42
+ for (const [key, entry] of Object.entries(value)) {
43
+ snapshot[key] = snapshotMetadataValue(entry);
44
+ }
45
+ return Object.freeze(snapshot);
46
+ }
47
+
48
+ return value;
49
+ }
50
+
51
+ function snapshotModuleMetadata(metadata) {
52
+ const snapshot = {};
53
+ for (const [key, value] of Object.entries(metadata)) {
54
+ snapshot[key] = snapshotMetadataValue(value);
55
+ }
56
+ return Object.freeze(snapshot);
57
+ }
58
+
59
+ function getModuleState(module) {
60
+ return MODULE_STATE.get(module);
61
+ }
62
+
63
+ function requireModuleState(module) {
64
+ const state = getModuleState(module);
65
+
66
+ if (state === undefined) {
67
+ throw new TypeError(
68
+ "Sloppy builder.addModule expected a module created by Sloppy.module(name).",
69
+ );
70
+ }
71
+
72
+ return state;
73
+ }
74
+
75
+ function createModule(name) {
76
+ validateModuleName(name);
77
+
78
+ const state = {
79
+ name,
80
+ dependencies: [],
81
+ capabilityCallbacks: [],
82
+ serviceCallbacks: [],
83
+ routeCallbacks: [],
84
+ metadata: Object.create(null),
85
+ finalized: false,
86
+ };
87
+
88
+ function assertMutable() {
89
+ if (state.finalized) {
90
+ throw new Error(`Sloppy module '${state.name}' is frozen and cannot be modified.`);
91
+ }
92
+ }
93
+
94
+ const module = {
95
+ get name() {
96
+ return state.name;
97
+ },
98
+
99
+ get dependencies() {
100
+ return Object.freeze([...state.dependencies]);
101
+ },
102
+
103
+ dependsOn(...names) {
104
+ assertMutable();
105
+
106
+ for (const dependency of names) {
107
+ validateModuleName(dependency);
108
+
109
+ if (!state.dependencies.includes(dependency)) {
110
+ state.dependencies.push(dependency);
111
+ }
112
+ }
113
+
114
+ return module;
115
+ },
116
+
117
+ services(callback) {
118
+ assertMutable();
119
+ validateModulePhaseCallback(callback, "services");
120
+ state.serviceCallbacks.push(callback);
121
+ return module;
122
+ },
123
+
124
+ capabilities(callback) {
125
+ assertMutable();
126
+ validateModulePhaseCallback(callback, "capabilities");
127
+ state.capabilityCallbacks.push(callback);
128
+ return module;
129
+ },
130
+
131
+ routes(callback) {
132
+ assertMutable();
133
+ validateModulePhaseCallback(callback, "routes");
134
+ state.routeCallbacks.push(callback);
135
+ return module;
136
+ },
137
+
138
+ metadata(key, value) {
139
+ assertMutable();
140
+ validateModuleMetadataKey(key);
141
+ state.metadata[key] = snapshotMetadataValue(value);
142
+ return module;
143
+ },
144
+
145
+ __debug() {
146
+ return Object.freeze({
147
+ name: state.name,
148
+ dependencies: Object.freeze([...state.dependencies]),
149
+ capabilities: state.capabilityCallbacks.length,
150
+ services: state.serviceCallbacks.length,
151
+ routes: state.routeCallbacks.length,
152
+ metadata: snapshotModuleMetadata(state.metadata),
153
+ finalized: state.finalized,
154
+ });
155
+ },
156
+ };
157
+
158
+ const frozenModule = Object.freeze(module);
159
+ MODULE_STATE.set(frozenModule, state);
160
+ return frozenModule;
161
+ }
162
+
163
+ function assertRouteOnlyModule(state) {
164
+ if (
165
+ state.dependencies.length !== 0 ||
166
+ state.capabilityCallbacks.length !== 0 ||
167
+ state.serviceCallbacks.length !== 0
168
+ ) {
169
+ throw new Error(
170
+ "Sloppy app.useModule only accepts route-only modules; use builder.addModule for dependencies, capabilities, or services.",
171
+ );
172
+ }
173
+ }
174
+
175
+ function functionModuleName(moduleFactory) {
176
+ return moduleFactory[FUNCTION_MODULE_NAME] ?? moduleFactory.name;
177
+ }
178
+
179
+ function defineFunctionModuleName(target, name) {
180
+ Object.defineProperty(target, FUNCTION_MODULE_NAME, {
181
+ value: name,
182
+ enumerable: false,
183
+ });
184
+ }
185
+
186
+ function createModuleDependencyMissingError(moduleName, dependencyName) {
187
+ return new Error(`sloppy: module dependency missing
188
+
189
+ Module:
190
+ ${moduleName}
191
+
192
+ Missing dependency:
193
+ ${dependencyName}
194
+
195
+ Fix:
196
+ builder.addModule(/* module named '${dependencyName}' */) before build()`);
197
+ }
198
+
199
+ function createModuleCycleError(cycle) {
200
+ return new Error(`sloppy: module dependency cycle detected
201
+
202
+ Cycle:
203
+ ${cycle.join(" -> ")}
204
+
205
+ Fix:
206
+ Remove one dependsOn(...) edge from the cycle.`);
207
+ }
208
+
209
+ function createModulePhaseError(moduleName, phase, cause) {
210
+ const detail = cause instanceof Error ? cause.message : String(cause);
211
+ const error = new Error(`sloppy: module phase failed
212
+
213
+ Module:
214
+ ${moduleName}
215
+
216
+ Phase:
217
+ ${phase}
218
+
219
+ Reason:
220
+ ${detail}`);
221
+
222
+ error.cause = cause;
223
+ return error;
224
+ }
225
+
226
+ function resolveModuleOrder(moduleStates) {
227
+ const byName = new Map();
228
+
229
+ for (const state of moduleStates) {
230
+ byName.set(state.name, state);
231
+ }
232
+
233
+ for (const state of moduleStates) {
234
+ for (const dependency of state.dependencies) {
235
+ if (!byName.has(dependency)) {
236
+ throw createModuleDependencyMissingError(state.name, dependency);
237
+ }
238
+ }
239
+ }
240
+
241
+ const ordered = [];
242
+ const visitState = new Map();
243
+ const stack = [];
244
+
245
+ function visit(state) {
246
+ const currentVisitState = visitState.get(state.name);
247
+
248
+ if (currentVisitState === "done") {
249
+ return;
250
+ }
251
+
252
+ if (currentVisitState === "visiting") {
253
+ const start = stack.indexOf(state.name);
254
+ const cycle = [...stack.slice(start), state.name];
255
+ throw createModuleCycleError(cycle);
256
+ }
257
+
258
+ visitState.set(state.name, "visiting");
259
+ stack.push(state.name);
260
+
261
+ for (const dependency of state.dependencies) {
262
+ visit(byName.get(dependency));
263
+ }
264
+
265
+ stack.pop();
266
+ visitState.set(state.name, "done");
267
+ ordered.push(state);
268
+ }
269
+
270
+ for (const state of moduleStates) {
271
+ visit(state);
272
+ }
273
+
274
+ return ordered;
275
+ }
276
+
277
+ function runModulePhase(state, phase, callback, target) {
278
+ try {
279
+ const result = callback(target);
280
+
281
+ if (result !== null && typeof result === "object" && typeof result.then === "function") {
282
+ throw new TypeError(`Sloppy module ${phase} phase callback must be synchronous.`);
283
+ }
284
+
285
+ return result;
286
+ } catch (error) {
287
+ throw createModulePhaseError(state.name, phase, error);
288
+ }
289
+ }
290
+
291
+ function buildServiceContributions(serviceSnapshot) {
292
+ const byModule = new Map();
293
+
294
+ for (const [token, registration] of serviceSnapshot.entries()) {
295
+ if (registration.module === null) {
296
+ continue;
297
+ }
298
+
299
+ if (!byModule.has(registration.module)) {
300
+ byModule.set(registration.module, []);
301
+ }
302
+
303
+ byModule.get(registration.module).push(token);
304
+ }
305
+
306
+ for (const tokens of byModule.values()) {
307
+ tokens.sort();
308
+ }
309
+
310
+ return byModule;
311
+ }
312
+
313
+ function buildCapabilityContributions(capabilitySnapshot) {
314
+ const byModule = new Map();
315
+
316
+ for (const capability of capabilitySnapshot.values()) {
317
+ if (capability.module === null) {
318
+ continue;
319
+ }
320
+
321
+ if (!byModule.has(capability.module)) {
322
+ byModule.set(capability.module, []);
323
+ }
324
+
325
+ byModule.get(capability.module).push(capability.token);
326
+ }
327
+
328
+ for (const tokens of byModule.values()) {
329
+ tokens.sort();
330
+ }
331
+
332
+ return byModule;
333
+ }
334
+
335
+ function buildRouteContributions(routes) {
336
+ const byModule = new Map();
337
+
338
+ for (const route of routes) {
339
+ const moduleName = route.metadata.module;
340
+
341
+ if (moduleName === undefined) {
342
+ continue;
343
+ }
344
+
345
+ if (!byModule.has(moduleName)) {
346
+ byModule.set(moduleName, []);
347
+ }
348
+
349
+ byModule.get(moduleName).push(`${route.method} ${route.pattern}`);
350
+ }
351
+
352
+ return byModule;
353
+ }
354
+
355
+ function createModuleDebugEntries(orderedModules, capabilitySnapshot, serviceSnapshot, routes) {
356
+ const capabilitiesByModule = buildCapabilityContributions(capabilitySnapshot);
357
+ const servicesByModule = buildServiceContributions(serviceSnapshot);
358
+ const routesByModule = buildRouteContributions(routes);
359
+
360
+ return Object.freeze(orderedModules.map((state, index) => {
361
+ const capabilities = Object.freeze([...(capabilitiesByModule.get(state.name) ?? [])]);
362
+ const services = Object.freeze([...(servicesByModule.get(state.name) ?? [])]);
363
+ const routeContributions = Object.freeze([...(routesByModule.get(state.name) ?? [])]);
364
+ const contributes = [];
365
+
366
+ if (capabilities.length > 0) {
367
+ contributes.push("capabilities");
368
+ }
369
+
370
+ if (services.length > 0) {
371
+ contributes.push("services");
372
+ }
373
+
374
+ if (routeContributions.length > 0) {
375
+ contributes.push("routes");
376
+ }
377
+
378
+ if (Object.keys(state.metadata).length > 0) {
379
+ contributes.push("metadata");
380
+ }
381
+
382
+ return Object.freeze({
383
+ name: state.name,
384
+ dependencies: Object.freeze([...state.dependencies]),
385
+ order: index,
386
+ contributes: Object.freeze(contributes),
387
+ capabilities,
388
+ services,
389
+ routes: routeContributions,
390
+ metadata: snapshotModuleMetadata(state.metadata),
391
+ });
392
+ }));
393
+ }
394
+
395
+ export {
396
+ assertRouteOnlyModule,
397
+ createModule,
398
+ createModuleDebugEntries,
399
+ defineFunctionModuleName,
400
+ functionModuleName,
401
+ getModuleState,
402
+ requireModuleState,
403
+ resolveModuleOrder,
404
+ runModulePhase,
405
+ };
@@ -0,0 +1,87 @@
1
+ import { isPlainObject } from "./shared.js";
2
+
3
+ const SECRET_REDACTION = "[REDACTED]";
4
+ const SECRET_KEY_PATTERN = /password|passwd|pwd|secret|token|authorization|cookie|set[-_]?cookie|api[-_]?key|client[-_]?secret|private[-_]?key|passphrase|connection[-_]?string/iu;
5
+ const SENSITIVE_HEADER_PATTERN = /^(authorization|cookie|set-cookie|x-api-key|api-key)$/iu;
6
+ const SENSITIVE_QUERY_PATTERN = /(token|secret|password|authorization|api[_-]?key)/iu;
7
+
8
+ function boundedText(value, max = 12000, placement = "tail") {
9
+ const text = String(value ?? "");
10
+ if (text.length <= max) {
11
+ return text;
12
+ }
13
+ return placement === "head" ? text.slice(0, max) : text.slice(text.length - max);
14
+ }
15
+
16
+ function redactTextSecrets(value, secrets, replacement = SECRET_REDACTION) {
17
+ let text = String(value ?? "");
18
+ for (const secret of secrets ?? []) {
19
+ if (typeof secret === "string" && secret.length > 0) {
20
+ text = text.replaceAll(secret, replacement);
21
+ }
22
+ }
23
+ return text;
24
+ }
25
+
26
+ function redactHeaders(headers = {}, replacement = SECRET_REDACTION) {
27
+ const output = {};
28
+ for (const [name, value] of Object.entries(headers)) {
29
+ output[name] = SENSITIVE_HEADER_PATTERN.test(name) ? replacement : value;
30
+ }
31
+ return Object.freeze(output);
32
+ }
33
+
34
+ function redactUrlTemplate(path, query = undefined, replacement = SECRET_REDACTION) {
35
+ if (query === undefined || query === null) {
36
+ return path;
37
+ }
38
+ const keys = Object.keys(query);
39
+ if (keys.length === 0) {
40
+ return path;
41
+ }
42
+ const rendered = keys
43
+ .sort()
44
+ .map((key) => `${encodeURIComponent(key)}=${SENSITIVE_QUERY_PATTERN.test(key) ? replacement : "{value}"}`)
45
+ .join("&");
46
+ return `${path}?${rendered}`;
47
+ }
48
+
49
+ function redactObject(value, options = undefined) {
50
+ const replacement = options?.replacement ?? SECRET_REDACTION;
51
+ const redactText = options?.redactText ?? ((text) => redactTextSecrets(text, options?.secrets, replacement));
52
+ const stringifyPrimitives = options?.stringifyPrimitives === true;
53
+
54
+ function visit(entry) {
55
+ if (entry === null || entry === undefined) {
56
+ return entry;
57
+ }
58
+ if (typeof entry === "string") {
59
+ return redactText(entry);
60
+ }
61
+ if (typeof entry === "number" || typeof entry === "boolean") {
62
+ return stringifyPrimitives ? redactText(entry) : entry;
63
+ }
64
+ if (Array.isArray(entry)) {
65
+ return Object.freeze(entry.map(visit));
66
+ }
67
+ if (isPlainObject(entry)) {
68
+ const safe = {};
69
+ for (const [key, nested] of Object.entries(entry)) {
70
+ safe[key] = SECRET_KEY_PATTERN.test(key) ? replacement : visit(nested);
71
+ }
72
+ return Object.freeze(safe);
73
+ }
74
+ return redactText(entry);
75
+ }
76
+
77
+ return visit(value);
78
+ }
79
+
80
+ export {
81
+ SECRET_REDACTION,
82
+ boundedText,
83
+ redactHeaders,
84
+ redactObject,
85
+ redactTextSecrets,
86
+ redactUrlTemplate,
87
+ };