@prosopo/procaptcha-wrapper 2.6.102 → 2.6.104
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 +11 -9
- package/.turbo/turbo-build$colon$tsc.log +9 -9
- package/.turbo/turbo-build.log +13 -10
- package/CHANGELOG.md +48 -0
- package/dist/_virtual/_rolldown/runtime.js +3 -0
- package/dist/cjs/index.cjs +5 -7
- package/dist/cjs/render/renderFunction.cjs +34 -31
- package/dist/cjs/render/renderer.cjs +16 -19
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -8
- package/dist/render/renderFunction.d.ts +1 -0
- package/dist/render/renderFunction.d.ts.map +1 -1
- package/dist/render/renderFunction.js +34 -32
- package/dist/render/renderFunction.js.map +1 -1
- package/dist/render/renderer.d.ts +3 -3
- package/dist/render/renderer.d.ts.map +1 -1
- package/dist/render/renderer.js +16 -19
- package/dist/render/renderer.js.map +1 -1
- package/dist/tests/index.unit.test.d.ts +2 -0
- package/dist/tests/index.unit.test.d.ts.map +1 -0
- package/dist/tests/index.unit.test.js +26 -0
- package/dist/tests/index.unit.test.js.map +1 -0
- package/dist/tests/renderFunction.unit.test.d.ts +2 -0
- package/dist/tests/renderFunction.unit.test.d.ts.map +1 -0
- package/dist/tests/renderFunction.unit.test.js +186 -0
- package/dist/tests/renderFunction.unit.test.js.map +1 -0
- package/dist/tests/renderer.test-d.d.ts +2 -0
- package/dist/tests/renderer.test-d.d.ts.map +1 -0
- package/dist/tests/renderer.test-d.js +92 -0
- package/dist/tests/renderer.test-d.js.map +1 -0
- package/dist/tests/renderer.unit.test.d.ts +2 -0
- package/dist/tests/renderer.unit.test.d.ts.map +1 -0
- package/dist/tests/renderer.unit.test.js +207 -0
- package/dist/tests/renderer.unit.test.js.map +1 -0
- package/package.json +15 -6
- package/src/index.ts +7 -1
- package/src/render/renderFunction.ts +13 -3
- package/src/render/renderer.ts +21 -7
- package/src/tests/index.unit.test.ts +47 -0
- package/src/tests/renderFunction.unit.test.ts +275 -0
- package/src/tests/renderer.test-d.ts +175 -0
- package/src/tests/renderer.unit.test.ts +331 -0
- package/tsconfig.tsbuildinfo +1 -1
- package/vite.test.config.ts +39 -0
- package/.turbo/turbo-typecheck.log +0 -4
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
> @prosopo/procaptcha-wrapper@2.6.
|
|
2
|
+
> @prosopo/procaptcha-wrapper@2.6.104 build:cjs
|
|
3
3
|
> NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV
|
|
4
4
|
|
|
5
5
|
ViteCommonJSConfig: .
|
|
@@ -19,13 +19,15 @@ ViteCommonJSConfig: .
|
|
|
19
19
|
'@prosopo/util-crypto'
|
|
20
20
|
]
|
|
21
21
|
}
|
|
22
|
-
[
|
|
22
|
+
[33mThe plugin "vite-tsconfig-paths" is detected. Vite now supports tsconfig paths resolution natively via the [1mresolve.tsconfigPaths[22m option. You can remove the plugin and set [1mresolve.tsconfigPaths: true[22m in your Vite config instead.[39m
|
|
23
|
+
[36mvite v8.1.5 [32mbuilding ssr environment for production...[36m[39m
|
|
23
24
|
Bundle build started
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
[32m✓[39m 3 modules transformed.
|
|
25
|
+
[2K
|
|
26
|
+
✓ 4 modules transformed.
|
|
27
27
|
rendering chunks...
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
28
|
+
computing gzip size...
|
|
29
|
+
dist/cjs/index.cjs 0.32 kB │ gzip: 0.22 kB
|
|
30
|
+
dist/cjs/render/renderer.cjs 0.60 kB │ gzip: 0.30 kB
|
|
31
|
+
dist/cjs/render/renderFunction.cjs 1.07 kB │ gzip: 0.52 kB
|
|
32
|
+
|
|
33
|
+
[32m✓ built in 58ms[39m
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
|
|
2
|
-
> @prosopo/procaptcha-wrapper@2.6.
|
|
2
|
+
> @prosopo/procaptcha-wrapper@2.6.104 build:tsc
|
|
3
3
|
> tsc --build --verbose
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
8:58:57 PM - Projects in this build:
|
|
6
6
|
* ../../dev/config/tsconfig.json
|
|
7
7
|
* ../locale/tsconfig.json
|
|
8
8
|
* ../util/tsconfig.json
|
|
@@ -10,17 +10,17 @@
|
|
|
10
10
|
* ../types/tsconfig.json
|
|
11
11
|
* tsconfig.json
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
8:58:57 PM - Project '../../dev/config/tsconfig.json' is up to date because newest input '../../dev/config/src/webpack/webpack.config.ts' is older than output '../../dev/config/tsconfig.tsbuildinfo'
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
8:58:58 PM - Project '../locale/tsconfig.json' is up to date because newest input '../locale/src/translationKey.ts' is older than output '../locale/tsconfig.tsbuildinfo'
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
8:58:58 PM - Project '../util/tsconfig.json' is up to date because newest input '../util/src/url.ts' is older than output '../util/tsconfig.tsbuildinfo'
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
8:58:58 PM - Project '../util-crypto/tsconfig.json' is up to date because newest input '../util-crypto/src/types.ts' is older than output '../util-crypto/tsconfig.tsbuildinfo'
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
8:58:58 PM - Project '../types/tsconfig.json' is up to date because newest input '../types/src/provider/api.ts' is older than output '../types/tsconfig.tsbuildinfo'
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
8:58:58 PM - Project 'tsconfig.json' is out of date because output file 'tsconfig.tsbuildinfo' does not exist
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
8:58:58 PM - Building project '/home/runner/work/captcha/captcha/packages/procaptcha-wrapper/tsconfig.json'...
|
|
26
26
|
|
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
|
|
2
|
-
> @prosopo/procaptcha-wrapper@2.6.
|
|
2
|
+
> @prosopo/procaptcha-wrapper@2.6.104 build
|
|
3
3
|
> npm run build:cross-env -- --mode ${NODE_ENV:-development}
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
> @prosopo/procaptcha-wrapper@2.6.
|
|
6
|
+
> @prosopo/procaptcha-wrapper@2.6.104 build:cross-env
|
|
7
7
|
> vite build --config vite.esm.config.ts --mode production
|
|
8
8
|
|
|
9
9
|
ViteEsmConfig: .
|
|
@@ -23,13 +23,16 @@ ViteEsmConfig: .
|
|
|
23
23
|
'@prosopo/util-crypto'
|
|
24
24
|
]
|
|
25
25
|
}
|
|
26
|
-
[
|
|
26
|
+
[33mThe plugin "vite-tsconfig-paths" is detected. Vite now supports tsconfig paths resolution natively via the [1mresolve.tsconfigPaths[22m option. You can remove the plugin and set [1mresolve.tsconfigPaths: true[22m in your Vite config instead.[39m
|
|
27
|
+
[36mvite v8.1.5 [32mbuilding ssr environment for production...[36m[39m
|
|
27
28
|
Bundle build started
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
[32m✓[39m 3 modules transformed.
|
|
29
|
+
[2K
|
|
30
|
+
✓ 4 modules transformed.
|
|
31
31
|
rendering chunks...
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
32
|
+
computing gzip size...
|
|
33
|
+
dist/_virtual/_rolldown/runtime.js 0.04 kB │ gzip: 0.06 kB
|
|
34
|
+
dist/index.js 0.29 kB │ gzip: 0.20 kB
|
|
35
|
+
dist/render/renderer.js 0.56 kB │ gzip: 0.29 kB
|
|
36
|
+
dist/render/renderFunction.js 1.03 kB │ gzip: 0.51 kB
|
|
37
|
+
|
|
38
|
+
[32m✓ built in 57ms[39m
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,53 @@
|
|
|
1
1
|
# @prosopo/procaptcha-wrapper
|
|
2
2
|
|
|
3
|
+
## 2.6.104
|
|
4
|
+
### Patch Changes
|
|
5
|
+
|
|
6
|
+
- 0e1d1f7: fix(procaptcha-wrapper): export ProcaptchaLanguages as a usable type
|
|
7
|
+
|
|
8
|
+
Writing type tests for this package's public surface exposed a real defect.
|
|
9
|
+
`Languages` in `@prosopo/locale` is a const object, so it carries no type
|
|
10
|
+
meaning of its own — re-exporting the name as `ProcaptchaLanguages` gave
|
|
11
|
+
consumers a binding they could not actually use in a type position. It is now
|
|
12
|
+
the union of the object's values, which is exactly what
|
|
13
|
+
`ProcaptchaRenderOptions["language"]` already accepts, and a type test keeps
|
|
14
|
+
the two aligned.
|
|
15
|
+
|
|
16
|
+
The accompanying type tests pin the rest of the published contract: the
|
|
17
|
+
`RendererFunction` signature (`HTMLElement`, not a bare `Element` — the render
|
|
18
|
+
script reaches for properties only `HTMLElement` has), the optional loader
|
|
19
|
+
override on `createRenderer` that makes the renderer testable without a
|
|
20
|
+
network, and `window.procaptcha` being declared possibly-absent so consumers
|
|
21
|
+
are forced to narrow before reaching for `render`.
|
|
22
|
+
- c79b252: test(procaptcha-wrapper): add unit test suite and fix script-loading defects
|
|
23
|
+
|
|
24
|
+
Adds 37 unit tests covering the renderer and the render-script loader, reaching
|
|
25
|
+
100% statement, branch, function and line coverage, and wires the package into
|
|
26
|
+
`turbo run test` so it runs in CI.
|
|
27
|
+
|
|
28
|
+
Fixes found while writing them:
|
|
29
|
+
|
|
30
|
+
- Two concurrent `render()` calls both saw an empty cache and each injected a
|
|
31
|
+
script tag for the same id. The in-flight promise is now cached, not just the
|
|
32
|
+
resolved function, so the script loads once.
|
|
33
|
+
- A failed script load left the dead `<script>` tag in the document, so a retry
|
|
34
|
+
appended a second tag carrying a duplicate id.
|
|
35
|
+
- A load failure rejected with the raw DOM `Event`, which carries no message and
|
|
36
|
+
breaks any caller reading `error.message`. It now rejects with an `Error`
|
|
37
|
+
naming the url that failed.
|
|
38
|
+
- Updated dependencies [0e1171c]
|
|
39
|
+
- Updated dependencies [103318c]
|
|
40
|
+
- Updated dependencies [270a8d8]
|
|
41
|
+
- Updated dependencies [e14fce6]
|
|
42
|
+
- @prosopo/locale@3.2.8
|
|
43
|
+
- @prosopo/types@4.10.0
|
|
44
|
+
|
|
45
|
+
## 2.6.103
|
|
46
|
+
### Patch Changes
|
|
47
|
+
|
|
48
|
+
- Updated dependencies [a0cb39e]
|
|
49
|
+
- @prosopo/types@4.9.12
|
|
50
|
+
|
|
3
51
|
## 2.6.102
|
|
4
52
|
### Patch Changes
|
|
5
53
|
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
// @ts-expect-error
|
|
8
|
-
scriptId: "procaptcha-bundle"
|
|
2
|
+
//#region src/index.ts
|
|
3
|
+
var renderProcaptcha = require("./render/renderer.cjs").createRenderer({
|
|
4
|
+
scriptUrl: "https://js.prosopo.io/js/procaptcha.bundle.js",
|
|
5
|
+
scriptId: "procaptcha-bundle"
|
|
9
6
|
});
|
|
7
|
+
//#endregion
|
|
10
8
|
exports.renderProcaptcha = renderProcaptcha;
|
|
@@ -1,35 +1,38 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
1
|
+
//#region src/render/renderFunction.ts
|
|
2
|
+
var loadRenderFunction = async (scriptUrl, scriptId) => {
|
|
3
|
+
await loadScript(scriptUrl, {
|
|
4
|
+
id: scriptId,
|
|
5
|
+
type: "module",
|
|
6
|
+
async: true,
|
|
7
|
+
defer: true
|
|
8
|
+
});
|
|
9
|
+
if (void 0 === window.procaptcha?.render) {
|
|
10
|
+
document.getElementById(scriptId)?.remove();
|
|
11
|
+
throw new Error("Render script does not contain the render function");
|
|
12
|
+
}
|
|
13
|
+
return window.procaptcha.render;
|
|
14
14
|
};
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
15
|
+
var loadScript = async (url, attributes) => {
|
|
16
|
+
const scriptTag = document.createElement("script");
|
|
17
|
+
const scriptAttributes = {
|
|
18
|
+
src: url,
|
|
19
|
+
...attributes
|
|
20
|
+
};
|
|
21
|
+
Object.assign(scriptTag, scriptAttributes);
|
|
22
|
+
await insertScriptTag(document.head, scriptTag);
|
|
23
23
|
};
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
24
|
+
var insertScriptTag = async (target, scriptTag) => {
|
|
25
|
+
return new Promise((resolve, reject) => {
|
|
26
|
+
scriptTag.onload = () => {
|
|
27
|
+
resolve();
|
|
28
|
+
};
|
|
29
|
+
scriptTag.onerror = () => {
|
|
30
|
+
scriptTag.remove();
|
|
31
|
+
reject(/* @__PURE__ */ new Error(`Failed to load script: ${scriptTag.src}`));
|
|
32
|
+
};
|
|
33
|
+
target.appendChild(scriptTag);
|
|
34
|
+
});
|
|
34
35
|
};
|
|
36
|
+
//#endregion
|
|
35
37
|
exports.loadRenderFunction = loadRenderFunction;
|
|
38
|
+
exports.loadScript = loadScript;
|
|
@@ -1,21 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
const renderOptions = Object.assign({}, options);
|
|
17
|
-
const renderFunction2 = await getRenderFunction();
|
|
18
|
-
await renderFunction2(element, renderOptions);
|
|
19
|
-
};
|
|
1
|
+
const require_renderFunction = require("./renderFunction.cjs");
|
|
2
|
+
//#region src/render/renderer.ts
|
|
3
|
+
var createRenderer = (settings, load = require_renderFunction.loadRenderFunction) => {
|
|
4
|
+
let pending;
|
|
5
|
+
const getRenderFunction = async () => {
|
|
6
|
+
if (!pending) pending = load(settings.scriptUrl, settings.scriptId).catch((error) => {
|
|
7
|
+
pending = void 0;
|
|
8
|
+
throw error;
|
|
9
|
+
});
|
|
10
|
+
return pending;
|
|
11
|
+
};
|
|
12
|
+
return async (element, options) => {
|
|
13
|
+
const renderOptions = Object.assign({}, options);
|
|
14
|
+
await (await getRenderFunction())(element, renderOptions);
|
|
15
|
+
};
|
|
20
16
|
};
|
|
17
|
+
//#endregion
|
|
21
18
|
exports.createRenderer = createRenderer;
|
package/dist/index.d.ts
CHANGED
|
@@ -2,5 +2,6 @@ import type { Languages } from "@prosopo/locale";
|
|
|
2
2
|
import type { CaptchaType, ProcaptchaRenderOptions } from "@prosopo/types";
|
|
3
3
|
import type { RendererFunction } from "./render/renderFunction.js";
|
|
4
4
|
export declare const renderProcaptcha: RendererFunction;
|
|
5
|
-
|
|
5
|
+
type ProcaptchaLanguages = (typeof Languages)[keyof typeof Languages];
|
|
6
|
+
export type { ProcaptchaRenderOptions, CaptchaType as ProcaptchaType, ProcaptchaLanguages, };
|
|
6
7
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAGnE,eAAO,MAAM,gBAAgB,EAAE,gBAK7B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAGnE,eAAO,MAAM,gBAAgB,EAAE,gBAK7B,CAAC;AAMH,KAAK,mBAAmB,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC;AAEtE,YAAY,EACX,uBAAuB,EACvB,WAAW,IAAI,cAAc,EAC7B,mBAAmB,GACnB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
|
+
import "./_virtual/_rolldown/runtime.js";
|
|
1
2
|
import { createRenderer } from "./render/renderer.js";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
scriptId: "procaptcha-bundle"
|
|
3
|
+
//#region src/index.ts
|
|
4
|
+
var renderProcaptcha = createRenderer({
|
|
5
|
+
scriptUrl: "https://js.prosopo.io/js/procaptcha.bundle.js",
|
|
6
|
+
scriptId: "procaptcha-bundle"
|
|
7
7
|
});
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
};
|
|
8
|
+
//#endregion
|
|
9
|
+
export { renderProcaptcha };
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { ProcaptchaRenderOptions } from "@prosopo/types";
|
|
2
2
|
export type RendererFunction = (element: HTMLElement, options: ProcaptchaRenderOptions) => Promise<void>;
|
|
3
3
|
export declare const loadRenderFunction: (scriptUrl: string, scriptId: string) => Promise<RendererFunction>;
|
|
4
|
+
export declare const loadScript: (url: string, attributes?: Partial<HTMLScriptElement>) => Promise<void>;
|
|
4
5
|
declare global {
|
|
5
6
|
interface Window {
|
|
6
7
|
procaptcha: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderFunction.d.ts","sourceRoot":"","sources":["../../src/render/renderFunction.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAE9D,MAAM,MAAM,gBAAgB,GAAG,CAC9B,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,uBAAuB,KAC5B,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB,eAAO,MAAM,kBAAkB,cACnB,MAAM,YACP,MAAM,KACd,OAAO,CAAC,gBAAgB,
|
|
1
|
+
{"version":3,"file":"renderFunction.d.ts","sourceRoot":"","sources":["../../src/render/renderFunction.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAE9D,MAAM,MAAM,gBAAgB,GAAG,CAC9B,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,uBAAuB,KAC5B,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB,eAAO,MAAM,kBAAkB,cACnB,MAAM,YACP,MAAM,KACd,OAAO,CAAC,gBAAgB,CAiB1B,CAAC;AAEF,eAAO,MAAM,UAAU,QACjB,MAAM,eACE,OAAO,CAAC,iBAAiB,CAAC,KACrC,OAAO,CAAC,IAAI,CAWd,CAAC;AAyBF,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,MAAM;QACf,UAAU,EACP;YACA,MAAM,EAAE,gBAAgB,CAAC;SACxB,GACD,SAAS,CAAC;KACb;CACD"}
|
|
@@ -1,35 +1,37 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
1
|
+
//#region src/render/renderFunction.ts
|
|
2
|
+
var loadRenderFunction = async (scriptUrl, scriptId) => {
|
|
3
|
+
await loadScript(scriptUrl, {
|
|
4
|
+
id: scriptId,
|
|
5
|
+
type: "module",
|
|
6
|
+
async: true,
|
|
7
|
+
defer: true
|
|
8
|
+
});
|
|
9
|
+
if (void 0 === window.procaptcha?.render) {
|
|
10
|
+
document.getElementById(scriptId)?.remove();
|
|
11
|
+
throw new Error("Render script does not contain the render function");
|
|
12
|
+
}
|
|
13
|
+
return window.procaptcha.render;
|
|
12
14
|
};
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
15
|
+
var loadScript = async (url, attributes) => {
|
|
16
|
+
const scriptTag = document.createElement("script");
|
|
17
|
+
const scriptAttributes = {
|
|
18
|
+
src: url,
|
|
19
|
+
...attributes
|
|
20
|
+
};
|
|
21
|
+
Object.assign(scriptTag, scriptAttributes);
|
|
22
|
+
await insertScriptTag(document.head, scriptTag);
|
|
21
23
|
};
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
};
|
|
33
|
-
export {
|
|
34
|
-
loadRenderFunction
|
|
24
|
+
var insertScriptTag = async (target, scriptTag) => {
|
|
25
|
+
return new Promise((resolve, reject) => {
|
|
26
|
+
scriptTag.onload = () => {
|
|
27
|
+
resolve();
|
|
28
|
+
};
|
|
29
|
+
scriptTag.onerror = () => {
|
|
30
|
+
scriptTag.remove();
|
|
31
|
+
reject(/* @__PURE__ */ new Error(`Failed to load script: ${scriptTag.src}`));
|
|
32
|
+
};
|
|
33
|
+
target.appendChild(scriptTag);
|
|
34
|
+
});
|
|
35
35
|
};
|
|
36
|
+
//#endregion
|
|
37
|
+
export { loadRenderFunction, loadScript };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderFunction.js","sourceRoot":"","sources":["../../src/render/renderFunction.ts"],"names":[],"mappings":"AAqBA,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EACtC,SAAiB,EACjB,QAAgB,EACY,EAAE;IAC9B,MAAM,UAAU,CAAC,SAAS,EAAE;QAC3B,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,IAAI;KACX,CAAC,CAAC;IAEH,IAAI,SAAS,KAAK,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"renderFunction.js","sourceRoot":"","sources":["../../src/render/renderFunction.ts"],"names":[],"mappings":"AAqBA,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EACtC,SAAiB,EACjB,QAAgB,EACY,EAAE;IAC9B,MAAM,UAAU,CAAC,SAAS,EAAE;QAC3B,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,IAAI;KACX,CAAC,CAAC;IAEH,IAAI,SAAS,KAAK,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;QAI7C,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACvE,CAAC;IAED,OAAO,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC;AACjC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAC9B,GAAW,EACX,UAAuC,EACvB,EAAE;IAClB,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAEnD,MAAM,gBAAgB,GAA+B;QACpD,GAAG,EAAE,GAAG;QACR,GAAG,UAAU;KACb,CAAC;IAEF,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;IAE3C,MAAM,eAAe,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AACjD,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,KAAK,EAC5B,MAAmB,EACnB,SAA4B,EACZ,EAAE;IAClB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACtC,SAAS,CAAC,MAAM,GAAG,GAAG,EAAE;YACvB,OAAO,EAAE,CAAC;QACX,CAAC,CAAC;QAEF,SAAS,CAAC,OAAO,GAAG,GAAG,EAAE;YAIxB,SAAS,CAAC,MAAM,EAAE,CAAC;YAGnB,MAAM,CAAC,IAAI,KAAK,CAAC,0BAA0B,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC9D,CAAC,CAAC;QAEF,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { type RendererFunction } from "./renderFunction.js";
|
|
2
|
-
interface RendererSettings {
|
|
2
|
+
export interface RendererSettings {
|
|
3
3
|
scriptUrl: string;
|
|
4
4
|
scriptId: string;
|
|
5
5
|
}
|
|
6
|
-
export
|
|
7
|
-
export
|
|
6
|
+
export type LoadRenderFunction = (scriptUrl: string, scriptId: string) => Promise<RendererFunction>;
|
|
7
|
+
export declare const createRenderer: (settings: RendererSettings, load?: LoadRenderFunction) => RendererFunction;
|
|
8
8
|
//# sourceMappingURL=renderer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/render/renderer.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,gBAAgB,EAAsB,MAAM,qBAAqB,CAAC;AAEhF,
|
|
1
|
+
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/render/renderer.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,gBAAgB,EAAsB,MAAM,qBAAqB,CAAC;AAEhF,MAAM,WAAW,gBAAgB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CACjB;AAGD,MAAM,MAAM,kBAAkB,GAAG,CAChC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,KACZ,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAE/B,eAAO,MAAM,cAAc,aAChB,gBAAgB,SACpB,kBAAkB,KACtB,gBAiCF,CAAC"}
|
package/dist/render/renderer.js
CHANGED
|
@@ -1,21 +1,18 @@
|
|
|
1
1
|
import { loadRenderFunction } from "./renderFunction.js";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
await renderFunction2(element, renderOptions);
|
|
17
|
-
};
|
|
18
|
-
};
|
|
19
|
-
export {
|
|
20
|
-
createRenderer
|
|
2
|
+
//#region src/render/renderer.ts
|
|
3
|
+
var createRenderer = (settings, load = loadRenderFunction) => {
|
|
4
|
+
let pending;
|
|
5
|
+
const getRenderFunction = async () => {
|
|
6
|
+
if (!pending) pending = load(settings.scriptUrl, settings.scriptId).catch((error) => {
|
|
7
|
+
pending = void 0;
|
|
8
|
+
throw error;
|
|
9
|
+
});
|
|
10
|
+
return pending;
|
|
11
|
+
};
|
|
12
|
+
return async (element, options) => {
|
|
13
|
+
const renderOptions = Object.assign({}, options);
|
|
14
|
+
await (await getRenderFunction())(element, renderOptions);
|
|
15
|
+
};
|
|
21
16
|
};
|
|
17
|
+
//#endregion
|
|
18
|
+
export { createRenderer };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../src/render/renderer.ts"],"names":[],"mappings":"AAeA,OAAO,EAAyB,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../src/render/renderer.ts"],"names":[],"mappings":"AAeA,OAAO,EAAyB,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAahF,MAAM,CAAC,MAAM,cAAc,GAAG,CAC7B,QAA0B,EAC1B,OAA2B,kBAAkB,EAC1B,EAAE;IAIrB,IAAI,OAA8C,CAAC;IAEnD,MAAM,iBAAiB,GAAG,KAAK,IAA+B,EAAE;QAC/D,IAAI,CAAC,OAAO,EAAE,CAAC;YAGd,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,KAAK,CAC1D,CAAC,KAAc,EAAE,EAAE;gBAClB,OAAO,GAAG,SAAS,CAAC;gBACpB,MAAM,KAAK,CAAC;YACb,CAAC,CACD,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IAChB,CAAC,CAAC;IAEF,OAAO,KAAK,EACX,OAAoB,EACpB,OAAgC,EAChB,EAAE;QAGlB,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAEjD,MAAM,cAAc,GAAG,MAAM,iBAAiB,EAAE,CAAC;QAEjD,MAAM,cAAc,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IAC9C,CAAC,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.unit.test.d.ts","sourceRoot":"","sources":["../../src/tests/index.unit.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { afterEach, describe, expect, it } from "vitest";
|
|
2
|
+
import { renderProcaptcha } from "../index.js";
|
|
3
|
+
afterEach(() => {
|
|
4
|
+
document.head.innerHTML = "";
|
|
5
|
+
document.body.innerHTML = "";
|
|
6
|
+
window.procaptcha = undefined;
|
|
7
|
+
});
|
|
8
|
+
describe("renderProcaptcha", () => {
|
|
9
|
+
it("is exported as a renderer function", () => {
|
|
10
|
+
expect(typeof renderProcaptcha).toBe("function");
|
|
11
|
+
});
|
|
12
|
+
it("does not touch the DOM until it is called", () => {
|
|
13
|
+
expect(document.head.querySelectorAll("script")).toHaveLength(0);
|
|
14
|
+
});
|
|
15
|
+
it("injects the build-time script url on first render", async () => {
|
|
16
|
+
const rendering = renderProcaptcha(document.createElement("div"), {
|
|
17
|
+
siteKey: "site-key",
|
|
18
|
+
});
|
|
19
|
+
await Promise.resolve();
|
|
20
|
+
const script = document.head.querySelector("script");
|
|
21
|
+
expect(script).not.toBeNull();
|
|
22
|
+
script?.dispatchEvent(new Event("error"));
|
|
23
|
+
await expect(rendering).rejects.toThrow("Failed to load script");
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
//# sourceMappingURL=index.unit.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.unit.test.js","sourceRoot":"","sources":["../../src/tests/index.unit.test.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,SAAS,CAAC,GAAG,EAAE;IACd,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;IAC7B,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;IAC7B,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;AAC/B,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,OAAO,gBAAgB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QAGpD,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QAClE,MAAM,SAAS,GAAG,gBAAgB,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;YACjE,OAAO,EAAE,UAAU;SACnB,CAAC,CAAC;QACH,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QAExB,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACrD,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAE9B,MAAM,EAAE,aAAa,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAC1C,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderFunction.unit.test.d.ts","sourceRoot":"","sources":["../../src/tests/renderFunction.unit.test.ts"],"names":[],"mappings":""}
|