UNPKG

@mui/internal-docs-infra

Version:

MUI Infra - internal documentation creation tools.

135 lines (133 loc) 7.1 kB
import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime"; import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2"; import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray"; import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator"; import { readFile } from 'node:fs/promises'; import { parseImports } from "../loaderUtils/index.js"; import { resolveImportResultWithFs } from "../loaderUtils/resolveModulePathWithFs.js"; import { processRelativeImports } from "../loaderUtils/processRelativeImports.js"; import { isJavaScriptModule } from "../loaderUtils/resolveModulePath.js"; /** * Default loadServerSource function that reads a file and extracts its dependencies. * This function is used to load source files for demos, resolving their imports and dependencies. * It reads the source file, resolves its imports, and returns the processed source along with any * additional files and dependencies that were found. */ export var loadServerSource = createLoadServerSource(); /** * Creates a loadSource function that reads a file and extracts its dependencies. * * @param options.storeAt - Controls how imports are stored in extraFiles: * - 'canonical': Full resolved path (e.g., '../Component/index.js') * - 'import': Import path with file extension (e.g., '../Component.js') * - 'flat': Flattened to current directory with rewritten imports (e.g., './Component.js') */ export function createLoadServerSource() { var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var _options$includeDepen = options.includeDependencies, includeDependencies = _options$includeDepen === void 0 ? true : _options$includeDepen, _options$storeAt = options.storeAt, storeAt = _options$storeAt === void 0 ? 'flat' : _options$storeAt; return /*#__PURE__*/function () { var _loadSource = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(url) { var filePath, source, isJavascriptModuleFile, _yield$parseImports, importResult, externals, transformedExternals, _i, _Object$entries, _Object$entries$_i, modulePath, externalImport, relativeImportsCompatible, _i2, _Object$entries2, _Object$entries2$_i, importPath, _Object$entries2$_i$, path, names, includeTypeDefs, resolvedPathsMap, _processRelativeImpor, processedSource, extraFiles, extraDependencies; return _regeneratorRuntime().wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: // Remove file:// prefix if present filePath = url.replace('file://', ''); // Read the file _context.next = 3; return readFile(filePath, 'utf8'); case 3: source = _context.sent; if (includeDependencies) { _context.next = 6; break; } return _context.abrupt("return", { source: source }); case 6: // Check if this is a static asset file (non-JS/TS modules) isJavascriptModuleFile = isJavaScriptModule(filePath); if (isJavascriptModuleFile) { _context.next = 9; break; } return _context.abrupt("return", { source: source }); case 9: _context.next = 11; return parseImports(source, filePath); case 11: _yield$parseImports = _context.sent; importResult = _yield$parseImports.relative; externals = _yield$parseImports.externals; // Transform externals from parseImports format to simplified format transformedExternals = {}; for (_i = 0, _Object$entries = Object.entries(externals); _i < _Object$entries.length; _i++) { _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2), modulePath = _Object$entries$_i[0], externalImport = _Object$entries$_i[1]; transformedExternals[modulePath] = externalImport.names.map(function (importName) { return { name: importName.name, type: importName.type, isType: importName.isType }; }); } if (!(Object.keys(importResult).length === 0)) { _context.next = 18; break; } return _context.abrupt("return", { source: source, externals: Object.keys(transformedExternals).length > 0 ? transformedExternals : undefined }); case 18: // Convert to format expected by resolveImportResultWithFs and processImports relativeImportsCompatible = {}; for (_i2 = 0, _Object$entries2 = Object.entries(importResult); _i2 < _Object$entries2.length; _i2++) { _Object$entries2$_i = _slicedToArray(_Object$entries2[_i2], 2), importPath = _Object$entries2$_i[0], _Object$entries2$_i$ = _Object$entries2$_i[1], path = _Object$entries2$_i$.path, names = _Object$entries2$_i$.names, includeTypeDefs = _Object$entries2$_i$.includeTypeDefs; relativeImportsCompatible[importPath] = _objectSpread({ path: path, names: names.map(function (_ref) { var name = _ref.name, alias = _ref.alias; return alias || name; }) }, includeTypeDefs && { includeTypeDefs: includeTypeDefs }); } // Resolve import paths, handling JS/TS modules and static assets appropriately _context.next = 22; return resolveImportResultWithFs(relativeImportsCompatible); case 22: resolvedPathsMap = _context.sent; // Process imports using the consolidated helper function _processRelativeImpor = processRelativeImports(source, relativeImportsCompatible, resolvedPathsMap, storeAt), processedSource = _processRelativeImpor.processedSource, extraFiles = _processRelativeImpor.extraFiles; // Build dependencies list for recursive loading extraDependencies = Object.values(importResult).map(function (_ref2) { var path = _ref2.path; return resolvedPathsMap.get(path); }).filter(function (path) { return path !== undefined; }); return _context.abrupt("return", { source: processedSource, extraFiles: Object.keys(extraFiles).length > 0 ? extraFiles : undefined, extraDependencies: extraDependencies.length > 0 ? extraDependencies : undefined, externals: Object.keys(transformedExternals).length > 0 ? transformedExternals : undefined }); case 26: case "end": return _context.stop(); } }, _callee); })); function loadSource(_x) { return _loadSource.apply(this, arguments); } return loadSource; }(); }