Skip to content

Commit

Permalink
refactor aliases paths
Browse files Browse the repository at this point in the history
  • Loading branch information
bjoerge committed Sep 20, 2024
1 parent 4f26fa8 commit 442a1ee
Show file tree
Hide file tree
Showing 8 changed files with 74 additions and 51 deletions.
29 changes: 3 additions & 26 deletions packages/@repo/dev-aliases/dev-aliases.cjs
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
const path = require('node:path')
/* eslint-disable tsdoc/syntax */

const PACKAGES_PATH = path.resolve(path.join(__dirname, '..', '..', '..', 'packages'))

console.log('DIRNAME:', __dirname, 'PACKAGES_PATH:', PACKAGES_PATH)
/**
* The path mappings/aliases used by various tools in the monorepo to map imported modules to
* source files in order to speed up rebuilding and avoid having a separate watcher process to build
Expand All @@ -12,6 +9,7 @@ console.log('DIRNAME:', __dirname, 'PACKAGES_PATH:', PACKAGES_PATH)
* - Vite when running the dev server (only when running in this monorepo)
* - jest when running test suite
*
* @type Record<string, string>
*/
const devAliases = {
// NOTE: do not use regex in the module expressions,
Expand All @@ -29,25 +27,4 @@ const devAliases = {
'groq': 'groq/src/_exports.mts',
}

function getJestAliases() {
return Object.fromEntries(
Object.entries(devAliases).map(([packageName, aliasPath]) => [
packageName,
path.join('./packages', aliasPath),
]),
)
}

function getViteAliases() {
return Object.fromEntries(
Object.entries(devAliases).map(([packageName, aliasPath]) => [
packageName,
path.resolve(PACKAGES_PATH, aliasPath),
]),
)
}

module.exports = {
//getJestAliases,
getViteAliases,
}
module.exports = devAliases
23 changes: 13 additions & 10 deletions packages/sanity/src/_internal/cli/server/__tests__/aliases.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -85,21 +85,24 @@ describe('getAliases', () => {
})

it('returns the correct aliases for the monorepo', async () => {
const monorepoPath = '/path/to/monorepo'
// const monorepoPath = await resolveSanityMonorepoPath(__dirname)
//
const devAliases = {
'sanity/_singletons': 'packages/sanity/src/_singletons.ts',
'sanity/desk': 'packages/sanity/src/desk.ts',
'sanity/presentation': 'packages/sanity/src/presentation.ts',
'sanity/_singletons': 'sanity/src/_singletons.ts',
'sanity/desk': 'sanity/src/desk.ts',
'sanity/presentation': 'sanity/src/presentation.ts',
}

jest.doMock('@repo/dev-aliases', () => ({getViteAliases: () => devAliases}), {virtual: true})
const expectedAliases = {
'sanity/_singletons': '/path/to/monorepo/packages/sanity/src/_singletons.ts',
'sanity/desk': '/path/to/monorepo/packages/sanity/src/desk.ts',
'sanity/presentation': '/path/to/monorepo/packages/sanity/src/presentation.ts',
}

const aliases = await getMonorepoAliases()
jest.doMock('@repo/dev-aliases', () => devAliases, {virtual: true})

const expectedAliases = Object.fromEntries(
Object.entries(devAliases).map(([key, modulePath]) => {
return [key, modulePath]
}),
)
const aliases = await getMonorepoAliases(monorepoPath)

expect(aliases).toMatchObject(expectedAliases)
})
Expand Down
5 changes: 3 additions & 2 deletions packages/sanity/src/_internal/cli/server/aliases.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import {type AliasOptions} from 'vite'

import {getSanityBrowserAliases} from './getBrowserAliases'
import {getMonorepoAliases} from './getMonorepoAliases'
import {getMonorepoAliases, resolveSanityMonorepoPath} from './getMonorepoAliases'

/**
* @internal
Expand All @@ -25,5 +25,6 @@ export interface GetAliasesOptions {
* @internal
*/
export async function getAliases({sanityPkgPath}: GetAliasesOptions): Promise<AliasOptions> {
return (await getMonorepoAliases()) || getSanityBrowserAliases(sanityPkgPath)
const monorepoPath = await resolveSanityMonorepoPath(__dirname)
return monorepoPath ? getMonorepoAliases(monorepoPath) : getSanityBrowserAliases(sanityPkgPath)
}
39 changes: 34 additions & 5 deletions packages/sanity/src/_internal/cli/server/getMonorepoAliases.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,37 @@
export async function getMonorepoAliases() {
// todo: change from require.resolve to import.meta.resolve once we're ESM
if (require.resolve('@repo/dev-aliases')) {
const {getViteAliases} = await import('@repo/dev-aliases')
return getViteAliases()
import path from 'node:path'

import readPkgUp from 'read-pkg-up'

export async function getMonorepoAliases(monorepoPath: string) {
const {default: aliases} = await import('@repo/dev-aliases')
return Object.fromEntries(
Object.entries(aliases).map(([pkgName, pkgPath]) => {
return [pkgName, path.resolve(monorepoPath, path.join('packages', pkgPath))]
}),
)
}

/**
* Load information about the `sanity-io/sanity` monorepo (if applicable)
*
* @internal
*/
export async function resolveSanityMonorepoPath(cwd: string): Promise<string | undefined> {
let p = cwd

while (p !== '/') {
const readResult = await readPkgUp({cwd: p})

if (!readResult) {
return undefined
}

if (readResult.packageJson.isSanityMonorepo) {
return path.dirname(readResult.path)
}

p = path.dirname(path.dirname(readResult.path))
}

return undefined
}
7 changes: 5 additions & 2 deletions packages/sanity/src/_internal/cli/server/getViteConfig.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import {type ConfigEnv, type InlineConfig, mergeConfig} from 'vite'

import {createExternalFromImportMap} from './createExternalFromImportMap'
import {getSanityBrowserAliases} from './getBrowserAliases'
import {getMonorepoAliases} from './getMonorepoAliases'
import {getMonorepoAliases, resolveSanityMonorepoPath} from './getMonorepoAliases'
import {getStudioEnvironmentVariables} from './getStudioEnvironmentVariables'
import {normalizeBasePath} from './helpers'
import {sanityBuildEntries} from './vite/plugin-sanity-build-entries'
Expand Down Expand Up @@ -74,6 +74,7 @@ export async function getViteConfig(options: ViteOptions): Promise<InlineConfig>
importMap,
} = options

const monorepoPath = await resolveSanityMonorepoPath(cwd)
const basePath = normalizeBasePath(rawBasePath)

const sanityPkgPath = (await readPkgUp({cwd: __dirname}))?.path
Expand Down Expand Up @@ -112,7 +113,9 @@ export async function getViteConfig(options: ViteOptions): Promise<InlineConfig>
envPrefix: 'SANITY_STUDIO_',
logLevel: mode === 'production' ? 'silent' : 'info',
resolve: {
alias: (await getMonorepoAliases()) || getSanityBrowserAliases(sanityPkgPath),
alias: monorepoPath
? await getMonorepoAliases(monorepoPath)
: getSanityBrowserAliases(sanityPkgPath),
dedupe: ['styled-components'],
},
define: {
Expand Down
7 changes: 5 additions & 2 deletions packages/sanity/src/_internal/cli/server/renderDocument.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ interface DocumentProps {
}

interface RenderDocumentOptions {
monorepoPath?: string
studioRootPath: string
props?: DocumentProps
importMap?: {
Expand Down Expand Up @@ -150,7 +151,7 @@ function renderDocumentFromWorkerData() {
throw new Error('Must be used as a Worker with a valid options object in worker data')
}

const {studioRootPath, props, importMap}: RenderDocumentOptions = workerData || {}
const {studioRootPath, props, importMap, monorepoPath}: RenderDocumentOptions = workerData || {}

if (workerData?.dev) {
// Define `__DEV__` in the worker thread as well
Expand All @@ -171,7 +172,9 @@ function renderDocumentFromWorkerData() {
// Require hook #1
// Alias monorepo modules
debug('Registering potential aliases')
require('module-alias').addAliases(getMonorepoAliases())
if (monorepoPath) {
require('module-alias').addAliases(getMonorepoAliases(monorepoPath))
}

// Require hook #2
// Use `esbuild` to allow JSX/TypeScript and modern JS features
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ import {createServer, type Server} from 'node:http'
import {Worker} from 'node:worker_threads'

import {afterAll, beforeAll, describe, expect, it, jest} from '@jest/globals'
import {getViteAliases} from '@repo/dev-aliases'
import {type SanityDocument, type SanityProject} from '@sanity/client'
import {evaluate, parse} from 'groq-js'

import {getMonorepoAliases} from '../../server/getMonorepoAliases'
import {createReceiver, type WorkerChannelReceiver} from '../../util/workerChannels'
import {type ValidateDocumentsWorkerData, type ValidationWorkerChannel} from '../validateDocuments'

Expand Down Expand Up @@ -203,7 +203,7 @@ describe('validateDocuments', () => {
const moduleAlias = require('module-alias')
const { register } = require('esbuild-register/dist/node')
moduleAlias.addAliases(${JSON.stringify(getViteAliases())})
moduleAlias.addAliases(${JSON.stringify(getMonorepoAliases())})
const { unregister } = register({
target: 'node18',
Expand Down
11 changes: 9 additions & 2 deletions test/config.mjs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/* eslint-disable tsdoc/syntax */

import {getJestAliases} from '@repo/dev-aliases'
import devAliases from '@repo/dev-aliases'

import path from 'node:path'
import {escapeRegExp, omit} from 'lodash-es'
Expand All @@ -22,9 +22,16 @@ const RE_EXT = /\.[0-9a-z]+$/i
/** Path to the root of the Sanity monorepo. */
const ROOT_PATH = path.resolve(dirname, '..')

const jestAliases = Object.fromEntries(
Object.entries(devAliases).map(([packageName, aliasPath]) => [
packageName,
path.join('./packages', aliasPath),
]),
)

/** The default module name mapper (aka. aliases) for jest tests in the Sanity monorepo. */
const defaultModuleNameMapper = resolveAliasPaths({
...aliasesToModuleNameWrapper(getJestAliases()),
...aliasesToModuleNameWrapper(jestAliases),
'.*\\.module\\.css$': './test/mocks/emptyObject',
'.*\\.css$': './test/mocks/undefined',
})
Expand Down

0 comments on commit 442a1ee

Please sign in to comment.