Skip to content

Commit 94deb2c

Browse files
authoredMar 9, 2025··
fix: update to latest @nuxt/scripts implementation (#391)
1 parent 1d81618 commit 94deb2c

File tree

2 files changed

+33
-11
lines changed

2 files changed

+33
-11
lines changed
 

‎src/runtime/components/NuxtTurnstile.vue

+20-11
Original file line numberDiff line numberDiff line change
@@ -27,17 +27,21 @@ const el = ref()
2727
const unmountStarted = ref(false)
2828
let id: string | undefined | null = undefined
2929
let interval: NodeJS.Timeout
30-
const { render, reset: _reset, remove } = useScriptCloudflareTurnstile({
30+
const { onLoaded } = useScriptCloudflareTurnstile({
3131
scriptOptions: {
3232
trigger: useScriptTriggerElement({ trigger: props.trigger, el }),
3333
},
3434
})
3535
36+
let _reset: Turnstile.Turnstile['reset']
37+
let remove: Turnstile.Turnstile['remove']
38+
3639
const reset = () => {
3740
if (id) {
3841
_reset(id)
3942
}
4043
}
44+
4145
const unmount = () => {
4246
unmountStarted.value = true
4347
clearInterval(interval)
@@ -47,17 +51,22 @@ const unmount = () => {
4751
}
4852
}
4953
50-
onMounted(async () => {
51-
id = await render(el.value, {
52-
sitekey: props.siteKey || config.siteKey,
53-
callback: (token: string) => emit('update:modelValue', token),
54-
...props.options,
55-
})
56-
interval = setInterval(reset, props.resetInterval)
54+
onMounted(() => {
55+
// @ts-expect-error types from nuxt/scripts seem to be wrong
56+
onLoaded(async ({ render, reset: resetFn, remove: removeFn }) => {
57+
_reset = resetFn
58+
remove = removeFn
59+
id = await render(el.value, {
60+
sitekey: props.siteKey || config.siteKey,
61+
callback: (token: string) => emit('update:modelValue', token),
62+
...props.options,
63+
})
64+
interval = setInterval(reset, props.resetInterval)
5765
58-
if (unmountStarted.value) {
59-
unmount()
60-
}
66+
if (unmountStarted.value) {
67+
unmount()
68+
}
69+
})
6170
})
6271
6372
onBeforeUnmount(unmount)

‎test/e2e.test.ts

+13
Original file line numberDiff line numberDiff line change
@@ -44,4 +44,17 @@ describe('turnstile', async () => {
4444
await page.click('#home-link')
4545
await page.waitForEvent('console')
4646
})
47+
48+
it('elements are rendered', async () => {
49+
const page = await createPage()
50+
51+
await page.goto(url('/'))
52+
await page.click('button')
53+
54+
await page.waitForTimeout(1000) // wait 1 second for the element to be rendered
55+
56+
const inputExists = (await page.locator('input[name="cf-turnstile-response"]').all()).length > 0
57+
58+
expect(inputExists).toBe(true)
59+
})
4760
})

0 commit comments

Comments
 (0)
Please sign in to comment.