From 9c90d04a74810465a75ad406648e2483162fdab0 Mon Sep 17 00:00:00 2001 From: nflnkr <105123049+nflnkr@users.noreply.github.com> Date: Sat, 20 Jan 2024 15:26:28 +0300 Subject: [PATCH] add widget build --- .dockerignore | 3 ++- .gitignore | 1 + package.json | 1 + src/widget.tsx | 24 ++++++++++++++++++++++++ vite.config.ts | 18 ++++++++++-------- vite.config.widget.ts | 25 +++++++++++++++++++++++++ yarn.lock | 42 +++++++++++++++++++++--------------------- 7 files changed, 84 insertions(+), 30 deletions(-) create mode 100644 src/widget.tsx create mode 100644 vite.config.widget.ts diff --git a/.dockerignore b/.dockerignore index 0bfacb3..b0542ba 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,4 +1,5 @@ -/build +/dist +/widget Makefile README.md compose.yml diff --git a/.gitignore b/.gitignore index a547bf3..e698ff5 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,7 @@ lerna-debug.log* node_modules dist dist-ssr +widget *.local # Editor directories and files diff --git a/package.json b/package.json index 57f11ff..6127a95 100755 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "scripts": { "dev": "vite", "build": "tsc && vite build", + "build:widget": "tsc && vite build --config vite.config.widget.ts", "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", "preview": "vite preview", "cypress:open": "cypress open" diff --git a/src/widget.tsx b/src/widget.tsx new file mode 100644 index 0000000..6ada379 --- /dev/null +++ b/src/widget.tsx @@ -0,0 +1,24 @@ +import { Root, createRoot } from "react-dom/client"; +import App from "./App"; +import "./index.css"; + + +let root: Root | undefined = undefined; + +const widget = { + create({ selector }: { + selector: string; + }) { + const element = document.getElementById(selector); + if (!element) throw new Error("Element for widget doesn't exist"); + + root = createRoot(element); + + root.render(); + }, + unmount() { + if (root) root.unmount(); + } +}; + +export default widget; diff --git a/vite.config.ts b/vite.config.ts index 1a6a150..9cf654f 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,17 +1,19 @@ -import { defineConfig } from "vite"; import react from "@vitejs/plugin-react"; import { resolve } from "path"; +import { defineConfig } from "vite"; + +export const alias = { + "@ui_kit": resolve(__dirname, "./src/ui_kit"), + "@icons": resolve(__dirname, "./src/assets/icons"), + "@stores": resolve(__dirname, "./src/stores"), + "@api": resolve(__dirname, "./src/api"), + "@model": resolve(__dirname, "./src/model"), +}; // https://vitejs.dev/config/ export default defineConfig({ plugins: [react()], resolve: { - alias: { - "@ui_kit": resolve(__dirname, "./src/ui_kit"), - "@icons": resolve(__dirname, "./src/assets/icons"), - "@stores": resolve(__dirname, "./src/stores"), - "@api": resolve(__dirname, "./src/api"), - "@model": resolve(__dirname, "./src/model"), - } + alias, }, }); diff --git a/vite.config.widget.ts b/vite.config.widget.ts new file mode 100644 index 0000000..d2f253a --- /dev/null +++ b/vite.config.widget.ts @@ -0,0 +1,25 @@ +import react from "@vitejs/plugin-react"; +import { defineConfig } from "vite"; +import { alias } from "./vite.config"; + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [react()], + resolve: { + alias, + }, + build: { + copyPublicDir: false, + rollupOptions: { + input: "src/widget.tsx", + preserveEntrySignatures: "allow-extension", + output: { + manualChunks: undefined, + entryFileNames: "[name].js", + chunkFileNames: "[name].js", + assetFileNames: "[name].[ext]", + }, + }, + outDir: "widget", + }, +}); diff --git a/yarn.lock b/yarn.lock index dc356cc..50f206f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1618,9 +1618,9 @@ integrity sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q== "@frontend/kitui@^1.0.54": - version "1.0.55" - resolved "https://penahub.gitlab.yandexcloud.net/api/v4/projects/21/packages/npm/@frontend/kitui/-/@frontend/kitui-1.0.55.tgz#6e02f80b2c13828142ffeacaf9704e50e54324d0" - integrity sha1-bgL4CywTgoFC/+rK+XBOUOVDJNA= + version "1.0.62" + resolved "https://penahub.gitlab.yandexcloud.net/api/v4/projects/21/packages/npm/@frontend/kitui/-/@frontend/kitui-1.0.62.tgz#212185a0a19a9b9948a85e9d4c71e002ad7f8b27" + integrity sha1-ISGFoKGam5lIqF6dTHHgAq1/iyc= dependencies: immer "^10.0.2" reconnecting-eventsource "^1.6.2" @@ -1915,9 +1915,9 @@ integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.21" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.21.tgz#5dc1df7b3dc4a6209e503a924e1ca56097a2bb15" - integrity sha512-SRfKmRe1KvYnxjEMtxEr+J4HIeMX5YBg/qhRHpxEIGjhX1rshcHlnFUE9K0GazhVKWM7B+nARSkV8LuvJdJ5/g== + version "0.3.22" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz#72a621e5de59f5f1ef792d0793a82ee20f645e4c" + integrity sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" @@ -2546,9 +2546,9 @@ undici-types "~5.26.4" "@types/node@^16.7.13": - version "16.18.72" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.72.tgz#a2337dda32ec1123894a15cebe3eb3b79ea2fa08" - integrity sha512-Kck1Du/zQyLbq5YlBKCtrUlyyP02lYjREjKKYImtf6MZgXrLoRVjexMv0wxiDzIJPnk86i+HrvGNyI03qoewEg== + version "16.18.73" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.73.tgz#cbbbff4c3e85020e042e65a2a836e1d1d5bfad06" + integrity sha512-GaTgwUNzESSlX9uhTX2RQcwj2KBf/Wda+52TTtuMpgzR2Rvw7NNypQ8BJdc5Wk6osxZHcUZAKip5PtqWsUl31Q== "@types/parse-json@^4.0.0": version "4.0.2" @@ -4715,9 +4715,9 @@ ejs@^3.1.6: jake "^10.8.5" electron-to-chromium@^1.4.601: - version "1.4.639" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.639.tgz#c6f9cc685f9efb2980d2cfc95a27f8142c9adf28" - integrity sha512-CkKf3ZUVZchr+zDpAlNLEEy2NJJ9T64ULWaDgy3THXXlPVPkLu3VOs9Bac44nebVtdwl2geSj6AxTtGDOxoXhg== + version "1.4.640" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.640.tgz#76290a36fa4b5f1f4cadaf1fc582478ebb3ac246" + integrity sha512-z/6oZ/Muqk4BaE7P69bXhUhpJbUM9ZJeka43ZwxsDshKtePns4mhBlh8bU5+yrnOnz3fhG82XLzGUXazOmsWnA== emittery@^0.10.2: version "0.10.2" @@ -9213,9 +9213,9 @@ reusify@^1.0.4: integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== rfdc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" - integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== + version "1.3.1" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.1.tgz#2b6d4df52dffe8bb346992a10ea9451f24373a8f" + integrity sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg== rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" @@ -10475,9 +10475,9 @@ verror@1.10.0: extsprintf "^1.2.0" vite@^5.0.8: - version "5.0.11" - resolved "https://registry.yarnpkg.com/vite/-/vite-5.0.11.tgz#31562e41e004cb68e1d51f5d2c641ab313b289e4" - integrity sha512-XBMnDjZcNAw/G1gEiskiM1v6yzM4GE5aMGvhWTlHAYYhxb7S3/V1s3m2LDHa8Vh6yIWYYB0iJwsEaS523c4oYA== + version "5.0.12" + resolved "https://registry.yarnpkg.com/vite/-/vite-5.0.12.tgz#8a2ffd4da36c132aec4adafe05d7adde38333c47" + integrity sha512-4hsnEkG3q0N4Tzf1+t6NdN9dg/L3BM+q8SWgbSPnJvrgH2kgdyzfVJwbR1ic69/4uMJJ/3dqDZZE5/WwqW8U1w== dependencies: esbuild "^0.19.3" postcss "^8.4.32" @@ -11063,8 +11063,8 @@ yup@^1.3.2: type-fest "^2.19.0" zustand@^4.3.8: - version "4.4.7" - resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.4.7.tgz#355406be6b11ab335f59a66d2cf9815e8f24038c" - integrity sha512-QFJWJMdlETcI69paJwhSMJz7PPWjVP8Sjhclxmxmxv/RYI7ZOvR5BHX+ktH0we9gTWQMxcne8q1OY8xxz604gw== + version "4.5.0" + resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.5.0.tgz#141354af56f91de378aa6c4b930032ab338f3ef0" + integrity sha512-zlVFqS5TQ21nwijjhJlx4f9iGrXSL0o/+Dpy4txAP22miJ8Ti6c1Ol1RLNN98BMib83lmDH/2KmLwaNXpjrO1A== dependencies: use-sync-external-store "1.2.0"