startx 0.0.1 → 0.1.0

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.
Files changed (154) hide show
  1. package/.prettierignore +0 -13
  2. package/.prettierrc.js +52 -52
  3. package/.vscode/launch.json +32 -0
  4. package/.vscode/settings.json +9 -3
  5. package/apps/core-server/.env.example +18 -24
  6. package/apps/core-server/Dockerfile +35 -61
  7. package/apps/core-server/eslint.config.ts +7 -0
  8. package/apps/core-server/package.json +41 -52
  9. package/apps/core-server/src/config/custom-type.ts +2 -40
  10. package/apps/core-server/src/events/index.ts +37 -37
  11. package/apps/core-server/src/index.ts +4 -13
  12. package/apps/core-server/src/middlewares/auth-middleware.ts +24 -7
  13. package/apps/core-server/src/middlewares/cors-middleware.ts +7 -6
  14. package/apps/core-server/src/middlewares/error-middleware.ts +7 -4
  15. package/apps/core-server/src/middlewares/logger-middleware.ts +81 -21
  16. package/apps/core-server/src/middlewares/notfound-middleware.ts +6 -14
  17. package/apps/core-server/src/middlewares/serve-static.ts +30 -24
  18. package/apps/core-server/src/routes/files/router.ts +9 -7
  19. package/apps/core-server/src/routes/server.ts +30 -36
  20. package/apps/core-server/tsdown.config.ts +4 -3
  21. package/biome.json +58 -60
  22. package/configs/eslint-config/package.json +16 -19
  23. package/configs/eslint-config/src/configs/base.ts +185 -225
  24. package/configs/eslint-config/src/configs/extend.ts +3 -0
  25. package/configs/eslint-config/src/configs/frontend.ts +81 -56
  26. package/configs/eslint-config/src/configs/node.ts +6 -6
  27. package/configs/eslint-config/src/plugin.ts +1 -0
  28. package/configs/eslint-config/src/rules/index.ts +8 -12
  29. package/configs/eslint-config/src/rules/no-json-parse-json-stringify.test.ts +30 -17
  30. package/configs/eslint-config/src/rules/no-json-parse-json-stringify.ts +52 -49
  31. package/configs/eslint-config/src/rules/no-uncaught-json-parse.ts +43 -45
  32. package/configs/tsdown-config/package.json +10 -3
  33. package/configs/typescript-config/package.json +10 -1
  34. package/configs/typescript-config/tsconfig.common.json +3 -3
  35. package/configs/vitest-config/dist/base.mjs +1 -0
  36. package/configs/vitest-config/dist/frontend.mjs +1 -0
  37. package/configs/vitest-config/dist/node.mjs +1 -0
  38. package/configs/vitest-config/package.json +12 -0
  39. package/configs/vitest-config/src/base.ts +17 -29
  40. package/configs/vitest-config/src/index.ts +1 -0
  41. package/package.json +21 -13
  42. package/packages/@repo/constants/eslint.config.ts +4 -0
  43. package/packages/@repo/constants/package.json +16 -0
  44. package/packages/@repo/constants/src/index.ts +8 -8
  45. package/packages/@repo/db/eslint.config.ts +4 -0
  46. package/packages/@repo/db/package.json +16 -8
  47. package/packages/@repo/db/src/index.ts +26 -20
  48. package/packages/@repo/db/src/schema/common.ts +45 -49
  49. package/packages/@repo/env/eslint.config.ts +4 -0
  50. package/packages/@repo/env/package.json +39 -0
  51. package/packages/@repo/env/src/default-env.ts +12 -0
  52. package/packages/@repo/env/src/define-env.ts +70 -0
  53. package/packages/@repo/env/src/index.ts +2 -0
  54. package/packages/@repo/env/src/utils.ts +52 -0
  55. package/packages/@repo/env/tsconfig.json +7 -0
  56. package/packages/@repo/lib/eslint.config.ts +4 -0
  57. package/packages/@repo/lib/package.json +34 -34
  58. package/packages/@repo/lib/src/bucket-module/file-storage.ts +50 -49
  59. package/packages/@repo/lib/src/bucket-module/index.ts +3 -0
  60. package/packages/@repo/lib/src/bucket-module/s3-storage.ts +120 -114
  61. package/packages/@repo/lib/src/bucket-module/utils.ts +10 -11
  62. package/packages/@repo/lib/src/{cookie-module.ts → cookie-module/cookie-module.ts} +48 -42
  63. package/packages/@repo/lib/src/cookie-module/index.ts +1 -0
  64. package/packages/@repo/lib/src/extra/index.ts +1 -0
  65. package/packages/@repo/lib/src/extra/pagination-module.ts +35 -0
  66. package/packages/@repo/lib/src/{token-module.ts → extra/token-module.ts} +12 -5
  67. package/packages/@repo/lib/src/file-system-module/index.ts +170 -0
  68. package/packages/@repo/lib/src/{hashing-module.ts → hashing-module/index.ts} +9 -9
  69. package/packages/@repo/lib/src/index.ts +0 -26
  70. package/packages/@repo/lib/src/mail-module/index.ts +2 -0
  71. package/packages/@repo/lib/src/mail-module/mock.ts +8 -8
  72. package/packages/@repo/lib/src/mail-module/nodemailer.ts +17 -7
  73. package/packages/@repo/lib/src/notification-module/index.ts +1 -172
  74. package/packages/@repo/lib/src/notification-module/push-notification.ts +97 -90
  75. package/packages/@repo/lib/src/{oauth2-client.ts → oauth2-module/index.ts} +107 -109
  76. package/packages/@repo/lib/src/otp-module/index.ts +91 -0
  77. package/packages/@repo/lib/src/session-module/index.ts +113 -0
  78. package/packages/@repo/lib/src/utils.ts +43 -42
  79. package/packages/@repo/lib/src/validation-module/index.ts +242 -0
  80. package/packages/@repo/logger/eslint.config.ts +4 -0
  81. package/packages/@repo/logger/package.json +40 -0
  82. package/packages/@repo/logger/src/index.ts +2 -0
  83. package/packages/@repo/logger/src/logger.ts +72 -0
  84. package/packages/@repo/{lib/src/logger-module → logger/src}/memory-profiler.ts +64 -65
  85. package/packages/@repo/logger/tsconfig.json +7 -0
  86. package/packages/@repo/mail/eslint.config.ts +4 -0
  87. package/packages/@repo/mail/package.json +10 -3
  88. package/packages/@repo/mail/src/emails/admin/OtpEmail.tsx +169 -168
  89. package/packages/@repo/mail/src/index.ts +1 -2
  90. package/packages/@repo/mail/tsconfig.json +3 -3
  91. package/packages/@repo/redis/dist/index.d.mts +3 -0
  92. package/packages/@repo/redis/dist/index.mjs +5 -0
  93. package/packages/@repo/redis/dist/lib/redis-client.d.mts +7 -0
  94. package/packages/@repo/redis/dist/lib/redis-client.mjs +25 -0
  95. package/packages/@repo/redis/dist/lib/redis-client.mjs.map +1 -0
  96. package/packages/@repo/redis/dist/lib/redis-module.d.mts +5 -0
  97. package/packages/@repo/redis/dist/lib/redis-module.mjs +6 -0
  98. package/packages/@repo/redis/dist/lib/redis-module.mjs.map +1 -0
  99. package/packages/@repo/redis/eslint.config.ts +4 -0
  100. package/packages/@repo/redis/package.json +13 -10
  101. package/packages/@repo/redis/src/index.ts +2 -2
  102. package/packages/@repo/redis/src/lib/redis-client.ts +36 -23
  103. package/packages/@repo/redis/src/lib/redis-module.ts +69 -3
  104. package/packages/cli/dist/index.mjs +203 -0
  105. package/packages/cli/eslint.config.ts +4 -0
  106. package/packages/cli/package.json +44 -0
  107. package/packages/cli/tsconfig.json +12 -0
  108. package/packages/cli/tsdown.config.ts +17 -0
  109. package/packages/ui/components.json +0 -1
  110. package/packages/ui/eslint.config.ts +4 -0
  111. package/packages/ui/package.json +16 -3
  112. package/packages/ui/postcss.config.mjs +9 -9
  113. package/packages/ui/src/components/lib/utils.ts +53 -53
  114. package/packages/ui/src/components/ui/alert-dialog.tsx +118 -116
  115. package/packages/ui/src/components/ui/avatar.tsx +52 -53
  116. package/packages/ui/src/components/ui/badge.tsx +45 -46
  117. package/packages/ui/src/components/ui/breadcrumb.tsx +108 -109
  118. package/packages/ui/src/components/ui/card.tsx +91 -92
  119. package/packages/ui/src/components/ui/carousel.tsx +243 -243
  120. package/packages/ui/src/components/ui/checkbox.tsx +32 -32
  121. package/packages/ui/src/components/ui/command.tsx +144 -155
  122. package/packages/ui/src/components/ui/dialog.tsx +124 -127
  123. package/packages/ui/src/components/ui/form.tsx +166 -165
  124. package/packages/ui/src/components/ui/input-otp.tsx +74 -76
  125. package/packages/ui/src/components/ui/input.tsx +19 -21
  126. package/packages/ui/src/components/ui/multiple-select.tsx +4 -4
  127. package/packages/ui/src/{components/lucide.tsx → lucide.ts} +3 -3
  128. package/packages/ui/tailwind.config.ts +94 -94
  129. package/packages/ui/tsconfig.json +7 -1
  130. package/pnpm-workspace.yaml +41 -1
  131. package/turbo.json +20 -27
  132. package/apps/core-server/eslint.config.mjs +0 -47
  133. package/configs/eslint-config/src/rules/no-dynamic-import-template.ts +0 -32
  134. package/configs/eslint-config/src/rules/no-plain-errors.ts +0 -50
  135. package/configs/eslint-config/tsdown.config.ts +0 -11
  136. package/packages/@repo/constants/eslint.config.mjs +0 -21
  137. package/packages/@repo/db/eslint.config.mjs +0 -21
  138. package/packages/@repo/lib/eslint.config.mjs +0 -49
  139. package/packages/@repo/lib/src/command-module.ts +0 -77
  140. package/packages/@repo/lib/src/constants.ts +0 -3
  141. package/packages/@repo/lib/src/custom-type.ts +0 -54
  142. package/packages/@repo/lib/src/env.ts +0 -13
  143. package/packages/@repo/lib/src/file-system/index.ts +0 -90
  144. package/packages/@repo/lib/src/logger-module/log-config.ts +0 -16
  145. package/packages/@repo/lib/src/logger-module/logger.ts +0 -78
  146. package/packages/@repo/lib/src/mail-module/api.ts +0 -0
  147. package/packages/@repo/lib/src/otp-module.ts +0 -98
  148. package/packages/@repo/lib/src/pagination-module.ts +0 -49
  149. package/packages/@repo/lib/src/user-session.ts +0 -117
  150. package/packages/@repo/lib/src/validation-module.ts +0 -187
  151. package/packages/@repo/mail/tsconfig.build.json +0 -14
  152. package/packages/@repo/mail/tsdown.config.ts +0 -9
  153. package/packages/@repo/redis/eslint.config.mjs +0 -8
  154. package/packages/ui/eslint.config.mjs +0 -18
@@ -1,17 +1,20 @@
1
- import { ErrorResponse, logger } from "@repo/lib";
2
- import type { Request, Response } from "express";
1
+ import { ENV } from "@repo/env";
2
+ import { ErrorResponse } from "@repo/lib/error-handlers-module";
3
+ import { logger } from "@repo/logger";
4
+ import type { Request, Response } from "express";
3
5
 
4
6
  interface Error {
5
7
  message?: string;
6
8
  statusCode?: number;
7
9
  }
8
10
 
9
- export const errorMiddleware = (error: Error, req: Request, res: Response) => {
11
+ export const errorMiddleware = (error: Error, _req: Request, res: Response) => {
10
12
  error.message = error?.message ? error.message : "Internal Server Error";
11
13
  error.statusCode = error instanceof ErrorResponse ? error.statusCode : 500;
12
14
 
13
- if (process.env.NODE_ENV === "development" || error.statusCode === 500) {
15
+ if (ENV.NODE_ENV === "development" || error.statusCode === 500) {
14
16
  if (error.statusCode === 404) {
17
+ logger.warn(error);
15
18
  } else logger.error(error);
16
19
  }
17
20
 
@@ -1,21 +1,81 @@
1
- import { logger } from "@repo/lib";
2
- import morgan from "morgan";
3
- morgan.token("user", (req) => {
4
- if (req.user) {
5
- return `(USER: ${req.user.email} ID: ${req.user.id})`; // Convert to string if it's an object
6
- }
7
- return "(guest)"; // Return 'null' if `req.user` is not defined
8
- });
9
-
10
- const morganFormat = ":method~:url~:status~:response-time~:user";
11
- const loggerMiddleware = morgan(morganFormat, {
12
- stream: {
13
- write: (message) => {
14
- const [method, url, status, responseTime, user] = message.split("~");
15
- const log = `${method} ${url} ${status} ${responseTime}ms ${user}`;
16
- logger.info(log, { logType: "routeInfo" });
17
- },
18
- },
19
- });
20
-
21
- export { loggerMiddleware };
1
+ import { logger } from "@repo/logger";
2
+ import type { Request, Response } from "express";
3
+ import morgan from "morgan";
4
+
5
+ const jsonFormat = (tokens: morgan.TokenIndexer, req: Request, res: Response) => {
6
+ const method = tokens.method(req, res) || "-";
7
+ const url = tokens.url(req, res) || "-";
8
+ const status = Number(tokens.status(req, res) || 0);
9
+ const responseTime = tokens["response-time"](req, res) ?? "-";
10
+ const ip =
11
+ (req.ip as string) || (req.headers["x-forwarded-for"] as string) || req.socket?.remoteAddress;
12
+ const user = req.user ? { id: req.user.id, email: req.user.email } : null;
13
+
14
+ return JSON.stringify({
15
+ method,
16
+ url,
17
+ status,
18
+ responseTimeMs: responseTime,
19
+ user,
20
+ ip,
21
+ ts: new Date().toISOString(),
22
+ });
23
+ };
24
+
25
+ const safeLog = (
26
+ level: "info" | "warn" | "error",
27
+ message: string,
28
+ meta?: Record<string, unknown>
29
+ ) => {
30
+ const lg = logger;
31
+ if (typeof lg.log === "function") {
32
+ lg.log({ level, message, msg: message, ...meta });
33
+ return;
34
+ }
35
+ const fn = lg[level];
36
+ if (typeof fn === "function") {
37
+ fn(message, meta);
38
+ return;
39
+ }
40
+ // fallback
41
+ if (level && console[level]) {
42
+ console[level]?.(message, meta ?? {});
43
+ } else console.warn(message, meta ?? {});
44
+ };
45
+
46
+ const loggerStream = {
47
+ write: (message: string) => {
48
+ const trimmed = message.trim();
49
+ if (!trimmed) return;
50
+ try {
51
+ const meta = JSON.parse(trimmed) as {
52
+ method: string;
53
+ url: string;
54
+ status: number;
55
+ responseTimeMs: string | number;
56
+ user?: { id: string; email: string } | null;
57
+ ip?: string;
58
+ ts?: string;
59
+ };
60
+ const level = meta.status >= 500 ? "error" : meta.status >= 400 ? "warn" : "info";
61
+ safeLog(level, "http_request", {
62
+ ...meta,
63
+ logType: "routeInfo",
64
+ });
65
+ } catch (err) {
66
+ console.error(err);
67
+ safeLog("info", "http_request_parse_error", { raw: trimmed, logType: "routeInfo" });
68
+ }
69
+ },
70
+ };
71
+
72
+ const loggerMiddleware = morgan(jsonFormat as any, {
73
+ skip: (req: Request) => {
74
+ return (
75
+ req.path === "/health" || req.path.startsWith("/static") || req.path.startsWith("/_next")
76
+ );
77
+ },
78
+ stream: loggerStream,
79
+ });
80
+
81
+ export { loggerMiddleware };
@@ -1,14 +1,6 @@
1
- import { ErrorResponse } from "@repo/lib";
2
- import type { Request, Response, NextFunction } from "express";
3
- export function notFoundMiddleware(
4
- req: Request,
5
- res: Response,
6
- next: NextFunction,
7
- ) {
8
- res.status(404);
9
- const error = new ErrorResponse(
10
- `Route doesn't exist for ${req.method}: ${req.originalUrl}`,
11
- 404,
12
- );
13
- return next(error);
14
- }
1
+ import { ErrorResponse } from "@repo/lib/error-handlers-module";
2
+ import type { NextFunction, Request, Response } from "express";
3
+ export function notFoundMiddleware(req: Request, res: Response, next: NextFunction) {
4
+ res.status(404);
5
+ return next(new ErrorResponse(`Route doesn't exist for ${req.method}: ${req.originalUrl}`, 404));
6
+ }
@@ -1,24 +1,30 @@
1
- import express, { Router, type Request, type Response, type NextFunction } from "express";
2
- import path from "path";
3
-
4
- const distPath =
5
- process.env.NODE_ENV === "production" ? "../frontend" : "../../../web-client/dist/client";
6
-
7
- // __dirname is available at runtime because we compile to CommonJS
8
- const reactDistPath = path.resolve(__dirname, distPath);
9
-
10
- export const serveStatic = (): Router => {
11
- const router = Router();
12
-
13
- router.use(express.static(reactDistPath));
14
-
15
- router.get("*", (req: Request, res: Response, next: NextFunction) => {
16
- const accept = req.headers.accept ?? "";
17
- if (accept.includes("text/html")) {
18
- return res.sendFile(path.join(reactDistPath, "index.html"));
19
- }
20
- return next();
21
- });
22
-
23
- return router;
24
- };
1
+ import {
2
+ static as expressStatic,
3
+ type NextFunction,
4
+ type Request,
5
+ type Response,
6
+ Router,
7
+ } from "express";
8
+ import path from "path";
9
+ import { fileURLToPath } from "url";
10
+
11
+ const __filename = fileURLToPath(import.meta.url);
12
+ const __dirname = path.dirname(__filename);
13
+
14
+ const distPath = "./frontend";
15
+
16
+ const reactDistPath = path.resolve(__dirname, distPath);
17
+
18
+ export const serveStatic = () => {
19
+ const router = Router();
20
+ router.use(expressStatic(reactDistPath));
21
+ router.get("/*splat", (req: Request, res: Response, next: NextFunction) => {
22
+ const accept = req.headers.accept || "";
23
+ if (accept.includes("text/html")) {
24
+ return res.sendFile(path.join(reactDistPath, "index.html"));
25
+ }
26
+ return next();
27
+ });
28
+
29
+ return router;
30
+ };
@@ -1,7 +1,9 @@
1
- import { Router, static as expressStatic } from "express";
2
-
3
- export function createFilesRouter(): Router {
4
- const router = Router();
5
- router.get("/*", expressStatic("storage"));
6
- return router;
7
- }
1
+ import { static as expressStatic, Router } from "express";
2
+
3
+ export function createFilesRouter(): Router {
4
+ const router = Router();
5
+
6
+ router.get("/*splat", expressStatic("storage"));
7
+
8
+ return router;
9
+ }
@@ -1,36 +1,30 @@
1
- import { ping } from "@repo/constants";
2
- import cookieParser from "cookie-parser";
3
- import type { Request, Response } from "express";
4
- import express from "express";
5
- import fileUpload from "express-fileupload";
6
-
7
-
8
- import { corsMiddleware } from "@/middlewares/cors-middleware.ts";
9
- import { errorMiddleware } from "@/middlewares/error-middleware.ts";
10
- import { loggerMiddleware } from "@/middlewares/logger-middleware.ts";
11
- import { notFoundMiddleware } from "@/middlewares/notfound-middleware.ts";
12
- import { serveStatic } from "@/middlewares/serve-static.ts";
13
-
14
- import { createFilesRouter } from "./files/router.js";
15
-
16
- const app = express() as express.Express;
17
- app.use(loggerMiddleware);
18
- app.use(cookieParser());
19
- app.use(express.urlencoded({ extended: true }));
20
- app.use(express.json());
21
- app.use(fileUpload());
22
- app.use(corsMiddleware);
23
-
24
- app.use("/files", createFilesRouter());
25
-
26
- app.get("/test", (req: Request, res: Response) => {
27
- res.statusCode = 200;
28
- res.json("OK");
29
- return;
30
- });
31
- console.warn(ping);
32
- app.use(serveStatic());
33
- app.use(notFoundMiddleware);
34
- app.use(errorMiddleware);
35
-
36
- export { app };
1
+ import cookieParser from "cookie-parser";
2
+ import express, { json, urlencoded } from "express";
3
+ import fileUpload from "express-fileupload";
4
+
5
+ import { corsMiddleware } from "@/middlewares/cors-middleware.js";
6
+ import { errorMiddleware } from "@/middlewares/error-middleware.js";
7
+ import { loggerMiddleware } from "@/middlewares/logger-middleware.js";
8
+ import { notFoundMiddleware } from "@/middlewares/notfound-middleware.js";
9
+
10
+ import { createFilesRouter } from "./files/router.js";
11
+ const app = express();
12
+
13
+ app.use(loggerMiddleware);
14
+ app.use(cookieParser());
15
+ app.use(urlencoded({ extended: true }));
16
+ app.use(json());
17
+ app.use(fileUpload());
18
+ app.use(corsMiddleware);
19
+ app.use("/files", createFilesRouter());
20
+ app.get("/test", (_req, res) => {
21
+ res.statusCode = 200;
22
+ res.json("OK");
23
+ return;
24
+ });
25
+
26
+ // app.use(serveStatic());
27
+ app.use(notFoundMiddleware);
28
+ app.use(errorMiddleware);
29
+
30
+ export { app };
@@ -2,13 +2,14 @@ import { defineConfig } from "tsdown";
2
2
  import { baseConfig } from "tsdown-config";
3
3
 
4
4
  export default defineConfig({
5
- ...baseConfig,
5
+ ...baseConfig,
6
6
  platform: "node",
7
7
  external: ["sharp"],
8
- noExternal: [/(.*)/],
8
+ noExternal: [/(.*)/],
9
+ clean: false,
9
10
  outputOptions: {
10
11
  codeSplitting: false,
11
12
  preserveModules: false,
12
- legalComments: "none"
13
+ legalComments: "none",
13
14
  },
14
15
  });
package/biome.json CHANGED
@@ -1,62 +1,60 @@
1
1
  {
2
- "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json",
3
- "vcs": {
4
- "clientKind": "git",
5
- "enabled": true,
6
- "useIgnoreFile": true
7
- },
8
- "files": {
9
- "ignoreUnknown": false,
10
- "ignore": [
11
- "**/.turbo",
12
- "**/components.d.ts",
13
- "**/coverage",
14
- "**/dist",
15
- "**/build",
16
- "**/node_modules",
17
- "**/pnpm-lock.yaml",
18
- "**/package-lock.json",
19
- "**/yarn.lock",
20
- "**/CHANGELOG.md",
21
- "**/cl100k_base.json",
22
- "**/o200k_base.json"
23
- ]
24
- },
25
- "formatter": {
26
- "enabled": true,
27
- "formatWithErrors": false,
28
- "indentStyle": "tab",
29
- "indentWidth": 2,
30
- "lineEnding": "lf",
31
- "lineWidth": 100,
32
- "attributePosition": "auto"
33
- },
34
- "organizeImports": {
35
- "enabled": true
36
- },
37
- "linter": {
38
- "enabled": false
39
- },
40
- "javascript": {
41
- "parser": {
42
- "unsafeParameterDecoratorsEnabled": true
43
- },
44
- "formatter": {
45
- "jsxQuoteStyle": "double",
46
- "quoteProperties": "preserve",
47
- "trailingCommas": "es5",
48
- "semicolons": "always",
49
- "arrowParentheses": "asNeeded",
50
- "bracketSpacing": true,
51
- "bracketSameLine": false,
52
- "quoteStyle": "double",
53
- "attributePosition": "auto"
54
- }
55
- },
56
- "json": {
57
- "parser": {
58
- "allowComments": true,
59
- "allowTrailingCommas": false
60
- }
61
- }
2
+ "$schema": "https://biomejs.dev/schemas/2.3.13/schema.json",
3
+ "vcs": {
4
+ "clientKind": "git",
5
+ "enabled": true,
6
+ "useIgnoreFile": true
7
+ },
8
+ "files": {
9
+ "ignoreUnknown": false,
10
+ "includes": [
11
+ "**",
12
+ "!**/node_modules/**",
13
+ "!**/.turbo",
14
+ "!**/components.d.ts",
15
+ "!**/coverage",
16
+ "!**/dist",
17
+ "!**/build",
18
+ "!**/node_modules",
19
+ "!**/pnpm-lock.yaml",
20
+ "!**/package-lock.json",
21
+ "!**/yarn.lock",
22
+ "!**/CHANGELOG.md"
23
+ ]
24
+ },
25
+ "formatter": {
26
+ "enabled": true,
27
+ "formatWithErrors": false,
28
+ "indentStyle": "tab",
29
+ "indentWidth": 2,
30
+ "lineEnding": "lf",
31
+ "lineWidth": 100,
32
+ "attributePosition": "auto"
33
+ },
34
+ "assist": { "actions": { "source": { "organizeImports": "off" } } },
35
+ "linter": {
36
+ "enabled": false
37
+ },
38
+ "javascript": {
39
+ "parser": {
40
+ "unsafeParameterDecoratorsEnabled": true
41
+ },
42
+ "formatter": {
43
+ "jsxQuoteStyle": "double",
44
+ "quoteProperties": "preserve",
45
+ "trailingCommas": "es5",
46
+ "semicolons": "always",
47
+ "arrowParentheses": "asNeeded",
48
+ "bracketSpacing": true,
49
+ "bracketSameLine": false,
50
+ "quoteStyle": "double",
51
+ "attributePosition": "auto"
52
+ }
53
+ },
54
+ "json": {
55
+ "parser": {
56
+ "allowComments": true,
57
+ "allowTrailingCommas": false
58
+ }
59
+ }
62
60
  }
@@ -4,31 +4,18 @@
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "exports": {
7
- "./base": {
8
- "types": "./src/configs/base.ts",
9
- "import": "./dist/configs/base.mjs",
10
- "require": "./dist/configs/base.mjs"
11
- },
12
- "./frontend": {
13
- "types": "./src/configs/frontend.ts",
14
- "import": "./dist/configs/frontend.mjs",
15
- "require": "./dist/configs/frontend.mjs"
16
- },
17
- "./node": {
18
- "types": "./src/configs/node.ts",
19
- "import": "./dist/configs/node.mjs",
20
- "require": "./dist/configs/node.mjs"
21
- }
7
+ "./base": "./src/configs/base.ts",
8
+ "./frontend": "./src/configs/frontend.ts",
9
+ "./node": "./src/configs/node.ts",
10
+ "./extend": "./src/configs/extend.ts"
22
11
  },
23
12
  "scripts": {
24
- "config:build": "tsdown",
25
13
  "clean": "rimraf dist .turbo",
26
14
  "deep:clean": "rimraf node_modules dist .turbo",
27
15
  "typecheck": "tsc --noEmit",
28
16
  "format": "biome format --write .",
29
17
  "format:check": "biome ci .",
30
- "test": "vitest run",
31
- "test:dev": "vitest"
18
+ "test": "vitest run"
32
19
  },
33
20
  "dependencies": {
34
21
  "@eslint/compat": "^2.0.2",
@@ -53,8 +40,18 @@
53
40
  "@typescript-eslint/rule-tester": "^8.54.0",
54
41
  "@typescript-eslint/utils": "^8.0.0",
55
42
  "eslint": "catalog:",
56
- "tsdown-config": "workspace:*",
57
43
  "typescript-config": "workspace:*",
58
44
  "vitest-config": "workspace:*"
45
+ },
46
+ "startx": {
47
+ "tags": [
48
+ "eslint"
49
+ ],
50
+ "requiredDevDeps": [
51
+ "typescript-config"
52
+ ],
53
+ "ignore": [
54
+ "eslint-config"
55
+ ]
59
56
  }
60
57
  }