mirror of
https://github.com/MetaFam/TheGame.git
synced 2026-04-24 03:00:09 -04:00
* 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 🥁
47 lines
1.4 KiB
JavaScript
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)
|
|
}
|