@builder.io/sdk-solid 0.4.5 → 0.5.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 +4 -0
- package/package.json +1 -1
- package/src/blocks/BaseText.jsx +1 -1
- package/src/blocks/button/button.jsx +5 -3
- package/src/blocks/button/component-info.js +16 -22
- package/src/blocks/columns/columns.jsx +12 -21
- package/src/blocks/columns/component-info.js +203 -226
- package/src/blocks/custom-code/component-info.js +19 -25
- package/src/blocks/embed/component-info.js +31 -37
- package/src/blocks/embed/helpers.js +3 -9
- package/src/blocks/form/component-info.js +174 -212
- package/src/blocks/form/form.jsx +1 -268
- package/src/blocks/fragment/component-info.js +1 -3
- package/src/blocks/helpers.js +27 -0
- package/src/blocks/image/component-info.js +105 -133
- package/src/blocks/image/image.helpers.js +3 -5
- package/src/blocks/img/component-info.js +8 -12
- package/src/blocks/img/img.jsx +2 -0
- package/src/blocks/input/component-info.js +29 -57
- package/src/blocks/input/input.jsx +2 -0
- package/src/blocks/raw-text/component-info.js +7 -11
- package/src/blocks/raw-text/raw-text.jsx +2 -2
- package/src/blocks/section/component-info.js +24 -31
- package/src/blocks/section/section.jsx +3 -0
- package/src/blocks/select/component-info.js +34 -48
- package/src/blocks/select/select.jsx +2 -0
- package/src/blocks/submit-button/component-info.js +6 -10
- package/src/blocks/submit-button/submit-button.jsx +3 -1
- package/src/blocks/symbol/component-info.js +30 -37
- package/src/blocks/symbol/symbol.helpers.js +60 -0
- package/src/blocks/symbol/symbol.jsx +31 -68
- package/src/blocks/text/component-info.js +10 -13
- package/src/blocks/text/text.jsx +1 -1
- package/src/blocks/textarea/component-info.js +22 -30
- package/src/blocks/textarea/textarea.jsx +3 -0
- package/src/blocks/video/component-info.js +74 -96
- package/src/blocks/video/video.jsx +1 -0
- package/src/components/{render-block/render-block.helpers.js → block/block.helpers.js} +26 -44
- package/src/components/{render-block/render-block.jsx → block/block.jsx} +65 -80
- package/src/components/{render-block → block/components}/block-styles.jsx +16 -16
- package/src/components/block/components/block-wrapper.jsx +50 -0
- package/src/components/block/components/component-ref/component-ref.helpers.js +41 -0
- package/src/components/block/components/component-ref/component-ref.jsx +58 -0
- package/src/components/block/components/interactive-element.jsx +30 -0
- package/src/components/block/components/repeated-block.jsx +20 -0
- package/src/components/blocks/blocks-wrapper.jsx +66 -0
- package/src/components/blocks/blocks.jsx +48 -0
- package/src/components/{render-content/render-content.jsx → content/components/enable-editor.jsx} +86 -175
- package/src/components/{render-content/components/render-styles.helpers.js → content/components/styles.helpers.js} +6 -7
- package/src/components/{render-content/components/render-styles.jsx → content/components/styles.jsx} +4 -4
- package/src/components/{render-content/render-content.helpers.js → content/content.helpers.js} +15 -15
- package/src/components/content/content.jsx +129 -0
- package/src/components/content/index.js +2 -0
- package/src/components/content/wrap-component-ref.js +2 -0
- package/src/components/{render-content-variants/render-content-variants.jsx → content-variants/content-variants.jsx} +19 -22
- package/src/components/{render-content-variants → content-variants}/helpers.js +28 -40
- package/src/constants/builder-registered-components.js +34 -25
- package/src/constants/device-sizes.js +6 -6
- package/src/constants/sdk-version.js +1 -1
- package/src/context/builder.context.js +1 -1
- package/src/functions/apply-patch-with-mutation.js +66 -0
- package/src/functions/camel-to-kebab-case.js +2 -4
- package/src/functions/evaluate/acorn.js +1595 -0
- package/src/functions/{evaluate.js → evaluate/evaluate.js} +36 -10
- package/src/functions/evaluate/index.js +2 -0
- package/src/functions/evaluate/interpreter.js +2801 -0
- package/src/functions/evaluate/non-node-runtime.js +92 -0
- package/src/functions/evaluate/types.js +0 -0
- package/src/functions/event-handler-name.js +2 -4
- package/src/functions/extract-text-styles.js +4 -12
- package/src/functions/fast-clone.js +2 -4
- package/src/functions/get-block-actions-handler.js +3 -5
- package/src/functions/get-block-actions.js +15 -4
- package/src/functions/get-block-component-options.js +11 -12
- package/src/functions/get-block-properties.js +29 -19
- package/src/functions/get-builder-search-params/index.js +5 -10
- package/src/functions/get-content/generate-content-url.js +17 -19
- package/src/functions/get-content/index.js +43 -29
- package/src/functions/get-fetch.js +1 -3
- package/src/functions/get-global-this.js +1 -3
- package/src/functions/get-processed-block.js +12 -13
- package/src/functions/get-react-native-block-styles.js +11 -12
- package/src/functions/if-target.js +1 -3
- package/src/functions/is-browser.js +1 -3
- package/src/functions/is-editing.js +1 -3
- package/src/functions/is-iframe.js +1 -3
- package/src/functions/is-non-node-server.js +9 -0
- package/src/functions/is-previewing.js +1 -3
- package/src/functions/on-change.js +1 -4
- package/src/functions/register-component.js +34 -42
- package/src/functions/register.js +1 -3
- package/src/functions/sanitize-react-native-block-styles.js +22 -17
- package/src/functions/set-editor-settings.js +1 -3
- package/src/functions/set.js +1 -3
- package/src/functions/track/helpers.js +3 -5
- package/src/functions/track/index.js +45 -43
- package/src/functions/track/interaction.js +11 -7
- package/src/functions/transform-block-properties.js +1 -3
- package/src/functions/transform-block.js +1 -3
- package/src/helpers/ab-tests.js +45 -28
- package/src/helpers/canTrack.js +3 -5
- package/src/helpers/cookie.js +15 -24
- package/src/helpers/css.js +3 -7
- package/src/helpers/flatten.js +15 -18
- package/src/helpers/localStorage.js +1 -4
- package/src/helpers/logger.js +1 -3
- package/src/helpers/nullable.js +2 -4
- package/src/helpers/preview-lru-cache/get.js +8 -0
- package/src/helpers/preview-lru-cache/helpers.js +10 -0
- package/src/helpers/preview-lru-cache/init.js +10 -0
- package/src/helpers/preview-lru-cache/set.js +35 -0
- package/src/helpers/preview-lru-cache/types.js +0 -0
- package/src/helpers/sessionId.js +14 -11
- package/src/helpers/time.js +1 -3
- package/src/helpers/url.js +2 -4
- package/src/helpers/uuid.js +4 -6
- package/src/helpers/visitorId.js +8 -7
- package/src/index-helpers/blocks-exports.js +3 -14
- package/src/index-helpers/top-of-file.js +1 -3
- package/src/index.js +2 -17
- package/src/scripts/init-editing.js +62 -48
- package/src/types/api-version.js +1 -3
- package/src/types/builder-props.js +0 -0
- package/src/blocks/util.js +0 -8
- package/src/components/render-block/render-component.jsx +0 -40
- package/src/components/render-block/render-repeated-block.jsx +0 -16
- package/src/components/render-blocks.jsx +0 -100
- package/src/components/render-content/builder-editing.jsx +0 -5
- package/src/components/render-content/index.js +0 -4
- package/src/components/render-content/wrap-component-ref.js +0 -4
- package/src/functions/evaluate.test.js +0 -17
- package/src/functions/get-builder-search-params/fn.test.js +0 -13
- package/src/functions/get-content/generate-content-url.test.js +0 -97
- package/src/functions/get-processed-block.test.js +0 -34
- package/src/functions/on-change.test.js +0 -19
- package/src/functions/set.test.js +0 -16
- package/src/helpers/url.test.js +0 -21
- /package/src/components/{render-block → block}/types.js +0 -0
- /package/src/components/{render-content/render-content.types.js → content/content.types.js} +0 -0
- /package/src/components/{render-content-variants/render-content-variants.types.js → content-variants/content-variants.types.js} +0 -0
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
import { useContext, Show, For, createSignal } from "solid-js";
|
|
2
|
-
|
|
3
|
-
import { css } from "solid-styled-components";
|
|
4
|
-
|
|
5
|
-
import BuilderContext from "../context/builder.context.js";
|
|
6
|
-
import { isEditing } from "../functions/is-editing.js";
|
|
7
|
-
import BlockStyles from "./render-block/block-styles.jsx";
|
|
8
|
-
import RenderBlock from "./render-block/render-block.jsx";
|
|
9
|
-
|
|
10
|
-
function RenderBlocks(props) {
|
|
11
|
-
function className() {
|
|
12
|
-
return "builder-blocks" + (!props.blocks?.length ? " no-blocks" : "");
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
function onClick() {
|
|
16
|
-
if (isEditing() && !props.blocks?.length) {
|
|
17
|
-
window.parent?.postMessage(
|
|
18
|
-
{
|
|
19
|
-
type: "builder.clickEmptyBlocks",
|
|
20
|
-
data: {
|
|
21
|
-
parentElementId: props.parent,
|
|
22
|
-
dataPath: props.path,
|
|
23
|
-
},
|
|
24
|
-
},
|
|
25
|
-
"*"
|
|
26
|
-
);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
function onMouseEnter() {
|
|
31
|
-
if (isEditing() && !props.blocks?.length) {
|
|
32
|
-
window.parent?.postMessage(
|
|
33
|
-
{
|
|
34
|
-
type: "builder.hoverEmptyBlocks",
|
|
35
|
-
data: {
|
|
36
|
-
parentElementId: props.parent,
|
|
37
|
-
dataPath: props.path,
|
|
38
|
-
},
|
|
39
|
-
},
|
|
40
|
-
"*"
|
|
41
|
-
);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
const builderContext = useContext(BuilderContext);
|
|
46
|
-
|
|
47
|
-
return (
|
|
48
|
-
<div
|
|
49
|
-
class={
|
|
50
|
-
className() +
|
|
51
|
-
" " +
|
|
52
|
-
css({
|
|
53
|
-
display: "flex",
|
|
54
|
-
flexDirection: "column",
|
|
55
|
-
alignItems: "stretch",
|
|
56
|
-
})
|
|
57
|
-
}
|
|
58
|
-
builder-path={props.path}
|
|
59
|
-
builder-parent-id={props.parent}
|
|
60
|
-
dataSet={{
|
|
61
|
-
class: className(),
|
|
62
|
-
}}
|
|
63
|
-
style={props.styleProp}
|
|
64
|
-
onClick={(event) => onClick()}
|
|
65
|
-
onMouseEnter={(event) => onMouseEnter()}
|
|
66
|
-
onKeyPress={(event) => onClick()}
|
|
67
|
-
>
|
|
68
|
-
<Show when={props.blocks}>
|
|
69
|
-
<For each={props.blocks}>
|
|
70
|
-
{(block, _index) => {
|
|
71
|
-
const index = _index();
|
|
72
|
-
return (
|
|
73
|
-
<RenderBlock
|
|
74
|
-
key={"render-block-" + block.id}
|
|
75
|
-
block={block}
|
|
76
|
-
context={builderContext}
|
|
77
|
-
></RenderBlock>
|
|
78
|
-
);
|
|
79
|
-
}}
|
|
80
|
-
</For>
|
|
81
|
-
</Show>
|
|
82
|
-
<Show when={props.blocks}>
|
|
83
|
-
<For each={props.blocks}>
|
|
84
|
-
{(block, _index) => {
|
|
85
|
-
const index = _index();
|
|
86
|
-
return (
|
|
87
|
-
<BlockStyles
|
|
88
|
-
key={"block-style-" + block.id}
|
|
89
|
-
block={block}
|
|
90
|
-
context={builderContext}
|
|
91
|
-
></BlockStyles>
|
|
92
|
-
);
|
|
93
|
-
}}
|
|
94
|
-
</For>
|
|
95
|
-
</Show>
|
|
96
|
-
</div>
|
|
97
|
-
);
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
export default RenderBlocks;
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { flattenState } from "./evaluate";
|
|
2
|
-
describe("flatten state", () => {
|
|
3
|
-
it("should behave normally when no PROTO_STATE", () => {
|
|
4
|
-
const localState = {};
|
|
5
|
-
const rootState = { foo: "bar" };
|
|
6
|
-
const flattened = flattenState(rootState, localState, void 0);
|
|
7
|
-
expect(flattened.foo).toEqual("bar");
|
|
8
|
-
flattened.foo = "baz";
|
|
9
|
-
expect(rootState.foo).toEqual("baz");
|
|
10
|
-
});
|
|
11
|
-
it("should shadow write ", () => {
|
|
12
|
-
const rootState = { foo: "foo" };
|
|
13
|
-
const localState = { foo: "baz" };
|
|
14
|
-
const flattened = flattenState(rootState, localState, void 0);
|
|
15
|
-
expect(() => flattened.foo = "bar").toThrow("Writing to local state is not allowed as it is read-only.");
|
|
16
|
-
});
|
|
17
|
-
});
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { convertSearchParamsToQueryObject, getBuilderSearchParams } from ".";
|
|
2
|
-
const querystring = "someotherValue=jklsjfdal&abc=klfdjklgfds&builder.cachebust=true&builder.preview=page&builder.noCache=true&__builder_editing__=true&builder.overrides.page=037948e52eaf4743afed464f02c70da4&builder.overrides.037948e52eaf4743afed464f02c70da4=037948e52eaf4743afed464f02c70da4&builder.overrides.page%3A%2F=037948e52eaf4743afed464f02c70da4&preview_theme_id=128854393017";
|
|
3
|
-
const url = new URL(`localhost:3000/about-us?${querystring}`);
|
|
4
|
-
describe("Get Builder SearchParams", () => {
|
|
5
|
-
test("correctly converts URLSearchParams to object", () => {
|
|
6
|
-
const output = convertSearchParamsToQueryObject(url.searchParams);
|
|
7
|
-
expect(output).toMatchSnapshot();
|
|
8
|
-
});
|
|
9
|
-
test("correctly extracts all builder params from a query object", () => {
|
|
10
|
-
const output = getBuilderSearchParams(convertSearchParamsToQueryObject(url.searchParams));
|
|
11
|
-
expect(output).toMatchSnapshot();
|
|
12
|
-
});
|
|
13
|
-
});
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
import { generateContentUrl } from "./generate-content-url";
|
|
2
|
-
const testKey = "YJIGb4i01jvw0SRdL5Bt";
|
|
3
|
-
const testModel = "page";
|
|
4
|
-
const testId = "c1b81bab59704599b997574eb0736def";
|
|
5
|
-
const options = {
|
|
6
|
-
cachebust: "true",
|
|
7
|
-
noCache: "true",
|
|
8
|
-
"overrides.037948e52eaf4743afed464f02c70da4": "037948e52eaf4743afed464f02c70da4",
|
|
9
|
-
"overrides.page": "037948e52eaf4743afed464f02c70da4",
|
|
10
|
-
"overrides.page:/": "037948e52eaf4743afed464f02c70da4",
|
|
11
|
-
preview: "page"
|
|
12
|
-
};
|
|
13
|
-
describe("Generate Content URL", () => {
|
|
14
|
-
test("generates the proper value for a simple query", () => {
|
|
15
|
-
const output = generateContentUrl({
|
|
16
|
-
apiKey: testKey,
|
|
17
|
-
model: testModel,
|
|
18
|
-
query: { id: testId }
|
|
19
|
-
});
|
|
20
|
-
expect(output).toMatchSnapshot();
|
|
21
|
-
});
|
|
22
|
-
test("Handles overrides correctly", () => {
|
|
23
|
-
const output = generateContentUrl({
|
|
24
|
-
apiKey: testKey,
|
|
25
|
-
model: testModel,
|
|
26
|
-
query: { id: testId },
|
|
27
|
-
options
|
|
28
|
-
});
|
|
29
|
-
expect(output).toMatchSnapshot();
|
|
30
|
-
});
|
|
31
|
-
test("generate content url with apiVersion as default", () => {
|
|
32
|
-
const output = generateContentUrl({
|
|
33
|
-
apiKey: testKey,
|
|
34
|
-
model: testModel,
|
|
35
|
-
query: { id: testId },
|
|
36
|
-
options
|
|
37
|
-
});
|
|
38
|
-
expect(output).toMatchSnapshot();
|
|
39
|
-
});
|
|
40
|
-
test("generate content url with apiVersion as v2", () => {
|
|
41
|
-
const output = generateContentUrl({
|
|
42
|
-
apiKey: testKey,
|
|
43
|
-
model: testModel,
|
|
44
|
-
query: { id: testId },
|
|
45
|
-
options,
|
|
46
|
-
apiVersion: "v2"
|
|
47
|
-
});
|
|
48
|
-
expect(output).toMatchSnapshot();
|
|
49
|
-
});
|
|
50
|
-
test("generate content url with apiVersion as v3", () => {
|
|
51
|
-
const output = generateContentUrl({
|
|
52
|
-
apiKey: testKey,
|
|
53
|
-
model: testModel,
|
|
54
|
-
query: { id: testId },
|
|
55
|
-
options,
|
|
56
|
-
apiVersion: "v3"
|
|
57
|
-
});
|
|
58
|
-
expect(output).toMatchSnapshot();
|
|
59
|
-
});
|
|
60
|
-
test("throw error when trying to generate content url with apiVersion as v1", () => {
|
|
61
|
-
expect(() => {
|
|
62
|
-
generateContentUrl({
|
|
63
|
-
apiKey: testKey,
|
|
64
|
-
model: testModel,
|
|
65
|
-
query: { id: testId },
|
|
66
|
-
options,
|
|
67
|
-
apiVersion: "v1"
|
|
68
|
-
});
|
|
69
|
-
}).toThrow(`Invalid apiVersion: expected 'v2' or 'v3', received 'v1'`);
|
|
70
|
-
});
|
|
71
|
-
test("throw error when trying to generate content url with an invalid apiVersion value", () => {
|
|
72
|
-
expect(() => {
|
|
73
|
-
generateContentUrl({
|
|
74
|
-
apiKey: testKey,
|
|
75
|
-
model: testModel,
|
|
76
|
-
query: { id: testId },
|
|
77
|
-
options,
|
|
78
|
-
apiVersion: "INVALID_API_VERSION"
|
|
79
|
-
});
|
|
80
|
-
}).toThrow(`Invalid apiVersion: expected 'v2' or 'v3', received 'INVALID_API_VERSION'`);
|
|
81
|
-
});
|
|
82
|
-
test("generate content url with enrich option true", () => {
|
|
83
|
-
const output = generateContentUrl({
|
|
84
|
-
apiKey: testKey,
|
|
85
|
-
model: testModel,
|
|
86
|
-
enrich: true
|
|
87
|
-
});
|
|
88
|
-
expect(output).toMatchSnapshot();
|
|
89
|
-
});
|
|
90
|
-
test("generate content url with enrich option not present", () => {
|
|
91
|
-
const output = generateContentUrl({
|
|
92
|
-
apiKey: testKey,
|
|
93
|
-
model: testModel
|
|
94
|
-
});
|
|
95
|
-
expect(output).toMatchSnapshot();
|
|
96
|
-
});
|
|
97
|
-
});
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { getProcessedBlock } from "./get-processed-block.js";
|
|
2
|
-
test("Can process bindings", () => {
|
|
3
|
-
var _a, _b, _c, _d, _e, _f;
|
|
4
|
-
const block = {
|
|
5
|
-
"@type": "@builder.io/sdk:Element",
|
|
6
|
-
properties: {
|
|
7
|
-
foo: "bar"
|
|
8
|
-
},
|
|
9
|
-
bindings: {
|
|
10
|
-
"properties.foo": '"baz"',
|
|
11
|
-
"responsiveStyles.large.zIndex": "1 + 1",
|
|
12
|
-
"properties.test": "state.test",
|
|
13
|
-
"properties.block": `
|
|
14
|
-
const foo = 'bar';
|
|
15
|
-
return foo;
|
|
16
|
-
`,
|
|
17
|
-
"properties.isEditing": "builder.isEditing"
|
|
18
|
-
}
|
|
19
|
-
};
|
|
20
|
-
const processed = getProcessedBlock({
|
|
21
|
-
block,
|
|
22
|
-
context: {},
|
|
23
|
-
rootState: { test: "hello" },
|
|
24
|
-
rootSetState: void 0,
|
|
25
|
-
localState: void 0,
|
|
26
|
-
shouldEvaluateBindings: true
|
|
27
|
-
});
|
|
28
|
-
expect(processed).not.toEqual(block);
|
|
29
|
-
expect((_a = processed.properties) == null ? void 0 : _a.foo).toEqual("baz");
|
|
30
|
-
expect((_b = processed.properties) == null ? void 0 : _b.test).toEqual("hello");
|
|
31
|
-
expect((_c = processed.properties) == null ? void 0 : _c.block).toEqual("bar");
|
|
32
|
-
expect((_d = processed.properties) == null ? void 0 : _d.isEditing).toEqual(false);
|
|
33
|
-
expect((_f = (_e = processed.responsiveStyles) == null ? void 0 : _e.large) == null ? void 0 : _f.zIndex).toEqual(2);
|
|
34
|
-
});
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { onChange } from "./on-change.js";
|
|
2
|
-
test("onChange can observe a shallow change", () => {
|
|
3
|
-
let changeHappend = false;
|
|
4
|
-
const obj = onChange({ foo: "hi" }, () => changeHappend = true);
|
|
5
|
-
obj.foo = "yo";
|
|
6
|
-
expect(changeHappend).toBe(true);
|
|
7
|
-
});
|
|
8
|
-
test("onChange can observe a deep change", () => {
|
|
9
|
-
let changeHappend = false;
|
|
10
|
-
const obj = onChange({ foo: { bar: "hi" } }, () => changeHappend = true);
|
|
11
|
-
obj.foo.bar = "yo";
|
|
12
|
-
expect(changeHappend).toBe(true);
|
|
13
|
-
});
|
|
14
|
-
test("Smoke test: callback is not fired if no properties updated", () => {
|
|
15
|
-
let changeHappend = false;
|
|
16
|
-
const obj = onChange({ foo: { bar: "hi" } }, () => changeHappend = true);
|
|
17
|
-
obj.foo.bar;
|
|
18
|
-
expect(changeHappend).toBe(false);
|
|
19
|
-
});
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { set } from "./set.js";
|
|
2
|
-
test("can shallow set a property", () => {
|
|
3
|
-
const obj = { foo: "bar" };
|
|
4
|
-
set(obj, "foo", "baz");
|
|
5
|
-
expect(obj.foo).toBe("baz");
|
|
6
|
-
});
|
|
7
|
-
test("can deeply set a property", () => {
|
|
8
|
-
const obj = { foo: "bar" };
|
|
9
|
-
set(obj, "foo.bar", "baz");
|
|
10
|
-
expect(obj.foo.bar).toBe("baz");
|
|
11
|
-
});
|
|
12
|
-
test("can deeply create arrays", () => {
|
|
13
|
-
const obj = { foo: "bar" };
|
|
14
|
-
set(obj, "foo.bar.0", "hi");
|
|
15
|
-
expect(obj.foo.bar).toEqual(["hi"]);
|
|
16
|
-
});
|
package/src/helpers/url.test.js
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { getTopLevelDomain } from "./url.js";
|
|
2
|
-
describe("getTopLevelDomain", () => {
|
|
3
|
-
test("handles root domain", () => {
|
|
4
|
-
const output = getTopLevelDomain("example.com");
|
|
5
|
-
expect(output).toBe("example.com");
|
|
6
|
-
});
|
|
7
|
-
test("handles subdomain", () => {
|
|
8
|
-
const output = getTopLevelDomain("wwww.example.com");
|
|
9
|
-
expect(output).toBe("example.com");
|
|
10
|
-
});
|
|
11
|
-
test("handles subdomain with long suffix", () => {
|
|
12
|
-
const output = getTopLevelDomain("www.example.co.uk");
|
|
13
|
-
expect(output).toBe("example.co.uk");
|
|
14
|
-
});
|
|
15
|
-
test("handles localhost", () => {
|
|
16
|
-
const output = getTopLevelDomain("localhost");
|
|
17
|
-
expect(output).toBe("localhost");
|
|
18
|
-
const output2 = getTopLevelDomain("127.0.0.1");
|
|
19
|
-
expect(output2).toBe("127.0.0.1");
|
|
20
|
-
});
|
|
21
|
-
});
|
|
File without changes
|
|
File without changes
|