@pplancq/react-template 2.6.7 → 2.7.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.
@@ -0,0 +1,2 @@
1
+ (()=>{var e,t,r,n,o,a={},i={};function l(e){var t=i[e];if(void 0!==t)return t.exports;var r=i[e]={exports:{}};return a[e](r,r.exports,l),r.exports}if(l.m=a,l.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return l.d(t,{a:t}),t},l.d=(e,t)=>{for(var r in t)l.o(t,r)&&!l.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},l.f={},l.e=e=>Promise.all(Object.keys(l.f).reduce((t,r)=>(l.f[r](e,t),t),[])),l.u=e=>"static/js/async/"+(({535:"lib-router",783:"lib-react"})[e]||e)+"."+({407:"e320999d",535:"539f1a1d",783:"d181e959",935:"0c7e0e81"})[e]+".js",l.miniCssF=e=>"static/css/async/"+e+".9db00fbf.css",l.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e={},t="@pplancq/react-template:",l.l=function(r,n,o,a){if(e[r])return void e[r].push(n);if(void 0!==o)for(var i,u,s=document.getElementsByTagName("script"),c=0;c<s.length;c++){var d=s[c];if(d.getAttribute("src")==r||d.getAttribute("data-webpack")==t+o){i=d;break}}i||(u=!0,(i=document.createElement("script")).charset="utf-8",i.timeout=120,l.nc&&i.setAttribute("nonce",l.nc),i.setAttribute("data-webpack",t+o),i.src=r),e[r]=[n];var f=function(t,n){i.onerror=i.onload=null,clearTimeout(p);var o=e[r];if(delete e[r],i.parentNode&&i.parentNode.removeChild(i),o&&o.forEach(function(e){return e(n)}),t)return t(n)},p=setTimeout(f.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=f.bind(null,i.onerror),i.onload=f.bind(null,i.onload),u&&document.head.appendChild(i)},l.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.p="/","undefined"!=typeof document){var u=function(e,t,r,n,o){var a=document.createElement("link");return a.rel="stylesheet",a.type="text/css",l.nc&&(a.nonce=l.nc),a.onerror=a.onload=function(r){if(a.onerror=a.onload=null,"load"===r.type)n();else{var i=r&&("load"===r.type?"missing":r.type),l=r&&r.target&&r.target.href||t,u=Error("Loading CSS chunk "+e+" failed.\\n("+l+")");u.code="CSS_CHUNK_LOAD_FAILED",u.type=i,u.request=l,a.parentNode&&a.parentNode.removeChild(a),o(u)}},a.href=t,r?r.parentNode.insertBefore(a,r.nextSibling):document.head.appendChild(a),a},s=function(e,t){for(var r=document.getElementsByTagName("link"),n=0;n<r.length;n++){var o=r[n],a=o.getAttribute("data-href")||o.getAttribute("href");if(a&&(a=a.split("?")[0]),"stylesheet"===o.rel&&(a===e||a===t))return o}for(var i=document.getElementsByTagName("style"),n=0;n<i.length;n++){var o=i[n],a=o.getAttribute("data-href");if(a===e||a===t)return o}},c={410:0};l.f.miniCss=function(e,t){if(c[e])t.push(c[e]);else 0!==c[e]&&({407:1})[e]&&t.push(c[e]=new Promise(function(t,r){var n=l.miniCssF(e),o=l.p+n;if(s(n,o))return t();u(e,o,null,t,r)}).then(function(){c[e]=0},function(t){throw delete c[e],t}))}}r={410:0},l.f.j=function(e,t){var n=l.o(r,e)?r[e]:void 0;if(0!==n)if(n)t.push(n[2]);else{var o=new Promise((t,o)=>n=r[e]=[t,o]);t.push(n[2]=o);var a=l.p+l.u(e),i=Error();l.l(a,function(t){if(l.o(r,e)&&(0!==(n=r[e])&&(r[e]=void 0),n)){var o=t&&("load"===t.type?"missing":t.type),a=t&&t.target&&t.target.src;i.message="Loading chunk "+e+" failed.\n("+o+": "+a+")",i.name="ChunkLoadError",i.type=o,i.request=a,n[1](i)}},"chunk-"+e,e)}},n=(e,t)=>{var n,o,a=t[0],i=t[1],u=t[2],s=0;if(a.some(e=>0!==r[e])){for(n in i)l.o(i,n)&&(l.m[n]=i[n]);u&&u(l)}for(e&&e(t);s<a.length;s++)o=a[s],l.o(r,o)&&r[o]&&r[o][0](),r[o]=0},(o=self.webpackChunk_pplancq_react_template=self.webpackChunk_pplancq_react_template||[]).forEach(n.bind(null,0)),o.push=n.bind(null,o.push.bind(o)),(async()=>Promise.resolve())().then(()=>{Promise.all([l.e("783"),l.e("535"),l.e("935"),l.e("407")]).then(l.bind(l,631)).then(e=>{let{default:t}=e;customElements.define("app-react",t)})})})();
2
+ //# sourceMappingURL=index.046d187d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static/js/index.046d187d.js","sources":["webpack://@pplancq/react-template/webpack/runtime/load_script","webpack://@pplancq/react-template/webpack/runtime/jsonp_chunk_loading","webpack://@pplancq/react-template/webpack/runtime/css loading","webpack://@pplancq/react-template/webpack/runtime/compat_get_default_export","webpack://@pplancq/react-template/webpack/runtime/define_property_getters","webpack://@pplancq/react-template/webpack/runtime/ensure_chunk","webpack://@pplancq/react-template/webpack/runtime/get javascript chunk filename","webpack://@pplancq/react-template/webpack/runtime/get mini-css chunk filename","webpack://@pplancq/react-template/webpack/runtime/has_own_property","webpack://@pplancq/react-template/webpack/runtime/make_namespace_object","webpack://@pplancq/react-template/webpack/runtime/public_path","webpack://@pplancq/react-template/./src/main.ts"],"sourcesContent":["var inProgress = {};\n\nvar dataWebpackPrefix = \"@pplancq/react-template:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function (url, done, key, chunkId) {\n\tif (inProgress[url]) {\n\t\tinProgress[url].push(done);\n\t\treturn;\n\t}\n\tvar script, needAttach;\n\tif (key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor (var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif (s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) {\n\t\t\t\tscript = s;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tif (!script) {\n\t\tneedAttach = true;\n\t\t\n script = document.createElement('script');\n \n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\t\n\t\tscript.src = url;\n\t\t\n \n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function (prev, event) {\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns &&\n\t\t\tdoneFns.forEach(function (fn) {\n\t\t\t\treturn fn(event);\n\t\t\t});\n\t\tif (prev) return prev(event);\n\t};\n\tvar timeout = setTimeout(\n\t\tonScriptComplete.bind(null, undefined, {\n\t\t\ttype: 'timeout',\n\t\t\ttarget: script\n\t\t}),\n\t\t120000\n\t);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};\n","\n // object to store loaded and loading chunks\n // undefined = chunk not loaded, null = chunk preloaded/prefetched\n // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\n var installedChunks = {\"410\": 0,};\n \n __webpack_require__.f.j = function (chunkId, promises) {\n // JSONP chunk loading for javascript\nvar installedChunkData = __webpack_require__.o(installedChunks, chunkId)\n\t? installedChunks[chunkId]\n\t: undefined;\nif (installedChunkData !== 0) {\n\t// 0 means \"already installed\".\n\n\t// a Promise means \"currently loading\".\n\tif (installedChunkData) {\n\t\tpromises.push(installedChunkData[2]);\n\t} else {\n\t\tif (true) {\n\t\t\t// setup Promise in chunk cache\n\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\tpromises.push((installedChunkData[2] = promise));\n\n\t\t\t// start chunk loading\n\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\tvar error = new Error();\n\t\t\tvar loadingEnded = function (event) {\n\t\t\t\tif (__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\tif (installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\tif (installedChunkData) {\n\t\t\t\t\t\tvar errorType =\n\t\t\t\t\t\t\tevent && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\terror.message =\n\t\t\t\t\t\t\t'Loading chunk ' +\n\t\t\t\t\t\t\tchunkId +\n\t\t\t\t\t\t\t' failed.\\n(' +\n\t\t\t\t\t\t\terrorType +\n\t\t\t\t\t\t\t': ' +\n\t\t\t\t\t\t\trealSrc +\n\t\t\t\t\t\t\t')';\n\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t} \n\t}\n}\n\n }\n // install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar chunkIds = data[0];\nvar moreModules = data[1];\nvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif (chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor (moduleId in moreModules) {\n\t\t\tif (__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif (runtime) var result = runtime(__webpack_require__);\n\t}\n\tif (parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor (; i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif (\n\t\t\t__webpack_require__.o(installedChunks, chunkId) &&\n\t\t\tinstalledChunks[chunkId]\n\t\t) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\t\n};\n\nvar chunkLoadingGlobal = self[\"webpackChunk_pplancq_react_template\"] = self[\"webpackChunk_pplancq_react_template\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));\n","if (typeof document === \"undefined\") return;\nvar createStylesheet = function (\n\tchunkId, fullhref, oldTag, resolve, reject\n) {\n\tvar linkTag = document.createElement(\"link\");\n\t\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type=\"text/css\";\n\tif (__webpack_require__.nc) {\n\t\tlinkTag.nonce = __webpack_require__.nc;\n\t}\n\tvar onLinkComplete = function (event) {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\\\n(\" + realHref + \")\");\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tif (linkTag.parentNode) linkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\t\n\tif (oldTag) {\n oldTag.parentNode.insertBefore(linkTag, oldTag.nextSibling);\n} else {\n document.head.appendChild(linkTag);\n}\n\treturn linkTag;\n}\nvar findStylesheet = function (href, fullhref) {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor (var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif (dataHref) {\n\t\t\tdataHref = dataHref.split('?')[0]\n\t\t}\n\t\tif (tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor (var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif (dataHref === href || dataHref === fullhref) return tag;\n\t}\n}\n\nvar loadStylesheet = function (chunkId) {\n\treturn new Promise(function (resolve, reject) {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif (findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, null, resolve, reject);\n\t})\n}\n\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t\"410\": 0,\n\n};\n\n__webpack_require__.f.miniCss = function(chunkId, promises) {\n\tvar cssChunks = {\n\"407\": 1,\n\n};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId])\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId])\n\t\tpromises.push(\n\t\t\tinstalledCssChunks[chunkId] = loadStylesheet(chunkId).then(\n\t\t\t\tfunction() {\n\t\t\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t\t\t},\n\t\t\t\tfunction(e) {\n\t\t\t\t\tdelete installedCssChunks[chunkId];\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t)\n\t\t)\n}\n\n// no hmr\n","// getDefaultExport function for compatibility with non-ESM modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};\n","__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(\n\t\tObject.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t\t__webpack_require__.f[key](chunkId, promises);\n\t\t\treturn promises;\n\t\t}, [])\n\t);\n};","// This function allow to reference chunks\n__webpack_require__.u = (chunkId) => {\n // return url for filenames not based on template\n \n // return url for filenames based on template\n return \"static/js/async/\" + ({\"535\": \"lib-router\",\"783\": \"lib-react\",}[chunkId] || chunkId) + \".\" + {\"407\": \"e320999d\",\"535\": \"539f1a1d\",\"783\": \"d181e959\",\"935\": \"0c7e0e81\",}[chunkId] + \".js\"\n}","// This function allow to reference chunks\n__webpack_require__.miniCssF = (chunkId) => {\n // return url for filenames not based on template\n \n // return url for filenames based on template\n return \"static/css/async/\" + chunkId + \".\" + \"9db00fbf\" + \".css\"\n}","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"/\";","const enableMock = async () => {\n if (import.meta.env.FRONT_MOCK_ENABLE === 'true') {\n const { worker } = await import('@Mocks/browser');\n\n return worker.start({\n onUnhandledRequest: 'warn',\n });\n }\n\n return Promise.resolve();\n};\n\nenableMock().then(() => {\n import('./bootstrap').then(({ default: AppReact }) => {\n customElements.define('app-react', AppReact);\n });\n});\n"],"names":["e","Object","Promise","s","document","clearTimeout","setTimeout","Symbol","Error","r","self","enableMock","AppReact","customElements"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pplancq/react-template",
3
- "version": "2.6.7",
3
+ "version": "2.7.0",
4
4
  "license": "MIT",
5
5
  "description": "react template",
6
6
  "author": "pplancq <paul.plancq@outlook.fr>",
@@ -10,6 +10,9 @@
10
10
  "directory": "packages/react-template"
11
11
  },
12
12
  "type": "module",
13
+ "bin": {
14
+ "template-install": "bin/template-install.js"
15
+ },
13
16
  "scripts": {
14
17
  "start": "rsbuild dev",
15
18
  "start:mock": "rsbuild dev --env-mode mock",
@@ -46,61 +49,62 @@
46
49
  ],
47
50
  "dependencies": {
48
51
  "@hookform/resolvers": "^5.2.1",
49
- "@tanstack/react-query": "^5.84.1",
50
- "@tanstack/react-query-devtools": "^5.84.1",
52
+ "@tanstack/react-query": "^5.87.4",
53
+ "@tanstack/react-query-devtools": "^5.87.4",
51
54
  "react": "^19.1.1",
52
55
  "react-dom": "^19.1.1",
53
- "react-hook-form": "^7.61.1",
54
- "react-router": "^7.7.1",
55
- "yup": "^1.6.1"
56
+ "react-hook-form": "^7.62.0",
57
+ "react-router": "^7.8.2",
58
+ "yup": "^1.7.0"
56
59
  },
57
60
  "devDependencies": {
58
61
  "@bdellegrazie/playwright-sonar-reporter": "^0.4.0",
59
62
  "@commitlint/cli": "^19.8.1",
60
- "@playwright/test": "^1.54.1",
63
+ "@msw/playwright": "^0.4.2",
64
+ "@playwright/test": "^1.55.0",
61
65
  "@pplancq/commitlint-config": "*",
62
66
  "@pplancq/eslint-config": "*",
63
67
  "@pplancq/postcss-config": "*",
64
68
  "@pplancq/prettier-config": "*",
65
69
  "@pplancq/stylelint-config": "*",
66
- "@rsbuild/core": "^1.4.12",
67
- "@rsbuild/plugin-eslint": "^1.1.1",
68
- "@rsbuild/plugin-react": "^1.3.4",
69
- "@rsbuild/plugin-sass": "^1.3.3",
70
- "@testing-library/jest-dom": "^6.6.4",
70
+ "@rsbuild/core": "^1.5.6",
71
+ "@rsbuild/plugin-eslint": "^1.1.2",
72
+ "@rsbuild/plugin-react": "^1.4.0",
73
+ "@rsbuild/plugin-sass": "^1.4.0",
74
+ "@testing-library/jest-dom": "^6.8.0",
71
75
  "@testing-library/react": "^16.3.0",
72
76
  "@testing-library/user-event": "^14.6.1",
73
- "@types/react": "^19.1.9",
74
- "@types/react-dom": "^19.1.7",
75
- "@vitejs/plugin-react-swc": "^3.11.0",
77
+ "@types/react": "^19.1.12",
78
+ "@types/react-dom": "^19.1.9",
79
+ "@vitejs/plugin-react-swc": "^4.0.1",
76
80
  "@vitest/coverage-v8": "^3.2.4",
77
- "concurrently": "^9.2.0",
78
- "eslint": "^9.32.0",
79
- "eslint-plugin-prettier": "^5.5.3",
81
+ "concurrently": "^9.2.1",
82
+ "eslint": "^9.35.0",
83
+ "eslint-plugin-prettier": "^5.5.4",
80
84
  "husky": "^9.1.7",
81
85
  "jsdom": "^26.1.0",
82
- "lint-staged": "^16.1.2",
83
- "monocart-coverage-reports": "^2.12.6",
84
- "msw": "^2.10.4",
86
+ "lint-staged": "^16.1.6",
87
+ "monocart-coverage-reports": "^2.12.8",
88
+ "msw": "^2.11.2",
85
89
  "nodemon": "^3.1.10",
86
90
  "prettier": "^3.6.2",
87
- "stylelint": "^16.23.0",
91
+ "stylelint": "^16.24.0",
88
92
  "stylelint-prettier": "^5.0.3",
89
93
  "stylelint-webpack-plugin": "^5.0.1",
90
94
  "tsc-files": "^1.1.4",
91
95
  "typescript": "^5.9.2",
92
- "vite-plugin-svgr": "^4.3.0",
96
+ "vite-plugin-svgr": "^4.5.0",
93
97
  "vite-tsconfig-paths": "^5.1.4",
94
98
  "vitest": "^3.2.4",
95
99
  "vitest-axe": "^1.0.0-pre.5",
96
- "vitest-sonar-reporter": "^2.0.1"
100
+ "vitest-sonar-reporter": "^2.0.4"
97
101
  },
98
102
  "engines": {
99
103
  "node": ">=20.12.2"
100
104
  },
101
105
  "volta": {
102
- "node": "22.18.0",
103
- "npm": "11.5.2"
106
+ "node": "22.19.0",
107
+ "npm": "11.6.0"
104
108
  },
105
109
  "browserslist": {
106
110
  "production": [
@@ -40,7 +40,7 @@ export default defineConfig({
40
40
  },
41
41
  ],
42
42
  webServer: {
43
- command: 'npm run start:mock',
43
+ command: 'npm run start',
44
44
  url: appUrl,
45
45
  stdout: 'pipe',
46
46
  reuseExistingServer: !process.env.CI,
package/scripts/lint.js CHANGED
@@ -1,7 +1,7 @@
1
1
  // eslint-disable-next-line import/no-extraneous-dependencies
2
2
  import concurrently from 'concurrently';
3
3
 
4
- const { result } = concurrently(['npm:lint:eslint', 'npm:lint:tsc', 'npm:lint:stylelint', 'npm:lint:prettier'], {
4
+ const { result } = concurrently(['npm:lint:*(!fix)'], {
5
5
  prefixColors: 'auto',
6
6
  maxProcesses: process.env.CI ? 1 : undefined,
7
7
  });
@@ -0,0 +1,66 @@
1
+ import { App } from '@Front/components/App';
2
+ import { waitFor } from '@testing-library/react';
3
+ import { StrictMode } from 'react';
4
+ import { createRoot } from 'react-dom/client';
5
+ import { afterEach, beforeEach, describe, expect, it, type Mock, vi } from 'vitest';
6
+ import bootstrap from '../bootstrap';
7
+
8
+ vi.mock('@Front/components/App', () => ({
9
+ App: () => <div data-testid="app-mock">AppMock</div>,
10
+ }));
11
+
12
+ vi.mock('react-dom/client', () => ({
13
+ createRoot: vi.fn(),
14
+ }));
15
+
16
+ describe('bootstrap', () => {
17
+ let container: HTMLElement;
18
+ const render = vi.fn();
19
+ const unmount = vi.fn();
20
+ (createRoot as Mock).mockImplementation(() => ({
21
+ render,
22
+ unmount,
23
+ }));
24
+
25
+ customElements.define('bootstrap-html-element', bootstrap);
26
+
27
+ beforeEach(() => {
28
+ container = document.createElement('bootstrap-html-element');
29
+ });
30
+
31
+ afterEach(() => {
32
+ container.remove();
33
+ });
34
+
35
+ it('should mount the React component in the custom element', () => {
36
+ document.body.appendChild(container);
37
+
38
+ expect(createRoot as Mock).toHaveBeenCalledWith(expect.anything());
39
+ expect(render).toBeCalledWith(
40
+ <StrictMode>
41
+ <App basename="" />
42
+ </StrictMode>,
43
+ );
44
+ expect(unmount).not.toHaveBeenCalled();
45
+ });
46
+
47
+ it('should unmount the React component when removed from the DOM', async () => {
48
+ document.body.appendChild(container);
49
+
50
+ expect(unmount).not.toHaveBeenCalled();
51
+
52
+ container.remove();
53
+
54
+ await waitFor(() => {
55
+ expect(unmount).toHaveBeenCalledWith();
56
+ });
57
+ });
58
+
59
+ it('should not unmount when element is removed and re-added to the DOM', async () => {
60
+ document.body.appendChild(container);
61
+ container.remove();
62
+ document.body.appendChild(container);
63
+
64
+ expect(unmount).not.toHaveBeenCalled();
65
+ });
66
+ });
package/src/bootstrap.tsx CHANGED
@@ -6,6 +6,8 @@ import { createRoot, type Root } from 'react-dom/client';
6
6
  export default class Bootstrap extends HTMLElement {
7
7
  private readonly root: Root;
8
8
 
9
+ private isMounted = false;
10
+
9
11
  constructor() {
10
12
  super();
11
13
 
@@ -13,6 +15,7 @@ export default class Bootstrap extends HTMLElement {
13
15
  }
14
16
 
15
17
  connectedCallback() {
18
+ this.isMounted = true;
16
19
  this.root.render(
17
20
  <StrictMode>
18
21
  <App basename={this.getAttribute('basename') ?? ''} />
@@ -21,6 +24,12 @@ export default class Bootstrap extends HTMLElement {
21
24
  }
22
25
 
23
26
  disconnectedCallback() {
24
- queueMicrotask(() => this.root.unmount());
27
+ this.isMounted = false;
28
+
29
+ queueMicrotask(() => {
30
+ if (!this.isMounted) {
31
+ this.root.unmount();
32
+ }
33
+ });
25
34
  }
26
35
  }
@@ -1,5 +1,5 @@
1
1
  import { expect } from '@playwright/test';
2
- import { describe, it } from './utils/playwright.testWithCoverage';
2
+ import { describe, it } from './fixture/playwright.fixture';
3
3
 
4
4
  describe('Demo Test', () => {
5
5
  it('should have a title', async ({ page }) => {
@@ -0,0 +1,14 @@
1
+ import { createNetworkFixture, type NetworkFixture } from '@msw/playwright';
2
+ import { test as base } from '@playwright/test';
3
+ import { createTestWithCoverageFixture } from '../utils/createTestWithCoverageFixture';
4
+
5
+ export const test = base.extend<{
6
+ testWithCoverage: string;
7
+ network: NetworkFixture;
8
+ }>({
9
+ testWithCoverage: createTestWithCoverageFixture,
10
+ network: createNetworkFixture(),
11
+ });
12
+
13
+ export const it = test;
14
+ export const { describe } = test;
@@ -0,0 +1,31 @@
1
+ import type { PlaywrightTestArgs, PlaywrightWorkerArgs, TestFixture } from '@playwright/test';
2
+ import { test } from '@playwright/test';
3
+ import { CoverageReport } from 'monocart-coverage-reports';
4
+ import { coverageOptions } from '../../mrc.playwright.config';
5
+
6
+ export const createTestWithCoverageFixture = (): [
7
+ TestFixture<string, PlaywrightTestArgs & PlaywrightWorkerArgs>,
8
+ { scope: 'test'; auto: true },
9
+ ] => [
10
+ async ({ page }, use) => {
11
+ const isChromium = test.info().project.name === 'chromium';
12
+
13
+ if (isChromium && coverageOptions.enabled) {
14
+ await page.coverage.startJSCoverage({
15
+ resetOnNavigation: false,
16
+ });
17
+ }
18
+
19
+ await use('testWithCoverage');
20
+
21
+ if (isChromium && coverageOptions.enabled) {
22
+ const coverageList = await page.coverage.stopJSCoverage();
23
+ const mcr = new CoverageReport(coverageOptions);
24
+ await mcr.add(coverageList);
25
+ }
26
+ },
27
+ {
28
+ scope: 'test',
29
+ auto: true,
30
+ },
31
+ ];
package/vitest.config.mts CHANGED
@@ -38,7 +38,7 @@ export default defineConfig(({ mode }) => {
38
38
  },
39
39
  coverage: {
40
40
  enabled: env.CI === 'true',
41
- reporter: ['lcov', 'json', 'html', 'text', 'cobertura'],
41
+ reporter: ['lcovonly', 'html', 'text', 'text-summary'],
42
42
  provider: 'v8',
43
43
  lines: 80,
44
44
  functions: 75,
@@ -1,34 +0,0 @@
1
- import { test as base } from '@playwright/test';
2
- import { CoverageReport } from 'monocart-coverage-reports';
3
- import { coverageOptions } from '../../mrc.playwright.config';
4
-
5
- export const test = base.extend<{
6
- testWithCoverage: string;
7
- }>({
8
- testWithCoverage: [
9
- async ({ page }, use) => {
10
- const isChromium = test.info().project.name === 'chromium';
11
-
12
- if (isChromium && coverageOptions.enabled) {
13
- await page.coverage.startJSCoverage({
14
- resetOnNavigation: false,
15
- });
16
- }
17
-
18
- await use('testWithCoverage');
19
-
20
- if (isChromium && coverageOptions.enabled) {
21
- const coverageList = await page.coverage.stopJSCoverage();
22
- const mcr = new CoverageReport(coverageOptions);
23
- await mcr.add(coverageList);
24
- }
25
- },
26
- {
27
- scope: 'test',
28
- auto: true,
29
- },
30
- ],
31
- });
32
-
33
- export const it = test;
34
- export const { describe } = test;