@browserflow-ai/core 0.0.6

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 (57) hide show
  1. package/dist/config-schema.d.ts +354 -0
  2. package/dist/config-schema.d.ts.map +1 -0
  3. package/dist/config-schema.js +83 -0
  4. package/dist/config-schema.js.map +1 -0
  5. package/dist/config.d.ts +107 -0
  6. package/dist/config.d.ts.map +1 -0
  7. package/dist/config.js +5 -0
  8. package/dist/config.js.map +1 -0
  9. package/dist/duration.d.ts +39 -0
  10. package/dist/duration.d.ts.map +1 -0
  11. package/dist/duration.js +111 -0
  12. package/dist/duration.js.map +1 -0
  13. package/dist/index.d.ts +12 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +20 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/locator-object.d.ts +556 -0
  18. package/dist/locator-object.d.ts.map +1 -0
  19. package/dist/locator-object.js +114 -0
  20. package/dist/locator-object.js.map +1 -0
  21. package/dist/lockfile.d.ts +1501 -0
  22. package/dist/lockfile.d.ts.map +1 -0
  23. package/dist/lockfile.js +86 -0
  24. package/dist/lockfile.js.map +1 -0
  25. package/dist/run-store.d.ts +81 -0
  26. package/dist/run-store.d.ts.map +1 -0
  27. package/dist/run-store.js +181 -0
  28. package/dist/run-store.js.map +1 -0
  29. package/dist/spec-loader.d.ts +17 -0
  30. package/dist/spec-loader.d.ts.map +1 -0
  31. package/dist/spec-loader.js +37 -0
  32. package/dist/spec-loader.js.map +1 -0
  33. package/dist/spec-schema.d.ts +1411 -0
  34. package/dist/spec-schema.d.ts.map +1 -0
  35. package/dist/spec-schema.js +239 -0
  36. package/dist/spec-schema.js.map +1 -0
  37. package/package.json +45 -0
  38. package/schemas/browserflow.schema.json +220 -0
  39. package/schemas/lockfile.schema.json +568 -0
  40. package/schemas/spec-v2.schema.json +413 -0
  41. package/src/config-schema.test.ts +190 -0
  42. package/src/config-schema.ts +111 -0
  43. package/src/config.ts +112 -0
  44. package/src/duration.test.ts +175 -0
  45. package/src/duration.ts +128 -0
  46. package/src/index.ts +136 -0
  47. package/src/json-schemas.test.ts +374 -0
  48. package/src/locator-object.test.ts +323 -0
  49. package/src/locator-object.ts +250 -0
  50. package/src/lockfile.test.ts +345 -0
  51. package/src/lockfile.ts +209 -0
  52. package/src/run-store.test.ts +232 -0
  53. package/src/run-store.ts +240 -0
  54. package/src/spec-loader.test.ts +181 -0
  55. package/src/spec-loader.ts +47 -0
  56. package/src/spec-schema.test.ts +360 -0
  57. package/src/spec-schema.ts +347 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec-schema.d.ts","sourceRoot":"","sources":["../src/spec-schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,239 @@
1
+ /**
2
+ * Zod schemas for BrowserFlow spec v2
3
+ *
4
+ * @see bf-dgs for implementation task
5
+ */
6
+ import { z } from 'zod';
7
+ import { isValidDuration } from './duration.js';
8
+ // Duration validation
9
+ export const durationSchema = z.string().refine(isValidDuration, {
10
+ message: 'Must be a valid duration string like "3s", "2m", "500ms", or "1m30s"',
11
+ });
12
+ // Target object - at least one locator strategy required
13
+ export const targetSchema = z.lazy(() => z
14
+ .object({
15
+ query: z.string().optional(),
16
+ testid: z.string().optional(),
17
+ role: z.string().optional(),
18
+ name: z.string().optional(),
19
+ label: z.string().optional(),
20
+ placeholder: z.string().optional(),
21
+ text: z.string().optional(),
22
+ css: z.string().optional(),
23
+ within: targetSchema.optional(),
24
+ nth: z.number().int().optional(),
25
+ })
26
+ .refine((data) => data.query ||
27
+ data.testid ||
28
+ data.role ||
29
+ data.label ||
30
+ data.placeholder ||
31
+ data.text ||
32
+ data.css, 'Target must have at least one locator strategy (query, testid, role, label, placeholder, text, or css)'));
33
+ // Action types from spec section 6.4
34
+ export const actionTypeSchema = z.enum([
35
+ 'click',
36
+ 'navigate',
37
+ 'back',
38
+ 'forward',
39
+ 'refresh',
40
+ 'reload',
41
+ 'fill',
42
+ 'type',
43
+ 'select',
44
+ 'check',
45
+ 'press',
46
+ 'upload',
47
+ 'wait',
48
+ 'expect',
49
+ 'screenshot',
50
+ 'scroll',
51
+ 'scroll_into_view',
52
+ 'verify_state',
53
+ 'identify_element',
54
+ 'ai_verify',
55
+ 'custom',
56
+ ]);
57
+ // State values for expect action
58
+ export const stateSchema = z.enum([
59
+ 'visible',
60
+ 'hidden',
61
+ 'enabled',
62
+ 'disabled',
63
+ 'checked',
64
+ 'unchecked',
65
+ 'focused',
66
+ 'editable',
67
+ 'attached',
68
+ 'detached',
69
+ ]);
70
+ // Step schema - id is REQUIRED
71
+ export const stepSchema = z
72
+ .object({
73
+ id: z.string().min(1, 'Step id is required'),
74
+ action: actionTypeSchema,
75
+ name: z.string().optional(), // 1-4 word display name for UI
76
+ description: z.string().optional(),
77
+ why: z.string().optional(), // Rationale for this step
78
+ target: targetSchema.optional(),
79
+ // Navigate action
80
+ url: z.string().optional(),
81
+ // Fill/type action
82
+ value: z.string().optional(),
83
+ text: z.string().optional(),
84
+ // Select action
85
+ option: z.string().optional(),
86
+ // Check action
87
+ checked: z.boolean().optional(),
88
+ // Wait action
89
+ duration: durationSchema.optional(),
90
+ // Expect action
91
+ state: stateSchema.optional(),
92
+ // Timeout override
93
+ timeout: durationSchema.optional(),
94
+ // Keyboard
95
+ pressEnter: z.boolean().optional(),
96
+ // Verify state
97
+ checks: z
98
+ .array(z.object({
99
+ element_visible: z.string().optional(),
100
+ element_not_visible: z.string().optional(),
101
+ text_contains: z.string().optional(),
102
+ text_not_contains: z.string().optional(),
103
+ url_contains: z.string().optional(),
104
+ element_count: z
105
+ .object({
106
+ selector: z.string(),
107
+ expected: z.number(),
108
+ })
109
+ .optional(),
110
+ attribute: z
111
+ .object({
112
+ selector: z.string(),
113
+ attribute: z.string(),
114
+ equals: z.string(),
115
+ })
116
+ .optional(),
117
+ }))
118
+ .optional(),
119
+ // Screenshot options
120
+ highlight: z
121
+ .array(z.object({
122
+ selector: z.string(),
123
+ label: z.string().optional(),
124
+ }))
125
+ .optional(),
126
+ mask: z
127
+ .array(z.object({
128
+ selector: z.string().optional(),
129
+ region: z
130
+ .object({
131
+ x: z.number(),
132
+ y: z.number(),
133
+ width: z.number(),
134
+ height: z.number(),
135
+ })
136
+ .optional(),
137
+ reason: z.string().optional(),
138
+ }))
139
+ .optional(),
140
+ // AI verify
141
+ question: z.string().optional(),
142
+ expected: z.union([z.boolean(), z.string(), z.number()]).optional(),
143
+ // Custom action
144
+ save_as: z.string().optional(),
145
+ ref: z.string().optional(),
146
+ selector: z.string().optional(),
147
+ for: z.enum(['element', 'text', 'url', 'time']).optional(),
148
+ contains: z.string().optional(),
149
+ })
150
+ .strict();
151
+ // Preconditions schema
152
+ export const preconditionsSchema = z.object({
153
+ page: z
154
+ .object({
155
+ url: z.string().optional(),
156
+ })
157
+ .optional(),
158
+ auth: z
159
+ .object({
160
+ user: z.string().optional(),
161
+ state: z.string().optional(),
162
+ })
163
+ .optional(),
164
+ viewport: z
165
+ .object({
166
+ width: z.number(),
167
+ height: z.number(),
168
+ })
169
+ .optional(),
170
+ mocks: z
171
+ .array(z.object({
172
+ url: z.string(),
173
+ response: z.unknown(),
174
+ }))
175
+ .optional(),
176
+ });
177
+ // Expected outcome schema
178
+ export const expectedOutcomeSchema = z.object({
179
+ description: z.string().optional(),
180
+ check: z.string().optional(),
181
+ expected: z.union([z.boolean(), z.number(), z.string()]).optional(),
182
+ });
183
+ // Top-level spec schema
184
+ export const specSchema = z
185
+ .object({
186
+ version: z.literal(2),
187
+ name: z.string().regex(/^[a-z0-9-]+$/, 'Name must be kebab-case (lowercase letters, numbers, and hyphens only)'),
188
+ description: z.string().optional(),
189
+ steps: z.array(stepSchema).min(1, 'At least one step required'),
190
+ timeout: durationSchema.optional(),
191
+ priority: z.enum(['critical', 'high', 'normal', 'low']).optional(),
192
+ tags: z.array(z.string()).optional(),
193
+ preconditions: preconditionsSchema.optional(),
194
+ expected_outcomes: z.array(expectedOutcomeSchema).optional(),
195
+ })
196
+ .refine((data) => {
197
+ const ids = data.steps.map((s) => s.id);
198
+ return new Set(ids).size === ids.length;
199
+ }, { message: 'Step IDs must be unique within spec' });
200
+ // Legacy exports for backwards compatibility
201
+ export const verifyCheckSchema = z.object({
202
+ element_visible: z.string().optional(),
203
+ element_not_visible: z.string().optional(),
204
+ text_contains: z.string().optional(),
205
+ text_not_contains: z.string().optional(),
206
+ url_contains: z.string().optional(),
207
+ element_count: z
208
+ .object({
209
+ selector: z.string(),
210
+ expected: z.number(),
211
+ })
212
+ .optional(),
213
+ attribute: z
214
+ .object({
215
+ selector: z.string(),
216
+ attribute: z.string(),
217
+ equals: z.string(),
218
+ })
219
+ .optional(),
220
+ });
221
+ export const highlightRegionSchema = z.object({
222
+ selector: z.string(),
223
+ label: z.string().optional(),
224
+ });
225
+ export const maskRegionSchema = z.object({
226
+ selector: z.string().optional(),
227
+ region: z
228
+ .object({
229
+ x: z.number(),
230
+ y: z.number(),
231
+ width: z.number(),
232
+ height: z.number(),
233
+ })
234
+ .optional(),
235
+ reason: z.string().optional(),
236
+ });
237
+ // Alias for specStepSchema (legacy)
238
+ export const specStepSchema = stepSchema;
239
+ //# sourceMappingURL=spec-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec-schema.js","sourceRoot":"","sources":["../src/spec-schema.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "@browserflow-ai/core",
3
+ "version": "0.0.6",
4
+ "description": "Shared types, schemas, and utilities for BrowserFlow - Human-in-the-Loop E2E Test Generation",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/akatz-ai/browserflow.git",
10
+ "directory": "packages/core"
11
+ },
12
+ "main": "./dist/index.js",
13
+ "types": "./dist/index.d.ts",
14
+ "exports": {
15
+ ".": {
16
+ "import": "./dist/index.js",
17
+ "types": "./dist/index.d.ts"
18
+ },
19
+ "./schemas": {
20
+ "import": "./dist/spec-schema.js",
21
+ "types": "./dist/spec-schema.d.ts"
22
+ }
23
+ },
24
+ "scripts": {
25
+ "build": "tsc && bun run generate:schemas",
26
+ "build:schemas": "bun run scripts/generate-schemas.ts",
27
+ "generate:schemas": "bun run scripts/generate-schemas.ts",
28
+ "test": "bun test",
29
+ "typecheck": "tsc --noEmit"
30
+ },
31
+ "files": [
32
+ "dist",
33
+ "src",
34
+ "schemas"
35
+ ],
36
+ "dependencies": {
37
+ "playwright-core": "^1.57.0",
38
+ "zod": "^3.22.4"
39
+ },
40
+ "devDependencies": {
41
+ "ajv": "^8.17.1",
42
+ "ajv-formats": "^3.0.1",
43
+ "zod-to-json-schema": "^3.25.1"
44
+ }
45
+ }
@@ -0,0 +1,220 @@
1
+ {
2
+ "$ref": "#/definitions/browserflow",
3
+ "definitions": {
4
+ "browserflow": {
5
+ "type": "object",
6
+ "properties": {
7
+ "project": {
8
+ "type": "object",
9
+ "properties": {
10
+ "name": {
11
+ "type": "string",
12
+ "minLength": 1
13
+ },
14
+ "base_url": {
15
+ "type": "string",
16
+ "format": "uri"
17
+ }
18
+ },
19
+ "required": [
20
+ "name"
21
+ ],
22
+ "additionalProperties": false
23
+ },
24
+ "runtime": {
25
+ "type": "object",
26
+ "properties": {
27
+ "browser": {
28
+ "type": "string",
29
+ "enum": [
30
+ "chromium",
31
+ "firefox",
32
+ "webkit"
33
+ ],
34
+ "default": "chromium"
35
+ },
36
+ "engine": {
37
+ "type": "string",
38
+ "enum": [
39
+ "chromium",
40
+ "firefox",
41
+ "webkit"
42
+ ]
43
+ },
44
+ "headless": {
45
+ "type": "boolean",
46
+ "default": true
47
+ },
48
+ "viewport": {
49
+ "type": "object",
50
+ "properties": {
51
+ "width": {
52
+ "type": "integer",
53
+ "exclusiveMinimum": 0
54
+ },
55
+ "height": {
56
+ "type": "integer",
57
+ "exclusiveMinimum": 0
58
+ }
59
+ },
60
+ "required": [
61
+ "width",
62
+ "height"
63
+ ],
64
+ "additionalProperties": false
65
+ },
66
+ "timeout": {
67
+ "anyOf": [
68
+ {
69
+ "type": "string"
70
+ },
71
+ {
72
+ "type": "number"
73
+ }
74
+ ]
75
+ }
76
+ },
77
+ "additionalProperties": false
78
+ },
79
+ "browser": {
80
+ "type": "object",
81
+ "properties": {
82
+ "browser": {
83
+ "type": "string",
84
+ "enum": [
85
+ "chromium",
86
+ "firefox",
87
+ "webkit"
88
+ ],
89
+ "default": "chromium"
90
+ },
91
+ "engine": {
92
+ "type": "string",
93
+ "enum": [
94
+ "chromium",
95
+ "firefox",
96
+ "webkit"
97
+ ]
98
+ },
99
+ "headless": {
100
+ "type": "boolean",
101
+ "default": true
102
+ },
103
+ "viewport": {
104
+ "type": "object",
105
+ "properties": {
106
+ "width": {
107
+ "type": "integer",
108
+ "exclusiveMinimum": 0
109
+ },
110
+ "height": {
111
+ "type": "integer",
112
+ "exclusiveMinimum": 0
113
+ }
114
+ },
115
+ "required": [
116
+ "width",
117
+ "height"
118
+ ],
119
+ "additionalProperties": false
120
+ },
121
+ "timeout": {
122
+ "anyOf": [
123
+ {
124
+ "type": "string"
125
+ },
126
+ {
127
+ "type": "number"
128
+ }
129
+ ]
130
+ }
131
+ },
132
+ "additionalProperties": false
133
+ },
134
+ "locators": {
135
+ "type": "object",
136
+ "properties": {
137
+ "prefer_testid": {
138
+ "type": "boolean",
139
+ "default": true
140
+ },
141
+ "testid_attributes": {
142
+ "type": "array",
143
+ "items": {
144
+ "type": "string"
145
+ }
146
+ }
147
+ },
148
+ "additionalProperties": false
149
+ },
150
+ "exploration": {
151
+ "type": "object",
152
+ "properties": {
153
+ "adapter": {
154
+ "type": "string",
155
+ "default": "claude"
156
+ },
157
+ "max_retries": {
158
+ "type": "integer",
159
+ "minimum": 0,
160
+ "default": 3
161
+ }
162
+ },
163
+ "additionalProperties": false
164
+ },
165
+ "review": {
166
+ "type": "object",
167
+ "properties": {
168
+ "port": {
169
+ "type": "integer",
170
+ "minimum": 1,
171
+ "maximum": 65535,
172
+ "default": 8190
173
+ },
174
+ "auto_open": {
175
+ "type": "boolean",
176
+ "default": true
177
+ }
178
+ },
179
+ "additionalProperties": false
180
+ },
181
+ "output": {
182
+ "type": "object",
183
+ "properties": {
184
+ "tests_dir": {
185
+ "type": "string",
186
+ "default": "e2e/tests"
187
+ },
188
+ "baselines_dir": {
189
+ "type": "string",
190
+ "default": "baselines"
191
+ }
192
+ },
193
+ "additionalProperties": false
194
+ },
195
+ "ci": {
196
+ "type": "object",
197
+ "properties": {
198
+ "fail_on_baseline_diff": {
199
+ "type": "boolean",
200
+ "default": false
201
+ },
202
+ "parallel": {
203
+ "type": "integer",
204
+ "exclusiveMinimum": 0
205
+ }
206
+ },
207
+ "additionalProperties": false
208
+ }
209
+ },
210
+ "required": [
211
+ "project"
212
+ ],
213
+ "additionalProperties": false
214
+ }
215
+ },
216
+ "$schema": "http://json-schema.org/draft-07/schema#",
217
+ "$id": "https://browserflow.dev/schemas/browserflow.schema.json",
218
+ "title": "BrowserFlow Configuration",
219
+ "description": "Schema for browserflow.yaml configuration files"
220
+ }