__DEV__: true,
__JSDOM__: true,
__FEATURE_OPTIONS__: true,
- __FEATURE_PRODUCTION_TIP__: false
+ __FEATURE_PRODUCTION_TIP__: false,
+ __FEATURE_SUSPENSE__: true
},
coverageDirectory: 'coverage',
coverageReporters: ['html', 'lcov', 'text'],
// Feature flags
declare var __FEATURE_OPTIONS__: boolean
declare var __FEATURE_PRODUCTION_TIP__: boolean
+declare var __FEATURE_SUSPENSE__: boolean
isFunction(setupResult.then) &&
isFunction(setupResult.catch)
) {
- // async setup returned Promise.
- // bail here and wait for re-entry.
- instance.asyncDep = setupResult as Promise<any>
+ if (__FEATURE_SUSPENSE__) {
+ // async setup returned Promise.
+ // bail here and wait for re-entry.
+ instance.asyncDep = setupResult as Promise<any>
+ } else if (__DEV__) {
+ warn(
+ `setup() returned a Promise, but the version of Vue you are using ` +
+ `does not support it yet.`
+ )
+ }
return
} else {
handleSetupResult(instance, setupResult)
)
break
case Suspense:
- processSuspense(
- n1,
- n2,
- container,
- anchor,
- parentComponent,
- isSVG,
- optimized
- )
+ if (__FEATURE_SUSPENSE__) {
+ processSuspense(
+ n1,
+ n2,
+ container,
+ anchor,
+ parentComponent,
+ isSVG,
+ optimized
+ )
+ } else if (__DEV__) {
+ warn(`Suspense is not enabled in the version of Vue you are using.`)
+ }
break
default:
if (shapeFlag & ShapeFlags.ELEMENT) {
} else {
const instance = (n2.component =
n1.component) as ComponentInternalInstance
+
// async still pending
- if (instance.asyncDep && !instance.asyncResolved) {
+ if (
+ __FEATURE_SUSPENSE__ &&
+ instance.asyncDep &&
+ !instance.asyncResolved
+ ) {
return
}
+
// a resolved async component, on successful re-entry.
// pickup the mounting process and setup render effect
if (!instance.update) {
} else if (
shouldUpdateComponent(n1, n2, optimized) ||
// TODO use context suspense
- (instance.provides.suspense &&
+ (__FEATURE_SUSPENSE__ &&
+ instance.provides.suspense &&
!(instance.provides.suspense as any).isResolved)
) {
// normal update
// setup() is async. This component relies on async logic to be resolved
// before proceeding
- if (instance.asyncDep) {
+ if (__FEATURE_SUSPENSE__ && instance.asyncDep) {
// TODO use context suspense
const suspense = (instance as any).provides.suspense
if (!suspense) {
// support options?
// the lean build drops options related code with buildOptions.lean: true
__FEATURE_OPTIONS__: !packageOptions.lean,
+ __FEATURE_SUSPENSE__: true,
// this is only used during tests
__JSDOM__: false
})