Fixed components build. Renamed validations to permissions.

This commit is contained in:
Mike Cao 2025-09-02 09:23:35 -07:00
parent f0ec24e8f5
commit c916e4ff9c
80 changed files with 99 additions and 373 deletions

View file

@ -1,36 +0,0 @@
import esbuild from 'esbuild';
import { commonjs } from '@hyrious/esbuild-plugin-commonjs';
import fs from 'node:fs';
fs.copyFileSync('./package.components.json', './dist/package.json');
esbuild
.build({
entryPoints: ['src/index.client.ts'],
outfile: 'dist/client/index.js',
platform: 'browser',
bundle: true,
jsx: 'automatic',
format: 'esm',
plugins: [commonjs()],
external: ['react', 'react-dom', 'react-jsx/runtime', '@swc/helpers'],
})
.catch(e => {
// eslint-disable-next-line
console.error(e);
process.exit(1);
});
esbuild
.build({
entryPoints: ['src/index.server.ts'],
outfile: 'dist/server/index.js',
platform: 'node',
bundle: true,
format: 'esm',
})
.catch(e => {
// eslint-disable-next-line
console.error(e);
process.exit(1);
});

View file

@ -1,23 +1,10 @@
{
"name": "@umami/components",
"version": "0.103.0",
"version": "0.111.0",
"description": "Umami React components.",
"author": "Mike Cao <mike@mikecao.com>",
"license": "MIT",
"type": "module",
"main": "./index.js",
"types": "./index.d.ts",
"peerDependencies": {
"@tanstack/react-query": "^4.33.0",
"classnames": "^2.3.1",
"colord": "^2.9.2",
"date-fns-tz": "^1.1.4",
"immer": "^9.0.12",
"next": "^13.4.0",
"next-basics": "^0.36.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-intl": "^5.24.7",
"zustand": "^4.3.8"
}
"types": "./index.d.ts"
}

View file

@ -23,7 +23,7 @@
"build-app": "next build",
"build-app-turbo": "next build --turbo",
"build-icons": "svgr ./src/assets --out-dir src/components/svg --typescript",
"build-components": "npm-run-all types esbuild",
"build-components": "tsup",
"build-tracker": "rollup -c rollup.tracker.config.js",
"build-prisma-client": "node scripts/build-prisma-client.js",
"build-lang": "npm-run-all format-lang compile-lang download-country-names download-language-names clean-lang",
@ -51,10 +51,7 @@
"postbuild": "node scripts/postbuild.js",
"test": "jest",
"cypress-open": "cypress open cypress run",
"cypress-run": "cypress run cypress run",
"rollup": "rollup -c rollup.components.config.js",
"esbuild": "node esbuild.mjs",
"types": "tsup"
"cypress-run": "cypress run cypress run"
},
"lint-staged": {
"**/*.{js,jsx,ts,tsx}": [
@ -86,7 +83,7 @@
"@svgr/cli": "^8.1.0",
"@tanstack/react-query": "^5.85.5",
"@umami/react-zen": "^0.175.0",
"@umami/redis-client": "^0.27.0",
"@umami/redis-client": "^0.29.0",
"bcryptjs": "^3.0.2",
"chalk": "^5.6.0",
"chart.js": "^4.5.0",
@ -139,7 +136,6 @@
},
"devDependencies": {
"@formatjs/cli": "^4.2.29",
"@hyrious/esbuild-plugin-commonjs": "^0.2.6",
"@netlify/plugin-nextjs": "^5.12.1",
"@rollup/plugin-alias": "^5.0.0",
"@rollup/plugin-commonjs": "^25.0.4",
@ -155,12 +151,10 @@
"@types/react-window": "^1.8.8",
"@typescript-eslint/eslint-plugin": "^8.41.0",
"@typescript-eslint/parser": "^8.41.0",
"@umami/esbuild-plugin-css-modules": "^0.4.0",
"@umami/prisma-client": "^0.19.0",
"babel-plugin-react-compiler": "19.1.0-rc.2",
"cross-env": "^10.0.0",
"cypress": "^13.6.6",
"esbuild": "^0.25.8",
"eslint": "^8.33.0",
"eslint-config-next": "^14.2.32",
"eslint-config-prettier": "^10.1.8",
@ -184,7 +178,6 @@
"rollup-plugin-copy": "^3.4.0",
"rollup-plugin-delete": "^3.0.1",
"rollup-plugin-dts": "^6.2.3",
"rollup-plugin-esbuild": "^6.2.1",
"rollup-plugin-node-externals": "^8.1.0",
"rollup-plugin-peer-deps-external": "^2.2.4",
"rollup-plugin-postcss": "^4.0.2",

95
pnpm-lock.yaml generated
View file

@ -48,8 +48,8 @@ importers:
specifier: ^0.175.0
version: 0.175.0(@babel/core@7.28.3)(@types/react@19.1.12)(babel-plugin-react-compiler@19.1.0-rc.2)(immer@10.1.1)(use-sync-external-store@1.5.0(react@19.1.1))
'@umami/redis-client':
specifier: ^0.27.0
version: 0.27.0
specifier: ^0.29.0
version: 0.29.0
bcryptjs:
specifier: ^3.0.2
version: 3.0.2
@ -201,9 +201,6 @@ importers:
'@formatjs/cli':
specifier: ^4.2.29
version: 4.8.4(ts-jest@29.4.1(@babel/core@7.28.3)(@jest/transform@29.7.0)(@jest/types@30.0.5)(babel-jest@29.7.0(@babel/core@7.28.3))(esbuild@0.25.9)(jest-util@30.0.5)(jest@29.7.0(@types/node@24.3.0)(ts-node@10.9.2(@types/node@24.3.0)(typescript@5.9.2)))(typescript@5.9.2))
'@hyrious/esbuild-plugin-commonjs':
specifier: ^0.2.6
version: 0.2.6(cjs-module-lexer@1.4.3)(esbuild@0.25.9)
'@netlify/plugin-nextjs':
specifier: ^5.12.1
version: 5.12.1
@ -249,9 +246,6 @@ importers:
'@typescript-eslint/parser':
specifier: ^8.41.0
version: 8.41.0(eslint@8.57.1)(typescript@5.9.2)
'@umami/esbuild-plugin-css-modules':
specifier: ^0.4.0
version: 0.4.0
'@umami/prisma-client':
specifier: ^0.19.0
version: 0.19.0(@prisma/adapter-pg@6.15.0)(@prisma/client@6.15.0(prisma@6.15.0(typescript@5.9.2))(typescript@5.9.2))(@prisma/extension-read-replicas@0.4.1(@prisma/client@6.15.0(prisma@6.15.0(typescript@5.9.2))(typescript@5.9.2)))
@ -264,9 +258,6 @@ importers:
cypress:
specifier: ^13.6.6
version: 13.17.0
esbuild:
specifier: ^0.25.8
version: 0.25.9
eslint:
specifier: ^8.33.0
version: 8.57.1
@ -336,9 +327,6 @@ importers:
rollup-plugin-dts:
specifier: ^6.2.3
version: 6.2.3(rollup@4.49.0)(typescript@5.9.2)
rollup-plugin-esbuild:
specifier: ^6.2.1
version: 6.2.1(esbuild@0.25.9)(rollup@4.49.0)
rollup-plugin-node-externals:
specifier: ^8.1.0
version: 8.1.0(rollup@4.49.0)
@ -1207,16 +1195,6 @@ packages:
resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==}
deprecated: Use @eslint/object-schema instead
'@hyrious/esbuild-plugin-commonjs@0.2.6':
resolution: {integrity: sha512-LIPT8Y6EbNaHdV7lS9Ki6nnK0G1fP4bhzlMU1fgbOEJkR+yOA6FCORnPhjbQyeRTjG/ALPXdqCMRxTGwroL9CQ==}
engines: {node: '>=14'}
peerDependencies:
cjs-module-lexer: '*'
esbuild: '*'
peerDependenciesMeta:
cjs-module-lexer:
optional: true
'@img/sharp-darwin-arm64@0.34.3':
resolution: {integrity: sha512-ryFMfvxxpQRsgZJqBd4wsttYQbCxsJksrv9Lw/v798JcQ8+w84mBWuXwl+TT0WJ/WrYOLaYpwQXi3sA9nTIaIg==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
@ -2879,9 +2857,6 @@ packages:
resolution: {integrity: sha512-+GeGMebMCy0elMNg67LRNoVnUFPIm37iu5CmHESVx56/9Jsfdpsvbv605DQ81Pi/x11IdKUsS5nzgTYbCQU9fg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@umami/esbuild-plugin-css-modules@0.4.0':
resolution: {integrity: sha512-OcFbipBJZCmMnJ52/eHkZxpXGQT8Q5bAePgkhpxlreT4zP98grZ6iLzaIkDPFqURQwM/llDhPyNEFRzkSfVYFw==}
'@umami/prisma-client@0.19.0':
resolution: {integrity: sha512-Vnys7MMAPexxmxrC+0q68B/iYmM1LFaP9RjKjffHbLfgZJ3moklJ2ea91cr8+m0CA3+3mqN38WEJI/o/ohOxYQ==}
peerDependencies:
@ -2892,8 +2867,8 @@ packages:
'@umami/react-zen@0.175.0':
resolution: {integrity: sha512-iOUCZwmr09RnqIm01wnjcSTTJ5iJdXRmFlmja2Qf42di/SOOTSBJmu1fKiYESp4dLrXXcmMeDfDqtJli0PPSRw==}
'@umami/redis-client@0.27.0':
resolution: {integrity: sha512-SbHTpxhgeZyTBUSp2zdZM+XUtpsaSL4Tad8QXIEhEtjWhvvfoornyT5kLuyYCVtzSAT4daALeGmOO1z6EE1KcA==}
'@umami/redis-client@0.29.0':
resolution: {integrity: sha512-Jaqh++jskqDB7ny75pfC02OvKp1JTS4asGDsFrRL3qy8sxL3PAl9+/mybCJe4/6vWrXDJKqpgkSfUDJq2bFjyw==}
'@ungap/structured-clone@1.3.0':
resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
@ -4006,9 +3981,6 @@ packages:
resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==}
engines: {node: '>= 0.4'}
es-module-lexer@1.7.0:
resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==}
es-object-atoms@1.1.1:
resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
engines: {node: '>= 0.4'}
@ -6230,11 +6202,6 @@ packages:
peerDependencies:
postcss: ^8.0.0
postcss-modules@6.0.1:
resolution: {integrity: sha512-zyo2sAkVvuZFFy0gc2+4O+xar5dYlaVy/ebO24KT0ftk/iJevSNyPyQellsBLlnccwh7f6V6Y4GvuKRYToNgpQ==}
peerDependencies:
postcss: ^8.0.0
postcss-nesting@10.2.0:
resolution: {integrity: sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==}
engines: {node: ^12 || ^14 || >=16}
@ -6762,13 +6729,6 @@ packages:
rollup: ^3.29.4 || ^4
typescript: ^4.5 || ^5.0
rollup-plugin-esbuild@6.2.1:
resolution: {integrity: sha512-jTNOMGoMRhs0JuueJrJqbW8tOwxumaWYq+V5i+PD+8ecSCVkuX27tGW7BXqDgoULQ55rO7IdNxPcnsWtshz3AA==}
engines: {node: '>=14.18.0'}
peerDependencies:
esbuild: '>=0.18.0'
rollup: ^1.20.0 || ^2.0.0 || ^3.0.0 || ^4.0.0
rollup-plugin-node-externals@8.1.0:
resolution: {integrity: sha512-0D3S0E0Dl1V3Q6Cywnc7wt88VAfOB9AC5QHwVdgvP1vByRHW2wnEXoK0x3VYZzJ/EmGsR5Uix5HUmMJNG+hz2Q==}
engines: {node: '>= 21 || ^20.6.0 || ^18.19.0'}
@ -7491,10 +7451,6 @@ packages:
resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
engines: {node: '>= 10.0.0'}
unplugin-utils@0.2.5:
resolution: {integrity: sha512-gwXJnPRewT4rT7sBi/IvxKTjsms7jX7QIDLOClApuZwR49SXbrB1z2NLUZ+vDHyqCj/n58OzRRqaW+B8OZi8vg==}
engines: {node: '>=18.12.0'}
unrs-resolver@1.11.1:
resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==}
@ -8504,12 +8460,6 @@ snapshots:
'@humanwhocodes/object-schema@2.0.3': {}
'@hyrious/esbuild-plugin-commonjs@0.2.6(cjs-module-lexer@1.4.3)(esbuild@0.25.9)':
dependencies:
esbuild: 0.25.9
optionalDependencies:
cjs-module-lexer: 1.4.3
'@img/sharp-darwin-arm64@0.34.3':
optionalDependencies:
'@img/sharp-libvips-darwin-arm64': 1.2.0
@ -10680,11 +10630,6 @@ snapshots:
'@typescript-eslint/types': 8.41.0
eslint-visitor-keys: 4.2.1
'@umami/esbuild-plugin-css-modules@0.4.0':
dependencies:
postcss: 8.5.6
postcss-modules: 6.0.1(postcss@8.5.6)
'@umami/prisma-client@0.19.0(@prisma/adapter-pg@6.15.0)(@prisma/client@6.15.0(prisma@6.15.0(typescript@5.9.2))(typescript@5.9.2))(@prisma/extension-read-replicas@0.4.1(@prisma/client@6.15.0(prisma@6.15.0(typescript@5.9.2))(typescript@5.9.2)))':
dependencies:
'@prisma/adapter-pg': 6.15.0
@ -10724,7 +10669,7 @@ snapshots:
- sass
- use-sync-external-store
'@umami/redis-client@0.27.0':
'@umami/redis-client@0.29.0':
dependencies:
debug: 4.4.1(supports-color@8.1.1)
redis: 4.7.1
@ -11983,8 +11928,6 @@ snapshots:
iterator.prototype: 1.1.5
safe-array-concat: 1.1.3
es-module-lexer@1.7.0: {}
es-object-atoms@1.1.1:
dependencies:
es-errors: 1.3.0
@ -14523,18 +14466,6 @@ snapshots:
postcss-modules-values: 4.0.0(postcss@8.5.6)
string-hash: 1.1.3
postcss-modules@6.0.1(postcss@8.5.6):
dependencies:
generic-names: 4.0.0
icss-utils: 5.1.0(postcss@8.5.6)
lodash.camelcase: 4.3.0
postcss: 8.5.6
postcss-modules-extract-imports: 3.1.0(postcss@8.5.6)
postcss-modules-local-by-default: 4.2.0(postcss@8.5.6)
postcss-modules-scope: 3.2.1(postcss@8.5.6)
postcss-modules-values: 4.0.0(postcss@8.5.6)
string-hash: 1.1.3
postcss-nesting@10.2.0(postcss@8.5.6):
dependencies:
'@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.1.2)
@ -15200,17 +15131,6 @@ snapshots:
optionalDependencies:
'@babel/code-frame': 7.27.1
rollup-plugin-esbuild@6.2.1(esbuild@0.25.9)(rollup@4.49.0):
dependencies:
debug: 4.4.1(supports-color@8.1.1)
es-module-lexer: 1.7.0
esbuild: 0.25.9
get-tsconfig: 4.10.1
rollup: 4.49.0
unplugin-utils: 0.2.5
transitivePeerDependencies:
- supports-color
rollup-plugin-node-externals@8.1.0(rollup@4.49.0):
dependencies:
rollup: 4.49.0
@ -16069,11 +15989,6 @@ snapshots:
universalify@2.0.1: {}
unplugin-utils@0.2.5:
dependencies:
pathe: 2.0.3
picomatch: 4.0.3
unrs-resolver@1.11.1:
dependencies:
napi-postinstall: 0.3.3

View file

@ -1,77 +0,0 @@
import path from 'path';
import crypto from 'crypto';
import resolve from '@rollup/plugin-node-resolve';
import alias from '@rollup/plugin-alias';
import json from '@rollup/plugin-json';
import postcss from 'rollup-plugin-postcss';
import copy from 'rollup-plugin-copy';
import del from 'rollup-plugin-delete';
import nodeExternals from 'rollup-plugin-node-externals';
import esbuild from 'rollup-plugin-esbuild';
const md5 = str => crypto.createHash('md5').update(str).digest('hex');
const customResolver = resolve({
extensions: ['.js', '.jsx', '.ts', '.tsx'],
});
const aliasConfig = {
entries: [
{ find: /^@/, replacement: path.resolve('./src/') },
{ find: /^public/, replacement: path.resolve('./public') },
],
customResolver,
};
const clientConfig = {
input: 'src/index.client.ts',
output: [
{
file: 'dist/client/index.js',
format: 'es',
sourcemap: true,
},
],
plugins: [
del({ targets: 'dist/*', runOnce: true }),
copy({ targets: [{ src: './package.components.json', dest: 'dist', rename: 'package.json' }] }),
postcss({
config: false,
extract: 'styles.css',
sourceMap: true,
minimize: true,
modules: {
generateScopedName: function (name, filename, css) {
const file = path.basename(filename, '.css').replace('.module', '');
const hash = Buffer.from(md5(`${name}:${filename}:${css}`))
.toString('base64')
.substring(0, 5);
return `${file}-${name}--${hash}`;
},
},
}),
alias(aliasConfig),
nodeExternals(),
json(),
esbuild({
target: 'es6',
jsx: 'automatic',
loaders: {
'.js': 'jsx',
},
}),
],
};
const serverConfig = {
input: 'src/index.server.ts',
output: {
file: 'dist/server/index.ts',
format: 'es',
},
plugins: [alias(aliasConfig), nodeExternals(), json()],
external: [/\.css/],
};
export default [clientConfig, serverConfig];

View file

@ -2,7 +2,7 @@ import { z } from 'zod';
import { parseRequest } from '@/lib/request';
import { json, unauthorized } from '@/lib/response';
import { pagingParams, searchParams } from '@/lib/schema';
import { canViewAllTeams } from '@/validations';
import { canViewAllTeams } from '@/permissions';
import { getTeams } from '@/queries/prisma/team';
export async function GET(request: Request) {

View file

@ -2,7 +2,7 @@ import { z } from 'zod';
import { parseRequest } from '@/lib/request';
import { json, unauthorized } from '@/lib/response';
import { pagingParams, searchParams } from '@/lib/schema';
import { canViewUsers } from '@/validations';
import { canViewUsers } from '@/permissions';
import { getUsers } from '@/queries/prisma/user';
export async function GET(request: Request) {

View file

@ -2,7 +2,7 @@ import { z } from 'zod';
import { parseRequest } from '@/lib/request';
import { json, unauthorized } from '@/lib/response';
import { pagingParams, searchParams } from '@/lib/schema';
import { canViewAllWebsites } from '@/validations';
import { canViewAllWebsites } from '@/permissions';
import { getWebsites } from '@/queries/prisma/website';
import { ROLES } from '@/lib/constants';

View file

@ -1,5 +1,5 @@
import { z } from 'zod';
import { canUpdateLink, canDeleteLink, canViewLink } from '@/validations';
import { canUpdateLink, canDeleteLink, canViewLink } from '@/permissions';
import { parseRequest } from '@/lib/request';
import { ok, json, unauthorized, serverError, badRequest } from '@/lib/response';
import { deleteLink, getLink, updateLink } from '@/queries';

View file

@ -1,5 +1,5 @@
import { z } from 'zod';
import { canCreateTeamWebsite, canCreateWebsite } from '@/validations';
import { canCreateTeamWebsite, canCreateWebsite } from '@/permissions';
import { json, unauthorized } from '@/lib/response';
import { uuid } from '@/lib/crypto';
import { getQueryFilters, parseRequest } from '@/lib/request';

View file

@ -1,5 +1,5 @@
import { z } from 'zod';
import { canUpdatePixel, canDeletePixel, canViewPixel } from '@/validations';
import { canUpdatePixel, canDeletePixel, canViewPixel } from '@/permissions';
import { parseRequest } from '@/lib/request';
import { ok, json, unauthorized, serverError, badRequest } from '@/lib/response';
import { deletePixel, getPixel, updatePixel } from '@/queries';

View file

@ -1,5 +1,5 @@
import { z } from 'zod';
import { canCreateTeamWebsite, canCreateWebsite } from '@/validations';
import { canCreateTeamWebsite, canCreateWebsite } from '@/permissions';
import { json, unauthorized } from '@/lib/response';
import { uuid } from '@/lib/crypto';
import { getQueryFilters, parseRequest } from '@/lib/request';

View file

@ -1,6 +1,6 @@
import { json, unauthorized } from '@/lib/response';
import { getRealtimeData } from '@/queries';
import { canViewWebsite } from '@/validations';
import { canViewWebsite } from '@/permissions';
import { startOfMinute, subMinutes } from 'date-fns';
import { REALTIME_RANGE } from '@/lib/constants';
import { parseRequest, getQueryFilters } from '@/lib/request';

View file

@ -1,6 +1,6 @@
import { parseRequest } from '@/lib/request';
import { deleteReport, getReport, updateReport } from '@/queries';
import { canDeleteReport, canUpdateReport, canViewReport } from '@/validations';
import { canDeleteReport, canUpdateReport, canViewReport } from '@/permissions';
import { unauthorized, json, notFound, ok } from '@/lib/response';
import { reportSchema } from '@/lib/schema';

View file

@ -1,4 +1,4 @@
import { canViewWebsite } from '@/validations';
import { canViewWebsite } from '@/permissions';
import { getQueryFilters, parseRequest, setWebsiteDate } from '@/lib/request';
import { json, unauthorized } from '@/lib/response';
import { reportResultSchema } from '@/lib/schema';

View file

@ -1,4 +1,4 @@
import { canViewWebsite } from '@/validations';
import { canViewWebsite } from '@/permissions';
import { unauthorized, json } from '@/lib/response';
import { getQueryFilters, parseRequest, setWebsiteDate } from '@/lib/request';
import { BreakdownParameters, getBreakdown } from '@/queries';

View file

@ -1,4 +1,4 @@
import { canViewWebsite } from '@/validations';
import { canViewWebsite } from '@/permissions';
import { unauthorized, json } from '@/lib/response';
import { parseRequest, getQueryFilters, setWebsiteDate } from '@/lib/request';
import { FunnelParameters, getFunnel } from '@/queries';

View file

@ -1,4 +1,4 @@
import { canViewWebsite } from '@/validations';
import { canViewWebsite } from '@/permissions';
import { unauthorized, json } from '@/lib/response';
import { getQueryFilters, parseRequest, setWebsiteDate } from '@/lib/request';
import { getGoal, GoalParameters } from '@/queries/sql/reports/getGoal';

View file

@ -1,4 +1,4 @@
import { canViewWebsite } from '@/validations';
import { canViewWebsite } from '@/permissions';
import { unauthorized, json } from '@/lib/response';
import { getQueryFilters, parseRequest } from '@/lib/request';
import { getJourney } from '@/queries';

View file

@ -1,4 +1,4 @@
import { canViewWebsite } from '@/validations';
import { canViewWebsite } from '@/permissions';
import { unauthorized, json } from '@/lib/response';
import { parseRequest, getQueryFilters, setWebsiteDate } from '@/lib/request';
import { getRetention, RetentionParameters } from '@/queries';

View file

@ -1,4 +1,4 @@
import { canViewWebsite } from '@/validations';
import { canViewWebsite } from '@/permissions';
import { unauthorized, json } from '@/lib/response';
import { parseRequest, getQueryFilters, setWebsiteDate } from '@/lib/request';
import { reportResultSchema } from '@/lib/schema';

View file

@ -2,7 +2,7 @@ import { z } from 'zod';
import { uuid } from '@/lib/crypto';
import { pagingParams, reportSchema } from '@/lib/schema';
import { parseRequest } from '@/lib/request';
import { canViewWebsite, canUpdateWebsite } from '@/validations';
import { canViewWebsite, canUpdateWebsite } from '@/permissions';
import { unauthorized, json } from '@/lib/response';
import { getReports, createReport } from '@/queries';

View file

@ -1,4 +1,4 @@
import { canViewWebsite } from '@/validations';
import { canViewWebsite } from '@/permissions';
import { unauthorized, json } from '@/lib/response';
import { getQueryFilters, parseRequest, setWebsiteDate } from '@/lib/request';
import { getUTM, UTMParameters } from '@/queries';

View file

@ -1,6 +1,6 @@
import { z } from 'zod';
import { unauthorized, json } from '@/lib/response';
import { canViewTeam } from '@/validations';
import { canViewTeam } from '@/permissions';
import { getQueryFilters, parseRequest } from '@/lib/request';
import { pagingParams, searchParams } from '@/lib/schema';
import { getTeamLinks } from '@/queries';

View file

@ -1,6 +1,6 @@
import { z } from 'zod';
import { unauthorized, json } from '@/lib/response';
import { canViewTeam } from '@/validations';
import { canViewTeam } from '@/permissions';
import { getQueryFilters, parseRequest } from '@/lib/request';
import { pagingParams, searchParams } from '@/lib/schema';
import { getTeamPixels } from '@/queries';

View file

@ -1,6 +1,6 @@
import { z } from 'zod';
import { unauthorized, json, notFound, ok } from '@/lib/response';
import { canDeleteTeam, canUpdateTeam, canViewTeam } from '@/validations';
import { canDeleteTeam, canUpdateTeam, canViewTeam } from '@/permissions';
import { parseRequest } from '@/lib/request';
import { deleteTeam, getTeam, updateTeam } from '@/queries';

View file

@ -1,4 +1,4 @@
import { canDeleteTeamUser, canUpdateTeam } from '@/validations';
import { canDeleteTeamUser, canUpdateTeam } from '@/permissions';
import { parseRequest } from '@/lib/request';
import { badRequest, json, ok, unauthorized } from '@/lib/response';
import { deleteTeamUser, getTeamUser, updateTeamUser } from '@/queries';

View file

@ -1,6 +1,6 @@
import { z } from 'zod';
import { unauthorized, json, badRequest } from '@/lib/response';
import { canAddUserToTeam, canViewTeam } from '@/validations';
import { canAddUserToTeam, canViewTeam } from '@/permissions';
import { getQueryFilters, parseRequest } from '@/lib/request';
import { pagingParams, teamRoleParam, searchParams } from '@/lib/schema';
import { createTeamUser, getTeamUser, getTeamUsers } from '@/queries';

View file

@ -1,6 +1,6 @@
import { z } from 'zod';
import { unauthorized, json } from '@/lib/response';
import { canViewTeam } from '@/validations';
import { canViewTeam } from '@/permissions';
import { getQueryFilters, parseRequest } from '@/lib/request';
import { pagingParams, searchParams } from '@/lib/schema';
import { getTeamWebsites } from '@/queries';

View file

@ -1,6 +1,6 @@
import { z } from 'zod';
import { unauthorized, json, badRequest, notFound } from '@/lib/response';
import { canCreateTeam } from '@/validations';
import { canCreateTeam } from '@/permissions';
import { parseRequest } from '@/lib/request';
import { ROLES } from '@/lib/constants';
import { createTeamUser, findTeam, getTeamUser } from '@/queries';

View file

@ -1,7 +1,7 @@
import { z } from 'zod';
import { getRandomChars } from '@/lib/generate';
import { unauthorized, json } from '@/lib/response';
import { canCreateTeam } from '@/validations';
import { canCreateTeam } from '@/permissions';
import { uuid } from '@/lib/crypto';
import { parseRequest } from '@/lib/request';
import { createTeam } from '@/queries';

View file

@ -1,5 +1,5 @@
import { z } from 'zod';
import { canUpdateUser, canViewUser, canDeleteUser } from '@/validations';
import { canUpdateUser, canViewUser, canDeleteUser } from '@/permissions';
import { getUser, getUserByUsername, updateUser, deleteUser } from '@/queries';
import { json, unauthorized, badRequest, ok } from '@/lib/response';
import { hashPassword } from '@/lib/auth';

View file

@ -1,6 +1,6 @@
import { z } from 'zod';
import { hashPassword } from '@/lib/auth';
import { canCreateUser } from '@/validations';
import { canCreateUser } from '@/permissions';
import { ROLES } from '@/lib/constants';
import { uuid } from '@/lib/crypto';
import { parseRequest } from '@/lib/request';

View file

@ -1,4 +1,4 @@
import { canViewWebsite } from '@/validations';
import { canViewWebsite } from '@/permissions';
import { json, unauthorized } from '@/lib/response';
import { getActiveVisitors } from '@/queries';
import { parseRequest } from '@/lib/request';

View file

@ -1,4 +1,4 @@
import { canViewWebsite } from '@/validations';
import { canViewWebsite } from '@/permissions';
import { getWebsiteDateRange } from '@/queries';
import { json, unauthorized } from '@/lib/response';
import { parseRequest } from '@/lib/request';

View file

@ -1,6 +1,6 @@
import { parseRequest } from '@/lib/request';
import { unauthorized, json } from '@/lib/response';
import { canViewWebsite } from '@/validations';
import { canViewWebsite } from '@/permissions';
import { getEventData } from '@/queries/sql/events/getEventData';
export async function GET(

View file

@ -1,7 +1,7 @@
import { z } from 'zod';
import { getQueryFilters, parseRequest } from '@/lib/request';
import { unauthorized, json } from '@/lib/response';
import { canViewWebsite } from '@/validations';
import { canViewWebsite } from '@/permissions';
import { getEventDataEvents } from '@/queries/sql/events/getEventDataEvents';
export async function GET(

View file

@ -1,7 +1,7 @@
import { z } from 'zod';
import { getQueryFilters, parseRequest } from '@/lib/request';
import { unauthorized, json } from '@/lib/response';
import { canViewWebsite } from '@/validations';
import { canViewWebsite } from '@/permissions';
import { getEventDataFields } from '@/queries';
export async function GET(

View file

@ -1,7 +1,7 @@
import { z } from 'zod';
import { getQueryFilters, parseRequest } from '@/lib/request';
import { unauthorized, json } from '@/lib/response';
import { canViewWebsite } from '@/validations';
import { canViewWebsite } from '@/permissions';
import { getEventDataProperties } from '@/queries';
export async function GET(

View file

@ -1,7 +1,7 @@
import { z } from 'zod';
import { getQueryFilters, parseRequest } from '@/lib/request';
import { unauthorized, json } from '@/lib/response';
import { canViewWebsite } from '@/validations';
import { canViewWebsite } from '@/permissions';
import { getEventDataStats } from '@/queries';
export async function GET(

View file

@ -1,7 +1,7 @@
import { z } from 'zod';
import { getQueryFilters, parseRequest } from '@/lib/request';
import { unauthorized, json } from '@/lib/response';
import { canViewWebsite } from '@/validations';
import { canViewWebsite } from '@/permissions';
import { getEventDataValues } from '@/queries';
export async function GET(

View file

@ -1,7 +1,7 @@
import { z } from 'zod';
import { getQueryFilters, parseRequest } from '@/lib/request';
import { unauthorized, json } from '@/lib/response';
import { canViewWebsite } from '@/validations';
import { canViewWebsite } from '@/permissions';
import { dateRangeParams, pagingParams, filterParams, searchParams } from '@/lib/schema';
import { getWebsiteEvents } from '@/queries';

View file

@ -1,7 +1,7 @@
import { z } from 'zod';
import { parseRequest, getQueryFilters } from '@/lib/request';
import { unauthorized, json } from '@/lib/response';
import { canViewWebsite } from '@/validations';
import { canViewWebsite } from '@/permissions';
import { filterParams, timezoneParam, unitParam } from '@/lib/schema';
import { getEventStats } from '@/queries';

View file

@ -3,7 +3,7 @@ import JSZip from 'jszip';
import Papa from 'papaparse';
import { getQueryFilters, parseRequest } from '@/lib/request';
import { unauthorized, json } from '@/lib/response';
import { canViewWebsite } from '@/validations';
import { canViewWebsite } from '@/permissions';
import { pagingParams, dateRangeParams } from '@/lib/schema';
import { getEventMetrics, getPageviewMetrics, getSessionMetrics } from '@/queries';

View file

@ -1,4 +1,4 @@
import { canViewWebsite } from '@/validations';
import { canViewWebsite } from '@/permissions';
import { EVENT_COLUMNS, SESSION_COLUMNS } from '@/lib/constants';
import { getQueryFilters, parseRequest } from '@/lib/request';
import { badRequest, json, unauthorized } from '@/lib/response';

View file

@ -1,4 +1,4 @@
import { canViewWebsite } from '@/validations';
import { canViewWebsite } from '@/permissions';
import { EVENT_COLUMNS, SESSION_COLUMNS } from '@/lib/constants';
import { getQueryFilters, parseRequest } from '@/lib/request';
import { badRequest, json, unauthorized } from '@/lib/response';

View file

@ -1,5 +1,5 @@
import { z } from 'zod';
import { canViewWebsite } from '@/validations';
import { canViewWebsite } from '@/permissions';
import { getQueryFilters, parseRequest } from '@/lib/request';
import { dateRangeParams, filterParams } from '@/lib/schema';
import { getCompareDate } from '@/lib/date';

View file

@ -1,5 +1,5 @@
import { z } from 'zod';
import { canViewWebsite } from '@/validations';
import { canViewWebsite } from '@/permissions';
import { getReports } from '@/queries';
import { filterParams, pagingParams } from '@/lib/schema';
import { parseRequest } from '@/lib/request';

View file

@ -1,4 +1,4 @@
import { canUpdateWebsite } from '@/validations';
import { canUpdateWebsite } from '@/permissions';
import { resetWebsite } from '@/queries';
import { unauthorized, ok } from '@/lib/response';
import { parseRequest } from '@/lib/request';

View file

@ -1,5 +1,5 @@
import { z } from 'zod';
import { canUpdateWebsite, canDeleteWebsite, canViewWebsite } from '@/validations';
import { canUpdateWebsite, canDeleteWebsite, canViewWebsite } from '@/permissions';
import { SHARE_ID_REGEX } from '@/lib/constants';
import { parseRequest } from '@/lib/request';
import { ok, json, unauthorized, serverError, badRequest } from '@/lib/response';

View file

@ -1,4 +1,4 @@
import { canDeleteWebsite, canUpdateWebsite, canViewWebsite } from '@/validations';
import { canDeleteWebsite, canUpdateWebsite, canViewWebsite } from '@/permissions';
import { parseRequest } from '@/lib/request';
import { json, notFound, ok, unauthorized } from '@/lib/response';
import { segmentTypeParam } from '@/lib/schema';

View file

@ -1,4 +1,4 @@
import { canUpdateWebsite, canViewWebsite } from '@/validations';
import { canUpdateWebsite, canViewWebsite } from '@/permissions';
import { uuid } from '@/lib/crypto';
import { getQueryFilters, parseRequest } from '@/lib/request';
import { json, unauthorized } from '@/lib/response';

View file

@ -1,7 +1,7 @@
import { z } from 'zod';
import { getQueryFilters, parseRequest } from '@/lib/request';
import { unauthorized, json } from '@/lib/response';
import { canViewWebsite } from '@/validations';
import { canViewWebsite } from '@/permissions';
import { getSessionDataProperties } from '@/queries';
export async function GET(

View file

@ -1,4 +1,4 @@
import { canViewWebsite } from '@/validations';
import { canViewWebsite } from '@/permissions';
import { getQueryFilters, parseRequest } from '@/lib/request';
import { json, unauthorized } from '@/lib/response';
import { getSessionDataValues } from '@/queries';

View file

@ -1,7 +1,7 @@
import { z } from 'zod';
import { parseRequest, getQueryFilters } from '@/lib/request';
import { unauthorized, json } from '@/lib/response';
import { canViewWebsite } from '@/validations';
import { canViewWebsite } from '@/permissions';
import { getSessionActivity } from '@/queries';
export async function GET(

View file

@ -1,5 +1,5 @@
import { unauthorized, json } from '@/lib/response';
import { canViewWebsite } from '@/validations';
import { canViewWebsite } from '@/permissions';
import { getSessionData } from '@/queries';
import { parseRequest } from '@/lib/request';

View file

@ -1,5 +1,5 @@
import { unauthorized, json } from '@/lib/response';
import { canViewWebsite } from '@/validations';
import { canViewWebsite } from '@/permissions';
import { getWebsiteSession } from '@/queries';
import { parseRequest } from '@/lib/request';

View file

@ -1,7 +1,7 @@
import { z } from 'zod';
import { getQueryFilters, parseRequest } from '@/lib/request';
import { unauthorized, json } from '@/lib/response';
import { canViewWebsite } from '@/validations';
import { canViewWebsite } from '@/permissions';
import { dateRangeParams, filterParams, pagingParams, searchParams } from '@/lib/schema';
import { getWebsiteSessions } from '@/queries';

View file

@ -1,7 +1,7 @@
import { z } from 'zod';
import { parseRequest, getQueryFilters } from '@/lib/request';
import { unauthorized, json } from '@/lib/response';
import { canViewWebsite } from '@/validations';
import { canViewWebsite } from '@/permissions';
import { filterParams } from '@/lib/schema';
import { getWebsiteSessionStats } from '@/queries';

View file

@ -1,7 +1,7 @@
import { z } from 'zod';
import { getQueryFilters, parseRequest } from '@/lib/request';
import { unauthorized, json } from '@/lib/response';
import { canViewWebsite } from '@/validations';
import { canViewWebsite } from '@/permissions';
import { pagingParams, timezoneParam } from '@/lib/schema';
import { getWeeklyTraffic } from '@/queries';

View file

@ -1,7 +1,7 @@
import { z } from 'zod';
import { parseRequest, getQueryFilters } from '@/lib/request';
import { unauthorized, json } from '@/lib/response';
import { canViewWebsite } from '@/validations';
import { canViewWebsite } from '@/permissions';
import { dateRangeParams, filterParams } from '@/lib/schema';
import { getWebsiteStats } from '@/queries';
import { getCompareDate } from '@/lib/date';

View file

@ -1,5 +1,5 @@
import { z } from 'zod';
import { canTransferWebsiteToTeam, canTransferWebsiteToUser } from '@/validations';
import { canTransferWebsiteToTeam, canTransferWebsiteToUser } from '@/permissions';
import { updateWebsite } from '@/queries';
import { parseRequest } from '@/lib/request';
import { badRequest, unauthorized, json } from '@/lib/response';

View file

@ -1,4 +1,4 @@
import { canViewWebsite } from '@/validations';
import { canViewWebsite } from '@/permissions';
import { EVENT_COLUMNS, FILTER_COLUMNS, SEGMENT_TYPES, SESSION_COLUMNS } from '@/lib/constants';
import { getQueryFilters, parseRequest } from '@/lib/request';
import { badRequest, json, unauthorized } from '@/lib/response';

View file

@ -1,5 +1,5 @@
import { z } from 'zod';
import { canCreateTeamWebsite, canCreateWebsite } from '@/validations';
import { canCreateTeamWebsite, canCreateWebsite } from '@/permissions';
import { json, unauthorized } from '@/lib/response';
import { uuid } from '@/lib/crypto';
import { parseRequest } from '@/lib/request';

View file

@ -1,38 +0,0 @@
.row {
display: flex;
align-items: center;
gap: 10px;
width: 100%;
}
.row.inactive {
color: var(--base500);
}
.row.inactive img {
opacity: 0.35;
}
.row.active {
color: var(--base900);
font-weight: 600;
}
.row .link {
display: none;
margin-inline-start: 20px;
}
.row .label {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.row:hover .link {
display: block;
}
.icon {
cursor: pointer;
}

View file

@ -1,9 +0,0 @@
.button {
display: none;
}
@media only screen and (max-width: 768px) {
.button {
display: flex;
}
}

View file

@ -3,8 +3,10 @@ import { ReactNode } from 'react';
import { AlertBanner, Loading, Column, ColumnProps } from '@umami/react-zen';
import { useMessages } from '@/components/hooks';
const DEFAULT_WIDTH = '1320px';
export function PageBody({
maxWidth = '1320px',
maxWidth = DEFAULT_WIDTH,
error,
isLoading,
children,

View file

@ -10,7 +10,7 @@ const selector = (state: { shareToken: { token?: string } }) => state.shareToken
async function handleResponse(res: FetchResponse): Promise<any> {
if (res.error) {
const { message, code } = res?.error?.error || {};
return Promise.reject(new Error(code || message || 'Unexpectd error.'));
return Promise.reject(new Error(code || message || 'Unexpected error.'));
}
return Promise.resolve(res.data);
}

View file

@ -1,12 +0,0 @@
export * as auth from '@/lib/auth';
export * as clickhouse from '@/lib/clickhouse';
export * as client from '@/lib/client';
export { ROLES } from '@/lib/constants';
export * as fetch from '@/lib/fetch';
export * as prisma from '@/lib/prisma';
export * as redis from '@/lib/redis';
export * as request from '@/lib/request';
export * as response from '@/lib/response';
export * as storage from '@/lib/storage';
export * as url from '@/lib/url';
export * as utils from '@/lib/utils';

View file

@ -40,15 +40,24 @@ export * from '@/app/(main)/websites/WebsitesTable';
export * from '@/app/(main)/websites/WebsiteProvider';
export * from '@/components/common/ActionForm';
export * from '@/components/common/ConfirmationForm';
export * from '@/components/common/DataGrid';
export * from '@/components/common/DateDisplay';
export * from '@/components/common/DateDistance';
export * from '@/components/common/Empty';
export * from '@/components/common/EmptyPlaceholder';
export * from '@/components/common/ErrorBoundary';
export * from '@/components/common/ErrorMessage';
export * from '@/components/common/ExternalLink';
export * from '@/components/common/Favicon';
export * from '@/components/common/FilterLink';
export * from '@/components/common/LinkButton';
export * from '@/components/common/PageBody';
export * from '@/components/common/PageHeader';
export * from '@/components/common/Pager';
export * from '@/components/common/Panel';
export * from '@/components/common/SectionHeader';
export * from '@/components/common/SideMenu';
export * from '@/components/common/TypeConfirmationForm';
export * from '@/components/input/FilterButtons';

View file

@ -4,7 +4,7 @@ const REDIS = 'redis';
const enabled = !!process.env.REDIS_URL;
function getClient() {
const redis = new UmamiRedisClient(process.env.REDIS_URL);
const redis = new UmamiRedisClient({ url: process.env.REDIS_URL });
if (process.env.NODE_ENV !== 'production') {
globalThis[REDIS] = redis;

15
tsup.config.js Normal file
View file

@ -0,0 +1,15 @@
import { defineConfig } from 'tsup';
export default defineConfig({
entry: { index: 'src/index.ts' },
format: ['esm'],
outDir: 'dist',
dts: true,
splitting: false,
sourcemap: false,
clean: true,
external: ['react', 'react-dom', 'react/jsx-runtime', '@swc/helpers'],
esbuildOptions(options) {
options.jsx = 'automatic';
},
});

View file

@ -1,23 +0,0 @@
import { defineConfig } from 'tsup';
export default defineConfig([
{
entry: { index: 'src/index.client.ts' },
format: ['esm'],
outDir: 'dist/client',
dts: true,
splitting: false,
sourcemap: false,
clean: true,
external: ['react', 'react-dom', 'react/jsx-runtime'],
},
{
entry: { index: 'src/index.server.ts' },
format: ['esm'],
outDir: 'dist/server',
dts: true,
splitting: false,
sourcemap: false,
clean: true,
},
]);