@userfrosting/sprinkle-core 6.0.0-beta.7 → 6.0.0-beta.8

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 (66) hide show
  1. package/dist/Page401Unauthorized-Dkz0W0kI.js +11 -0
  2. package/dist/Page403Forbidden-CZrvZLe3.js +11 -0
  3. package/dist/Page404NotFound-C7Y20KCv.js +11 -0
  4. package/dist/PageError-wq0-2ksY.js +11 -0
  5. package/dist/_plugin-vue_export-helper-CHgC5LLL.js +9 -0
  6. package/dist/composables/index.d.ts +4 -0
  7. package/dist/composables/useAxiosInterceptor.d.ts +10 -0
  8. package/dist/composables/useCsrf.d.ts +18 -0
  9. package/dist/composables/useRuleSchemaAdapter.d.ts +7 -0
  10. package/dist/composables/useSprunjer.d.ts +2 -0
  11. package/dist/composables.js +151 -0
  12. package/dist/index.d.ts +18 -0
  13. package/dist/index.js +15 -0
  14. package/{app/assets/interfaces/ApiResponse.ts → dist/interfaces/ApiResponse.d.ts} +5 -6
  15. package/{app/assets/interfaces/DictionaryApi.ts → dist/interfaces/DictionaryApi.d.ts} +9 -11
  16. package/dist/interfaces/alerts.d.ts +8 -0
  17. package/{app/assets/interfaces/common.ts → dist/interfaces/common.d.ts} +1 -1
  18. package/dist/interfaces/index.d.ts +13 -0
  19. package/{app/assets/interfaces/severity.ts → dist/interfaces/severity.d.ts} +9 -9
  20. package/dist/interfaces/sprunjer.d.ts +51 -0
  21. package/{app/assets/interfaces/sprunjerApi.ts → dist/interfaces/sprunjerApi.d.ts} +12 -15
  22. package/dist/interfaces.js +5 -0
  23. package/dist/routes/index.d.ts +16 -0
  24. package/dist/routes.js +41 -0
  25. package/dist/severity-DwLpzIij.js +4 -0
  26. package/{app/assets/stores/Helpers/PluralRules.ts → dist/stores/Helpers/PluralRules.d.ts} +17 -114
  27. package/dist/stores/index.d.ts +4 -0
  28. package/dist/stores/useAlertsStore.d.ts +29 -0
  29. package/dist/stores/useConfigStore.d.ts +11 -0
  30. package/dist/stores/usePageMeta.d.ts +51 -0
  31. package/dist/stores/useTranslator.d.ts +66 -0
  32. package/dist/stores.js +7 -0
  33. package/dist/useAlertsStore-BnSfoOG2.js +179 -0
  34. package/dist/useAxiosInterceptor-DTHSvv-f.js +68 -0
  35. package/dist/views/Page401Unauthorized.vue.d.ts +2 -0
  36. package/dist/views/Page403Forbidden.vue.d.ts +2 -0
  37. package/dist/views/Page404NotFound.vue.d.ts +2 -0
  38. package/dist/views/PageError.vue.d.ts +2 -0
  39. package/package.json +36 -8
  40. package/app/assets/composables/index.ts +0 -4
  41. package/app/assets/composables/useAxiosInterceptor.ts +0 -30
  42. package/app/assets/composables/useCsrf.ts +0 -129
  43. package/app/assets/composables/useRuleSchemaAdapter.ts +0 -205
  44. package/app/assets/composables/useSprunjer.ts +0 -188
  45. package/app/assets/index.d.ts +0 -8
  46. package/app/assets/index.ts +0 -40
  47. package/app/assets/interfaces/alerts.ts +0 -16
  48. package/app/assets/interfaces/index.ts +0 -30
  49. package/app/assets/interfaces/sprunjer.ts +0 -60
  50. package/app/assets/routes/index.ts +0 -44
  51. package/app/assets/stores/index.ts +0 -4
  52. package/app/assets/stores/useAlertsStore.ts +0 -30
  53. package/app/assets/stores/useConfigStore.ts +0 -30
  54. package/app/assets/stores/usePageMeta.ts +0 -114
  55. package/app/assets/stores/useTranslator.ts +0 -293
  56. package/app/assets/tests/composables/useCsrf.test.ts +0 -212
  57. package/app/assets/tests/composables/useRuleSchemaAdapter.test.ts +0 -657
  58. package/app/assets/tests/interfaces/alerts.test.ts +0 -43
  59. package/app/assets/tests/plugin.test.ts +0 -29
  60. package/app/assets/tests/stores/Helpers/PluralRules.test.ts +0 -440
  61. package/app/assets/tests/stores/config.test.ts +0 -42
  62. package/app/assets/tests/stores/useTranslator.test.ts +0 -373
  63. package/app/assets/views/Page401Unauthorized.vue +0 -3
  64. package/app/assets/views/Page403Forbidden.vue +0 -3
  65. package/app/assets/views/Page404NotFound.vue +0 -3
  66. package/app/assets/views/PageError.vue +0 -3
@@ -1,212 +0,0 @@
1
- import { describe, expect, beforeEach, afterEach, test, vi } from 'vitest'
2
- import axios from 'axios'
3
- import { useConfigStore } from '../../stores/useConfigStore'
4
- import { useCsrf } from '../../composables/useCsrf'
5
- import { nextTick } from 'vue'
6
-
7
- // Mock the config store
8
- vi.mock('../../stores/useConfigStore')
9
- const mockUseConfigStore = {
10
- get: vi.fn()
11
- }
12
-
13
- describe('Csrf Composable', () => {
14
- afterEach(() => {
15
- vi.clearAllMocks()
16
- vi.resetAllMocks()
17
- })
18
-
19
- beforeEach(() => {
20
- // Mock the config store
21
- mockUseConfigStore.get.mockImplementation((key, defaultValue) => {
22
- if (key === 'csrf.enabled') return true
23
- if (key === 'csrf.name') return 'csrf'
24
- return defaultValue
25
- })
26
- vi.mocked(useConfigStore).mockReturnValue(mockUseConfigStore as any)
27
-
28
- // Reset axios defaults
29
- axios.defaults.headers.post = {}
30
- axios.defaults.headers.put = {}
31
- axios.defaults.headers.delete = {}
32
- axios.defaults.headers.patch = {}
33
-
34
- // Reset the document head
35
- document.head.innerHTML = ''
36
- })
37
-
38
- test('initializes CSRF token name and value from meta tags', () => {
39
- document.head.innerHTML = `
40
- <meta name="csrf_name" content="123456">
41
- <meta name="csrf_value" content="7c4a8d09">
42
- `
43
-
44
- const { name, token } = useCsrf()
45
- expect(name.value).toBe('123456')
46
- expect(token.value).toBe('7c4a8d09')
47
- })
48
-
49
- test('sets axios headers correctly when CSRF is enabled', async () => {
50
- const csrf = useCsrf()
51
-
52
- // Expect axios default headers
53
- expect(axios.defaults.headers.post).toEqual({})
54
- expect(axios.defaults.headers.put).toEqual({})
55
- expect(axios.defaults.headers.delete).toEqual({})
56
- expect(axios.defaults.headers.patch).toEqual({})
57
-
58
- // Set CSRF token values - Will trigger the WatchEffect
59
- csrf.name.value = '654321'
60
- csrf.token.value = 'abcdef'
61
-
62
- // Wait for the next tick to ensure watchEffect is triggered
63
- await nextTick()
64
-
65
- // Expect axios headers to be set correctly
66
- expect(csrf.isEnabled()).toBe(true)
67
- expect(csrf.name.value).toBe('654321')
68
- expect(csrf.token.value).toBe('abcdef')
69
- expect(csrf.key_name.value).toBe('csrf_name')
70
- expect(csrf.key_value.value).toBe('csrf_value')
71
- expect(axios.defaults.headers.post['csrf_name']).toBe('654321')
72
- expect(axios.defaults.headers.post['csrf_value']).toBe('abcdef')
73
- expect(axios.defaults.headers.put['csrf_name']).toBe('654321')
74
- expect(axios.defaults.headers.put['csrf_value']).toBe('abcdef')
75
- expect(axios.defaults.headers.delete['csrf_name']).toBe('654321')
76
- expect(axios.defaults.headers.delete['csrf_value']).toBe('abcdef')
77
- expect(axios.defaults.headers.patch['csrf_name']).toBe('654321')
78
- expect(axios.defaults.headers.patch['csrf_value']).toBe('abcdef')
79
- })
80
-
81
- test('does not set axios headers when CSRF is disabled', () => {
82
- // Change the mock implementation to simulate CSRF being disabled
83
- mockUseConfigStore.get.mockImplementation((key, defaultValue) => {
84
- if (key === 'csrf.enabled') return false // CSRF is disabled
85
- if (key === 'csrf.name') return 'csrf'
86
- return defaultValue
87
- })
88
- vi.mocked(useConfigStore).mockReturnValue(mockUseConfigStore as any)
89
-
90
- // Get the CSRF composable
91
- const csrf = useCsrf()
92
-
93
- // Assert everything is empty
94
- expect(csrf.isEnabled()).toBe(false)
95
- expect(csrf.name.value).toBe('')
96
- expect(csrf.token.value).toBe('')
97
- expect(axios.defaults.headers.post).toEqual({})
98
- expect(axios.defaults.headers.put).toEqual({})
99
- expect(axios.defaults.headers.delete).toEqual({})
100
- expect(axios.defaults.headers.patch).toEqual({})
101
- })
102
-
103
- test('updates CSRF token updates meta tags', async () => {
104
- document.head.innerHTML = `
105
- <meta name="csrf_name" content="old_name">
106
- <meta name="csrf_value" content="old_value">
107
- `
108
-
109
- // Assert initial state
110
- const csrf = useCsrf()
111
- expect(csrf.name.value).toBe('old_name')
112
- expect(csrf.token.value).toBe('old_value')
113
- expect(document.querySelector("meta[name='csrf_name']")?.getAttribute('content')).toBe(
114
- 'old_name'
115
- )
116
- expect(document.querySelector("meta[name='csrf_value']")?.getAttribute('content')).toBe(
117
- 'old_value'
118
- )
119
-
120
- // Update CSRF tokens manually
121
- csrf.name.value = 'new_name'
122
- csrf.token.value = 'new_value'
123
-
124
- // Wait for the next tick to ensure watchEffect is triggered
125
- await nextTick()
126
-
127
- // Assert new state
128
- expect(csrf.name.value).toBe('new_name')
129
- expect(csrf.token.value).toBe('new_value')
130
- expect(document.querySelector("meta[name='csrf_name']")?.getAttribute('content')).toBe(
131
- 'new_name'
132
- )
133
- expect(document.querySelector("meta[name='csrf_value']")?.getAttribute('content')).toBe(
134
- 'new_value'
135
- )
136
- })
137
-
138
- test('CSRF token can be updated from headers', async () => {
139
- const csrf = useCsrf()
140
-
141
- // Assert initial state
142
- expect(csrf.name.value).toBe('')
143
- expect(csrf.token.value).toBe('')
144
-
145
- const headers = {
146
- 'csrf-name': 'new_name',
147
- 'csrf-value': 'new_value'
148
- }
149
- csrf.updateFromHeaders(headers)
150
-
151
- // Wait for the next tick to ensure watchEffect is triggered
152
- await nextTick()
153
-
154
- expect(csrf.name.value).toBe('new_name')
155
- expect(csrf.token.value).toBe('new_value')
156
- expect(document.querySelector("meta[name='csrf_name']")?.getAttribute('content')).toBe(
157
- 'new_name'
158
- )
159
- expect(document.querySelector("meta[name='csrf_value']")?.getAttribute('content')).toBe(
160
- 'new_value'
161
- )
162
- expect(axios.defaults.headers.post['csrf_name']).toBe('new_name')
163
- expect(axios.defaults.headers.post['csrf_value']).toBe('new_value')
164
- expect(axios.defaults.headers.put['csrf_name']).toBe('new_name')
165
- expect(axios.defaults.headers.put['csrf_value']).toBe('new_value')
166
- expect(axios.defaults.headers.delete['csrf_name']).toBe('new_name')
167
- expect(axios.defaults.headers.delete['csrf_value']).toBe('new_value')
168
- expect(axios.defaults.headers.patch['csrf_name']).toBe('new_name')
169
- expect(axios.defaults.headers.patch['csrf_value']).toBe('new_value')
170
- })
171
-
172
- test('CSRF token can handle empty headers', async () => {
173
- document.head.innerHTML = `
174
- <meta name="csrf_name" content="123456">
175
- <meta name="csrf_value" content="abcdef">
176
- `
177
-
178
- // Assert initial state
179
- const csrf = useCsrf()
180
- expect(csrf.name.value).toBe('123456')
181
- expect(csrf.token.value).toBe('abcdef')
182
- expect(document.querySelector("meta[name='csrf_name']")?.getAttribute('content')).toBe(
183
- '123456'
184
- )
185
- expect(document.querySelector("meta[name='csrf_value']")?.getAttribute('content')).toBe(
186
- 'abcdef'
187
- )
188
- expect(axios.defaults.headers.post['csrf_name']).toBe('123456')
189
- expect(axios.defaults.headers.post['csrf_value']).toBe('abcdef')
190
-
191
- // Call updateFromHeaders with empty headers
192
- const headers = {
193
- foo: 'bar'
194
- }
195
- csrf.updateFromHeaders(headers)
196
-
197
- // Wait for the next tick to ensure watchEffect is triggered
198
- await nextTick()
199
-
200
- // Assert state remains unchanged
201
- expect(csrf.name.value).toBe('123456')
202
- expect(csrf.token.value).toBe('abcdef')
203
- expect(document.querySelector("meta[name='csrf_name']")?.getAttribute('content')).toBe(
204
- '123456'
205
- )
206
- expect(document.querySelector("meta[name='csrf_value']")?.getAttribute('content')).toBe(
207
- 'abcdef'
208
- )
209
- expect(axios.defaults.headers.post['csrf_name']).toBe('123456')
210
- expect(axios.defaults.headers.post['csrf_value']).toBe('abcdef')
211
- })
212
- })