semola 0.5.0 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (273) hide show
  1. package/README.md +75 -20
  2. package/dist/api/core/index.cjs +206 -0
  3. package/dist/api/core/index.d.cts +21 -0
  4. package/dist/api/core/index.d.cts.map +1 -0
  5. package/dist/api/core/index.d.mts +21 -0
  6. package/dist/api/core/index.d.mts.map +1 -0
  7. package/dist/api/core/index.mjs +208 -0
  8. package/dist/api/core/index.mjs.map +1 -0
  9. package/dist/api/core/types.d.cts +107 -0
  10. package/dist/api/core/types.d.cts.map +1 -0
  11. package/dist/api/core/types.d.mts +107 -0
  12. package/dist/api/core/types.d.mts.map +1 -0
  13. package/dist/api/middleware/index.cjs +8 -0
  14. package/dist/api/middleware/index.d.cts +11 -0
  15. package/dist/api/middleware/index.d.cts.map +1 -0
  16. package/dist/api/middleware/index.d.mts +11 -0
  17. package/dist/api/middleware/index.d.mts.map +1 -0
  18. package/dist/api/middleware/index.mjs +10 -0
  19. package/dist/api/middleware/index.mjs.map +1 -0
  20. package/dist/api/middleware/types.d.cts +16 -0
  21. package/dist/api/middleware/types.d.cts.map +1 -0
  22. package/dist/api/middleware/types.d.mts +16 -0
  23. package/dist/api/middleware/types.d.mts.map +1 -0
  24. package/dist/api/openapi/index.cjs +254 -0
  25. package/dist/api/openapi/index.mjs +256 -0
  26. package/dist/api/openapi/index.mjs.map +1 -0
  27. package/dist/api/openapi/types.d.cts +60 -0
  28. package/dist/api/openapi/types.d.cts.map +1 -0
  29. package/dist/api/openapi/types.d.mts +60 -0
  30. package/dist/api/openapi/types.d.mts.map +1 -0
  31. package/dist/api/validation/index.cjs +64 -0
  32. package/dist/api/validation/index.mjs +61 -0
  33. package/dist/api/validation/index.mjs.map +1 -0
  34. package/dist/cache/types.d.cts +17 -0
  35. package/dist/cache/types.d.cts.map +1 -0
  36. package/dist/cache/types.d.mts +17 -0
  37. package/dist/cache/types.d.mts.map +1 -0
  38. package/dist/cron/scanner.cjs +237 -0
  39. package/dist/cron/scanner.mjs +238 -0
  40. package/dist/cron/scanner.mjs.map +1 -0
  41. package/dist/cron/types.d.cts +11 -0
  42. package/dist/cron/types.d.cts.map +1 -0
  43. package/dist/cron/types.d.mts +11 -0
  44. package/dist/cron/types.d.mts.map +1 -0
  45. package/dist/errors/types.d.cts +5 -0
  46. package/dist/errors/types.d.cts.map +1 -0
  47. package/dist/errors/types.d.mts +5 -0
  48. package/dist/errors/types.d.mts.map +1 -0
  49. package/dist/i18n/types.d.cts +13 -0
  50. package/dist/i18n/types.d.cts.map +1 -0
  51. package/dist/i18n/types.d.mts +13 -0
  52. package/dist/i18n/types.d.mts.map +1 -0
  53. package/dist/lib/api/index.cjs +5 -0
  54. package/dist/lib/api/index.d.cts +5 -0
  55. package/dist/lib/api/index.d.mts +5 -0
  56. package/dist/lib/api/index.mjs +3 -0
  57. package/dist/lib/cache/index.cjs +74 -0
  58. package/dist/lib/cache/index.d.cts +36 -0
  59. package/dist/lib/cache/index.d.cts.map +1 -0
  60. package/dist/lib/cache/index.d.mts +36 -0
  61. package/dist/lib/cache/index.d.mts.map +1 -0
  62. package/dist/lib/cache/index.mjs +75 -0
  63. package/dist/lib/cache/index.mjs.map +1 -0
  64. package/dist/lib/cron/index.cjs +276 -0
  65. package/dist/lib/cron/index.d.cts +39 -0
  66. package/dist/lib/cron/index.d.cts.map +1 -0
  67. package/dist/lib/cron/index.d.mts +39 -0
  68. package/dist/lib/cron/index.d.mts.map +1 -0
  69. package/dist/lib/cron/index.mjs +277 -0
  70. package/dist/lib/cron/index.mjs.map +1 -0
  71. package/dist/lib/errors/index.cjs +30 -0
  72. package/dist/lib/errors/index.d.cts +13 -0
  73. package/dist/lib/errors/index.d.cts.map +1 -0
  74. package/dist/lib/errors/index.d.mts +13 -0
  75. package/dist/lib/errors/index.d.mts.map +1 -0
  76. package/dist/lib/errors/index.mjs +28 -0
  77. package/dist/lib/errors/index.mjs.map +1 -0
  78. package/dist/lib/i18n/index.cjs +37 -0
  79. package/dist/lib/i18n/index.d.cts +20 -0
  80. package/dist/lib/i18n/index.d.cts.map +1 -0
  81. package/dist/lib/i18n/index.d.mts +20 -0
  82. package/dist/lib/i18n/index.d.mts.map +1 -0
  83. package/dist/lib/i18n/index.mjs +38 -0
  84. package/dist/lib/i18n/index.mjs.map +1 -0
  85. package/dist/lib/policy/index.cjs +99 -0
  86. package/dist/lib/policy/index.d.cts +21 -0
  87. package/dist/lib/policy/index.d.cts.map +1 -0
  88. package/dist/lib/policy/index.d.mts +21 -0
  89. package/dist/lib/policy/index.d.mts.map +1 -0
  90. package/dist/lib/policy/index.mjs +81 -0
  91. package/dist/lib/policy/index.mjs.map +1 -0
  92. package/dist/lib/prompts/index.cjs +409 -0
  93. package/dist/lib/prompts/index.d.cts +31 -0
  94. package/dist/lib/prompts/index.d.cts.map +1 -0
  95. package/dist/lib/prompts/index.d.mts +31 -0
  96. package/dist/lib/prompts/index.d.mts.map +1 -0
  97. package/dist/lib/prompts/index.mjs +405 -0
  98. package/dist/lib/prompts/index.mjs.map +1 -0
  99. package/dist/lib/pubsub/index.cjs +48 -0
  100. package/dist/lib/pubsub/index.d.cts +27 -0
  101. package/dist/lib/pubsub/index.d.cts.map +1 -0
  102. package/dist/lib/pubsub/index.d.mts +27 -0
  103. package/dist/lib/pubsub/index.d.mts.map +1 -0
  104. package/dist/lib/pubsub/index.mjs +49 -0
  105. package/dist/lib/pubsub/index.mjs.map +1 -0
  106. package/dist/lib/queue/index.cjs +182 -0
  107. package/dist/lib/queue/index.d.cts +32 -0
  108. package/dist/lib/queue/index.d.cts.map +1 -0
  109. package/dist/lib/queue/index.d.mts +32 -0
  110. package/dist/lib/queue/index.d.mts.map +1 -0
  111. package/dist/lib/queue/index.mjs +183 -0
  112. package/dist/lib/queue/index.mjs.map +1 -0
  113. package/dist/node_modules/@standard-schema/spec/dist/index.d.cts +80 -0
  114. package/dist/node_modules/@standard-schema/spec/dist/index.d.cts.map +1 -0
  115. package/dist/node_modules/@standard-schema/spec/dist/index.d.mts +80 -0
  116. package/dist/node_modules/@standard-schema/spec/dist/index.d.mts.map +1 -0
  117. package/dist/policy/helpers.cjs +206 -0
  118. package/dist/policy/helpers.d.cts +50 -0
  119. package/dist/policy/helpers.d.cts.map +1 -0
  120. package/dist/policy/helpers.d.mts +50 -0
  121. package/dist/policy/helpers.d.mts.map +1 -0
  122. package/dist/policy/helpers.mjs +190 -0
  123. package/dist/policy/helpers.mjs.map +1 -0
  124. package/dist/policy/types.d.cts +16 -0
  125. package/dist/policy/types.d.cts.map +1 -0
  126. package/dist/policy/types.d.mts +16 -0
  127. package/dist/policy/types.d.mts.map +1 -0
  128. package/dist/prompts/core/keys.cjs +165 -0
  129. package/dist/prompts/core/keys.mjs +167 -0
  130. package/dist/prompts/core/keys.mjs.map +1 -0
  131. package/dist/prompts/core/runtime.cjs +104 -0
  132. package/dist/prompts/core/runtime.mjs +106 -0
  133. package/dist/prompts/core/runtime.mjs.map +1 -0
  134. package/dist/prompts/core/session.cjs +98 -0
  135. package/dist/prompts/core/session.mjs +100 -0
  136. package/dist/prompts/core/session.mjs.map +1 -0
  137. package/dist/prompts/core/types.d.cts +21 -0
  138. package/dist/prompts/core/types.d.cts.map +1 -0
  139. package/dist/prompts/core/types.d.mts +21 -0
  140. package/dist/prompts/core/types.d.mts.map +1 -0
  141. package/dist/prompts/types.d.cts +52 -0
  142. package/dist/prompts/types.d.cts.map +1 -0
  143. package/dist/prompts/types.d.mts +52 -0
  144. package/dist/prompts/types.d.mts.map +1 -0
  145. package/dist/pubsub/types.d.cts +10 -0
  146. package/dist/pubsub/types.d.cts.map +1 -0
  147. package/dist/pubsub/types.d.mts +10 -0
  148. package/dist/pubsub/types.d.mts.map +1 -0
  149. package/dist/queue/types.d.cts +47 -0
  150. package/dist/queue/types.d.cts.map +1 -0
  151. package/dist/queue/types.d.mts +47 -0
  152. package/dist/queue/types.d.mts.map +1 -0
  153. package/package.json +86 -16
  154. package/dist/lib/api/core/index.d.ts +0 -15
  155. package/dist/lib/api/core/index.d.ts.map +0 -1
  156. package/dist/lib/api/core/index.js +0 -166
  157. package/dist/lib/api/core/index.js.map +0 -1
  158. package/dist/lib/api/core/index.test.d.ts +0 -2
  159. package/dist/lib/api/core/index.test.d.ts.map +0 -1
  160. package/dist/lib/api/core/index.test.js +0 -219
  161. package/dist/lib/api/core/index.test.js.map +0 -1
  162. package/dist/lib/api/core/types.d.ts +0 -102
  163. package/dist/lib/api/core/types.d.ts.map +0 -1
  164. package/dist/lib/api/core/types.js +0 -2
  165. package/dist/lib/api/core/types.js.map +0 -1
  166. package/dist/lib/api/index.d.ts +0 -5
  167. package/dist/lib/api/index.d.ts.map +0 -1
  168. package/dist/lib/api/index.js +0 -3
  169. package/dist/lib/api/index.js.map +0 -1
  170. package/dist/lib/api/middleware/index.d.ts +0 -7
  171. package/dist/lib/api/middleware/index.d.ts.map +0 -1
  172. package/dist/lib/api/middleware/index.js +0 -7
  173. package/dist/lib/api/middleware/index.js.map +0 -1
  174. package/dist/lib/api/middleware/index.test.d.ts +0 -2
  175. package/dist/lib/api/middleware/index.test.d.ts.map +0 -1
  176. package/dist/lib/api/middleware/index.test.js +0 -67
  177. package/dist/lib/api/middleware/index.test.js.map +0 -1
  178. package/dist/lib/api/middleware/types.d.ts +0 -12
  179. package/dist/lib/api/middleware/types.d.ts.map +0 -1
  180. package/dist/lib/api/middleware/types.js +0 -2
  181. package/dist/lib/api/middleware/types.js.map +0 -1
  182. package/dist/lib/api/openapi/index.d.ts +0 -31
  183. package/dist/lib/api/openapi/index.d.ts.map +0 -1
  184. package/dist/lib/api/openapi/index.js +0 -328
  185. package/dist/lib/api/openapi/index.js.map +0 -1
  186. package/dist/lib/api/openapi/index.test.d.ts +0 -2
  187. package/dist/lib/api/openapi/index.test.d.ts.map +0 -1
  188. package/dist/lib/api/openapi/index.test.js +0 -359
  189. package/dist/lib/api/openapi/index.test.js.map +0 -1
  190. package/dist/lib/api/openapi/types.d.ts +0 -57
  191. package/dist/lib/api/openapi/types.d.ts.map +0 -1
  192. package/dist/lib/api/openapi/types.js +0 -5
  193. package/dist/lib/api/openapi/types.js.map +0 -1
  194. package/dist/lib/api/validation/index.d.ts +0 -33
  195. package/dist/lib/api/validation/index.d.ts.map +0 -1
  196. package/dist/lib/api/validation/index.js +0 -81
  197. package/dist/lib/api/validation/index.js.map +0 -1
  198. package/dist/lib/api/validation/index.test.d.ts +0 -2
  199. package/dist/lib/api/validation/index.test.d.ts.map +0 -1
  200. package/dist/lib/api/validation/index.test.js +0 -135
  201. package/dist/lib/api/validation/index.test.js.map +0 -1
  202. package/dist/lib/cache/index.d.ts +0 -25
  203. package/dist/lib/cache/index.d.ts.map +0 -1
  204. package/dist/lib/cache/index.js +0 -62
  205. package/dist/lib/cache/index.js.map +0 -1
  206. package/dist/lib/cache/index.test.d.ts +0 -2
  207. package/dist/lib/cache/index.test.d.ts.map +0 -1
  208. package/dist/lib/cache/index.test.js +0 -314
  209. package/dist/lib/cache/index.test.js.map +0 -1
  210. package/dist/lib/cache/types.d.ts +0 -5
  211. package/dist/lib/cache/types.d.ts.map +0 -1
  212. package/dist/lib/cache/types.js +0 -2
  213. package/dist/lib/cache/types.js.map +0 -1
  214. package/dist/lib/errors/index.d.ts +0 -9
  215. package/dist/lib/errors/index.d.ts.map +0 -1
  216. package/dist/lib/errors/index.js +0 -25
  217. package/dist/lib/errors/index.js.map +0 -1
  218. package/dist/lib/errors/index.test.d.ts +0 -2
  219. package/dist/lib/errors/index.test.d.ts.map +0 -1
  220. package/dist/lib/errors/index.test.js +0 -197
  221. package/dist/lib/errors/index.test.js.map +0 -1
  222. package/dist/lib/errors/types.d.ts +0 -2
  223. package/dist/lib/errors/types.d.ts.map +0 -1
  224. package/dist/lib/errors/types.js +0 -2
  225. package/dist/lib/errors/types.js.map +0 -1
  226. package/dist/lib/i18n/index.d.ts +0 -18
  227. package/dist/lib/i18n/index.d.ts.map +0 -1
  228. package/dist/lib/i18n/index.js +0 -38
  229. package/dist/lib/i18n/index.js.map +0 -1
  230. package/dist/lib/i18n/index.test.d.ts +0 -2
  231. package/dist/lib/i18n/index.test.d.ts.map +0 -1
  232. package/dist/lib/i18n/index.test.js +0 -402
  233. package/dist/lib/i18n/index.test.js.map +0 -1
  234. package/dist/lib/i18n/types.d.ts +0 -15
  235. package/dist/lib/i18n/types.d.ts.map +0 -1
  236. package/dist/lib/i18n/types.js +0 -2
  237. package/dist/lib/i18n/types.js.map +0 -1
  238. package/dist/lib/policy/index.d.ts +0 -9
  239. package/dist/lib/policy/index.d.ts.map +0 -1
  240. package/dist/lib/policy/index.js +0 -51
  241. package/dist/lib/policy/index.js.map +0 -1
  242. package/dist/lib/policy/index.test.d.ts +0 -2
  243. package/dist/lib/policy/index.test.d.ts.map +0 -1
  244. package/dist/lib/policy/index.test.js +0 -328
  245. package/dist/lib/policy/index.test.js.map +0 -1
  246. package/dist/lib/policy/types.d.ts +0 -27
  247. package/dist/lib/policy/types.d.ts.map +0 -1
  248. package/dist/lib/policy/types.js +0 -2
  249. package/dist/lib/policy/types.js.map +0 -1
  250. package/dist/lib/pubsub/index.d.ts +0 -23
  251. package/dist/lib/pubsub/index.d.ts.map +0 -1
  252. package/dist/lib/pubsub/index.js +0 -55
  253. package/dist/lib/pubsub/index.js.map +0 -1
  254. package/dist/lib/pubsub/index.test.d.ts +0 -2
  255. package/dist/lib/pubsub/index.test.d.ts.map +0 -1
  256. package/dist/lib/pubsub/index.test.js +0 -550
  257. package/dist/lib/pubsub/index.test.js.map +0 -1
  258. package/dist/lib/pubsub/types.d.ts +0 -7
  259. package/dist/lib/pubsub/types.d.ts.map +0 -1
  260. package/dist/lib/pubsub/types.js +0 -2
  261. package/dist/lib/pubsub/types.js.map +0 -1
  262. package/dist/lib/queue/index.d.ts +0 -28
  263. package/dist/lib/queue/index.d.ts.map +0 -1
  264. package/dist/lib/queue/index.js +0 -211
  265. package/dist/lib/queue/index.js.map +0 -1
  266. package/dist/lib/queue/index.test.d.ts +0 -2
  267. package/dist/lib/queue/index.test.d.ts.map +0 -1
  268. package/dist/lib/queue/index.test.js +0 -740
  269. package/dist/lib/queue/index.test.js.map +0 -1
  270. package/dist/lib/queue/types.d.ts +0 -52
  271. package/dist/lib/queue/types.d.ts.map +0 -1
  272. package/dist/lib/queue/types.js +0 -2
  273. package/dist/lib/queue/types.js.map +0 -1
@@ -1,328 +0,0 @@
1
- import { describe, expect, test } from "bun:test";
2
- import { Policy } from "./index.js";
3
- describe("Policy", () => {
4
- test("should allow access when conditions match", () => {
5
- const policy = new Policy();
6
- policy.allow({
7
- action: "read",
8
- entity: "Post",
9
- conditions: {
10
- status: "published",
11
- },
12
- });
13
- const post = {
14
- id: 1,
15
- title: "Sample Post",
16
- authorId: 1,
17
- status: "published",
18
- };
19
- expect(policy.can("read", "Post", post)).toMatchObject({
20
- allowed: true,
21
- });
22
- });
23
- test("should deny access when conditions do not match", () => {
24
- const policy = new Policy();
25
- policy.allow({
26
- action: "read",
27
- entity: "Post",
28
- conditions: {
29
- status: "published",
30
- },
31
- });
32
- const post = {
33
- id: 1,
34
- title: "Draft Post",
35
- authorId: 1,
36
- status: "draft",
37
- };
38
- expect(policy.can("read", "Post", post)).toMatchObject({
39
- allowed: false,
40
- });
41
- });
42
- test("should forbid access when forbid conditions match", () => {
43
- const policy = new Policy();
44
- policy.forbid({
45
- action: "update",
46
- entity: "Post",
47
- conditions: {
48
- status: "published",
49
- },
50
- });
51
- const post = {
52
- id: 1,
53
- title: "Published Post",
54
- authorId: 1,
55
- status: "published",
56
- };
57
- expect(policy.can("update", "Post", post)).toMatchObject({
58
- allowed: false,
59
- });
60
- });
61
- test("should allow access when forbid conditions do not match", () => {
62
- const policy = new Policy();
63
- policy.allow({
64
- action: "update",
65
- entity: "Post",
66
- });
67
- policy.forbid({
68
- action: "update",
69
- entity: "Post",
70
- conditions: {
71
- status: "published",
72
- },
73
- });
74
- const post = {
75
- id: 1,
76
- title: "Draft Post",
77
- authorId: 1,
78
- status: "draft",
79
- };
80
- expect(policy.can("update", "Post", post)).toMatchObject({
81
- allowed: true,
82
- });
83
- });
84
- test("should work with multiple conditions", () => {
85
- const policy = new Policy();
86
- policy.allow({
87
- action: "delete",
88
- entity: "Post",
89
- conditions: {
90
- authorId: 1,
91
- status: "draft",
92
- },
93
- });
94
- const matchingPost = {
95
- id: 1,
96
- title: "My Draft",
97
- authorId: 1,
98
- status: "draft",
99
- };
100
- const nonMatchingPost1 = {
101
- id: 2,
102
- title: "Someone else's draft",
103
- authorId: 2,
104
- status: "draft",
105
- };
106
- const nonMatchingPost2 = {
107
- id: 3,
108
- title: "My published post",
109
- authorId: 1,
110
- status: "published",
111
- };
112
- expect(policy.can("delete", "Post", matchingPost)).toMatchObject({
113
- allowed: true,
114
- });
115
- expect(policy.can("delete", "Post", nonMatchingPost1)).toMatchObject({
116
- allowed: false,
117
- });
118
- expect(policy.can("delete", "Post", nonMatchingPost2)).toMatchObject({
119
- allowed: false,
120
- });
121
- });
122
- test("should allow access when no conditions are specified", () => {
123
- const policy = new Policy();
124
- policy.allow({
125
- action: "read",
126
- entity: "Post",
127
- });
128
- const post = {
129
- id: 1,
130
- title: "Any Post",
131
- authorId: 1,
132
- status: "published",
133
- };
134
- expect(policy.can("read", "Post", post)).toMatchObject({
135
- allowed: true,
136
- });
137
- });
138
- test("should deny access when no matching rule exists", () => {
139
- const policy = new Policy();
140
- policy.allow({
141
- action: "read",
142
- entity: "Post",
143
- });
144
- expect(policy.can("delete", "Post")).toMatchObject({ allowed: false });
145
- });
146
- test("should handle the example from requirements", () => {
147
- const post = {
148
- id: 1,
149
- title: "Sample Post Title",
150
- authorId: 1,
151
- status: "published",
152
- };
153
- const policy = new Policy();
154
- policy.allow({
155
- action: "read",
156
- entity: "Post",
157
- conditions: {
158
- status: "published",
159
- },
160
- });
161
- policy.forbid({
162
- action: "update",
163
- entity: "Post",
164
- conditions: {
165
- status: "published",
166
- },
167
- });
168
- expect(policy.can("read", "Post", post)).toMatchObject({
169
- allowed: true,
170
- });
171
- expect(policy.can("update", "Post", post)).toMatchObject({
172
- allowed: false,
173
- });
174
- });
175
- test("should handle multiple rules with different actions", () => {
176
- const policy = new Policy();
177
- policy.allow({
178
- action: "read",
179
- entity: "Post",
180
- conditions: {
181
- status: "published",
182
- },
183
- });
184
- policy.allow({
185
- action: "update",
186
- entity: "Post",
187
- conditions: {
188
- status: "draft",
189
- },
190
- });
191
- const publishedPost = {
192
- id: 1,
193
- title: "Published",
194
- authorId: 1,
195
- status: "published",
196
- };
197
- const draftPost = {
198
- id: 2,
199
- title: "Draft",
200
- authorId: 1,
201
- status: "draft",
202
- };
203
- expect(policy.can("read", "Post", publishedPost)).toMatchObject({
204
- allowed: true,
205
- });
206
- expect(policy.can("read", "Post", draftPost)).toMatchObject({
207
- allowed: false,
208
- });
209
- expect(policy.can("update", "Post", publishedPost)).toMatchObject({
210
- allowed: false,
211
- });
212
- expect(policy.can("update", "Post", draftPost)).toMatchObject({
213
- allowed: true,
214
- });
215
- });
216
- test("should handle different entities", () => {
217
- const policy = new Policy();
218
- policy.allow({
219
- action: "read",
220
- entity: "Post",
221
- });
222
- policy.allow({
223
- action: "read",
224
- entity: "Comment",
225
- });
226
- expect(policy.can("read", "Post")).toMatchObject({ allowed: true });
227
- expect(policy.can("read", "Comment")).toMatchObject({ allowed: true });
228
- expect(policy.can("read", "User")).toMatchObject({ allowed: false });
229
- });
230
- test("should return reason when forbid rule matches", () => {
231
- const policy = new Policy();
232
- policy.forbid({
233
- action: "delete",
234
- entity: "Post",
235
- reason: "You cannot delete published posts",
236
- conditions: {
237
- status: "published",
238
- },
239
- });
240
- const post = {
241
- id: 1,
242
- title: "Published Post",
243
- authorId: 1,
244
- status: "published",
245
- };
246
- const result = policy.can("delete", "Post", post);
247
- expect(result).toMatchObject({
248
- allowed: false,
249
- reason: "You cannot delete published posts",
250
- });
251
- });
252
- test("should return reason when allow rule matches", () => {
253
- const policy = new Policy();
254
- policy.allow({
255
- action: "read",
256
- entity: "Post",
257
- reason: "Public posts are visible to everyone",
258
- conditions: {
259
- status: "published",
260
- },
261
- });
262
- const post = {
263
- id: 1,
264
- title: "Published Post",
265
- authorId: 1,
266
- status: "published",
267
- };
268
- const result = policy.can("read", "Post", post);
269
- expect(result).toMatchObject({
270
- allowed: true,
271
- reason: "Public posts are visible to everyone",
272
- });
273
- });
274
- test("should return undefined reason when no reason is provided", () => {
275
- const policy = new Policy();
276
- policy.allow({
277
- action: "read",
278
- entity: "Post",
279
- conditions: {
280
- status: "published",
281
- },
282
- });
283
- const post = {
284
- id: 1,
285
- title: "Published Post",
286
- authorId: 1,
287
- status: "published",
288
- };
289
- const result = policy.can("read", "Post", post);
290
- expect(result).toMatchObject({ allowed: true });
291
- expect(result.reason).toBeUndefined();
292
- });
293
- test("should return undefined reason when no rule matches", () => {
294
- const policy = new Policy();
295
- policy.allow({
296
- action: "read",
297
- entity: "Post",
298
- reason: "Some reason",
299
- });
300
- const result = policy.can("delete", "Post");
301
- expect(result).toMatchObject({ allowed: false });
302
- expect(result.reason).toBeUndefined();
303
- });
304
- test("should handle reason with multiple conditions", () => {
305
- const policy = new Policy();
306
- policy.forbid({
307
- action: "update",
308
- entity: "Post",
309
- reason: "Admins cannot update their own published posts",
310
- conditions: {
311
- authorId: 1,
312
- status: "published",
313
- },
314
- });
315
- const post = {
316
- id: 1,
317
- title: "Admin's Post",
318
- authorId: 1,
319
- status: "published",
320
- };
321
- const result = policy.can("update", "Post", post);
322
- expect(result).toMatchObject({
323
- allowed: false,
324
- reason: "Admins cannot update their own published posts",
325
- });
326
- });
327
- });
328
- //# sourceMappingURL=index.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../src/lib/policy/index.test.ts"],"names":[],"mappings":"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"}
@@ -1,27 +0,0 @@
1
- export type Action = "read" | "create" | "update" | "delete" | (string & {});
2
- export type Entity = string;
3
- export type Conditions<T = any> = Partial<T>;
4
- export type Rule<T = any> = {
5
- action: Action;
6
- entity: Entity;
7
- conditions?: Conditions<T>;
8
- inverted: boolean;
9
- reason?: string;
10
- };
11
- export type AllowParams<T = any> = {
12
- action: Action;
13
- entity: Entity;
14
- conditions?: Conditions<T>;
15
- reason?: string;
16
- };
17
- export type ForbidParams<T = any> = {
18
- action: Action;
19
- entity: Entity;
20
- conditions?: Conditions<T>;
21
- reason?: string;
22
- };
23
- export type CanResult = {
24
- allowed: boolean;
25
- reason?: string;
26
- };
27
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/policy/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAC7E,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC;AAE5B,MAAM,MAAM,UAAU,CAAC,CAAC,GAAG,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;AAE7C,MAAM,MAAM,IAAI,CAAC,CAAC,GAAG,GAAG,IAAI;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IAC3B,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,WAAW,CAAC,CAAC,GAAG,GAAG,IAAI;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,YAAY,CAAC,CAAC,GAAG,GAAG,IAAI;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/lib/policy/types.ts"],"names":[],"mappings":""}
@@ -1,23 +0,0 @@
1
- import type { MessageHandler, PubSubOptions } from "./types.js";
2
- export declare class PubSub<T extends Record<string, unknown>> {
3
- private options;
4
- private isSubscribed;
5
- constructor(options: PubSubOptions);
6
- publish(message: T): Promise<readonly [null, number | null] | readonly [{
7
- readonly type: "SerializationError";
8
- readonly message: string;
9
- }, null] | readonly [{
10
- readonly type: "PublishError";
11
- readonly message: string;
12
- }, null]>;
13
- subscribe(handler: MessageHandler<T>): Promise<readonly [null, number | null] | readonly [{
14
- readonly type: "SubscribeError";
15
- readonly message: string;
16
- }, null]>;
17
- unsubscribe(): Promise<readonly [null, boolean] | readonly [{
18
- readonly type: "UnsubscribeError";
19
- readonly message: string;
20
- }, null]>;
21
- isActive(): boolean;
22
- }
23
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/pubsub/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhE,qBAAa,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACnD,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,YAAY,CAAS;gBAEV,OAAO,EAAE,aAAa;IAI5B,OAAO,CAAC,OAAO,EAAE,CAAC;;;;;;;IAuBlB,SAAS,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;;;;IAgCpC,WAAW;;;;IAuBjB,QAAQ;CAGhB"}
@@ -1,55 +0,0 @@
1
- import { err, mightThrow, mightThrowSync, ok } from "../errors/index.js";
2
- export class PubSub {
3
- options;
4
- isSubscribed = false;
5
- constructor(options) {
6
- this.options = options;
7
- }
8
- async publish(message) {
9
- const [stringifyError, stringified] = mightThrowSync(() => JSON.stringify(message));
10
- if (stringifyError || !stringified) {
11
- return err("SerializationError", "Unable to serialize message");
12
- }
13
- const [publishError, count] = await mightThrow(this.options.publisher.publish(this.options.channel, stringified));
14
- if (publishError) {
15
- return err("PublishError", `Unable to publish to ${this.options.channel}`);
16
- }
17
- return ok(count);
18
- }
19
- async subscribe(handler) {
20
- if (this.isActive()) {
21
- return err("SubscribeError", "Already subscribed");
22
- }
23
- this.isSubscribed = true;
24
- const wrappedHandler = async (message, channel) => {
25
- const [parseError, parsed] = mightThrowSync(() => JSON.parse(message));
26
- if (parseError)
27
- return;
28
- if (!parsed)
29
- return;
30
- await mightThrow(Promise.resolve(handler(parsed, channel)));
31
- };
32
- const [subscribeError, count] = await mightThrow(this.options.subscriber.subscribe(this.options.channel, wrappedHandler));
33
- if (subscribeError) {
34
- this.isSubscribed = false;
35
- return err("SubscribeError", `Unable to subscribe to ${this.options.channel}`);
36
- }
37
- return ok(count);
38
- }
39
- async unsubscribe() {
40
- if (!this.isActive()) {
41
- return err("UnsubscribeError", "Not subscribed");
42
- }
43
- this.isSubscribed = false;
44
- const [unsubscribeError] = await mightThrow(this.options.subscriber.unsubscribe(this.options.channel));
45
- if (unsubscribeError) {
46
- this.isSubscribed = true;
47
- return err("UnsubscribeError", `Unable to unsubscribe from ${this.options.channel}`);
48
- }
49
- return ok(true);
50
- }
51
- isActive() {
52
- return this.isSubscribed;
53
- }
54
- }
55
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/pubsub/index.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=index.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../../../src/lib/pubsub/index.test.ts"],"names":[],"mappings":""}