@leftium/gg 0.0.18 → 0.0.20

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 (2) hide show
  1. package/dist/gg.js +37 -34
  2. package/package.json +1 -1
package/dist/gg.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import debugFactory from './debug.js';
2
2
  import ErrorStackParser from 'error-stack-parser';
3
- import { BROWSER } from 'esm-env';
3
+ import { BROWSER, DEV } from 'esm-env';
4
4
  // Helper to detect if we're running in CloudFlare Workers
5
5
  const isCloudflareWorker = () => {
6
6
  // Check for CloudFlare Workers-specific global
@@ -82,6 +82,13 @@ const srcRootRegex = new RegExp(ggConfig.srcRootPattern, 'i');
82
82
  // - Cache and reuse the same log function for a given callpoint.
83
83
  const namespaceToLogFunction = new Map();
84
84
  let maxCallpointLength = 0;
85
+ /**
86
+ * Reset the namespace width tracking.
87
+ * Useful after configuration checks that may have long callpoint paths.
88
+ */
89
+ function resetNamespaceWidth() {
90
+ maxCallpointLength = 0;
91
+ }
85
92
  function openInEditorUrl(fileName) {
86
93
  return ggConfig.openInEditorUrlTemplate.replace('$FILENAME', encodeURIComponent(fileName).replaceAll('%2F', '/'));
87
94
  }
@@ -89,45 +96,38 @@ export function gg(...args) {
89
96
  if (!ggConfig.enabled || isCloudflareWorker()) {
90
97
  return args.length ? args[0] : { url: '', stack: [] };
91
98
  }
92
- // Ignore first stack frame, which is always the call to gg() itself.
93
- const stack = ErrorStackParser.parse(new Error()).splice(1);
94
- // Example: http://localhost:5173/src/routes/+page.svelte
95
- const filename = stack[0].fileName?.replace(timestampRegex, '') || '';
96
- // Example: src/routes/+page.svelte
97
- const filenameToOpen = filename.replace(srcRootRegex, '$<folderName>/');
98
- const url = openInEditorUrl(filenameToOpen);
99
- // Example: routes/+page.svelte
100
- let filenameToDisplay = filename.replace(srcRootRegex, '');
101
- // In production builds, simplify the built file paths for better readability
102
- // e.g., "_app/immutable/nodes/0.CY8nc6EF.js" -> "nodes/0"
103
- // e.g., ".svelte-kit/output/server/entries/pages/_layout.svelte.js" -> "pages/_layout"
104
- if (filenameToDisplay.includes('_app/immutable/')) {
105
- // Client-side production build
106
- filenameToDisplay = filenameToDisplay
107
- .replace(/.*\/_app\/immutable\//, '') // Remove path prefix
108
- .replace(/\.[a-zA-Z0-9]+\.js$/, ''); // Remove hash and .js
109
- }
110
- else if (filenameToDisplay.includes('.svelte-kit/output/')) {
111
- // Server-side production build
112
- filenameToDisplay = filenameToDisplay
113
- .replace(/.*\.svelte-kit\/output\/server\/entries\//, '') // Remove path prefix
114
- .replace(/\.svelte\.js$/, '') // Remove .svelte.js
115
- .replace(/\.js$/, ''); // Remove .js
116
- }
117
- const { functionName } = stack[0];
118
- //console.log({ filename, fileNameToOpen: filenameToOpen, fileNameToDisplay: filenameToDisplay });
119
- // A callpoint is uniquely identified by the filename plus function name
120
- const callpoint = `${filenameToDisplay}${functionName ? `@${functionName}` : ''}`;
121
- if (callpoint.length < 80 && callpoint.length > maxCallpointLength) {
122
- maxCallpointLength = callpoint.length;
99
+ // Initialize return values
100
+ let fileName = '';
101
+ let functionName = '';
102
+ let url = '';
103
+ let stack = [];
104
+ let namespace = 'gg:';
105
+ // In development: calculate detailed callpoint information
106
+ // In production: skip expensive stack parsing and use simple namespace
107
+ if (DEV) {
108
+ // Ignore first stack frame, which is always the call to gg() itself.
109
+ stack = ErrorStackParser.parse(new Error()).splice(1);
110
+ // Example: http://localhost:5173/src/routes/+page.svelte
111
+ const filename = stack[0].fileName?.replace(timestampRegex, '') || '';
112
+ // Example: src/routes/+page.svelte
113
+ const filenameToOpen = filename.replace(srcRootRegex, '$<folderName>/');
114
+ url = openInEditorUrl(filenameToOpen);
115
+ // Example: routes/+page.svelte
116
+ fileName = filename.replace(srcRootRegex, '');
117
+ functionName = stack[0].functionName || '';
118
+ // A callpoint is uniquely identified by the filename plus function name
119
+ const callpoint = `${fileName}${functionName ? `@${functionName}` : ''}`;
120
+ if (callpoint.length < 80 && callpoint.length > maxCallpointLength) {
121
+ maxCallpointLength = callpoint.length;
122
+ }
123
+ namespace = `gg:${callpoint.padEnd(maxCallpointLength, ' ')}${ggConfig.editorLink ? url : ''}`;
123
124
  }
124
- const namespace = `gg:${callpoint.padEnd(maxCallpointLength, ' ')}${ggConfig.editorLink ? url : ''}`;
125
125
  const ggLogFunction = namespaceToLogFunction.get(namespace) ||
126
126
  namespaceToLogFunction.set(namespace, debugFactory(namespace)).get(namespace);
127
127
  if (!args.length) {
128
128
  ggLogFunction(` 📝📝 ${url} 👀👀`);
129
129
  return {
130
- fileName: filenameToDisplay,
130
+ fileName,
131
131
  functionName,
132
132
  url,
133
133
  stack
@@ -179,4 +179,7 @@ if (ggConfig.showHints && !isCloudflareWorker()) {
179
179
  message(`${checkbox(ggLogTest.enabled)} DEBUG env variable: ${process?.env?.DEBUG}${hint}`);
180
180
  }
181
181
  console.log(ggMessage);
182
+ // Reset namespace width after configuration check
183
+ // This prevents the long callpoint from the config check from affecting subsequent logs
184
+ resetNamespaceWidth();
182
185
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leftium/gg",
3
- "version": "0.0.18",
3
+ "version": "0.0.20",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/Leftium/gg.git"