Skip to content

Commit

Permalink
feat: function dependencies now include member expressions, allow usi…
Browse files Browse the repository at this point in the history
…ng top level input, convert to new default attribute name
  • Loading branch information
DylanPiercey committed Nov 2, 2022
1 parent 1fbb304 commit 3d36e82
Show file tree
Hide file tree
Showing 27 changed files with 182 additions and 109 deletions.
5 changes: 5 additions & 0 deletions .changeset/healthy-ravens-wink.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@marko/tags-api-preview": minor
---

Allow using top level input rather than just <attrs/> tag.
5 changes: 5 additions & 0 deletions .changeset/popular-poems-appear.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@marko/tags-api-preview": minor
---

Switch to new default attribute name (value instead of default).
5 changes: 5 additions & 0 deletions .changeset/shiny-points-reflect.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@marko/tags-api-preview": minor
---

Member expressions now are accounted for when determining function dependencies.
50 changes: 25 additions & 25 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
},
"devDependencies": {
"@changesets/cli": "^2.25.0",
"@marko/compiler": "^5.22.9",
"@marko/compiler": "^5.23.0",
"@marko/fixture-snapshots": "^2.1.7",
"@marko/testing-library": "^6.1.2",
"@testing-library/user-event": "^13.5.0",
Expand Down Expand Up @@ -37,7 +37,7 @@
"jsdom": "^20.0.1",
"jsdom-context-require": "^4.0.6",
"lint-staged": "^13.0.3",
"marko": "^5.21.10",
"marko": "^5.22.0",
"memfs": "^3.4.7",
"mocha": "^10.1.0",
"nyc": "^15.1.0",
Expand All @@ -64,7 +64,7 @@
"license": "MIT",
"main": "marko.json",
"peerDependencies": {
"marko": "<= 5.21.11"
"marko": ">= 5.23.0"
},
"repository": {
"type": "git",
Expand Down
21 changes: 21 additions & 0 deletions src/__tests__/fixtures/effect/index.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,27 @@ describe(
])
);

describe(
"<effect> input member expression",
fixture("./templates/input-member-expression.marko", [
{ onCount, other: "other1", value: { a: 1, b: 2 } },
async ({ expect, rerender }) => {
expect(onCount).calledOnceWith(2);
resetHistory();

await rerender({ onCount, other: "other2", value: { a: 1, b: 2 } });
expect(onCount).has.not.been.called;

await rerender({ onCount, other: "other2", value: { a: 3, b: 2 } });
expect(onCount).has.not.been.called;

await rerender({ onCount, other: "other2", value: { a: 3, b: 4 } });
expect(onCount).calledOnceWith(4);
resetHistory();
},
])
);

describe(
"<effect> no deps",
fixture("./templates/no-deps.marko", [
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<span>
${input.other}
${input.value.a}
</span>

<effect=(() => {
input.onCount(input.value.b);
})/>
18 changes: 9 additions & 9 deletions src/__tests__/fixtures/get-and-set/index.test.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { spy, resetHistory } from "sinon";
import fixture from "../../fixture";

const defaultChange = spy();
const valueChange = spy();

describe(
"<get> & <set> self reference",
Expand All @@ -20,33 +20,33 @@ describe(
describe(
"<get> & <set> assign to mutable set",
fixture("./templates/assign-to-mutable-set.marko", [
{ defaultChange },
{ valueChange },
async ({ expect, screen, rerender, fireEvent }) => {
expect(defaultChange).has.not.been.called;
expect(valueChange).has.not.been.called;

await fireEvent.click(screen.getByText("increment"));
expect(defaultChange).calledOnceWith(2);
expect(valueChange).calledOnceWith(2);
resetHistory();

await rerender();
expect(defaultChange).has.not.been.called;
expect(valueChange).has.not.been.called;
},
])
);

describe(
"<get> & <set> assign to nested mutable set",
fixture("./templates/assign-to-nested-mutable-set.marko", [
{ defaultChange },
{ valueChange },
async ({ expect, screen, rerender, fireEvent }) => {
expect(defaultChange).has.not.been.called;
expect(valueChange).has.not.been.called;

await fireEvent.click(screen.getByText("increment"));
expect(defaultChange).calledOnceWith(2);
expect(valueChange).calledOnceWith(2);
resetHistory();

await rerender();
expect(defaultChange).has.not.been.called;
expect(valueChange).has.not.been.called;
},
])
);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<attrs/{ defaultChange }/>
<set=1 defaultChange=defaultChange>
<attrs/{ valueChange }/>
<set=1 valueChange=valueChange>
<get/val="."/>
<div>${val}</div>
<button onClick=(() => val++)>increment</button>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<attrs/{ defaultChange }/>
<set={ x: 1, xChange: defaultChange }>
<attrs/{ valueChange }/>
<set={ x: 1, xChange: valueChange }>
<get/{ x }="."/>
<div>${x}</div>
<button onClick=(() => x++)>increment</button>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<const/setValue = { default: 1 }/>
<const/setValue = { value: 1 }/>
<set ...setValue>
<div/>
</set>
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<attrs/{ value, valueChange }/>
<let/count=value defaultChange=valueChange/>
<let/count=value valueChange=valueChange/>

<div>${count}</div>
<button onClick=(() => count++)>Increment</button>
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
<attrs/{ default: fn }/>
<attrs/{ value: fn }/>
<lifecycle onMount=fn/>
2 changes: 1 addition & 1 deletion src/__tests__/fixtures/misc/components/invoke.marko
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
<attrs/{ default: fn }/>
<attrs/{ value: fn }/>
<const/data = fn()/>
2 changes: 1 addition & 1 deletion src/__tests__/fixtures/misc/components/repeat.marko
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<attrs/{ default: times, renderBody }/>
<attrs/{ value: times, renderBody }/>
<for|i| from=0 to=times>
<${renderBody}=[i]/>
</for>
5 changes: 0 additions & 5 deletions src/__tests__/fixtures/misc/feature-detect/index.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,11 +48,6 @@ describe("misc feature detect", () => {
fixture("./templates/error-feature-detect-reference-component.marko")
);

describe(
"error reference input",
fixture("./templates/error-feature-detect-reference-input.marko")
);

describe(
"error reference out",
fixture("./templates/error-feature-detect-reference-out.marko")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
<attrs/{ max }/>
<let/x=1/>
<return = x defaultChange=(v => x = Math.min(v, max))/>
<return = x valueChange=(v => x = Math.min(v, max))/>
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
<let/x=1/>
<return = x defaultChange=(v => x = v)/>
<return = x valueChange=(v => x = v)/>
2 changes: 1 addition & 1 deletion src/components/const/marko-tag.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"translate": "./translate",
"@default": {
"@value": {
"type": "expression",
"required": true,
"autocomplete": [
Expand Down
2 changes: 1 addition & 1 deletion src/components/effect/marko-tag.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"translate": "./translate",
"@default": {
"@value": {
"type": "expression",
"required": true,
"autocomplete": [
Expand Down
10 changes: 5 additions & 5 deletions src/components/get/index.marko
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@ class {
this.sync = this.sync.bind(this);
}
onInput(input, out) {
var from = input.default;
var from = input.value;
if (!from || !from.render) {
throw new Error(
"Invalid component constructor provided as <get> 'default' attribute. Got: " +
"Invalid component constructor provided as <get> 'value' attribute. Got: " +
from
);
}
Expand All @@ -38,8 +38,8 @@ class {
var prevData = this.data;
this.data = this.provider.input;
if (
this.data.default !== prevData.default ||
this.data.defaultChange !== prevData.defaultChange
this.data.value !== prevData.value ||
this.data.valueChange !== prevData.valueChange
) {
this.forceUpdate();
this.update();
Expand All @@ -48,4 +48,4 @@ class {
}

$ var data = component.data || {};
<${input.renderBody}(data.default, data.defaultChange)/>
<${input.renderBody}(data.value, data.valueChange)/>
2 changes: 1 addition & 1 deletion src/components/get/marko-tag.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"template": "./index.marko",
"transform": "./transform",
"translate": "./translate",
"@default": {
"@value": {
"type": "expression",
"required": true,
"autocomplete": [
Expand Down
4 changes: 2 additions & 2 deletions src/components/let/marko-tag.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"translate": "./translate",
"@default": {
"@value": {
"type": "expression",
"required": true,
"autocomplete": [
Expand All @@ -9,7 +9,7 @@
}
]
},
"@defaultChange": {
"@valueChange": {
"type": "expression",
"autocomplete": [
{
Expand Down
4 changes: 2 additions & 2 deletions src/components/return/index-browser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,8 @@ function createReturn(component: Component) {
if (write) {
if (
curValue &&
(curValue.default !== newVal!.default ||
curValue.defaultChange !== newVal!.defaultChange)
(curValue.value !== newVal!.value ||
curValue.valueChange !== newVal!.valueChange)
) {
component.forceUpdate();
}
Expand Down
Loading

0 comments on commit 3d36e82

Please sign in to comment.