-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path.eslintcache
1 lines (1 loc) · 29.6 KB
/
.eslintcache
1
[{"/Users/julius/Dev/stocks/next-env.d.ts":"1","/Users/julius/Dev/stocks/src/components/autoAnimate.tsx":"2","/Users/julius/Dev/stocks/src/components/stockChart.tsx":"3","/Users/julius/Dev/stocks/src/pages/_app.tsx":"4","/Users/julius/Dev/stocks/src/pages/api/auth/[...nextauth].ts":"5","/Users/julius/Dev/stocks/src/pages/api/trpc/[trpc].ts":"6","/Users/julius/Dev/stocks/src/pages/auth/signin.tsx":"7","/Users/julius/Dev/stocks/src/pages/index.tsx":"8","/Users/julius/Dev/stocks/src/pages/profile.tsx":"9","/Users/julius/Dev/stocks/src/pages/stocks.tsx":"10","/Users/julius/Dev/stocks/src/pages/transactions.tsx":"11","/Users/julius/Dev/stocks/src/server/common/getServerSession.ts":"12","/Users/julius/Dev/stocks/src/server/db/client.ts":"13","/Users/julius/Dev/stocks/src/server/trpc/context.ts":"14","/Users/julius/Dev/stocks/src/server/trpc/router/index.ts":"15","/Users/julius/Dev/stocks/src/server/trpc/router/possesion/index.ts":"16","/Users/julius/Dev/stocks/src/server/trpc/router/stock/d/complementDbData.ts":"17","/Users/julius/Dev/stocks/src/server/trpc/router/stock/d/getDataFromDb.ts":"18","/Users/julius/Dev/stocks/src/server/trpc/router/stock/index.ts":"19","/Users/julius/Dev/stocks/src/server/trpc/router/transaction/index.ts":"20","/Users/julius/Dev/stocks/src/server/trpc/router/user.ts":"21","/Users/julius/Dev/stocks/src/types/next-auth.d.ts":"22","/Users/julius/Dev/stocks/src/utils/trpc.ts":"23","/Users/julius/Dev/stocks/src/components/navbar.tsx":"24","/Users/julius/Dev/stocks/src/components/nextLink.tsx":"25","/Users/julius/Dev/stocks/src/server/common/gSSPPageProtection.ts":"26","/Users/julius/Dev/stocks/src/server/trpc/trpc.ts":"27","/Users/julius/Dev/stocks/src/utils/dateFnsHelpers.ts":"28","/Users/julius/Dev/stocks/src/utils/zodForm.ts":"29","/Users/julius/Dev/stocks/src/server/trpc/validators.ts":"30"},{"hash":"31","results":"32","hashOfConfig":"33"},{"hash":"34","results":"35","hashOfConfig":"33"},{"hash":"36","results":"37","hashOfConfig":"33"},{"hash":"38","results":"39","hashOfConfig":"33"},{"hash":"40","results":"41","hashOfConfig":"33"},{"hash":"42","results":"43","hashOfConfig":"33"},{"hash":"44","results":"45","hashOfConfig":"33"},{"hash":"46","results":"47","hashOfConfig":"33"},{"hash":"48","results":"49","hashOfConfig":"33"},{"hash":"50","results":"51","hashOfConfig":"33"},{"hash":"52","results":"53","hashOfConfig":"33"},{"hash":"54","results":"55","hashOfConfig":"33"},{"hash":"56","results":"57","hashOfConfig":"33"},{"hash":"58","results":"59","hashOfConfig":"33"},{"hash":"60","results":"61","hashOfConfig":"33"},{"hash":"62","results":"63","hashOfConfig":"33"},{"hash":"64","results":"65","hashOfConfig":"33"},{"hash":"66","results":"67","hashOfConfig":"33"},{"hash":"68","results":"69","hashOfConfig":"33"},{"hash":"70","results":"71","hashOfConfig":"33"},{"hash":"72","results":"73","hashOfConfig":"33"},{"hash":"74","results":"75","hashOfConfig":"33"},{"hash":"76","results":"77","hashOfConfig":"33"},{"hash":"78","results":"79","hashOfConfig":"33"},{"hash":"80","results":"81","hashOfConfig":"33"},{"hash":"82","results":"83","hashOfConfig":"33"},{"hash":"84","results":"85","hashOfConfig":"33"},{"hash":"86","results":"87","hashOfConfig":"33"},{"hash":"88","results":"89","hashOfConfig":"33"},{"hash":"90","results":"91","hashOfConfig":"33"},"3cf36e94213e85dc306ec5f3f3760ecc",{"filePath":"92","messages":"93","suppressedMessages":"94","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"187bsqu","497936ae0f628fc7eb9d61d7a87e632d",{"filePath":"95","messages":"96","suppressedMessages":"97","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"6ce47549dc27ab522f6415797f9a92b1",{"filePath":"98","messages":"99","suppressedMessages":"100","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"47fa8e9bd95509e7d6389bd1aeb09e21",{"filePath":"101","messages":"102","suppressedMessages":"103","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"60652fffd76dda4f77ca367671410006",{"filePath":"104","messages":"105","suppressedMessages":"106","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"bfa688b116fb20ef1ee063333571fb50",{"filePath":"107","messages":"108","suppressedMessages":"109","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"c1d2caecc803de2bdae13037541e1f88",{"filePath":"110","messages":"111","suppressedMessages":"112","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"675b2bc8a893454bed354fb99611a8bc",{"filePath":"113","messages":"114","suppressedMessages":"115","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"d48f19bad6c75fe58fb2a25a1e1f1810",{"filePath":"116","messages":"117","suppressedMessages":"118","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"f6f9b4eca3801ad5fa042b64ac1c2e07",{"filePath":"119","messages":"120","suppressedMessages":"121","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"60e4c9ea53caf73b655bc5dce11d48ac",{"filePath":"122","messages":"123","suppressedMessages":"124","errorCount":10,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":10,"fixableWarningCount":0,"source":"125"},"794c566442f7b56cc2b7d648c82d33da",{"filePath":"126","messages":"127","suppressedMessages":"128","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"3d5ffb4e234f3b2c39174985679c1e34",{"filePath":"129","messages":"130","suppressedMessages":"131","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"af81349be46419ebf5aac559f33480f2",{"filePath":"132","messages":"133","suppressedMessages":"134","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"c8fb3545062f38b17623060cdb6c1d5e",{"filePath":"135","messages":"136","suppressedMessages":"137","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"8645d9e20fadfa732959324f973e7351",{"filePath":"138","messages":"139","suppressedMessages":"140","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"c10bf2870896e4ce0e7c3fa95ac0f4e4",{"filePath":"141","messages":"142","suppressedMessages":"143","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"dbc7ad767e1fcb65b2052e577937db8a",{"filePath":"144","messages":"145","suppressedMessages":"146","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"b7b37f180bdc6e424fe4edb8394fe0d1",{"filePath":"147","messages":"148","suppressedMessages":"149","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"fa9b9c9f7988640d05a186ca0b313baa",{"filePath":"150","messages":"151","suppressedMessages":"152","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"153"},"51bf49daf45ad12b40aa7944af569252",{"filePath":"154","messages":"155","suppressedMessages":"156","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"68f4f8d0613f7bcb70958f750547d22e",{"filePath":"157","messages":"158","suppressedMessages":"159","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"7569a1294778d62d004aea7fcff29f99",{"filePath":"160","messages":"161","suppressedMessages":"162","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"059cfb4b4af67d3ea90e20b7e4767a14",{"filePath":"163","messages":"164","suppressedMessages":"165","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"7e7a3efcd29d8fa669c702a38e30d2df",{"filePath":"166","messages":"167","suppressedMessages":"168","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"6bf6916fb316251831aa9d843409b51c",{"filePath":"169","messages":"170","suppressedMessages":"171","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"06fd82f7e346338c4a9fd2c85c9444da",{"filePath":"172","messages":"173","suppressedMessages":"174","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"1f413d81c21b60accf4eec1a7f3808d6",{"filePath":"175","messages":"176","suppressedMessages":"177","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"4ab301e0d2f954162196f6178d59f99c",{"filePath":"178","messages":"179","suppressedMessages":"180","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"0ca2bb74f753ed5fca6d445224c2a9eb",{"filePath":"181","messages":"182","suppressedMessages":"183","errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"184"},"/Users/julius/Dev/stocks/next-env.d.ts",[],[],"/Users/julius/Dev/stocks/src/components/autoAnimate.tsx",[],[],"/Users/julius/Dev/stocks/src/components/stockChart.tsx",[],["185","186"],"/Users/julius/Dev/stocks/src/pages/_app.tsx",[],[],"/Users/julius/Dev/stocks/src/pages/api/auth/[...nextauth].ts",[],[],"/Users/julius/Dev/stocks/src/pages/api/trpc/[trpc].ts",[],[],"/Users/julius/Dev/stocks/src/pages/auth/signin.tsx",[],[],"/Users/julius/Dev/stocks/src/pages/index.tsx",[],[],"/Users/julius/Dev/stocks/src/pages/profile.tsx",[],[],"/Users/julius/Dev/stocks/src/pages/stocks.tsx",[],["187"],"/Users/julius/Dev/stocks/src/pages/transactions.tsx",["188","189","190","191","192","193","194","195","196","197"],[],"import { XIcon } from \"@heroicons/react/outline\";\nimport {\n createColumnHelper,\n flexRender,\n getCoreRowModel,\n useReactTable,\n} from \"@tanstack/react-table\";\nimport { format } from \"date-fns\";\nimport { NextPage } from \"next\";\nimport React from \"react\";\n\nimport { AutoAnimate } from \"~/components/autoAnimate\";\nimport { protectPage } from \"~/server/common/gSSPPageProtection\";\nimport { createTransactionValidator } from \"~/server/trpc/validators\";\nimport { useZodForm } from \"~/utils/zodForm\";\n\nimport { type InferTRPC, trpc } from \"../utils/trpc\";\n\nconst TransactionsPage: NextPage = () => {\n const sectionStyle = \"grid card bg-base-200 rounded-box place-items-center\";\n return (\n <div className=\"flex flex-col w-full mt-10\">\n <div className={sectionStyle}>\n <CreateTransaction />\n </div>\n <div className=\"divider\" />\n <div className={sectionStyle}>\n <TransactionsListing />\n </div>\n </div>\n );\n};\n\nexport const CreateTransaction: React.FC = () => {\n const {\n register,\n handleSubmit,\n reset,\n formState: { errors },\n } = useZodForm({\n validator: createTransactionValidator,\n });\n\n const utils = trpc.useContext();\n const createTransactionMutation = trpc.transactions.create.useMutation({\n onSuccess() {\n void utils.transactions.getByAuthedUser.invalidate();\n reset(); // reset form fields\n },\n onSettled() {\n setIsSubmitting(false);\n },\n });\n\n const [isSubmitting, setIsSubmitting] = React.useState(false);\n\n return (\n <div className=\"flex flex-col w-full p-8\">\n <h1 className=\"text-2xl font-bold\">Add new transaction</h1>\n <p className=\"text-error\">{createTransactionMutation.error?.message}</p>\n <form\n onSubmit={\n void handleSubmit((data, e) => {\n setIsSubmitting(true);\n e?.preventDefault();\n createTransactionMutation.mutate(data);\n })\n }\n >\n {/** TRANSACTED AT */}\n <div className=\"my-4 input-group input-group-vertical\">\n <span className=\"bg-base-300\">Transacted at</span>\n <input\n {...register(\"transactedAt\", {\n setValueAs: (v: string) =>\n v.length === 0 ? new Date() : new Date(v),\n })}\n placeholder=\"Enter a Date-parsable string. Leave blank for Date.now()\"\n className=\"input input-bordered placeholder:italic\"\n />\n\n {errors.transactedAt && (\n <span className=\"py-1 font-bold text-error\">\n {errors.transactedAt.message}\n </span>\n )}\n </div>\n\n <div className=\"flex flex-col lg:flex-row lg:gap-2 \">\n {/** TRANSACTION TYPE */}\n <div className=\"my-4 input-group input-group-vertical\">\n <span className=\"bg-base-300\">Type</span>\n <select {...register(\"type\")} className=\"select select-bordered\">\n <option value=\"BUY\">Buy</option>\n <option value=\"SELL\">Sell</option>\n </select>\n </div>\n\n {/** STOCK */}\n <div className=\"my-4 input-group input-group-vertical\">\n <span className=\"bg-base-300\">Stock</span>\n <input\n {...register(\"stock\")}\n placeholder=\"Enter the stock's symbol ticker, e.g. AAPL\"\n className=\"input input-bordered placeholder:italic\"\n />\n {errors.stock && (\n <span className=\"py-1 font-bold text-error\">\n {errors.stock.message}\n </span>\n )}\n </div>\n </div>\n\n <div className=\"flex flex-col lg:flex-row lg:gap-2 \">\n {/** UNITS */}\n <div className=\"my-4 input-group input-group-vertical\">\n <span className=\"bg-base-300\">Units</span>\n <input\n {...register(\"units\", { valueAsNumber: true })}\n placeholder=\"Enter the number of stock transacted\"\n className=\"input input-bordered placeholder:italic\"\n />\n {errors.units && (\n <span className=\"py-1 font-bold text-error\">\n {errors.units.message}\n </span>\n )}\n </div>\n\n {/** PRICE PER UNIT */}\n <div className=\"my-4 input-group input-group-vertical\">\n <span className=\"bg-base-300\">Price per unit</span>\n <input\n {...register(\"pricePerUnit\", { valueAsNumber: true })}\n placeholder=\"Enter the price per stock\"\n className=\"input input-bordered placeholder:italic\"\n />\n {errors.pricePerUnit && (\n <span className=\"py-1 font-bold text-error\">\n {errors.pricePerUnit.message}\n </span>\n )}\n </div>\n </div>\n\n {/** SUBMIT FORM */}\n <button\n className={`btn btn-primary w-full mt-4 ${isSubmitting && \"loading\"}`}\n >\n {isSubmitting ? \"Submitting...\" : \"Submit\"}\n </button>\n </form>\n </div>\n );\n};\n\n/**\n * Lists all available transactions\n * for the currently authenticated user\n */\ntype Transaction =\n InferTRPC[\"transactions\"][\"getByAuthedUser\"][\"output\"][number];\nconst columnHelper = createColumnHelper<Transaction>();\n\nexport const TransactionsListing: React.FC = () => {\n const utils = trpc.useContext();\n const { data, isLoading } = trpc.transactions.getByAuthedUser.useQuery();\n const deleteMutation = trpc.transactions.delete.useMutation({\n async onMutate(deletedTransaction) {\n // Optimistic update, delete the transaction from the list immediately\n await utils.transactions.getByAuthedUser.cancel();\n const prevData = utils.transactions.getByAuthedUser.getData();\n utils.transactions.getByAuthedUser.setData((old) =>\n old?.filter((t) => t.id !== deletedTransaction.id),\n );\n return { prevData };\n },\n // Invalidate the query after the mutation is complete to sync with server\n onSettled() {\n void utils.transactions.getByAuthedUser.invalidate();\n },\n });\n\n const columns = React.useMemo(\n () => [\n columnHelper.accessor(\"type\", {\n cell: (t) => t.getValue(),\n header: () => <span>Type</span>,\n }),\n columnHelper.accessor(\"transactedAt\", {\n cell: (t) => format(t.getValue(), \"yyyy-MM-dd HH:mm:ss\"),\n header: () => <span>Transacted at</span>,\n }),\n columnHelper.accessor(\"stock\", {\n cell: (t) => t.getValue().toUpperCase(),\n header: () => <span>Stock</span>,\n }),\n columnHelper.accessor(\"units\", {\n cell: (t) => t.getValue(),\n header: () => <span>Units</span>,\n }),\n columnHelper.accessor(\"pricePerUnit\", {\n cell: (t) => `$${t.getValue()}`,\n header: () => <span>PPU</span>,\n }),\n columnHelper.display({\n id: \"actions\",\n cell: (t) => {\n const id = t.row.original.id;\n return (\n <button\n className=\"btn btn-ghost h-6\"\n onClick={() => deleteMutation.mutate({ id })}\n >\n <XIcon className=\"h-6 w-6 stroke-error\" />\n </button>\n );\n },\n }),\n ],\n [deleteMutation],\n );\n\n const table = useReactTable({\n data: data ?? ([] as Transaction[]),\n columns,\n getCoreRowModel: getCoreRowModel(),\n });\n\n if (isLoading) {\n return <div>Loading transactions...</div>;\n }\n if (!data) {\n return <div>No transactions...</div>;\n }\n return (\n <div className=\"w-full p-8\">\n <h1 className=\"text-2xl font-bold pb-4\">Transactions</h1>\n\n <table className=\"table table-compact w-full\">\n {/** table head */}\n <thead>\n {table.getHeaderGroups().map((headerGroup) => (\n <tr key={headerGroup.id}>\n {headerGroup.headers.map((header) => (\n <th key={header.id} className=\"bg-base-300\">\n {header.isPlaceholder\n ? null\n : flexRender(\n header.column.columnDef.header,\n header.getContext(),\n )}\n </th>\n ))}\n </tr>\n ))}\n </thead>\n {/** table body */}\n <AutoAnimate as=\"tbody\">\n {table.getRowModel().rows.map((row) => (\n <tr key={row.id} className=\"hover\">\n {row.getVisibleCells().map((cell) => (\n <td key={cell.id}>\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </td>\n ))}\n </tr>\n ))}\n </AutoAnimate>\n </table>\n </div>\n );\n};\n\nexport const getServerSideProps = protectPage;\nexport default TransactionsPage;\n","/Users/julius/Dev/stocks/src/server/common/getServerSession.ts",[],[],"/Users/julius/Dev/stocks/src/server/db/client.ts",[],["198"],"/Users/julius/Dev/stocks/src/server/trpc/context.ts",[],[],"/Users/julius/Dev/stocks/src/server/trpc/router/index.ts",[],[],"/Users/julius/Dev/stocks/src/server/trpc/router/possesion/index.ts",[],[],"/Users/julius/Dev/stocks/src/server/trpc/router/stock/d/complementDbData.ts",[],["199","200","201","202","203","204","205"],"/Users/julius/Dev/stocks/src/server/trpc/router/stock/d/getDataFromDb.ts",[],[],"/Users/julius/Dev/stocks/src/server/trpc/router/stock/index.ts",[],[],"/Users/julius/Dev/stocks/src/server/trpc/router/transaction/index.ts",["206"],[],"import { TRPCError } from \"@trpc/server\";\nimport { z } from \"zod\";\n\nimport { authedProcedure, createRouter } from \"../../trpc\";\n\nimport { createTransactionValidator } from \"~/server/trpc/validators\";\n\nexport const transactionRouter = createRouter({\n getByAuthedUser: authedProcedure\n .input(z.object({ ticker: z.string() }).nullish())\n .query(async ({ ctx, input }) => {\n if (input) {\n return await ctx.prisma.transaction.findMany({\n where: { stock: input.ticker },\n orderBy: {\n transactedAt: \"desc\",\n },\n });\n }\n return await ctx.prisma.transaction.findMany({\n orderBy: {\n transactedAt: \"desc\",\n },\n });\n }),\n delete: authedProcedure\n .input(\n z.object({\n id: z.string().uuid(),\n }),\n )\n .mutation(async ({ input, ctx }) => {\n return await ctx.prisma.transaction.delete({\n where: {\n id: input.id,\n },\n });\n }),\n create: authedProcedure\n .input(createTransactionValidator)\n .mutation(async ({ input, ctx }) => {\n const currentAmount = await ctx.prisma.possesion.findFirst({\n select: { amount: true, id: true },\n where: {\n userId: ctx.session.user.id,\n stock: input.stock,\n },\n });\n\n console.log(currentAmount);\n\n if (input.type === \"SELL\") {\n if (!currentAmount) {\n throw new TRPCError({\n code: \"BAD_REQUEST\",\n message: \"You don't own this stock and therefore can't sell any.\",\n });\n }\n if (currentAmount.amount < input.units) {\n throw new TRPCError({\n code: \"BAD_REQUEST\",\n message: `You don't own ${input.units} of this stock.`,\n });\n }\n await ctx.prisma.possesion.update({\n where: {\n id: currentAmount.id,\n },\n data: {\n amount: currentAmount.amount - input.units,\n },\n });\n } else {\n if (currentAmount) {\n await ctx.prisma.possesion.update({\n where: {\n id: currentAmount.id,\n },\n data: {\n amount: currentAmount.amount + input.units,\n },\n });\n } else {\n await ctx.prisma.possesion.create({\n data: {\n userId: ctx.session.user.id,\n stock: input.stock,\n amount: input.units,\n },\n });\n }\n }\n\n return await ctx.prisma.transaction.create({\n data: { ...input, userId: ctx.session.user.id },\n });\n }),\n});\n","/Users/julius/Dev/stocks/src/server/trpc/router/user.ts",[],[],"/Users/julius/Dev/stocks/src/types/next-auth.d.ts",[],[],"/Users/julius/Dev/stocks/src/utils/trpc.ts",[],[],"/Users/julius/Dev/stocks/src/components/navbar.tsx",[],[],"/Users/julius/Dev/stocks/src/components/nextLink.tsx",[],[],"/Users/julius/Dev/stocks/src/server/common/gSSPPageProtection.ts",[],[],"/Users/julius/Dev/stocks/src/server/trpc/trpc.ts",[],[],"/Users/julius/Dev/stocks/src/utils/dateFnsHelpers.ts",[],[],"/Users/julius/Dev/stocks/src/utils/zodForm.ts",[],[],"/Users/julius/Dev/stocks/src/server/trpc/validators.ts",["207"],[],"import { isDate } from \"date-fns\";\nimport { z } from \"zod\";\nimport { getNextBusinessDay } from \"~/utils/dateFnsHelpers\";\n\nexport const createTransactionValidator = z.object({\n transactedAt: z.preprocess((dateString) => {\n const asDate = new Date(dateString as string);\n if (!isDate(asDate)) {\n return false;\n }\n return getNextBusinessDay(asDate);\n }, z.date()),\n stock: z.string().min(1).max(6),\n units: z.number().int().positive(),\n pricePerUnit: z.number().positive(),\n type: z.enum([\"BUY\", \"SELL\"]),\n});\n",{"ruleId":"208","severity":1,"message":"209","line":59,"column":33,"nodeType":"210","messageId":"211","endLine":59,"endColumn":36,"suggestions":"212","suppressions":"213"},{"ruleId":"208","severity":1,"message":"209","line":59,"column":48,"nodeType":"210","messageId":"211","endLine":59,"endColumn":51,"suggestions":"214","suppressions":"215"},{"ruleId":"208","severity":1,"message":"209","line":25,"column":14,"nodeType":"210","messageId":"211","endLine":25,"endColumn":17,"suggestions":"216","suppressions":"217"},{"ruleId":"218","severity":2,"message":"219","line":22,"column":21,"nodeType":null,"messageId":"220","endLine":22,"endColumn":47,"fix":"221"},{"ruleId":"218","severity":2,"message":"222","line":58,"column":26,"nodeType":null,"messageId":"220","endLine":58,"endColumn":40,"fix":"223"},{"ruleId":"218","severity":2,"message":"224","line":71,"column":25,"nodeType":null,"messageId":"220","endLine":71,"endColumn":62,"fix":"225"},{"ruleId":"218","severity":2,"message":"224","line":91,"column":27,"nodeType":null,"messageId":"220","endLine":91,"endColumn":64,"fix":"226"},{"ruleId":"218","severity":2,"message":"224","line":100,"column":27,"nodeType":null,"messageId":"220","endLine":100,"endColumn":64,"fix":"227"},{"ruleId":"218","severity":2,"message":"224","line":117,"column":27,"nodeType":null,"messageId":"220","endLine":117,"endColumn":64,"fix":"228"},{"ruleId":"218","severity":2,"message":"224","line":132,"column":27,"nodeType":null,"messageId":"220","endLine":132,"endColumn":64,"fix":"229"},{"ruleId":"218","severity":2,"message":"230","line":149,"column":39,"nodeType":null,"messageId":"220","endLine":149,"endColumn":50,"fix":"231"},{"ruleId":"218","severity":2,"message":"232","line":239,"column":22,"nodeType":null,"messageId":"220","endLine":239,"endColumn":45,"fix":"233"},{"ruleId":"218","severity":2,"message":"234","line":241,"column":30,"nodeType":null,"messageId":"220","endLine":241,"endColumn":44,"fix":"235"},{"ruleId":"236","severity":2,"message":"237","line":8,"column":3,"nodeType":"238","messageId":"239","endLine":8,"endColumn":40,"suppressions":"240"},{"ruleId":"241","severity":1,"message":"242","line":28,"column":22,"nodeType":"243","messageId":"244","endLine":28,"endColumn":28,"suppressions":"245"},{"ruleId":"241","severity":1,"message":"242","line":29,"column":13,"nodeType":"243","messageId":"244","endLine":29,"endColumn":19,"suppressions":"246"},{"ruleId":"241","severity":1,"message":"242","line":30,"column":13,"nodeType":"243","messageId":"244","endLine":30,"endColumn":19,"suppressions":"247"},{"ruleId":"241","severity":1,"message":"242","line":31,"column":16,"nodeType":"243","messageId":"244","endLine":31,"endColumn":23,"suppressions":"248"},{"ruleId":"241","severity":1,"message":"242","line":32,"column":12,"nodeType":"243","messageId":"244","endLine":32,"endColumn":18,"suppressions":"249"},{"ruleId":"241","severity":1,"message":"242","line":33,"column":14,"nodeType":"243","messageId":"244","endLine":33,"endColumn":20,"suppressions":"250"},{"ruleId":"241","severity":1,"message":"242","line":34,"column":15,"nodeType":"243","messageId":"244","endLine":34,"endColumn":21,"suppressions":"251"},{"ruleId":"252","severity":2,"message":"253","line":1,"column":1,"nodeType":null,"messageId":"254","endLine":6,"endColumn":71,"fix":"255"},{"ruleId":"252","severity":2,"message":"253","line":1,"column":1,"nodeType":null,"messageId":"254","endLine":3,"endColumn":61,"fix":"256"},"@typescript-eslint/no-explicit-any","Unexpected any. Specify a different type.","TSAnyKeyword","unexpectedAny",["257","258"],["259"],["260","261"],["262"],["263","264"],["265"],"prettier/prettier","Replace `flex·flex-col·w-full·mt-10` with `mt-10·flex·w-full·flex-col`","replace",{"range":"266","text":"267"},"Replace `flex-col·w-ful` with `w-full·flex-co`",{"range":"268","text":"269"},"Replace `my-4·input-group·input-group-vertical` with `input-group·input-group-vertical·my-4`",{"range":"270","text":"271"},{"range":"272","text":"271"},{"range":"273","text":"271"},{"range":"274","text":"271"},{"range":"275","text":"271"},"Replace `w-full·mt-4` with `mt-4·w-full`",{"range":"276","text":"277"},"Replace `text-2xl·font-bold·pb-4` with `pb-4·text-2xl·font-bold`",{"range":"278","text":"279"},"Replace `·table-compact` with `-compact·table`",{"range":"280","text":"281"},"no-var","Unexpected var, use let or const instead.","VariableDeclaration","unexpectedVar",["282"],"@typescript-eslint/no-non-null-assertion","Forbidden non-null assertion.","TSNonNullExpression","noNonNull",["283"],["284"],["285"],["286"],["287"],["288"],["289"],"simple-import-sort/imports","Run autofix to sort these imports!","sort",{"range":"290","text":"291"},{"range":"292","text":"293"},{"messageId":"294","fix":"295","desc":"296"},{"messageId":"297","fix":"298","desc":"299"},{"kind":"300","justification":"301"},{"messageId":"294","fix":"302","desc":"296"},{"messageId":"297","fix":"303","desc":"299"},{"kind":"300","justification":"301"},{"messageId":"294","fix":"304","desc":"296"},{"messageId":"297","fix":"305","desc":"299"},{"kind":"300","justification":"301"},[707,733],"mt-10 flex w-full flex-col",[1547,1561],"w-full flex-co",[1994,2031],"input-group input-group-vertical my-4",[2742,2779],[3101,3138],[3716,3753],[4282,4319],[4905,4916],"mt-4 w-full",[7587,7610],"pb-4 text-2xl font-bold",[7660,7674],"-compact table",{"kind":"300","justification":"301"},{"kind":"300","justification":"301"},{"kind":"300","justification":"301"},{"kind":"300","justification":"301"},{"kind":"300","justification":"301"},{"kind":"300","justification":"301"},{"kind":"300","justification":"301"},{"kind":"300","justification":"301"},[0,199],"import { TRPCError } from \"@trpc/server\";\nimport { z } from \"zod\";\n\nimport { createTransactionValidator } from \"~/server/trpc/validators\";\n\nimport { authedProcedure, createRouter } from \"../../trpc\";",[0,120],"import { isDate } from \"date-fns\";\nimport { z } from \"zod\";\n\nimport { getNextBusinessDay } from \"~/utils/dateFnsHelpers\";","suggestUnknown",{"range":"306","text":"307"},"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct.","suggestNever",{"range":"306","text":"308"},"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of.","directive","",{"range":"309","text":"307"},{"range":"309","text":"308"},{"range":"310","text":"307"},{"range":"310","text":"308"},[1426,1429],"unknown","never",[1441,1444],[701,704]]