@mesob/common 0.0.1 → 0.0.3

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 (40) hide show
  1. package/dist/entity/entity-filter-condition.d.ts +7 -0
  2. package/dist/entity/entity-filter-condition.js +54 -0
  3. package/dist/entity/entity-filter-condition.js.map +1 -0
  4. package/dist/entity/entity-list-request-schema.d.ts +40 -0
  5. package/dist/entity/entity-list-request-schema.js +64 -0
  6. package/dist/entity/entity-list-request-schema.js.map +1 -0
  7. package/dist/entity/entity-list-request.d.ts +17 -0
  8. package/dist/entity/entity-list-request.js +1 -0
  9. package/dist/entity/entity-list-request.js.map +1 -0
  10. package/dist/entity/entity-list-response.d.ts +6 -0
  11. package/dist/entity/entity-list-response.js +1 -0
  12. package/dist/entity/entity-list-response.js.map +1 -0
  13. package/dist/entity/entity-list.d.ts +37 -0
  14. package/dist/entity/entity-list.js +121 -0
  15. package/dist/entity/entity-list.js.map +1 -0
  16. package/dist/entity/entity-pagination.d.ts +12 -0
  17. package/dist/entity/entity-pagination.js +10 -0
  18. package/dist/entity/entity-pagination.js.map +1 -0
  19. package/dist/index.d.ts +10 -0
  20. package/dist/index.js +316 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/lib/dayjs/index.d.ts +2 -0
  23. package/dist/lib/dayjs/index.js +27 -0
  24. package/dist/lib/dayjs/index.js.map +1 -0
  25. package/dist/utility/logger.d.ts +16 -0
  26. package/dist/utility/logger.js +50 -0
  27. package/dist/utility/logger.js.map +1 -0
  28. package/package.json +37 -6
  29. package/.turbo/turbo-check-types.log +0 -5
  30. package/src/entity/entity-filter-condition.ts +0 -79
  31. package/src/entity/entity-list-request-schema.ts +0 -94
  32. package/src/entity/entity-list-request.ts +0 -27
  33. package/src/entity/entity-list-response.ts +0 -4
  34. package/src/entity/entity-list.ts +0 -201
  35. package/src/entity/entity-pagination.ts +0 -14
  36. package/src/index.ts +0 -11
  37. package/src/lib/dayjs/index.ts +0 -27
  38. package/src/types.ts +0 -26
  39. package/src/utility/logger.ts +0 -56
  40. package/tsconfig.json +0 -17
package/dist/index.js ADDED
@@ -0,0 +1,316 @@
1
+ // src/entity/entity-filter-condition.ts
2
+ import {
3
+ eq,
4
+ gt,
5
+ gte,
6
+ ilike,
7
+ isNull,
8
+ like,
9
+ lt,
10
+ lte,
11
+ ne,
12
+ not
13
+ } from "drizzle-orm";
14
+ var operatorMap = {
15
+ eq: (col, val) => eq(col, val),
16
+ neq: (col, val) => ne(col, val),
17
+ gt: (col, val) => gt(col, val),
18
+ gte: (col, val) => gte(col, val),
19
+ lt: (col, val) => lt(col, val),
20
+ lte: (col, val) => lte(col, val),
21
+ like: (col, val) => like(col, val),
22
+ ilike: (col, val) => ilike(col, val)
23
+ };
24
+ var buildCondition = (column, value, operator = "eq") => {
25
+ if (operator === "is") {
26
+ return isNull(column);
27
+ }
28
+ if (operator === "is_not") {
29
+ return not(isNull(column));
30
+ }
31
+ const fn = operatorMap[operator];
32
+ return fn ? fn(column, value) : void 0;
33
+ };
34
+ var entityFilterCondition = (filters, columnMap) => {
35
+ if (!filters) {
36
+ return [];
37
+ }
38
+ const conditions = [];
39
+ for (const filter of filters) {
40
+ const col = columnMap[filter.f];
41
+ if (!col) {
42
+ continue;
43
+ }
44
+ const condition = buildCondition(col, filter.v, filter.o ?? "eq");
45
+ if (condition) {
46
+ conditions.push(condition);
47
+ }
48
+ }
49
+ return conditions;
50
+ };
51
+
52
+ // src/entity/entity-list.ts
53
+ import {
54
+ eq as eq2,
55
+ gt as gt2,
56
+ gte as gte2,
57
+ ilike as ilike2,
58
+ isNull as isNull2,
59
+ like as like2,
60
+ lt as lt2,
61
+ lte as lte2,
62
+ ne as ne2,
63
+ not as not2,
64
+ or
65
+ } from "drizzle-orm";
66
+ var operatorMap2 = {
67
+ eq: (col, val) => eq2(
68
+ col,
69
+ val ?? ""
70
+ ),
71
+ neq: (col, val) => ne2(
72
+ col,
73
+ val ?? ""
74
+ ),
75
+ gt: (col, val) => gt2(
76
+ col,
77
+ val ?? ""
78
+ ),
79
+ gte: (col, val) => gte2(
80
+ col,
81
+ val ?? ""
82
+ ),
83
+ lt: (col, val) => lt2(
84
+ col,
85
+ val ?? ""
86
+ ),
87
+ lte: (col, val) => lte2(
88
+ col,
89
+ val ?? ""
90
+ ),
91
+ like: (col, val) => like2(
92
+ col,
93
+ val ?? ""
94
+ ),
95
+ ilike: (col, val) => ilike2(
96
+ col,
97
+ val ?? ""
98
+ )
99
+ };
100
+ var entityList = ({
101
+ search = [],
102
+ filter,
103
+ booleanFilter,
104
+ orderByConfig = { column: "createdAt", direction: "desc" },
105
+ p = 1,
106
+ pp = 10,
107
+ tenantId,
108
+ entity,
109
+ skipTenantIdFilter = false
110
+ }) => {
111
+ const page = Number(p);
112
+ const pageSize = Number(pp);
113
+ const conditions = [];
114
+ if (tenantId && !skipTenantIdFilter && "tenantId" in entity) {
115
+ const tenantColumn = entity.tenantId;
116
+ conditions.push(eq2(tenantColumn, tenantId));
117
+ }
118
+ if (search.length > 0) {
119
+ const searchConditions = search.map((column) => column);
120
+ const searchCondition = or(...searchConditions);
121
+ if (searchCondition) {
122
+ conditions.push(searchCondition);
123
+ }
124
+ }
125
+ if (filter) {
126
+ conditions.push(
127
+ ...filter.map((column) => {
128
+ const op = column.o ?? "eq";
129
+ const columnObj = entity[column.f];
130
+ if (!columnObj) {
131
+ throw new Error(`Column '${column.f}' not found on entity`);
132
+ }
133
+ if (op === "is") {
134
+ return isNull2(columnObj);
135
+ }
136
+ if (op === "is_not") {
137
+ return not2(isNull2(columnObj));
138
+ }
139
+ const operatorFn = operatorMap2[op];
140
+ if (!operatorFn) {
141
+ throw new Error(`Unsupported operator: ${op}`);
142
+ }
143
+ return operatorFn(columnObj, column.v);
144
+ })
145
+ );
146
+ }
147
+ if (booleanFilter) {
148
+ conditions.push(eq2(booleanFilter.column, booleanFilter.value));
149
+ }
150
+ return {
151
+ conditions,
152
+ orderByConfig,
153
+ offset: (page - 1) * pageSize,
154
+ limit: pageSize
155
+ };
156
+ };
157
+ var entityResponse = (result) => {
158
+ const total = result.length > 0 ? result[0].totalCount : 0;
159
+ const data = result.map((item) => {
160
+ const { totalCount, ...rest } = item;
161
+ return rest;
162
+ });
163
+ return {
164
+ data,
165
+ total
166
+ };
167
+ };
168
+
169
+ // src/entity/entity-list-request-schema.ts
170
+ import { z } from "zod";
171
+ var entityListRequestSchema = z.object({
172
+ s: z.string().optional().describe("Search term"),
173
+ l: z.coerce.number().min(1).max(100).optional().describe("Limit (per page)"),
174
+ f: z.union([
175
+ z.array(
176
+ z.object({
177
+ f: z.string().describe("Field name"),
178
+ v: z.string().describe("Field value"),
179
+ o: z.enum([
180
+ "eq",
181
+ "neq",
182
+ "gt",
183
+ "gte",
184
+ "lt",
185
+ "lte",
186
+ "like",
187
+ "ilike",
188
+ "is",
189
+ "is_not"
190
+ ]).optional().default("eq").describe("Filter operator")
191
+ })
192
+ ),
193
+ z.string().transform((str, ctx) => {
194
+ try {
195
+ return JSON.parse(str);
196
+ } catch {
197
+ ctx.addIssue({
198
+ code: z.ZodIssueCode.custom,
199
+ message: "Invalid JSON string for filter"
200
+ });
201
+ return z.NEVER;
202
+ }
203
+ })
204
+ ]).optional().describe("Filters"),
205
+ o: z.union([
206
+ z.object({
207
+ f: z.string().describe("Order field"),
208
+ d: z.enum(["asc", "desc"]).default("desc").describe("Order direction")
209
+ }),
210
+ z.string().transform((str, ctx) => {
211
+ try {
212
+ const parsed = JSON.parse(str);
213
+ return {
214
+ f: parsed.f,
215
+ d: parsed.d || "desc"
216
+ };
217
+ } catch {
218
+ ctx.addIssue({
219
+ code: z.ZodIssueCode.custom,
220
+ message: "Invalid JSON string for order"
221
+ });
222
+ return z.NEVER;
223
+ }
224
+ })
225
+ ]).optional().describe("Ordering"),
226
+ p: z.coerce.number().min(1).optional().describe("Page number"),
227
+ pp: z.coerce.number().min(1).max(100).optional().describe("Per page")
228
+ }).strict();
229
+
230
+ // src/entity/entity-pagination.ts
231
+ var entityPaginatedRows = (rows) => {
232
+ const total = rows[0]?.totalCount ?? 0;
233
+ const data = rows.map(({ totalCount: _, ...rest }) => rest);
234
+ return { data, total };
235
+ };
236
+
237
+ // src/lib/dayjs/index.ts
238
+ import dayjs from "dayjs";
239
+ import customParseFormat from "dayjs/plugin/customParseFormat";
240
+ import duration from "dayjs/plugin/duration";
241
+ import isBetween from "dayjs/plugin/isBetween";
242
+ import isToday from "dayjs/plugin/isToday";
243
+ import localizedFormat from "dayjs/plugin/localizedFormat";
244
+ import minmax from "dayjs/plugin/minMax";
245
+ import relativeTime from "dayjs/plugin/relativeTime";
246
+ import timeZone from "dayjs/plugin/timezone";
247
+ import toArray from "dayjs/plugin/toArray";
248
+ import utc from "dayjs/plugin/utc";
249
+ dayjs.extend(customParseFormat);
250
+ dayjs.extend(isBetween);
251
+ dayjs.extend(isToday);
252
+ dayjs.extend(localizedFormat);
253
+ dayjs.extend(relativeTime);
254
+ dayjs.extend(timeZone);
255
+ dayjs.extend(toArray);
256
+ dayjs.extend(utc);
257
+ dayjs.extend(minmax);
258
+ dayjs.extend(duration);
259
+ var dayjs_default = dayjs;
260
+
261
+ // src/utility/logger.ts
262
+ var getLocalStorage = () => {
263
+ try {
264
+ const win = globalThis;
265
+ return win?.window?.localStorage ?? null;
266
+ } catch {
267
+ return null;
268
+ }
269
+ };
270
+ var LoggerService = class {
271
+ debugMode = false;
272
+ constructor() {
273
+ const storage = getLocalStorage();
274
+ if (storage) {
275
+ this.debugMode = process.env.NODE_ENV === "development" ? true : JSON.parse(storage.getItem("jiret:debug") ?? "false");
276
+ } else {
277
+ this.debugMode = true;
278
+ }
279
+ }
280
+ get log() {
281
+ return this.debugMode ? console.log.bind(console) : () => {
282
+ };
283
+ }
284
+ get debug() {
285
+ return this.debugMode ? console.debug.bind(console) : () => {
286
+ };
287
+ }
288
+ get info() {
289
+ return this.debugMode ? console.info.bind(console) : () => {
290
+ };
291
+ }
292
+ get warn() {
293
+ return this.debugMode ? console.warn.bind(console) : () => {
294
+ };
295
+ }
296
+ get error() {
297
+ return this.debugMode ? console.error.bind(console) : () => {
298
+ };
299
+ }
300
+ get table() {
301
+ return this.debugMode ? console.table.bind(console) : () => {
302
+ };
303
+ }
304
+ };
305
+ var logger = new LoggerService();
306
+ var logger_default = logger;
307
+ export {
308
+ dayjs_default as dayjs,
309
+ entityFilterCondition,
310
+ entityList,
311
+ entityListRequestSchema,
312
+ entityPaginatedRows,
313
+ entityResponse,
314
+ logger_default as logger
315
+ };
316
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/entity/entity-filter-condition.ts","../src/entity/entity-list.ts","../src/entity/entity-list-request-schema.ts","../src/entity/entity-pagination.ts","../src/lib/dayjs/index.ts","../src/utility/logger.ts"],"sourcesContent":["import type { SQL, SQLWrapper } from 'drizzle-orm';\nimport {\n eq,\n gt,\n gte,\n ilike,\n isNull,\n like,\n lt,\n lte,\n ne,\n not,\n} from 'drizzle-orm';\nimport type { EntityListRequest } from './entity-list-request';\n\ntype FilterOperator =\n | 'eq'\n | 'neq'\n | 'gt'\n | 'gte'\n | 'lt'\n | 'lte'\n | 'like'\n | 'ilike'\n | 'is'\n | 'is_not';\n\ntype Column = SQLWrapper | SQL;\n\nconst operatorMap: Record<\n Exclude<FilterOperator, 'is' | 'is_not'>,\n (col: Column, val: string) => SQL\n> = {\n eq: (col, val) => eq(col as any, val),\n neq: (col, val) => ne(col as any, val),\n gt: (col, val) => gt(col as any, val),\n gte: (col, val) => gte(col as any, val),\n lt: (col, val) => lt(col as any, val),\n lte: (col, val) => lte(col as any, val),\n like: (col, val) => like(col as any, val),\n ilike: (col, val) => ilike(col as any, val),\n};\n\nconst buildCondition = (\n column: Column,\n value: string,\n operator: FilterOperator = 'eq',\n): SQL | undefined => {\n if (operator === 'is') {\n return isNull(column as any);\n }\n if (operator === 'is_not') {\n return not(isNull(column as any));\n }\n const fn = operatorMap[operator];\n return fn ? fn(column, value) : undefined;\n};\n\nexport const entityFilterCondition = <T extends Record<string, Column>>(\n filters: EntityListRequest['f'],\n columnMap: T,\n): SQL[] => {\n if (!filters) {\n return [];\n }\n\n const conditions: SQL[] = [];\n for (const filter of filters) {\n const col = columnMap[filter.f as keyof T];\n if (!col) {\n continue;\n }\n const condition = buildCondition(col, filter.v, filter.o ?? 'eq');\n if (condition) {\n conditions.push(condition);\n }\n }\n return conditions;\n};\n","import type {\n Column,\n ColumnBaseConfig,\n ColumnDataType,\n SQLWrapper,\n} from 'drizzle-orm';\nimport {\n eq,\n gt,\n gte,\n ilike,\n isNull,\n like,\n lt,\n lte,\n ne,\n not,\n or,\n type SQL,\n} from 'drizzle-orm';\nimport type { EntityListRequest } from './entity-list-request';\n\ntype FilterOperator =\n | 'eq'\n | 'neq'\n | 'gt'\n | 'gte'\n | 'lt'\n | 'lte'\n | 'like'\n | 'ilike'\n | 'is'\n | 'is_not';\n\nconst operatorMap: Partial<\n Record<\n FilterOperator,\n (\n column:\n | Column<ColumnBaseConfig<ColumnDataType, string>, object, object>\n | SQLWrapper,\n value?: string,\n ) => SQLWrapper | SQL\n >\n> = {\n eq: (col, val) =>\n eq(\n col as Column<ColumnBaseConfig<ColumnDataType, string>, object, object>,\n val ?? '',\n ),\n neq: (col, val) =>\n ne(\n col as Column<ColumnBaseConfig<ColumnDataType, string>, object, object>,\n val ?? '',\n ),\n gt: (col, val) =>\n gt(\n col as Column<ColumnBaseConfig<ColumnDataType, string>, object, object>,\n val ?? '',\n ),\n gte: (col, val) =>\n gte(\n col as Column<ColumnBaseConfig<ColumnDataType, string>, object, object>,\n val ?? '',\n ),\n lt: (col, val) =>\n lt(\n col as Column<ColumnBaseConfig<ColumnDataType, string>, object, object>,\n val ?? '',\n ),\n lte: (col, val) =>\n lte(\n col as Column<ColumnBaseConfig<ColumnDataType, string>, object, object>,\n val ?? '',\n ),\n like: (col, val) =>\n like(\n col as Column<ColumnBaseConfig<ColumnDataType, string>, object, object>,\n val ?? '',\n ),\n ilike: (col, val) =>\n ilike(\n col as Column<ColumnBaseConfig<ColumnDataType, string>, object, object>,\n val ?? '',\n ),\n};\n\ntype EntityListParams<T> = {\n search?: SQLWrapper[];\n filter?: EntityListRequest['f'];\n booleanFilter?: {\n column: Column<ColumnBaseConfig<ColumnDataType, string>, object, object>;\n value: boolean;\n };\n orderByConfig?: {\n column: string | SQLWrapper;\n direction: 'asc' | 'desc';\n };\n p?: number;\n pp?: number;\n tenantId?: string;\n entity: T;\n skipTenantIdFilter?: boolean;\n};\n\nexport const entityList = <T extends Record<string, unknown>>({\n search = [],\n filter,\n booleanFilter,\n orderByConfig = { column: 'createdAt', direction: 'desc' },\n p = 1,\n pp = 10,\n tenantId,\n entity,\n skipTenantIdFilter = false,\n}: EntityListParams<T>) => {\n const page = Number(p);\n const pageSize = Number(pp);\n const conditions: (SQL | SQLWrapper)[] = [];\n\n if (tenantId && !skipTenantIdFilter && 'tenantId' in entity) {\n const tenantColumn = (\n entity as unknown as {\n tenantId: Column<\n ColumnBaseConfig<ColumnDataType, string>,\n object,\n object\n >;\n }\n ).tenantId;\n conditions.push(eq(tenantColumn, tenantId));\n }\n\n if (search.length > 0) {\n const searchConditions = search.map((column) => column);\n const searchCondition = or(...searchConditions);\n if (searchCondition) {\n conditions.push(searchCondition);\n }\n }\n\n if (filter) {\n conditions.push(\n ...filter.map((column) => {\n const op = (column.o ?? 'eq') as FilterOperator;\n const columnObj = (\n entity as Record<\n string,\n Column<ColumnBaseConfig<ColumnDataType, string>, object, object>\n >\n )[column.f];\n\n if (!columnObj) {\n throw new Error(`Column '${column.f}' not found on entity`);\n }\n\n if (op === 'is') {\n return isNull(columnObj);\n }\n if (op === 'is_not') {\n return not(isNull(columnObj));\n }\n\n const operatorFn = operatorMap[op];\n if (!operatorFn) {\n throw new Error(`Unsupported operator: ${op}`);\n }\n\n return operatorFn(columnObj, column.v);\n }),\n );\n }\n\n if (booleanFilter) {\n conditions.push(eq(booleanFilter.column, booleanFilter.value));\n }\n\n return {\n conditions,\n orderByConfig,\n offset: (page - 1) * pageSize,\n limit: pageSize,\n };\n};\n\nexport const entityResponse = <T extends { totalCount: number }>(\n result: T[],\n): { data: Omit<T, 'totalCount'>[]; total: number } => {\n const total = result.length > 0 ? result[0].totalCount : 0;\n\n const data = result.map((item) => {\n // biome-ignore lint/correctness/noUnusedVariables: intentionally destructuring to remove totalCount\n const { totalCount, ...rest } = item;\n return rest;\n }) as Omit<T, 'totalCount'>[];\n\n return {\n data,\n total,\n };\n};\n","import { z } from 'zod';\n\nexport const entityListRequestSchema = z\n .object({\n s: z.string().optional().describe('Search term'),\n l: z.coerce\n .number()\n .min(1)\n .max(100)\n .optional()\n .describe('Limit (per page)'),\n f: z\n .union([\n z.array(\n z.object({\n f: z.string().describe('Field name'),\n v: z.string().describe('Field value'),\n o: z\n .enum([\n 'eq',\n 'neq',\n 'gt',\n 'gte',\n 'lt',\n 'lte',\n 'like',\n 'ilike',\n 'is',\n 'is_not',\n ])\n .optional()\n .default('eq')\n .describe('Filter operator'),\n }),\n ),\n z.string().transform((str, ctx) => {\n try {\n return JSON.parse(str) as Array<{\n f: string;\n v: string;\n o?:\n | 'eq'\n | 'neq'\n | 'gt'\n | 'gte'\n | 'lt'\n | 'lte'\n | 'like'\n | 'ilike'\n | 'is'\n | 'is_not';\n }>;\n } catch {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'Invalid JSON string for filter',\n });\n return z.NEVER;\n }\n }),\n ])\n .optional()\n .describe('Filters'),\n o: z\n .union([\n z.object({\n f: z.string().describe('Order field'),\n d: z\n .enum(['asc', 'desc'])\n .default('desc')\n .describe('Order direction'),\n }),\n z.string().transform((str, ctx) => {\n try {\n const parsed = JSON.parse(str) as { f: string; d?: 'asc' | 'desc' };\n return {\n f: parsed.f,\n d: parsed.d || 'desc',\n };\n } catch {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'Invalid JSON string for order',\n });\n return z.NEVER;\n }\n }),\n ])\n .optional()\n .describe('Ordering'),\n p: z.coerce.number().min(1).optional().describe('Page number'),\n pp: z.coerce.number().min(1).max(100).optional().describe('Per page'),\n })\n .strict();\n","/**\n * Parses rows from a query using COUNT(*) OVER() window function\n * Returns clean data without totalCount and extracts total\n */\nexport const entityPaginatedRows = <T extends { totalCount: number }>(\n rows: T[],\n): { data: Omit<T, 'totalCount'>[]; total: number } => {\n const total = rows[0]?.totalCount ?? 0;\n const data = rows.map(({ totalCount: _, ...rest }) => rest) as Omit<\n T,\n 'totalCount'\n >[];\n return { data, total };\n};\n","// biome-ignore lint/style/noExportedImports: this is a library\nimport dayjs from 'dayjs';\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\nimport duration from 'dayjs/plugin/duration';\nimport isBetween from 'dayjs/plugin/isBetween';\nimport isToday from 'dayjs/plugin/isToday';\nimport localizedFormat from 'dayjs/plugin/localizedFormat';\nimport minmax from 'dayjs/plugin/minMax';\nimport relativeTime from 'dayjs/plugin/relativeTime';\nimport timeZone from 'dayjs/plugin/timezone';\nimport toArray from 'dayjs/plugin/toArray';\nimport utc from 'dayjs/plugin/utc';\n\ndayjs.extend(customParseFormat);\ndayjs.extend(isBetween);\ndayjs.extend(isToday);\ndayjs.extend(localizedFormat);\ndayjs.extend(relativeTime);\ndayjs.extend(timeZone);\ndayjs.extend(toArray);\ndayjs.extend(utc);\ndayjs.extend(minmax);\ndayjs.extend(duration);\n\ntype _Dayjs = dayjs.Dayjs;\n\nexport default dayjs;\n","/** biome-ignore-all lint/complexity/noBannedTypes: <explanation> */\n/** biome-ignore-all lint/suspicious/noEmptyBlockStatements: <explanation> */\n/** biome-ignore-all lint/suspicious/noConsole: <explanation> */\n\nconst getLocalStorage = (): {\n getItem: (key: string) => string | null;\n} | null => {\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const win = globalThis as any;\n return win?.window?.localStorage ?? null;\n } catch {\n return null;\n }\n};\n\nclass LoggerService {\n debugMode = false;\n\n constructor() {\n const storage = getLocalStorage();\n if (storage) {\n this.debugMode =\n process.env.NODE_ENV === 'development'\n ? true\n : JSON.parse(storage.getItem('jiret:debug') ?? 'false');\n } else {\n this.debugMode = true;\n }\n }\n\n public get log(): Function {\n return this.debugMode ? console.log.bind(console) : (): void => {};\n }\n public get debug(): any {\n return this.debugMode ? console.debug.bind(console) : (): void => {};\n }\n public get info(): any {\n return this.debugMode ? console.info.bind(console) : (): void => {};\n }\n public get warn(): any {\n return this.debugMode ? console.warn.bind(console) : (): void => {};\n }\n\n public get error(): Function {\n return this.debugMode ? console.error.bind(console) : (): void => {};\n }\n\n public get table(): Function {\n return this.debugMode ? console.table.bind(console) : (): void => {};\n }\n}\n\nconst logger = new LoggerService();\n\nexport default logger;\n"],"mappings":"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","names":["eq","gt","gte","ilike","isNull","like","lt","lte","ne","not","operatorMap"]}
@@ -0,0 +1,2 @@
1
+ import dayjs from 'dayjs';
2
+ export { default } from 'dayjs';
@@ -0,0 +1,27 @@
1
+ // src/lib/dayjs/index.ts
2
+ import dayjs from "dayjs";
3
+ import customParseFormat from "dayjs/plugin/customParseFormat";
4
+ import duration from "dayjs/plugin/duration";
5
+ import isBetween from "dayjs/plugin/isBetween";
6
+ import isToday from "dayjs/plugin/isToday";
7
+ import localizedFormat from "dayjs/plugin/localizedFormat";
8
+ import minmax from "dayjs/plugin/minMax";
9
+ import relativeTime from "dayjs/plugin/relativeTime";
10
+ import timeZone from "dayjs/plugin/timezone";
11
+ import toArray from "dayjs/plugin/toArray";
12
+ import utc from "dayjs/plugin/utc";
13
+ dayjs.extend(customParseFormat);
14
+ dayjs.extend(isBetween);
15
+ dayjs.extend(isToday);
16
+ dayjs.extend(localizedFormat);
17
+ dayjs.extend(relativeTime);
18
+ dayjs.extend(timeZone);
19
+ dayjs.extend(toArray);
20
+ dayjs.extend(utc);
21
+ dayjs.extend(minmax);
22
+ dayjs.extend(duration);
23
+ var dayjs_default = dayjs;
24
+ export {
25
+ dayjs_default as default
26
+ };
27
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/dayjs/index.ts"],"sourcesContent":["// biome-ignore lint/style/noExportedImports: this is a library\nimport dayjs from 'dayjs';\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\nimport duration from 'dayjs/plugin/duration';\nimport isBetween from 'dayjs/plugin/isBetween';\nimport isToday from 'dayjs/plugin/isToday';\nimport localizedFormat from 'dayjs/plugin/localizedFormat';\nimport minmax from 'dayjs/plugin/minMax';\nimport relativeTime from 'dayjs/plugin/relativeTime';\nimport timeZone from 'dayjs/plugin/timezone';\nimport toArray from 'dayjs/plugin/toArray';\nimport utc from 'dayjs/plugin/utc';\n\ndayjs.extend(customParseFormat);\ndayjs.extend(isBetween);\ndayjs.extend(isToday);\ndayjs.extend(localizedFormat);\ndayjs.extend(relativeTime);\ndayjs.extend(timeZone);\ndayjs.extend(toArray);\ndayjs.extend(utc);\ndayjs.extend(minmax);\ndayjs.extend(duration);\n\ntype _Dayjs = dayjs.Dayjs;\n\nexport default dayjs;\n"],"mappings":";AACA,OAAO,WAAW;AAClB,OAAO,uBAAuB;AAC9B,OAAO,cAAc;AACrB,OAAO,eAAe;AACtB,OAAO,aAAa;AACpB,OAAO,qBAAqB;AAC5B,OAAO,YAAY;AACnB,OAAO,kBAAkB;AACzB,OAAO,cAAc;AACrB,OAAO,aAAa;AACpB,OAAO,SAAS;AAEhB,MAAM,OAAO,iBAAiB;AAC9B,MAAM,OAAO,SAAS;AACtB,MAAM,OAAO,OAAO;AACpB,MAAM,OAAO,eAAe;AAC5B,MAAM,OAAO,YAAY;AACzB,MAAM,OAAO,QAAQ;AACrB,MAAM,OAAO,OAAO;AACpB,MAAM,OAAO,GAAG;AAChB,MAAM,OAAO,MAAM;AACnB,MAAM,OAAO,QAAQ;AAIrB,IAAO,gBAAQ;","names":[]}
@@ -0,0 +1,16 @@
1
+ /** biome-ignore-all lint/complexity/noBannedTypes: <explanation> */
2
+ /** biome-ignore-all lint/suspicious/noEmptyBlockStatements: <explanation> */
3
+ /** biome-ignore-all lint/suspicious/noConsole: <explanation> */
4
+ declare class LoggerService {
5
+ debugMode: boolean;
6
+ constructor();
7
+ get log(): Function;
8
+ get debug(): any;
9
+ get info(): any;
10
+ get warn(): any;
11
+ get error(): Function;
12
+ get table(): Function;
13
+ }
14
+ declare const logger: LoggerService;
15
+
16
+ export { logger as default };
@@ -0,0 +1,50 @@
1
+ // src/utility/logger.ts
2
+ var getLocalStorage = () => {
3
+ try {
4
+ const win = globalThis;
5
+ return win?.window?.localStorage ?? null;
6
+ } catch {
7
+ return null;
8
+ }
9
+ };
10
+ var LoggerService = class {
11
+ debugMode = false;
12
+ constructor() {
13
+ const storage = getLocalStorage();
14
+ if (storage) {
15
+ this.debugMode = process.env.NODE_ENV === "development" ? true : JSON.parse(storage.getItem("jiret:debug") ?? "false");
16
+ } else {
17
+ this.debugMode = true;
18
+ }
19
+ }
20
+ get log() {
21
+ return this.debugMode ? console.log.bind(console) : () => {
22
+ };
23
+ }
24
+ get debug() {
25
+ return this.debugMode ? console.debug.bind(console) : () => {
26
+ };
27
+ }
28
+ get info() {
29
+ return this.debugMode ? console.info.bind(console) : () => {
30
+ };
31
+ }
32
+ get warn() {
33
+ return this.debugMode ? console.warn.bind(console) : () => {
34
+ };
35
+ }
36
+ get error() {
37
+ return this.debugMode ? console.error.bind(console) : () => {
38
+ };
39
+ }
40
+ get table() {
41
+ return this.debugMode ? console.table.bind(console) : () => {
42
+ };
43
+ }
44
+ };
45
+ var logger = new LoggerService();
46
+ var logger_default = logger;
47
+ export {
48
+ logger_default as default
49
+ };
50
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utility/logger.ts"],"sourcesContent":["/** biome-ignore-all lint/complexity/noBannedTypes: <explanation> */\n/** biome-ignore-all lint/suspicious/noEmptyBlockStatements: <explanation> */\n/** biome-ignore-all lint/suspicious/noConsole: <explanation> */\n\nconst getLocalStorage = (): {\n getItem: (key: string) => string | null;\n} | null => {\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const win = globalThis as any;\n return win?.window?.localStorage ?? null;\n } catch {\n return null;\n }\n};\n\nclass LoggerService {\n debugMode = false;\n\n constructor() {\n const storage = getLocalStorage();\n if (storage) {\n this.debugMode =\n process.env.NODE_ENV === 'development'\n ? true\n : JSON.parse(storage.getItem('jiret:debug') ?? 'false');\n } else {\n this.debugMode = true;\n }\n }\n\n public get log(): Function {\n return this.debugMode ? console.log.bind(console) : (): void => {};\n }\n public get debug(): any {\n return this.debugMode ? console.debug.bind(console) : (): void => {};\n }\n public get info(): any {\n return this.debugMode ? console.info.bind(console) : (): void => {};\n }\n public get warn(): any {\n return this.debugMode ? console.warn.bind(console) : (): void => {};\n }\n\n public get error(): Function {\n return this.debugMode ? console.error.bind(console) : (): void => {};\n }\n\n public get table(): Function {\n return this.debugMode ? console.table.bind(console) : (): void => {};\n }\n}\n\nconst logger = new LoggerService();\n\nexport default logger;\n"],"mappings":";AAIA,IAAM,kBAAkB,MAEZ;AACV,MAAI;AAEF,UAAM,MAAM;AACZ,WAAO,KAAK,QAAQ,gBAAgB;AAAA,EACtC,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,IAAM,gBAAN,MAAoB;AAAA,EAClB,YAAY;AAAA,EAEZ,cAAc;AACZ,UAAM,UAAU,gBAAgB;AAChC,QAAI,SAAS;AACX,WAAK,YACH,QAAQ,IAAI,aAAa,gBACrB,OACA,KAAK,MAAM,QAAQ,QAAQ,aAAa,KAAK,OAAO;AAAA,IAC5D,OAAO;AACL,WAAK,YAAY;AAAA,IACnB;AAAA,EACF;AAAA,EAEA,IAAW,MAAgB;AACzB,WAAO,KAAK,YAAY,QAAQ,IAAI,KAAK,OAAO,IAAI,MAAY;AAAA,IAAC;AAAA,EACnE;AAAA,EACA,IAAW,QAAa;AACtB,WAAO,KAAK,YAAY,QAAQ,MAAM,KAAK,OAAO,IAAI,MAAY;AAAA,IAAC;AAAA,EACrE;AAAA,EACA,IAAW,OAAY;AACrB,WAAO,KAAK,YAAY,QAAQ,KAAK,KAAK,OAAO,IAAI,MAAY;AAAA,IAAC;AAAA,EACpE;AAAA,EACA,IAAW,OAAY;AACrB,WAAO,KAAK,YAAY,QAAQ,KAAK,KAAK,OAAO,IAAI,MAAY;AAAA,IAAC;AAAA,EACpE;AAAA,EAEA,IAAW,QAAkB;AAC3B,WAAO,KAAK,YAAY,QAAQ,MAAM,KAAK,OAAO,IAAI,MAAY;AAAA,IAAC;AAAA,EACrE;AAAA,EAEA,IAAW,QAAkB;AAC3B,WAAO,KAAK,YAAY,QAAQ,MAAM,KAAK,OAAO,IAAI,MAAY;AAAA,IAAC;AAAA,EACrE;AACF;AAEA,IAAM,SAAS,IAAI,cAAc;AAEjC,IAAO,iBAAQ;","names":[]}
package/package.json CHANGED
@@ -1,14 +1,39 @@
1
1
  {
2
2
  "name": "@mesob/common",
3
- "version": "0.0.1",
3
+ "version": "0.0.3",
4
4
  "type": "module",
5
- "main": "./src/index.ts",
6
- "types": "./src/index.ts",
5
+ "main": "./dist/index.js",
6
+ "module": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
7
8
  "exports": {
8
- ".": "./src/index.ts",
9
- "./logger": "./src/utility/logger.ts",
10
- "./dayjs": "./src/lib/dayjs/index.ts"
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "default": "./dist/index.js"
12
+ },
13
+ "./lib/*": {
14
+ "types": "./dist/lib/*.d.ts",
15
+ "default": "./dist/lib/*.js"
16
+ },
17
+ "./utility/*": {
18
+ "types": "./dist/utility/*.d.ts",
19
+ "default": "./dist/utility/*.js"
20
+ },
21
+ "./entity/*": {
22
+ "types": "./dist/entity/*.d.ts",
23
+ "default": "./dist/entity/*.js"
24
+ },
25
+ "./dayjs": {
26
+ "types": "./dist/lib/dayjs/index.d.ts",
27
+ "default": "./dist/lib/dayjs/index.js"
28
+ },
29
+ "./logger": {
30
+ "types": "./dist/utility/logger.d.ts",
31
+ "default": "./dist/utility/logger.js"
32
+ }
11
33
  },
34
+ "files": [
35
+ "dist"
36
+ ],
12
37
  "dependencies": {
13
38
  "dayjs": "^1.11.13",
14
39
  "drizzle-orm": "^0.44.4",
@@ -16,9 +41,15 @@
16
41
  },
17
42
  "devDependencies": {
18
43
  "@types/node": "^20",
44
+ "tsup": "^8.5.0",
19
45
  "typescript": "^5.7.2"
20
46
  },
47
+ "publishConfig": {
48
+ "access": "public"
49
+ },
21
50
  "scripts": {
51
+ "build": "tsup",
52
+ "dev": "tsup --watch",
22
53
  "lint": "biome check --write .",
23
54
  "check-types": "tsc --noEmit"
24
55
  }
@@ -1,5 +0,0 @@
1
-
2
- 
3
- > @jiret/common@0.1.0 check-types /Users/misikir/Projects/jiret/jiret-v2/packages/common
4
- > tsc --noEmit
5
-
@@ -1,79 +0,0 @@
1
- import type { SQL, SQLWrapper } from 'drizzle-orm';
2
- import {
3
- eq,
4
- gt,
5
- gte,
6
- ilike,
7
- isNull,
8
- like,
9
- lt,
10
- lte,
11
- ne,
12
- not,
13
- } from 'drizzle-orm';
14
- import type { EntityListRequest } from './entity-list-request';
15
-
16
- type FilterOperator =
17
- | 'eq'
18
- | 'neq'
19
- | 'gt'
20
- | 'gte'
21
- | 'lt'
22
- | 'lte'
23
- | 'like'
24
- | 'ilike'
25
- | 'is'
26
- | 'is_not';
27
-
28
- type Column = SQLWrapper | SQL;
29
-
30
- const operatorMap: Record<
31
- Exclude<FilterOperator, 'is' | 'is_not'>,
32
- (col: Column, val: string) => SQL
33
- > = {
34
- eq: (col, val) => eq(col as any, val),
35
- neq: (col, val) => ne(col as any, val),
36
- gt: (col, val) => gt(col as any, val),
37
- gte: (col, val) => gte(col as any, val),
38
- lt: (col, val) => lt(col as any, val),
39
- lte: (col, val) => lte(col as any, val),
40
- like: (col, val) => like(col as any, val),
41
- ilike: (col, val) => ilike(col as any, val),
42
- };
43
-
44
- const buildCondition = (
45
- column: Column,
46
- value: string,
47
- operator: FilterOperator = 'eq',
48
- ): SQL | undefined => {
49
- if (operator === 'is') {
50
- return isNull(column as any);
51
- }
52
- if (operator === 'is_not') {
53
- return not(isNull(column as any));
54
- }
55
- const fn = operatorMap[operator];
56
- return fn ? fn(column, value) : undefined;
57
- };
58
-
59
- export const entityFilterCondition = <T extends Record<string, Column>>(
60
- filters: EntityListRequest['f'],
61
- columnMap: T,
62
- ): SQL[] => {
63
- if (!filters) {
64
- return [];
65
- }
66
-
67
- const conditions: SQL[] = [];
68
- for (const filter of filters) {
69
- const col = columnMap[filter.f as keyof T];
70
- if (!col) {
71
- continue;
72
- }
73
- const condition = buildCondition(col, filter.v, filter.o ?? 'eq');
74
- if (condition) {
75
- conditions.push(condition);
76
- }
77
- }
78
- return conditions;
79
- };