wmcp-annotate 1.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzer.js","sourceRoot":"","sources":["../../src/lib/analyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/lib/generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAkB,MAAM,aAAa,CAAC;AAGjE,UAAU,eAAe;IACvB,MAAM,EAAE,IAAI,GAAG,IAAI,GAAG,OAAO,GAAG,KAAK,CAAC;IACtC,MAAM,EAAE,KAAK,GAAG,KAAK,CAAC;CACvB;AAwGD,cAAM,SAAS;IACP,QAAQ,CAAC,WAAW,EAAE,aAAa,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC;IAoBrF,OAAO,CAAC,eAAe;CAexB;AAED,eAAO,MAAM,SAAS,WAAkB,CAAC"}
@@ -0,0 +1,136 @@
1
+ import Handlebars from 'handlebars';
2
+ const jsTemplate = Handlebars.compile(`// WebMCP Tool Registration
3
+ // Generated by wmcp-annotate
4
+ // URL: {{url}}
5
+ // Generated: {{generatedAt}}
6
+
7
+ {{#each tools}}
8
+ // Tool: {{name}}
9
+ // {{description}}
10
+ navigator.modelContext.registerTool({
11
+ name: "{{name}}",
12
+ description: "{{description}}",
13
+ inputSchema: {{{schemaJson}}},
14
+ annotations: { readOnlyHint: {{readOnly}} },
15
+ async execute({{#if hasInputs}}{ {{inputNames}} }{{/if}}, client) {
16
+ // TODO: Implement {{name}}
17
+ // Source element: {{sourceElement.selector}}
18
+
19
+ {{#if isForm}}
20
+ const form = document.querySelector('{{sourceElement.selector}}');
21
+ {{#each inputFields}}
22
+ form.querySelector('[name="{{this}}"]').value = {{this}};
23
+ {{/each}}
24
+ form.submit();
25
+ {{else}}
26
+ const element = document.querySelector('{{sourceElement.selector}}');
27
+ element.click();
28
+ {{/if}}
29
+
30
+ // Return results
31
+ return {
32
+ content: [{
33
+ type: "text",
34
+ text: JSON.stringify({ success: true })
35
+ }]
36
+ };
37
+ }
38
+ });
39
+
40
+ {{/each}}
41
+ `);
42
+ const tsTemplate = Handlebars.compile(`// WebMCP Tool Registration
43
+ // Generated by wmcp-annotate
44
+ // URL: {{url}}
45
+
46
+ {{#each tools}}
47
+ interface {{pascalName}}Input {
48
+ {{#each inputFields}}
49
+ {{this}}: string;
50
+ {{/each}}
51
+ }
52
+
53
+ {{/each}}
54
+ {{#each tools}}
55
+ navigator.modelContext.registerTool({
56
+ name: "{{name}}",
57
+ description: "{{description}}",
58
+ inputSchema: {{{schemaJson}}},
59
+ annotations: { readOnlyHint: {{readOnly}} },
60
+ async execute(input: {{pascalName}}Input, client: ModelContextClient) {
61
+ // TODO: Implement
62
+ return { content: [{ type: "text", text: JSON.stringify({ success: true }) }] };
63
+ }
64
+ });
65
+
66
+ {{/each}}
67
+ `);
68
+ const reactTemplate = Handlebars.compile(`// WebMCP React Hook
69
+ // Generated by wmcp-annotate
70
+
71
+ import { useEffect } from 'react';
72
+
73
+ export function useWebMCPTools() {
74
+ useEffect(() => {
75
+ if (!navigator.modelContext) {
76
+ console.warn('WebMCP not available');
77
+ return;
78
+ }
79
+
80
+ const cleanups: (() => void)[] = [];
81
+
82
+ {{#each tools}}
83
+ cleanups.push(
84
+ navigator.modelContext.registerTool({
85
+ name: "{{name}}",
86
+ description: "{{description}}",
87
+ inputSchema: {{{schemaJson}}},
88
+ annotations: { readOnlyHint: {{readOnly}} },
89
+ async execute(input, client) {
90
+ // TODO: Implement
91
+ return { content: [{ type: "text", text: JSON.stringify({ success: true }) }] };
92
+ }
93
+ })
94
+ );
95
+
96
+ {{/each}}
97
+ return () => cleanups.forEach(cleanup => cleanup?.());
98
+ }, []);
99
+ }
100
+ `);
101
+ class Generator {
102
+ async generate(suggestions, options) {
103
+ const data = {
104
+ url: suggestions.url,
105
+ generatedAt: new Date().toISOString(),
106
+ tools: suggestions.tools.map(tool => this.prepareToolData(tool)),
107
+ };
108
+ switch (options.format) {
109
+ case 'ts':
110
+ return tsTemplate(data);
111
+ case 'react':
112
+ return reactTemplate(data);
113
+ case 'vue':
114
+ // Vue is similar to React for this use case
115
+ return reactTemplate(data).replace('useWebMCPTools', 'useWebMCPTools');
116
+ default:
117
+ return jsTemplate(data);
118
+ }
119
+ }
120
+ prepareToolData(tool) {
121
+ const inputFields = tool.inputSchema.properties
122
+ ? Object.keys(tool.inputSchema.properties)
123
+ : [];
124
+ return {
125
+ ...tool,
126
+ schemaJson: JSON.stringify(tool.inputSchema, null, 2),
127
+ hasInputs: inputFields.length > 0,
128
+ inputNames: inputFields.join(', '),
129
+ inputFields,
130
+ isForm: tool.sourceElement.type === 'form',
131
+ pascalName: tool.name.charAt(0).toUpperCase() + tool.name.slice(1),
132
+ };
133
+ }
134
+ }
135
+ export const generator = new Generator();
136
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/lib/generator.ts"],"names":[],"mappings":"AACA,OAAO,UAAU,MAAM,YAAY,CAAC;AAOpC,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuCrC,CAAC,CAAC;AAEH,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;CAyBrC,CAAC,CAAC;AAEH,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgCxC,CAAC,CAAC;AAEH,MAAM,SAAS;IACb,KAAK,CAAC,QAAQ,CAAC,WAA0B,EAAE,OAAwB;QACjE,MAAM,IAAI,GAAG;YACX,GAAG,EAAE,WAAW,CAAC,GAAG;YACpB,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACrC,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;SACjE,CAAC;QAEF,QAAQ,OAAO,CAAC,MAAM,EAAE,CAAC;YACvB,KAAK,IAAI;gBACP,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;YAC1B,KAAK,OAAO;gBACV,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC;YAC7B,KAAK,KAAK;gBACR,4CAA4C;gBAC5C,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;YACzE;gBACE,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAEO,eAAe,CAAC,IAAoB;QAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU;YAC7C,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;YAC1C,CAAC,CAAC,EAAE,CAAC;QAEP,OAAO;YACL,GAAG,IAAI;YACP,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;YACrD,SAAS,EAAE,WAAW,CAAC,MAAM,GAAG,CAAC;YACjC,UAAU,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;YAClC,WAAW;YACX,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,MAAM;YAC1C,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;SACnE,CAAC;IACJ,CAAC;CACF;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"AAEA,wBAAsB,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAU7G;AAED,wBAAsB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAG3D"}
@@ -0,0 +1,35 @@
1
+ import fs from 'fs/promises';
2
+ export async function writeOutput(data, options) {
3
+ const output = options.format === 'yaml'
4
+ ? toYaml(data)
5
+ : JSON.stringify(data, null, 2);
6
+ if (options.output) {
7
+ await fs.writeFile(options.output, output, 'utf-8');
8
+ }
9
+ else {
10
+ console.log(output);
11
+ }
12
+ }
13
+ export async function readInput(path) {
14
+ const content = await fs.readFile(path, 'utf-8');
15
+ return JSON.parse(content);
16
+ }
17
+ function toYaml(data, indent = 0) {
18
+ // Simple YAML conversion
19
+ const spaces = ' '.repeat(indent);
20
+ if (Array.isArray(data)) {
21
+ return data.map(item => `${spaces}- ${toYaml(item, indent + 1).trim()}`).join('\\n');
22
+ }
23
+ if (typeof data === 'object' && data !== null) {
24
+ return Object.entries(data)
25
+ .map(([key, value]) => {
26
+ if (typeof value === 'object' && value !== null) {
27
+ return `${spaces}${key}:\\n${toYaml(value, indent + 1)}`;
28
+ }
29
+ return `${spaces}${key}: ${JSON.stringify(value)}`;
30
+ })
31
+ .join('\\n');
32
+ }
33
+ return JSON.stringify(data);
34
+ }
35
+ //# sourceMappingURL=output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,aAAa,CAAC;AAE7B,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAa,EAAE,OAA6C;IAC5F,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,KAAK,MAAM;QACtC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;QACd,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAElC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAI,IAAY;IAC7C,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACjD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAM,CAAC;AAClC,CAAC;AAED,SAAS,MAAM,CAAC,IAAa,EAAE,MAAM,GAAG,CAAC;IACvC,yBAAyB;IACzB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAEnC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,MAAM,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvF,CAAC;IAED,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAC9C,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;aACxB,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YACpB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBAChD,OAAO,GAAG,MAAM,GAAG,GAAG,OAAO,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;YAC3D,CAAC;YACD,OAAO,GAAG,MAAM,GAAG,GAAG,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QACrD,CAAC,CAAC;aACD,IAAI,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../src/lib/scanner.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAuC,MAAM,aAAa,CAAC;AAEnF,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,cAAM,OAAO;IACL,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,UAAU,CAAC;IAUvE;;;OAGG;YACW,eAAe;IAwI7B;;;OAGG;YACW,eAAe;YAoDf,0BAA0B;YAuC1B,uBAAuB;YAuBvB,kBAAkB;YAQlB,qBAAqB;IAWnC,OAAO,CAAC,WAAW;CAapB;AAED,eAAO,MAAM,OAAO,SAAgB,CAAC"}
@@ -0,0 +1,270 @@
1
+ import * as cheerio from 'cheerio';
2
+ class Scanner {
3
+ async scan(url, options = {}) {
4
+ const { browser = false } = options;
5
+ if (browser) {
6
+ return this.scanWithBrowser(url, options);
7
+ }
8
+ return this.scanWithCheerio(url, options);
9
+ }
10
+ /**
11
+ * Default: Fast, lightweight HTML scanning with Cheerio
12
+ * Works for static HTML sites (80%+ of websites)
13
+ */
14
+ async scanWithCheerio(url, options) {
15
+ const response = await fetch(url, {
16
+ headers: {
17
+ 'User-Agent': 'Mozilla/5.0 (compatible; wmcp-annotate/1.0)',
18
+ },
19
+ });
20
+ if (!response.ok) {
21
+ throw new Error(`Failed to fetch ${url}: ${response.status} ${response.statusText}`);
22
+ }
23
+ const html = await response.text();
24
+ const $ = cheerio.load(html);
25
+ const elements = [];
26
+ // Scan forms
27
+ $('form').each((_, form) => {
28
+ const $form = $(form);
29
+ const id = $form.attr('id');
30
+ const action = $form.attr('action');
31
+ const method = $form.attr('method') || 'GET';
32
+ const inputs = [];
33
+ $form.find('input, select, textarea').each((_, input) => {
34
+ const $input = $(input);
35
+ const name = $input.attr('name');
36
+ const type = $input.attr('type') || 'text';
37
+ const required = $input.attr('required') !== undefined;
38
+ const placeholder = $input.attr('placeholder');
39
+ // Get label
40
+ const inputId = $input.attr('id');
41
+ let label;
42
+ if (inputId) {
43
+ label = $(`label[for="${inputId}"]`).text().trim() || undefined;
44
+ }
45
+ if (name && type !== 'hidden' && type !== 'submit') {
46
+ inputs.push({
47
+ name,
48
+ type,
49
+ label,
50
+ required,
51
+ placeholder: placeholder || undefined,
52
+ });
53
+ }
54
+ });
55
+ // Get submit button text
56
+ const submitBtn = $form.find('button[type="submit"], input[type="submit"]').first();
57
+ const submitLabel = submitBtn.attr('value') || submitBtn.text().trim() || 'Submit';
58
+ elements.push({
59
+ type: 'form',
60
+ id: id || undefined,
61
+ selector: id ? `#${id}` : 'form',
62
+ label: $form.attr('aria-label') || $form.attr('title') || 'Form',
63
+ inputs,
64
+ action: action || undefined,
65
+ method,
66
+ submitButton: {
67
+ selector: id ? `#${id} [type="submit"]` : 'form [type="submit"]',
68
+ label: submitLabel,
69
+ },
70
+ });
71
+ });
72
+ // Scan standalone buttons (not in forms)
73
+ $('button:not(form button), [role="button"]').each((_, button) => {
74
+ const $button = $(button);
75
+ const label = $button.text().trim();
76
+ const id = $button.attr('id');
77
+ if (label) {
78
+ elements.push({
79
+ type: 'button',
80
+ id: id || undefined,
81
+ selector: id ? `#${id}` : this.getSelector($button),
82
+ label,
83
+ });
84
+ }
85
+ });
86
+ // Scan action links (anchors with JS behavior)
87
+ $('a[href^="#"], a[href^="javascript:"], a[onclick]').each((_, link) => {
88
+ const $link = $(link);
89
+ const label = $link.text().trim();
90
+ const id = $link.attr('id');
91
+ if (label) {
92
+ elements.push({
93
+ type: 'link',
94
+ id: id || undefined,
95
+ selector: id ? `#${id}` : this.getSelector($link),
96
+ label,
97
+ });
98
+ }
99
+ });
100
+ // Scan search inputs (common pattern)
101
+ $('input[type="search"], input[name*="search"], input[name*="query"], input[name="q"]').each((_, input) => {
102
+ const $input = $(input);
103
+ const $form = $input.closest('form');
104
+ // Skip if already captured as form
105
+ if ($form.length > 0)
106
+ return;
107
+ const name = $input.attr('name') || 'search';
108
+ const placeholder = $input.attr('placeholder');
109
+ elements.push({
110
+ type: 'search',
111
+ selector: this.getSelector($input),
112
+ label: placeholder || 'Search',
113
+ inputs: [{
114
+ name,
115
+ type: 'search',
116
+ placeholder: placeholder || undefined,
117
+ required: false,
118
+ }],
119
+ });
120
+ });
121
+ return {
122
+ url,
123
+ scannedAt: new Date().toISOString(),
124
+ elements,
125
+ apiCalls: [], // Can't detect API calls without JS execution
126
+ meta: {
127
+ scanner: 'cheerio',
128
+ note: 'Static HTML scan. Use --browser flag for JavaScript-rendered content.',
129
+ },
130
+ };
131
+ }
132
+ /**
133
+ * Optional: Full browser scanning with Playwright
134
+ * Required for SPAs and JavaScript-heavy sites
135
+ */
136
+ async scanWithBrowser(url, options) {
137
+ let playwright;
138
+ try {
139
+ playwright = await import('playwright');
140
+ }
141
+ catch {
142
+ throw new Error('Playwright is required for --browser mode but not installed.\n\n' +
143
+ 'Install it with:\n' +
144
+ ' npm install playwright\n' +
145
+ ' npx playwright install chromium\n\n' +
146
+ 'Or use the default mode (without --browser) for static HTML sites.');
147
+ }
148
+ const browser = await playwright.chromium.launch({ headless: true });
149
+ const page = await browser.newPage();
150
+ try {
151
+ const apiCalls = [];
152
+ // Capture API calls
153
+ page.on('request', (request) => {
154
+ const reqUrl = request.url();
155
+ if (reqUrl.includes('/api/') || request.resourceType() === 'fetch' || request.resourceType() === 'xhr') {
156
+ apiCalls.push({
157
+ method: request.method(),
158
+ url: reqUrl,
159
+ params: Array.from(new URL(reqUrl).searchParams.keys()),
160
+ });
161
+ }
162
+ });
163
+ await page.goto(url, { waitUntil: 'networkidle' });
164
+ // Scan elements using Playwright
165
+ const elements = await this.scanElementsWithPlaywright(page);
166
+ return {
167
+ url,
168
+ scannedAt: new Date().toISOString(),
169
+ elements,
170
+ apiCalls,
171
+ meta: {
172
+ scanner: 'playwright',
173
+ note: 'Full browser scan with JavaScript execution.',
174
+ },
175
+ };
176
+ }
177
+ finally {
178
+ await browser.close();
179
+ }
180
+ }
181
+ async scanElementsWithPlaywright(page) {
182
+ const elements = [];
183
+ // Scan forms
184
+ const forms = await page.$$('form');
185
+ for (const form of forms) {
186
+ const id = await form.getAttribute('id');
187
+ const inputs = await this.getFormInputsPlaywright(form, page);
188
+ const submitBtn = await form.$('button[type="submit"], input[type="submit"]');
189
+ elements.push({
190
+ type: 'form',
191
+ id: id || undefined,
192
+ selector: id ? `#${id}` : 'form',
193
+ label: await this.getLabelPlaywright(form) || 'Form',
194
+ inputs,
195
+ submitButton: submitBtn ? {
196
+ selector: await this.getSelectorPlaywright(submitBtn),
197
+ label: await submitBtn.textContent() || 'Submit',
198
+ } : undefined,
199
+ });
200
+ }
201
+ // Scan buttons
202
+ const buttons = await page.$$('button:not(form button), [role="button"]');
203
+ for (const button of buttons) {
204
+ const label = await button.textContent();
205
+ if (label?.trim()) {
206
+ elements.push({
207
+ type: 'button',
208
+ selector: await this.getSelectorPlaywright(button),
209
+ label: label.trim(),
210
+ });
211
+ }
212
+ }
213
+ return elements;
214
+ }
215
+ async getFormInputsPlaywright(form, page) {
216
+ const inputs = [];
217
+ const inputElements = await form.$$('input, select, textarea');
218
+ for (const input of inputElements) {
219
+ const name = await input.getAttribute('name');
220
+ const type = await input.getAttribute('type') || 'text';
221
+ const required = await input.getAttribute('required') !== null;
222
+ const placeholder = await input.getAttribute('placeholder');
223
+ if (name && type !== 'hidden' && type !== 'submit') {
224
+ inputs.push({
225
+ name,
226
+ type,
227
+ required,
228
+ placeholder: placeholder || undefined,
229
+ });
230
+ }
231
+ }
232
+ return inputs;
233
+ }
234
+ async getLabelPlaywright(element) {
235
+ const ariaLabel = await element.getAttribute('aria-label');
236
+ if (ariaLabel)
237
+ return ariaLabel;
238
+ const title = await element.getAttribute('title');
239
+ if (title)
240
+ return title;
241
+ return null;
242
+ }
243
+ async getSelectorPlaywright(element) {
244
+ const id = await element.getAttribute('id');
245
+ if (id)
246
+ return `#${id}`;
247
+ const className = await element.getAttribute('class');
248
+ if (className) {
249
+ const classes = className.split(' ').filter((c) => c && !c.includes(':'));
250
+ if (classes.length > 0)
251
+ return `.${classes[0]}`;
252
+ }
253
+ return 'element';
254
+ }
255
+ getSelector($el) {
256
+ const id = $el.attr('id');
257
+ if (id)
258
+ return `#${id}`;
259
+ const className = $el.attr('class');
260
+ if (className) {
261
+ const classes = className.split(' ').filter(c => c && !c.includes(':'));
262
+ if (classes.length > 0)
263
+ return `.${classes[0]}`;
264
+ }
265
+ const tagName = $el.prop('tagName')?.toLowerCase();
266
+ return tagName || 'element';
267
+ }
268
+ }
269
+ export const scanner = new Scanner();
270
+ //# sourceMappingURL=scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../src/lib/scanner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/lib/validator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAmC,MAAM,aAAa,CAAC;AAKrF,cAAM,SAAS;IACb,OAAO,CAAC,OAAO,CAAwB;IAEjC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAgDtD,OAAO,CAAC,YAAY;IA6GpB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,WAAW;YAML,aAAa;IAMrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAM7B;AAED,eAAO,MAAM,SAAS,WAAkB,CAAC"}