Skip to content

Commit 8ee776b

Browse files
committed
stencil
1 parent 4f8f7e5 commit 8ee776b

File tree

4 files changed

+55
-0
lines changed

4 files changed

+55
-0
lines changed

libraries/stencil/src/basic-tests.js

+13
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,19 @@ describe("basic support", function () {
129129
expect(data).to.eql("Stencil");
130130
});
131131
});
132+
describe('without properties', function () {
133+
it("will not overwrite unwriteable properties", async function () {
134+
this.weight = 3;
135+
let root = document.createElement('component-without-properties');
136+
scratch.appendChild(root);
137+
await waitForRender(root);
138+
let wc = root.shadowRoot.querySelector("#wc");
139+
expect(wc.getAttribute('amethod')).to.eql('method');
140+
expect(wc.getAttribute('agetter')).to.eql('getter');
141+
expect(wc.getAttribute('areadonly')).to.eql('readonly');
142+
expect(wc.innerHTML).to.eql('Success');
143+
});
144+
});
132145

133146
describe("events", function () {
134147
it("can imperatively listen to a DOM event dispatched by a Custom Element", async function () {

libraries/stencil/src/components.d.ts

+13
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ export namespace Components {
3535
}
3636
interface ComponentWithoutChildren {
3737
}
38+
interface ComponentWithoutProperties {
39+
}
3840
}
3941
declare global {
4042
interface HTMLComponentWithChildrenElement extends Components.ComponentWithChildren, HTMLStencilElement {
@@ -79,6 +81,12 @@ declare global {
7981
prototype: HTMLComponentWithoutChildrenElement;
8082
new (): HTMLComponentWithoutChildrenElement;
8183
};
84+
interface HTMLComponentWithoutPropertiesElement extends Components.ComponentWithoutProperties, HTMLStencilElement {
85+
}
86+
var HTMLComponentWithoutPropertiesElement: {
87+
prototype: HTMLComponentWithoutPropertiesElement;
88+
new (): HTMLComponentWithoutPropertiesElement;
89+
};
8290
interface HTMLElementTagNameMap {
8391
"component-with-children": HTMLComponentWithChildrenElement;
8492
"component-with-children-rerender": HTMLComponentWithChildrenRerenderElement;
@@ -87,6 +95,7 @@ declare global {
8795
"component-with-imperative-event": HTMLComponentWithImperativeEventElement;
8896
"component-with-properties": HTMLComponentWithPropertiesElement;
8997
"component-without-children": HTMLComponentWithoutChildrenElement;
98+
"component-without-properties": HTMLComponentWithoutPropertiesElement;
9099
}
91100
}
92101
declare namespace LocalJSX {
@@ -118,6 +127,8 @@ declare namespace LocalJSX {
118127
}
119128
interface ComponentWithoutChildren {
120129
}
130+
interface ComponentWithoutProperties {
131+
}
121132
interface IntrinsicElements {
122133
"component-with-children": ComponentWithChildren;
123134
"component-with-children-rerender": ComponentWithChildrenRerender;
@@ -126,6 +137,7 @@ declare namespace LocalJSX {
126137
"component-with-imperative-event": ComponentWithImperativeEvent;
127138
"component-with-properties": ComponentWithProperties;
128139
"component-without-children": ComponentWithoutChildren;
140+
"component-without-properties": ComponentWithoutProperties;
129141
}
130142
}
131143
export { LocalJSX as JSX };
@@ -139,6 +151,7 @@ declare module "@stencil/core" {
139151
"component-with-imperative-event": LocalJSX.ComponentWithImperativeEvent & JSXBase.HTMLAttributes<HTMLComponentWithImperativeEventElement>;
140152
"component-with-properties": LocalJSX.ComponentWithProperties & JSXBase.HTMLAttributes<HTMLComponentWithPropertiesElement>;
141153
"component-without-children": LocalJSX.ComponentWithoutChildren & JSXBase.HTMLAttributes<HTMLComponentWithoutChildrenElement>;
154+
"component-without-properties": LocalJSX.ComponentWithoutProperties & JSXBase.HTMLAttributes<HTMLComponentWithoutPropertiesElement>;
142155
}
143156
}
144157
}

libraries/stencil/src/components.js

+3
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
import "ce-without-children";
22
import "ce-with-children";
33
import "ce-with-properties";
4+
import "ce-without-properties";
45
import "ce-with-event";
56
import { ComponentWithChildren } from "../dist/components/component-with-children.js";
67
import { ComponentWithChildrenRerender } from "../dist/components/component-with-children-rerender.js";
78
import { ComponentWithDeclarativeEvent } from "../dist/components/component-with-declarative-event.js";
89
import { ComponentWithDifferentViews } from "../dist/components/component-with-different-views.js";
910
import { ComponentWithImperativeEvent } from "../dist/components/component-with-imperative-event.js";
1011
import { ComponentWithProperties } from "../dist/components/component-with-properties.js";
12+
import { ComponentWithoutProperties } from "../dist/components/component-without-properties.js";
1113
import { ComponentWithoutChildren } from "../dist/components/component-without-children.js";
1214

1315
customElements.define("component-without-children", ComponentWithoutChildren);
@@ -29,3 +31,4 @@ customElements.define(
2931
ComponentWithDeclarativeEvent
3032
);
3133
customElements.define("component-with-properties", ComponentWithProperties);
34+
customElements.define('component-without-properties', ComponentWithoutProperties);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { Component, Host, h } from "@stencil/core";
2+
3+
@Component({
4+
tag: "component-without-properties",
5+
shadow: true
6+
})
7+
export class ComponentWithoutProperties {
8+
9+
render() {
10+
const data = {
11+
getter: 'getter',
12+
method: 'method',
13+
readonly: 'readonly'
14+
}
15+
return (
16+
<Host>
17+
<ce-without-properties
18+
id="wc"
19+
amethod={data.method}
20+
agetter={data.getter}
21+
areadonly={data.readonly}
22+
></ce-without-properties>
23+
</Host>
24+
);
25+
}
26+
}

0 commit comments

Comments
 (0)