Files
TheGame/packages/backend/tsconfig-paths-resolver.mjs
δυς 9e37df6207 Update MyMeta to ECMAScript Modules + Switch to DID:PKH (#1429)
* beginning ESM transition: Ceramic libraries, Next.js, & TypeScript configuration 🇭🇰

* updating Chakra, React, & Next image `import`s 👔

* upgrading `@types/react`, import extensions for Node, & b64 SVG to PNG ⛹🏿‍♀️

* fixing relative import names & upddating @types packages 📻

* removoing WYSIWYG editor, draft-js, & updating express ⛹🏿‍♀️

* updating OpenSea 🚲

* ¡@metafam/utils is building! 📰

* ¡Discord bot is building! 👘

* ¡backend is building! 🛩

* fixed everything but Ceramic DID update 🏍

* switching to DID:PKH 📦

* fixing "only one child allowed" error 🙇🏿‍♀️

* importing `React` as required by tsc's `isolatedModules` 🇲🇰

* disabling testing rather than taking the time to fix jest ⚜

* removing set `types` from `tsconfig` to fix compilation error 🥦

* printing tests disabled warning, hopefully 🙀

* setting file to be copied to the new resolver 👁️‍🗨️

* "paths-resolver" not "paths-resolve" 🦴

* switching back to relative paths rather than trying to fix `paths` 

* `yarn backend:dev` not working, testing GitHub build 🎺

* removing design system build & fixing some images ✊🏿

* fixed "expected function got string" error & trying to address undefined HTMLElement 🐡

* fixing @emotion/react tree shaking by making external 🏏

* including eslint config in Dockerfile 🌾

* fixing more images 🎯

* updating DIDs & switching back to an updated DID:3 ❇

* switching to w3s.link gateway & fixing early termination of storage endpoint 🔭

* switching back to ipfs.io gateway b/c w3s.link serves SVGs as application/xml which are CORB blocked 🥾

* fixing node config name in eslint ignore & shortening some paths 🧰

* fixing ts-node not handling project references 🥁
2022-11-14 11:26:41 -05:00

47 lines
1.4 KiB
JavaScript

import { existsSync } from 'node:fs'
import tsConfig from './tsconfig.json' assert { type: 'json' }
const isTS = process.argv.includes('ts-node')
const ext = `.${isTS ? 't' : 'j'}s`
const basePath = `${isTS ? 'src' : 'dist'}/`
const { paths } = tsConfig.compilerOptions
const matches = Object.fromEntries(
Object.entries(paths).map(([exp, comps]) => ([
`^${exp.replace(/\*/g, '(.*)')}$`, comps
]))
)
export const resolve = async (specifier, context, nextResolve) => {
const { parentURL = null } = context;
const [match, comps] = Object.entries(matches).find(
([m]) => (new RegExp(m)).test(specifier)
) ?? []
if (comps && match && parentURL) {
const [, rest] = specifier.match(new RegExp(match))
try {
comps.forEach((comp) => {
let rel = `${basePath}${comp.replace(/\*/g, rest)}`
if (!/\.(t|j)s$/.test(rel)) rel += ext
const test = new URL(rel, import.meta.url)
if (existsSync(test.pathname)) {
// eslint-disable-next-line @typescript-eslint/no-throw-literal
throw test
}
})
console.error(`Couldn't Resolve: ${specifier}`)
} catch (thrown) {
return {
shortCircuit: true,
url: thrown.href,
}
}
}
// Defer to the next hook in the chain, which would be the
// Node.js default resolve if this is the last user-specified loader.
return nextResolve(specifier)
}