Skip to content

Instantly share code, notes, and snippets.

@wooorm
Created February 21, 2024 11:23
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wooorm/42157265daacb3ec5667792b02d545d1 to your computer and use it in GitHub Desktop.
Save wooorm/42157265daacb3ec5667792b02d545d1 to your computer and use it in GitHub Desktop.
Changes in the popular npm packages module formats between Nov 2023 to Feb 2024
Map(5) {
'cjs' => Map(3) {
'esm' => Set(34) {
'mime',
'eslint-plugin-jsdoc',
'@salesforce/sf-plugins-core',
'stylelint-prettier',
'@ckeditor/ckeditor5-core',
'@ckeditor/ckeditor5-upload',
'@ckeditor/ckeditor5-typing',
'@ckeditor/ckeditor5-paragraph',
'@ckeditor/ckeditor5-basic-styles',
'@ckeditor/ckeditor5-essentials',
'@ckeditor/ckeditor5-list',
'@ckeditor/ckeditor5-link',
'@ckeditor/ckeditor5-heading',
'@ckeditor/ckeditor5-table',
'@ckeditor/ckeditor5-image',
'@ckeditor/ckeditor5-indent',
'@ckeditor/ckeditor5-block-quote',
'@ckeditor/ckeditor5-paste-from-office',
'@ckeditor/ckeditor5-autoformat',
'@ckeditor/ckeditor5-editor-classic',
'@ckeditor/ckeditor5-media-embed',
'@ckeditor/ckeditor5-easy-image',
'@ckeditor/ckeditor5-cloud-services',
'@ckeditor/ckeditor5-adapter-ckfinder',
'@ckeditor/ckeditor5-ckfinder',
'@ckeditor/ckeditor5-alignment',
'@ckeditor/ckeditor5-font',
'@ckeditor/ckeditor5-remove-format',
'@ckeditor/ckeditor5-horizontal-line',
'@ckeditor/ckeditor5-code-block',
'@ckeditor/ckeditor5-special-characters',
'@ckeditor/ckeditor5-highlight',
'@ckeditor/ckeditor5-word-count',
'f2elint'
},
'dual' => Set(16) {
'@sinonjs/commons',
'@sinclair/typebox',
'buffer-crc32',
'mdurl',
'linkify-it',
'uc.micro',
'markdown-it',
'change-case-all',
'stylelint',
'@commitlint/config-conventional',
'@prisma/client',
'promise-call-limit',
'markdown-it-emoji',
'stylelint-config-css-modules',
'markdown-it-container',
'markdown-it-footnote'
},
'faux' => Set(3) { 'clipanion', 'pretty-quick', '@storybook/addon-console' }
},
'faux' => Map(2) {
'dual' => Set(17) {
'date-fns',
'@testing-library/user-event',
'@vue/compiler-sfc',
'@vue/shared',
'@vue/compiler-core',
'@vue/compiler-dom',
'@vue/reactivity',
'@vue/server-renderer',
'@vue/runtime-core',
'@vue/runtime-dom',
'react-icons',
'@firebase/auth',
'universal-cookie',
'@stripe/stripe-js',
'echarts',
'react-cookie',
'@loadable/component'
},
'esm' => Set(13) {
'clsx',
'redux',
'react-redux',
'reselect',
'redux-thunk',
'@reduxjs/toolkit',
'xstate',
'@changesets/types',
'shiki',
'@changesets/cli',
'jsondiffpatch',
'redux-observable',
'@changesets/changelog-github'
}
},
undefined => Map(4) {
'cjs' => Set(204) {
'es-errors',
'lainan',
'es-define-property',
'ip-address',
'@rollup/rollup-linux-x64-gnu',
'@rollup/rollup-linux-x64-musl',
'@dataform/core',
'bare-events',
'@stdlib/assert-is-string',
'@prisma/debug',
'@rollup/rollup-win32-x64-msvc',
'@stdlib/string-base-lowercase',
'tarjan-graph',
'@types/methods',
'@stdlib/number-ctor',
'@sigstore/verify',
'@types/stylis',
'@prisma/get-platform',
'@parcel/watcher-linux-x64-glibc',
'@fastify/fast-json-stringify-compiler',
'@prisma/fetch-engine',
'@stdlib/assert-is-number',
'@sigstore/core',
'@esbuild/aix-ppc64',
'wait-port',
'@expo/json-file',
'@opentelemetry/instrumentation-http',
'@react-native/codegen',
'postgres-range',
'jsc-safe-url',
'@microsoft/tsdoc-config',
'@rushstack/rig-package',
'@react-native/virtualized-lists',
'pg-numeric',
'native-duplexpair',
'typanion',
'async-sema',
'@volar/language-core',
'async-listen',
'@stdlib/assert-has-float64array-support',
'@stdlib/assert-is-float64array',
'@parcel/watcher-linux-x64-musl',
'@material/theme',
'@stdlib/array-float32',
'@stdlib/assert-has-float32array-support',
'@stdlib/assert-is-float32array',
'@volar/typescript',
'toastify-react-native',
'@opentelemetry/instrumentation-grpc',
'@react-native/js-polyfills',
'@material/feature-targeting',
'@stdlib/complex-float32',
'@stdlib/number-float64-base-to-float32',
'@material/rtl',
'stream-json',
'@opentelemetry/sdk-node',
'flow-enums-runtime',
'muggle-string',
'@mapbox/vector-tile',
'@react-native/assets-registry',
'@octokit/auth-app',
'@stdlib/complex-reimf',
'@stdlib/complex-reim',
'@stdlib/complex-float64',
'matcher-collection',
'@react-native/gradle-plugin',
'babel-plugin-transform-flow-enums',
'@stdlib/math-base-napi-unary',
'@angular-eslint/builder',
'@stdlib/boolean-ctor',
'vt-pbf',
'stream-chain',
'@actions/github',
'@nx/linter',
'@mapbox/geojson-rewind',
'eventid',
'@types/btoa-lite',
'@rollup/rollup-darwin-arm64',
'ansi-red',
'vinyl-sourcemaps-apply',
'@types/throttle-debounce',
'speed-measure-webpack-plugin',
'blakejs',
'postinstall-postinstall',
'@types/passport-jwt',
'react-grid-layout',
'@types/jest-axe',
'libsodium-wrappers',
'randomstring',
'expo-modules-core',
'@types/better-sqlite3',
'@cypress/code-coverage',
'dagre',
'@stdlib/fs-read-file',
'eslint-plugin-tailwindcss',
'@fontsource/roboto',
'@tailwindcss/aspect-ratio',
'jest-environment-enzyme',
'websocket-stream',
'url-polyfill',
... 104 more items
},
'faux' => Set(54) {
'@smithy/core',
'mdns-listener-advanced',
'@sentry-internal/feedback',
'@microsoft/tsdoc',
'@opentelemetry/otlp-proto-exporter-base',
'@opentelemetry/exporter-trace-otlp-proto',
'@sentry-internal/replay-canvas',
'@azure/core-http-compat',
'@octokit/oauth-methods',
'@js-joda/core',
'@octokit/oauth-authorization-url',
'@react-aria/interactions',
'@aws-sdk/lib-storage',
'@react-stately/utils',
'@aws-sdk/client-cloudformation',
'@dnd-kit/sortable',
'@firebase/installations-compat',
'@octokit/auth-oauth-app',
'@material/base',
'@material/animation',
'@aws-sdk/client-iam',
'@azure/keyvault-keys',
'geojson-vt',
'@material/dom',
'@internationalized/date',
'@aws-sdk/client-sfn',
'@mapbox/whoots-js',
'@material/ripple',
'ulid',
'@ethersproject/transactions',
'react-infinite-scroll-component',
'recoil',
'focus-visible',
'await-to-js',
'turndown',
'@expo/vector-icons',
'eslint-plugin-vitest',
'@mui/styled-engine-sc',
'countup.js',
'@supabase/supabase-js',
'typedi',
'eslint-plugin-mdx',
'react-native-paper',
'reconnecting-websocket',
'deepcopy',
'rc-form',
'yaml-front-matter',
'@antv/g6',
'jsencrypt',
'@uniswap/sdk-core',
'rollup-plugin-gzip',
'@zerollup/ts-transform-paths',
'rax-text',
'rax-view'
},
'dual' => Set(51) {
'libsql-stateless',
'libsql-stateless-easy',
'citty',
'ohash',
'nypm',
'@vitejs/plugin-basic-ssl',
'@tanstack/virtual-core',
'get-port-please',
'cross-inspect',
'@tanstack/react-virtual',
'@tanstack/react-query-devtools',
'safe-identifier',
'eslint-compat-utils',
'goober',
'@cucumber/tag-expressions',
'@urql/core',
'peberminta',
'@inquirer/core',
'@csstools/cascade-layer-name-parser',
'@vueuse/metadata',
'@radix-ui/react-tabs',
'i18next-http-backend',
'@radix-ui/react-accordion',
'@antfu/utils',
'react-hot-toast',
'react-pdf',
'@swc-node/register',
'@tiptap/core',
'@radix-ui/react-switch',
'@tiptap/pm',
'@radix-ui/react-radio-group',
'@radix-ui/react-label',
'@fullcalendar/daygrid',
'@tiptap/extension-link',
'@tiptap/starter-kit',
'geckodriver',
'@storybook/test',
'@nuxt/devtools',
'@chakra-ui/icons',
'@inquirer/prompts',
'@vitejs/plugin-vue2',
'markdown-it-sup',
'@storybook/vue3-vite',
'@clack/prompts',
'@uiw/react-md-editor',
'@iconify/json',
'@storybook/web-components',
'vue-types',
'tsm',
'vite-plugin-lib-inject-css',
'@xylabs/ts-scripts-yarn3'
},
'esm' => Set(50) {
'@pkgr/core',
'get-east-asian-width',
'unicorn-magic',
'mdast-util-mdxjs-esm',
'@sindresorhus/merge-streams',
'stdin-discarder',
'@floating-ui/react',
'devlop',
'micromark-extension-mdx-expression',
'micromark-extension-mdx-jsx',
'micromark-extension-mdxjs-esm',
'mdast-util-mdx',
'micromark-extension-mdx-md',
'micromark-extension-mdxjs',
'estree-util-visit',
'git-hooks-list',
'unist-util-position-from-estree',
'micromark-factory-mdx-expression',
'micromark-util-events-to-acorn',
'@lit-labs/ssr-dom-shim',
'@codemirror/view',
'@codemirror/language',
'@noble/curves',
'digest-fetch',
'@codemirror/state',
'is-url-superb',
'hast-util-is-element',
'hook-std',
'prosemirror-transform',
'prosemirror-commands',
'jotai',
'file-url',
'@ckeditor/ckeditor5-ui',
'filemanager-webpack-plugin',
'root-check',
'ng-zorro-antd',
'typedoc-plugin-missing-exports',
'random-words',
'@esm-bundle/chai',
'@ckeditor/ckeditor5-html-support',
'@backstage/core-plugin-api',
'@ckeditor/ckeditor5-mention',
'@ckeditor/ckeditor5-page-break',
'ts-standard',
'semantic-release-monorepo',
'@ckeditor/ckeditor5-html-embed',
'@backstage/test-utils',
'renamer',
'@web/dev-server-storybook',
'alfy'
}
},
'dual' => Map(1) { 'esm' => Set(1) { 'chai' } },
'esm' => Map(1) {
'dual' => Set(2) { '@tanstack/table-core', '@tanstack/react-table' }
}
}
/**
* @typedef {'esm' | 'dual' | 'faux' | 'cjs'} Kind
*/
import fs from 'node:fs/promises'
const fromUrl = new URL('data/2023-11-22.json', import.meta.url)
const toUrl = new URL('data/2024-02-20.json', import.meta.url)
const from = JSON.parse(await fs.readFile(fromUrl, 'utf8'))
const to = JSON.parse(await fs.readFile(toUrl, 'utf8'))
/** @type {Map<Kind | undefined, Map<Kind, Set<string>>>} */
const changes = new Map()
for (const [
/** @type {string} */ name,
/** @type {Kind} */ now
] of Object.entries(to)) {
/** @type {Kind | undefined} */
const before = from[name] || undefined
if (before === now) continue
let to = changes.get(before)
if (!to) changes.set(before, (to = new Map()))
let set = to.get(now)
if (!set) to.set(now, (set = new Set()))
set.add(name)
}
console.log(changes)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment