@stripchatdev/create-stripchat-extension 0.1.21 → 0.1.23
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.
- package/dist/bin/cli.js +56 -43
- package/dist/package.json +1 -1
- package/dist/src/constants.d.ts +2 -12
- package/dist/src/constants.js +30 -27
- package/dist/src/executor.test.js +2 -2
- package/dist/src/mappers/mapProjectConfigToTemplateModel.js +3 -4
- package/dist/src/mappers/mapProjectConfigToTemplateModel.test.js +25 -17
- package/dist/src/planner.js +1 -1
- package/dist/src/planner.test.js +16 -14
- package/dist/src/types.d.ts +15 -6
- package/dist/src/validators/validateSlots.d.ts +2 -2
- package/dist/src/validators/validateSlots.js +19 -15
- package/dist/src/validators/validateSlots.test.js +86 -51
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/templates/AGENTS.md.ejs +15 -15
- package/templates/README.md.ejs +1 -1
- package/templates/public/manifest.json.ejs +4 -4
- package/templates/public/resolveSlotPage.js.ejs +3 -3
- package/templates/vite.config.ts.ejs +2 -2
|
@@ -1,76 +1,111 @@
|
|
|
1
1
|
import { describe, expect, it } from 'vitest';
|
|
2
2
|
import { validateSlots } from './validateSlots.js';
|
|
3
3
|
describe('validateSlots', () => {
|
|
4
|
-
it('
|
|
5
|
-
const result = validateSlots(['
|
|
6
|
-
expect(result.
|
|
7
|
-
expect(result.
|
|
8
|
-
expect(result.
|
|
4
|
+
it('accepts right overlay for games-and-fun', () => {
|
|
5
|
+
const result = validateSlots(['EXTENSION_SLOT_RIGHT_OVERLAY'], 'games-and-fun');
|
|
6
|
+
expect(result.selected).toEqual(['EXTENSION_SLOT_RIGHT_OVERLAY']);
|
|
7
|
+
expect(result.invalid).toEqual([]);
|
|
8
|
+
expect(result.violations).toEqual([]);
|
|
9
9
|
});
|
|
10
|
-
it('
|
|
11
|
-
const result = validateSlots(['
|
|
12
|
-
expect(result.
|
|
13
|
-
expect(result.valid).toEqual(['rightOverlay']);
|
|
10
|
+
it('accepts video decorative overlay for games-and-fun', () => {
|
|
11
|
+
const result = validateSlots(['EXTENSION_SLOT_VIDEO_DECORATIVE_OVERLAY'], 'games-and-fun');
|
|
12
|
+
expect(result.selected).toEqual(['EXTENSION_SLOT_VIDEO_DECORATIVE_OVERLAY']);
|
|
14
13
|
expect(result.invalid).toEqual([]);
|
|
14
|
+
expect(result.violations).toEqual([]);
|
|
15
15
|
});
|
|
16
|
-
it('
|
|
17
|
-
const result = validateSlots([
|
|
18
|
-
expect(result.
|
|
19
|
-
expect(result.
|
|
20
|
-
expect(result.
|
|
16
|
+
it('requires one shared activity overlay for games-and-fun', () => {
|
|
17
|
+
const result = validateSlots([], 'games-and-fun');
|
|
18
|
+
expect(result.selected).toEqual([]);
|
|
19
|
+
expect(result.invalid).toEqual([]);
|
|
20
|
+
expect(result.violations).toEqual([
|
|
21
|
+
'Choose exactly one of: EXTENSION_SLOT_RIGHT_OVERLAY, EXTENSION_SLOT_VIDEO_DECORATIVE_OVERLAY.',
|
|
22
|
+
]);
|
|
21
23
|
});
|
|
22
|
-
it('rejects
|
|
23
|
-
const result = validateSlots(['
|
|
24
|
-
expect(result.
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
it('rejects both shared activity overlays for games-and-fun', () => {
|
|
25
|
+
const result = validateSlots(['EXTENSION_SLOT_RIGHT_OVERLAY', 'EXTENSION_SLOT_VIDEO_DECORATIVE_OVERLAY'], 'games-and-fun');
|
|
26
|
+
expect(result.selected).toEqual([
|
|
27
|
+
'EXTENSION_SLOT_RIGHT_OVERLAY',
|
|
28
|
+
'EXTENSION_SLOT_VIDEO_DECORATIVE_OVERLAY',
|
|
29
|
+
]);
|
|
30
|
+
expect(result.invalid).toEqual([]);
|
|
31
|
+
expect(result.violations).toEqual([
|
|
32
|
+
'Choose exactly one of: EXTENSION_SLOT_RIGHT_OVERLAY, EXTENSION_SLOT_VIDEO_DECORATIVE_OVERLAY.',
|
|
33
|
+
]);
|
|
27
34
|
});
|
|
28
|
-
it('
|
|
29
|
-
const result = validateSlots([], '
|
|
30
|
-
expect(result.
|
|
31
|
-
expect(result.valid).toEqual([]);
|
|
35
|
+
it('allows sex-toys with no optional slots', () => {
|
|
36
|
+
const result = validateSlots([], 'sex-toys');
|
|
37
|
+
expect(result.selected).toEqual([]);
|
|
32
38
|
expect(result.invalid).toEqual([]);
|
|
39
|
+
expect(result.violations).toEqual([]);
|
|
33
40
|
});
|
|
34
|
-
it('
|
|
35
|
-
const result = validateSlots(['
|
|
36
|
-
expect(result.
|
|
37
|
-
expect(result.valid).toEqual(['rightOverlay']);
|
|
41
|
+
it('allows moveable overlay for sex-toys', () => {
|
|
42
|
+
const result = validateSlots(['EXTENSION_SLOT_MOVEABLE_OVERLAY'], 'sex-toys');
|
|
43
|
+
expect(result.selected).toEqual(['EXTENSION_SLOT_MOVEABLE_OVERLAY']);
|
|
38
44
|
expect(result.invalid).toEqual([]);
|
|
45
|
+
expect(result.violations).toEqual([]);
|
|
39
46
|
});
|
|
40
|
-
it('
|
|
41
|
-
const result = validateSlots(['
|
|
42
|
-
expect(result.
|
|
43
|
-
expect(result.valid).toEqual(['videoDecorativeOverlay']);
|
|
47
|
+
it('allows one shared activity overlay for sex-toys', () => {
|
|
48
|
+
const result = validateSlots(['EXTENSION_SLOT_VIDEO_DECORATIVE_OVERLAY'], 'sex-toys');
|
|
49
|
+
expect(result.selected).toEqual(['EXTENSION_SLOT_VIDEO_DECORATIVE_OVERLAY']);
|
|
44
50
|
expect(result.invalid).toEqual([]);
|
|
51
|
+
expect(result.violations).toEqual([]);
|
|
45
52
|
});
|
|
46
|
-
it('
|
|
47
|
-
const result = validateSlots(['
|
|
48
|
-
expect(result.
|
|
49
|
-
|
|
53
|
+
it('allows one shared activity overlay plus moveable overlay for sex-toys', () => {
|
|
54
|
+
const result = validateSlots(['EXTENSION_SLOT_MOVEABLE_OVERLAY', 'EXTENSION_SLOT_RIGHT_OVERLAY'], 'sex-toys');
|
|
55
|
+
expect(result.selected).toEqual([
|
|
56
|
+
'EXTENSION_SLOT_MOVEABLE_OVERLAY',
|
|
57
|
+
'EXTENSION_SLOT_RIGHT_OVERLAY',
|
|
58
|
+
]);
|
|
50
59
|
expect(result.invalid).toEqual([]);
|
|
60
|
+
expect(result.violations).toEqual([]);
|
|
51
61
|
});
|
|
52
|
-
it('
|
|
53
|
-
const result = validateSlots([], 'sex-toys');
|
|
54
|
-
expect(result.
|
|
55
|
-
|
|
62
|
+
it('rejects both shared activity overlays for sex-toys', () => {
|
|
63
|
+
const result = validateSlots(['EXTENSION_SLOT_RIGHT_OVERLAY', 'EXTENSION_SLOT_VIDEO_DECORATIVE_OVERLAY'], 'sex-toys');
|
|
64
|
+
expect(result.selected).toEqual([
|
|
65
|
+
'EXTENSION_SLOT_RIGHT_OVERLAY',
|
|
66
|
+
'EXTENSION_SLOT_VIDEO_DECORATIVE_OVERLAY',
|
|
67
|
+
]);
|
|
56
68
|
expect(result.invalid).toEqual([]);
|
|
69
|
+
expect(result.violations).toEqual([
|
|
70
|
+
'Choose at most one of: EXTENSION_SLOT_RIGHT_OVERLAY, EXTENSION_SLOT_VIDEO_DECORATIVE_OVERLAY.',
|
|
71
|
+
]);
|
|
57
72
|
});
|
|
58
|
-
it('
|
|
59
|
-
const result = validateSlots(['
|
|
60
|
-
expect(result.
|
|
61
|
-
expect(result.
|
|
62
|
-
expect(result.
|
|
73
|
+
it('reports invalid slot names separately from rule violations', () => {
|
|
74
|
+
const result = validateSlots(['EXTENSION_SLOT_RIGHT_OVERLAY', 'unknown-slot'], 'games-and-fun');
|
|
75
|
+
expect(result.selected).toEqual(['EXTENSION_SLOT_RIGHT_OVERLAY']);
|
|
76
|
+
expect(result.invalid).toEqual(['unknown-slot']);
|
|
77
|
+
expect(result.violations).toEqual([]);
|
|
63
78
|
});
|
|
64
|
-
it('
|
|
65
|
-
const result = validateSlots(['
|
|
66
|
-
expect(result.
|
|
67
|
-
expect(result.
|
|
68
|
-
expect(result.
|
|
79
|
+
it('rejects all optional slots for chat-bots', () => {
|
|
80
|
+
const result = validateSlots(['EXTENSION_SLOT_RIGHT_OVERLAY'], 'chat-bots');
|
|
81
|
+
expect(result.selected).toEqual([]);
|
|
82
|
+
expect(result.invalid).toEqual(['EXTENSION_SLOT_RIGHT_OVERLAY']);
|
|
83
|
+
expect(result.violations).toEqual([]);
|
|
69
84
|
});
|
|
70
85
|
it('returns empty result for empty input on category with no selectable slots', () => {
|
|
71
86
|
const result = validateSlots([], 'chat-bots');
|
|
72
|
-
expect(result.
|
|
73
|
-
expect(result.valid).toEqual([]);
|
|
87
|
+
expect(result.selected).toEqual([]);
|
|
74
88
|
expect(result.invalid).toEqual([]);
|
|
89
|
+
expect(result.violations).toEqual([]);
|
|
90
|
+
});
|
|
91
|
+
it('filters invalid slot names while preserving valid selections', () => {
|
|
92
|
+
const result = validateSlots(['EXTENSION_SLOT_RIGHT_OVERLAY', 'nonExistent', 'alsoWrong'], 'sex-toys');
|
|
93
|
+
expect(result.selected).toEqual(['EXTENSION_SLOT_RIGHT_OVERLAY']);
|
|
94
|
+
expect(result.invalid).toEqual(['nonExistent', 'alsoWrong']);
|
|
95
|
+
expect(result.violations).toEqual([]);
|
|
96
|
+
});
|
|
97
|
+
it('rejects alias-like slot names that are not slot constants', () => {
|
|
98
|
+
const result = validateSlots(['moveableOverlay'], 'games-and-fun');
|
|
99
|
+
expect(result.selected).toEqual([]);
|
|
100
|
+
expect(result.invalid).toEqual(['moveableOverlay']);
|
|
101
|
+
expect(result.violations).toEqual([
|
|
102
|
+
'Choose exactly one of: EXTENSION_SLOT_RIGHT_OVERLAY, EXTENSION_SLOT_VIDEO_DECORATIVE_OVERLAY.',
|
|
103
|
+
]);
|
|
104
|
+
});
|
|
105
|
+
it('handles all invalid slots', () => {
|
|
106
|
+
const result = validateSlots(['unknown1', 'unknown2'], 'sex-toys');
|
|
107
|
+
expect(result.selected).toEqual([]);
|
|
108
|
+
expect(result.invalid).toEqual(['unknown1', 'unknown2']);
|
|
109
|
+
expect(result.violations).toEqual([]);
|
|
75
110
|
});
|
|
76
111
|
});
|