From c3c7d1ddcea1b324db61a21fc52f74a7810f48c7 Mon Sep 17 00:00:00 2001 From: alina sireneva Date: Thu, 25 Apr 2024 13:46:11 +0300 Subject: [PATCH] build: added deprecation notice to commonjs builds --- packages/node/src/client.ts | 13 +++++++------ scripts/build-package.js | 25 ++++++++++++++++++++++++- 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/packages/node/src/client.ts b/packages/node/src/client.ts index 34ac6caf..19a4594b 100644 --- a/packages/node/src/client.ts +++ b/packages/node/src/client.ts @@ -1,4 +1,3 @@ -import { createRequire } from 'module' import { createInterface, Interface as RlInterface } from 'readline' import { FileDownloadLocation, FileDownloadParameters, ITelegramStorageProvider, PartialOnly, User } from '@mtcute/core' @@ -23,11 +22,13 @@ export type { TelegramClientOptions } let nativeCrypto: any try { - // @only-if-esm - const require = createRequire(import.meta.url) - // @/only-if-esm - // eslint-disable-next-line - nativeCrypto = require('@mtcute/crypto-node').NodeNativeCryptoProvider + /* eslint-disable @typescript-eslint/prefer-ts-expect-error, @typescript-eslint/ban-ts-comment */ + /* eslint-disable import/no-unresolved */ + // @ts-ignore not in deps + // @esm-replace-import + nativeCrypto = (await import('@mtcute/crypto-node')).NodeNativeCryptoProvider // eslint-disable-line + /* eslint-enable @typescript-eslint/prefer-ts-expect-error, @typescript-eslint/ban-ts-comment */ + /* eslint-enable import/no-unresolved */ } catch (e) {} export interface BaseTelegramClientOptions diff --git a/scripts/build-package.js b/scripts/build-package.js index b697cf93..fc7bec73 100644 --- a/scripts/build-package.js +++ b/scripts/build-package.js @@ -274,7 +274,7 @@ if (buildConfig.buildTs && !IS_JSR) { if (!content.includes('@esm-replace-import')) continue originalFiles[f] = content - fs.writeFileSync(f, content.replace(/@esm-replace-import.*?await import/gs, 'require')) + fs.writeFileSync(f, content.replace(/(?<=@esm-replace-import.*?)await import/gs, 'require')) } // set type=commonjs in all package.json-s @@ -464,6 +464,29 @@ const builtPkgJson = buildPackageJson() if (buildConfig.buildCjs) { fs.writeFileSync(path.join(outDir, 'cjs/package.json'), JSON.stringify({ type: 'commonjs' }, null, 2)) + + const CJS_DEPRECATION_WARNING = ` +"use strict"; +if (typeof globalThis !== 'undefined' && !globalThis._MTCUTE_CJS_DEPRECATION_WARNED) { + globalThis._MTCUTE_CJS_DEPRECATION_WARNED = true + console.warn("[${builtPkgJson.name}] CommonJS support is deprecated and will be removed soon. Please consider switching to ESM, it's "+(new Date()).getFullYear()+" already.") + console.warn("[${builtPkgJson.name}] Learn more about switching to ESM: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c") +} +`.trim() + const entrypoints = [] + + if (typeof builtPkgJson.exports === 'string') { + entrypoints.push(builtPkgJson.exports) + } else if (builtPkgJson.exports && typeof builtPkgJson.exports === 'object') { + for (const entrypoint of Object.values(builtPkgJson.exports)) { + entrypoints.push(entrypoint.require) + } + } + + for (const entry of entrypoints) { + if (!entry.endsWith('.js')) continue + transformFile(path.join(outDir, entry), (content) => `${CJS_DEPRECATION_WARNING}\n${content}`) + } } if (IS_JSR) {