47ng / 47ng/nuqs

Expo Router Adapter / CJS Support

Aberta
#837 32 comentários 11 reações 0 responsáveis Ver no GitHub
feature
Linguagem predominante
TypeScript
Estrelas
10.8k
Forks
294
Merge médio
1d 16h
PRs com merge (30d)
21

Descrição

I have stubbed out an adapter that would work for Expo Router:
```ts
import { Array, Option, pipe, Record } from 'effect'
import { router, type UnknownOutputParams, useGlobalSearchParams, useSegments } from 'expo-router'
import {
type unstable_AdapterInterface,
unstable_createAdapterProvider,
} from 'nuqs/dist/adapters/custom'

export function useGlobalQueryParams() {
const params = useGlobalSearchParams()
const segments = useSegments()
const urlParams = segments
.filter((segment) => segment.startsWith('[') && segment.endsWith(']'))
.map((segment) => segment.slice(1, -1))

return Object.fromEntries(
Object.entries(params).filter(([key]) => !urlParams.includes(key)),
) as TParams
}

function useNuqsExpoRouterAdapter(): unstable_AdapterInterface {
const params = useGlobalQueryParams>()

const updateUrl = (searchParams: URLSearchParams) => {
const newParams = Object.entries(Object.fromEntries(searchParams))
const oldParams = pipe(params, Record.toEntries)

const paramsToRemove = pipe(
oldParams,
Array.filter(([oldKey]) =>
pipe(
newParams,
Array.findFirst(([newKey]) => oldKey === newKey),
Option.isNone,
),
),
Array.map(([key]) => [key, undefined]),
)

router.setParams({
...Object.fromEntries(paramsToRemove),
...Object.fromEntries(newParams),
})
}

return {
searchParams: new URLSearchParams(params),
updateUrl,
rateLimitFactor: 2,
getSearchParamsSnapshot: () => new URLSearchParams(params),
}
}

export const NuqsExpoAdapter = unstable_createAdapterProvider(useNuqsExpoRouterAdapter)

```

The problem I am running into is expo uses the metro bundler. Metro doesn't support ESM yet, so everything has to be CJS. Is there away we can add CJS support back to this package?

Guia de contribuição

Abrir o guia de contribuição

Direção de pesquisa

A issue trata de adicionar suporte a CJS para Expo Router adapter devido às limitações do bundler Metro. Examine a configuração de build do pacote (provavelmente em package.json ou em uma ferramenta de build como tsup ou rollup) para entender a saída atual dos módulos. Verifique a estrutura do diretório adapters e como 'nuqs/dist/adapters/custom' é exportado. Pesquise os requisitos de CJS/ESM do bundler Metro e veja se é possível adicionar exports duplos do pacote ou um build CJS separado. Os testes envolveriam verificar se o adapter funciona em um projeto Expo.

Escrita pelo modelo de indexação a partir do texto da issue.

Avaliação

Stack de tecnologia
nodejs
Domínio
build-system, cli, mobile
Tipo de issue
Funcionalidade
Dificuldade
3/5
Tempo estimado
1-2 dias
Status de atividade
Estagnada
Clareza
Razoavelmente clara
Facilidade para iniciantes
45/100

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.