@alloy-js/core 0.10.0 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +28 -0
- package/dist/src/binder.d.ts.map +1 -1
- package/dist/src/binder.js +100 -19
- package/dist/src/code.js +1 -2
- package/dist/src/components/Block.js +2 -5
- package/dist/src/components/Declaration.js +2 -4
- package/dist/src/components/For.d.ts +2 -2
- package/dist/src/components/For.d.ts.map +1 -1
- package/dist/src/components/For.js +1 -2
- package/dist/src/components/Indent.js +2 -4
- package/dist/src/components/List.js +2 -5
- package/dist/src/components/MemberDeclaration.js +2 -4
- package/dist/src/components/MemberName.js +1 -2
- package/dist/src/components/MemberScope.js +2 -4
- package/dist/src/components/Name.js +1 -2
- package/dist/src/components/Output.js +2 -4
- package/dist/src/components/Prose.js +1 -2
- package/dist/src/components/ReferenceOrContent.d.ts +8 -0
- package/dist/src/components/ReferenceOrContent.d.ts.map +1 -0
- package/dist/src/components/ReferenceOrContent.js +11 -0
- package/dist/src/components/Scope.js +2 -4
- package/dist/src/components/Show.js +1 -2
- package/dist/src/components/SourceDirectory.js +2 -4
- package/dist/src/components/SourceFile.js +2 -5
- package/dist/src/components/StatementList.js +2 -4
- package/dist/src/components/Switch.d.ts +1 -1
- package/dist/src/components/Switch.d.ts.map +1 -1
- package/dist/src/components/Switch.js +1 -2
- package/dist/src/components/Wrap.js +2 -4
- package/dist/src/components/index.d.ts +1 -0
- package/dist/src/components/index.d.ts.map +1 -1
- package/dist/src/components/index.js +2 -2
- package/dist/src/components/stc/index.d.ts +1 -0
- package/dist/src/components/stc/index.d.ts.map +1 -1
- package/dist/src/components/stc/index.js +2 -2
- package/dist/src/components/stc/sti.js +1 -2
- package/dist/src/context/assignment.js +1 -2
- package/dist/src/context/binder.js +1 -2
- package/dist/src/context/declaration.js +1 -2
- package/dist/src/context/index.js +1 -2
- package/dist/src/context/member-declaration.js +1 -2
- package/dist/src/context/member-scope.js +1 -2
- package/dist/src/context/name-policy.js +1 -2
- package/dist/src/context/scope.js +1 -2
- package/dist/src/context/source-directory.js +1 -2
- package/dist/src/context/source-file.js +1 -2
- package/dist/src/context.js +1 -2
- package/dist/src/debug.js +13 -15
- package/dist/src/index.browser.js +1 -2
- package/dist/src/index.js +1 -2
- package/dist/src/jsx-runtime.d.ts +1 -1
- package/dist/src/jsx-runtime.d.ts.map +1 -1
- package/dist/src/jsx-runtime.js +10 -5
- package/dist/src/name-policy.js +1 -2
- package/dist/src/refkey.js +1 -2
- package/dist/src/render.d.ts.map +1 -1
- package/dist/src/render.js +6 -2
- package/dist/src/scheduler.d.ts +8 -0
- package/dist/src/scheduler.d.ts.map +1 -0
- package/dist/src/scheduler.js +17 -0
- package/dist/src/slot.js +1 -2
- package/dist/src/stc.js +1 -2
- package/dist/src/sti.js +1 -2
- package/dist/src/tap.js +1 -2
- package/dist/src/tsdoc-metadata.json +1 -1
- package/dist/src/utils.js +2 -4
- package/dist/src/write-output.browser.js +1 -2
- package/dist/src/write-output.js +1 -2
- package/dist/test/browser-build.test.js +85 -0
- package/dist/test/children.test.js +27 -0
- package/dist/test/components/block.test.js +45 -0
- package/dist/test/components/declaration.test.js +32 -0
- package/dist/test/components/list.test.js +86 -0
- package/dist/test/components/prose.test.js +25 -0
- package/dist/test/components/reference-or-content.test.d.ts +2 -0
- package/dist/test/components/reference-or-content.test.d.ts.map +1 -0
- package/dist/test/components/reference-or-content.test.js +149 -0
- package/dist/test/components/slot.test.js +134 -0
- package/dist/test/components/source-file.test.js +64 -0
- package/dist/test/components/wrap.test.js +35 -0
- package/dist/test/control-flow/for.test.js +219 -0
- package/dist/test/control-flow/match.test.js +67 -0
- package/dist/test/control-flow/show.test.js +29 -0
- package/dist/test/name-policy.test.js +19 -0
- package/dist/test/props-with-defaults.test.js +93 -0
- package/dist/test/reactivity/circular-reactives.test.d.ts +2 -0
- package/dist/test/reactivity/circular-reactives.test.d.ts.map +1 -0
- package/dist/test/reactivity/circular-reactives.test.js +31 -0
- package/dist/test/reactivity/cleanup.test.js +82 -0
- package/dist/test/reactivity/memo.test.js +16 -0
- package/dist/test/reactivity/ref-rendering.test.js +37 -0
- package/dist/test/reactivity/test.test.js +61 -0
- package/dist/test/reactivity/untrack.test.js +26 -0
- package/dist/test/refkey.test.js +25 -0
- package/dist/test/rendering/basic.test.js +96 -0
- package/dist/test/rendering/code.test.js +55 -0
- package/dist/test/rendering/formatting.test.js +402 -0
- package/dist/test/rendering/indent.test.js +90 -0
- package/dist/test/rendering/memoization.test.js +27 -0
- package/dist/test/rendering/refkeys.test.js +32 -0
- package/dist/test/split-props.test.js +77 -0
- package/dist/test/stc.test.js +34 -0
- package/dist/test/symbols.test.js +877 -0
- package/dist/test/utils.test.d.ts.map +1 -1
- package/dist/test/utils.test.js +223 -0
- package/dist/testing/extend-expect.js +1 -2
- package/dist/testing/index.js +1 -2
- package/dist/testing/render.js +1 -2
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +14 -22
- package/src/binder.ts +100 -17
- package/src/components/For.tsx +6 -6
- package/src/components/ReferenceOrContent.tsx +22 -0
- package/src/components/index.tsx +1 -0
- package/src/components/stc/index.ts +1 -0
- package/src/debug.ts +12 -13
- package/src/jsx-runtime.ts +24 -14
- package/src/render.ts +5 -0
- package/src/scheduler.ts +24 -0
- package/temp/api.json +216 -15
- package/test/components/declaration.test.tsx +2 -0
- package/test/components/list.test.tsx +0 -1
- package/test/components/reference-or-content.test.tsx +138 -0
- package/test/control-flow/for.test.tsx +34 -4
- package/test/reactivity/circular-reactives.test.tsx +32 -0
- package/test/reactivity/cleanup.test.tsx +5 -0
- package/test/reactivity/untrack.test.ts +3 -0
- package/test/rendering/memoization.test.tsx +2 -0
- package/test/symbols.test.ts +392 -13
- package/test/utils.test.tsx +2 -0
- package/babel.config.cjs +0 -4
- package/dist/src/binder.js.map +0 -1
- package/dist/src/code.js.map +0 -1
- package/dist/src/components/Block.js.map +0 -1
- package/dist/src/components/Declaration.js.map +0 -1
- package/dist/src/components/For.js.map +0 -1
- package/dist/src/components/Indent.js.map +0 -1
- package/dist/src/components/List.js.map +0 -1
- package/dist/src/components/MemberDeclaration.js.map +0 -1
- package/dist/src/components/MemberName.js.map +0 -1
- package/dist/src/components/MemberScope.js.map +0 -1
- package/dist/src/components/Name.js.map +0 -1
- package/dist/src/components/Output.js.map +0 -1
- package/dist/src/components/Prose.js.map +0 -1
- package/dist/src/components/Scope.js.map +0 -1
- package/dist/src/components/Show.js.map +0 -1
- package/dist/src/components/SourceDirectory.js.map +0 -1
- package/dist/src/components/SourceFile.js.map +0 -1
- package/dist/src/components/StatementList.js.map +0 -1
- package/dist/src/components/Switch.js.map +0 -1
- package/dist/src/components/Wrap.js.map +0 -1
- package/dist/src/components/index.js.map +0 -1
- package/dist/src/components/stc/index.js.map +0 -1
- package/dist/src/components/stc/sti.js.map +0 -1
- package/dist/src/context/assignment.js.map +0 -1
- package/dist/src/context/binder.js.map +0 -1
- package/dist/src/context/declaration.js.map +0 -1
- package/dist/src/context/index.js.map +0 -1
- package/dist/src/context/member-declaration.js.map +0 -1
- package/dist/src/context/member-scope.js.map +0 -1
- package/dist/src/context/name-policy.js.map +0 -1
- package/dist/src/context/scope.js.map +0 -1
- package/dist/src/context/source-directory.js.map +0 -1
- package/dist/src/context/source-file.js.map +0 -1
- package/dist/src/context.js.map +0 -1
- package/dist/src/debug.js.map +0 -1
- package/dist/src/index.browser.js.map +0 -1
- package/dist/src/index.js.map +0 -1
- package/dist/src/jsx-runtime.js.map +0 -1
- package/dist/src/name-policy.js.map +0 -1
- package/dist/src/refkey.js.map +0 -1
- package/dist/src/render.js.map +0 -1
- package/dist/src/slot.js.map +0 -1
- package/dist/src/stc.js.map +0 -1
- package/dist/src/sti.js.map +0 -1
- package/dist/src/tap.js.map +0 -1
- package/dist/src/utils.js.map +0 -1
- package/dist/src/write-output.browser.js.map +0 -1
- package/dist/src/write-output.js.map +0 -1
- package/dist/testing/extend-expect.js.map +0 -1
- package/dist/testing/index.js.map +0 -1
- package/dist/testing/render.js.map +0 -1
- package/dist/testing/vitest.d.js.map +0 -1
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { createComponent as _$createComponent } from "@alloy-js/core/jsx-runtime";
|
|
2
|
+
import { refkey } from "@alloy-js/core";
|
|
3
|
+
import { SourceFile } from "@alloy-js/core/stc";
|
|
4
|
+
import { expect, it } from "vitest";
|
|
5
|
+
import "../../testing/extend-expect.js";
|
|
6
|
+
it("is rendered properly in the tree", () => {
|
|
7
|
+
const key = refkey("foo");
|
|
8
|
+
function Reference(props) {
|
|
9
|
+
expect(props.refkey).toEqual(key);
|
|
10
|
+
return "Reference";
|
|
11
|
+
}
|
|
12
|
+
expect(_$createComponent(SourceFile, {
|
|
13
|
+
filetype: "typescript",
|
|
14
|
+
path: "foo.ts",
|
|
15
|
+
reference: Reference,
|
|
16
|
+
children: key
|
|
17
|
+
})).toRenderTo("Reference");
|
|
18
|
+
});
|
|
19
|
+
it("is rendered properly in the tree with code", () => {
|
|
20
|
+
const key = refkey("foo");
|
|
21
|
+
function Reference(props) {
|
|
22
|
+
expect(props.refkey).toEqual(key);
|
|
23
|
+
return "Reference";
|
|
24
|
+
}
|
|
25
|
+
expect(SourceFile({
|
|
26
|
+
filetype: "typescript",
|
|
27
|
+
path: "foo.ts",
|
|
28
|
+
reference: Reference
|
|
29
|
+
}).code`
|
|
30
|
+
${key}
|
|
31
|
+
`).toRenderTo("Reference");
|
|
32
|
+
});
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { effect, reactive } from "@vue/reactivity";
|
|
2
|
+
import { expect, it, vi } from "vitest";
|
|
3
|
+
import { splitProps } from "../src/jsx-runtime.js";
|
|
4
|
+
it("splits regular object props", () => {
|
|
5
|
+
const props = {
|
|
6
|
+
a: 1,
|
|
7
|
+
b: 2,
|
|
8
|
+
c: 3
|
|
9
|
+
};
|
|
10
|
+
const [ab, rest] = splitProps(props, ["a", "b"]);
|
|
11
|
+
expect(ab).toEqual({
|
|
12
|
+
a: 1,
|
|
13
|
+
b: 2
|
|
14
|
+
});
|
|
15
|
+
expect(rest).toEqual({
|
|
16
|
+
c: 3
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
it("splits props with getters without invoking them", () => {
|
|
20
|
+
const getterA = vi.fn(() => 1);
|
|
21
|
+
const getterB = vi.fn(() => 2);
|
|
22
|
+
const props = {
|
|
23
|
+
get a() {
|
|
24
|
+
return getterA();
|
|
25
|
+
},
|
|
26
|
+
get b() {
|
|
27
|
+
return getterB();
|
|
28
|
+
},
|
|
29
|
+
c: 3
|
|
30
|
+
};
|
|
31
|
+
const [ab, rest] = splitProps(props, ["a", "b"]);
|
|
32
|
+
expect(getterA).not.toHaveBeenCalled();
|
|
33
|
+
expect(getterB).not.toHaveBeenCalled();
|
|
34
|
+
expect(ab.a).toBe(1);
|
|
35
|
+
expect(getterA).toHaveBeenCalledTimes(1);
|
|
36
|
+
expect(ab.b).toBe(2);
|
|
37
|
+
expect(getterB).toHaveBeenCalledTimes(1);
|
|
38
|
+
expect(rest).toEqual({
|
|
39
|
+
c: 3
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
it("splits reactive props without observing them initially", () => {
|
|
43
|
+
const props = reactive({
|
|
44
|
+
a: 1,
|
|
45
|
+
b: 2,
|
|
46
|
+
c: 3
|
|
47
|
+
});
|
|
48
|
+
const [ab, rest] = splitProps(props, ["a", "b"]);
|
|
49
|
+
expect(ab.a).toBe(1);
|
|
50
|
+
expect(ab.b).toBe(2);
|
|
51
|
+
expect(rest.c).toBe(3);
|
|
52
|
+
});
|
|
53
|
+
it("ensures effect is not triggered by splitProps but by accessing reactive props", () => {
|
|
54
|
+
const props = reactive({
|
|
55
|
+
a: 1,
|
|
56
|
+
b: 2,
|
|
57
|
+
c: 3
|
|
58
|
+
});
|
|
59
|
+
let splits;
|
|
60
|
+
const splitEffect = vi.fn(() => {
|
|
61
|
+
splits = splitProps(props, ["a", "b"]);
|
|
62
|
+
});
|
|
63
|
+
effect(splitEffect);
|
|
64
|
+
expect(splitEffect).toHaveBeenCalledTimes(1);
|
|
65
|
+
const observeEffect = vi.fn(() => {
|
|
66
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-expressions
|
|
67
|
+
splits[0].a;
|
|
68
|
+
});
|
|
69
|
+
effect(observeEffect);
|
|
70
|
+
expect(observeEffect).toHaveBeenCalledTimes(1);
|
|
71
|
+
props.a = 2;
|
|
72
|
+
expect(splitEffect).toHaveBeenCalledTimes(1);
|
|
73
|
+
expect(observeEffect).toHaveBeenCalledTimes(2);
|
|
74
|
+
splits[0].a = 3;
|
|
75
|
+
expect(splitEffect).toHaveBeenCalledTimes(1);
|
|
76
|
+
expect(observeEffect).toHaveBeenCalledTimes(3);
|
|
77
|
+
});
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { stc } from "@alloy-js/core";
|
|
2
|
+
import { hbr, indent, Indent } from "@alloy-js/core/stc";
|
|
3
|
+
import { describe, expect, it } from "vitest";
|
|
4
|
+
import "../testing/extend-expect.js";
|
|
5
|
+
it("is applied by output", () => {
|
|
6
|
+
function Foo() {
|
|
7
|
+
return "Foo component";
|
|
8
|
+
}
|
|
9
|
+
const FooStc = stc(Foo);
|
|
10
|
+
expect([FooStc(), Indent().code`
|
|
11
|
+
child!
|
|
12
|
+
child2!
|
|
13
|
+
`]).toRenderTo(`
|
|
14
|
+
Foo component
|
|
15
|
+
child!
|
|
16
|
+
child2!
|
|
17
|
+
`);
|
|
18
|
+
});
|
|
19
|
+
describe("works with formatting", () => {
|
|
20
|
+
it("handles lines", () => {
|
|
21
|
+
expect(["foo", hbr(), "bar", hbr(), "baz"]).toRenderTo(`
|
|
22
|
+
foo
|
|
23
|
+
bar
|
|
24
|
+
baz
|
|
25
|
+
`);
|
|
26
|
+
});
|
|
27
|
+
it("handles indents", () => {
|
|
28
|
+
expect(["foo", indent().children([hbr(), "bar", hbr(), "baz"])]).toRenderTo(`
|
|
29
|
+
foo
|
|
30
|
+
bar
|
|
31
|
+
baz
|
|
32
|
+
`);
|
|
33
|
+
});
|
|
34
|
+
});
|