Skip to content

Commit

Permalink
feat: replace qs with qs-esm (#6966)
Browse files Browse the repository at this point in the history
qs-esm is a qs fork I created and doesn't add bloated polyfills, is
ESM-only, has a smaller bundle size and comes with types included.

qs:
https://bundlephobia.com/package/qs@6.12.1 (11kb)
https://npm.anvaka.com/#/view/2d/qs (15 dependencies)

qs-esm:
https://bundlephobia.com/package/qs-esm@7.0.0 (4.2kb)
https://npm.anvaka.com/#/view/2d/qs-esm (1 dependency)

I don't agree with the backwards philosophy of qs:
ljharb/qs#404 (comment) ("more
deps is better", lower bundle size as opt-in, maximum environment
compatibility as opt-out)

qs imports waaay too many useless dependencies
  • Loading branch information
AlessioGr committed Jul 9, 2024
1 parent a467ce9 commit 6c99326
Show file tree
Hide file tree
Showing 32 changed files with 77 additions and 81 deletions.
4 changes: 2 additions & 2 deletions docs/queries/overview.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ This one isn't too bad, but more complex queries get unavoidably more difficult
**For example, using fetch:**

```js
import qs from 'qs'
import { stringify } from 'qs-esm'

const query = {
color: {
Expand All @@ -165,7 +165,7 @@ const query = {
}

const getPosts = async () => {
const stringifiedQuery = qs.stringify(
const stringifiedQuery = stringify(
{
where: query, // ensure that `qs` adds the `where` property, too!
},
Expand Down
1 change: 0 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,6 @@
"@types/minimist": "1.2.5",
"@types/node": "20.12.5",
"@types/prompts": "^2.4.5",
"@types/qs": "6.9.14",
"@types/react": "npm:types-react@19.0.0-beta.2",
"@types/react-dom": "npm:types-react-dom@19.0.0-beta.2",
"@types/semver": "^7.5.3",
Expand Down
2 changes: 1 addition & 1 deletion packages/next/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@
"graphql-playground-html": "1.6.30",
"http-status": "1.6.2",
"path-to-regexp": "^6.2.1",
"qs": "6.12.1",
"qs-esm": "7.0.2",
"react-diff-viewer-continued": "3.2.6",
"sass": "1.77.4",
"sonner": "^1.5.0",
Expand Down
2 changes: 1 addition & 1 deletion packages/next/src/utilities/createPayloadRequest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import type { CustomPayloadRequestProperties, PayloadRequest, SanitizedConfig }

import { initI18n } from '@payloadcms/translations'
import { executeAuthStrategies, getDataLoader, parseCookies } from 'payload'
import qs from 'qs'
import * as qs from 'qs-esm'
import { URL } from 'url'

import { sanitizeLocales } from './addLocalesToRequest.js'
Expand Down
2 changes: 1 addition & 1 deletion packages/next/src/utilities/initPage/handleAuthRedirect.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { redirect } from 'next/navigation.js'
import qs from 'qs'
import * as qs from 'qs-esm'

import { isAdminAuthRoute, isAdminRoute } from './shared.js'

Expand Down
2 changes: 1 addition & 1 deletion packages/next/src/utilities/initPage/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { initI18n } from '@payloadcms/translations'
import { findLocaleFromCode } from '@payloadcms/ui/shared'
import { headers as getHeaders } from 'next/headers.js'
import { createLocalReq, isEntityHidden, parseCookies } from 'payload'
import qs from 'qs'
import * as qs from 'qs-esm'

import type { Args } from './types.js'

Expand Down
2 changes: 1 addition & 1 deletion packages/next/src/utilities/meta.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import type { Icon } from 'next/dist/lib/metadata/types/metadata-types.js'
import type { MetaConfig } from 'payload'

import { payloadFaviconDark, payloadFaviconLight, staticOGImage } from '@payloadcms/ui/assets'
import qs from 'qs'
import * as qs from 'qs-esm'

const defaultOpenGraph = {
description:
Expand Down
2 changes: 1 addition & 1 deletion packages/next/src/views/Version/SelectComparison/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import {
useTranslation,
} from '@payloadcms/ui'
import { formatDate } from '@payloadcms/ui/shared'
import qs from 'qs'
import * as qs from 'qs-esm'
import React, { useCallback, useEffect, useState } from 'react'

import type { Props } from './types.js'
Expand Down
2 changes: 1 addition & 1 deletion packages/richtext-lexical/bundle.js
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ const resultClient = await esbuild
'*.scss',
'*.css',
'*.svg',
'qs',
'qs-esm',
'@dnd-kit/core',
'@payloadcms/graphql',
'@payloadcms/translations',
Expand Down
2 changes: 1 addition & 1 deletion packages/richtext-lexical/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@
"payload": "workspace:*"
},
"peerDependencies": {
"@faceless-ui/modal": "3.0.0-beta.0",
"@faceless-ui/modal": "3.0.0-beta.2",
"@faceless-ui/scroll-info": "2.0.0-beta.0",
"@lexical/headless": "0.16.1",
"@lexical/link": "0.16.1",
Expand Down
4 changes: 2 additions & 2 deletions packages/ui/bundle.js
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ function require(m) {
external: [
'*.scss',
'*.css',
'qs',
'qs-esm',
'@dnd-kit/core',
'@payloadcms/graphql',
'@payloadcms/translations',
Expand Down Expand Up @@ -165,7 +165,7 @@ const resultShared = await esbuild
external: [
'*.scss',
'*.css',
'qs',
'qs-esm',
'@dnd-kit/core',
'@payloadcms/graphql',
'@payloadcms/translations',
Expand Down
5 changes: 2 additions & 3 deletions packages/ui/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@
"dependencies": {
"@dnd-kit/core": "6.0.8",
"@dnd-kit/sortable": "7.0.2",
"@faceless-ui/modal": "3.0.0-beta.0",
"@faceless-ui/modal": "3.0.0-beta.2",
"@faceless-ui/scroll-info": "2.0.0-beta.0",
"@faceless-ui/window-info": "3.0.0-beta.0",
"@monaco-editor/react": "4.5.1",
Expand All @@ -84,7 +84,7 @@
"dequal": "2.0.3",
"md5": "2.3.0",
"object-to-formdata": "4.5.1",
"qs": "6.12.1",
"qs-esm": "7.0.2",
"react-animate-height": "2.1.2",
"react-datepicker": "6.9.0",
"react-image-crop": "10.1.8",
Expand All @@ -103,7 +103,6 @@
"@hyrious/esbuild-plugin-commonjs": "^0.2.4",
"@payloadcms/eslint-config": "workspace:*",
"@types/body-scroll-lock": "^3.1.0",
"@types/qs": "6.9.7",
"@types/react": "npm:types-react@19.0.0-beta.2",
"@types/react-datepicker": "6.2.0",
"@types/react-dom": "npm:types-react-dom@19.0.0-beta.2",
Expand Down
2 changes: 1 addition & 1 deletion packages/ui/src/elements/DocumentDrawer/DrawerContent.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
'use client'

import { useModal } from '@faceless-ui/modal'
import qs from 'qs'
import * as qs from 'qs-esm'
import React, { useCallback, useEffect, useState } from 'react'
import { toast } from 'sonner'

Expand Down
2 changes: 1 addition & 1 deletion packages/ui/src/elements/SortComplex/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { getTranslation } from '@payloadcms/translations'
import { usePathname, useRouter } from 'next/navigation.js'
import { sortableFieldTypes } from 'payload'
import { fieldAffectsData } from 'payload/shared'
import qs from 'qs'
import * as qs from 'qs-esm'
import React, { useEffect, useState } from 'react'

export type SortComplexProps = {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
'use client'
import type { TypeWithID } from 'payload'

import qs from 'qs'
import * as qs from 'qs-esm'
import React, { createContext, useCallback, useContext, useEffect, useReducer, useRef } from 'react'

import { useDebounce } from '../../../hooks/useDebounce.js'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
'use client'
import type { PaginatedDocs, Where } from 'payload'

import qs from 'qs'
import * as qs from 'qs-esm'
import React, { useCallback, useEffect, useReducer, useState } from 'react'

import type { Option } from '../../../ReactSelect/types.js'
Expand Down
2 changes: 1 addition & 1 deletion packages/ui/src/fields/Relationship/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import type { PaginatedDocs, Where } from 'payload'

import { wordBoundariesRegex } from 'payload/shared'
import qs from 'qs'
import * as qs from 'qs-esm'
import React, { useCallback, useEffect, useReducer, useRef, useState } from 'react'

import type { DocumentDrawerProps } from '../../elements/DocumentDrawer/types.js'
Expand Down
2 changes: 1 addition & 1 deletion packages/ui/src/forms/Form/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import {
reduceFieldsToValues,
wait,
} from 'payload/shared'
import qs from 'qs'
import * as qs from 'qs-esm'
import React, { useCallback, useEffect, useReducer, useRef, useState } from 'react'
import { toast } from 'sonner'

Expand Down
2 changes: 1 addition & 1 deletion packages/ui/src/hooks/usePayloadAPI.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
'use client'
import qs from 'qs'
import * as qs from 'qs-esm'
import { useEffect, useRef, useState } from 'react'

import { useLocale } from '../providers/Locale/index.js'
Expand Down
2 changes: 1 addition & 1 deletion packages/ui/src/providers/Auth/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import type { ClientUser, MeOperationResult, Permissions } from 'payload'

import { useModal } from '@faceless-ui/modal'
import { usePathname, useRouter } from 'next/navigation.js'
import qs from 'qs'
import * as qs from 'qs-esm'
import React, { createContext, useCallback, useContext, useEffect, useState } from 'react'
import { toast } from 'sonner'

Expand Down
2 changes: 1 addition & 1 deletion packages/ui/src/providers/DocumentInfo/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import type {

import { notFound } from 'next/navigation.js'
import { reduceFieldsToValues } from 'payload/shared'
import qs from 'qs'
import * as qs from 'qs-esm'
import React, { createContext, useCallback, useContext, useEffect, useRef, useState } from 'react'

import type { DocumentInfoContext, DocumentInfoProps } from './types.js'
Expand Down
2 changes: 1 addition & 1 deletion packages/ui/src/providers/ListQuery/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import type { PaginatedDocs, Where } from 'payload'

import { useRouter } from 'next/navigation.js'
import { isNumber } from 'payload/shared'
import qs from 'qs'
import * as qs from 'qs-esm'
import React, { createContext, useContext } from 'react'

import type { Column } from '../../elements/Table/index.js'
Expand Down
2 changes: 1 addition & 1 deletion packages/ui/src/providers/SearchParams/index.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
'use client'
import { useSearchParams as useNextSearchParams } from 'next/navigation.js'
import qs from 'qs'
import * as qs from 'qs-esm'
import React, { createContext, useContext } from 'react'

export type SearchParamsContext = {
Expand Down
2 changes: 1 addition & 1 deletion packages/ui/src/providers/Selection/index.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
'use client'
import type { Where } from 'payload'

import qs from 'qs'
import * as qs from 'qs-esm'
import React, { createContext, useCallback, useContext, useEffect, useRef, useState } from 'react'

import { useLocale } from '../Locale/index.js'
Expand Down
2 changes: 1 addition & 1 deletion packages/ui/src/utilities/api.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import qs from 'qs'
import * as qs from 'qs-esm'

type GetOptions = RequestInit & {
params?: Record<string, unknown>
Expand Down
Loading

0 comments on commit 6c99326

Please sign in to comment.