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,402 +0,0 @@
1
- import { describe, expect, test } from "bun:test";
2
- import { I18n } from "./index.js";
3
- describe("I18n", () => {
4
- describe("Constructor and locale management", () => {
5
- test("should initialize with default locale", () => {
6
- const i18n = new I18n({
7
- defaultLocale: "en",
8
- locales: {
9
- en: { greeting: "Hello" },
10
- es: { greeting: "Hola" },
11
- },
12
- });
13
- expect(i18n.getLocale()).toBe("en");
14
- });
15
- test("should set and get locale", () => {
16
- const i18n = new I18n({
17
- defaultLocale: "en",
18
- locales: {
19
- en: { greeting: "Hello" },
20
- es: { greeting: "Hola" },
21
- fr: { greeting: "Bonjour" },
22
- },
23
- });
24
- expect(i18n.getLocale()).toBe("en");
25
- i18n.setLocale("es");
26
- expect(i18n.getLocale()).toBe("es");
27
- i18n.setLocale("fr");
28
- expect(i18n.getLocale()).toBe("fr");
29
- });
30
- });
31
- describe("Basic translation", () => {
32
- test("should translate simple string", () => {
33
- const i18n = new I18n({
34
- defaultLocale: "en",
35
- locales: {
36
- en: { greeting: "Hello" },
37
- es: { greeting: "Hola" },
38
- },
39
- });
40
- expect(i18n.translate("greeting")).toBe("Hello");
41
- i18n.setLocale("es");
42
- expect(i18n.translate("greeting")).toBe("Hola");
43
- });
44
- test("should translate nested keys", () => {
45
- const i18n = new I18n({
46
- defaultLocale: "en",
47
- locales: {
48
- en: {
49
- messages: {
50
- welcome: "Welcome",
51
- goodbye: "Goodbye",
52
- },
53
- },
54
- es: {
55
- messages: {
56
- welcome: "Bienvenido",
57
- goodbye: "Adiós",
58
- },
59
- },
60
- },
61
- });
62
- expect(i18n.translate("messages.welcome")).toBe("Welcome");
63
- expect(i18n.translate("messages.goodbye")).toBe("Goodbye");
64
- i18n.setLocale("es");
65
- expect(i18n.translate("messages.welcome")).toBe("Bienvenido");
66
- expect(i18n.translate("messages.goodbye")).toBe("Adiós");
67
- });
68
- test("should translate deeply nested keys", () => {
69
- const i18n = new I18n({
70
- defaultLocale: "en",
71
- locales: {
72
- en: {
73
- app: {
74
- header: {
75
- title: "My Application",
76
- subtitle: "Welcome to our app",
77
- },
78
- },
79
- },
80
- },
81
- });
82
- expect(i18n.translate("app.header.title")).toBe("My Application");
83
- expect(i18n.translate("app.header.subtitle")).toBe("Welcome to our app");
84
- });
85
- test("should handle lists", () => {
86
- const i18n = new I18n({
87
- defaultLocale: "en",
88
- locales: {
89
- en: {
90
- greeting: "Hello",
91
- sports: ["football", "tennis"],
92
- },
93
- },
94
- });
95
- expect(i18n.translate("greeting")).toBe("Hello");
96
- expect(i18n.translate("sports.0")).toBe("football");
97
- expect(i18n.translate("sports.1")).toBe("tennis");
98
- });
99
- });
100
- describe("Fallback behavior", () => {
101
- test("should fallback to default locale when key not found in current locale", () => {
102
- const i18n = new I18n({
103
- defaultLocale: "en",
104
- locales: {
105
- en: {
106
- greeting: "Hello",
107
- farewell: "Goodbye",
108
- },
109
- es: {
110
- greeting: "Hola",
111
- // farewell is missing
112
- },
113
- },
114
- });
115
- i18n.setLocale("es");
116
- expect(i18n.translate("greeting")).toBe("Hola");
117
- expect(i18n.translate("farewell")).toBe("Goodbye"); // Falls back to English
118
- });
119
- test("should return key when translation not found in any locale", () => {
120
- const i18n = new I18n({
121
- defaultLocale: "en",
122
- locales: {
123
- en: { greeting: "Hello" },
124
- es: { greeting: "Hola" },
125
- },
126
- });
127
- // @ts-expect-error - Testing with non-existent keys to verify fallback behavior
128
- expect(i18n.translate("nonexistent")).toBe("nonexistent");
129
- // @ts-expect-error - Testing with non-existent keys to verify fallback behavior
130
- expect(i18n.translate("missing.key")).toBe("missing.key");
131
- });
132
- test("should fallback for nested keys", () => {
133
- const i18n = new I18n({
134
- defaultLocale: "en",
135
- locales: {
136
- en: {
137
- app: {
138
- title: "Application",
139
- description: "A great app",
140
- },
141
- },
142
- es: {
143
- app: {
144
- title: "Aplicación",
145
- // description is missing
146
- },
147
- },
148
- },
149
- });
150
- i18n.setLocale("es");
151
- expect(i18n.translate("app.title")).toBe("Aplicación");
152
- expect(i18n.translate("app.description")).toBe("A great app");
153
- });
154
- });
155
- describe("Parameter substitution", () => {
156
- test("should substitute single parameter", () => {
157
- const i18n = new I18n({
158
- defaultLocale: "en",
159
- locales: {
160
- en: {
161
- welcome: "Welcome, {name:string}!",
162
- },
163
- },
164
- });
165
- expect(i18n.translate("welcome", { name: "John" })).toBe("Welcome, John!");
166
- expect(i18n.translate("welcome", { name: "Alice" })).toBe("Welcome, Alice!");
167
- });
168
- test("should substitute multiple parameters", () => {
169
- const i18n = new I18n({
170
- defaultLocale: "en",
171
- locales: {
172
- en: {
173
- greeting: "Hello {name:string}, you have {count:number} messages",
174
- },
175
- },
176
- });
177
- expect(i18n.translate("greeting", { name: "Bob", count: 5 })).toBe("Hello Bob, you have 5 messages");
178
- });
179
- test("should handle substitutions inside lists", () => {
180
- const i18n = new I18n({
181
- defaultLocale: "en",
182
- locales: {
183
- en: {
184
- greeting: "Hello",
185
- sports: ["{first:string}", "{second:string}"],
186
- },
187
- },
188
- });
189
- expect(i18n.translate("greeting")).toBe("Hello");
190
- expect(i18n.translate("sports.0", { first: "football" })).toBe("football");
191
- expect(i18n.translate("sports.1", { second: "tennis" })).toBe("tennis");
192
- });
193
- test("should work with different parameter types", () => {
194
- const i18n = new I18n({
195
- defaultLocale: "en",
196
- locales: {
197
- en: {
198
- status: "Status: {active:boolean}, ID: {id:number}, Name: {name:string}",
199
- },
200
- },
201
- });
202
- expect(i18n.translate("status", {
203
- active: true,
204
- id: 123,
205
- name: "Test",
206
- })).toBe("Status: true, ID: 123, Name: Test");
207
- });
208
- test("should handle parameters in nested translations", () => {
209
- const i18n = new I18n({
210
- defaultLocale: "en",
211
- locales: {
212
- en: {
213
- messages: {
214
- notification: "You have {count:number} new notifications",
215
- },
216
- },
217
- },
218
- });
219
- expect(i18n.translate("messages.notification", { count: 3 })).toBe("You have 3 new notifications");
220
- });
221
- test("should return template as-is when no parameters provided for parameterized string", () => {
222
- const i18n = new I18n({
223
- defaultLocale: "en",
224
- locales: {
225
- en: {
226
- message: "Hello {name:string}",
227
- },
228
- },
229
- });
230
- // @ts-expect-error - TypeScript would catch this, but testing runtime behavior
231
- expect(i18n.translate("message")).toBe("Hello {name:string}");
232
- });
233
- test("should handle multiple occurrences of same parameter", () => {
234
- const i18n = new I18n({
235
- defaultLocale: "en",
236
- locales: {
237
- en: {
238
- repeat: "{name:string} said hello to {name:string}",
239
- },
240
- },
241
- });
242
- expect(i18n.translate("repeat", { name: "Alice" })).toBe("Alice said hello to Alice");
243
- });
244
- });
245
- describe("Complex scenarios", () => {
246
- test("should handle multiple locales with parameters", () => {
247
- const i18n = new I18n({
248
- defaultLocale: "en",
249
- locales: {
250
- en: {
251
- welcome: "Welcome back, {name:string}!",
252
- },
253
- es: {
254
- welcome: "Bienvenido de nuevo, {name:string}!",
255
- },
256
- fr: {
257
- welcome: "Bon retour, {name:string}!",
258
- },
259
- },
260
- });
261
- expect(i18n.translate("welcome", { name: "John" })).toBe("Welcome back, John!");
262
- i18n.setLocale("es");
263
- expect(i18n.translate("welcome", { name: "John" })).toBe("Bienvenido de nuevo, John!");
264
- i18n.setLocale("fr");
265
- expect(i18n.translate("welcome", { name: "John" })).toBe("Bon retour, John!");
266
- });
267
- test("should handle real-world app structure", () => {
268
- const i18n = new I18n({
269
- defaultLocale: "en",
270
- locales: {
271
- en: {
272
- common: {
273
- save: "Save",
274
- cancel: "Cancel",
275
- delete: "Delete",
276
- },
277
- auth: {
278
- login: "Login",
279
- logout: "Logout",
280
- welcome: "Welcome back, {username:string}!",
281
- },
282
- errors: {
283
- notFound: "Page not found",
284
- serverError: "Server error occurred",
285
- validation: "Validation failed for {field:string}",
286
- },
287
- },
288
- es: {
289
- common: {
290
- save: "Guardar",
291
- cancel: "Cancelar",
292
- delete: "Eliminar",
293
- },
294
- auth: {
295
- login: "Iniciar sesión",
296
- logout: "Cerrar sesión",
297
- welcome: "Bienvenido de nuevo, {username:string}!",
298
- },
299
- errors: {
300
- notFound: "Página no encontrada",
301
- serverError: "Error del servidor",
302
- validation: "Validación fallida para {field:string}",
303
- },
304
- },
305
- },
306
- });
307
- // English
308
- expect(i18n.translate("common.save")).toBe("Save");
309
- expect(i18n.translate("auth.login")).toBe("Login");
310
- expect(i18n.translate("auth.welcome", { username: "John" })).toBe("Welcome back, John!");
311
- expect(i18n.translate("errors.validation", { field: "email" })).toBe("Validation failed for email");
312
- // Spanish
313
- i18n.setLocale("es");
314
- expect(i18n.translate("common.save")).toBe("Guardar");
315
- expect(i18n.translate("auth.login")).toBe("Iniciar sesión");
316
- expect(i18n.translate("auth.welcome", { username: "Juan" })).toBe("Bienvenido de nuevo, Juan!");
317
- expect(i18n.translate("errors.validation", { field: "correo" })).toBe("Validación fallida para correo");
318
- });
319
- test("should handle partial translations with fallback", () => {
320
- const i18n = new I18n({
321
- defaultLocale: "en",
322
- locales: {
323
- en: {
324
- dashboard: {
325
- title: "Dashboard",
326
- welcome: "Welcome to your dashboard",
327
- stats: {
328
- users: "Total Users: {count:number}",
329
- posts: "Total Posts: {count:number}",
330
- },
331
- },
332
- },
333
- de: {
334
- dashboard: {
335
- title: "Übersicht",
336
- // welcome is missing, will fallback
337
- stats: {
338
- users: "Gesamtbenutzer: {count:number}",
339
- // posts is missing, will fallback
340
- },
341
- },
342
- },
343
- },
344
- });
345
- i18n.setLocale("de");
346
- expect(i18n.translate("dashboard.title")).toBe("Übersicht");
347
- expect(i18n.translate("dashboard.welcome")).toBe("Welcome to your dashboard"); // Fallback
348
- expect(i18n.translate("dashboard.stats.users", { count: 100 })).toBe("Gesamtbenutzer: 100");
349
- expect(i18n.translate("dashboard.stats.posts", { count: 50 })).toBe("Total Posts: 50"); // Fallback
350
- });
351
- test("should handle edge cases", () => {
352
- const i18n = new I18n({
353
- defaultLocale: "en",
354
- locales: {
355
- en: {
356
- empty: "",
357
- withSpaces: " text with spaces ",
358
- special: "Text with {special:string} characters!",
359
- },
360
- },
361
- });
362
- expect(i18n.translate("empty")).toBe("empty"); // Empty strings return the key
363
- expect(i18n.translate("withSpaces")).toBe(" text with spaces ");
364
- expect(i18n.translate("special", { special: "@#$%" })).toBe("Text with @#$% characters!");
365
- });
366
- });
367
- describe("Type safety scenarios", () => {
368
- test("should work with array values in locale", () => {
369
- const i18n = new I18n({
370
- defaultLocale: "en",
371
- locales: {
372
- en: {
373
- items: ["First", "Second", "Third"],
374
- },
375
- },
376
- });
377
- expect(i18n.translate("items.0")).toBe("First");
378
- expect(i18n.translate("items.1")).toBe("Second");
379
- expect(i18n.translate("items.2")).toBe("Third");
380
- });
381
- test("should handle mixed structure with objects and strings", () => {
382
- const i18n = new I18n({
383
- defaultLocale: "en",
384
- locales: {
385
- en: {
386
- level1: {
387
- simple: "Simple string",
388
- level2: {
389
- nested: "Nested string",
390
- withParam: "Hello {name:string}",
391
- },
392
- },
393
- },
394
- },
395
- });
396
- expect(i18n.translate("level1.simple")).toBe("Simple string");
397
- expect(i18n.translate("level1.level2.nested")).toBe("Nested string");
398
- expect(i18n.translate("level1.level2.withParam", { name: "World" })).toBe("Hello World");
399
- });
400
- });
401
- });
402
- //# sourceMappingURL=index.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../src/lib/i18n/index.test.ts"],"names":[],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- export type ExtractParamType<T extends string> = T extends "string" ? string : T extends "number" ? number : T extends "boolean" ? boolean : never;
2
- export type BuildParamObject<T extends string, Acc = {}> = T extends `${infer _Start}{${infer Name}:${infer Type}}${infer Rest}` ? BuildParamObject<Rest, Acc & Record<Name, ExtractParamType<Type>>> : Acc;
3
- type IsString<T> = T extends string ? true : false;
4
- type IsArray<T> = T extends readonly unknown[] ? true : false;
5
- type IsObject<T> = T extends object ? T extends readonly unknown[] ? false : true : false;
6
- type ArrayKeys<T extends readonly unknown[]> = {
7
- [K in keyof T & `${number}`]: `${K}`;
8
- }[keyof T & `${number}`];
9
- type ObjectPropertyKeys<K extends string, V> = IsString<V> extends true ? K : IsArray<V> extends true ? V extends readonly unknown[] ? `${K}.${NestedKeyOf<V>}` : never : IsObject<V> extends true ? `${K}.${NestedKeyOf<V>}` : never;
10
- export type NestedKeyOf<T> = IsArray<T> extends true ? T extends readonly unknown[] ? ArrayKeys<T> : never : IsObject<T> extends true ? {
11
- [K in keyof T & string]: ObjectPropertyKeys<K, T[K]>;
12
- }[keyof T & string] : never;
13
- export type GetNestedValue<T, K extends string> = K extends `${infer First}.${infer Rest}` ? First extends keyof T ? GetNestedValue<T[First], Rest> : never : K extends keyof T ? T[K] : never;
14
- export {};
15
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/i18n/types.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC,SAAS,QAAQ,GAC/D,MAAM,GACN,CAAC,SAAS,QAAQ,GAChB,MAAM,GACN,CAAC,SAAS,SAAS,GACjB,OAAO,GACP,KAAK,CAAC;AAEd,MAAM,MAAM,gBAAgB,CAC1B,CAAC,SAAS,MAAM,EAChB,GAAG,GAAG,EAAE,IACN,CAAC,SAAS,GAAG,MAAM,MAAM,IAAI,MAAM,IAAI,IAAI,MAAM,IAAI,IAAI,MAAM,IAAI,EAAE,GACrE,gBAAgB,CAAC,IAAI,EAAE,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,GAClE,GAAG,CAAC;AAGR,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,GAAG,IAAI,GAAG,KAAK,CAAC;AACnD,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,SAAS,OAAO,EAAE,GAAG,IAAI,GAAG,KAAK,CAAC;AAC9D,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,GAC/B,CAAC,SAAS,SAAS,OAAO,EAAE,GAC1B,KAAK,GACL,IAAI,GACN,KAAK,CAAC;AAGV,KAAK,SAAS,CAAC,CAAC,SAAS,SAAS,OAAO,EAAE,IAAI;KAC5C,CAAC,IAAI,MAAM,CAAC,GAAG,GAAG,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE;CACrC,CAAC,MAAM,CAAC,GAAG,GAAG,MAAM,EAAE,CAAC,CAAC;AAGzB,KAAK,kBAAkB,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,SAAS,IAAI,GACnE,CAAC,GACD,OAAO,CAAC,CAAC,CAAC,SAAS,IAAI,GACrB,CAAC,SAAS,SAAS,OAAO,EAAE,GAC1B,GAAG,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,GACxB,KAAK,GACP,QAAQ,CAAC,CAAC,CAAC,SAAS,IAAI,GACtB,GAAG,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,GACxB,KAAK,CAAC;AAGd,MAAM,MAAM,WAAW,CAAC,CAAC,IACvB,OAAO,CAAC,CAAC,CAAC,SAAS,IAAI,GACnB,CAAC,SAAS,SAAS,OAAO,EAAE,GAC1B,SAAS,CAAC,CAAC,CAAC,GACZ,KAAK,GACP,QAAQ,CAAC,CAAC,CAAC,SAAS,IAAI,GACtB;KACG,CAAC,IAAI,MAAM,CAAC,GAAG,MAAM,GAAG,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CACrD,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,GACnB,KAAK,CAAC;AAGd,MAAM,MAAM,cAAc,CACxB,CAAC,EACD,CAAC,SAAS,MAAM,IACd,CAAC,SAAS,GAAG,MAAM,KAAK,IAAI,MAAM,IAAI,EAAE,GACxC,KAAK,SAAS,MAAM,CAAC,GACnB,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,GAC9B,KAAK,GACP,CAAC,SAAS,MAAM,CAAC,GACf,CAAC,CAAC,CAAC,CAAC,GACJ,KAAK,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/i18n/types.ts"],"names":[],"mappings":""}
@@ -1,9 +0,0 @@
1
- import type { Action, AllowParams, CanResult, Entity, ForbidParams } from "./types.js";
2
- export declare class Policy {
3
- private rules;
4
- allow<T>(params: AllowParams<T>): void;
5
- forbid<T>(params: ForbidParams<T>): void;
6
- can<T>(action: Action, entity: Entity, object?: T): CanResult;
7
- private matchesConditions;
8
- }
9
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/policy/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EACN,WAAW,EACX,SAAS,EAET,MAAM,EACN,YAAY,EAEb,MAAM,YAAY,CAAC;AAEpB,qBAAa,MAAM;IACjB,OAAO,CAAC,KAAK,CAAc;IAEpB,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;IAU/B,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;IAUjC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,SAAS;IAwBpE,OAAO,CAAC,iBAAiB;CAW1B"}
@@ -1,51 +0,0 @@
1
- export class Policy {
2
- rules = [];
3
- allow(params) {
4
- this.rules.push({
5
- action: params.action,
6
- entity: params.entity,
7
- conditions: params.conditions,
8
- inverted: false,
9
- reason: params.reason,
10
- });
11
- }
12
- forbid(params) {
13
- this.rules.push({
14
- action: params.action,
15
- entity: params.entity,
16
- conditions: params.conditions,
17
- inverted: true,
18
- reason: params.reason,
19
- });
20
- }
21
- can(action, entity, object) {
22
- const filteredRules = this.rules
23
- .filter((rule) => rule.action === action)
24
- .filter((rule) => rule.entity === entity);
25
- for (const rule of filteredRules) {
26
- if (!rule.conditions) {
27
- return {
28
- allowed: !rule.inverted,
29
- reason: rule.reason,
30
- };
31
- }
32
- if (object && this.matchesConditions(object, rule.conditions)) {
33
- return {
34
- allowed: !rule.inverted,
35
- reason: rule.reason,
36
- };
37
- }
38
- }
39
- return { allowed: false };
40
- }
41
- matchesConditions(object, conditions) {
42
- for (const key in conditions) {
43
- const matchesConditions = object[key] === conditions[key];
44
- if (!matchesConditions) {
45
- return false;
46
- }
47
- }
48
- return true;
49
- }
50
- }
51
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/policy/index.ts"],"names":[],"mappings":"AAUA,MAAM,OAAO,MAAM;IACT,KAAK,GAAW,EAAE,CAAC;IAEpB,KAAK,CAAI,MAAsB;QACpC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACd,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,QAAQ,EAAE,KAAK;YACf,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC,CAAC;IACL,CAAC;IAEM,MAAM,CAAI,MAAuB;QACtC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACd,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC,CAAC;IACL,CAAC;IAEM,GAAG,CAAI,MAAc,EAAE,MAAc,EAAE,MAAU;QACtD,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK;aAC7B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC;aACxC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;QAE5C,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;gBACrB,OAAO;oBACL,OAAO,EAAE,CAAC,IAAI,CAAC,QAAQ;oBACvB,MAAM,EAAE,IAAI,CAAC,MAAM;iBACpB,CAAC;YACJ,CAAC;YAED,IAAI,MAAM,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC9D,OAAO;oBACL,OAAO,EAAE,CAAC,IAAI,CAAC,QAAQ;oBACvB,MAAM,EAAE,IAAI,CAAC,MAAM;iBACpB,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC5B,CAAC;IAEO,iBAAiB,CAAI,MAAS,EAAE,UAAyB;QAC/D,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC7B,MAAM,iBAAiB,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,UAAU,CAAC,GAAG,CAAC,CAAC;YAE1D,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACvB,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -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/policy/index.test.ts"],"names":[],"mappings":""}