import type { Replacer } from "../.."; import { ParsedImportExportStatement } from "../../lib/types/ParsedImportExportStatement"; const moduleName = "react-dom"; export const replacer: Replacer = async params => { const { parsedImportExportStatement, version } = params; if (parsedImportExportStatement.parsedArgument.nodeModuleName !== moduleName) { return undefined; } if (parsedImportExportStatement.isAsyncImport) { throw new Error(`TODO, async import of ${moduleName} not supported yet`); } if (parsedImportExportStatement.statementType === "export") { throw new Error(`TODO, exporting from ${moduleName} is not supported yet`); } if (parsedImportExportStatement.statementType === "declare module") { throw new Error(`TODO, module augmentation for ${moduleName} not supported`); } const target = (() => { const { target } = parsedImportExportStatement; if (!target) { throw new Error(`Importing ${moduleName} without target?`); } const match = target.match(/^\*\s+as\s+(.*)$/); if (!!match) { return match[1]; } if (target.includes("{")) { const importArg = ParsedImportExportStatement.ParsedArgument.stringify(parsedImportExportStatement.parsedArgument); throw new Error(`Use: Instead of importing ${moduleName} like that: import ${target} from "${importArg}" You must import it like this: import * as Xxx from "${importArg}" or import Xxx from "${importArg}" then extract what you need from the default export. ( The denoify parser for ${moduleName} import is not very sophisticated ) `); } return target; })(); switch (parsedImportExportStatement.parsedArgument.specificImportPath) { case undefined: { const commit = "02774811084fd4a85d91f73d27deffff2c6b8d02"; return [ `// @deno-types="https://raw.githubusercontent.com/Soremwar/deno_types/${commit}/react-dom/v16.13.1/react-dom.d.ts"`, `import ${target} from "https://cdn.skypack.dev/react-dom@${version}";` ].join("\n"); } case "server": { const commit = "df2a75e38bf52fa0bf4bd29cd790478e3011fc0f"; return [ `// @deno-types="https://raw.githubusercontent.com/Soremwar/deno_types/${commit}/react-dom/v16.13.1/server.d.ts"`, `import ${target} from "https://dev.jspm.io/react-dom@${version}/server.js";` ].join("\n"); } default: throw new Error(`Only support import from "${moduleName}" or "${moduleName}/server"`); } };