mirror of
https://github.com/nuxt/nuxt.git
synced 2025-01-18 09:25:54 +00:00
feat: add polyfills
option to auto-imports
This commit is contained in:
parent
f86d749077
commit
9fa3380af7
@ -9,28 +9,31 @@ import escapeRE from 'escape-string-regexp'
|
||||
import { lookupNodeModuleSubpath, parseNodeModulePath } from 'mlly'
|
||||
import { isDirectory } from '../utils'
|
||||
import { TransformPlugin } from './transform'
|
||||
import { defaultPresets } from './presets'
|
||||
import { defaultPresets, appCompatPresets } from './presets'
|
||||
|
||||
export default defineNuxtModule<Partial<ImportsOptions>>({
|
||||
meta: {
|
||||
name: 'nuxt:imports',
|
||||
configKey: 'imports',
|
||||
},
|
||||
defaults: nuxt => ({
|
||||
autoImport: true,
|
||||
scan: true,
|
||||
presets: defaultPresets,
|
||||
global: false,
|
||||
imports: [],
|
||||
dirs: [],
|
||||
transform: {
|
||||
include: [
|
||||
new RegExp('^' + escapeRE(nuxt.options.buildDir)),
|
||||
],
|
||||
exclude: undefined,
|
||||
},
|
||||
virtualImports: ['#imports'],
|
||||
}),
|
||||
defaults: nuxt => {
|
||||
return {
|
||||
autoImport: true,
|
||||
scan: true,
|
||||
presets: nuxt.options.imports.polyfills ? [...defaultPresets, ...appCompatPresets] : defaultPresets,
|
||||
global: false,
|
||||
imports: [],
|
||||
dirs: [],
|
||||
transform: {
|
||||
include: [
|
||||
new RegExp('^' + escapeRE(nuxt.options.buildDir)),
|
||||
],
|
||||
exclude: undefined,
|
||||
},
|
||||
virtualImports: ['#imports'],
|
||||
polyfills: true,
|
||||
}
|
||||
},
|
||||
async setup (options, nuxt) {
|
||||
// TODO: fix sharing of defaults between invocations of modules
|
||||
const presets = JSON.parse(JSON.stringify(options.presets)) as ImportPresetWithDeprecation[]
|
||||
|
@ -21,14 +21,6 @@ const granularAppPresets: InlinePreset[] = [
|
||||
imports: ['useNuxtApp', 'tryUseNuxtApp', 'defineNuxtPlugin', 'definePayloadPlugin', 'useRuntimeConfig', 'defineAppConfig'],
|
||||
from: '#app/nuxt',
|
||||
},
|
||||
{
|
||||
imports: ['requestIdleCallback', 'cancelIdleCallback'],
|
||||
from: '#app/compat/idle-callback',
|
||||
},
|
||||
{
|
||||
imports: ['setInterval'],
|
||||
from: '#app/compat/interval',
|
||||
},
|
||||
{
|
||||
imports: ['useAppConfig', 'updateAppConfig'],
|
||||
from: '#app/config',
|
||||
@ -256,6 +248,17 @@ const vueTypesPreset = defineUnimportPreset({
|
||||
],
|
||||
})
|
||||
|
||||
export const appCompatPresets: InlinePreset[] = [
|
||||
{
|
||||
imports: ['requestIdleCallback', 'cancelIdleCallback'],
|
||||
from: '#app/compat/idle-callback',
|
||||
},
|
||||
{
|
||||
imports: ['setInterval'],
|
||||
from: '#app/compat/interval',
|
||||
},
|
||||
]
|
||||
|
||||
export const defaultPresets: InlinePreset[] = [
|
||||
...commonPresets,
|
||||
...granularAppPresets,
|
||||
|
@ -32,4 +32,10 @@ export interface ImportsOptions extends UnimportOptions {
|
||||
exclude?: RegExp[]
|
||||
include?: RegExp[]
|
||||
}
|
||||
|
||||
/**
|
||||
* Add polyfills for setInterval, requestIdleCallback, and others
|
||||
* @default true
|
||||
*/
|
||||
polyfills?: boolean
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
import { describe, expect, it } from 'vitest'
|
||||
import { describe, expect, it, vi } from 'vitest'
|
||||
import type { ComponentOptions } from 'vue'
|
||||
import { Suspense, defineComponent, h, toDisplayString, useAttrs } from 'vue'
|
||||
import { mountSuspended } from '@nuxt/test-utils/runtime'
|
||||
@ -65,3 +65,29 @@ describe('client page', () => {
|
||||
expect(wrapper.find('#fallback').exists()).toBe(false)
|
||||
})
|
||||
})
|
||||
|
||||
describe('app/compat', () => {
|
||||
const Component = defineComponent({
|
||||
setup () {
|
||||
const visible = ref(false)
|
||||
setInterval(() => {
|
||||
visible.value = true
|
||||
}, 1000)
|
||||
|
||||
return () => h('div', {}, visible.value ? h('span', { id: 'child' }) : {})
|
||||
},
|
||||
})
|
||||
it('setInterval is not auto-imported', async () => {
|
||||
vi.useFakeTimers()
|
||||
|
||||
const wrapper = mount(Component)
|
||||
|
||||
vi.advanceTimersByTime(1000)
|
||||
|
||||
await wrapper.vm.$nextTick()
|
||||
|
||||
expect(wrapper.find('#child').exists()).toBe(true)
|
||||
|
||||
vi.useRealTimers()
|
||||
})
|
||||
})
|
||||
|
@ -21,6 +21,9 @@ export default defineVitestConfig({
|
||||
experimental: {
|
||||
appManifest: process.env.TEST_MANIFEST !== 'manifest-off',
|
||||
},
|
||||
imports: {
|
||||
polyfills: false,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
Loading…
Reference in New Issue
Block a user