UNPKG

htmldocs

Version:

<h1 align="center"> <img src="https://github.com/user-attachments/assets/655fa7f9-98e7-42ee-8cd0-bb9193f100e9" alt="htmldocs" width="100%" /> </h1>

1,141 lines (1,139 loc) 133 kB
#!/usr/bin/env node function _array_like_to_array(arr, len) { if (len == null || len > arr.length) len = arr.length; for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i]; return arr2; } function _array_with_holes(arr) { if (Array.isArray(arr)) return arr; } function _array_without_holes(arr) { if (Array.isArray(arr)) return _array_like_to_array(arr); } function _async_iterator(iterable) { var method, async, sync, retry = 2; for("undefined" != typeof Symbol && (async = Symbol.asyncIterator, sync = Symbol.iterator); retry--;){ if (async && null != (method = iterable[async])) return method.call(iterable); if (sync && null != (method = iterable[sync])) return new AsyncFromSyncIterator(method.call(iterable)); async = "@@asyncIterator", sync = "@@iterator"; } throw new TypeError("Object is not async iterable"); } function AsyncFromSyncIterator(s) { function AsyncFromSyncIteratorContinuation(r) { if (Object(r) !== r) return Promise.reject(new TypeError(r + " is not an object.")); var done = r.done; return Promise.resolve(r.value).then(function(value) { return { value: value, done: done }; }); } return AsyncFromSyncIterator = function(s) { this.s = s, this.n = s.next; }, AsyncFromSyncIterator.prototype = { s: null, n: null, next: function() { return AsyncFromSyncIteratorContinuation(this.n.apply(this.s, arguments)); }, return: function(value) { var ret = this.s.return; return void 0 === ret ? Promise.resolve({ value: value, done: !0 }) : AsyncFromSyncIteratorContinuation(ret.apply(this.s, arguments)); }, throw: function(value) { var thr = this.s.return; return void 0 === thr ? Promise.reject(value) : AsyncFromSyncIteratorContinuation(thr.apply(this.s, arguments)); } }, new AsyncFromSyncIterator(s); } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _async_to_generator(fn) { return function() { var self = this, args = arguments; return new Promise(function(resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function _class_call_check(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for(var i = 0; i < props.length; i++){ var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _create_class(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } function _define_property(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _iterable_to_array(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } function _iterable_to_array_limit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){ _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally{ try { if (!_n && _i["return"] != null) _i["return"](); } finally{ if (_d) throw _e; } } return _arr; } function _non_iterable_rest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _non_iterable_spread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _object_spread(target) { for(var i = 1; i < arguments.length; i++){ var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === "function") { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function(key) { _define_property(target, key, source[key]); }); } return target; } function _sliced_to_array(arr, i) { return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest(); } function _to_consumable_array(arr) { return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread(); } function _unsupported_iterable_to_array(o, minLen) { if (!o) return; if (typeof o === "string") return _array_like_to_array(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(n); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen); } function _ts_generator(thisArg, body) { var f, y, t, g, _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function(v) { return step([ n, v ]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while(_)try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [ op[0] & 2, t.value ]; switch(op[0]){ case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [ 0 ]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [ 6, e ]; y = 0; } finally{ f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } } // src/cli/index.ts import { program } from "commander"; // package.json var package_default = { name: "htmldocs", keywords: [ "pdf", "document", "generator", "react", "typescript", "tailwind", "jsx", "template", "invoice", "resume", "report", "contract", "pdf-generator", "pdf-template", "pdf-document", "pdf-editor", "pdf-creator", "latex", "pagedjs", "react-pdf", "typst", "invoice-generator", "resume-generator", "report-generator", "contract-generator" ], version: "0.2.30", homepage: "https://htmldocs.com", repository: { type: "git", url: "https://github.com/htmldocs-js/htmldocs" }, bin: { htmldocs: "./dist/cli/index.mjs" }, scripts: { init: "npx playwright install", build: "node build-preview-server.mjs && pnpm build-cli", "build:dev": "node build-preview-server.mjs && pnpm build-cli:dev", "build-cli": "API_URL=https://htmldocs.com tsup-node", "build-cli:dev": "API_URL=http://localhost:3000 tsup-node && pnpm link --global", dev: "next dev", start: "next start", lint: "next lint", tsc: "tsc", test: "vitest", "test:coverage": "vitest run --coverage" }, dependencies: { "@babel/core": "^7.24.6", "@babel/parser": "^7.24.5", "@babel/preset-typescript": "^7.24.6", "@htmldocs/render": "workspace:*", "@next/bundle-analyzer": "^15.1.6", "@phosphor-icons/react": "^2.1.5", "@radix-ui/react-collapsible": "^1.0.3", "@radix-ui/react-dialog": "^1.1.1", "@radix-ui/react-dropdown-menu": "^2.0.6", "@radix-ui/react-icons": "^1.3.0", "@radix-ui/react-label": "^2.1.0", "@radix-ui/react-scroll-area": "^1.0.5", "@radix-ui/react-slot": "^1.0.2", "@radix-ui/react-switch": "^1.1.0", "@radix-ui/react-tabs": "^1.0.4", "@radix-ui/react-toggle-group": "^1.0.4", "@radix-ui/react-tooltip": "^1.0.7", "@tailwindcss/typography": "0.5.9", "adm-zip": "^0.5.14", autoprefixer: "^10.4.19", chalk: "^4.1.2", chokidar: "^3.6.0", "class-variance-authority": "^0.7.0", clsx: "^2.1.1", commander: "^12.1.0", cva: "1.0.0-beta.1", debounce: "^2.0.0", dotenv: "^16.4.7", esbuild: "^0.21.3", "esbuild-plugin-tsc": "^0.4.0", "esbuild-style-plugin": "^1.6.3", "form-data": "^4.0.0", "framer-motion": "^11.2.6", "fs-extra": "^11.2.0", inquirer: "^11.0.2", lodash: "^4.17.21", "log-symbols": "^4.1.0", "mime-types": "^2.1.35", next: "14.2.3", "next-themes": "^0.3.0", "node-fetch": "^2.7.0", onetime: "^7.0.0", open: "^8.4.2", ora: "^5.4.1", pino: "^9.3.2", playwright: "^1.44.1", postcss: "^8.4.38", react: "^18.2.0", "react-docgen": "^7.0.3", "react-dom": "^18.2.0", "socket.io": "^4.7.5", "socket.io-client": "^4.7.5", sonner: "^1.4.41", "source-map-js": "^1.2.0", "tailwind-merge": "^2.3.0", tailwindcss: "^3.4.3", "tailwindcss-animate": "^1.0.7", "ts-json-schema-generator": "^2.2.0", zod: "^3.23.8" }, devDependencies: { "@swc/core": "^1.5.7", "@types/babel__core": "^7.20.5", "@types/json-schema": "^7.0.15", "@types/mime-types": "^2.1.4", "@types/node": "^20", "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", tsup: "^8.0.2", typescript: "^5" } }; // src/cli/commands/dev.ts import fs3 from "node:fs"; // src/cli/utils/preview/start-dev-server.ts import path2 from "node:path"; import http from "node:http"; import url from "node:url"; import next from "next"; import ora from "ora"; import logSymbols from "log-symbols"; import chalk from "chalk"; // src/cli/utils/close-ora-on-sigint.ts var closeOraOnSIGINT = function(spinner) { process.on("SIGINT", function() { spinner.stop(); }); }; // src/cli/utils/preview/serve-static-file.ts import path from "node:path"; import { promises as fs } from "node:fs"; import { lookup } from "mime-types"; var serveStaticFile = /*#__PURE__*/ function() { var _ref = _async_to_generator(function(res, parsedUrl, staticDirRelativePath) { var staticBaseDir, pathname, ext, fileAbsolutePath, fileHandle, fileData, exception; return _ts_generator(this, function(_state) { switch(_state.label){ case 0: staticBaseDir = path.join(process.cwd(), staticDirRelativePath); pathname = parsedUrl.pathname; ext = path.parse(pathname).ext; fileAbsolutePath = path.join(staticBaseDir, pathname); return [ 4, fs.open(fileAbsolutePath, "r") ]; case 1: fileHandle = _state.sent(); _state.label = 2; case 2: _state.trys.push([ 2, 4, 5, 6 ]); return [ 4, fs.readFile(fileHandle) ]; case 3: fileData = _state.sent(); res.setHeader("Content-type", lookup(ext) || "text/plain"); res.end(fileData); return [ 3, 6 ]; case 4: exception = _state.sent(); console.error("Could not read file at ".concat(fileAbsolutePath, " to be served, here's the exception:"), exception); res.statusCode = 500; res.end("Could not read file to be served! Check your terminal for more information."); return [ 3, 6 ]; case 5: fileHandle.close(); return [ 7 ]; case 6: return [ 2 ]; } }); }); return function serveStaticFile(res, parsedUrl, staticDirRelativePath) { return _ref.apply(this, arguments); }; }(); // src/cli/utils/preview/start-dev-server.ts import { fileURLToPath } from "url"; import { dirname } from "path"; var __filename = fileURLToPath(import.meta.url); var __dirname = dirname(__filename); var devServer; var safeAsyncServerListen = function(server, port) { return new Promise(function(resolve) { server.listen(port, function() { resolve({ portAlreadyInUse: false }); }); server.on("error", function(e) { if (e.code === "EADDRINUSE") { resolve({ portAlreadyInUse: true }); } }); }); }; var isRunningBuilt = __filename.endsWith(path2.join("cli", "index.mjs")); var cliPackageLocation = isRunningBuilt ? path2.resolve(__dirname, "../") : path2.resolve(__dirname, "../../../.."); var previewServerLocation = isRunningBuilt ? path2.resolve(__dirname, "../preview") : path2.resolve(__dirname, "../../../.."); var startDevServer = /*#__PURE__*/ function() { var _ref = _async_to_generator(function(documentsDirRelativePath2, staticBaseDirRelativePath, port) { var portAlreadyInUse, nextPortToTry, spinner, timeBeforeNextReady, app, isNextReady, nextReadyPromise, nextHandleRequest, secondsToNextReady; return _ts_generator(this, function(_state) { switch(_state.label){ case 0: devServer = http.createServer(function(req, res) { if (!req.url) { res.end(404); return; } var parsedUrl = url.parse(req.url, true); res.setHeader("Cache-Control", "no-cache, max-age=0, must-revalidate, no-store"); res.setHeader("Pragma", "no-cache"); res.setHeader("Expires", "-1"); try { if (parsedUrl.path && parsedUrl.path.includes("static/") && !parsedUrl.path.includes("_next/static/")) { void serveStaticFile(res, parsedUrl, staticBaseDirRelativePath); } else if (!isNextReady) { void nextReadyPromise.then(function() { return nextHandleRequest === null || nextHandleRequest === void 0 ? void 0 : nextHandleRequest(req, res, parsedUrl); }); } else { void (nextHandleRequest === null || nextHandleRequest === void 0 ? void 0 : nextHandleRequest(req, res, parsedUrl)); } } catch (e) { console.error("caught error", e); res.writeHead(500); res.end(); } }); return [ 4, safeAsyncServerListen(devServer, port) ]; case 1: portAlreadyInUse = _state.sent().portAlreadyInUse; if (!portAlreadyInUse) { console.log(chalk.greenBright(" htmldocs ".concat(package_default.version))); console.log(" Running preview at: http://localhost:".concat(port, "\n")); } else { nextPortToTry = port + 1; console.warn(" ".concat(logSymbols.warning, " Port ").concat(port, " is already in use, trying ").concat(nextPortToTry)); return [ 2, startDevServer(documentsDirRelativePath2, staticBaseDirRelativePath, nextPortToTry) ]; } devServer.on("close", /*#__PURE__*/ _async_to_generator(function() { return _ts_generator(this, function(_state) { switch(_state.label){ case 0: return [ 4, app.close() ]; case 1: _state.sent(); return [ 2 ]; } }); })); devServer.on("error", function(e) { console.error(" ".concat(logSymbols.error, " preview server error: "), JSON.stringify(e)); process.exit(1); }); spinner = ora({ text: "Getting htmldocs preview server ready...\n", prefixText: " " }).start(); closeOraOnSIGINT(spinner); timeBeforeNextReady = performance.now(); app = next({ // passing in env here does not get the environment variables there dev: !isRunningBuilt, hostname: "localhost", port: port, dir: previewServerLocation }); isNextReady = false; nextReadyPromise = app.prepare(); return [ 4, nextReadyPromise ]; case 2: _state.sent(); isNextReady = true; nextHandleRequest = app.getRequestHandler(); secondsToNextReady = ((performance.now() - timeBeforeNextReady) / 1e3).toFixed(1); spinner.stopAndPersist({ text: "Ready in ".concat(secondsToNextReady, "s\n"), symbol: logSymbols.success }); return [ 2, devServer ]; } }); }); return function startDevServer(documentsDirRelativePath2, staticBaseDirRelativePath, port) { return _ref.apply(this, arguments); }; }(); var makeExitHandler = function(options) { return function(_codeOrSignal) { if (typeof devServer !== "undefined") { console.log("\nshutting down dev server"); devServer.close(); devServer = void 0; } if (options === null || options === void 0 ? void 0 : options.shouldKillProcess) { process.exit(options.killWithErrorCode ? 1 : 0); } }; }; process.on("exit", makeExitHandler()); process.on("SIGINT", makeExitHandler({ shouldKillProcess: true, killWithErrorCode: false })); process.on("SIGUSR1", makeExitHandler({ shouldKillProcess: true, killWithErrorCode: false })); process.on("SIGUSR2", makeExitHandler({ shouldKillProcess: true, killWithErrorCode: false })); // src/cli/utils/preview/hot-reloading/setup-hot-reloading.ts import path4 from "node:path"; import { watch } from "chokidar"; import debounce from "debounce"; import { Server as SocketServer } from "socket.io"; // src/cli/utils/preview/hot-reloading/create-dependency-graph.ts import path3 from "node:path"; import { existsSync, promises as fs2, statSync } from "node:fs"; // src/cli/utils/preview/hot-reloading/get-imported-modules.ts import { traverse } from "@babel/core"; import { parse } from "@babel/parser"; var getImportedModules = function(contents) { var importedPaths = []; var parsedContents = parse(contents, { sourceType: "unambiguous", strictMode: false, errorRecovery: true, plugins: [ "jsx", "typescript" ] }); traverse(parsedContents, { ImportDeclaration: function ImportDeclaration(param) { var node = param.node; importedPaths.push(node.source.value); }, ExportAllDeclaration: function ExportAllDeclaration(param) { var node = param.node; importedPaths.push(node.source.value); }, ExportNamedDeclaration: function ExportNamedDeclaration(param) { var node = param.node; if (node.source) { importedPaths.push(node.source.value); } }, CallExpression: function CallExpression(param) { var node = param.node; if ("name" in node.callee && node.callee.name === "require") { if (node.arguments.length === 1) { var importPathNode = node.arguments[0]; if (importPathNode.type === "StringLiteral") { importedPaths.push(importPathNode.value); } } } } }); return importedPaths; }; // src/cli/utils/preview/hot-reloading/create-dependency-graph.ts var readAllFilesInsideDirectory = /*#__PURE__*/ function() { var _ref = _async_to_generator(function(directory) { var allFilePaths, topLevelDirents, _iteratorAbruptCompletion, _didIteratorError, _iteratorError, _iterator, _step, _value, dirent, pathToDirent, _, err; return _ts_generator(this, function(_state) { switch(_state.label){ case 0: allFilePaths = []; return [ 4, fs2.readdir(directory, { withFileTypes: true }) ]; case 1: topLevelDirents = _state.sent(); _iteratorAbruptCompletion = false, _didIteratorError = false; _state.label = 2; case 2: _state.trys.push([ 2, 9, 10, 15 ]); _iterator = _async_iterator(topLevelDirents); _state.label = 3; case 3: return [ 4, _iterator.next() ]; case 4: if (!(_iteratorAbruptCompletion = !(_step = _state.sent()).done)) return [ 3, 8 ]; _value = _step.value; dirent = _value; pathToDirent = path3.join(directory, dirent.name); if (!dirent.isDirectory()) return [ 3, 6 ]; _ = allFilePaths.concat; return [ 4, readAllFilesInsideDirectory(pathToDirent) ]; case 5: allFilePaths = _.apply(allFilePaths, [ _state.sent() ]); return [ 3, 7 ]; case 6: allFilePaths.push(pathToDirent); _state.label = 7; case 7: _iteratorAbruptCompletion = false; return [ 3, 3 ]; case 8: return [ 3, 15 ]; case 9: err = _state.sent(); _didIteratorError = true; _iteratorError = err; return [ 3, 15 ]; case 10: _state.trys.push([ 10, , 13, 14 ]); if (!(_iteratorAbruptCompletion && _iterator.return != null)) return [ 3, 12 ]; return [ 4, _iterator.return() ]; case 11: _state.sent(); _state.label = 12; case 12: return [ 3, 14 ]; case 13: if (_didIteratorError) { throw _iteratorError; } return [ 7 ]; case 14: return [ 7 ]; case 15: return [ 2, allFilePaths ]; } }); }); return function readAllFilesInsideDirectory(directory) { return _ref.apply(this, arguments); }; }(); var isJavascriptModule = function(filePath) { var extensionName = path3.extname(filePath); return [ ".js", ".ts", ".jsx", ".tsx", ".mjs", ".cjs" ].includes(extensionName); }; var checkFileExtensionsUntilItExists = function(pathWithoutExtension) { if (existsSync("".concat(pathWithoutExtension, ".ts"))) { return "".concat(pathWithoutExtension, ".ts"); } else if (existsSync("".concat(pathWithoutExtension, ".tsx"))) { return "".concat(pathWithoutExtension, ".tsx"); } else if (existsSync("".concat(pathWithoutExtension, ".js"))) { return "".concat(pathWithoutExtension, ".js"); } else if (existsSync("".concat(pathWithoutExtension, ".jsx"))) { return "".concat(pathWithoutExtension, ".jsx"); } else if (existsSync("".concat(pathWithoutExtension, ".mjs"))) { return "".concat(pathWithoutExtension, ".mjs"); } else if (existsSync("".concat(pathWithoutExtension, ".cjs"))) { return "".concat(pathWithoutExtension, ".cjs"); } }; var createDependencyGraph = /*#__PURE__*/ function() { var _ref = _async_to_generator(function(directory) { var filePaths, modulePaths, graph, getDependencyPaths, updateModuleDependenciesInGraph, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, filePath, err, removeModuleFromGraph; return _ts_generator(this, function(_state) { switch(_state.label){ case 0: return [ 4, readAllFilesInsideDirectory(directory) ]; case 1: filePaths = _state.sent(); modulePaths = filePaths.filter(isJavascriptModule); graph = Object.fromEntries(modulePaths.map(function(path12) { return [ path12, { path: path12, dependencyPaths: [], dependentPaths: [], moduleDependencies: [] } ]; })); getDependencyPaths = /*#__PURE__*/ function() { var _ref = _async_to_generator(function(filePath) { var contents, importedPaths, importedPathsRelativeToDirectory, moduleDependencies, nonNodeModuleImportPathsRelativeToDirectory; return _ts_generator(this, function(_state) { switch(_state.label){ case 0: return [ 4, fs2.readFile(filePath, "utf8") ]; case 1: contents = _state.sent(); importedPaths = getImportedModules(contents); importedPathsRelativeToDirectory = importedPaths.map(function(dependencyPath) { var isModulePath = !dependencyPath.startsWith("."); if (!isModulePath && !path3.isAbsolute(dependencyPath)) { var pathToDependencyFromDirectory = path3.resolve(/* path.resolve resolves paths differently from what imports on javascript do. So if we wouldn't do this, for an email at "/path/to/email.tsx" with a dependecy path of "./other-email" would end up going into /path/to/email.tsx/other-email instead of /path/to/other-email which is the one the import is meant to go to */ path3.dirname(filePath), dependencyPath); var isDirectory = false; try { isDirectory = statSync(pathToDependencyFromDirectory).isDirectory(); } catch (_) {} if (isDirectory) { var pathToSubDirectory = pathToDependencyFromDirectory; var pathWithExtension = checkFileExtensionsUntilItExists("".concat(pathToSubDirectory, "/index")); if (pathWithExtension) { pathToDependencyFromDirectory = pathWithExtension; } else if (isRunningBuilt) { console.warn("Could not find index file for directory at ".concat(pathToDependencyFromDirectory, ". This is probably going to cause issues with both hot reloading and your code.")); } } if (!isJavascriptModule(pathToDependencyFromDirectory)) { var pathWithExtension1 = checkFileExtensionsUntilItExists(pathToDependencyFromDirectory); if (pathWithExtension1) { pathToDependencyFromDirectory = pathWithExtension1; } else if (isRunningBuilt) { console.warn("Could not determine the file extension for the file at ".concat(pathWithExtension1)); } } return pathToDependencyFromDirectory; } else { return dependencyPath; } }); moduleDependencies = importedPathsRelativeToDirectory.filter(function(dependencyPath) { return !dependencyPath.startsWith(".") && !path3.isAbsolute(dependencyPath); }); nonNodeModuleImportPathsRelativeToDirectory = importedPathsRelativeToDirectory.filter(function(dependencyPath) { return dependencyPath.startsWith(".") || path3.isAbsolute(dependencyPath); }); return [ 2, { dependencyPaths: nonNodeModuleImportPathsRelativeToDirectory, moduleDependencies: moduleDependencies } ]; } }); }); return function getDependencyPaths(filePath) { return _ref.apply(this, arguments); }; }(); updateModuleDependenciesInGraph = /*#__PURE__*/ function() { var _ref = _async_to_generator(function(moduleFilePath) { var _graph_moduleFilePath, module, _ref, moduleDependencies, newDependencyPaths, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, dependencyPath, dependencyModule, _iteratorNormalCompletion1, _didIteratorError1, _iteratorError1, _iterator1, _step1, dependencyPath1, dependencyModule1; return _ts_generator(this, function(_state) { switch(_state.label){ case 0: module = (_graph_moduleFilePath = graph[moduleFilePath]) !== null && _graph_moduleFilePath !== void 0 ? _graph_moduleFilePath : { path: moduleFilePath, dependencyPaths: [], dependentPaths: [], moduleDependencies: [] }; return [ 4, getDependencyPaths(moduleFilePath) ]; case 1: _ref = _state.sent(), moduleDependencies = _ref.moduleDependencies, newDependencyPaths = _ref.dependencyPaths; module.moduleDependencies = moduleDependencies; _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined; try { for(_iterator = module.dependencyPaths[Symbol.iterator](); !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){ dependencyPath = _step.value; if (newDependencyPaths.includes(dependencyPath)) continue; dependencyModule = graph[dependencyPath]; if (dependencyModule !== void 0) { dependencyModule.dependentPaths = dependencyModule.dependentPaths.filter(function(dependentPath) { return dependentPath !== moduleFilePath; }); } } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally{ try { if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally{ if (_didIteratorError) { throw _iteratorError; } } } module.dependencyPaths = newDependencyPaths; _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined; try { for(_iterator1 = newDependencyPaths[Symbol.iterator](); !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){ dependencyPath1 = _step1.value; dependencyModule1 = graph[dependencyPath1]; if (dependencyModule1 !== void 0 && !dependencyModule1.dependentPaths.includes(moduleFilePath)) { dependencyModule1.dependentPaths.push(moduleFilePath); } else { graph[dependencyPath1] = { path: dependencyPath1, moduleDependencies: [], dependencyPaths: [], dependentPaths: [ moduleFilePath ] }; } } } catch (err) { _didIteratorError1 = true; _iteratorError1 = err; } finally{ try { if (!_iteratorNormalCompletion1 && _iterator1.return != null) { _iterator1.return(); } } finally{ if (_didIteratorError1) { throw _iteratorError1; } } } graph[moduleFilePath] = module; return [ 2 ]; } }); }); return function updateModuleDependenciesInGraph(moduleFilePath) { return _ref.apply(this, arguments); }; }(); _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined; _state.label = 2; case 2: _state.trys.push([ 2, 7, 8, 9 ]); _iterator = modulePaths[Symbol.iterator](); _state.label = 3; case 3: if (!!(_iteratorNormalCompletion = (_step = _iterator.next()).done)) return [ 3, 6 ]; filePath = _step.value; return [ 4, updateModuleDependenciesInGraph(filePath) ]; case 4: _state.sent(); _state.label = 5; case 5: _iteratorNormalCompletion = true; return [ 3, 3 ]; case 6: return [ 3, 9 ]; case 7: err = _state.sent(); _didIteratorError = true; _iteratorError = err; return [ 3, 9 ]; case 8: try { if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally{ if (_didIteratorError) { throw _iteratorError; } } return [ 7 ]; case 9: removeModuleFromGraph = function(filePath) { var module = graph[filePath]; if (module) { var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined; try { for(var _iterator = module.dependencyPaths[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){ var dependencyPath = _step.value; if (graph[dependencyPath]) { graph[dependencyPath].dependentPaths = graph[dependencyPath].dependentPaths.filter(function(dependentPath) { return dependentPath !== filePath; }); } } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally{ try { if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally{ if (_didIteratorError) { throw _iteratorError; } } } delete graph[filePath]; } }; return [ 2, [ graph, /*#__PURE__*/ function() { var _ref = /** * @param pathToModified - A path relative to the previosuly provided {@link directory}. */ _async_to_generator(function(event, pathToModified) { var filesInsideAddedDirectory, modulesInsideAddedDirectory, _iteratorAbruptCompletion, _didIteratorError, _iteratorError, _iterator, _step, _value, filePath, err, filesInsideDeletedDirectory, modulesInsideDeletedDirectory, _iteratorAbruptCompletion1, _didIteratorError1, _iteratorError1, _iterator1, _step1, _value1, filePath1, err1; return _ts_generator(this, function(_state) { switch(_state.label){ case 0: switch(event){ case "change": return [ 3, 1 ]; case "add": return [ 3, 4 ]; case "addDir": return [ 3, 7 ]; case "unlink": return [ 3, 22 ];