wcz-test 6.24.14 → 6.25.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 (39) hide show
  1. package/dist/ApprovalStatus-lESbUD_x.js +1 -0
  2. package/dist/ApprovalStatus-lESbUD_x.js.map +1 -0
  3. package/dist/DialogsContext-2Yy6yhzQ.js +1 -0
  4. package/dist/DialogsContext-2Yy6yhzQ.js.map +1 -0
  5. package/dist/DialogsHooks-DWkC9zAf.js +1 -0
  6. package/dist/DialogsHooks-DWkC9zAf.js.map +1 -0
  7. package/dist/FileHooks-CltSzAf8.js +300 -0
  8. package/dist/FileHooks-CltSzAf8.js.map +1 -0
  9. package/dist/FileMeta-Bzeo3ie9.js +1 -0
  10. package/dist/FileMeta-Bzeo3ie9.js.map +1 -0
  11. package/dist/RouterListItemButton-C_SG0uka.js +1 -0
  12. package/dist/RouterListItemButton-C_SG0uka.js.map +1 -0
  13. package/dist/components.js +2 -1
  14. package/dist/components.js.map +1 -0
  15. package/dist/env-4ZoUrNqp.js +1 -0
  16. package/dist/env-4ZoUrNqp.js.map +1 -0
  17. package/dist/hooks.js +1 -0
  18. package/dist/hooks.js.map +1 -0
  19. package/dist/index.js +334 -331
  20. package/dist/index.js.map +1 -0
  21. package/dist/models.js +1 -0
  22. package/dist/models.js.map +1 -0
  23. package/dist/queries.js +2 -1
  24. package/dist/queries.js.map +1 -0
  25. package/dist/queryClient--EvGPhnh.js +1 -0
  26. package/dist/queryClient--EvGPhnh.js.map +1 -0
  27. package/dist/server.js +1 -0
  28. package/dist/server.js.map +1 -0
  29. package/dist/session-7yb0BETM.js +1 -0
  30. package/dist/session-7yb0BETM.js.map +1 -0
  31. package/dist/utils-CZraUjBd.js +1 -0
  32. package/dist/utils-CZraUjBd.js.map +1 -0
  33. package/dist/utils.js +1 -0
  34. package/dist/utils.js.map +1 -0
  35. package/dist/vite.js +12 -11
  36. package/dist/vite.js.map +1 -0
  37. package/package.json +9 -10
  38. package/dist/FileHooks-kGkVKOf9.js +0 -2694
  39. package/dist/_commonjsHelpers-DaMA6jEr.js +0 -8
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queries.js","sources":["../src/queries/PeopleSoftHooks.ts","../src/queries/ApprovalHooks.ts"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\r\nimport type { DefinedInitialDataOptions } from \"@tanstack/react-query\";\r\nimport type { Department } from \"~/models/peoplesoft/Department\";\r\nimport type { Employee } from \"~/models/peoplesoft/Employee\";\r\nimport { httpClient } from \"~/lib/utils\";\r\n\r\nconst QUERY_KEY = \"ps\";\r\nconst DAY = 1000 * 60 * 60 * 24;\r\n\r\ntype OptionalId = string | undefined | null;\r\n\r\ntype BaseEmployeeArrayQueryOptions = Omit<DefinedInitialDataOptions<Array<Employee>>, \"queryKey\" | \"queryFn\" | \"staleTime\" | \"gcTime\" | \"refetchOnWindowFocus\" | \"initialData\">;\r\ntype BaseEmployeeQueryOptions = Omit<DefinedInitialDataOptions<Employee>, \"queryKey\" | \"queryFn\" | \"staleTime\" | \"gcTime\" | \"refetchOnWindowFocus\" | \"initialData\">;\r\ntype BaseDepartmentArrayQueryOptions = Omit<DefinedInitialDataOptions<Array<Department>>, \"queryKey\" | \"queryFn\" | \"staleTime\" | \"gcTime\" | \"refetchOnWindowFocus\" | \"initialData\">;\r\ntype BaseDepartmentQueryOptions = Omit<DefinedInitialDataOptions<Department>, \"queryKey\" | \"queryFn\" | \"staleTime\" | \"gcTime\" | \"refetchOnWindowFocus\" | \"initialData\">;\r\n\r\nexport const useGetPeopleSoftEmployeesSearch = (searchTerm: string, options?: BaseEmployeeArrayQueryOptions) => {\r\n return useQuery<Array<Employee>>({\r\n ...options,\r\n queryKey: [QUERY_KEY, \"employee\", \"search\", searchTerm],\r\n queryFn: ({ signal }) => httpClient.request<Array<Employee>>({\r\n url: `/${QUERY_KEY}/v1/employee?search=${searchTerm}`,\r\n method: \"GET\",\r\n signal,\r\n }).then(request => request.data),\r\n staleTime: DAY,\r\n gcTime: DAY,\r\n refetchOnWindowFocus: false,\r\n });\r\n};\r\n\r\nexport const useGetPeopleSoftEmployees = (options?: BaseEmployeeArrayQueryOptions) => {\r\n return useQuery<Array<Employee>>({\r\n ...options,\r\n queryKey: [QUERY_KEY, \"employee\"],\r\n queryFn: ({ signal }) => httpClient.request<Array<Employee>>({\r\n url: `/${QUERY_KEY}/v1/employee/all`,\r\n method: \"GET\",\r\n signal,\r\n }).then(request => request.data),\r\n staleTime: DAY,\r\n gcTime: DAY,\r\n refetchOnWindowFocus: false,\r\n });\r\n};\r\n\r\nexport const useGetPeopleSoftActiveEmployees = (options?: BaseEmployeeArrayQueryOptions) => {\r\n return useQuery<Array<Employee>>({\r\n ...options,\r\n queryKey: [QUERY_KEY, \"employee\", \"active\"],\r\n queryFn: ({ signal }) => httpClient.request<Array<Employee>>({\r\n url: `/${QUERY_KEY}/v1/employee/active`,\r\n method: \"GET\",\r\n signal,\r\n }).then(request => request.data),\r\n staleTime: DAY,\r\n gcTime: DAY,\r\n refetchOnWindowFocus: false,\r\n });\r\n};\r\n\r\nexport const useGetPeopleSoftEmployeeById = (employeeId: OptionalId, options?: BaseEmployeeQueryOptions) => {\r\n return useQuery<Employee>({\r\n ...options,\r\n queryKey: [QUERY_KEY, \"employee\", employeeId],\r\n queryFn: ({ signal }) => httpClient.request<Employee>({\r\n url: `/${QUERY_KEY}/v1/employee/${employeeId}`,\r\n method: \"GET\",\r\n signal,\r\n }).then(request => request.data),\r\n staleTime: DAY,\r\n gcTime: DAY,\r\n refetchOnWindowFocus: false,\r\n });\r\n};\r\n\r\nexport const useGetPeopleSoftPreviousEmployeeIds = (options?: BaseEmployeeArrayQueryOptions) => {\r\n return useQuery<Array<Employee>>({\r\n ...options,\r\n queryKey: [QUERY_KEY, \"employee\", \"previousIds\"],\r\n queryFn: ({ signal }) => httpClient.request<Array<Employee>>({\r\n url: `/${QUERY_KEY}/v1/employee/previousIds`,\r\n method: \"GET\",\r\n signal,\r\n }).then(request => request.data),\r\n staleTime: DAY,\r\n gcTime: DAY,\r\n refetchOnWindowFocus: false,\r\n });\r\n};\r\n\r\nexport const useGetPeopleSoftEmployeeSupervisor = (employeeId: OptionalId, options?: BaseEmployeeQueryOptions) => {\r\n return useQuery<Employee>({\r\n ...options,\r\n queryKey: [QUERY_KEY, \"employee\", employeeId, \"supervisor\"],\r\n queryFn: ({ signal }) => httpClient.request<Employee>({\r\n url: `/${QUERY_KEY}/v1/employee/${employeeId}/supervisor`,\r\n method: \"GET\",\r\n signal,\r\n }).then(request => request.data),\r\n staleTime: DAY,\r\n gcTime: DAY,\r\n refetchOnWindowFocus: false,\r\n });\r\n};\r\n\r\nexport const useGetPeopleSoftEmployeeSubordinates = (employeeId: OptionalId, options?: BaseEmployeeArrayQueryOptions) => {\r\n return useQuery<Array<Employee>>({\r\n ...options,\r\n queryKey: [QUERY_KEY, \"employee\", employeeId, \"subordinates\"],\r\n queryFn: ({ signal }) => httpClient.request<Array<Employee>>({\r\n url: `/${QUERY_KEY}/v1/employee/${employeeId}/subordinates`,\r\n method: \"GET\",\r\n signal,\r\n }).then(request => request.data),\r\n staleTime: DAY,\r\n gcTime: DAY,\r\n refetchOnWindowFocus: false,\r\n });\r\n};\r\n\r\nexport const useGetPeopleSoftEmployeeManager = (employeeId: OptionalId, options?: BaseEmployeeQueryOptions) => {\r\n return useQuery<Employee>({\r\n ...options,\r\n queryKey: [QUERY_KEY, \"employee\", employeeId, \"manager\"],\r\n queryFn: ({ signal }) => httpClient.request<Employee>({\r\n url: `/${QUERY_KEY}/v1/employee/${employeeId}/manager`,\r\n method: \"GET\",\r\n signal,\r\n }).then(request => request.data),\r\n staleTime: DAY,\r\n gcTime: DAY,\r\n refetchOnWindowFocus: false,\r\n });\r\n};\r\n\r\nexport const useGetPeopleSoftEmployeeGeneralManager = (employeeId: OptionalId, options?: BaseEmployeeQueryOptions) => {\r\n return useQuery<Employee>({\r\n ...options,\r\n queryKey: [QUERY_KEY, \"employee\", employeeId, \"generalManager\"],\r\n queryFn: ({ signal }) => httpClient.request<Employee>({\r\n url: `/${QUERY_KEY}/v1/employee/${employeeId}/generalManager`,\r\n method: \"GET\",\r\n signal,\r\n }).then(request => request.data),\r\n staleTime: DAY,\r\n gcTime: DAY,\r\n refetchOnWindowFocus: false,\r\n });\r\n};\r\n\r\nexport const useGetPeopleSoftDepartments = (options?: BaseDepartmentArrayQueryOptions) => {\r\n return useQuery<Array<Department>>({\r\n ...options,\r\n queryKey: [QUERY_KEY, \"department\"],\r\n queryFn: ({ signal }) => httpClient.request<Array<Department>>({\r\n url: `/${QUERY_KEY}/v1/department/all`,\r\n method: \"GET\",\r\n signal,\r\n }).then(request => request.data),\r\n staleTime: DAY,\r\n gcTime: DAY,\r\n refetchOnWindowFocus: false,\r\n });\r\n};\r\n\r\nexport const useGetPeopleSoftDepartmentById = (departmentId: OptionalId, options?: BaseDepartmentQueryOptions) => {\r\n return useQuery<Department>({\r\n ...options,\r\n queryKey: [QUERY_KEY, \"department\", departmentId],\r\n queryFn: ({ signal }) => httpClient.request<Department>({\r\n url: `/${QUERY_KEY}/v1/department/${departmentId}`,\r\n method: \"GET\",\r\n signal,\r\n }).then(request => request.data),\r\n staleTime: DAY,\r\n gcTime: DAY,\r\n refetchOnWindowFocus: false,\r\n });\r\n};\r\n\r\nexport const useGetPeopleSoftDepartmentManager = (departmentId: OptionalId, options?: BaseEmployeeQueryOptions) => {\r\n return useQuery<Employee>({\r\n ...options,\r\n queryKey: [QUERY_KEY, \"department\", departmentId, \"manager\"],\r\n queryFn: ({ signal }) => httpClient.request<Employee>({\r\n url: `/${QUERY_KEY}/v1/department/${departmentId}/manager`,\r\n method: \"GET\",\r\n signal,\r\n }).then(request => request.data),\r\n staleTime: DAY,\r\n gcTime: DAY,\r\n refetchOnWindowFocus: false,\r\n });\r\n};\r\n\r\nexport const useGetPeopleSoftDepartmentEmployees = (departmentId: OptionalId, options?: BaseEmployeeArrayQueryOptions) => {\r\n return useQuery<Array<Employee>>({\r\n ...options,\r\n queryKey: [QUERY_KEY, \"department\", departmentId, \"employees\"],\r\n queryFn: ({ signal }) => httpClient.request<Array<Employee>>({\r\n url: `/${QUERY_KEY}/v1/department/${departmentId}/employees`,\r\n method: \"GET\",\r\n signal,\r\n }).then(request => request.data),\r\n staleTime: DAY,\r\n gcTime: DAY,\r\n refetchOnWindowFocus: false,\r\n });\r\n};\r\n\r\nexport const useGetPeopleSoftCompanyGeneralManager = (companyCode: OptionalId, options?: BaseEmployeeQueryOptions) => {\r\n return useQuery<Employee>({\r\n ...options,\r\n queryKey: [QUERY_KEY, \"company\", companyCode, \"generalManager\"],\r\n queryFn: ({ signal }) => httpClient.request<Employee>({\r\n url: `/${QUERY_KEY}/v1/company/${companyCode}/generalManager`,\r\n method: \"GET\",\r\n signal,\r\n }).then(request => request.data),\r\n staleTime: DAY,\r\n gcTime: DAY,\r\n refetchOnWindowFocus: false,\r\n });\r\n};\r\n","import { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\r\nimport z from \"zod\";\r\nimport type { DefinedInitialDataOptions, UseMutationOptions } from \"@tanstack/react-query\";\r\nimport type { Approval, ApproveApproval, CancelApproval, CreateApproval, ResubmitApproval, WithdrawApproval } from \"~/models/approval/Approval\";\r\nimport { clientEnv } from \"~/env\";\r\nimport { httpClient, toKebabCase } from \"~/lib/utils\";\r\nimport { ApprovalStatus } from \"~/models/approval/ApprovalStatus\";\r\nimport { ApprovalStepResult } from \"~/models/approval/ApprovalStepResult\";\r\n\r\nconst ROUTE = \"approval\";\r\nconst APP_NAME = toKebabCase(clientEnv.VITE_APP_TITLE);\r\n\r\ntype UseGetApprovalsOptions = Omit<DefinedInitialDataOptions<Array<Approval>>, \"queryKey\" | \"queryFn\" | \"initialData\">;\r\ntype UseGetApprovalOptions = Omit<DefinedInitialDataOptions<Approval>, \"queryKey\" | \"queryFn\" | \"initialData\">;\r\ntype UseCreateApprovalOptions = Omit<UseMutationOptions<Approval, Error, CreateApproval>, \"mutationFn\" | \"onSettled\">;\r\ntype UseApproveApprovalOptions = Omit<UseMutationOptions<Approval, Error, ApproveApproval>, \"mutationFn\" | \"onSettled\">;\r\ntype UseResubmitApprovalOptions = Omit<UseMutationOptions<Approval, Error, ResubmitApproval>, \"mutationFn\" | \"onSettled\">;\r\ntype UseWithdrawApprovalOptions = Omit<UseMutationOptions<void, Error, WithdrawApproval>, \"mutationFn\" | \"onSettled\">;\r\ntype UseCancelApprovalOptions = Omit<UseMutationOptions<void, Error, CancelApproval>, \"mutationFn\" | \"onSettled\">;\r\n\r\nconst GetApprovalsParamsSchema = z.object({\r\n appName: z.string().min(1).max(255).default(APP_NAME).optional(),\r\n status: ApprovalStatus.optional(),\r\n approverEmployeeId: z.string().min(1).max(20).optional(),\r\n stepResult: ApprovalStepResult.optional()\r\n});\r\n\r\nexport type GetApprovalsParams = z.infer<typeof GetApprovalsParamsSchema>;\r\n\r\nexport const useGetApprovals = (params?: GetApprovalsParams, options?: UseGetApprovalsOptions) => {\r\n const queryParams = new URLSearchParams();\r\n\r\n queryParams.append(\"applicationName\", params?.appName ?? APP_NAME);\r\n if (params?.status) queryParams.append(\"status\", params.status.toString());\r\n if (params?.approverEmployeeId) queryParams.append(\"approverEmployeeId\", params.approverEmployeeId);\r\n if (params?.stepResult) queryParams.append(\"stepResult\", params.stepResult.toString());\r\n\r\n return useQuery<Array<Approval>>({\r\n ...options,\r\n queryKey: [ROUTE, params],\r\n queryFn: ({ signal }) => httpClient.request<Array<Approval>>({\r\n url: `/${ROUTE}/Requests/Requests?${queryParams.toString()}`,\r\n method: \"GET\",\r\n signal,\r\n }).then(request => request.data),\r\n });\r\n};\r\n\r\nexport const useGetApproval = (id: string, options?: UseGetApprovalOptions) => useQuery<Approval>({\r\n ...options,\r\n queryKey: [ROUTE, id],\r\n queryFn: ({ signal }) => httpClient.request<Approval>({\r\n url: `/${ROUTE}/Requests/${id}`,\r\n method: \"GET\",\r\n signal,\r\n }).then(request => request.data),\r\n});\r\n\r\nexport const useCreateApproval = (options?: UseCreateApprovalOptions) => {\r\n const queryClient = useQueryClient();\r\n\r\n return useMutation<Approval, Error, CreateApproval>({\r\n ...options,\r\n mutationFn: data => httpClient.request<Approval>({\r\n url: `/${ROUTE}/Requests`,\r\n method: \"POST\",\r\n data\r\n }).then(request => request.data),\r\n onSettled: () => queryClient.invalidateQueries({ queryKey: [ROUTE], exact: false })\r\n });\r\n};\r\n\r\nexport const useApproveApproval = (options?: UseApproveApprovalOptions) => {\r\n const queryClient = useQueryClient();\r\n\r\n return useMutation<Approval, Error, ApproveApproval>({\r\n ...options,\r\n mutationFn: data => httpClient.request<Approval>({\r\n url: `/${ROUTE}/Requests/${data.id}/single-approval`,\r\n method: \"POST\",\r\n data\r\n }).then(request => request.data),\r\n onSettled: () => queryClient.invalidateQueries({ queryKey: [ROUTE], exact: false })\r\n });\r\n};\r\n\r\nexport const useResubmitApproval = (options?: UseResubmitApprovalOptions) => {\r\n const queryClient = useQueryClient();\r\n\r\n return useMutation<Approval, Error, ResubmitApproval>({\r\n ...options,\r\n mutationFn: data => httpClient.request<Approval>({\r\n url: `/${ROUTE}/Requests/${data.id}/resubmit`,\r\n method: \"POST\",\r\n data\r\n }).then(request => request.data),\r\n onSettled: () => queryClient.invalidateQueries({ queryKey: [ROUTE], exact: false })\r\n });\r\n};\r\n\r\nexport const useWithdrawApproval = (options?: UseWithdrawApprovalOptions) => {\r\n const queryClient = useQueryClient();\r\n\r\n return useMutation<void, Error, WithdrawApproval>({\r\n ...options,\r\n mutationFn: data => httpClient.request<void>({\r\n url: `/${ROUTE}/Requests/${data.id}/withdraw`,\r\n method: \"POST\",\r\n data\r\n }).then(request => request.data),\r\n onSettled: () => queryClient.invalidateQueries({ queryKey: [ROUTE], exact: false })\r\n });\r\n};\r\n\r\nexport const useCancelApproval = (options?: UseCancelApprovalOptions) => {\r\n const queryClient = useQueryClient();\r\n\r\n return useMutation<void, Error, CancelApproval>({\r\n ...options,\r\n mutationFn: data => httpClient.request<void>({\r\n url: `/${ROUTE}/Requests/${data.id}/cancel`,\r\n method: \"POST\",\r\n data\r\n }).then(request => request.data),\r\n onSettled: () => queryClient.invalidateQueries({ queryKey: [ROUTE], exact: false })\r\n });\r\n};\r\n"],"names":["QUERY_KEY","DAY","useGetPeopleSoftEmployeesSearch","searchTerm","options","$","_c","t0","t1","t2","signal","httpClient","request","url","method","then","_temp","queryKey","queryFn","staleTime","gcTime","refetchOnWindowFocus","useQuery","useGetPeopleSoftEmployees","Symbol","for","_temp3","useGetPeopleSoftActiveEmployees","_temp5","useGetPeopleSoftEmployeeById","employeeId","_temp6","useGetPeopleSoftPreviousEmployeeIds","_temp8","useGetPeopleSoftEmployeeSupervisor","_temp9","useGetPeopleSoftEmployeeSubordinates","_temp0","useGetPeopleSoftEmployeeManager","_temp1","useGetPeopleSoftEmployeeGeneralManager","_temp10","useGetPeopleSoftDepartments","_temp12","useGetPeopleSoftDepartmentById","departmentId","_temp13","useGetPeopleSoftDepartmentManager","_temp14","useGetPeopleSoftDepartmentEmployees","_temp15","useGetPeopleSoftCompanyGeneralManager","companyCode","_temp16","data","_temp2","_temp4","_temp7","_temp11","ROUTE","APP_NAME","toKebabCase","clientEnv","VITE_APP_TITLE","z","object","appName","string","min","max","default","optional","status","ApprovalStatus","approverEmployeeId","stepResult","ApprovalStepResult","useGetApprovals","params","queryParams","URLSearchParams","append","toString","useGetApproval","id","useCreateApproval","queryClient","useQueryClient","invalidateQueries","exact","mutationFn","onSettled","useMutation","useApproveApproval","useResubmitApproval","useWithdrawApproval","useCancelApproval"],"mappings":"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"}
@@ -3,3 +3,4 @@ const t = new e();
3
3
  export {
4
4
  t as q
5
5
  };
6
+ //# sourceMappingURL=queryClient--EvGPhnh.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryClient--EvGPhnh.js","sources":["../src/lib/queryClient.ts"],"sourcesContent":["import { QueryClient } from \"@tanstack/react-query\";\r\n\r\nexport const queryClient = new QueryClient();\r\n"],"names":["queryClient","QueryClient"],"mappings":";AAEO,MAAMA,IAAc,IAAIC,EAAAA;"}
package/dist/server.js CHANGED
@@ -67,3 +67,4 @@ export {
67
67
  C as login,
68
68
  L as logout
69
69
  };
70
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sources":["../src/lib/auth/api.ts"],"sourcesContent":["import { deleteCookie, getCookie, setCookie } from \"@tanstack/react-start/server\";\r\nimport { decodeIdToken, generateCodeVerifier, generateState } from \"arctic\";\r\nimport type jwt from \"jsonwebtoken\";\r\nimport { serverEnv } from \"~/env\";\r\nimport { entraId } from \"~/lib/auth/entra\";\r\nimport { setSessionAccessTokenCookie, setSessionCookie } from \"~/lib/auth/session\";\r\n\r\nexport const login = async (request: Request): Promise<Response> => {\r\n const url = new URL(request.url);\r\n const redirectUri = url.searchParams.get(\"redirect_uri\") || \"/\";\r\n\r\n const state = generateState();\r\n const codeVerifier = generateCodeVerifier();\r\n const scopes = [\"openid\", \"profile\", \"offline_access\", \"User.Read\"];\r\n const authorizationURL = entraId.createAuthorizationURL(state, codeVerifier, scopes);\r\n\r\n setCookie(\"entra_oauth_state\", state, {\r\n secure: serverEnv.NODE_ENV === \"production\",\r\n path: \"/\",\r\n httpOnly: true,\r\n sameSite: \"lax\",\r\n maxAge: 60 * 10 // 10 minutes\r\n });\r\n\r\n setCookie(\"entra_code_verifier\", codeVerifier, {\r\n secure: serverEnv.NODE_ENV === \"production\",\r\n path: \"/\",\r\n httpOnly: true,\r\n sameSite: \"lax\",\r\n maxAge: 60 * 10 // 10 minutes,\r\n });\r\n\r\n setCookie(\"entra_redirect_uri\", redirectUri, {\r\n secure: serverEnv.NODE_ENV === \"production\",\r\n path: \"/\",\r\n httpOnly: true,\r\n sameSite: \"lax\",\r\n maxAge: 60 * 10 // 10 minutes,\r\n });\r\n\r\n return Response.redirect(authorizationURL.href);\r\n};\r\n\r\nexport const callback = async (request: Request): Promise<Response> => {\r\n const url = new URL(request.url);\r\n const code = url.searchParams.get(\"code\");\r\n if (!code) return new Response(\"Missing code\", { status: 400 });\r\n const state = url.searchParams.get(\"state\");\r\n const storedState = getCookie(\"entra_oauth_state\") ?? null;\r\n const codeVerifier = getCookie(\"entra_code_verifier\") ?? null;\r\n const redirectUri = getCookie(\"entra_redirect_uri\") ?? \"/\";\r\n\r\n if (!state || !storedState || !codeVerifier || !redirectUri) throw new Response(\"Missing entra oauth data in cookies\", { status: 400 });\r\n if (state !== storedState) return new Response(\"Invalid oauth state\", { status: 400 });\r\n\r\n deleteCookie(\"entra_oauth_state\");\r\n deleteCookie(\"entra_code_verifier\");\r\n deleteCookie(\"entra_redirect_uri\");\r\n\r\n const tokens = await entraId.validateAuthorizationCode(code, codeVerifier);\r\n\r\n const idToken = tokens.idToken();\r\n const claims = decodeIdToken(idToken) as jwt.JwtPayload;\r\n\r\n await setSessionCookie({\r\n refreshToken: tokens.refreshToken(),\r\n user: {\r\n id: claims.oid,\r\n name: claims.name.split(\"/\")[0],\r\n email: claims.preferred_username,\r\n }\r\n });\r\n\r\n await setSessionAccessTokenCookie(tokens.accessToken());\r\n\r\n return new Response(null, {\r\n status: 302,\r\n headers: { Location: redirectUri },\r\n });\r\n};\r\n\r\nexport const logout = async (request: Request): Promise<Response> => {\r\n const url = new URL(request.url);\r\n\r\n // const { session } = await validateRequest();\r\n // if (!session) {\r\n // return new Response(null, { status: 302, headers: { Location: \"/\" } });\r\n // }\r\n // setCookie(SESSION_COOKIE_NAME, \"\", {\r\n // httpOnly: true,\r\n // sameSite: \"lax\",\r\n // secure: serverEnv.NODE_ENV === \"production\",\r\n // maxAge: 0,\r\n // path: \"/\",\r\n // });\r\n\r\n return new Response(null, { status: 302, headers: { Location: url.href } });\r\n};\r\n"],"names":["login","request","redirectUri","URL","url","searchParams","get","state","generateState","codeVerifier","generateCodeVerifier","scopes","authorizationURL","entraId","createAuthorizationURL","setCookie","secure","serverEnv","NODE_ENV","path","httpOnly","sameSite","maxAge","Response","redirect","href","callback","code","status","storedState","getCookie","deleteCookie","tokens","validateAuthorizationCode","idToken","claims","decodeIdToken","setSessionCookie","refreshToken","user","id","oid","name","split","email","preferred_username","setSessionAccessTokenCookie","accessToken","headers","Location","logout"],"mappings":";;;;AAOO,MAAMA,IAAQ,OAAOC,MAAwC;AAEhE,QAAMC,IADM,IAAIC,IAAIF,EAAQG,GAAG,EACPC,aAAaC,IAAI,cAAc,KAAK,KAEtDC,IAAQC,EAAAA,GACRC,IAAeC,EAAAA,GACfC,IAAS,CAAC,UAAU,WAAW,kBAAkB,WAAW,GAC5DC,IAAmBC,EAAQC,uBAAuBP,GAAOE,GAAcE,CAAM;AAEnFI,SAAAA,EAAU,qBAAqBR,GAAO;AAAA,IAClCS,QAAQC,EAAUC,aAAa;AAAA,IAC/BC,MAAM;AAAA,IACNC,UAAU;AAAA,IACVC,UAAU;AAAA,IACVC,QAAQ;AAAA;AAAA,EAAK,CAChB,GAEDP,EAAU,uBAAuBN,GAAc;AAAA,IAC3CO,QAAQC,EAAUC,aAAa;AAAA,IAC/BC,MAAM;AAAA,IACNC,UAAU;AAAA,IACVC,UAAU;AAAA,IACVC,QAAQ;AAAA;AAAA,EAAK,CAChB,GAEDP,EAAU,sBAAsBb,GAAa;AAAA,IACzCc,QAAQC,EAAUC,aAAa;AAAA,IAC/BC,MAAM;AAAA,IACNC,UAAU;AAAA,IACVC,UAAU;AAAA,IACVC,QAAQ;AAAA;AAAA,EAAK,CAChB,GAEMC,SAASC,SAASZ,EAAiBa,IAAI;AAClD,GAEaC,IAAW,OAAOzB,MAAwC;AACnE,QAAMG,IAAM,IAAID,IAAIF,EAAQG,GAAG,GACzBuB,IAAOvB,EAAIC,aAAaC,IAAI,MAAM;AACxC,MAAI,CAACqB,EAAM,QAAO,IAAIJ,SAAS,gBAAgB;AAAA,IAAEK,QAAQ;AAAA,EAAA,CAAK;AAC9D,QAAMrB,IAAQH,EAAIC,aAAaC,IAAI,OAAO,GACpCuB,IAAcC,EAAU,mBAAmB,KAAK,MAChDrB,IAAeqB,EAAU,qBAAqB,KAAK,MACnD5B,IAAc4B,EAAU,oBAAoB,KAAK;AAEvD,MAAI,CAACvB,KAAS,CAACsB,KAAe,CAACpB,KAAgB,CAACP,EAAa,OAAM,IAAIqB,SAAS,uCAAuC;AAAA,IAAEK,QAAQ;AAAA,EAAA,CAAK;AACtI,MAAIrB,MAAUsB,EAAa,QAAO,IAAIN,SAAS,uBAAuB;AAAA,IAAEK,QAAQ;AAAA,EAAA,CAAK;AAErFG,EAAAA,EAAa,mBAAmB,GAChCA,EAAa,qBAAqB,GAClCA,EAAa,oBAAoB;AAEjC,QAAMC,IAAS,MAAMnB,EAAQoB,0BAA0BN,GAAMlB,CAAY,GAEnEyB,IAAUF,EAAOE,QAAAA,GACjBC,IAASC,EAAcF,CAAO;AAEpC,eAAMG,EAAiB;AAAA,IACnBC,cAAcN,EAAOM,aAAAA;AAAAA,IACrBC,MAAM;AAAA,MACFC,IAAIL,EAAOM;AAAAA,MACXC,MAAMP,EAAOO,KAAKC,MAAM,GAAG,EAAE,CAAC;AAAA,MAC9BC,OAAOT,EAAOU;AAAAA,IAAAA;AAAAA,EAClB,CACH,GAED,MAAMC,EAA4Bd,EAAOe,aAAa,GAE/C,IAAIxB,SAAS,MAAM;AAAA,IACtBK,QAAQ;AAAA,IACRoB,SAAS;AAAA,MAAEC,UAAU/C;AAAAA,IAAAA;AAAAA,EAAY,CACpC;AACL,GAEagD,IAAS,OAAOjD,MAAwC;AACjE,QAAMG,IAAM,IAAID,IAAIF,EAAQG,GAAG;AAc/B,SAAO,IAAImB,SAAS,MAAM;AAAA,IAAEK,QAAQ;AAAA,IAAKoB,SAAS;AAAA,MAAEC,UAAU7C,EAAIqB;AAAAA,IAAAA;AAAAA,EAAK,CAAG;AAC9E;"}
@@ -73,3 +73,4 @@ export {
73
73
  O as r,
74
74
  k as s
75
75
  };
76
+ //# sourceMappingURL=session-7yb0BETM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-7yb0BETM.js","sources":["../src/lib/auth/entra.ts","../src/models/User.ts","../src/lib/auth/session.ts"],"sourcesContent":["import { MicrosoftEntraId } from \"arctic\";\r\nimport { serverEnv } from \"~/env\";\r\n\r\nexport const entraId = new MicrosoftEntraId(\r\n serverEnv.MICROSOFT_TENANT_ID,\r\n serverEnv.MICROSOFT_CLIENT_ID,\r\n serverEnv.MICROSOFT_CLIENT_SECRET,\r\n serverEnv.MICROSOFT_REDIRECT_URI,\r\n);\r\n","import * as z from \"zod\";\r\n\r\nexport const UserSchema = z.object({\r\n id: z.string(),\r\n name: z.string(),\r\n email: z.email(),\r\n groups: z.array(z.string()),\r\n});\r\n\r\nexport type User = z.infer<typeof UserSchema>;\r\n\r\nexport const GraphUserSchema = z.object({\r\n id: z.string(),\r\n displayName: z.string(),\r\n jobTitle: z.string(),\r\n mail: z.email(),\r\n mobilePhone: z.string(),\r\n});\r\n\r\nexport type GraphUser = z.infer<typeof GraphUserSchema>;\r\n","import { redirect } from \"@tanstack/react-router\";\r\nimport { deleteCookie, getCookie, setCookie } from \"@tanstack/react-start/server\";\r\nimport jwt from \"jsonwebtoken\";\r\nimport z from \"zod\";\r\nimport jwksRsa from \"jwks-rsa\";\r\nimport { entraId } from \"./entra\";\r\nimport { serverEnv } from \"~/env\";\r\nimport { UserSchema } from \"~/models/User\";\r\n\r\nconst SESSION_COOKIE_NAME = \"session\";\r\nconst ACCESS_TOKEN_COOKIE_NAME = \"access_token\";\r\nconst AFTER_LOGIN_URL = \"/\";\r\n\r\nconst SessionSchema = z.object({\r\n refreshToken: z.string(),\r\n user: UserSchema.omit({ groups: true }),\r\n});\r\n\r\ntype Session = z.infer<typeof SessionSchema>;\r\n\r\nexport const requireSession = async (redirectUri?: string) => {\r\n const sessionCookie = getCookie(SESSION_COOKIE_NAME);\r\n if (!sessionCookie) {\r\n throw redirect({ href: `/api/auth/login?redirect_uri=${encodeURIComponent(redirectUri ?? AFTER_LOGIN_URL)}` });\r\n }\r\n\r\n const payloadRaw = jwt.verify(sessionCookie, serverEnv.SESSION_SECRET);\r\n const sessionResult = SessionSchema.safeParse(payloadRaw);\r\n if (!sessionResult.success) {\r\n deleteCookie(SESSION_COOKIE_NAME);\r\n throw redirect({ href: `/api/auth/login?redirect_uri=${encodeURIComponent(redirectUri ?? AFTER_LOGIN_URL)}` });\r\n }\r\n\r\n return sessionResult.data;\r\n};\r\n\r\nexport const getAccessToken = async () => {\r\n const accessTokenCookie = getCookie(ACCESS_TOKEN_COOKIE_NAME);\r\n if (accessTokenCookie) return accessTokenCookie;\r\n\r\n const session = await requireSession();\r\n\r\n const tokens = await entraId.refreshAccessToken(session.refreshToken, []);\r\n\r\n await setSessionCookie({\r\n ...session,\r\n refreshToken: tokens.refreshToken()\r\n });\r\n\r\n await setSessionAccessTokenCookie(tokens.accessToken());\r\n\r\n return tokens.accessToken();\r\n};\r\n\r\nexport const validateAccessToken = async (token: string): Promise<jwt.JwtPayload> => {\r\n const client = jwksRsa({\r\n cache: true,\r\n rateLimit: true,\r\n jwksRequestsPerMinute: 5,\r\n jwksUri: \"https://login.microsoftonline.com/common/discovery/v2.0/keys\",\r\n });\r\n\r\n const decodedHeader = jwt.decode(token, { complete: true });\r\n if (!decodedHeader?.header.kid) throw new Error(\"Invalid token: Missing kid\");\r\n\r\n const key = await client.getSigningKey(decodedHeader.header.kid);\r\n const signingKey = key.getPublicKey();\r\n\r\n const payload = jwt.verify(token, signingKey) as jwt.JwtPayload;\r\n\r\n if (typeof payload.iss !== \"string\" || !payload.iss.startsWith(\"https://login.microsoftonline.com/\"))\r\n throw new Error(\"Invalid issuer\");\r\n\r\n return payload;\r\n};\r\n\r\nexport const setSessionCookie = async (session: Session) => {\r\n const sessionJwt = jwt.sign(session, serverEnv.SESSION_SECRET, { expiresIn: \"7d\" });\r\n\r\n setCookie(SESSION_COOKIE_NAME, sessionJwt, {\r\n secure: serverEnv.NODE_ENV === \"production\",\r\n path: \"/\",\r\n httpOnly: true,\r\n sameSite: \"lax\",\r\n maxAge: 7 * 24 * 60 * 60, // 7 days\r\n });\r\n};\r\n\r\nexport const setSessionAccessTokenCookie = async (accessToken: string) => {\r\n setCookie(ACCESS_TOKEN_COOKIE_NAME, accessToken, {\r\n secure: serverEnv.NODE_ENV === \"production\",\r\n path: \"/\",\r\n httpOnly: true,\r\n sameSite: \"lax\",\r\n maxAge: 5 * 60, // 5 minutes\r\n });\r\n};\r\n"],"names":["entraId","MicrosoftEntraId","serverEnv","MICROSOFT_TENANT_ID","MICROSOFT_CLIENT_ID","MICROSOFT_CLIENT_SECRET","MICROSOFT_REDIRECT_URI","UserSchema","z","object","id","string","name","email","groups","array","displayName","jobTitle","mail","mobilePhone","SESSION_COOKIE_NAME","ACCESS_TOKEN_COOKIE_NAME","AFTER_LOGIN_URL","SessionSchema","refreshToken","user","omit","requireSession","redirectUri","sessionCookie","getCookie","redirect","href","encodeURIComponent","payloadRaw","jwt","verify","SESSION_SECRET","sessionResult","safeParse","success","deleteCookie","data","getAccessToken","accessTokenCookie","session","tokens","refreshAccessToken","setSessionCookie","setSessionAccessTokenCookie","accessToken","sessionJwt","sign","expiresIn","setCookie","secure","NODE_ENV","path","httpOnly","sameSite","maxAge"],"mappings":";;;;;;;;AAGO,MAAMA,IAAU,IAAIC,EACvBC,EAAUC,qBACVD,EAAUE,qBACVF,EAAUG,yBACVH,EAAUI,sBACd,GCNaC,IAAaC,EAAEC,OAAO;AAAA,EAC/BC,IAAIF,EAAEG,OAAAA;AAAAA,EACNC,MAAMJ,EAAEG,OAAAA;AAAAA,EACRE,OAAOL,EAAEK,MAAAA;AAAAA,EACTC,QAAQN,EAAEO,MAAMP,EAAEG,QAAQ;AAC9B,CAAC;AAI8BH,EAAEC,OAAO;AAAA,EACpCC,IAAIF,EAAEG,OAAAA;AAAAA,EACNK,aAAaR,EAAEG,OAAAA;AAAAA,EACfM,UAAUT,EAAEG,OAAAA;AAAAA,EACZO,MAAMV,EAAEK,MAAAA;AAAAA,EACRM,aAAaX,EAAEG,OAAAA;AACnB,CAAC;ACRD,MAAMS,IAAsB,WACtBC,IAA2B,gBAC3BC,IAAkB,KAElBC,IAAgBf,EAAEC,OAAO;AAAA,EAC3Be,cAAchB,EAAEG,OAAAA;AAAAA,EAChBc,MAAMlB,EAAWmB,KAAK;AAAA,IAAEZ,QAAQ;AAAA,EAAA,CAAM;AAC1C,CAAC,GAIYa,IAAiB,OAAOC,MAAyB;AAC1D,QAAMC,IAAgBC,EAAUV,CAAmB;AACnD,MAAI,CAACS;AACD,UAAME,EAAS;AAAA,MAAEC,MAAM,gCAAgCC,mBAAmBL,KAAeN,CAAe,CAAC;AAAA,IAAA,CAAI;AAGjH,QAAMY,IAAaC,EAAIC,OAAOP,GAAe3B,EAAUmC,cAAc,GAC/DC,IAAgBf,EAAcgB,UAAUL,CAAU;AACxD,MAAI,CAACI,EAAcE;AACfC,UAAAA,EAAarB,CAAmB,GAC1BW,EAAS;AAAA,MAAEC,MAAM,gCAAgCC,mBAAmBL,KAAeN,CAAe,CAAC;AAAA,IAAA,CAAI;AAGjH,SAAOgB,EAAcI;AACzB,GAEaC,IAAiB,YAAY;AACtC,QAAMC,IAAoBd,EAAUT,CAAwB;AAC5D,MAAIuB,EAAmB,QAAOA;AAE9B,QAAMC,IAAU,MAAMlB,EAAAA,GAEhBmB,IAAS,MAAM9C,EAAQ+C,mBAAmBF,EAAQrB,cAAc,EAAE;AAExE,eAAMwB,EAAiB;AAAA,IACnB,GAAGH;AAAAA,IACHrB,cAAcsB,EAAOtB,aAAAA;AAAAA,EAAa,CACrC,GAED,MAAMyB,EAA4BH,EAAOI,aAAa,GAE/CJ,EAAOI,YAAAA;AAClB,GAwBaF,IAAmB,OAAOH,MAAqB;AACxD,QAAMM,IAAahB,EAAIiB,KAAKP,GAAS3C,EAAUmC,gBAAgB;AAAA,IAAEgB,WAAW;AAAA,EAAA,CAAM;AAElFC,EAAAA,EAAUlC,GAAqB+B,GAAY;AAAA,IACvCI,QAAQrD,EAAUsD,aAAa;AAAA,IAC/BC,MAAM;AAAA,IACNC,UAAU;AAAA,IACVC,UAAU;AAAA,IACVC,QAAQ,QAAc;AAAA;AAAA,EAAA,CACzB;AACL,GAEaX,IAA8B,OAAOC,MAAwB;AACtEI,EAAAA,EAAUjC,GAA0B6B,GAAa;AAAA,IAC7CK,QAAQrD,EAAUsD,aAAa;AAAA,IAC/BC,MAAM;AAAA,IACNC,UAAU;AAAA,IACVC,UAAU;AAAA,IACVC,QAAQ;AAAA;AAAA,EAAI,CACf;AACL;"}
@@ -79,3 +79,4 @@ export {
79
79
  h as r,
80
80
  f as t
81
81
  };
82
+ //# sourceMappingURL=utils-CZraUjBd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils-CZraUjBd.js","sources":["../src/lib/utils.ts"],"sourcesContent":["import axios from \"axios\";\r\nimport type { AnyFieldApi } from \"@tanstack/react-form\";\r\nimport { clientEnv } from \"~/env\";\r\n\r\nexport const WISTRON_PRIMARY_COLOR = \"#00506E\";\r\nexport const WISTRON_SECONDARY_COLOR = \"#64DC00\";\r\n\r\nexport class Platform {\r\n static get isAndroid() { return /android/i.test(this.userAgent); }\r\n static get isIOS() { return /iPad|iPhone|iPod/.test(this.userAgent); }\r\n static get isWindows() { return /windows/i.test(this.userAgent); }\r\n static get isMacOS() { return /Macintosh|MacIntel|MacPPC|Mac68K/.test(this.userAgent); }\r\n\r\n private static get userAgent() { return typeof navigator === \"undefined\" ? \"\" : navigator.userAgent; }\r\n}\r\n\r\nexport const rootRouteHead = () => ({\r\n meta: [\r\n { charSet: \"utf-8\" },\r\n { name: \"viewport\", content: \"width=device-width, initial-scale=1\" },\r\n { title: clientEnv.VITE_APP_TITLE },\r\n { name: \"og:type\", content: \"website\" },\r\n { name: \"og:title\", content: clientEnv.VITE_APP_TITLE },\r\n { name: \"og:image\", content: \"/favicon-32x32.png\" }\r\n ],\r\n links: [\r\n { rel: \"apple-touch-icon\", sizes: \"180x180\", href: \"/apple-touch-icon.png\", },\r\n { rel: \"icon\", type: \"image/png\", sizes: \"32x32\", href: \"/favicon-32x32.png\", },\r\n { rel: \"icon\", type: \"image/png\", sizes: \"16x16\", href: \"/favicon-16x16.png\", },\r\n { rel: \"manifest\", href: \"/manifest.webmanifest\" },\r\n { rel: \"icon\", href: \"/favicon.ico\" },\r\n ],\r\n});\r\n\r\nexport const httpClient = axios.create({\r\n baseURL: clientEnv.VITE_API_URL // TODO: Not working in children projects\r\n});\r\n\r\n/* Internal Utils */\r\nexport type FormOmittedProps =\r\n \"name\" |\r\n \"value\" |\r\n \"onChange\" |\r\n \"onBlur\" |\r\n \"error\" |\r\n \"helperText\" |\r\n \"renderInput\" |\r\n \"type\" |\r\n \"aria-label\";\r\n\r\nexport const getFieldStatus = (field: AnyFieldApi) => {\r\n const { meta } = field.state;\r\n\r\n const isTouched = meta.isTouched;\r\n const hasError = !!meta.errors.length;\r\n const helperText = meta.errors[0]?.message;\r\n\r\n return { isTouched, hasError, helperText };\r\n};\r\n\r\nexport const toKebabCase = (str: string): string => {\r\n return str\r\n .replaceAll(/([a-z])([A-Z])/g, \"$1-$2\")\r\n .replaceAll(/[\\s_]+/g, \"-\")\r\n .replaceAll(/[^a-zA-Z0-9-]/g, \"\")\r\n .toLowerCase()\r\n .replaceAll(/-+/g, \"-\")\r\n .replaceAll(/(^-|-$)/g, \"\");\r\n};\r\n"],"names":["WISTRON_PRIMARY_COLOR","WISTRON_SECONDARY_COLOR","Platform","isAndroid","test","userAgent","isIOS","isWindows","isMacOS","navigator","rootRouteHead","meta","charSet","name","content","title","clientEnv","VITE_APP_TITLE","links","rel","sizes","href","type","httpClient","axios","create","baseURL","VITE_API_URL","getFieldStatus","field","state","isTouched","hasError","errors","length","helperText","message","toKebabCase","str","replaceAll","toLowerCase"],"mappings":";;AAIO,MAAMA,IAAwB,WACxBC,IAA0B;AAEhC,MAAMC,EAAS;AAAA,EAClB,WAAWC,YAAY;AAAE,WAAO,WAAWC,KAAK,KAAKC,SAAS;AAAA,EAAG;AAAA,EACjE,WAAWC,QAAQ;AAAE,WAAO,mBAAmBF,KAAK,KAAKC,SAAS;AAAA,EAAG;AAAA,EACrE,WAAWE,YAAY;AAAE,WAAO,WAAWH,KAAK,KAAKC,SAAS;AAAA,EAAG;AAAA,EACjE,WAAWG,UAAU;AAAE,WAAO,mCAAmCJ,KAAK,KAAKC,SAAS;AAAA,EAAG;AAAA,EAEvF,WAAmBA,YAAY;AAAE,WAAO,OAAOI,YAAc,MAAc,KAAKA,UAAUJ;AAAAA,EAAW;AACzG;AAEO,MAAMK,IAAgBA,OAAO;AAAA,EAChCC,MAAM,CACF;AAAA,IAAEC,SAAS;AAAA,EAAA,GACX;AAAA,IAAEC,MAAM;AAAA,IAAYC,SAAS;AAAA,EAAA,GAC7B;AAAA,IAAEC,OAAOC,EAAUC;AAAAA,EAAAA,GACnB;AAAA,IAAEJ,MAAM;AAAA,IAAWC,SAAS;AAAA,EAAA,GAC5B;AAAA,IAAED,MAAM;AAAA,IAAYC,SAASE,EAAUC;AAAAA,EAAAA,GACvC;AAAA,IAAEJ,MAAM;AAAA,IAAYC,SAAS;AAAA,EAAA,CAAsB;AAAA,EAEvDI,OAAO,CACH;AAAA,IAAEC,KAAK;AAAA,IAAoBC,OAAO;AAAA,IAAWC,MAAM;AAAA,EAAA,GACnD;AAAA,IAAEF,KAAK;AAAA,IAAQG,MAAM;AAAA,IAAaF,OAAO;AAAA,IAASC,MAAM;AAAA,EAAA,GACxD;AAAA,IAAEF,KAAK;AAAA,IAAQG,MAAM;AAAA,IAAaF,OAAO;AAAA,IAASC,MAAM;AAAA,EAAA,GACxD;AAAA,IAAEF,KAAK;AAAA,IAAYE,MAAM;AAAA,EAAA,GACzB;AAAA,IAAEF,KAAK;AAAA,IAAQE,MAAM;AAAA,EAAA,CAAgB;AAE7C,IAEaE,IAAaC,EAAMC,OAAO;AAAA,EACnCC,SAASV,EAAUW;AAAAA;AACvB,CAAC,GAcYC,IAAiBA,CAACC,MAAuB;AAClD,QAAM;AAAA,IAAElB,MAAAA;AAAAA,EAAAA,IAASkB,EAAMC,OAEjBC,IAAYpB,EAAKoB,WACjBC,IAAW,CAAC,CAACrB,EAAKsB,OAAOC,QACzBC,IAAaxB,EAAKsB,OAAO,CAAC,GAAGG;AAEnC,SAAO;AAAA,IAAEL,WAAAA;AAAAA,IAAWC,UAAAA;AAAAA,IAAUG,YAAAA;AAAAA,EAAAA;AAClC,GAEaE,IAAcA,CAACC,MACjBA,EACFC,WAAW,mBAAmB,OAAO,EACrCA,WAAW,WAAW,GAAG,EACzBA,WAAW,kBAAkB,EAAE,EAC/BC,cACAD,WAAW,OAAO,GAAG,EACrBA,WAAW,YAAY,EAAE;"}
package/dist/utils.js CHANGED
@@ -8,3 +8,4 @@ export {
8
8
  p as t,
9
9
  t as uuidv7
10
10
  };
11
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
package/dist/vite.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import t from "node:fs";
2
2
  import n from "node:path";
3
- function S() {
4
- const s = "virtual:wcz-layout", c = "\0" + s;
3
+ function h() {
4
+ const s = "virtual:wcz-layout", l = "\0" + s;
5
5
  let e;
6
6
  return {
7
7
  name: "vite:wcz-layout",
@@ -13,17 +13,17 @@ function S() {
13
13
  return {
14
14
  optimizeDeps: {
15
15
  exclude: [s]
16
- },
17
- ssr: {
18
- noExternal: ["@mui/*"]
19
16
  }
17
+ // ssr: {
18
+ // noExternal: ["@mui/*"],
19
+ // },
20
20
  };
21
21
  },
22
22
  resolveId(r) {
23
- return r === s ? c : null;
23
+ return r === s ? l : null;
24
24
  },
25
25
  load(r) {
26
- if (r !== c) return null;
26
+ if (r !== l) return null;
27
27
  t.existsSync(e) || t.mkdirSync(e, {
28
28
  recursive: !0
29
29
  });
@@ -33,12 +33,12 @@ function S() {
33
33
  for (const o of d) {
34
34
  const u = n.basename(o, ".json"), f = n.join(e, o);
35
35
  try {
36
- const l = t.readFileSync(f, "utf-8"), y = JSON.parse(l);
36
+ const c = t.readFileSync(f, "utf-8"), y = JSON.parse(c);
37
37
  i[u] = {
38
38
  translation: y
39
39
  };
40
- } catch (l) {
41
- console.error(`[vite:layout] Error parsing ${o}:`, l), i[u] = {
40
+ } catch (c) {
41
+ console.error(`[vite:layout] Error parsing ${o}:`, c), i[u] = {
42
42
  translation: {}
43
43
  };
44
44
  }
@@ -49,5 +49,6 @@ function S() {
49
49
  };
50
50
  }
51
51
  export {
52
- S as viteWczLayout
52
+ h as viteWczLayout
53
53
  };
54
+ //# sourceMappingURL=vite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vite.js","sources":["../src/lib/vite-plugin.ts"],"sourcesContent":["import fs from \"node:fs\";\r\nimport path from \"node:path\";\r\nimport type { Resource } from \"i18next\";\r\nimport type { Plugin } from \"vite\";\r\n\r\nexport function viteWczLayout(): Plugin {\r\n const virtualModuleId = \"virtual:wcz-layout\";\r\n const resolvedVirtualModuleId = \"\\0\" + virtualModuleId;\r\n\r\n let localesPath: string;\r\n\r\n return {\r\n name: \"vite:wcz-layout\",\r\n enforce: \"pre\",\r\n configResolved(resolvedConfig) {\r\n localesPath = path.resolve(resolvedConfig.root, \"src/locales\");\r\n },\r\n config() {\r\n return {\r\n optimizeDeps: {\r\n exclude: [virtualModuleId],\r\n },\r\n // ssr: {\r\n // noExternal: [\"@mui/*\"],\r\n // },\r\n };\r\n },\r\n resolveId(id) {\r\n if (id === virtualModuleId) return resolvedVirtualModuleId;\r\n return null;\r\n },\r\n load(id) {\r\n if (id !== resolvedVirtualModuleId) return null;\r\n\r\n if (!fs.existsSync(localesPath)) {\r\n fs.mkdirSync(localesPath, { recursive: true });\r\n }\r\n\r\n const enPath = path.join(localesPath, \"en.json\");\r\n if (!fs.existsSync(enPath)) {\r\n fs.writeFileSync(enPath, JSON.stringify({}));\r\n }\r\n\r\n const files = fs.readdirSync(localesPath);\r\n const jsonFiles = files.filter((f) => f.endsWith(\".json\"));\r\n\r\n const resources: Resource = {};\r\n\r\n for (const file of jsonFiles) {\r\n const lang = path.basename(file, \".json\");\r\n const filePath = path.join(localesPath, file);\r\n\r\n try {\r\n const content = fs.readFileSync(filePath, \"utf-8\");\r\n const translations = JSON.parse(content);\r\n resources[lang] = { translation: translations };\r\n } catch (error) {\r\n console.error(`[vite:layout] Error parsing ${file}:`, error);\r\n resources[lang] = { translation: {} };\r\n }\r\n\r\n this.addWatchFile(filePath);\r\n }\r\n\r\n return `export const resources = ${JSON.stringify(resources)};`;\r\n },\r\n };\r\n}\r\n"],"names":["viteWczLayout","virtualModuleId","resolvedVirtualModuleId","localesPath","name","enforce","configResolved","resolvedConfig","path","resolve","root","config","optimizeDeps","exclude","resolveId","id","load","fs","existsSync","mkdirSync","recursive","enPath","join","writeFileSync","JSON","stringify","jsonFiles","readdirSync","filter","f","endsWith","resources","file","lang","basename","filePath","content","readFileSync","translations","parse","translation","error","console","addWatchFile"],"mappings":";;AAKO,SAASA,IAAwB;AACpC,QAAMC,IAAkB,sBAClBC,IAA0B,OAAOD;AAEvC,MAAIE;AAEJ,SAAO;AAAA,IACHC,MAAM;AAAA,IACNC,SAAS;AAAA,IACTC,eAAeC,GAAgB;AAC3BJ,MAAAA,IAAcK,EAAKC,QAAQF,EAAeG,MAAM,aAAa;AAAA,IACjE;AAAA,IACAC,SAAS;AACL,aAAO;AAAA,QACHC,cAAc;AAAA,UACVC,SAAS,CAACZ,CAAe;AAAA,QAAA;AAAA;AAAA;AAAA;AAAA,MAC7B;AAAA,IAKR;AAAA,IACAa,UAAUC,GAAI;AACV,aAAIA,MAAOd,IAAwBC,IAC5B;AAAA,IACX;AAAA,IACAc,KAAKD,GAAI;AACL,UAAIA,MAAOb,EAAyB,QAAO;AAE3C,MAAKe,EAAGC,WAAWf,CAAW,KAC1Bc,EAAGE,UAAUhB,GAAa;AAAA,QAAEiB,WAAW;AAAA,MAAA,CAAM;AAGjD,YAAMC,IAASb,EAAKc,KAAKnB,GAAa,SAAS;AAC/C,MAAKc,EAAGC,WAAWG,CAAM,KACrBJ,EAAGM,cAAcF,GAAQG,KAAKC,UAAU,CAAA,CAAE,CAAC;AAI/C,YAAMC,IADQT,EAAGU,YAAYxB,CAAW,EAChByB,OAAQC,OAAMA,EAAEC,SAAS,OAAO,CAAC,GAEnDC,IAAsB,CAAA;AAE5B,iBAAWC,KAAQN,GAAW;AAC1B,cAAMO,IAAOzB,EAAK0B,SAASF,GAAM,OAAO,GAClCG,IAAW3B,EAAKc,KAAKnB,GAAa6B,CAAI;AAE5C,YAAI;AACA,gBAAMI,IAAUnB,EAAGoB,aAAaF,GAAU,OAAO,GAC3CG,IAAed,KAAKe,MAAMH,CAAO;AACvCL,UAAAA,EAAUE,CAAI,IAAI;AAAA,YAAEO,aAAaF;AAAAA,UAAAA;AAAAA,QACrC,SAASG,GAAO;AACZC,kBAAQD,MAAM,+BAA+BT,CAAI,KAAKS,CAAK,GAC3DV,EAAUE,CAAI,IAAI;AAAA,YAAEO,aAAa,CAAA;AAAA,UAAC;AAAA,QACtC;AAEA,aAAKG,aAAaR,CAAQ;AAAA,MAC9B;AAEA,aAAO,4BAA4BX,KAAKC,UAAUM,CAAS,CAAC;AAAA,IAChE;AAAA,EAAA;AAER;"}
package/package.json CHANGED
@@ -1,41 +1,40 @@
1
1
  {
2
2
  "name": "wcz-test",
3
- "version": "6.24.14",
3
+ "version": "6.25.0",
4
4
  "private": false,
5
5
  "sideEffects": false,
6
6
  "type": "module",
7
- "types": "dist/exports/index.d.ts",
8
7
  "exports": {
9
8
  ".": {
10
- "types": "./dist/exports/index.d.ts",
9
+ "types": "./dist/index.d.ts",
11
10
  "import": "./dist/index.js"
12
11
  },
13
12
  "./server": {
14
- "types": "./dist/exports/server.d.ts",
13
+ "types": "./dist/server.d.ts",
15
14
  "import": "./dist/server.js"
16
15
  },
17
16
  "./components": {
18
- "types": "./dist/exports/components.d.ts",
17
+ "types": "./dist/components.d.ts",
19
18
  "import": "./dist/components.js"
20
19
  },
21
20
  "./hooks": {
22
- "types": "./dist/exports/hooks.d.ts",
21
+ "types": "./dist/hooks.d.ts",
23
22
  "import": "./dist/hooks.js"
24
23
  },
25
24
  "./models": {
26
- "types": "./dist/exports/models.d.ts",
25
+ "types": "./dist/models.d.ts",
27
26
  "import": "./dist/models.js"
28
27
  },
29
28
  "./queries": {
30
- "types": "./dist/exports/queries.d.ts",
29
+ "types": "./dist/queries.d.ts",
31
30
  "import": "./dist/queries.js"
32
31
  },
33
32
  "./utils": {
34
- "types": "./dist/exports/utils.d.ts",
33
+ "types": "./dist/utils.d.ts",
35
34
  "import": "./dist/utils.js"
36
35
  },
37
36
  "./vite": {
38
- "types": "./dist/exports/vite.d.ts",
37
+ "types": "./dist/vite.d.ts",
39
38
  "import": "./dist/vite.js"
40
39
  }
41
40
  },