{"version":3,"sources":["../../../src/lib/hmr.ts"],"names":["container","watch","Result","path","relative"],"mappings":"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","file":"hmr.cjs","sourcesContent":["import { Piece, Result, Store, container } from '@sapphire/framework';\nimport { watch, type ChokidarOptions } from 'chokidar';\nimport { relative } from 'node:path';\n\nexport interface HMROptions extends ChokidarOptions {\n\tenabled?: boolean;\n\tsilent?: boolean;\n}\n\n/**\n * Starts HMR for all registered {@link Store Stores} in {@link container.stores the main container}.\n *\n * @param __namedParameter The {@link HMROptions}.\n * This includes [all options from chokidar](https://github.com/paulmillr/chokidar#persistence),\n * as well as whether the HMR should be enabled.\n * The default options are `{ enabled: true }`,\n * and if not provided in the object then `enabled` is also set to true.\n *\n */\nexport function start({ enabled = true, silent = false, ...options }: HMROptions = { enabled: true }) {\n\t// Do not enable plugin when enabled is false\n\tif (!enabled) return;\n\n\tif (!silent) container.logger.info('[HMR-Plugin]: Enabled. Watching for piece changes.');\n\n\tfor (const store of container.stores.values()) {\n\t\twatch([...store.paths], options)\n\t\t\t.on('change', (path) => handlePiecePathUpdate(store, path, silent))\n\t\t\t.on('unlink', (path) => handlePiecePathDelete(store, path, silent));\n\t}\n}\n\nasync function handlePiecePathDelete(store: Store<Piece>, path: string, silent: boolean) {\n\tif (!store.strategy.filter(path)) return;\n\n\tconst pieceToDelete = store.find((piece) => piece.location.full === path);\n\tif (!pieceToDelete) return;\n\n\tconst result = await Result.fromAsync(async () => {\n\t\tawait pieceToDelete.unload();\n\t\tif (!silent) container.logger.info(`[HMR-Plugin]: Unloaded ${pieceToDelete.name} piece from ${pieceToDelete.store.name} store.`);\n\t});\n\n\tresult.inspectErr((error) =>\n\t\tcontainer.logger.error(`[HMR-Plugin]: Failed to unload ${pieceToDelete.name} piece from ${pieceToDelete.store.name} store.`, error)\n\t);\n}\n\nasync function handlePiecePathUpdate(store: Store<Piece>, path: string, silent: boolean) {\n\tif (!store.strategy.filter(path)) return;\n\n\tconst pieceToUpdate = store.find((piece) => piece.location.full === path);\n\n\tconst result = await Result.fromAsync(async () => {\n\t\tif (pieceToUpdate) {\n\t\t\tawait pieceToUpdate.reload();\n\t\t\tif (!silent) container.logger.info(`[HMR-Plugin]: reloaded ${pieceToUpdate.name} piece from ${pieceToUpdate.store.name} store.`);\n\t\t} else {\n\t\t\tconst rootPath = [...store.paths].find((storePath) => path.startsWith(storePath));\n\t\t\tif (!rootPath) throw new Error(`[HMR-Plugin]: Could not find root path for ${path}.`);\n\n\t\t\tconst piecesLoaded = await store.load(rootPath, relative(rootPath, path));\n\t\t\tconst piecesLoadedNames = piecesLoaded.map((piece) => piece.name);\n\t\t\tconst piecesLoadedStoreNames = piecesLoaded.map((piece) => piece.store.name);\n\t\t\tif (!silent)\n\t\t\t\tcontainer.logger.info(\n\t\t\t\t\t`[HMR-Plugin]: Loaded ${piecesLoadedNames.join(', ')} piece(s) from ${[...new Set(piecesLoadedStoreNames)].join(', ')} store(s).`\n\t\t\t\t);\n\t\t}\n\t});\n\n\tresult.inspectErr((error) => container.logger.error(`[HMR-Plugin]: Failed to load pieces from ${path}.`, error));\n}\n"]}