chore(sfc-playground): ignore duplicate logs

This commit is contained in:
Evan You 2021-06-25 19:31:47 -04:00
parent 1675b6d723
commit 3ffc7be864
3 changed files with 43 additions and 2 deletions

View File

@ -7,6 +7,12 @@ import { EmitFn, EmitsOptions } from './componentEmits'
import { ComponentObjectPropsOptions, ExtractPropTypes } from './componentProps' import { ComponentObjectPropsOptions, ExtractPropTypes } from './componentProps'
import { warn } from './warning' import { warn } from './warning'
type InferDefaults<T> = {
[K in keyof T]?: NonNullable<T[K]> extends object
? () => NonNullable<T[K]>
: NonNullable<T[K]>
}
/** /**
* Compile-time-only helper used for declaring props inside `<script setup>`. * Compile-time-only helper used for declaring props inside `<script setup>`.
* This is stripped away in the compiled code and should never be actually * This is stripped away in the compiled code and should never be actually
@ -25,7 +31,10 @@ export function defineProps<
TypeProps = undefined, TypeProps = undefined,
PP extends ComponentObjectPropsOptions = ComponentObjectPropsOptions, PP extends ComponentObjectPropsOptions = ComponentObjectPropsOptions,
InferredProps = ExtractPropTypes<PP> InferredProps = ExtractPropTypes<PP>
>(props?: PP): Readonly<TypeProps extends undefined ? InferredProps : TypeProps> >(
props?: PP,
defaults?: InferDefaults<TypeProps>
): Readonly<TypeProps extends undefined ? InferredProps : TypeProps>
// implementation // implementation
export function defineProps() { export function defineProps() {
if (__DEV__) { if (__DEV__) {

View File

@ -123,6 +123,9 @@ function createSandbox() {
runtimeError.value = 'Uncaught (in promise): ' + error.message runtimeError.value = 'Uncaught (in promise): ' + error.message
}, },
on_console: (log: any) => { on_console: (log: any) => {
if (log.duplicate) {
return
}
if (log.level === 'error') { if (log.level === 'error') {
if (log.args[0] instanceof Error) { if (log.args[0] instanceof Error) {
runtimeError.value = log.args[0].message runtimeError.value = log.args[0].message
@ -156,7 +159,10 @@ function createSandbox() {
} }
async function updatePreview() { async function updatePreview() {
console.clear() // @ts-ignore
if (import.meta.env.PROD) {
console.clear()
}
runtimeError.value = null runtimeError.value = null
runtimeWarning.value = null runtimeWarning.value = null
try { try {

View File

@ -19,6 +19,32 @@ describe('defineProps w/ type declaration', () => {
props.bar props.bar
}) })
describe('defineProps w/ type declaration + defaults', () => {
defineProps<{
number?: number
arr?: string[]
arr2?: string[]
obj?: { x: number }
obj2?: { x: number }
obj3?: { x: number }
}>(
{},
{
number: 1,
arr: () => [''],
// @ts-expect-error not using factory
arr2: [''],
obj: () => ({ x: 123 }),
// @ts-expect-error not using factory
obj2: { x: 123 },
// @ts-expect-error factory return type does not match
obj3: () => ({ x: 'foo' })
}
)
})
describe('defineProps w/ runtime declaration', () => { describe('defineProps w/ runtime declaration', () => {
// runtime declaration // runtime declaration
const props = defineProps({ const props = defineProps({