@carlesandres/webreel 0.2.0

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 (63) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +206 -0
  3. package/dist/commands/__tests__/record.test.d.ts +2 -0
  4. package/dist/commands/__tests__/record.test.d.ts.map +1 -0
  5. package/dist/commands/__tests__/record.test.js +89 -0
  6. package/dist/commands/__tests__/record.test.js.map +1 -0
  7. package/dist/commands/composite.d.ts +3 -0
  8. package/dist/commands/composite.d.ts.map +1 -0
  9. package/dist/commands/composite.js +43 -0
  10. package/dist/commands/composite.js.map +1 -0
  11. package/dist/commands/init.d.ts +3 -0
  12. package/dist/commands/init.d.ts.map +1 -0
  13. package/dist/commands/init.js +50 -0
  14. package/dist/commands/init.js.map +1 -0
  15. package/dist/commands/install.d.ts +3 -0
  16. package/dist/commands/install.d.ts.map +1 -0
  17. package/dist/commands/install.js +71 -0
  18. package/dist/commands/install.js.map +1 -0
  19. package/dist/commands/preview.d.ts +3 -0
  20. package/dist/commands/preview.d.ts.map +1 -0
  21. package/dist/commands/preview.js +30 -0
  22. package/dist/commands/preview.js.map +1 -0
  23. package/dist/commands/record.d.ts +5 -0
  24. package/dist/commands/record.d.ts.map +1 -0
  25. package/dist/commands/record.js +151 -0
  26. package/dist/commands/record.js.map +1 -0
  27. package/dist/commands/validate.d.ts +3 -0
  28. package/dist/commands/validate.d.ts.map +1 -0
  29. package/dist/commands/validate.js +43 -0
  30. package/dist/commands/validate.js.map +1 -0
  31. package/dist/config.d.ts +21 -0
  32. package/dist/config.d.ts.map +1 -0
  33. package/dist/config.js +5 -0
  34. package/dist/config.js.map +1 -0
  35. package/dist/index.d.ts +3 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +36 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/lib/__tests__/config.test.d.ts +2 -0
  40. package/dist/lib/__tests__/config.test.d.ts.map +1 -0
  41. package/dist/lib/__tests__/config.test.js +600 -0
  42. package/dist/lib/__tests__/config.test.js.map +1 -0
  43. package/dist/lib/__tests__/examples.test.d.ts +2 -0
  44. package/dist/lib/__tests__/examples.test.d.ts.map +1 -0
  45. package/dist/lib/__tests__/examples.test.js +19 -0
  46. package/dist/lib/__tests__/examples.test.js.map +1 -0
  47. package/dist/lib/__tests__/runner.test.d.ts +2 -0
  48. package/dist/lib/__tests__/runner.test.d.ts.map +1 -0
  49. package/dist/lib/__tests__/runner.test.js +141 -0
  50. package/dist/lib/__tests__/runner.test.js.map +1 -0
  51. package/dist/lib/config.d.ts +17 -0
  52. package/dist/lib/config.d.ts.map +1 -0
  53. package/dist/lib/config.js +1002 -0
  54. package/dist/lib/config.js.map +1 -0
  55. package/dist/lib/runner.d.ts +18 -0
  56. package/dist/lib/runner.d.ts.map +1 -0
  57. package/dist/lib/runner.js +401 -0
  58. package/dist/lib/runner.js.map +1 -0
  59. package/dist/lib/types.d.ts +179 -0
  60. package/dist/lib/types.d.ts.map +1 -0
  61. package/dist/lib/types.js +16 -0
  62. package/dist/lib/types.js.map +1 -0
  63. package/package.json +64 -0
@@ -0,0 +1,19 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { readdirSync, readFileSync, existsSync } from "node:fs";
3
+ import { resolve } from "node:path";
4
+ import { validateWebreelConfig } from "../config.js";
5
+ const examplesDir = resolve(__dirname, "../../../../../examples");
6
+ const exampleDirs = readdirSync(examplesDir, { withFileTypes: true })
7
+ .filter((d) => d.isDirectory())
8
+ .map((d) => d.name)
9
+ .filter((name) => existsSync(resolve(examplesDir, name, "webreel.config.json")));
10
+ describe("example configs", () => {
11
+ it.each(exampleDirs)("%s has a valid config", (name) => {
12
+ const configPath = resolve(examplesDir, name, "webreel.config.json");
13
+ const raw = readFileSync(configPath, "utf-8");
14
+ const parsed = JSON.parse(raw);
15
+ const errors = validateWebreelConfig(parsed);
16
+ expect(errors).toEqual([]);
17
+ });
18
+ });
19
+ //# sourceMappingURL=examples.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"examples.test.js","sourceRoot":"","sources":["../../../src/lib/__tests__/examples.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAErD,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,EAAE,yBAAyB,CAAC,CAAC;AAElE,MAAM,WAAW,GAAG,WAAW,CAAC,WAAW,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;KAClE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;KAC9B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;KAClB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;AAEnF,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,uBAAuB,EAAE,CAAC,IAAI,EAAE,EAAE;QACrD,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,qBAAqB,CAAC,CAAC;QACrE,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,MAAM,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=runner.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.test.d.ts","sourceRoot":"","sources":["../../../src/lib/__tests__/runner.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,141 @@
1
+ import { describe, it, expect, vi } from "vitest";
2
+ import { resolve } from "node:path";
3
+ import { pathToFileURL } from "node:url";
4
+ import { formatStep, resolveKeyTarget, resolveUrl, randomPointInBox } from "../runner.js";
5
+ describe("formatStep", () => {
6
+ it("formats pause step", () => {
7
+ const step = { action: "pause", ms: 500 };
8
+ expect(formatStep(0, step)).toBe("[step 0] pause 500ms");
9
+ });
10
+ it("formats click step with text", () => {
11
+ const step = { action: "click", text: "Submit" };
12
+ expect(formatStep(1, step)).toBe('[step 1] click text="Submit"');
13
+ });
14
+ it("formats click step with selector", () => {
15
+ const step = { action: "click", selector: "#btn" };
16
+ expect(formatStep(2, step)).toBe('[step 2] click selector="#btn"');
17
+ });
18
+ it("formats key step", () => {
19
+ const step = { action: "key", key: "cmd+z" };
20
+ expect(formatStep(3, step)).toBe('[step 3] key "cmd+z"');
21
+ });
22
+ it("formats type step", () => {
23
+ const step = { action: "type", text: "hello" };
24
+ expect(formatStep(0, step)).toBe('[step 0] type "hello"');
25
+ });
26
+ it("formats scroll step with defaults", () => {
27
+ const step = { action: "scroll" };
28
+ expect(formatStep(0, step)).toBe("[step 0] scroll x=0 y=0");
29
+ });
30
+ it("formats scroll step with values", () => {
31
+ const step = { action: "scroll", x: 100, y: -200 };
32
+ expect(formatStep(0, step)).toBe("[step 0] scroll x=100 y=-200");
33
+ });
34
+ it("formats wait step with selector", () => {
35
+ const step = { action: "wait", selector: ".loaded" };
36
+ expect(formatStep(0, step)).toBe('[step 0] wait selector=".loaded"');
37
+ });
38
+ it("formats wait step with text", () => {
39
+ const step = { action: "wait", text: "Ready" };
40
+ expect(formatStep(0, step)).toBe('[step 0] wait text="Ready"');
41
+ });
42
+ it("formats drag step", () => {
43
+ const step = {
44
+ action: "drag",
45
+ from: { text: "A" },
46
+ to: { text: "B" },
47
+ };
48
+ expect(formatStep(0, step)).toBe("[step 0] drag");
49
+ });
50
+ it("formats moveTo step", () => {
51
+ const step = { action: "moveTo", text: "Menu" };
52
+ expect(formatStep(0, step)).toBe('[step 0] moveTo text="Menu"');
53
+ });
54
+ it("formats screenshot step", () => {
55
+ const step = { action: "screenshot", output: "hero.png" };
56
+ expect(formatStep(0, step)).toBe('[step 0] screenshot "hero.png"');
57
+ });
58
+ it("formats navigate step", () => {
59
+ const step = { action: "navigate", url: "https://example.com" };
60
+ expect(formatStep(0, step)).toBe('[step 0] navigate "https://example.com"');
61
+ });
62
+ it("formats hover step", () => {
63
+ const step = { action: "hover", text: "Link" };
64
+ expect(formatStep(0, step)).toBe('[step 0] hover text="Link"');
65
+ });
66
+ it("formats select step", () => {
67
+ const step = { action: "select", selector: "#country", value: "US" };
68
+ expect(formatStep(0, step)).toBe('[step 0] select "#country" value="US"');
69
+ });
70
+ it("includes description when present", () => {
71
+ const step = { action: "pause", ms: 100, description: "wait for animation" };
72
+ expect(formatStep(0, step)).toBe("[step 0] pause 100ms: wait for animation");
73
+ });
74
+ });
75
+ describe("resolveKeyTarget", () => {
76
+ it("returns string target directly", () => {
77
+ expect(resolveKeyTarget("#input")).toBe("#input");
78
+ });
79
+ it("returns selector from ElementTarget", () => {
80
+ expect(resolveKeyTarget({ selector: ".editor" })).toBe(".editor");
81
+ });
82
+ it("returns empty string when ElementTarget has no selector", () => {
83
+ expect(resolveKeyTarget({ text: "foo" })).toBe("");
84
+ });
85
+ });
86
+ describe("resolveUrl", () => {
87
+ const configDir = "/home/user/project";
88
+ it("returns absolute http URLs unchanged", () => {
89
+ expect(resolveUrl("https://example.com", "", configDir)).toBe("https://example.com");
90
+ expect(resolveUrl("http://localhost:3000", "", configDir)).toBe("http://localhost:3000");
91
+ });
92
+ it("returns file:// URLs unchanged", () => {
93
+ expect(resolveUrl("file:///tmp/index.html", "", configDir)).toBe("file:///tmp/index.html");
94
+ });
95
+ it("prepends baseUrl to relative URLs", () => {
96
+ expect(resolveUrl("/page", "https://example.com", configDir)).toBe("https://example.com/page");
97
+ });
98
+ it("converts relative paths to file:// URLs using configDir", () => {
99
+ const result = resolveUrl("index.html", "", configDir);
100
+ expect(result).toBe(pathToFileURL(resolve(configDir, "index.html")).href);
101
+ });
102
+ it("converts relative path with baseUrl to file:// when combined is not http", () => {
103
+ const result = resolveUrl("sub/index.html", "web/", configDir);
104
+ expect(result).toBe(pathToFileURL(resolve(configDir, "web/sub/index.html")).href);
105
+ });
106
+ });
107
+ describe("randomPointInBox", () => {
108
+ const box = { x: 100, y: 200, width: 50, height: 30 };
109
+ it("returns a point within the bounding box", () => {
110
+ for (let i = 0; i < 50; i++) {
111
+ const { x, y } = randomPointInBox(box);
112
+ expect(x).toBeGreaterThanOrEqual(box.x);
113
+ expect(x).toBeLessThanOrEqual(box.x + box.width);
114
+ expect(y).toBeGreaterThanOrEqual(box.y);
115
+ expect(y).toBeLessThanOrEqual(box.y + box.height);
116
+ }
117
+ });
118
+ it("constrains points to the center region by default", () => {
119
+ vi.spyOn(Math, "random").mockReturnValue(0);
120
+ try {
121
+ const { x, y } = randomPointInBox(box);
122
+ expect(x).toBeCloseTo(box.x + box.width * 0.375, 5);
123
+ expect(y).toBeCloseTo(box.y + box.height * 0.375, 5);
124
+ }
125
+ finally {
126
+ vi.restoreAllMocks();
127
+ }
128
+ });
129
+ it("uses custom spread parameter", () => {
130
+ vi.spyOn(Math, "random").mockReturnValue(0.5);
131
+ try {
132
+ const { x, y } = randomPointInBox(box, 0.5);
133
+ expect(x).toBeCloseTo(box.x + box.width * 0.5, 5);
134
+ expect(y).toBeCloseTo(box.y + box.height * 0.5, 5);
135
+ }
136
+ finally {
137
+ vi.restoreAllMocks();
138
+ }
139
+ });
140
+ });
141
+ //# sourceMappingURL=runner.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.test.js","sourceRoot":"","sources":["../../../src/lib/__tests__/runner.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { VideoConfig, WebreelConfig } from "./types.js";
2
+ export declare const DEFAULT_CONFIG_NAME = "webreel.config";
3
+ export declare const DEFAULT_CONFIG_FILE = "webreel.config.json";
4
+ export declare const CURRENT_SCHEMA_VERSION = 1;
5
+ export declare function parseSchemaVersion(schema?: string): number;
6
+ export declare function loadWebreelConfig(filePath: string): Promise<WebreelConfig>;
7
+ export interface ValidationError {
8
+ path: string;
9
+ message: string;
10
+ }
11
+ export declare function validateWebreelConfig(config: unknown, version?: number): ValidationError[];
12
+ export declare function buildLineMap(raw: string): Map<string, number>;
13
+ export declare function formatValidationErrors(filePath: string, errors: ValidationError[], lineMap?: Map<string, number>): string;
14
+ export declare function getConfigDir(configPath: string): string;
15
+ export declare function filterVideosByName(videos: VideoConfig[], names: string[]): VideoConfig[];
16
+ export declare function resolveConfigPath(configPath?: string): string;
17
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG7D,eAAO,MAAM,mBAAmB,mBAAmB,CAAC;AACpD,eAAO,MAAM,mBAAmB,wBAAwB,CAAC;AACzD,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAKxC,wBAAgB,kBAAkB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAK1D;AAsMD,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAoChF;AAiKD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAoaD,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,OAAO,EACf,OAAO,GAAE,MAA+B,GACvC,eAAe,EAAE,CA8OnB;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CA8B7D;AAgBD,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,eAAe,EAAE,EACzB,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC5B,MAAM,CAeR;AAED,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,WAAW,EAAE,EACrB,KAAK,EAAE,MAAM,EAAE,GACd,WAAW,EAAE,CAUf;AAED,wBAAgB,iBAAiB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CA4B7D"}