From 85ef557149cb3aa7fd04ad7cd676705c3a263b77 Mon Sep 17 00:00:00 2001 From: alina sireneva Date: Tue, 14 Jan 2025 06:34:42 +0300 Subject: [PATCH] refactor: initial move to a multi-origin architecture --- eslint.config.js | 13 +- package.json | 49 +- index.html => packages/repl/index.html | 2 +- packages/repl/package.json | 41 ++ .../repl/postcss.config.js | 0 {src => packages/repl/src}/App.tsx | 34 +- {src => packages/repl/src}/app.css | 0 .../repl/src/components/AccountAvatar.tsx | 31 + packages/repl/src/components/Updater.tsx | 58 ++ .../repl/src}/components/editor/Editor.css | 0 .../repl/src}/components/editor/Editor.tsx | 5 +- .../src}/components/editor/EditorTabs.tsx | 0 .../components/editor/utils/custom-worker.ts | 0 .../src}/components/editor/utils/latte.json | 0 .../src}/components/editor/utils/mocha.json | 0 .../src}/components/editor/utils/setup.ts | 13 +- .../editor/utils/typescript.tmLanguage.json | 0 .../src}/components/editor/utils/worker.d.ts | 0 .../repl/src/components/nav/NavbarMenu.tsx | 109 +++ .../repl/src}/components/runner/Actions.tsx | 0 .../repl/src}/components/runner/Devtools.tsx | 20 +- .../repl/src}/components/runner/Runner.tsx | 162 +++-- .../src}/components/settings/AccountsTab.tsx | 98 ++- .../src}/components/settings/Settings.tsx | 0 .../settings/import/AuthKeyImportDialog.tsx | 3 - .../settings/import/ImportDropdown.tsx | 19 +- .../import/StringSessionImportDialog.tsx | 49 +- .../src/components/settings}/login/Login.tsx | 221 +++--- .../components/settings}/login/PhoneInput.tsx | 45 +- {src => packages/repl/src}/index.tsx | 3 +- .../repl/src}/lib/components/country-icon.tsx | 0 .../repl/src}/lib/components/ui/avatar.tsx | 0 .../repl/src}/lib/components/ui/badge.tsx | 0 .../repl/src}/lib/components/ui/button.tsx | 1 + .../repl/src}/lib/components/ui/checkbox.tsx | 0 .../repl/src}/lib/components/ui/dialog.tsx | 0 .../src}/lib/components/ui/dropdown-menu.tsx | 0 .../repl/src}/lib/components/ui/label.tsx | 0 .../repl/src}/lib/components/ui/otp-field.tsx | 0 .../repl/src}/lib/components/ui/resizable.tsx | 0 .../repl/src}/lib/components/ui/select.tsx | 0 .../repl/src}/lib/components/ui/spinner.tsx | 0 .../repl/src}/lib/components/ui/tabs.tsx | 0 .../src}/lib/components/ui/text-field.tsx | 0 .../repl/src}/lib/components/ui/tooltip.tsx | 0 .../src}/lib/components/ui/transition.tsx | 0 .../repl/src}/lib/use-color-scheme.ts | 0 packages/repl/src/lib/utils.ts | 7 + packages/repl/src/store/accounts.ts | 15 + packages/repl/src/store/link.ts | 25 + {src => packages/repl/src}/store/tabs.ts | 0 {src => packages/repl/src}/store/use-store.ts | 0 packages/repl/src/vite-env.d.ts | 1 + .../repl/tailwind.config.js | 0 .../repl/ui.config.json | 0 packages/repl/vite.config.ts | 25 + packages/worker/index.html | 13 + packages/worker/package.json | 29 + packages/worker/src/client.ts | 114 ++++ packages/worker/src/index.ts | 18 + .../worker/src}/store/accounts.ts | 12 +- packages/worker/src/store/link.ts | 22 + {src => packages/worker/src}/sw/avatar.ts | 7 +- {src => packages/worker/src}/sw/cache.ts | 3 +- {src => packages/worker/src}/sw/client.ts | 14 +- packages/worker/src/sw/iframe.ts | 0 .../worker/src/sw/iframe/external.d.ts | 2 - .../worker/src/sw/iframe/html.ts | 4 +- .../worker/src/sw/iframe/script.ts | 19 +- {src => packages/worker/src}/sw/main.ts | 2 +- {src => packages/worker/src}/sw/register.ts | 0 {src => packages/worker/src}/sw/runtime.ts | 7 +- {src/lib => packages/worker/src/utils}/env.ts | 0 .../worker/src/utils}/ffetch.ts | 0 .../worker/src/utils}/telegram.ts | 0 .../worker/src/utils/timeout.ts | 8 - .../worker/src}/vfs/downloader.ts | 10 +- {src/lib => packages/worker/src}/vfs/gzip.ts | 0 .../worker/src}/vfs/storage.ts | 0 {src/lib => packages/worker/src}/vfs/tar.ts | 0 packages/worker/src/worker/main.ts | 69 ++ packages/worker/src/worker/sw.ts | 16 + packages/worker/src/worker/telegram.ts | 197 ++++++ packages/worker/src/worker/utils.ts | 11 + packages/worker/src/worker/vfs.ts | 67 ++ sw.ts => packages/worker/sw.ts | 0 packages/worker/vite.config.ts | 26 + ...lugin-externalize-dependencies@1.0.1.patch | 16 - pnpm-lock.yaml | 641 +++--------------- pnpm-workspace.yaml | 2 + src/components/AccountAvatar.tsx | 14 - src/components/Updater.tsx | 99 --- src/components/nav/NavbarMenu.tsx | 98 --- src/lib/vfs/system.ts | 124 ---- tsconfig.app.json | 4 +- tsconfig.node.json | 4 +- vite.config.ts | 15 - 97 files changed, 1426 insertions(+), 1310 deletions(-) rename index.html => packages/repl/index.html (89%) create mode 100644 packages/repl/package.json rename postcss.config.js => packages/repl/postcss.config.js (100%) rename {src => packages/repl/src}/App.tsx (73%) rename {src => packages/repl/src}/app.css (100%) create mode 100644 packages/repl/src/components/AccountAvatar.tsx create mode 100644 packages/repl/src/components/Updater.tsx rename {src => packages/repl/src}/components/editor/Editor.css (100%) rename {src => packages/repl/src}/components/editor/Editor.tsx (97%) rename {src => packages/repl/src}/components/editor/EditorTabs.tsx (100%) rename {src => packages/repl/src}/components/editor/utils/custom-worker.ts (100%) rename {src => packages/repl/src}/components/editor/utils/latte.json (100%) rename {src => packages/repl/src}/components/editor/utils/mocha.json (100%) rename {src => packages/repl/src}/components/editor/utils/setup.ts (91%) rename {src => packages/repl/src}/components/editor/utils/typescript.tmLanguage.json (100%) rename {src => packages/repl/src}/components/editor/utils/worker.d.ts (100%) create mode 100644 packages/repl/src/components/nav/NavbarMenu.tsx rename {src => packages/repl/src}/components/runner/Actions.tsx (100%) rename {src => packages/repl/src}/components/runner/Devtools.tsx (83%) rename {src => packages/repl/src}/components/runner/Runner.tsx (59%) rename {src => packages/repl/src}/components/settings/AccountsTab.tsx (77%) rename {src => packages/repl/src}/components/settings/Settings.tsx (100%) rename {src => packages/repl/src}/components/settings/import/AuthKeyImportDialog.tsx (96%) rename {src => packages/repl/src}/components/settings/import/ImportDropdown.tsx (86%) rename {src => packages/repl/src}/components/settings/import/StringSessionImportDialog.tsx (83%) rename {src/components => packages/repl/src/components/settings}/login/Login.tsx (76%) rename {src/components => packages/repl/src/components/settings}/login/PhoneInput.tsx (78%) rename {src => packages/repl/src}/index.tsx (69%) rename {src => packages/repl/src}/lib/components/country-icon.tsx (100%) rename {src => packages/repl/src}/lib/components/ui/avatar.tsx (100%) rename {src => packages/repl/src}/lib/components/ui/badge.tsx (100%) rename {src => packages/repl/src}/lib/components/ui/button.tsx (96%) rename {src => packages/repl/src}/lib/components/ui/checkbox.tsx (100%) rename {src => packages/repl/src}/lib/components/ui/dialog.tsx (100%) rename {src => packages/repl/src}/lib/components/ui/dropdown-menu.tsx (100%) rename {src => packages/repl/src}/lib/components/ui/label.tsx (100%) rename {src => packages/repl/src}/lib/components/ui/otp-field.tsx (100%) rename {src => packages/repl/src}/lib/components/ui/resizable.tsx (100%) rename {src => packages/repl/src}/lib/components/ui/select.tsx (100%) rename {src => packages/repl/src}/lib/components/ui/spinner.tsx (100%) rename {src => packages/repl/src}/lib/components/ui/tabs.tsx (100%) rename {src => packages/repl/src}/lib/components/ui/text-field.tsx (100%) rename {src => packages/repl/src}/lib/components/ui/tooltip.tsx (100%) rename {src => packages/repl/src}/lib/components/ui/transition.tsx (100%) rename {src => packages/repl/src}/lib/use-color-scheme.ts (100%) create mode 100644 packages/repl/src/lib/utils.ts create mode 100644 packages/repl/src/store/accounts.ts create mode 100644 packages/repl/src/store/link.ts rename {src => packages/repl/src}/store/tabs.ts (100%) rename {src => packages/repl/src}/store/use-store.ts (100%) create mode 100644 packages/repl/src/vite-env.d.ts rename tailwind.config.js => packages/repl/tailwind.config.js (100%) rename ui.config.json => packages/repl/ui.config.json (100%) create mode 100644 packages/repl/vite.config.ts create mode 100644 packages/worker/index.html create mode 100644 packages/worker/package.json create mode 100644 packages/worker/src/client.ts create mode 100644 packages/worker/src/index.ts rename {src => packages/worker/src}/store/accounts.ts (74%) create mode 100644 packages/worker/src/store/link.ts rename {src => packages/worker/src}/sw/avatar.ts (88%) rename {src => packages/worker/src}/sw/cache.ts (88%) rename {src => packages/worker/src}/sw/client.ts (68%) create mode 100644 packages/worker/src/sw/iframe.ts rename src/vite-env.d.ts => packages/worker/src/sw/iframe/external.d.ts (64%) rename src/lib/runtime.ts => packages/worker/src/sw/iframe/html.ts (95%) rename src/components/runner/iframe.ts => packages/worker/src/sw/iframe/script.ts (91%) rename {src => packages/worker/src}/sw/main.ts (98%) rename {src => packages/worker/src}/sw/register.ts (100%) rename {src => packages/worker/src}/sw/runtime.ts (91%) rename {src/lib => packages/worker/src/utils}/env.ts (100%) rename {src/lib => packages/worker/src/utils}/ffetch.ts (100%) rename {src/lib => packages/worker/src/utils}/telegram.ts (100%) rename src/lib/utils.ts => packages/worker/src/utils/timeout.ts (66%) rename {src/lib => packages/worker/src}/vfs/downloader.ts (95%) rename {src/lib => packages/worker/src}/vfs/gzip.ts (100%) rename {src/lib => packages/worker/src}/vfs/storage.ts (100%) rename {src/lib => packages/worker/src}/vfs/tar.ts (100%) create mode 100644 packages/worker/src/worker/main.ts create mode 100644 packages/worker/src/worker/sw.ts create mode 100644 packages/worker/src/worker/telegram.ts create mode 100644 packages/worker/src/worker/utils.ts create mode 100644 packages/worker/src/worker/vfs.ts rename sw.ts => packages/worker/sw.ts (100%) create mode 100644 packages/worker/vite.config.ts delete mode 100644 patches/vite-plugin-externalize-dependencies@1.0.1.patch create mode 100644 pnpm-workspace.yaml delete mode 100644 src/components/AccountAvatar.tsx delete mode 100644 src/components/Updater.tsx delete mode 100644 src/components/nav/NavbarMenu.tsx delete mode 100644 src/lib/vfs/system.ts delete mode 100644 vite.config.ts diff --git a/eslint.config.js b/eslint.config.js index 081f9e9..9e6db90 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -1,6 +1,15 @@ import antfu from '@antfu/eslint-config' import tailwind from 'eslint-plugin-tailwindcss' +import tailwindConfig from 'eslint-plugin-tailwindcss/lib/config/rules.js' + +const mappedTailwindConfig = {} +for (const [key, value] of Object.entries(tailwindConfig)) { + mappedTailwindConfig[key.replace('tailwindcss/', 'tw/')] = [value, { + config: 'packages/repl/tailwind.config.js', + }] +} + export default antfu({ ignores: [ 'src/components/Editor/utils/*.json', @@ -10,6 +19,7 @@ export default antfu({ solid: true, yaml: false, rules: { + 'node/prefer-global/process': 'off', 'style/multiline-ternary': 'off', 'curly': ['error', 'multi-line'], 'style/brace-style': ['error', '1tbs', { allowSingleLine: true }], @@ -21,8 +31,9 @@ export default antfu({ 'ts/no-redeclare': 'off', 'unused-imports/no-unused-imports': 'error', 'ts/no-empty-object-type': 'off', + ...mappedTailwindConfig, }, plugins: { tw: tailwind, }, -}, tailwind.configs['flat/recommended']) +}) diff --git a/package.json b/package.json index 59c1295..36f12e0 100644 --- a/package.json +++ b/package.json @@ -1,68 +1,27 @@ { - "name": "mtcute-repl", + "name": "mtcute-repl-workspace", "type": "module", "version": "0.0.0", "private": true, "packageManager": "pnpm@9.5.0", "scripts": { - "dev": "vite", - "build": "tsc -b && vite build", - "preview": "vite preview" - }, - "dependencies": { - "@badrap/valita": "^0.4.2", - "@corvu/otp-field": "^0.1.4", - "@corvu/resizable": "^0.2.3", - "@fuman/fetch": "^0.0.8", - "@fuman/io": "0.0.8", - "@fuman/utils": "0.0.4", - "@kobalte/core": "^0.13.7", - "@mtcute/convert": "^0.19.4", - "@mtcute/web": "^0.19.5", - "@nanostores/persistent": "^0.10.2", - "class-variance-authority": "^0.7.1", - "clsx": "^2.1.1", - "esbuild": "^0.24.2", - "fflate": "^0.8.2", - "filesize": "^10.1.6", - "idb": "^8.0.1", - "lucide-solid": "^0.445.0", - "memfs": "^4.17.0", - "monaco-editor": "0.52.0", - "monaco-editor-core": "0.52.0", - "monaco-editor-textmate": "^4.0.0", - "monaco-textmate": "^3.0.1", - "nanoid": "^5.0.9", - "nanostores": "^0.11.3", - "onigasm": "^2.2.5", - "semver": "^7.6.3", - "solid-icons": "^1.1.0", - "solid-js": "^1.9.4", - "solid-transition-group": "^0.2.3", - "tailwind-merge": "^2.6.0", - "tailwindcss-animate": "^1.0.7", - "ts-blank-space": "^0.4.4", - "uqr": "^0.1.2" + "dev": "pnpm -r --parallel dev" }, "devDependencies": { "@antfu/eslint-config": "^3.13.0", "@catppuccin/vscode": "^3.16.0", + "@fuman/fetch": "^0.0.8", "@types/node": "^22.10.5", "@types/semver": "^7.5.8", "autoprefixer": "^10.4.20", + "esbuild": "^0.24.2", "eslint-plugin-solid": "^0.14.5", "eslint-plugin-tailwindcss": "^3.17.5", "monaco-vscode-textmate-theme-converter": "^0.1.7", "plist2": "^1.1.4", - "postcss": "^8.4.49", "tailwindcss": "^3.4.17", "typescript": "^5.7.3", "vite": "^5.4.11", "vite-plugin-solid": "^2.11.0" - }, - "pnpm": { - "patchedDependencies": { - "vite-plugin-externalize-dependencies@1.0.1": "patches/vite-plugin-externalize-dependencies@1.0.1.patch" - } } } diff --git a/index.html b/packages/repl/index.html similarity index 89% rename from index.html rename to packages/repl/index.html index d812434..9e27e6a 100644 --- a/index.html +++ b/packages/repl/index.html @@ -4,7 +4,7 @@ - @mtcute/repl + @mtcute/playground
diff --git a/packages/repl/package.json b/packages/repl/package.json new file mode 100644 index 0000000..42e8d17 --- /dev/null +++ b/packages/repl/package.json @@ -0,0 +1,41 @@ +{ + "name": "mtcute-repl", + "type": "module", + "version": "0.0.0", + "private": true, + "packageManager": "pnpm@9.5.0", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "preview": "vite preview" + }, + "dependencies": { + "@corvu/otp-field": "^0.1.4", + "@corvu/resizable": "^0.2.3", + "@fuman/utils": "0.0.4", + "@kobalte/core": "^0.13.7", + + "@nanostores/persistent": "^0.10.2", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "filesize": "^10.1.6", + "lucide-solid": "^0.445.0", + "monaco-editor": "0.52.0", + "monaco-editor-core": "0.52.0", + "monaco-editor-textmate": "^4.0.0", + "monaco-textmate": "^3.0.1", + "mtcute-repl-worker": "workspace:*", + "nanoid": "^5.0.9", + "nanostores": "^0.11.3", + "onigasm": "^2.2.5", + "solid-icons": "^1.1.0", + "solid-js": "^1.9.4", + "solid-transition-group": "^0.2.3", + "ts-blank-space": "^0.4.4" + }, + "devDependencies": { + "postcss": "^8.4.49", + "tailwind-merge": "^2.6.0", + "tailwindcss-animate": "^1.0.7" + } +} diff --git a/postcss.config.js b/packages/repl/postcss.config.js similarity index 100% rename from postcss.config.js rename to packages/repl/postcss.config.js diff --git a/src/App.tsx b/packages/repl/src/App.tsx similarity index 73% rename from src/App.tsx rename to packages/repl/src/App.tsx index 021fea8..b04cbfc 100644 --- a/src/App.tsx +++ b/packages/repl/src/App.tsx @@ -1,22 +1,33 @@ -import Resizable from '@corvu/resizable' -import { createSignal, lazy } from 'solid-js' +import { workerInit } from 'mtcute-repl-worker/client' +import { createSignal, lazy, onMount, Show } from 'solid-js' import { EditorTabs } from './components/editor/EditorTabs.tsx' import { NavbarMenu } from './components/nav/NavbarMenu.tsx' import { Runner } from './components/runner/Runner.tsx' import { SettingsDialog, type SettingsTab } from './components/settings/Settings.tsx' import { Updater } from './components/Updater.tsx' -import { ResizableHandle, ResizablePanel } from './lib/components/ui/resizable.tsx' +import { Resizable, ResizableHandle, ResizablePanel } from './lib/components/ui/resizable.tsx' const Editor = lazy(() => import('./components/editor/Editor.tsx')) export function App() { - const [versions, setVersions] = createSignal | undefined>(undefined) + const [updating, setUpdating] = createSignal(true) const [showSettings, setShowSettings] = createSignal(false) const [settingsTab, setSettingsTab] = createSignal('accounts') + let workerIframe!: HTMLIFrameElement + + onMount(() => { + workerInit(workerIframe) + }) + return (
+