Skip to content

Commit c2e3461

Browse files
committed
Fix Persist compatibility with older Alpine versions
1 parent c6069ff commit c2e3461

2 files changed

Lines changed: 54 additions & 1 deletion

File tree

‎packages/persist/src/index.js‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ export default function (Alpine) {
1717
}
1818
}
1919

20-
return Alpine.interceptor((initialValue, getter, setter, path, key, cleanup) => {
20+
return Alpine.interceptor((initialValue, getter, setter, path, key, cleanup = () => {}) => {
2121
let lookup = alias || `_x_${path}`
2222

2323
let initial = storageHas(lookup, storage)

‎tests/vitest/persist.spec.js‎

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import { afterEach, describe, expect, it, vi } from 'vitest'
2+
import persist from '../../packages/persist/src/index.js'
3+
4+
describe('persist', () => {
5+
afterEach(() => vi.unstubAllGlobals())
6+
7+
it('supports Alpine versions without interceptor cleanup', () => {
8+
let values = new Map()
9+
let storage = {
10+
getItem: key => values.get(key) ?? null,
11+
setItem: (key, value) => values.set(key, value),
12+
}
13+
let data = { count: 0 }
14+
15+
vi.stubGlobal('localStorage', storage)
16+
17+
let Alpine = {
18+
effect(callback) {
19+
callback()
20+
},
21+
interceptor(callback, mutate) {
22+
let interceptor = {
23+
initialize(data, path, key) {
24+
return callback(
25+
this.initialValue,
26+
() => data[path],
27+
value => data[path] = value,
28+
path,
29+
key,
30+
)
31+
},
32+
}
33+
34+
mutate(interceptor)
35+
36+
return initialValue => {
37+
interceptor.initialValue = initialValue
38+
39+
return interceptor
40+
}
41+
},
42+
magic() {},
43+
}
44+
45+
persist(Alpine)
46+
47+
let value = Alpine.$persist(1)
48+
49+
expect(value.initialize(data, 'count', 'count')).toBe(1)
50+
expect(data.count).toBe(1)
51+
expect(storage.getItem('_x_count')).toBe('1')
52+
})
53+
})

0 commit comments

Comments
 (0)