{ "folders": [+ { "name": "๐Ÿ—“๏ธ Documents", "path": "./Documnets" }, { "name": "๐Ÿ”ง Backend", "path": "./backend" }, { "name": "๐ŸŽจ Frontend", "path": "./frontend" }, { "name": "๐ŸŽฏ Root", "path": "./" } ], "settings": { // ======================================== // EDITOR SETTINGS // ======================================== "editor.fontSize": 14, "editor.lineHeight": 1.6, "editor.rulers": [80, 120], "editor.minimap.enabled": true, "editor.renderWhitespace": "boundary", "editor.bracketPairColorization.enabled": true, "editor.guides.bracketPairs": "active", "editor.smoothScrolling": true, "editor.cursorBlinking": "smooth", "editor.cursorSmoothCaretAnimation": "on", "editor.wordWrap": "on", "editor.linkedEditing": true, "editor.formatOnSave": true, "editor.formatOnPaste": true, "editor.suggestSelection": "first", "editor.tabSize": 2, "editor.detectIndentation": true, // ======================================== // DEFAULT FORMATTER // ======================================== "editor.defaultFormatter": "esbenp.prettier-vscode", "[javascript]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, "[javascriptreact]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, "[typescript]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, "[typescriptreact]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, "[json]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, "[jsonc]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, "[html]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, "[css]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, "[scss]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, "[markdown]": { "editor.defaultFormatter": "esbenp.prettier-vscode", "editor.wordWrap": "on" }, "[yaml]": { "editor.defaultFormatter": "redhat.vscode-yaml" }, "[dockerfile]": { "editor.defaultFormatter": "ms-azuretools.vscode-docker" }, // ======================================== // CODE ACTION ON SAVE // ======================================== "editor.codeActionsOnSave": { "source.fixAll.eslint": "explicit", "source.organizeImports": "explicit", "source.addMissingImports": "explicit" }, // ======================================== // PRETTIER SETTINGS // ======================================== "prettier.singleQuote": true, "prettier.semi": true, "prettier.tabWidth": 2, "prettier.useTabs": false, "prettier.trailingComma": "es5", "prettier.printWidth": 80, "prettier.arrowParens": "always", "prettier.endOfLine": "lf", "prettier.bracketSpacing": true, "prettier.jsxSingleQuote": false, // ======================================== // ESLINT SETTINGS // ======================================== "eslint.enable": true, "eslint.validate": [ "javascript", "javascriptreact", "typescript", "typescriptreact" ], "eslint.alwaysShowStatus": true, "eslint.format.enable": false, "eslint.lintTask.enable": true, "eslint.workingDirectories": [ "./backend", "./frontend" ], // ======================================== // PATH INTELLISENSE - เน„เธกเนˆเธกเธต src folder // ======================================== "path-intellisense.mappings": { // Backend paths "@backend": "${workspaceFolder:๐Ÿ”ง Backend (NestJS)}/src", "@backend/*": "${workspaceFolder:๐Ÿ”ง Backend (NestJS)}/src/*", "@modules": "${workspaceFolder:๐Ÿ”ง Backend (NestJS)}/src/modules", "@common": "${workspaceFolder:๐Ÿ”ง Backend (NestJS)}/src/common", "@config": "${workspaceFolder:๐Ÿ”ง Backend (NestJS)}/src/common/config", "@circulation": "${workspaceFolder:๐Ÿ”ง Backend (NestJS)}/src/modules/circulation", "@correspondence": "${workspaceFolder:๐Ÿ”ง Backend (NestJS)}/src/modules/correspondence", "@document-numbering": "${workspaceFolder:๐Ÿ”ง Backend (NestJS)}/src/modules/document-numbering", "@drawing": "${workspaceFolder:๐Ÿ”ง Backend (NestJS)}/src/modules/drawing", "@json-schema": "${workspaceFolder:๐Ÿ”ง Backend (NestJS)}/src/modules/json-schema", "@master": "${workspaceFolder:๐Ÿ”ง Backend (NestJS)}/src/modules/master", "@monitoring": "${workspaceFolder:๐Ÿ”ง Backend (NestJS)}/src/modules/monitoring", "@notification": "${workspaceFolder:๐Ÿ”ง Backend (NestJS)}/src/modules/notification", "@project": "${workspaceFolder:๐Ÿ”ง Backend (NestJS)}/src/modules/project", "@rfa": "${workspaceFolder:๐Ÿ”ง Backend (NestJS)}/src/modules/rfa", "@search": "${workspaceFolder:๐Ÿ”ง Backend (NestJS)}/src/modules/search", "@transmittal": "${workspaceFolder:๐Ÿ”ง Backend (NestJS)}/src/modules/transmittal", "@users": "${workspaceFolder:๐Ÿ”ง Backend (NestJS)}/src/modules/users", "@workflow-engine": "${workspaceFolder:๐Ÿ”ง Backend (NestJS)}/src/modules/workflow-engine", // Frontend paths (เน„เธกเนˆเธกเธต src) "@": "${workspaceFolder:๐ŸŽจ Frontend (React/Next.js)}/app", "@/*": "${workspaceFolder:๐ŸŽจ Frontend (React/Next.js)}/app/*", "@app": "${workspaceFolder:๐ŸŽจ Frontend (React/Next.js)}/app", "@components": "${workspaceFolder:๐ŸŽจ Frontend (React/Next.js)}/components", "@config": "${workspaceFolder:๐ŸŽจ Frontend (React/Next.js)}/config", "@lib": "${workspaceFolder:๐ŸŽจ Frontend (React/Next.js)}/lib", "@hooks": "${workspaceFolder:๐ŸŽจ Frontend (React/Next.js)}/app/hooks", "@utils": "${workspaceFolder:๐ŸŽจ Frontend (React/Next.js)}/utils", "@providers": "${workspaceFolder:๐ŸŽจ Frontend (React/Next.js)}/providers", "@public": "${workspaceFolder:๐ŸŽจ Frontend (React/Next.js)}/public", "@styles": "${workspaceFolder:๐ŸŽจ Frontend (React/Next.js)}/styles", "@types": "${workspaceFolder:๐ŸŽจ Frontend (React/Next.js)}/types", "@api": "${workspaceFolder:๐ŸŽจ Frontend (React/Next.js)}/app/api", }, "path-intellisense.autoSlashAfterDirectory": true, "path-intellisense.extensionOnImport": false, "path-intellisense.showHiddenFiles": false, // ======================================== // ERROR LENS // ======================================== "errorLens.enabled": true, "errorLens.enabledDiagnosticLevels": ["error", "warning"], "errorLens.padding": "0 1ch", "errorLens.messageTemplate": "$message", "errorLens.messageEnabled": true, // ======================================== // TAILWIND CSS // ======================================== "tailwindCSS.emmetCompletions": true, "tailwindCSS.colorDecorators": true, "tailwindCSS.suggestions": true, "tailwindCSS.includeLanguages": { "typescript": "javascript", "typescriptreact": "javascript" }, "tailwindCSS.experimental.classRegex": [ ["cva\\(([^)]*)\\)", "[\"'`]([^\"'`]*).*?[\"'`]"], ["cn\\(([^)]*)\\)", "[\"'`]([^\"'`]*).*?[\"'`]"], "class[Nn]ame\\s*=\\s*['\"`]([^'\"`]*)['\"`]" ], // เธฃเธฐเธšเธธเธ—เธตเนˆเธ•เธฑเน‰เธ‡เธ‚เธญเธ‡ tailwind.config (เธ–เน‰เธฒเธกเธต) "tailwindCSS.experimental.configFile": { //"backend/tailwind.config.js": "backend/**", "frontend/tailwind.config.ts": "frontend/**" }, // ======================================== // HEADWIND // ======================================== "headwind.runOnSave": true, // ======================================== // AUTO CLOSE/RENAME TAG // ======================================== "auto-close-tag.activationOnLanguage": [ "html", "xml", "javascript", "javascriptreact", "typescript", "typescriptreact" ], "auto-rename-tag.activationOnLanguage": [ "html", "xml", "javascript", "javascriptreact", "typescript", "typescriptreact" ], // ======================================== // BETTER COMMENTS // ======================================== "better-comments.tags": [ { "tag": "!", "color": "#FF2D00", "strikethrough": false, "backgroundColor": "transparent", "bold": true }, { "tag": "?", "color": "#3498DB", "strikethrough": false, "backgroundColor": "transparent" }, { "tag": "//", "color": "#474747", "strikethrough": true, "backgroundColor": "transparent" }, { "tag": "todo", "color": "#FF8C00", "strikethrough": false, "backgroundColor": "transparent" }, { "tag": "*", "color": "#98C379", "strikethrough": false, "backgroundColor": "transparent" } ], // ======================================== // TODO TREE // ======================================== "todo-tree.general.tags": [ "TODO", "FIXME", "BUG", "HACK", "NOTE", "XXX", "[ ]", "[x]" ], "todo-tree.highlights.enabled": true, "todo-tree.tree.showScanModeButton": true, "todo-tree.filtering.excludeGlobs": [ "**/node_modules", "**/dist", "**/build", "**/.next" ], "todo-tree.highlights.customHighlight": { "TODO": { "icon": "check", "iconColour": "#FF8C00", "foreground": "#FF8C00" }, "FIXME": { "icon": "alert", "iconColour": "#FF2D00", "foreground": "#FF2D00" }, "BUG": { "icon": "bug", "iconColour": "#FF2D00", "foreground": "#FF2D00" }, "NOTE": { "icon": "note", "iconColour": "#3498DB", "foreground": "#3498DB" }, "HACK": { "icon": "tools", "iconColour": "#FFA500", "foreground": "#FFA500" } }, // ======================================== // GITLENS // ======================================== "gitlens.statusBar.enabled": true, "gitlens.currentLine.enabled": true, "gitlens.currentLine.format": "${author}, ${agoOrDate}", "gitlens.codeLens.enabled": true, "gitlens.codeLens.authors.enabled": false, "gitlens.codeLens.recentChange.enabled": true, "gitlens.hovers.enabled": true, "gitlens.blame.format": "${author|10} ${agoOrDate|14-}", "gitlens.blame.highlight.enabled": false, "gitlens.views.repositories.location": "scm", "gitlens.views.fileHistory.location": "explorer", "gitlens.views.lineHistory.location": "explorer", // ======================================== // GIT // ======================================== "git.enabled": true, "git.autofetch": true, "git.autofetchPeriod": 180, "git.confirmSync": false, "git.enableSmartCommit": true, "git.postCommitCommand": "none", "git.untrackedChanges": "separate", "git.openRepositoryInParentFolders": "always", // ======================================== // IMPORT COST // ======================================== "importCost.showCalculatingDecoration": true, "importCost.largePackageSize": 100, "importCost.mediumPackageSize": 50, "importCost.smallPackageSize": 20, "importCost.largePackageColor": "#FF2D00", "importCost.mediumPackageColor": "#FF8C00", "importCost.smallPackageColor": "#98C379", // ======================================== // JAVASCRIPT/TYPESCRIPT // ======================================== "javascript.suggest.autoImports": true, "javascript.updateImportsOnFileMove.enabled": "always", "javascript.inlayHints.parameterNames.enabled": "all", "javascript.inlayHints.functionLikeReturnTypes.enabled": true, "javascript.inlayHints.variableTypes.enabled": true, "javascript.preferences.importModuleSpecifier": "relative", "typescript.suggest.autoImports": true, "typescript.updateImportsOnFileMove.enabled": "always", "typescript.inlayHints.parameterNames.enabled": "all", "typescript.inlayHints.functionLikeReturnTypes.enabled": true, "typescript.inlayHints.variableTypes.enabled": false, "typescript.inlayHints.propertyDeclarationTypes.enabled": true, "typescript.preferences.importModuleSpecifier": "relative", "typescript.tsdk": "node_modules/typescript/lib", // ======================================== // EMMET // ======================================== "emmet.includeLanguages": { "javascript": "javascriptreact", "typescript": "typescriptreact" }, "emmet.triggerExpansionOnTab": true, "emmet.showSuggestionsAsSnippets": true, // ======================================== // FILES // ======================================== //"files.autoSave": "onFocusChange", "files.trimTrailingWhitespace": true, "files.insertFinalNewline": true, "files.encoding": "utf8", "files.eol": "\n", "files.associations": { "*.css": "tailwindcss", ".env*": "dotenv", "*.md": "markdown" }, "files.exclude": { "**/.git": true, "**/.DS_Store": true, "**/node_modules": true, "**/.next": true, "**/dist": true, "**/build": true, "**/.turbo": true, "**/coverage": true, "**/.nyc_output": true, "**/*.log": true }, "files.watcherExclude": { "**/.git/objects/**": true, "**/.git/subtree-cache/**": true, "**/node_modules/**": true, "**/.next/**": true, "**/dist/**": true, "**/build/**": true, "**/.turbo/**": true }, // ======================================== // SEARCH // ======================================== "search.exclude": { "**/node_modules": true, "**/dist": true, "**/build": true, "**/.next": true, "**/.turbo": true, "**/coverage": true, "**/.nyc_output": true, "**/yarn.lock": true, "**/package-lock.json": true, "**/pnpm-lock.yaml": true, "**/*.log": true }, "search.followSymlinks": false, "search.useIgnoreFiles": true, "search.smartCase": true, // ======================================== // TERMINAL // ======================================== "terminal.integrated.fontSize": 14, "terminal.integrated.lineHeight": 1.2, "terminal.integrated.smoothScrolling": true, "terminal.integrated.cursorBlinking": true, "terminal.integrated.fontFamily": "MesloLGS NF, Consolas, monospace", "terminal.integrated.defaultProfile.windows": "PowerShell", "terminal.integrated.cwd": "${workspaceFolder}", // ======================================== // WORKBENCH // ======================================== "workbench.iconTheme": "material-icon-theme", "workbench.activityBar.location": "default", "workbench.tree.indent": 15, "workbench.list.smoothScrolling": true, "workbench.editor.enablePreview": false, "workbench.editor.limit.enabled": true, "workbench.editor.limit.value": 10, "workbench.startupEditor": "welcomePage", "workbench.colorCustomizations": { "[One Dark Pro]": { "activityBarBadge.background": "#FF8C00", "list.activeSelectionForeground": "#FF8C00", "list.inactiveSelectionForeground": "#FF8C00", "list.highlightForeground": "#FF8C00", "scrollbarSlider.activeBackground": "#FF8C0050", "editorSuggestWidget.highlightForeground": "#FF8C00", "textLink.foreground": "#FF8C00" } }, // ======================================== // EXPLORER // ======================================== "explorer.compactFolders": false, "explorer.confirmDelete": true, "explorer.confirmDragAndDrop": false, "explorer.sortOrder": "type", "explorer.fileNesting.enabled": true, "explorer.fileNesting.expand": false, "explorer.fileNesting.patterns": { "package.json": "package-lock.json, yarn.lock, pnpm-lock.yaml, .npmrc", "tsconfig.json": "tsconfig.*.json", ".env": ".env.*", "docker-compose.yml": "docker-compose.*.yml, Dockerfile*", "*.ts": "${capture}.test.ts, ${capture}.spec.ts", "*.tsx": "${capture}.test.tsx, ${capture}.spec.tsx, ${capture}.module.css", "*.js": "${capture}.test.js, ${capture}.spec.js", "*.jsx": "${capture}.test.jsx, ${capture}.spec.jsx" }, // ======================================== // BREADCRUMBS // ======================================== "breadcrumbs.enabled": true, "breadcrumbs.filePath": "on", "breadcrumbs.symbolPath": "on", // ======================================== // JEST // ======================================== "jest.autoRun": "off", "jest.showCoverageOnLoad": false, "jest.rootPath": "backend", // ======================================== // DOCKER // ======================================== "docker.languageserver.formatter.ignoreMultilineInstructions": true, "docker.showStartPage": false, // ======================================== // YAML // ======================================== "yaml.schemas": { "https://json.schemastore.org/github-workflow.json": ".github/workflows/*.{yml,yaml}", "https://json.schemastore.org/github-action.json": "action.{yml,yaml}", "https://json.schemastore.org/prettierrc.json": ".prettierrc.{yml,yaml}", "https://json.schemastore.org/docker-compose.json": "docker-compose*.{yml,yaml}" }, "yaml.format.enable": true, "yaml.format.singleQuote": false, "yaml.format.bracketSpacing": true, "yaml.validate": true, "yaml.hover": true, "yaml.completion": true, // ======================================== // REST CLIENT // ======================================== "rest-client.timeoutinmilliseconds": 30000, "rest-client.showResponseInDifferentTab": true, "rest-client.environmentVariables": { "$shared": { "apiUrl": "http://localhost:3000" }, "development": { "apiUrl": "http://localhost:3000" }, "production": { "apiUrl": "https://lcbp3.nap-dms.work" } }, // ======================================== // CONSOLE NINJA // ======================================== "console-ninja.featureSet": "Community", "console-ninja.toolsToEnableSupportAutomaticallyFor": { "live-server-extension": true, "live-preview-extension": true }, // ======================================== // MATERIAL ICON THEME // ======================================== "material-icon-theme.folders.theme": "specific", "material-icon-theme.folders.color": "#90a4ae", "material-icon-theme.files.associations": { "*.env.local": "Tune", "*.env.development": "Tune", "*.env.production": "Tune", "docker-compose.*.yml": "Docker" }, "material-icon-theme.folders.associations": { "hooks": "Custom", "utils": "Helper", "lib": "Library", "components": "Components", "api": "Api", "dto": "Class", "entities": "Database", "modules": "Folder-Controllers", "common": "Shared", "config": "Config" }, // ======================================== // NPM INTELLISENSE // ======================================== "npm-intellisense.importES6": true, "npm-intellisense.importQuotes": "'", "npm-intellisense.importLinebreak": ";\n", "npm-intellisense.importDeclarationType": "const", // ======================================== // PERFORMANCE // ======================================== "files.maxMemoryForLargeFilesMB": 4096, "telemetry.telemetryLevel": "off", "security.workspace.trust.untrustedFiles": "open", "extensions.ignoreRecommendations": false, // ======================================== // DEBUGGING // ======================================== "debug.console.fontSize": 13, "debug.console.lineHeight": 1.2, "debug.internalConsoleOptions": "openOnSessionStart", "debug.openDebug": "openOnDebugBreak", "debug.showBreakpointsInOverviewRuler": true }, // ======================================== // LAUNCH CONFIGURATIONS // ======================================== "launch": { "version": "0.2.0", "configurations": [ { "name": "๐Ÿ”ง Debug Backend", "type": "node", "request": "launch", "runtimeExecutable": "npm", "runtimeArgs": ["run", "start:debug"], "cwd": "${workspaceFolder:๐Ÿ”ง Backend}", "console": "integratedTerminal", "internalConsoleOptions": "neverOpen", "skipFiles": ["/**"], "sourceMaps": true, "restart": true }, { "name": "๐ŸŽจ Debug Frontend", "type": "chrome", "request": "launch", "url": "http://localhost:3000", "webRoot": "${workspaceFolder:๐ŸŽจ Frontend}", "sourceMapPathOverrides": { "webpack:///./*": "${webRoot}/*" } }, { "name": "๐Ÿงช Debug Jest Tests (Backend)", "type": "node", "request": "launch", "runtimeExecutable": "npm", "runtimeArgs": ["run", "test:debug"], "cwd": "${workspaceFolder:๐Ÿ”ง Backend}", "console": "integratedTerminal", "internalConsoleOptions": "neverOpen" }, { "name": "๐Ÿงช Debug Jest Tests (Frontend)", "type": "node", "request": "launch", "runtimeExecutable": "npm", "runtimeArgs": ["run", "test:debug"], "cwd": "${workspaceFolder:๐ŸŽจ Frontend}", "console": "integratedTerminal", "internalConsoleOptions": "neverOpen" } ], "compounds": [ { "name": "๐Ÿš€ Debug Full Stack", "configurations": ["๐Ÿ”ง Debug Backend", "๐ŸŽจ Debug Frontend"], "stopAll": true } ] }, // ======================================== // TASKS // ======================================== "tasks": { "version": "2.0.0", "tasks": [ { "label": "๐Ÿ”ง Start Backend Dev", "type": "npm", "script": "start:dev", "path": "backend/", "problemMatcher": [], "presentation": { "reveal": "always", "panel": "dedicated", "group": "dev" } }, { "label": "๐ŸŽจ Start Frontend Dev", "type": "npm", "script": "dev", "path": "frontend/", "problemMatcher": [], "presentation": { "reveal": "always", "panel": "dedicated", "group": "dev" } }, { "label": "๐Ÿš€ Start Full Stack", "dependsOn": ["๐Ÿ”ง Start Backend Dev", "๐ŸŽจ Start Frontend Dev"], "problemMatcher": [] }, { "label": "๐Ÿงช Run Backend Tests", "type": "npm", "script": "test", "path": "backend/", "problemMatcher": [] }, { "label": "๐Ÿงช Run Frontend Tests", "type": "npm", "script": "test", "path": "frontend/", "problemMatcher": [] }, { "label": "๐Ÿ—๏ธ Build Backend", "type": "npm", "script": "build", "path": "backend/", "problemMatcher": ["$tsc"], "group": { "kind": "build", "isDefault": false } }, { "label": "๐Ÿ—๏ธ Build Frontend", "type": "npm", "script": "build", "path": "frontend/", "problemMatcher": ["$tsc"], "group": { "kind": "build", "isDefault": false } }, { "label": "๐Ÿ” Lint Backend", "type": "npm", "script": "lint", "path": "backend/", "problemMatcher": ["$eslint-stylish"] }, { "label": "๐Ÿ” Lint Frontend", "type": "npm", "script": "lint", "path": "frontend/", "problemMatcher": ["$eslint-stylish"] }, { "label": "๐Ÿณ Docker Compose Up", "type": "shell", "command": "docker-compose up -d", "problemMatcher": [] }, { "label": "๐Ÿณ Docker Compose Down", "type": "shell", "command": "docker-compose down", "problemMatcher": [] } ] }, // ======================================== // EXTENSIONS // ======================================== "extensions": { "recommendations": [ "dbaeumer.vscode-eslint", "esbenp.prettier-vscode", "usernamehw.errorlens", "yoavbls.pretty-typescript-errors", "wix.vscode-import-cost", "aaron-bond.better-comments", "gruntfuggly.todo-tree", "ashinzekene.nestjs", "dsznajder.es7-react-js-snippets", "orta.vscode-jest", "bradlc.vscode-tailwindcss", "heybourn.headwind", "prisma.prisma", "rangav.vscode-thunder-client", "humao.rest-client", "formulahendry.auto-close-tag", "formulahendry.auto-rename-tag", "ms-azuretools.vscode-docker", "mtxr.sqltools", "redhat.vscode-yaml", "mikestead.dotenv", "editorconfig.editorconfig", "eamodio.gitlens", "mhutchie.git-graph", "vivaxy.vscode-conventional-commits", "christian-kohler.path-intellisense", "christian-kohler.npm-intellisense", "pranaygp.vscode-css-peek", "alefragnani.bookmarks", "chakrounanas.turbo-console-log", "wallabyjs.console-ninja", "pkief.material-icon-theme", "github.copilot" ] } }