@quark-fw/plugin-react 0.1.7 → 0.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,12 +1,7 @@
1
- import type { InlineConfig } from "vite";
2
- import react from "@vitejs/plugin-react";
3
- import tsconfigPaths from "vite-tsconfig-paths";
4
- import svgr from "vite-plugin-svgr";
5
- import { patchCssModules } from "vite-css-modules";
6
- import fs from "node:fs";
1
+ // Пути фронтенда и сборки (хелперы). Сама конфигурация vite —
2
+ // в createViteConfig.ts.
7
3
  import path from "node:path";
8
4
  import { fileURLToPath } from "node:url";
9
- import { loadModulesFromExternalFolderPlugin } from "./plugins.js";
10
5
 
11
6
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
12
7
 
@@ -28,72 +23,3 @@ export const buildPaths = (cwd = process.cwd()) => ({
28
23
  manifest: path.join(cwd, "build/client/.vite/manifest.json"),
29
24
  serverEntry: path.join(cwd, "build/server/entry-server.js"),
30
25
  });
31
-
32
- /**
33
- * Пакеты @quark/* в приложении — это симлинки на ИСХОДНИКИ соседних
34
- * workspace-пакетов. Если позволить vite их пре-бандлить, он кэширует
35
- * результат в node_modules/.vite и продолжает отдавать старую версию даже
36
- * после правок в пакете (правка видна только после ручной очистки кэша).
37
- * Поэтому исключаем их из оптимизации — тогда HMR работает как для
38
- * обычных файлов приложения.
39
- */
40
- const workspacePackages = (cwd: string): string[] => {
41
- try {
42
- const pkg = JSON.parse(
43
- fs.readFileSync(path.join(cwd, "package.json"), "utf8"),
44
- ) as Record<string, Record<string, string> | undefined>;
45
- return Object.keys({
46
- ...(pkg.dependencies ?? {}),
47
- ...(pkg.devDependencies ?? {}),
48
- }).filter(
49
- (name) => name.startsWith("@quark/") || name.startsWith("@quark-fw/"),
50
- );
51
- } catch {
52
- return [];
53
- }
54
- };
55
-
56
- /** Плагин поставлен из npm (лежит внутри node_modules), а не симлинкован из монорепы. */
57
- const installedFromRegistry = fs
58
- .realpathSync(__dirname)
59
- .replace(/\\/g, "/")
60
- .includes("/node_modules/");
61
-
62
- /** Единая конфигурация vite для dev-сервера и для сборки. */
63
- export function createViteConfig(overrides?: InlineConfig): InlineConfig {
64
- return {
65
- plugins: [
66
- patchCssModules(),
67
- svgr({ include: "**/*.svg" }),
68
- react(),
69
- tsconfigPaths(),
70
- loadModulesFromExternalFolderPlugin(),
71
- ],
72
- // Установленный из реестра плагин лежит в node_modules, куда
73
- // @vitejs/plugin-react не заглядывает (у него exclude /node_modules/).
74
- // Без явного automatic-рантайма его собственный JSX собирается в
75
- // React.createElement и падает с "React is not defined".
76
- esbuild: { jsx: "automatic", jsxImportSource: "react" },
77
- optimizeDeps: {
78
- exclude: workspacePackages(process.cwd()),
79
- // Плагин исключён из оптимизации, поэтому vite не сканирует его
80
- // импорты: установленный из реестра, он тянет react-router и mantine
81
- // сырыми, и CJS-пакеты внутри них (cookie) падают на named-импортах.
82
- // В монорепо, наоборот, форсировать пре-бандл нельзя — рядом с
83
- // симлинкованными исходниками появилась бы вторая копия React.
84
- include: installedFromRegistry
85
- ? [
86
- "react",
87
- "react-dom",
88
- "react-dom/client",
89
- "react-router-dom",
90
- "@mantine/core",
91
- "@mantine/dates",
92
- "@mantine/modals",
93
- "@mantine/notifications",
94
- ]
95
- : [],
96
- },
97
- ...overrides,
98
- };
99
- }
@@ -1,24 +0,0 @@
1
- export function usePromise<T>(promise: Promise<T>): () => T {
2
- let status = "pending";
3
- let response: T;
4
- const suspender = promise.then(
5
- (res) => {
6
- status = "success";
7
- response = res;
8
- },
9
- (err) => {
10
- status = "error";
11
- response = err as never;
12
- },
13
- );
14
- return () => {
15
- switch (status) {
16
- case "pending":
17
- throw suspender;
18
- case "error":
19
- throw response;
20
- default:
21
- return response;
22
- }
23
- };
24
- }