source: imaps-frontend/node_modules/@vitejs/plugin-react/dist/refreshUtils.js@ 0c6b92a

main
Last change on this file since 0c6b92a was 0c6b92a, checked in by stefan toskovski <stefantoska84@…>, 5 weeks ago

Pred finalna verzija

  • Property mode set to 100644
File size: 3.1 KB
Line 
1function debounce(fn, delay) {
2 let handle
3 return () => {
4 clearTimeout(handle)
5 handle = setTimeout(fn, delay)
6 }
7}
8
9/* eslint-disable no-undef */
10const hooks = []
11window.__registerBeforePerformReactRefresh = (cb) => {
12 hooks.push(cb)
13}
14const enqueueUpdate = debounce(async () => {
15 if (hooks.length) await Promise.all(hooks.map((cb) => cb()))
16 exports.performReactRefresh()
17}, 16)
18
19// Taken from https://github.com/pmmmwh/react-refresh-webpack-plugin/blob/main/lib/runtime/RefreshUtils.js#L141
20// This allows to resister components not detected by SWC like styled component
21function registerExportsForReactRefresh(filename, moduleExports) {
22 for (const key in moduleExports) {
23 if (key === '__esModule') continue
24 const exportValue = moduleExports[key]
25 if (exports.isLikelyComponentType(exportValue)) {
26 // 'export' is required to avoid key collision when renamed exports that
27 // shadow a local component name: https://github.com/vitejs/vite-plugin-react/issues/116
28 // The register function has an identity check to not register twice the same component,
29 // so this is safe to not used the same key here.
30 exports.register(exportValue, filename + ' export ' + key)
31 }
32 }
33}
34
35function validateRefreshBoundaryAndEnqueueUpdate(id, prevExports, nextExports) {
36 const ignoredExports = window.__getReactRefreshIgnoredExports?.({ id }) ?? []
37 if (
38 predicateOnExport(
39 ignoredExports,
40 prevExports,
41 (key) => key in nextExports,
42 ) !== true
43 ) {
44 return 'Could not Fast Refresh (export removed)'
45 }
46 if (
47 predicateOnExport(
48 ignoredExports,
49 nextExports,
50 (key) => key in prevExports,
51 ) !== true
52 ) {
53 return 'Could not Fast Refresh (new export)'
54 }
55
56 let hasExports = false
57 const allExportsAreComponentsOrUnchanged = predicateOnExport(
58 ignoredExports,
59 nextExports,
60 (key, value) => {
61 hasExports = true
62 if (exports.isLikelyComponentType(value)) return true
63 return prevExports[key] === nextExports[key]
64 },
65 )
66 if (hasExports && allExportsAreComponentsOrUnchanged === true) {
67 enqueueUpdate()
68 } else {
69 return `Could not Fast Refresh ("${allExportsAreComponentsOrUnchanged}" export is incompatible). Learn more at https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-react#consistent-components-exports`
70 }
71}
72
73function predicateOnExport(ignoredExports, moduleExports, predicate) {
74 for (const key in moduleExports) {
75 if (key === '__esModule') continue
76 if (ignoredExports.includes(key)) continue
77 const desc = Object.getOwnPropertyDescriptor(moduleExports, key)
78 if (desc && desc.get) return key
79 if (!predicate(key, moduleExports[key])) return key
80 }
81 return true
82}
83
84// Hides vite-ignored dynamic import so that Vite can skip analysis if no other
85// dynamic import is present (https://github.com/vitejs/vite/pull/12732)
86function __hmr_import(module) {
87 return import(/* @vite-ignore */ module)
88}
89
90exports.__hmr_import = __hmr_import
91exports.registerExportsForReactRefresh = registerExportsForReactRefresh
92exports.validateRefreshBoundaryAndEnqueueUpdate =
93 validateRefreshBoundaryAndEnqueueUpdate
Note: See TracBrowser for help on using the repository browser.