ugly-app 0.1.130 → 0.1.131

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.
@@ -1 +1 @@
1
- {"version":3,"file":"serverLogQuery.d.ts","sourceRoot":"","sources":["../../src/cli/serverLogQuery.ts"],"names":[],"mappings":"AA8DA,wBAAsB,eAAe,CACnC,UAAU,EAAE,UAAU,GAAG,SAAS,GAAG,gBAAgB,EACrD,OAAO,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAC3E,OAAO,CAAC,IAAI,CAAC,CAuCf"}
1
+ {"version":3,"file":"serverLogQuery.d.ts","sourceRoot":"","sources":["../../src/cli/serverLogQuery.ts"],"names":[],"mappings":"AAmGA,wBAAsB,eAAe,CACnC,UAAU,EAAE,UAAU,GAAG,SAAS,GAAG,gBAAgB,EACrD,OAAO,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAC3E,OAAO,CAAC,IAAI,CAAC,CAwCf"}
@@ -41,20 +41,54 @@ async function getMongoUri(envFile) {
41
41
  // 3. For server (.env.prod), no fallback — fail
42
42
  throw new Error(`MONGODB_URI not found in ${envFile}. Add MONGODB_URI=<your-uri> to ${envFile}.`);
43
43
  }
44
- function formatDoc(doc) {
45
- const ts = doc['created'] instanceof Date
46
- ? doc['created'].toISOString().replace('T', ' ').replace('Z', '')
47
- : String(doc['created'] ?? '');
48
- const level = String(doc['level'] ?? '')
49
- .toUpperCase()
50
- .padEnd(5);
44
+ function formatTimestamp(created) {
45
+ if (created instanceof Date) {
46
+ return created.toISOString().replace('T', ' ').replace('Z', '');
47
+ }
48
+ if (typeof created === 'number') {
49
+ return new Date(created).toISOString().replace('T', ' ').replace('Z', '');
50
+ }
51
+ return String(created ?? '');
52
+ }
53
+ function formatErrorDoc(doc) {
54
+ const ts = formatTimestamp(doc['created']);
55
+ const level = String(doc['level'] ?? 'error').toUpperCase().padEnd(5);
56
+ const source = doc['source'] ? `[${doc['source']}]` : '';
51
57
  const message = String(doc['message'] ?? '');
52
- const meta = doc['meta'] ? ` ${JSON.stringify(doc['meta'])}` : '';
58
+ const userId = doc['userId'] ? ` user:${doc['userId']}` : '';
53
59
  const stack = doc['stack']
54
60
  ? `\n ${String(doc['stack']).split('\n').slice(0, 3).join('\n ')}`
55
61
  : '';
56
- return `${ts} ${level} ${message}${meta}${stack}`;
62
+ return `${ts} ${level} ${source} ${message}${userId}${stack}`;
63
+ }
64
+ function formatPerfDoc(doc) {
65
+ const ts = formatTimestamp(doc['created']);
66
+ const op = String(doc['operation'] ?? '');
67
+ const ms = doc['durationMs'] != null ? `${doc['durationMs']}ms` : '';
68
+ const userId = doc['userId'] ? ` user:${doc['userId']}` : '';
69
+ return `${ts} ${op} ${ms}${userId}`;
70
+ }
71
+ function formatFeedbackDoc(doc) {
72
+ const ts = formatTimestamp(doc['created']);
73
+ const type = String(doc['type'] ?? '').toUpperCase().padEnd(7);
74
+ const status = String(doc['status'] ?? '').padEnd(8);
75
+ const message = String(doc['message'] ?? '');
76
+ const url = doc['url'] ? `\n URL: ${doc['url']}` : '';
77
+ const screenshot = doc['screenshotUri']
78
+ ? `\n Screenshot: ${doc['screenshotUri']}`
79
+ : '';
80
+ const context = doc['context'] ? `\n Context: ${doc['context']}` : '';
81
+ const resolution = doc['resolution']
82
+ ? `\n Resolution: ${doc['resolution']}`
83
+ : '';
84
+ const userId = doc['userId'] ? ` user:${doc['userId']}` : '';
85
+ return `${ts} [${type}] ${status} ${message}${userId}${url}${screenshot}${context}${resolution}`;
57
86
  }
87
+ const formatters = {
88
+ errorLog: formatErrorDoc,
89
+ perfLog: formatPerfDoc,
90
+ feedbackReport: formatFeedbackDoc,
91
+ };
58
92
  export async function queryServerLogs(collection, options) {
59
93
  const limit = options.limit ?? 50;
60
94
  const uri = await getMongoUri(options.envFile);
@@ -83,7 +117,8 @@ export async function queryServerLogs(collection, options) {
83
117
  console.log(JSON.stringify(doc));
84
118
  }
85
119
  else {
86
- console.log(formatDoc(doc));
120
+ const fmt = formatters[collection] ?? formatErrorDoc;
121
+ console.log(fmt(doc));
87
122
  }
88
123
  }
89
124
  }
@@ -1 +1 @@
1
- {"version":3,"file":"serverLogQuery.js","sourceRoot":"","sources":["../../src/cli/serverLogQuery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"serverLogQuery.js","sourceRoot":"","sources":["../../src/cli/serverLogQuery.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export declare const CLI_VERSION = "0.1.130";
1
+ export declare const CLI_VERSION = "0.1.131";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1,3 +1,3 @@
1
1
  // Auto-generated by prebuild — do not edit manually
2
- export const CLI_VERSION = "0.1.130";
2
+ export const CLI_VERSION = "0.1.131";
3
3
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ugly-app",
3
- "version": "0.1.130",
3
+ "version": "0.1.131",
4
4
  "type": "module",
5
5
  "main": "./dist/server/index.js",
6
6
  "exports": {
@@ -44,22 +44,59 @@ async function getMongoUri(envFile: string): Promise<string> {
44
44
  );
45
45
  }
46
46
 
47
- function formatDoc(doc: Record<string, unknown>): string {
48
- const ts =
49
- doc['created'] instanceof Date
50
- ? doc['created'].toISOString().replace('T', ' ').replace('Z', '')
51
- : String(doc['created'] ?? '');
52
- const level = String(doc['level'] ?? '')
53
- .toUpperCase()
54
- .padEnd(5);
47
+ function formatTimestamp(created: unknown): string {
48
+ if (created instanceof Date) {
49
+ return created.toISOString().replace('T', ' ').replace('Z', '');
50
+ }
51
+ if (typeof created === 'number') {
52
+ return new Date(created).toISOString().replace('T', ' ').replace('Z', '');
53
+ }
54
+ return String(created ?? '');
55
+ }
56
+
57
+ function formatErrorDoc(doc: Record<string, unknown>): string {
58
+ const ts = formatTimestamp(doc['created']);
59
+ const level = String(doc['level'] ?? 'error').toUpperCase().padEnd(5);
60
+ const source = doc['source'] ? `[${doc['source']}]` : '';
55
61
  const message = String(doc['message'] ?? '');
56
- const meta = doc['meta'] ? ` ${JSON.stringify(doc['meta'])}` : '';
62
+ const userId = doc['userId'] ? ` user:${doc['userId']}` : '';
57
63
  const stack = doc['stack']
58
64
  ? `\n ${String(doc['stack']).split('\n').slice(0, 3).join('\n ')}`
59
65
  : '';
60
- return `${ts} ${level} ${message}${meta}${stack}`;
66
+ return `${ts} ${level} ${source} ${message}${userId}${stack}`;
67
+ }
68
+
69
+ function formatPerfDoc(doc: Record<string, unknown>): string {
70
+ const ts = formatTimestamp(doc['created']);
71
+ const op = String(doc['operation'] ?? '');
72
+ const ms = doc['durationMs'] != null ? `${doc['durationMs']}ms` : '';
73
+ const userId = doc['userId'] ? ` user:${doc['userId']}` : '';
74
+ return `${ts} ${op} ${ms}${userId}`;
75
+ }
76
+
77
+ function formatFeedbackDoc(doc: Record<string, unknown>): string {
78
+ const ts = formatTimestamp(doc['created']);
79
+ const type = String(doc['type'] ?? '').toUpperCase().padEnd(7);
80
+ const status = String(doc['status'] ?? '').padEnd(8);
81
+ const message = String(doc['message'] ?? '');
82
+ const url = doc['url'] ? `\n URL: ${doc['url']}` : '';
83
+ const screenshot = doc['screenshotUri']
84
+ ? `\n Screenshot: ${doc['screenshotUri']}`
85
+ : '';
86
+ const context = doc['context'] ? `\n Context: ${doc['context']}` : '';
87
+ const resolution = doc['resolution']
88
+ ? `\n Resolution: ${doc['resolution']}`
89
+ : '';
90
+ const userId = doc['userId'] ? ` user:${doc['userId']}` : '';
91
+ return `${ts} [${type}] ${status} ${message}${userId}${url}${screenshot}${context}${resolution}`;
61
92
  }
62
93
 
94
+ const formatters: Record<string, (doc: Record<string, unknown>) => string> = {
95
+ errorLog: formatErrorDoc,
96
+ perfLog: formatPerfDoc,
97
+ feedbackReport: formatFeedbackDoc,
98
+ };
99
+
63
100
  export async function queryServerLogs(
64
101
  collection: 'errorLog' | 'perfLog' | 'feedbackReport',
65
102
  options: { envFile: string; limit?: number; level?: string; json?: boolean },
@@ -96,7 +133,8 @@ export async function queryServerLogs(
96
133
  if (options.json) {
97
134
  console.log(JSON.stringify(doc));
98
135
  } else {
99
- console.log(formatDoc(doc as Record<string, unknown>));
136
+ const fmt = formatters[collection] ?? formatErrorDoc;
137
+ console.log(fmt(doc as Record<string, unknown>));
100
138
  }
101
139
  }
102
140
  } finally {
@@ -1,2 +1,2 @@
1
1
  // Auto-generated by prebuild — do not edit manually
2
- export const CLI_VERSION = "0.1.130";
2
+ export const CLI_VERSION = "0.1.131";