pinpoints 0.1.4

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 (83) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +187 -0
  3. package/out/browser/browserSessionManager.d.ts +19 -0
  4. package/out/browser/browserSessionManager.d.ts.map +1 -0
  5. package/out/browser/browserSessionManager.js +169 -0
  6. package/out/browser/browserSessionManager.js.map +1 -0
  7. package/out/cli/index.d.ts +3 -0
  8. package/out/cli/index.d.ts.map +1 -0
  9. package/out/cli/index.js +564 -0
  10. package/out/cli/index.js.map +1 -0
  11. package/out/core/pickerToolbar.d.ts +9 -0
  12. package/out/core/pickerToolbar.d.ts.map +1 -0
  13. package/out/core/pickerToolbar.js +475 -0
  14. package/out/core/pickerToolbar.js.map +1 -0
  15. package/out/export/contextFormatter.d.ts +9 -0
  16. package/out/export/contextFormatter.d.ts.map +1 -0
  17. package/out/export/contextFormatter.js +151 -0
  18. package/out/export/contextFormatter.js.map +1 -0
  19. package/out/extension.d.ts +4 -0
  20. package/out/extension.d.ts.map +1 -0
  21. package/out/extension.js +95 -0
  22. package/out/extension.js.map +1 -0
  23. package/out/extraction/domExtractor.d.ts +10 -0
  24. package/out/extraction/domExtractor.d.ts.map +1 -0
  25. package/out/extraction/domExtractor.js +72 -0
  26. package/out/extraction/domExtractor.js.map +1 -0
  27. package/out/extraction/layoutExtractor.d.ts +11 -0
  28. package/out/extraction/layoutExtractor.d.ts.map +1 -0
  29. package/out/extraction/layoutExtractor.js +107 -0
  30. package/out/extraction/layoutExtractor.js.map +1 -0
  31. package/out/extraction/redactor.d.ts +9 -0
  32. package/out/extraction/redactor.d.ts.map +1 -0
  33. package/out/extraction/redactor.js +78 -0
  34. package/out/extraction/redactor.js.map +1 -0
  35. package/out/extraction/screenshotExtractor.d.ts +7 -0
  36. package/out/extraction/screenshotExtractor.d.ts.map +1 -0
  37. package/out/extraction/screenshotExtractor.js +104 -0
  38. package/out/extraction/screenshotExtractor.js.map +1 -0
  39. package/out/extraction/selectorExtractor.d.ts +16 -0
  40. package/out/extraction/selectorExtractor.d.ts.map +1 -0
  41. package/out/extraction/selectorExtractor.js +172 -0
  42. package/out/extraction/selectorExtractor.js.map +1 -0
  43. package/out/extraction/styleExtractor.d.ts +10 -0
  44. package/out/extraction/styleExtractor.d.ts.map +1 -0
  45. package/out/extraction/styleExtractor.js +96 -0
  46. package/out/extraction/styleExtractor.js.map +1 -0
  47. package/out/picker/pickerController.d.ts +33 -0
  48. package/out/picker/pickerController.d.ts.map +1 -0
  49. package/out/picker/pickerController.js +979 -0
  50. package/out/picker/pickerController.js.map +1 -0
  51. package/out/schemas/index.d.ts +418 -0
  52. package/out/schemas/index.d.ts.map +1 -0
  53. package/out/schemas/index.js +128 -0
  54. package/out/schemas/index.js.map +1 -0
  55. package/out/source/sourceLocator.d.ts +7 -0
  56. package/out/source/sourceLocator.d.ts.map +1 -0
  57. package/out/source/sourceLocator.js +37 -0
  58. package/out/source/sourceLocator.js.map +1 -0
  59. package/out/source/sourceMapResolver.d.ts +17 -0
  60. package/out/source/sourceMapResolver.d.ts.map +1 -0
  61. package/out/source/sourceMapResolver.js +204 -0
  62. package/out/source/sourceMapResolver.js.map +1 -0
  63. package/out/source/workspaceGrep.d.ts +30 -0
  64. package/out/source/workspaceGrep.d.ts.map +1 -0
  65. package/out/source/workspaceGrep.js +237 -0
  66. package/out/source/workspaceGrep.js.map +1 -0
  67. package/out/testPaste.d.ts +1 -0
  68. package/out/testPaste.d.ts.map +1 -0
  69. package/out/testPaste.js +3 -0
  70. package/out/testPaste.js.map +1 -0
  71. package/out/ui/statusBarManager.d.ts +14 -0
  72. package/out/ui/statusBarManager.d.ts.map +1 -0
  73. package/out/ui/statusBarManager.js +89 -0
  74. package/out/ui/statusBarManager.js.map +1 -0
  75. package/package.json +132 -0
  76. package/resources/fonts/icons.css +19 -0
  77. package/resources/fonts/icons.html +69 -0
  78. package/resources/fonts/icons.json +3 -0
  79. package/resources/fonts/icons.ts +13 -0
  80. package/resources/fonts/icons.woff +0 -0
  81. package/resources/icon.png +0 -0
  82. package/resources/icons/pinpoint-logo.svg +4 -0
  83. package/resources/logo.svg +97 -0
@@ -0,0 +1,172 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SelectorExtractor = void 0;
4
+ class SelectorExtractor {
5
+ async extract(elementHandle) {
6
+ const selectors = [];
7
+ // 1. Try data-testid, data-test, data-qa
8
+ const dataAttrSelector = await this.tryDataAttributes(elementHandle);
9
+ if (dataAttrSelector) {
10
+ selectors.push(dataAttrSelector);
11
+ }
12
+ // 2. Try stable ID
13
+ const idSelector = await this.tryStableId(elementHandle);
14
+ if (idSelector) {
15
+ selectors.push(idSelector);
16
+ }
17
+ // 3. Try role + aria-label combo
18
+ const roleAriaSelector = await this.tryRoleAriaLabel(elementHandle);
19
+ if (roleAriaSelector) {
20
+ selectors.push(roleAriaSelector);
21
+ }
22
+ // 4. Try stable class combo
23
+ const classSelector = await this.tryStableClassCombo(elementHandle);
24
+ if (classSelector) {
25
+ selectors.push(classSelector);
26
+ }
27
+ // 5. Fallback: position-based with parent context
28
+ const positionSelector = await this.tryPositionBased(elementHandle);
29
+ if (positionSelector) {
30
+ selectors.push(positionSelector);
31
+ }
32
+ // Return primary (highest confidence) and alternates
33
+ if (selectors.length === 0) {
34
+ // Last resort: css path
35
+ const cssPath = await this.getCssPath(elementHandle);
36
+ selectors.push({
37
+ selector: cssPath,
38
+ confidence: 0.3,
39
+ method: 'position',
40
+ });
41
+ }
42
+ const sorted = selectors.sort((a, b) => b.confidence - a.confidence);
43
+ return {
44
+ primary: sorted[0],
45
+ alternates: sorted.slice(1),
46
+ };
47
+ }
48
+ async tryDataAttributes(elementHandle) {
49
+ const dataAttrs = ['data-testid', 'data-test', 'data-qa'];
50
+ for (const attr of dataAttrs) {
51
+ const value = await elementHandle.evaluate((el, attrName) => el.getAttribute(attrName), attr);
52
+ if (value) {
53
+ const selector = `[${attr}="${value}"]`;
54
+ return {
55
+ selector,
56
+ confidence: 0.95,
57
+ method: 'data-attr',
58
+ };
59
+ }
60
+ }
61
+ return null;
62
+ }
63
+ async tryStableId(elementHandle) {
64
+ const id = await elementHandle.evaluate((el) => el.id);
65
+ if (!id) {
66
+ return null;
67
+ }
68
+ // Check if ID looks like a UUID or random hash
69
+ if (this.isUnstableId(id)) {
70
+ return null;
71
+ }
72
+ const selector = `#${id}`;
73
+ return {
74
+ selector,
75
+ confidence: 0.9,
76
+ method: 'id',
77
+ };
78
+ }
79
+ isUnstableId(id) {
80
+ // Detect UUID patterns (8-4-4-4-12 hex)
81
+ if (/^[0-9a-f]{8}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{12}$/i.test(id)) {
82
+ return true;
83
+ }
84
+ // Detect long random hex strings
85
+ if (/^[0-9a-f]{20,}$/i.test(id)) {
86
+ return true;
87
+ }
88
+ // Detect base64-like strings
89
+ if (/^[A-Za-z0-9+/]{20,}={0,2}$/.test(id)) {
90
+ return true;
91
+ }
92
+ return false;
93
+ }
94
+ async tryRoleAriaLabel(elementHandle) {
95
+ const { role, ariaLabel } = await elementHandle.evaluate((el) => ({
96
+ role: el.getAttribute('role'),
97
+ ariaLabel: el.getAttribute('aria-label'),
98
+ }));
99
+ if (!role || !ariaLabel) {
100
+ return null;
101
+ }
102
+ const selector = `[role="${role}"][aria-label="${ariaLabel}"]`;
103
+ return {
104
+ selector,
105
+ confidence: 0.85,
106
+ method: 'role-label',
107
+ };
108
+ }
109
+ async tryStableClassCombo(elementHandle) {
110
+ const classes = await elementHandle.evaluate((el) => {
111
+ const utilityPatterns = [
112
+ /^(m|p|w|h|flex|grid|text|bg|border|rounded|shadow|opacity|transform)/,
113
+ /^(mt|mr|mb|ml|px|py|pt|pb|pl|pr)\d+/,
114
+ /^(absolute|relative|fixed|static)/,
115
+ /^(block|inline|hidden)/,
116
+ ];
117
+ return Array.from(el.classList)
118
+ .filter((cls) => !utilityPatterns.some((pattern) => pattern.test(cls)))
119
+ .slice(0, 3);
120
+ });
121
+ if (classes.length === 0) {
122
+ return null;
123
+ }
124
+ const selector = classes.length === 1
125
+ ? `.${classes[0]}`
126
+ : classes.map((cls) => `.${cls}`).join('');
127
+ return {
128
+ selector,
129
+ confidence: 0.7,
130
+ method: 'class-combo',
131
+ };
132
+ }
133
+ async tryPositionBased(elementHandle) {
134
+ try {
135
+ const cssPath = await this.getCssPath(elementHandle);
136
+ return {
137
+ selector: cssPath,
138
+ confidence: 0.5,
139
+ method: 'position',
140
+ };
141
+ }
142
+ catch {
143
+ return null;
144
+ }
145
+ }
146
+ async getCssPath(elementHandle) {
147
+ return await elementHandle.evaluate((el) => {
148
+ const paths = [];
149
+ let current = el;
150
+ while (current && current !== document.body) {
151
+ let selector = current.tagName.toLowerCase();
152
+ if (current.id) {
153
+ selector += `#${current.id}`;
154
+ paths.unshift(selector);
155
+ break;
156
+ }
157
+ const siblings = Array.from(current.parentNode?.childNodes || [])
158
+ .filter((n) => n.nodeType === 1);
159
+ const sameTagSiblings = siblings.filter((s) => s.tagName.toLowerCase() === current.tagName.toLowerCase());
160
+ if (sameTagSiblings.length > 1) {
161
+ const index = sameTagSiblings.indexOf(current) + 1;
162
+ selector += `:nth-of-type(${index})`;
163
+ }
164
+ paths.unshift(selector);
165
+ current = current.parentElement;
166
+ }
167
+ return paths.join(' > ');
168
+ });
169
+ }
170
+ }
171
+ exports.SelectorExtractor = SelectorExtractor;
172
+ //# sourceMappingURL=selectorExtractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selectorExtractor.js","sourceRoot":"","sources":["../../src/extraction/selectorExtractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import * as puppeteer from 'puppeteer-core';
2
+ import { Styles } from '../schemas';
3
+ export declare class StyleExtractor {
4
+ private readonly LAYOUT_PROPERTIES;
5
+ extract(elementHandle: puppeteer.ElementHandle, mode?: 'pick' | 'full'): Promise<Styles>;
6
+ private getComputedStyles;
7
+ private calculateDiff;
8
+ private getClasses;
9
+ }
10
+ //# sourceMappingURL=styleExtractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styleExtractor.d.ts","sourceRoot":"","sources":["../../src/extraction/styleExtractor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEpC,qBAAa,cAAc;IAEzB,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAiChC;IAEI,OAAO,CACX,aAAa,EAAE,SAAS,CAAC,aAAa,EACtC,IAAI,GAAE,MAAM,GAAG,MAAe,GAC7B,OAAO,CAAC,MAAM,CAAC;YAYJ,iBAAiB;IAe/B,OAAO,CAAC,aAAa;YAkCP,UAAU;CAGzB"}
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StyleExtractor = void 0;
4
+ class StyleExtractor {
5
+ constructor() {
6
+ // Layout-critical CSS properties
7
+ this.LAYOUT_PROPERTIES = [
8
+ 'display',
9
+ 'position',
10
+ 'top',
11
+ 'right',
12
+ 'bottom',
13
+ 'left',
14
+ 'width',
15
+ 'height',
16
+ 'margin',
17
+ 'margin-top',
18
+ 'margin-right',
19
+ 'margin-bottom',
20
+ 'margin-left',
21
+ 'padding',
22
+ 'padding-top',
23
+ 'padding-right',
24
+ 'padding-bottom',
25
+ 'padding-left',
26
+ 'flex-direction',
27
+ 'flex-wrap',
28
+ 'justify-content',
29
+ 'align-items',
30
+ 'align-content',
31
+ 'gap',
32
+ 'grid-template-columns',
33
+ 'grid-template-rows',
34
+ 'grid-column',
35
+ 'grid-row',
36
+ 'z-index',
37
+ 'overflow',
38
+ 'overflow-x',
39
+ 'overflow-y',
40
+ ];
41
+ }
42
+ async extract(elementHandle, mode = 'pick') {
43
+ const computed = await this.getComputedStyles(elementHandle);
44
+ const diff = this.calculateDiff(computed);
45
+ const classes = await this.getClasses(elementHandle);
46
+ return {
47
+ computed: mode === 'full' ? computed : undefined,
48
+ diff,
49
+ classes,
50
+ };
51
+ }
52
+ async getComputedStyles(elementHandle) {
53
+ return await elementHandle.evaluate((el) => {
54
+ const styles = window.getComputedStyle(el);
55
+ const result = {};
56
+ // Get all computed styles
57
+ for (let i = 0; i < styles.length; i++) {
58
+ const prop = styles[i];
59
+ result[prop] = styles.getPropertyValue(prop);
60
+ }
61
+ return result;
62
+ });
63
+ }
64
+ calculateDiff(computed) {
65
+ const diff = {};
66
+ // Keep layout properties that have non-default values
67
+ const defaults = {
68
+ 'display': 'inline',
69
+ 'position': 'static',
70
+ 'z-index': 'auto',
71
+ 'overflow': 'visible',
72
+ 'overflow-x': 'visible',
73
+ 'overflow-y': 'visible',
74
+ };
75
+ for (const prop of this.LAYOUT_PROPERTIES) {
76
+ const value = computed[prop];
77
+ if (value && value !== defaults[prop] && value !== '0px' && value !== 'normal' && value !== 'none' && value !== 'auto' && value !== 'stretch') {
78
+ diff[prop] = value;
79
+ }
80
+ }
81
+ // Also include color and font properties if explicitly set
82
+ const colorFontProps = ['color', 'background-color', 'font-size', 'font-weight', 'text-align'];
83
+ for (const prop of colorFontProps) {
84
+ const value = computed[prop];
85
+ if (value && value !== 'normal' && value !== 'start') {
86
+ diff[prop] = value;
87
+ }
88
+ }
89
+ return diff;
90
+ }
91
+ async getClasses(elementHandle) {
92
+ return await elementHandle.evaluate((el) => Array.from(el.classList));
93
+ }
94
+ }
95
+ exports.StyleExtractor = StyleExtractor;
96
+ //# sourceMappingURL=styleExtractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styleExtractor.js","sourceRoot":"","sources":["../../src/extraction/styleExtractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import * as vscode from 'vscode';
2
+ import { CaptureMode } from '../schemas';
3
+ export declare class PickerController {
4
+ private context;
5
+ private browserSession;
6
+ private currentMode;
7
+ private screenshotEnabled;
8
+ private contextRadius;
9
+ private injectionTarget;
10
+ private capturedElements;
11
+ private tempDir;
12
+ private isPickerActive;
13
+ private workspaceRoot;
14
+ constructor(context: vscode.ExtensionContext);
15
+ private loadSettings;
16
+ startPicker(): Promise<void>;
17
+ private injectPickerUI;
18
+ private promptForUrl;
19
+ private detectLocalServers;
20
+ private isPortOpen;
21
+ stopPicker(): Promise<void>;
22
+ toggleScreenshot(): void;
23
+ isScreenshotEnabled(): boolean;
24
+ setMode(mode: CaptureMode): void;
25
+ clearSelection(): void;
26
+ private enableInspectMode;
27
+ private captureClickedElement;
28
+ private ensureGitignore;
29
+ captureElement(elementHandle: any): Promise<void>;
30
+ private injectToFocusedLocation;
31
+ cleanup(): void;
32
+ }
33
+ //# sourceMappingURL=pickerController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pickerController.d.ts","sourceRoot":"","sources":["../../src/picker/pickerController.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAajC,OAAO,EAAc,WAAW,EAAY,MAAM,YAAY,CAAC;AAG/D,qBAAa,gBAAgB;IAWf,OAAO,CAAC,OAAO;IAV3B,OAAO,CAAC,cAAc,CAAsC;IAC5D,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,iBAAiB,CAAkB;IAC3C,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,eAAe,CAAyB;IAChD,OAAO,CAAC,gBAAgB,CAAoB;IAC5C,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,cAAc,CAAkB;IACxC,OAAO,CAAC,aAAa,CAAS;gBAEV,OAAO,EAAE,MAAM,CAAC,gBAAgB;IAKpD,OAAO,CAAC,YAAY;IAQd,WAAW;YAoFH,cAAc;YAoed,YAAY;YAkEZ,kBAAkB;IAwChC,OAAO,CAAC,UAAU;IAWZ,UAAU;IAShB,gBAAgB;IAIhB,mBAAmB,IAAI,OAAO;IAI9B,OAAO,CAAC,IAAI,EAAE,WAAW;IAIzB,cAAc;YAIA,iBAAiB;YA2BjB,qBAAqB;IAmCnC,OAAO,CAAC,eAAe;IAoBjB,cAAc,CAAC,aAAa,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;YA8HzC,uBAAuB;IAwDrC,OAAO;CAeR"}