diff --git a/eslint.config.js b/eslint.config.js index 9e6db90..72b7c72 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -12,7 +12,8 @@ for (const [key, value] of Object.entries(tailwindConfig)) { export default antfu({ ignores: [ - 'src/components/Editor/utils/*.json', + 'packages/repl/components/Editor/utils/*.json', + 'packages/worker/src/sw/iframe/script-bundled.js', 'vendor', ], typescript: true, diff --git a/package.json b/package.json index 8bd3378..1e5ed30 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "monaco-vscode-textmate-theme-converter": "^0.1.7", "plist2": "^1.1.4", "tailwindcss": "^3.4.17", + "tsx": "^4.19.2", "typescript": "^5.7.3", "vite": "^5.4.11", "vite-plugin-solid": "^2.11.0" diff --git a/packages/repl/vite.config.ts b/packages/repl/vite.config.ts index 5679f9a..d6a3e07 100644 --- a/packages/repl/vite.config.ts +++ b/packages/repl/vite.config.ts @@ -2,8 +2,6 @@ import type { UserConfig } from 'vite' import { join } from 'node:path' import { defineConfig, loadEnv } from 'vite' import solid from 'vite-plugin-solid' -// eslint-disable-next-line import/no-relative-packages -import externalizeDeps from '../../scripts/vite-plugin-externalize-dependencies.ts' export default defineConfig((env): UserConfig => { process.env = { @@ -25,9 +23,6 @@ export default defineConfig((env): UserConfig => { }, plugins: [ solid(), - externalizeDeps({ - externals: [], - }), ], } }) diff --git a/packages/worker/package.json b/packages/worker/package.json index f9a7853..b7b74ad 100644 --- a/packages/worker/package.json +++ b/packages/worker/package.json @@ -9,7 +9,8 @@ }, "scripts": { "dev": "vite", - "build": "vite build", + "build": "pnpm run build:iframe-script && vite build", + "build:iframe-script": "tsx scripts/build-iframe-script.ts", "preview": "vite preview" }, "dependencies": { @@ -25,5 +26,8 @@ "nanoid": "^5.0.9", "nanostores": "^0.11.3", "uqr": "^0.1.2" + }, + "devDependencies": { + "dotenv": "^16.4.7" } } diff --git a/packages/worker/scripts/build-iframe-script.ts b/packages/worker/scripts/build-iframe-script.ts new file mode 100644 index 0000000..21b5056 --- /dev/null +++ b/packages/worker/scripts/build-iframe-script.ts @@ -0,0 +1,18 @@ +import { fileURLToPath } from 'node:url' +import { config } from 'dotenv' +import { build } from 'esbuild' + +config({ + path: fileURLToPath(new URL('../../../.env', import.meta.url)), +}) + +await build({ + entryPoints: ['src/sw/iframe/script.ts'], + bundle: true, + format: 'esm', + outfile: 'src/sw/iframe/script-bundled.js', + define: { + 'import.meta.env.VITE_HOST_ORIGIN': `"${process.env.VITE_HOST_ORIGIN}"`, + }, + external: ['@mtcute/web'], +}) diff --git a/packages/worker/src/sw/iframe/.gitignore b/packages/worker/src/sw/iframe/.gitignore new file mode 100644 index 0000000..38c9e1a --- /dev/null +++ b/packages/worker/src/sw/iframe/.gitignore @@ -0,0 +1 @@ +script-bundled.js \ No newline at end of file diff --git a/packages/worker/src/sw/iframe/external.d.ts b/packages/worker/src/sw/iframe/external.d.ts deleted file mode 100644 index 83946d2..0000000 --- a/packages/worker/src/sw/iframe/external.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -declare module '@mtcute/web?external' { - export * from '@mtcute/web' -} diff --git a/packages/worker/src/sw/iframe/html.ts b/packages/worker/src/sw/iframe/html.ts index ec80075..00eaea9 100644 --- a/packages/worker/src/sw/iframe/html.ts +++ b/packages/worker/src/sw/iframe/html.ts @@ -1,6 +1,9 @@ // eslint-disable-next-line antfu/no-import-dist import chobitsuUrl from '../../../../../vendor/chobitsu/dist/chobitsu.js?url' -import runnerScriptUrl from './script.ts?url' + +const runnerScriptUrl = import.meta.env.DEV + ? new URL('./script.ts', import.meta.url).href + : new URL('./script-bundled.js', import.meta.url).href export async function generateImportMap(packageJsons: any[]) { const importMap: Record = {} diff --git a/packages/worker/src/sw/iframe/script.ts b/packages/worker/src/sw/iframe/script.ts index edd1966..235ab2f 100644 --- a/packages/worker/src/sw/iframe/script.ts +++ b/packages/worker/src/sw/iframe/script.ts @@ -1,4 +1,4 @@ -import { TelegramClient } from '@mtcute/web?external' +import { Long, TelegramClient } from '@mtcute/web' type ConnectionState = import('@mtcute/web').ConnectionState type TelegramClientOptions = import('@mtcute/web').TelegramClientOptions diff --git a/packages/worker/vite.config.ts b/packages/worker/vite.config.ts index 287c2cb..cc409b3 100644 --- a/packages/worker/vite.config.ts +++ b/packages/worker/vite.config.ts @@ -1,8 +1,6 @@ import type { UserConfig } from 'vite' import { join } from 'node:path' import { defineConfig, loadEnv } from 'vite' -// eslint-disable-next-line import/no-relative-packages -import externalizeDeps from '../../scripts/vite-plugin-externalize-dependencies.ts' export default defineConfig((env): UserConfig => { process.env = { @@ -18,14 +16,11 @@ export default defineConfig((env): UserConfig => { exclude: ['@mtcute/wasm'], }, build: { + emptyOutDir: true, + assetsDir: '', rollupOptions: { external: ['node:fs/promises', 'node:crypto'], }, }, - plugins: [ - externalizeDeps({ - externals: [], - }), - ], } }) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2f7f2ef..1887775 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -44,6 +44,9 @@ importers: tailwindcss: specifier: ^3.4.17 version: 3.4.17 + tsx: + specifier: ^4.19.2 + version: 4.19.2 typescript: specifier: ^5.7.3 version: 5.7.3 @@ -189,6 +192,10 @@ importers: uqr: specifier: ^0.1.2 version: 0.1.2 + devDependencies: + dotenv: + specifier: ^16.4.7 + version: 16.4.7 packages: @@ -374,6 +381,12 @@ packages: cpu: [ppc64] os: [aix] + '@esbuild/aix-ppc64@0.23.1': + resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + '@esbuild/aix-ppc64@0.24.2': resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==} engines: {node: '>=18'} @@ -386,6 +399,12 @@ packages: cpu: [arm64] os: [android] + '@esbuild/android-arm64@0.23.1': + resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm64@0.24.2': resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==} engines: {node: '>=18'} @@ -398,6 +417,12 @@ packages: cpu: [arm] os: [android] + '@esbuild/android-arm@0.23.1': + resolution: {integrity: sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + '@esbuild/android-arm@0.24.2': resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==} engines: {node: '>=18'} @@ -410,6 +435,12 @@ packages: cpu: [x64] os: [android] + '@esbuild/android-x64@0.23.1': + resolution: {integrity: sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + '@esbuild/android-x64@0.24.2': resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==} engines: {node: '>=18'} @@ -422,6 +453,12 @@ packages: cpu: [arm64] os: [darwin] + '@esbuild/darwin-arm64@0.23.1': + resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-arm64@0.24.2': resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==} engines: {node: '>=18'} @@ -434,6 +471,12 @@ packages: cpu: [x64] os: [darwin] + '@esbuild/darwin-x64@0.23.1': + resolution: {integrity: sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + '@esbuild/darwin-x64@0.24.2': resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==} engines: {node: '>=18'} @@ -446,6 +489,12 @@ packages: cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-arm64@0.23.1': + resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-arm64@0.24.2': resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==} engines: {node: '>=18'} @@ -458,6 +507,12 @@ packages: cpu: [x64] os: [freebsd] + '@esbuild/freebsd-x64@0.23.1': + resolution: {integrity: sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + '@esbuild/freebsd-x64@0.24.2': resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==} engines: {node: '>=18'} @@ -470,6 +525,12 @@ packages: cpu: [arm64] os: [linux] + '@esbuild/linux-arm64@0.23.1': + resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm64@0.24.2': resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==} engines: {node: '>=18'} @@ -482,6 +543,12 @@ packages: cpu: [arm] os: [linux] + '@esbuild/linux-arm@0.23.1': + resolution: {integrity: sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + '@esbuild/linux-arm@0.24.2': resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==} engines: {node: '>=18'} @@ -494,6 +561,12 @@ packages: cpu: [ia32] os: [linux] + '@esbuild/linux-ia32@0.23.1': + resolution: {integrity: sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-ia32@0.24.2': resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==} engines: {node: '>=18'} @@ -506,6 +579,12 @@ packages: cpu: [loong64] os: [linux] + '@esbuild/linux-loong64@0.23.1': + resolution: {integrity: sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-loong64@0.24.2': resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==} engines: {node: '>=18'} @@ -518,6 +597,12 @@ packages: cpu: [mips64el] os: [linux] + '@esbuild/linux-mips64el@0.23.1': + resolution: {integrity: sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-mips64el@0.24.2': resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==} engines: {node: '>=18'} @@ -530,6 +615,12 @@ packages: cpu: [ppc64] os: [linux] + '@esbuild/linux-ppc64@0.23.1': + resolution: {integrity: sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-ppc64@0.24.2': resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==} engines: {node: '>=18'} @@ -542,6 +633,12 @@ packages: cpu: [riscv64] os: [linux] + '@esbuild/linux-riscv64@0.23.1': + resolution: {integrity: sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-riscv64@0.24.2': resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==} engines: {node: '>=18'} @@ -554,6 +651,12 @@ packages: cpu: [s390x] os: [linux] + '@esbuild/linux-s390x@0.23.1': + resolution: {integrity: sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-s390x@0.24.2': resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==} engines: {node: '>=18'} @@ -566,6 +669,12 @@ packages: cpu: [x64] os: [linux] + '@esbuild/linux-x64@0.23.1': + resolution: {integrity: sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + '@esbuild/linux-x64@0.24.2': resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==} engines: {node: '>=18'} @@ -584,12 +693,24 @@ packages: cpu: [x64] os: [netbsd] + '@esbuild/netbsd-x64@0.23.1': + resolution: {integrity: sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + '@esbuild/netbsd-x64@0.24.2': resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] + '@esbuild/openbsd-arm64@0.23.1': + resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + '@esbuild/openbsd-arm64@0.24.2': resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==} engines: {node: '>=18'} @@ -602,6 +723,12 @@ packages: cpu: [x64] os: [openbsd] + '@esbuild/openbsd-x64@0.23.1': + resolution: {integrity: sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + '@esbuild/openbsd-x64@0.24.2': resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==} engines: {node: '>=18'} @@ -614,6 +741,12 @@ packages: cpu: [x64] os: [sunos] + '@esbuild/sunos-x64@0.23.1': + resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + '@esbuild/sunos-x64@0.24.2': resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==} engines: {node: '>=18'} @@ -626,6 +759,12 @@ packages: cpu: [arm64] os: [win32] + '@esbuild/win32-arm64@0.23.1': + resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-arm64@0.24.2': resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==} engines: {node: '>=18'} @@ -638,6 +777,12 @@ packages: cpu: [ia32] os: [win32] + '@esbuild/win32-ia32@0.23.1': + resolution: {integrity: sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-ia32@0.24.2': resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==} engines: {node: '>=18'} @@ -650,6 +795,12 @@ packages: cpu: [x64] os: [win32] + '@esbuild/win32-x64@0.23.1': + resolution: {integrity: sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@esbuild/win32-x64@0.24.2': resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==} engines: {node: '>=18'} @@ -816,8 +967,8 @@ packages: '@mtcute/tl@196.0.0': resolution: {integrity: sha512-/FEoLfGk7VatEMkBWn4naRQnolodJX0CL0C2rPJr+gmhLSVMQs1a9HqLMIUFYRlEvZ4ayk4ujOWvF9G64xvW5g==} - '@mtcute/wasm@0.19.0': - resolution: {integrity: sha512-QvSCjNR3/Y4knRMfccNXAdPUCgnQfjmOD/LGGHgQq/5/7SfA7f4/wk7G/TdlnBPArqk58EvyrC5qeKEy81y9Xw==} + '@mtcute/wasm@0.19.9': + resolution: {integrity: sha512-HFuZRWXW7dv2wNp7ePqW2AiJqaMtETQAQlGywJdWpM4dG+KpWarP0CvkOvvvvI1JbrDIw0jMoW3G4YP2WZnnFA==} '@mtcute/web@0.19.5': resolution: {integrity: sha512-NtO9fKGLobAbm+Nm3OAy0gmY1sphz+Rv+JbUGBoPKY6PQUuT2uBCoRvutoHraBZd91Y2hExHMg2juWHgmJ6QPg==} @@ -1363,6 +1514,10 @@ packages: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} + dotenv@16.4.7: + resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} + engines: {node: '>=12'} + eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} @@ -1394,6 +1549,11 @@ packages: engines: {node: '>=12'} hasBin: true + esbuild@0.23.1: + resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==} + engines: {node: '>=18'} + hasBin: true + esbuild@0.24.2: resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==} engines: {node: '>=18'} @@ -2575,6 +2735,11 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + tsx@4.19.2: + resolution: {integrity: sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g==} + engines: {node: '>=18.0.0'} + hasBin: true + type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -2978,102 +3143,153 @@ snapshots: '@esbuild/aix-ppc64@0.21.5': optional: true + '@esbuild/aix-ppc64@0.23.1': + optional: true + '@esbuild/aix-ppc64@0.24.2': optional: true '@esbuild/android-arm64@0.21.5': optional: true + '@esbuild/android-arm64@0.23.1': + optional: true + '@esbuild/android-arm64@0.24.2': optional: true '@esbuild/android-arm@0.21.5': optional: true + '@esbuild/android-arm@0.23.1': + optional: true + '@esbuild/android-arm@0.24.2': optional: true '@esbuild/android-x64@0.21.5': optional: true + '@esbuild/android-x64@0.23.1': + optional: true + '@esbuild/android-x64@0.24.2': optional: true '@esbuild/darwin-arm64@0.21.5': optional: true + '@esbuild/darwin-arm64@0.23.1': + optional: true + '@esbuild/darwin-arm64@0.24.2': optional: true '@esbuild/darwin-x64@0.21.5': optional: true + '@esbuild/darwin-x64@0.23.1': + optional: true + '@esbuild/darwin-x64@0.24.2': optional: true '@esbuild/freebsd-arm64@0.21.5': optional: true + '@esbuild/freebsd-arm64@0.23.1': + optional: true + '@esbuild/freebsd-arm64@0.24.2': optional: true '@esbuild/freebsd-x64@0.21.5': optional: true + '@esbuild/freebsd-x64@0.23.1': + optional: true + '@esbuild/freebsd-x64@0.24.2': optional: true '@esbuild/linux-arm64@0.21.5': optional: true + '@esbuild/linux-arm64@0.23.1': + optional: true + '@esbuild/linux-arm64@0.24.2': optional: true '@esbuild/linux-arm@0.21.5': optional: true + '@esbuild/linux-arm@0.23.1': + optional: true + '@esbuild/linux-arm@0.24.2': optional: true '@esbuild/linux-ia32@0.21.5': optional: true + '@esbuild/linux-ia32@0.23.1': + optional: true + '@esbuild/linux-ia32@0.24.2': optional: true '@esbuild/linux-loong64@0.21.5': optional: true + '@esbuild/linux-loong64@0.23.1': + optional: true + '@esbuild/linux-loong64@0.24.2': optional: true '@esbuild/linux-mips64el@0.21.5': optional: true + '@esbuild/linux-mips64el@0.23.1': + optional: true + '@esbuild/linux-mips64el@0.24.2': optional: true '@esbuild/linux-ppc64@0.21.5': optional: true + '@esbuild/linux-ppc64@0.23.1': + optional: true + '@esbuild/linux-ppc64@0.24.2': optional: true '@esbuild/linux-riscv64@0.21.5': optional: true + '@esbuild/linux-riscv64@0.23.1': + optional: true + '@esbuild/linux-riscv64@0.24.2': optional: true '@esbuild/linux-s390x@0.21.5': optional: true + '@esbuild/linux-s390x@0.23.1': + optional: true + '@esbuild/linux-s390x@0.24.2': optional: true '@esbuild/linux-x64@0.21.5': optional: true + '@esbuild/linux-x64@0.23.1': + optional: true + '@esbuild/linux-x64@0.24.2': optional: true @@ -3083,39 +3299,60 @@ snapshots: '@esbuild/netbsd-x64@0.21.5': optional: true + '@esbuild/netbsd-x64@0.23.1': + optional: true + '@esbuild/netbsd-x64@0.24.2': optional: true + '@esbuild/openbsd-arm64@0.23.1': + optional: true + '@esbuild/openbsd-arm64@0.24.2': optional: true '@esbuild/openbsd-x64@0.21.5': optional: true + '@esbuild/openbsd-x64@0.23.1': + optional: true + '@esbuild/openbsd-x64@0.24.2': optional: true '@esbuild/sunos-x64@0.21.5': optional: true + '@esbuild/sunos-x64@0.23.1': + optional: true + '@esbuild/sunos-x64@0.24.2': optional: true '@esbuild/win32-arm64@0.21.5': optional: true + '@esbuild/win32-arm64@0.23.1': + optional: true + '@esbuild/win32-arm64@0.24.2': optional: true '@esbuild/win32-ia32@0.21.5': optional: true + '@esbuild/win32-ia32@0.23.1': + optional: true + '@esbuild/win32-ia32@0.24.2': optional: true '@esbuild/win32-x64@0.21.5': optional: true + '@esbuild/win32-x64@0.23.1': + optional: true + '@esbuild/win32-x64@0.24.2': optional: true @@ -3314,13 +3551,13 @@ snapshots: dependencies: long: 5.2.3 - '@mtcute/wasm@0.19.0': {} + '@mtcute/wasm@0.19.9': {} '@mtcute/web@0.19.5': dependencies: '@fuman/net': 0.0.9 '@mtcute/core': 0.19.6 - '@mtcute/wasm': 0.19.0 + '@mtcute/wasm': 0.19.9 '@nanostores/persistent@0.10.2(nanostores@0.11.3)': dependencies: @@ -3849,6 +4086,8 @@ snapshots: dependencies: esutils: 2.0.3 + dotenv@16.4.7: {} + eastasianwidth@0.2.0: {} electron-to-chromium@1.5.80: {} @@ -3896,6 +4135,33 @@ snapshots: '@esbuild/win32-ia32': 0.21.5 '@esbuild/win32-x64': 0.21.5 + esbuild@0.23.1: + optionalDependencies: + '@esbuild/aix-ppc64': 0.23.1 + '@esbuild/android-arm': 0.23.1 + '@esbuild/android-arm64': 0.23.1 + '@esbuild/android-x64': 0.23.1 + '@esbuild/darwin-arm64': 0.23.1 + '@esbuild/darwin-x64': 0.23.1 + '@esbuild/freebsd-arm64': 0.23.1 + '@esbuild/freebsd-x64': 0.23.1 + '@esbuild/linux-arm': 0.23.1 + '@esbuild/linux-arm64': 0.23.1 + '@esbuild/linux-ia32': 0.23.1 + '@esbuild/linux-loong64': 0.23.1 + '@esbuild/linux-mips64el': 0.23.1 + '@esbuild/linux-ppc64': 0.23.1 + '@esbuild/linux-riscv64': 0.23.1 + '@esbuild/linux-s390x': 0.23.1 + '@esbuild/linux-x64': 0.23.1 + '@esbuild/netbsd-x64': 0.23.1 + '@esbuild/openbsd-arm64': 0.23.1 + '@esbuild/openbsd-x64': 0.23.1 + '@esbuild/sunos-x64': 0.23.1 + '@esbuild/win32-arm64': 0.23.1 + '@esbuild/win32-ia32': 0.23.1 + '@esbuild/win32-x64': 0.23.1 + esbuild@0.24.2: optionalDependencies: '@esbuild/aix-ppc64': 0.24.2 @@ -5323,6 +5589,13 @@ snapshots: tslib@2.8.1: {} + tsx@4.19.2: + dependencies: + esbuild: 0.23.1 + get-tsconfig: 4.8.1 + optionalDependencies: + fsevents: 2.3.3 + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 diff --git a/scripts/vite-plugin-externalize-dependencies.ts b/scripts/vite-plugin-externalize-dependencies.ts deleted file mode 100644 index 8ca8b03..0000000 --- a/scripts/vite-plugin-externalize-dependencies.ts +++ /dev/null @@ -1,193 +0,0 @@ -// based on https://github.com/MilanKovacic/vite-plugin-externalize-dependencies/blob/main/src/index.ts -// but modified to support `?external` imports - -import type { Plugin as EsbuildPlugin, OnResolveArgs, PluginBuild } from 'esbuild' -import type { Plugin, ResolvedConfig, UserConfig } from 'vite' - -type ExternalCriteria = string | RegExp | ((id: string) => boolean) - -interface ModulePrefixTransformPluginOptions { - /** The base path of the vite configuration */ - base: string -} - -interface PluginOptions { - externals: ExternalCriteria[] -} - -const resolvedExternals = new Set() - -function isExternal(id: string, externals: ExternalCriteria[]): boolean { - if (id.endsWith('?external')) return true - - return externals.some((external) => { - if (typeof external === 'string') { - return id === external || id.startsWith(`${external}/`) - } - - if (external instanceof RegExp) { - return external.test(id) - } - - if (typeof external === 'function') { - return external(id) - } - - return false - }) -} - -/** - * Creates a plugin for esbuild to externalize specific modules. - * esbuild is used by Vite during development. - * This plugin is injected into optimizeDeps.esbuildOptions.plugins, and runs during the dependency scanning / optimization phase. - * - * @param options - Plugin options - * - * @returns The esbuild plugin - */ -function esbuildPluginExternalize(externals: ExternalCriteria[]): EsbuildPlugin { - return { - name: 'externalize', - setup(build: PluginBuild) { - build.onResolve({ filter: /.*/ }, (args: OnResolveArgs) => { - if ( - isExternal(args.path, externals) - && args.kind === 'import-statement' - ) { - resolvedExternals.add(args.path) - return { - path: args.path, - external: true, - } - } - - // Supresses the following error: - // The entry point [moduleName] cannot be marked as external - if (isExternal(args.path, externals) && args.kind === 'entry-point') { - resolvedExternals.add(args.path) - return { path: args.path, namespace: 'externalized-modules' } - } - - return null - }) - // Supresses the following error: - // Do not know how to load path: [namespace:moduleName] - build.onLoad({ filter: /.*/ }, (args) => { - if (isExternal(args.path, externals)) { - return { contents: '' } - } - - return null - }) - }, - } -} - -/** - * Creates a plugin to remove prefix from imports injected by Vite. - * If module is externalized, Vite will prefix imports with "/\@id/" during development. - * - * @param options - The plugin options - * - * @returns Vite plugin to remove prefix from imports - */ -function modulePrefixTransform({ - base, -}: ModulePrefixTransformPluginOptions): Plugin { - return { - name: 'vite-plugin-remove-prefix', - transform: (code: string): string => { - // Verify if there are any external modules resolved to avoid having /\/@id\/()/g regex - if (resolvedExternals.size === 0) return code - - const viteImportAnalysisModulePrefix = '@id/' - const prefixedImportRegex = new RegExp( - `${base}${viteImportAnalysisModulePrefix}(${ - [...resolvedExternals] - .map(it => it.replace(/\?/g, '\\?')) - .join('|')})`, - 'g', - ) - - if (prefixedImportRegex.test(code)) { - return code.replace( - prefixedImportRegex, - (_: string, externalName: string) => externalName.replace(/\?external$/g, ''), - ) - } - return code - }, - } -} - -/** - * Creates a Vite plugin to externalize specific modules. - * This plugin is only used during development. - * To externalize modules in production, configure build.rollupOptions.external. - * - * @param externals - The list of modules to externalize. - * - * @returns The Vite plugin. - */ -function vitePluginExternalize(options: PluginOptions): Plugin { - return { - name: 'vite-plugin-externalize', - enforce: 'pre', - apply: 'serve', - config: (config: UserConfig): Omit | null | void => { - config.optimizeDeps ??= {} - config.optimizeDeps.esbuildOptions ??= {} - config.optimizeDeps.esbuildOptions.plugins ??= [] - - // Prevent the plugin from being inserted multiple times - const pluginName = 'externalize' - const isPluginAdded = config.optimizeDeps.esbuildOptions.plugins.some( - (plugin: any) => plugin.name === pluginName, - ) - - if (!isPluginAdded) { - config.optimizeDeps.esbuildOptions.plugins.push( - esbuildPluginExternalize(options.externals) as any, - ) - } - return null - }, - configResolved: (resolvedConfig: ResolvedConfig) => { - // Plugins are read-only, and should not be modified, - // however modulePrefixTransformPlugin MUST run after vite:import-analysis (which adds the prefix to imports) - - (resolvedConfig.plugins as Plugin[]).push( - modulePrefixTransform({ base: resolvedConfig.base ?? '/' }), - ) - }, - // Supresses the following warning: - // Failed to resolve import [dependency] from [sourceFile]. Does the file exist? - resolveId: (id: string) => { - if (resolvedExternals.has(id)) { - return { id, external: true } - } - - // During subsequent runs after the dependency optimization is completed, esbuild plugin might not be called. - // This will cause the resolvedExternals to be empty, and the plugin will not be able to resolve the external modules, which is why a direct check is required. - if (isExternal(id, options.externals)) { - resolvedExternals.add(id) - return { id, external: true } - } - - return null - }, - // Supresses the following warning: - // The following dependencies are imported but could not be resolved: [dependency] (imported by [sourceFile]) - load: (id: string) => { - if (resolvedExternals.has(id)) { - return { code: 'export default {};' } - } - return null - }, - } -} - -// Justification: Vite plugins are expected to provide a default export - -export default vitePluginExternalize