react-isomorphic-scriptloader
Advanced tools
| import { ReactNode } from 'react'; | ||
| interface Props { | ||
| src: string; | ||
| onLoad: () => void; | ||
| } | ||
| declare function ScriptLoader({ src, onLoad }: Props): ReactNode; | ||
| export { ScriptLoader as default }; |
| import { ReactNode } from 'react'; | ||
| interface Props { | ||
| src: string; | ||
| onLoad: () => void; | ||
| } | ||
| declare function ScriptLoader({ src, onLoad }: Props): ReactNode; | ||
| export { ScriptLoader as default }; |
| "use strict"; | ||
| var __defProp = Object.defineProperty; | ||
| var __getOwnPropDesc = Object.getOwnPropertyDescriptor; | ||
| var __getOwnPropNames = Object.getOwnPropertyNames; | ||
| var __hasOwnProp = Object.prototype.hasOwnProperty; | ||
| var __export = (target, all) => { | ||
| for (var name in all) | ||
| __defProp(target, name, { get: all[name], enumerable: true }); | ||
| }; | ||
| var __copyProps = (to, from, except, desc) => { | ||
| if (from && typeof from === "object" || typeof from === "function") { | ||
| for (let key of __getOwnPropNames(from)) | ||
| if (!__hasOwnProp.call(to, key) && key !== except) | ||
| __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); | ||
| } | ||
| return to; | ||
| }; | ||
| var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); | ||
| // src/index.tsx | ||
| var index_exports = {}; | ||
| __export(index_exports, { | ||
| default: () => ScriptLoader | ||
| }); | ||
| module.exports = __toCommonJS(index_exports); | ||
| var import_react = require("react"); | ||
| var import_jsx_runtime = require("react/jsx-runtime"); | ||
| function ScriptLoader({ src, onLoad }) { | ||
| (0, import_react.useEffect)(() => { | ||
| const scripts = Array.from(document.querySelectorAll("script")); | ||
| if (scripts.find((script2) => script2.src === src)) { | ||
| onLoad(); | ||
| return; | ||
| } | ||
| const script = document.createElement("script"); | ||
| script.src = src; | ||
| script.onload = () => onLoad(); | ||
| document.body.appendChild(script); | ||
| }, [src, onLoad]); | ||
| return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { style: { display: "none" }, "data-purpose": "Dummy element created by react-isomorphic-scriptloader" }); | ||
| } | ||
| //# sourceMappingURL=index.js.map |
| {"version":3,"sources":["../src/index.tsx"],"sourcesContent":["import { type ReactNode, useEffect } from 'react'\r\n\r\ninterface Props {\r\n src: string\r\n onLoad: () => void\r\n}\r\n\r\nexport default function ScriptLoader({ src, onLoad }: Props): ReactNode {\r\n useEffect(() => {\r\n const scripts = Array.from(document.querySelectorAll('script'))\r\n if (scripts.find((script) => script.src === src)) {\r\n onLoad()\r\n return\r\n }\r\n const script = document.createElement('script')\r\n script.src = src\r\n script.onload = () => onLoad()\r\n document.body.appendChild(script)\r\n }, [src, onLoad])\r\n\r\n return <span style={{ display: 'none' }} data-purpose=\"Dummy element created by react-isomorphic-scriptloader\" />\r\n}\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAA0C;AAoBjC;AAbM,SAAR,aAA8B,EAAE,KAAK,OAAO,GAAqB;AACtE,8BAAU,MAAM;AACd,UAAM,UAAU,MAAM,KAAK,SAAS,iBAAiB,QAAQ,CAAC;AAC9D,QAAI,QAAQ,KAAK,CAACA,YAAWA,QAAO,QAAQ,GAAG,GAAG;AAChD,aAAO;AACP;AAAA,IACF;AACA,UAAM,SAAS,SAAS,cAAc,QAAQ;AAC9C,WAAO,MAAM;AACb,WAAO,SAAS,MAAM,OAAO;AAC7B,aAAS,KAAK,YAAY,MAAM;AAAA,EAClC,GAAG,CAAC,KAAK,MAAM,CAAC;AAEhB,SAAO,4CAAC,UAAK,OAAO,EAAE,SAAS,OAAO,GAAG,gBAAa,0DAAyD;AACjH;","names":["script"]} |
| // src/index.tsx | ||
| import { useEffect } from "react"; | ||
| import { jsx } from "react/jsx-runtime"; | ||
| function ScriptLoader({ src, onLoad }) { | ||
| useEffect(() => { | ||
| const scripts = Array.from(document.querySelectorAll("script")); | ||
| if (scripts.find((script2) => script2.src === src)) { | ||
| onLoad(); | ||
| return; | ||
| } | ||
| const script = document.createElement("script"); | ||
| script.src = src; | ||
| script.onload = () => onLoad(); | ||
| document.body.appendChild(script); | ||
| }, [src, onLoad]); | ||
| return /* @__PURE__ */ jsx("span", { style: { display: "none" }, "data-purpose": "Dummy element created by react-isomorphic-scriptloader" }); | ||
| } | ||
| export { | ||
| ScriptLoader as default | ||
| }; | ||
| //# sourceMappingURL=index.mjs.map |
| {"version":3,"sources":["../src/index.tsx"],"sourcesContent":["import { type ReactNode, useEffect } from 'react'\r\n\r\ninterface Props {\r\n src: string\r\n onLoad: () => void\r\n}\r\n\r\nexport default function ScriptLoader({ src, onLoad }: Props): ReactNode {\r\n useEffect(() => {\r\n const scripts = Array.from(document.querySelectorAll('script'))\r\n if (scripts.find((script) => script.src === src)) {\r\n onLoad()\r\n return\r\n }\r\n const script = document.createElement('script')\r\n script.src = src\r\n script.onload = () => onLoad()\r\n document.body.appendChild(script)\r\n }, [src, onLoad])\r\n\r\n return <span style={{ display: 'none' }} data-purpose=\"Dummy element created by react-isomorphic-scriptloader\" />\r\n}\r\n"],"mappings":";AAAA,SAAyB,iBAAiB;AAoBjC;AAbM,SAAR,aAA8B,EAAE,KAAK,OAAO,GAAqB;AACtE,YAAU,MAAM;AACd,UAAM,UAAU,MAAM,KAAK,SAAS,iBAAiB,QAAQ,CAAC;AAC9D,QAAI,QAAQ,KAAK,CAACA,YAAWA,QAAO,QAAQ,GAAG,GAAG;AAChD,aAAO;AACP;AAAA,IACF;AACA,UAAM,SAAS,SAAS,cAAc,QAAQ;AAC9C,WAAO,MAAM;AACb,WAAO,SAAS,MAAM,OAAO;AAC7B,aAAS,KAAK,YAAY,MAAM;AAAA,EAClC,GAAG,CAAC,KAAK,MAAM,CAAC;AAEhB,SAAO,oBAAC,UAAK,OAAO,EAAE,SAAS,OAAO,GAAG,gBAAa,0DAAyD;AACjH;","names":["script"]} |
+0
-0
@@ -0,0 +0,0 @@ The MIT License (MIT) |
+37
-34
| { | ||
| "name": "react-isomorphic-scriptloader", | ||
| "version": "2.0.0", | ||
| "version": "3.0.0", | ||
| "description": "Load scripts with ease", | ||
| "main": "lib/index.js", | ||
| "typings": "lib/typings/index.d.ts", | ||
| "module": "lib/esm/index.js", | ||
| "main": "dist/index.js", | ||
| "module": "dist/index.mjs", | ||
| "types": "dist/index.d.ts", | ||
| "exports": { | ||
| ".": { | ||
| "import": "./dist/index.mjs", | ||
| "require": "./dist/index.js", | ||
| "types": "./dist/index.d.ts" | ||
| } | ||
| }, | ||
| "files": [ | ||
| "lib/*" | ||
| "dist" | ||
| ], | ||
| "scripts": { | ||
| "lint": "(tsc -p . --noEmit) && (eslint . --ext .ts --ext .tsx) && (prettier -l src/*.tsx)", | ||
| "prepare": "yarn build:clean ; yarn build:esm ; yarn build:cjs ; yarn build:typings", | ||
| "build:esm": "tsc --module es2015 --target es2018 --outDir lib/esm", | ||
| "build:cjs": "tsc --module commonjs --target es5 --outDir lib/cjs", | ||
| "build:clean": "rm -rf lib", | ||
| "build:typings": "tsc --declaration --outDir lib/typings --emitDeclarationOnly" | ||
| }, | ||
| "repository": { | ||
@@ -33,26 +32,30 @@ "type": "git", | ||
| }, | ||
| "dependencies": {}, | ||
| "peerDependencies": { | ||
| "react": ">=16.8.0 || >=19.0.0" | ||
| }, | ||
| "devDependencies": { | ||
| "@types/react": "^16.9.41", | ||
| "@typescript-eslint/eslint-plugin": "^3.5.0", | ||
| "@typescript-eslint/parser": "^3.5.0", | ||
| "eslint": "7.2.0", | ||
| "eslint-config-airbnb": "18.2.0", | ||
| "eslint-config-prettier": "^6.11.0", | ||
| "eslint-import-resolver-typescript": "^2.0.0", | ||
| "eslint-plugin-import": "^2.21.2", | ||
| "eslint-plugin-jsx-a11y": "^6.3.0", | ||
| "eslint-plugin-prettier": "^3.1.4", | ||
| "eslint-plugin-react": "^7.20.0", | ||
| "eslint-plugin-react-hooks": "4.0.0", | ||
| "jasmine-fix": "^1.3.1", | ||
| "prettier": "^2.0.5", | ||
| "typescript": "^3.9.6" | ||
| "@testing-library/react": "^16.3.0", | ||
| "@types/react": "^19.2.7", | ||
| "@types/react-dom": "^19.2.3", | ||
| "eslint": "^9.0.0", | ||
| "globals": "^15.0.0", | ||
| "jsdom": "^24.0.0", | ||
| "prettier": "^3.0.0", | ||
| "react": "^19.2.1", | ||
| "react-dom": "^19.2.1", | ||
| "tsup": "^8.0.0", | ||
| "typescript": "^5.9.3", | ||
| "typescript-eslint": "^7.0.0", | ||
| "vitest": "^4.0.15" | ||
| }, | ||
| "peerDependencies": { | ||
| "react": "*" | ||
| "engines": { | ||
| "node": ">=18" | ||
| }, | ||
| "engines": { | ||
| "node": ">= 8" | ||
| "scripts": { | ||
| "build": "tsup", | ||
| "test": "vitest run", | ||
| "test:watch": "vitest", | ||
| "lint": "eslint .", | ||
| "format": "prettier --write ." | ||
| } | ||
| } | ||
| } |
+1
-1
@@ -7,3 +7,3 @@ # React Isomorphic ScriptLoader | ||
| ``` | ||
| npm install --save react-isomorphic-scriptloader | ||
| yarn add react-isomorphic-scriptloader | ||
| ``` | ||
@@ -10,0 +10,0 @@ |
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| var react_1 = require("react"); | ||
| function ScriptLoader(_a) { | ||
| var src = _a.src, onLoad = _a.onLoad; | ||
| react_1.useEffect(function () { | ||
| var scripts = Array.from(document.querySelectorAll('script')); | ||
| if (scripts.find(function (script) { return script.src === src; })) { | ||
| onLoad(); | ||
| return; | ||
| } | ||
| var script = document.createElement('script'); | ||
| script.src = src; | ||
| script.onload = onLoad; | ||
| document.body.appendChild(script); | ||
| }, []); // eslint-disable-line react-hooks/exhaustive-deps | ||
| return <span style={{ display: 'none' }} data-purpose="Dummy element created by react-isomorphic-scriptloader"/>; | ||
| } | ||
| exports.default = ScriptLoader; |
| import React, { useEffect } from 'react'; | ||
| export default function ScriptLoader({ src, onLoad }) { | ||
| useEffect(() => { | ||
| const scripts = Array.from(document.querySelectorAll('script')); | ||
| if (scripts.find((script) => script.src === src)) { | ||
| onLoad(); | ||
| return; | ||
| } | ||
| const script = document.createElement('script'); | ||
| script.src = src; | ||
| script.onload = onLoad; | ||
| document.body.appendChild(script); | ||
| }, []); // eslint-disable-line react-hooks/exhaustive-deps | ||
| return <span style={{ display: 'none' }} data-purpose="Dummy element created by react-isomorphic-scriptloader"/>; | ||
| } |
| import { ReactNode } from 'react'; | ||
| interface Props { | ||
| src: string; | ||
| onLoad: () => void; | ||
| } | ||
| export default function ScriptLoader({ src, onLoad }: Props): ReactNode; | ||
| export {}; |
8604
61.34%13
-13.33%9
28.57%67
63.41%