@prosopo/procaptcha-react 2.11.3 → 2.13.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/.turbo/turbo-build$colon$cjs.log +15 -15
- package/.turbo/turbo-build$colon$tsc.log +22 -22
- package/.turbo/turbo-build.log +16 -15
- package/CHANGELOG.md +79 -0
- package/dist/cjs/components/button.cjs +98 -0
- package/dist/cjs/components/captchaComponent.cjs +225 -0
- package/dist/cjs/components/captchaWidget.cjs +210 -0
- package/dist/cjs/components/collector.cjs +49 -0
- package/dist/cjs/components/index.cjs +15 -6
- package/dist/cjs/components/modal.cjs +39 -0
- package/dist/cjs/components/procaptcha.cjs +23 -0
- package/dist/cjs/components/procaptchaWidget.cjs +166 -0
- package/dist/cjs/index.cjs +15 -6
- package/dist/cjs/util/index.cjs +6 -4
- package/dist/components/button.d.ts +9 -0
- package/dist/components/button.d.ts.map +1 -0
- package/dist/components/button.js +98 -0
- package/dist/components/button.js.map +1 -0
- package/dist/components/{CaptchaComponent.d.ts → captchaComponent.d.ts} +5 -3
- package/dist/components/captchaComponent.d.ts.map +1 -0
- package/dist/components/captchaComponent.js +225 -0
- package/dist/components/captchaComponent.js.map +1 -0
- package/dist/components/{CaptchaWidget.d.ts → captchaWidget.d.ts} +3 -2
- package/dist/components/captchaWidget.d.ts.map +1 -0
- package/dist/components/captchaWidget.js +210 -0
- package/dist/components/captchaWidget.js.map +1 -0
- package/dist/components/collector.d.ts +5 -4
- package/dist/components/collector.d.ts.map +1 -1
- package/dist/components/collector.js +46 -24
- package/dist/components/collector.js.map +1 -1
- package/dist/components/index.d.ts +7 -5
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +8 -4
- package/dist/components/index.js.map +1 -1
- package/dist/components/modal.d.ts +14 -0
- package/dist/components/modal.d.ts.map +1 -0
- package/dist/components/modal.js +39 -0
- package/dist/components/modal.js.map +1 -0
- package/dist/components/procaptcha.d.ts +7 -0
- package/dist/components/procaptcha.d.ts.map +1 -0
- package/dist/components/procaptcha.js +22 -0
- package/dist/components/procaptcha.js.map +1 -0
- package/dist/components/procaptchaWidget.d.ts +7 -0
- package/dist/components/procaptchaWidget.d.ts.map +1 -0
- package/dist/components/procaptchaWidget.js +166 -0
- package/dist/components/procaptchaWidget.js.map +1 -0
- package/dist/index.js +8 -4
- package/dist/tests/button.unit.test.d.ts.map +1 -1
- package/dist/tests/button.unit.test.js +99 -50
- package/dist/tests/button.unit.test.js.map +1 -1
- package/dist/tests/captchaComponent.unit.test.d.ts.map +1 -1
- package/dist/tests/captchaComponent.unit.test.js +35 -13
- package/dist/tests/captchaComponent.unit.test.js.map +1 -1
- package/dist/tests/captchaWidget.unit.test.d.ts.map +1 -1
- package/dist/tests/captchaWidget.unit.test.js +125 -12
- package/dist/tests/captchaWidget.unit.test.js.map +1 -1
- package/dist/tests/collector.unit.test.d.ts.map +1 -1
- package/dist/tests/collector.unit.test.js +43 -10
- package/dist/tests/collector.unit.test.js.map +1 -1
- package/dist/tests/harness.d.ts +2 -0
- package/dist/tests/harness.d.ts.map +1 -1
- package/dist/tests/harness.js +7 -0
- package/dist/tests/harness.js.map +1 -1
- package/dist/tests/modal.unit.test.d.ts.map +1 -1
- package/dist/tests/modal.unit.test.js +45 -16
- package/dist/tests/modal.unit.test.js.map +1 -1
- package/dist/tests/procaptcha.unit.test.d.ts.map +1 -1
- package/dist/tests/procaptcha.unit.test.js +37 -15
- package/dist/tests/procaptcha.unit.test.js.map +1 -1
- package/dist/tests/procaptchaReact.test-d.js +8 -6
- package/dist/tests/procaptchaReact.test-d.js.map +1 -1
- package/dist/tests/procaptchaWidget.unit.test.d.ts.map +1 -1
- package/dist/tests/procaptchaWidget.unit.test.js +121 -96
- package/dist/tests/procaptchaWidget.unit.test.js.map +1 -1
- package/dist/tests/render.d.ts +6 -7
- package/dist/tests/render.d.ts.map +1 -1
- package/dist/tests/render.js +23 -30
- package/dist/tests/render.js.map +1 -1
- package/dist/util/index.d.ts +8 -7
- package/dist/util/index.d.ts.map +1 -1
- package/dist/util/index.js +6 -4
- package/dist/util/index.js.map +1 -1
- package/package.json +9 -14
- package/vite.test.config.ts +1 -2
- package/dist/cjs/_virtual/_rolldown/runtime.cjs +0 -23
- package/dist/cjs/components/Button.cjs +0 -81
- package/dist/cjs/components/CaptchaComponent.cjs +0 -171
- package/dist/cjs/components/CaptchaWidget.cjs +0 -129
- package/dist/cjs/components/Modal.cjs +0 -35
- package/dist/cjs/components/Procaptcha.cjs +0 -7
- package/dist/cjs/components/ProcaptchaWidget.cjs +0 -168
- package/dist/components/Button.d.ts +0 -11
- package/dist/components/Button.d.ts.map +0 -1
- package/dist/components/Button.js +0 -81
- package/dist/components/Button.js.map +0 -1
- package/dist/components/CaptchaComponent.d.ts.map +0 -1
- package/dist/components/CaptchaComponent.js +0 -171
- package/dist/components/CaptchaComponent.js.map +0 -1
- package/dist/components/CaptchaWidget.d.ts.map +0 -1
- package/dist/components/CaptchaWidget.js +0 -129
- package/dist/components/CaptchaWidget.js.map +0 -1
- package/dist/components/Modal.d.ts +0 -13
- package/dist/components/Modal.d.ts.map +0 -1
- package/dist/components/Modal.js +0 -33
- package/dist/components/Modal.js.map +0 -1
- package/dist/components/Procaptcha.d.ts +0 -4
- package/dist/components/Procaptcha.d.ts.map +0 -1
- package/dist/components/Procaptcha.js +0 -7
- package/dist/components/Procaptcha.js.map +0 -1
- package/dist/components/ProcaptchaWidget.d.ts +0 -4
- package/dist/components/ProcaptchaWidget.d.ts.map +0 -1
- package/dist/components/ProcaptchaWidget.js +0 -168
- package/dist/components/ProcaptchaWidget.js.map +0 -1
- package/dist/tests/setup.d.ts +0 -5
- package/dist/tests/setup.d.ts.map +0 -1
- package/dist/tests/setup.js +0 -3
- package/dist/tests/setup.js.map +0 -1
|
@@ -1,43 +1,72 @@
|
|
|
1
|
-
import { jsx as _jsx } from "@emotion/react/jsx-runtime";
|
|
2
1
|
import { afterEach, beforeEach, describe, expect, test } from "vitest";
|
|
3
|
-
import
|
|
2
|
+
import { mountModal } from "../components/modal.js";
|
|
4
3
|
import { mount } from "./render.js";
|
|
5
4
|
let mounted;
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
let modal;
|
|
6
|
+
const render = (show, children = "challenge") => {
|
|
7
|
+
if (!modal) {
|
|
8
|
+
modal = mountModal({ show });
|
|
9
|
+
if ("" !== children) {
|
|
10
|
+
const paragraph = document.createElement("p");
|
|
11
|
+
paragraph.textContent = children;
|
|
12
|
+
modal.content.appendChild(paragraph);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
modal.update({ show });
|
|
17
|
+
}
|
|
18
|
+
return modal;
|
|
8
19
|
};
|
|
20
|
+
const OUTER_SELECTOR = '[data-cy="challenge-surface"]';
|
|
21
|
+
const PANEL_SELECTOR = '[data-cy="challenge-content"]';
|
|
9
22
|
const outer = () => {
|
|
10
|
-
const element = document.querySelector(
|
|
23
|
+
const element = document.querySelector(OUTER_SELECTOR);
|
|
11
24
|
if (!element)
|
|
12
25
|
throw new Error("expected the modal to be rendered");
|
|
13
26
|
return element;
|
|
14
27
|
};
|
|
15
28
|
beforeEach(() => {
|
|
16
29
|
mounted = mount();
|
|
30
|
+
modal = undefined;
|
|
17
31
|
});
|
|
18
32
|
afterEach(() => {
|
|
33
|
+
modal?.destroy();
|
|
19
34
|
mounted.unmount();
|
|
20
35
|
});
|
|
21
36
|
describe("where the modal renders", () => {
|
|
22
37
|
test("attaches itself to the document body, not to the widget", () => {
|
|
23
38
|
render(true);
|
|
24
39
|
expect(outer().parentElement).toBe(document.body);
|
|
25
|
-
expect(mounted.container.querySelector(
|
|
40
|
+
expect(mounted.container.querySelector(OUTER_SELECTOR)).toBeNull();
|
|
26
41
|
});
|
|
27
42
|
test("renders its children inside the inner panel", () => {
|
|
28
|
-
render(true);
|
|
29
|
-
|
|
30
|
-
expect(inner
|
|
43
|
+
const inner = render(true).content;
|
|
44
|
+
expect(inner.textContent).toBe("challenge");
|
|
45
|
+
expect(outer().contains(inner)).toBe(true);
|
|
31
46
|
});
|
|
32
47
|
test("renders an empty panel when there is nothing to show", () => {
|
|
33
|
-
render(true,
|
|
34
|
-
expect(outer().querySelector(".prosopo-modalInner")?.textContent).toBe("");
|
|
48
|
+
expect(render(true, "").content.textContent).toBe("");
|
|
35
49
|
});
|
|
36
50
|
test("is removed from the body when the widget unmounts", () => {
|
|
37
51
|
render(true);
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
52
|
+
modal?.destroy();
|
|
53
|
+
modal = undefined;
|
|
54
|
+
expect(document.querySelector(OUTER_SELECTOR)).toBeNull();
|
|
55
|
+
});
|
|
56
|
+
test("nothing about its markup survives to the next page load", () => {
|
|
57
|
+
const shapes = new Set(Array.from({ length: 10 }, () => {
|
|
58
|
+
const instance = mountModal({ show: true });
|
|
59
|
+
const panel = document.querySelector(PANEL_SELECTOR);
|
|
60
|
+
const shape = [
|
|
61
|
+
document.querySelector(OUTER_SELECTOR)?.className,
|
|
62
|
+
panel?.className,
|
|
63
|
+
instance.content.className,
|
|
64
|
+
panel?.innerHTML,
|
|
65
|
+
].join("|");
|
|
66
|
+
instance.destroy();
|
|
67
|
+
return shape;
|
|
68
|
+
}));
|
|
69
|
+
expect(shapes.size).toBe(10);
|
|
41
70
|
});
|
|
42
71
|
});
|
|
43
72
|
describe("showing and hiding", () => {
|
|
@@ -70,14 +99,14 @@ describe("stacking", () => {
|
|
|
70
99
|
});
|
|
71
100
|
test("does not lift the challenge by its own height on iOS", () => {
|
|
72
101
|
render(true);
|
|
73
|
-
const panel = outer().querySelector(
|
|
102
|
+
const panel = outer().querySelector(PANEL_SELECTOR);
|
|
74
103
|
expect(panel?.className).not.toContain("ios-lift");
|
|
75
104
|
expect(panel?.style.transform).toBe("");
|
|
76
105
|
expect(document.getElementById("prosopo-challenge-surface-ios-lift")).toBeNull();
|
|
77
106
|
});
|
|
78
107
|
test("lets a challenge taller than the viewport scroll instead of clipping", () => {
|
|
79
108
|
render(true);
|
|
80
|
-
const panel = outer().querySelector(
|
|
109
|
+
const panel = outer().querySelector(PANEL_SELECTOR);
|
|
81
110
|
expect(panel?.style.maxHeight).toBe("100%");
|
|
82
111
|
expect(panel?.style.overflowY).toBe("auto");
|
|
83
112
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modal.unit.test.js","sourceRoot":"","sources":["../../src/tests/modal.unit.test.
|
|
1
|
+
{"version":3,"file":"modal.unit.test.js","sourceRoot":"","sources":["../../src/tests/modal.unit.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"procaptcha.unit.test.d.ts","sourceRoot":"","sources":["../../src/tests/procaptcha.unit.test.
|
|
1
|
+
{"version":3,"file":"procaptcha.unit.test.d.ts","sourceRoot":"","sources":["../../src/tests/procaptcha.unit.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,14 +1,22 @@
|
|
|
1
|
-
import { jsx as _jsx } from "@emotion/react/jsx-runtime";
|
|
2
|
-
import { act } from "react";
|
|
3
1
|
import { afterEach, beforeEach, describe, expect, test, vi } from "vitest";
|
|
4
|
-
import
|
|
2
|
+
import { mountProcaptcha } from "../components/procaptcha.js";
|
|
5
3
|
import { config } from "./harness.js";
|
|
6
|
-
import { mount } from "./render.js";
|
|
4
|
+
import { mount, settle } from "./render.js";
|
|
7
5
|
const seen = [];
|
|
8
|
-
vi.
|
|
9
|
-
|
|
6
|
+
const destroyed = vi.fn();
|
|
7
|
+
vi.mock("../components/procaptchaWidget.js", () => ({
|
|
8
|
+
mountProcaptchaImageWidget: (container, props) => {
|
|
10
9
|
seen.push(props);
|
|
11
|
-
|
|
10
|
+
const element = document.createElement("div");
|
|
11
|
+
element.setAttribute("data-cy", "widget-stub");
|
|
12
|
+
element.textContent = "widget";
|
|
13
|
+
container.appendChild(element);
|
|
14
|
+
return {
|
|
15
|
+
destroy: () => {
|
|
16
|
+
element.remove();
|
|
17
|
+
destroyed();
|
|
18
|
+
},
|
|
19
|
+
};
|
|
12
20
|
},
|
|
13
21
|
}));
|
|
14
22
|
let mounted;
|
|
@@ -18,13 +26,9 @@ const props = (overrides = {}) => ({
|
|
|
18
26
|
i18n: undefined,
|
|
19
27
|
...overrides,
|
|
20
28
|
});
|
|
21
|
-
const settle = async () => {
|
|
22
|
-
await act(async () => {
|
|
23
|
-
await Promise.resolve();
|
|
24
|
-
});
|
|
25
|
-
};
|
|
26
29
|
beforeEach(() => {
|
|
27
30
|
seen.length = 0;
|
|
31
|
+
vi.clearAllMocks();
|
|
28
32
|
mounted = mount();
|
|
29
33
|
});
|
|
30
34
|
afterEach(() => {
|
|
@@ -32,26 +36,44 @@ afterEach(() => {
|
|
|
32
36
|
});
|
|
33
37
|
describe("the lazy boundary", () => {
|
|
34
38
|
test("renders the widget once the chunk arrives", async () => {
|
|
35
|
-
mounted.
|
|
39
|
+
const handle = mountProcaptcha(mounted.container, props());
|
|
40
|
+
expect(mounted.container.querySelector('[data-cy="widget-stub"]')).toBeNull();
|
|
36
41
|
await settle();
|
|
37
42
|
expect(mounted.container.querySelector('[data-cy="widget-stub"]')).not.toBeNull();
|
|
43
|
+
handle.destroy();
|
|
38
44
|
});
|
|
39
45
|
test("hands the widget every prop it was given", async () => {
|
|
40
46
|
const callbacks = { onHuman: vi.fn() };
|
|
41
47
|
const given = props({ callbacks, autoStart: true });
|
|
42
|
-
mounted.
|
|
48
|
+
const handle = mountProcaptcha(mounted.container, given);
|
|
43
49
|
await settle();
|
|
44
50
|
expect(seen[0]).toMatchObject({
|
|
45
51
|
callbacks,
|
|
46
52
|
autoStart: true,
|
|
47
53
|
config: given.config,
|
|
48
54
|
});
|
|
55
|
+
handle.destroy();
|
|
49
56
|
});
|
|
50
57
|
test("does not add props of its own", async () => {
|
|
51
58
|
const given = props();
|
|
52
|
-
mounted.
|
|
59
|
+
const handle = mountProcaptcha(mounted.container, given);
|
|
53
60
|
await settle();
|
|
54
61
|
expect(Object.keys(seen[0] ?? {}).sort()).toEqual(Object.keys(given).sort());
|
|
62
|
+
handle.destroy();
|
|
63
|
+
});
|
|
64
|
+
test("tears the widget down when destroyed after the chunk lands", async () => {
|
|
65
|
+
const handle = mountProcaptcha(mounted.container, props());
|
|
66
|
+
await settle();
|
|
67
|
+
handle.destroy();
|
|
68
|
+
expect(destroyed).toHaveBeenCalledTimes(1);
|
|
69
|
+
expect(mounted.container.querySelector('[data-cy="widget-stub"]')).toBeNull();
|
|
70
|
+
});
|
|
71
|
+
test("cancels the mount when destroyed before the chunk lands", async () => {
|
|
72
|
+
const handle = mountProcaptcha(mounted.container, props());
|
|
73
|
+
handle.destroy();
|
|
74
|
+
await settle();
|
|
75
|
+
expect(seen).toHaveLength(0);
|
|
76
|
+
expect(mounted.container.querySelector('[data-cy="widget-stub"]')).toBeNull();
|
|
55
77
|
});
|
|
56
78
|
});
|
|
57
79
|
//# sourceMappingURL=procaptcha.unit.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"procaptcha.unit.test.js","sourceRoot":"","sources":["../../src/tests/procaptcha.unit.test.
|
|
1
|
+
{"version":3,"file":"procaptcha.unit.test.js","sourceRoot":"","sources":["../../src/tests/procaptcha.unit.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { assertType, describe, expectTypeOf, test } from "vitest";
|
|
2
|
-
import
|
|
2
|
+
import { mountProcaptcha } from "../components/procaptcha.js";
|
|
3
3
|
import addDataAttr from "../util/index.js";
|
|
4
4
|
describe("the package's public surface", () => {
|
|
5
|
-
test("
|
|
6
|
-
expectTypeOf(
|
|
5
|
+
test("mountProcaptcha takes a host element and the shared props type", () => {
|
|
6
|
+
expectTypeOf(mountProcaptcha).parameter(0).toEqualTypeOf();
|
|
7
|
+
expectTypeOf(mountProcaptcha).parameter(1).toEqualTypeOf();
|
|
7
8
|
});
|
|
8
|
-
test("
|
|
9
|
-
expectTypeOf(
|
|
9
|
+
test("mounting hands back a handle that can tear the widget down", () => {
|
|
10
|
+
expectTypeOf(mountProcaptcha).returns.toEqualTypeOf();
|
|
11
|
+
expectTypeOf().toEqualTypeOf();
|
|
10
12
|
});
|
|
11
13
|
});
|
|
12
14
|
describe("CaptchaWidget's props", () => {
|
|
@@ -25,7 +27,7 @@ describe("CaptchaWidget's props", () => {
|
|
|
25
27
|
test("holds the solution as hash-plus-coordinates triples", () => {
|
|
26
28
|
expectTypeOf().toEqualTypeOf();
|
|
27
29
|
});
|
|
28
|
-
test("cannot be
|
|
30
|
+
test("cannot be mounted without a solution to display", () => {
|
|
29
31
|
assertType({
|
|
30
32
|
challenge: {},
|
|
31
33
|
solution: [],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"procaptchaReact.test-d.js","sourceRoot":"","sources":["../../src/tests/procaptchaReact.test-d.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"procaptchaReact.test-d.js","sourceRoot":"","sources":["../../src/tests/procaptchaReact.test-d.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"procaptchaWidget.unit.test.d.ts","sourceRoot":"","sources":["../../src/tests/procaptchaWidget.unit.test.
|
|
1
|
+
{"version":3,"file":"procaptchaWidget.unit.test.d.ts","sourceRoot":"","sources":["../../src/tests/procaptchaWidget.unit.test.ts"],"names":[],"mappings":""}
|