Merge pull request #812 from sveltejs/gh-781

use component name in runtime dev warnings
pull/816/merge
Rich Harris 8 years ago committed by GitHub
commit 2c8268bf1c

@ -147,7 +147,10 @@ export default function dom(
.join(',\n')} .join(',\n')}
}`; }`;
const debugName = `<${generator.customElement ? generator.tag : name}>`;
const constructorBody = deindent` const constructorBody = deindent`
${options.dev && `this._debugName = '${debugName}';`}
${options.dev && !generator.customElement && ${options.dev && !generator.customElement &&
`if (!options || (!options.target && !options._root)) throw new Error("'target' is a required option");`} `if (!options || (!options.target && !options._root)) throw new Error("'target' is a required option");`}
this.options = options; this.options = options;
@ -160,7 +163,7 @@ export default function dom(
${options.dev && ${options.dev &&
Array.from(generator.expectedProperties).map( Array.from(generator.expectedProperties).map(
prop => prop =>
`if (!('${prop}' in this._state)) console.warn("Component was created without expected data property '${prop}'");` `if (!('${prop}' in this._state)) console.warn("${debugName} was created without expected data property '${prop}'");`
)} )}
${generator.bindingGroups.length && ${generator.bindingGroups.length &&
`this._bindingGroups = [${Array(generator.bindingGroups.length).fill('[]').join(', ')}];`} `this._bindingGroups = [${Array(generator.bindingGroups.length).fill('[]').join(', ')}];`}
@ -288,13 +291,12 @@ export default function dom(
`); `);
} }
// TODO deprecate component.teardown()
builder.addBlock(deindent` builder.addBlock(deindent`
${options.dev && deindent` ${options.dev && deindent`
${name}.prototype._checkReadOnly = function _checkReadOnly(newState) { ${name}.prototype._checkReadOnly = function _checkReadOnly(newState) {
${Array.from(generator.readonly).map( ${Array.from(generator.readonly).map(
prop => prop =>
`if ('${prop}' in newState && !this._updatingReadonlyProperty) throw new Error("Cannot set read-only property '${prop}'");` `if ('${prop}' in newState && !this._updatingReadonlyProperty) throw new Error("${debugName}: Cannot set read-only property '${prop}'");`
)} )}
}; };
`} `}

@ -151,7 +151,7 @@ export function _set(newState) {
export function _setDev(newState) { export function _setDev(newState) {
if (typeof newState !== 'object') { if (typeof newState !== 'object') {
throw new Error( throw new Error(
'Component .set was called without an object of data key-values to update.' this._debugName + ' .set was called without an object of data key-values to update.'
); );
} }

@ -2,6 +2,6 @@ export default {
dev: true, dev: true,
warnings: [ warnings: [
`Component was created without expected data property 'value'` `<Main$> was created without expected data property 'value'`
] ]
}; };

@ -2,7 +2,7 @@ export default {
dev: true, dev: true,
warnings: [ warnings: [
`Component was created without expected data property 'foo'`, `<Main$> was created without expected data property 'foo'`,
`Component was created without expected data property 'bar'` `<Main$> was created without expected data property 'bar'`
] ]
}; };

@ -6,7 +6,7 @@ export default {
component.set({ foo: 1 }); component.set({ foo: 1 });
throw new Error( 'Expected an error' ); throw new Error( 'Expected an error' );
} catch ( err ) { } catch ( err ) {
assert.equal( err.message, `Cannot set read-only property 'foo'` ); assert.equal( err.message, `<Main$>: Cannot set read-only property 'foo'` );
} }
} }
}; };

@ -6,7 +6,7 @@ export default {
component.set({ width: 99 }); component.set({ width: 99 });
throw new Error( 'Expected an error' ); throw new Error( 'Expected an error' );
} catch ( err ) { } catch ( err ) {
assert.equal( err.message, `Cannot set read-only property 'width'` ); assert.equal( err.message, `<Main$>: Cannot set read-only property 'width'` );
} }
} }
}; };
Loading…
Cancel
Save