epos-spec 1.5.0 → 1.7.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.
- package/dist/epos-spec.d.ts +20 -22
- package/dist/epos-spec.js +326 -239
- package/dist/epos-spec.js.map +1 -1
- package/package.json +5 -5
package/dist/epos-spec.d.ts
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
import { Obj } from 'dropcap/
|
|
2
|
-
|
|
3
|
-
type
|
|
4
|
-
type
|
|
5
|
-
type
|
|
6
|
-
type
|
|
7
|
-
type
|
|
8
|
-
type
|
|
9
|
-
type
|
|
10
|
-
type Spec = {
|
|
1
|
+
import { type Obj } from 'dropcap/utils';
|
|
2
|
+
export type Action = true | string;
|
|
3
|
+
export type Path = string;
|
|
4
|
+
export type Match = LocusMatch | TopMatch | FrameMatch;
|
|
5
|
+
export type MatchPattern = UrlMatchPattern | '<all_urls>';
|
|
6
|
+
export type UrlMatchPattern = string;
|
|
7
|
+
export type Access = 'projects' | 'engine';
|
|
8
|
+
export type Manifest = Obj;
|
|
9
|
+
export type Spec = {
|
|
11
10
|
name: string;
|
|
12
11
|
icon: string | null;
|
|
13
12
|
title: string | null;
|
|
@@ -21,40 +20,39 @@ type Spec = {
|
|
|
21
20
|
permissions: Permissions;
|
|
22
21
|
manifest: Manifest | null;
|
|
23
22
|
};
|
|
24
|
-
type Popup = {
|
|
23
|
+
export type Popup = {
|
|
25
24
|
width: number;
|
|
26
25
|
height: number;
|
|
27
26
|
};
|
|
28
|
-
type Config = {
|
|
27
|
+
export type Config = {
|
|
29
28
|
access: Access[];
|
|
30
29
|
preloadAssets: boolean;
|
|
31
30
|
allowMissingModels: boolean;
|
|
32
31
|
};
|
|
33
|
-
type Target = {
|
|
32
|
+
export type Target = {
|
|
34
33
|
matches: Match[];
|
|
35
34
|
resources: Resource[];
|
|
36
35
|
};
|
|
37
|
-
type LocusMatch = {
|
|
36
|
+
export type LocusMatch = {
|
|
38
37
|
context: 'locus';
|
|
39
38
|
value: 'popup' | 'sidePanel' | 'background';
|
|
40
39
|
};
|
|
41
|
-
type TopMatch = {
|
|
40
|
+
export type TopMatch = {
|
|
42
41
|
context: 'top';
|
|
43
42
|
value: MatchPattern;
|
|
44
43
|
};
|
|
45
|
-
type FrameMatch = {
|
|
44
|
+
export type FrameMatch = {
|
|
46
45
|
context: 'frame';
|
|
47
46
|
value: MatchPattern;
|
|
48
47
|
};
|
|
49
|
-
type Resource = {
|
|
48
|
+
export type Resource = {
|
|
50
49
|
type: 'js' | 'css' | 'lite-js' | 'shadow-css';
|
|
51
50
|
path: Path;
|
|
52
51
|
};
|
|
53
|
-
type Permissions = {
|
|
52
|
+
export type Permissions = {
|
|
54
53
|
mandatory: Permission[];
|
|
55
54
|
optional: Permission[];
|
|
56
55
|
};
|
|
57
|
-
type Permission = 'background' | 'browsingData' | 'contextMenus' | 'cookies' | 'downloads' | 'notifications' | 'storage';
|
|
58
|
-
declare function
|
|
59
|
-
|
|
60
|
-
export { type Access, type Action, type Config, type FrameMatch, type LocusMatch, type Manifest, type Match, type MatchPattern, type Path, type Permission, type Permissions, type Popup, type Resource, type Spec, type Target, type TopMatch, type UrlMatchPattern, parseSpec as default, parseSpec };
|
|
56
|
+
export type Permission = 'background' | 'browsingData' | 'contextMenus' | 'cookies' | 'downloads' | 'notifications' | 'storage';
|
|
57
|
+
export declare function parseSpecJson(json: string): Spec;
|
|
58
|
+
export declare function parseSpecObject(spec: Obj): Spec;
|
package/dist/epos-spec.js
CHANGED
|
@@ -1,286 +1,373 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
]
|
|
1
|
+
import { matchPattern } from 'browser-extension-url-match';
|
|
2
|
+
import { ensureArray, is, safeSync, unique } from 'dropcap/utils';
|
|
3
|
+
import stripJsonComments from 'strip-json-comments';
|
|
4
|
+
const schema = {
|
|
5
|
+
keys: [
|
|
6
|
+
'$schema',
|
|
7
|
+
'name',
|
|
8
|
+
'version',
|
|
9
|
+
'icon',
|
|
10
|
+
'title',
|
|
11
|
+
'description',
|
|
12
|
+
'action',
|
|
13
|
+
'popup',
|
|
14
|
+
'config',
|
|
15
|
+
'assets',
|
|
16
|
+
'targets',
|
|
17
|
+
'permissions',
|
|
18
|
+
'manifest',
|
|
19
|
+
],
|
|
20
|
+
name: { min: 2, max: 20, regex: /^[a-z][a-z0-9-]*[a-z0-9]$/ },
|
|
21
|
+
title: { min: 2, max: 45 },
|
|
22
|
+
description: { max: 132 },
|
|
23
|
+
version: { regex: /^(?:\d{1,5}\.){0,3}\d{1,5}$/ },
|
|
24
|
+
popup: {
|
|
25
|
+
keys: ['width', 'height'],
|
|
26
|
+
width: { min: 150, max: 800, default: 380 },
|
|
27
|
+
height: { min: 150, max: 600 - 8 * 4, default: 600 - 8 * 4 },
|
|
28
|
+
},
|
|
29
|
+
config: {
|
|
30
|
+
keys: ['access', 'preloadAssets', 'allowMissingModels'],
|
|
31
|
+
access: { default: [], variants: ['projects', 'engine'] },
|
|
32
|
+
preloadAssets: { default: true },
|
|
33
|
+
allowMissingModels: { default: false },
|
|
34
|
+
},
|
|
35
|
+
target: {
|
|
36
|
+
keys: ['matches', 'load'],
|
|
37
|
+
},
|
|
38
|
+
permissions: [
|
|
39
|
+
'background',
|
|
40
|
+
'browsingData',
|
|
41
|
+
'contextMenus',
|
|
42
|
+
'cookies',
|
|
43
|
+
'downloads',
|
|
44
|
+
'notifications',
|
|
45
|
+
'storage',
|
|
46
|
+
'optional:background',
|
|
47
|
+
'optional:browsingData',
|
|
48
|
+
'optional:contextMenus',
|
|
49
|
+
'optional:cookies',
|
|
50
|
+
'optional:downloads',
|
|
51
|
+
'optional:notifications',
|
|
52
|
+
'optional:storage',
|
|
53
|
+
],
|
|
55
54
|
};
|
|
56
|
-
function
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
55
|
+
export function parseSpecJson(json) {
|
|
56
|
+
if (!is.string(json))
|
|
57
|
+
throw new Error(`Failed to parse JSON: input is not a string`);
|
|
58
|
+
json = stripJsonComments(json);
|
|
59
|
+
const [spec, error] = safeSync(() => JSON.parse(json));
|
|
60
|
+
if (error)
|
|
61
|
+
throw new Error(`Failed to parse JSON: ${error.message}`);
|
|
62
|
+
return parseSpecObject(spec);
|
|
63
|
+
}
|
|
64
|
+
export function parseSpecObject(spec) {
|
|
65
|
+
if (!is.object(spec))
|
|
66
|
+
throw new Error(`Epos spec must be an object`);
|
|
67
|
+
const keys = [...schema.keys, ...schema.target.keys];
|
|
68
|
+
const badKey = Object.keys(spec).find(key => !keys.includes(key));
|
|
69
|
+
if (badKey)
|
|
70
|
+
throw new Error(`Unknown spec key: "${badKey}"`);
|
|
71
|
+
return {
|
|
72
|
+
name: parseName(spec),
|
|
73
|
+
icon: parseIcon(spec),
|
|
74
|
+
title: parseTitle(spec),
|
|
75
|
+
version: parseVersion(spec),
|
|
76
|
+
description: parseDescription(spec),
|
|
77
|
+
popup: parsePopup(spec),
|
|
78
|
+
action: parseAction(spec),
|
|
79
|
+
config: parseConfig(spec),
|
|
80
|
+
assets: parseAssets(spec),
|
|
81
|
+
targets: parseTargets(spec),
|
|
82
|
+
permissions: parsePermissions(spec),
|
|
83
|
+
manifest: parseManifest(spec),
|
|
84
|
+
};
|
|
78
85
|
}
|
|
79
86
|
function parseName(spec) {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
87
|
+
if (!('name' in spec))
|
|
88
|
+
throw new Error(`'name' field is required`);
|
|
89
|
+
const name = spec.name;
|
|
90
|
+
if (!is.string(name))
|
|
91
|
+
throw new Error(`'name' must be a string`);
|
|
92
|
+
const { min, max, regex } = schema.name;
|
|
93
|
+
if (name.length < min)
|
|
94
|
+
throw new Error(`'name' must be at least ${min} characters`);
|
|
95
|
+
if (name.length > max)
|
|
96
|
+
throw new Error(`'name' must be at most ${max} characters`);
|
|
97
|
+
if (name.toLowerCase() !== name)
|
|
98
|
+
throw new Error(`'name' must be lowercase`);
|
|
99
|
+
if (!/[a-z]/.test(name[0]))
|
|
100
|
+
throw new Error(`'name' must start with a letter`);
|
|
101
|
+
if (!regex.test(name))
|
|
102
|
+
throw new Error(`'name' must match regex: ${regex}`);
|
|
103
|
+
return name;
|
|
88
104
|
}
|
|
89
105
|
function parseIcon(spec) {
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
106
|
+
if (!('icon' in spec))
|
|
107
|
+
return null;
|
|
108
|
+
const icon = spec.icon;
|
|
109
|
+
if (!is.string(icon))
|
|
110
|
+
throw new Error(`'icon' must be a string`);
|
|
111
|
+
return parsePath(icon);
|
|
94
112
|
}
|
|
95
113
|
function parseTitle(spec) {
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
114
|
+
if (!('title' in spec))
|
|
115
|
+
return null;
|
|
116
|
+
const title = spec.title;
|
|
117
|
+
if (!is.string(title))
|
|
118
|
+
throw new Error(`'title' must be a string`);
|
|
119
|
+
const { min, max } = schema.title;
|
|
120
|
+
if (title.length < min)
|
|
121
|
+
throw new Error(`'title' must be at least ${min} characters`);
|
|
122
|
+
if (title.length > max)
|
|
123
|
+
throw new Error(`'title' must be at most ${max} characters`);
|
|
124
|
+
return title;
|
|
103
125
|
}
|
|
104
126
|
function parseVersion(spec) {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
127
|
+
if (!('version' in spec))
|
|
128
|
+
return '0.0.0';
|
|
129
|
+
const version = spec.version;
|
|
130
|
+
if (!is.string(version))
|
|
131
|
+
throw new Error(`'version' must be a string`);
|
|
132
|
+
if (!schema.version.regex.test(version))
|
|
133
|
+
throw new Error(`'version' must be in format V.V.V, or V.V, or V`);
|
|
134
|
+
return version;
|
|
110
135
|
}
|
|
111
136
|
function parseDescription(spec) {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
137
|
+
if (!('description' in spec))
|
|
138
|
+
return null;
|
|
139
|
+
const description = spec.description;
|
|
140
|
+
if (!is.string(description))
|
|
141
|
+
throw new Error(`'description' must be a string`);
|
|
142
|
+
const { max } = schema.description;
|
|
143
|
+
if (description.length > max)
|
|
144
|
+
throw new Error(`'description' must be at most ${max} characters`);
|
|
145
|
+
return description;
|
|
118
146
|
}
|
|
119
147
|
function parsePopup(spec) {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
148
|
+
const popup = structuredClone(spec.popup ?? {});
|
|
149
|
+
if (!is.object(popup))
|
|
150
|
+
throw new Error(`'popup' must be an object`);
|
|
151
|
+
const { keys, width, height } = schema.popup;
|
|
152
|
+
const badKey = Object.keys(popup).find(key => !keys.includes(key));
|
|
153
|
+
if (badKey)
|
|
154
|
+
throw new Error(`Unknown 'popup' key: "${badKey}"`);
|
|
155
|
+
popup.width ??= width.default;
|
|
156
|
+
if (!is.integer(popup.width))
|
|
157
|
+
throw new Error(`'popup.width' must be an integer`);
|
|
158
|
+
if (popup.width < width.min)
|
|
159
|
+
throw new Error(`'popup.width' must be ≥ ${width.min}`);
|
|
160
|
+
if (popup.width > width.max)
|
|
161
|
+
throw new Error(`'popup.width' must be ≤ ${width.max}`);
|
|
162
|
+
popup.height ??= height.default;
|
|
163
|
+
if (!is.integer(popup.height))
|
|
164
|
+
throw new Error(`'popup.height' must be an integer`);
|
|
165
|
+
if (popup.height < height.min)
|
|
166
|
+
throw new Error(`'popup.height' must be ≥ ${height.min}`);
|
|
167
|
+
if (popup.height > height.max)
|
|
168
|
+
throw new Error(`'popup.height' must be ≤ ${height.max}`);
|
|
169
|
+
return popup;
|
|
134
170
|
}
|
|
135
171
|
function parseAction(spec) {
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
172
|
+
const action = spec.action ?? null;
|
|
173
|
+
if (action === null)
|
|
174
|
+
return null;
|
|
175
|
+
if (action === true)
|
|
176
|
+
return true;
|
|
177
|
+
if (!is.string(action))
|
|
178
|
+
throw new Error(`'action' must be a URL or true`);
|
|
179
|
+
if (!isValidUrl(action))
|
|
180
|
+
throw new Error(`Invalid 'action' URL: "${JSON.stringify(action)}"`);
|
|
181
|
+
return action;
|
|
142
182
|
}
|
|
143
183
|
function parseConfig(spec) {
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
allowMissingModels
|
|
160
|
-
|
|
184
|
+
const config = spec.config ?? {};
|
|
185
|
+
if (!is.object(config))
|
|
186
|
+
throw new Error(`'config' must be an object`);
|
|
187
|
+
const badKey = Object.keys(config).find(key => !schema.config.keys.includes(key));
|
|
188
|
+
if (badKey)
|
|
189
|
+
throw new Error(`Unknown 'config' key: "${badKey}"`);
|
|
190
|
+
const access = config.access ?? schema.config.access.default;
|
|
191
|
+
if (!isArrayOfStrings(access))
|
|
192
|
+
throw new Error(`'config.access' must be an array of strings`);
|
|
193
|
+
const badAccess = access.find(value => !schema.config.access.variants.includes(value));
|
|
194
|
+
if (badAccess)
|
|
195
|
+
throw new Error(`Unknown 'config.access' value: "${badAccess}"`);
|
|
196
|
+
const preloadAssets = config.preloadAssets ?? schema.config.preloadAssets.default;
|
|
197
|
+
if (!is.boolean(preloadAssets))
|
|
198
|
+
throw new Error(`'config.preloadAssets' must be a boolean`);
|
|
199
|
+
const allowMissingModels = config.allowMissingModels ?? schema.config.allowMissingModels.default;
|
|
200
|
+
if (!is.boolean(allowMissingModels))
|
|
201
|
+
throw new Error(`'config.allowMissingModels' must be a boolean`);
|
|
202
|
+
return {
|
|
203
|
+
access: access,
|
|
204
|
+
preloadAssets,
|
|
205
|
+
allowMissingModels,
|
|
206
|
+
};
|
|
161
207
|
}
|
|
162
208
|
function parseAssets(spec) {
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
209
|
+
const assets = structuredClone(spec.assets ?? []);
|
|
210
|
+
if (!isArrayOfStrings(assets))
|
|
211
|
+
throw new Error(`'assets' must be an array of strings`);
|
|
212
|
+
// Add icon to assets
|
|
213
|
+
const icon = parseIcon(spec);
|
|
214
|
+
if (icon)
|
|
215
|
+
assets.push(icon);
|
|
216
|
+
return unique(assets.map(path => parsePath(path)));
|
|
168
217
|
}
|
|
169
218
|
function parseTargets(spec) {
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
targets
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
219
|
+
const targets = structuredClone(spec.targets ?? []);
|
|
220
|
+
if (!is.array(targets))
|
|
221
|
+
throw new Error(`'targets' must be an array`);
|
|
222
|
+
// Move top-level target to 'targets'
|
|
223
|
+
if ('matches' in spec || 'load' in spec || 'mode' in spec) {
|
|
224
|
+
targets.unshift({
|
|
225
|
+
matches: structuredClone(spec.matches ?? []),
|
|
226
|
+
load: structuredClone(spec.load ?? []),
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
return targets.map(target => parseTarget(target));
|
|
179
230
|
}
|
|
180
231
|
function parseTarget(target) {
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
232
|
+
if (!is.object(target))
|
|
233
|
+
throw new Error(`Each target must be an object`);
|
|
234
|
+
const { keys } = schema.target;
|
|
235
|
+
const badKey = Object.keys(target).find(key => !keys.includes(key));
|
|
236
|
+
if (badKey)
|
|
237
|
+
throw new Error(`Unknown target key: "${badKey}"`);
|
|
238
|
+
return {
|
|
239
|
+
matches: parseMatches(target),
|
|
240
|
+
resources: parseResources(target),
|
|
241
|
+
};
|
|
189
242
|
}
|
|
190
243
|
function parseMatches(target) {
|
|
191
|
-
|
|
192
|
-
|
|
244
|
+
const matches = ensureArray(target.matches ?? []);
|
|
245
|
+
return matches.map(match => parseMatch(match)).flat();
|
|
193
246
|
}
|
|
194
247
|
function parseMatch(match) {
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
248
|
+
if (!is.string(match))
|
|
249
|
+
throw new Error(`Invalid match pattern: "${JSON.stringify(match)}"`);
|
|
250
|
+
if (match === '<popup>')
|
|
251
|
+
return { context: 'locus', value: 'popup' };
|
|
252
|
+
if (match === '<sidePanel>')
|
|
253
|
+
return { context: 'locus', value: 'sidePanel' };
|
|
254
|
+
if (match === '<background>')
|
|
255
|
+
return { context: 'locus', value: 'background' };
|
|
256
|
+
const context = match.startsWith('frame:') ? 'frame' : 'top';
|
|
257
|
+
let pattern = context === 'frame' ? match.replace('frame:', '') : match;
|
|
258
|
+
if (pattern === '<allUrls>')
|
|
259
|
+
return { context, value: '<all_urls>' };
|
|
260
|
+
if (pattern === '<all_urls>')
|
|
261
|
+
throw new Error(`Use '<allUrls>' instead of '<all_urls>'`);
|
|
262
|
+
if (pattern.startsWith('exact:')) {
|
|
263
|
+
return { context, value: parseMatchPattern(pattern.replace('exact:', '')) };
|
|
264
|
+
}
|
|
265
|
+
// Ensure pattern url has a path: `*://example.com` -> `*://example.com/`
|
|
266
|
+
const href = pattern.replaceAll('*', 'wildcard--');
|
|
267
|
+
if (!URL.canParse(href))
|
|
268
|
+
throw new Error(`Invalid match pattern: "${match}"`);
|
|
269
|
+
const url = new URL(href);
|
|
270
|
+
if (url.pathname === '')
|
|
271
|
+
url.pathname = '/';
|
|
272
|
+
pattern = url.href.replaceAll('wildcard--', '*');
|
|
273
|
+
return [
|
|
274
|
+
{ context, value: parseMatchPattern(pattern) },
|
|
275
|
+
{ context, value: parseMatchPattern(`${pattern}?*`) },
|
|
276
|
+
];
|
|
215
277
|
}
|
|
216
278
|
function parseMatchPattern(pattern) {
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
279
|
+
const matcher = matchPattern(pattern);
|
|
280
|
+
if (!matcher.valid)
|
|
281
|
+
throw new Error(`Invalid match pattern: "${pattern}"`);
|
|
282
|
+
return pattern;
|
|
220
283
|
}
|
|
221
284
|
function parseResources(target) {
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
285
|
+
const load = ensureArray(target.load ?? []);
|
|
286
|
+
if (!isArrayOfStrings(load))
|
|
287
|
+
throw new Error(`'load' must be an array of strings`);
|
|
288
|
+
return load.map(loadEntry => parseResource(loadEntry));
|
|
225
289
|
}
|
|
226
290
|
function parseResource(loadEntry) {
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
if (
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
291
|
+
const isJs = loadEntry.toLowerCase().endsWith('.js');
|
|
292
|
+
const isCss = loadEntry.toLowerCase().endsWith('.css');
|
|
293
|
+
if (!isJs && !isCss)
|
|
294
|
+
throw new Error(`Invalid 'load' file, must be JS or CSS: "${loadEntry}"`);
|
|
295
|
+
if (loadEntry.startsWith('lite:')) {
|
|
296
|
+
if (!isJs)
|
|
297
|
+
throw new Error(`'lite:' resources must be JS files: "${loadEntry}"`);
|
|
298
|
+
return { path: parsePath(loadEntry.replace('lite:', '')), type: 'lite-js' };
|
|
299
|
+
}
|
|
300
|
+
else if (loadEntry.startsWith('shadow:')) {
|
|
301
|
+
if (!isCss)
|
|
302
|
+
throw new Error(`'shadow:' resources must be CSS files: "${loadEntry}"`);
|
|
303
|
+
return { path: parsePath(loadEntry.replace('shadow:', '')), type: 'shadow-css' };
|
|
304
|
+
}
|
|
305
|
+
else {
|
|
306
|
+
return { path: parsePath(loadEntry), type: isJs ? 'js' : 'css' };
|
|
307
|
+
}
|
|
239
308
|
}
|
|
240
309
|
function parsePermissions(spec) {
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
310
|
+
const permissions = spec.permissions ?? [];
|
|
311
|
+
if (!isArrayOfStrings(permissions))
|
|
312
|
+
throw new Error(`'permissions' must be an array of strings`);
|
|
313
|
+
const badPermission = permissions.find(value => !schema.permissions.includes(value));
|
|
314
|
+
if (badPermission)
|
|
315
|
+
throw new Error(`Unknown permission: "${badPermission}"`);
|
|
316
|
+
const mandatoryPermissions = new Set();
|
|
317
|
+
const optionalPermissions = new Set();
|
|
318
|
+
for (const permission of permissions) {
|
|
319
|
+
if (permission.startsWith('optional:')) {
|
|
320
|
+
optionalPermissions.add(permission.replace('optional:', ''));
|
|
321
|
+
}
|
|
322
|
+
else {
|
|
323
|
+
mandatoryPermissions.add(permission);
|
|
324
|
+
}
|
|
252
325
|
}
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
326
|
+
for (const permission of mandatoryPermissions) {
|
|
327
|
+
if (optionalPermissions.has(permission)) {
|
|
328
|
+
throw new Error(`Permission cannot be both mandatory and optional: "${permission}"`);
|
|
329
|
+
}
|
|
257
330
|
}
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
};
|
|
331
|
+
return {
|
|
332
|
+
mandatory: [...mandatoryPermissions],
|
|
333
|
+
optional: [...optionalPermissions],
|
|
334
|
+
};
|
|
263
335
|
}
|
|
264
336
|
function parseManifest(spec) {
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
337
|
+
if (!('manifest' in spec))
|
|
338
|
+
return null;
|
|
339
|
+
if (!is.object(spec.manifest))
|
|
340
|
+
throw new Error(`'manifest' must be an object`);
|
|
341
|
+
return spec.manifest;
|
|
268
342
|
}
|
|
343
|
+
// ---------------------------------------------------------------------------
|
|
344
|
+
// HELPERS
|
|
345
|
+
// ---------------------------------------------------------------------------
|
|
269
346
|
function isArrayOfStrings(value) {
|
|
270
|
-
|
|
347
|
+
return is.array(value) && value.every(is.string);
|
|
271
348
|
}
|
|
272
349
|
function isValidUrl(value) {
|
|
273
|
-
|
|
274
|
-
|
|
350
|
+
if (!is.string(value))
|
|
351
|
+
return false;
|
|
352
|
+
return URL.canParse(value);
|
|
275
353
|
}
|
|
354
|
+
/**
|
|
355
|
+
* - 'path/to' -> 'path/to'
|
|
356
|
+
* - 'path/to/' -> 'path/to'
|
|
357
|
+
* - '/path/to' -> 'path/to'
|
|
358
|
+
* - 'path//to' -> 'path/to'
|
|
359
|
+
* - 'path/./to' -> 'path/to'
|
|
360
|
+
* - './path/to' -> 'path/to'
|
|
361
|
+
* - 'path/../to' -> 'path/../to'
|
|
362
|
+
* - '../path/to' -> throw
|
|
363
|
+
*/
|
|
276
364
|
function parsePath(path) {
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
365
|
+
const normalizedPath = path
|
|
366
|
+
.split('/')
|
|
367
|
+
.filter(path => path && path !== '.')
|
|
368
|
+
.join('/');
|
|
369
|
+
if (normalizedPath.startsWith('..'))
|
|
370
|
+
throw new Error(`External paths are not allowed: "${path}"`);
|
|
371
|
+
return normalizedPath;
|
|
280
372
|
}
|
|
281
|
-
var epos_spec_default = parseSpec;
|
|
282
|
-
export {
|
|
283
|
-
epos_spec_default as default,
|
|
284
|
-
parseSpec
|
|
285
|
-
};
|
|
286
373
|
//# sourceMappingURL=epos-spec.js.map
|
package/dist/epos-spec.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/epos-spec.ts"],"sourcesContent":["import { matchPattern } from 'browser-extension-url-match'\nimport type { Obj } from 'dropcap/types'\nimport { ensureArray, is, safeSync, unique } from 'dropcap/utils'\nimport stripJsonComments from 'strip-json-comments'\n\nexport type Action = true | string\nexport type Path = string\nexport type Match = LocusMatch | TopMatch | FrameMatch\nexport type MatchPattern = UrlMatchPattern | '<all_urls>'\nexport type UrlMatchPattern = string // '*://*.example.com/*'\nexport type Access = 'installer' | 'engine'\nexport type Manifest = Obj\n\nexport type Spec = {\n name: string\n icon: string | null\n title: string | null\n version: string\n description: string | null\n popup: Popup\n action: Action | null\n config: Config\n assets: Path[]\n targets: Target[]\n permissions: Permissions\n manifest: Manifest | null\n}\n\nexport type Popup = {\n width: number\n height: number\n}\n\nexport type Config = {\n access: Access[]\n preloadAssets: boolean\n allowMissingModels: boolean\n}\n\nexport type Target = {\n matches: Match[]\n resources: Resource[]\n}\n\nexport type LocusMatch = {\n context: 'locus'\n value: 'popup' | 'sidePanel' | 'background'\n}\n\nexport type TopMatch = {\n context: 'top'\n value: MatchPattern\n}\n\nexport type FrameMatch = {\n context: 'frame'\n value: MatchPattern\n}\n\nexport type Resource = {\n type: 'js' | 'css' | 'lite-js' | 'shadow-css'\n path: Path\n}\n\nexport type Permissions = {\n mandatory: Permission[]\n optional: Permission[]\n}\n\nexport type Permission =\n | 'background'\n | 'browsingData'\n | 'contextMenus'\n | 'cookies'\n | 'downloads'\n | 'notifications'\n | 'storage'\n\nconst schema = {\n keys: [\n '$schema',\n 'name',\n 'version',\n 'icon',\n 'title',\n 'description',\n 'action',\n 'popup',\n 'config',\n 'assets',\n 'targets',\n 'permissions',\n 'manifest',\n ],\n name: { min: 2, max: 50, regex: /^[a-z0-9][a-z0-9-]*[a-z0-9]$/ },\n title: { min: 2, max: 45 },\n description: { max: 132 },\n version: { regex: /^(?:\\d{1,5}\\.){0,3}\\d{1,5}$/ },\n popup: {\n keys: ['width', 'height'],\n width: { min: 150, max: 800, default: 380 },\n height: { min: 150, max: 600 - 8 * 4, default: 600 - 8 * 4 },\n },\n config: {\n keys: ['access', 'preloadAssets', 'allowMissingModels'],\n access: { default: [], variants: ['installer', 'engine'] },\n preloadAssets: { default: true },\n allowMissingModels: { default: false },\n },\n target: {\n keys: ['matches', 'load'],\n },\n permissions: [\n 'background',\n 'browsingData',\n 'contextMenus',\n 'cookies',\n 'downloads',\n 'notifications',\n 'storage',\n 'optional:background',\n 'optional:browsingData',\n 'optional:contextMenus',\n 'optional:cookies',\n 'optional:downloads',\n 'optional:notifications',\n 'optional:storage',\n ],\n}\n\nexport function parseSpec(json: string): Spec {\n json = stripJsonComments(json)\n const [spec, error] = safeSync(() => JSON.parse(json))\n if (error) throw new Error(`Failed to parse JSON: ${error.message}`)\n if (!is.object(spec)) throw new Error(`Epos spec must be an object`)\n\n const keys = [...schema.keys, ...schema.target.keys]\n const badKey = Object.keys(spec).find(key => !keys.includes(key))\n if (badKey) throw new Error(`Unknown spec key: '${badKey}'`)\n\n return {\n name: parseName(spec),\n icon: parseIcon(spec),\n title: parseTitle(spec),\n version: parseVersion(spec),\n description: parseDescription(spec),\n popup: parsePopup(spec),\n action: parseAction(spec),\n config: parseConfig(spec),\n assets: parseAssets(spec),\n targets: parseTargets(spec),\n permissions: parsePermissions(spec),\n manifest: parseManifest(spec),\n }\n}\n\nfunction parseName(spec: Obj) {\n if (!('name' in spec)) throw new Error(`'name' field is required`)\n\n const name = spec.name\n const { min, max, regex } = schema.name\n if (!is.string(name)) throw new Error(`'name' must be a string`)\n if (name.length < min) throw new Error(`'name' must be at least ${min} characters`)\n if (name.length > max) throw new Error(`'name' must be at most ${max} characters`)\n if (!regex.test(name)) throw new Error(`'name' must match ${regex}`)\n\n return name\n}\n\nfunction parseIcon(spec: Obj) {\n if (!('icon' in spec)) return null\n\n const icon = spec.icon\n if (!is.string(icon)) throw new Error(`'icon' must be a string`)\n\n return parsePath(icon)\n}\n\nfunction parseTitle(spec: Obj): string | null {\n if (!('title' in spec)) return null\n\n const title = spec.title\n if (!is.string(title)) throw new Error(`'title' must be a string`)\n\n const { min, max } = schema.title\n if (title.length < min) throw new Error(`'title' must be at least ${min} characters`)\n if (title.length > max) throw new Error(`'title' must be at most ${max} characters`)\n\n return title\n}\n\nfunction parseVersion(spec: Obj): string {\n if (!('version' in spec)) return '0.0.0'\n\n const version = spec.version\n if (!is.string(version)) throw new Error(`'version' must be a string`)\n if (!schema.version.regex.test(version)) throw new Error(`'version' must be in format X.Y.Z or X.Y or X`)\n\n return version\n}\n\nfunction parseDescription(spec: Obj): string | null {\n if (!('description' in spec)) return null\n\n const description = spec.description\n if (!is.string(description)) throw new Error(`'description' must be a string`)\n\n const { max } = schema.description\n if (description.length > max) throw new Error(`'description' must be at most ${max} characters`)\n\n return description\n}\n\nfunction parsePopup(spec: Obj) {\n const popup = structuredClone(spec.popup ?? {})\n if (!is.object(popup)) throw new Error(`'popup' must be an object`)\n\n const { keys, width, height } = schema.popup\n const badKey = Object.keys(popup).find(key => !keys.includes(key))\n if (badKey) throw new Error(`Unknown 'popup' key: '${badKey}'`)\n\n popup.width ??= width.default\n if (!is.integer(popup.width)) throw new Error(`'popup.width' must be an integer`)\n if (popup.width < width.min) throw new Error(`'popup.width' must be ≥ ${width.min}`)\n if (popup.width > width.max) throw new Error(`'popup.width' must be ≤ ${width.max}`)\n\n popup.height ??= height.default\n if (!is.integer(popup.height)) throw new Error(`'popup.height' must be an integer`)\n if (popup.height < height.min) throw new Error(`'popup.height' must be ≥ ${height.min}`)\n if (popup.height > height.max) throw new Error(`'popup.height' must be ≤ ${height.max}`)\n\n return popup as Popup\n}\n\nfunction parseAction(spec: Obj): Action | null {\n const action = spec.action ?? null\n if (action === null) return null\n if (action === true) return true\n\n if (!is.string(action)) throw new Error(`'action' must be a URL or true`)\n if (!isValidUrl(action)) throw new Error(`Invalid 'action' URL: '${JSON.stringify(action)}'`)\n\n return action\n}\n\nfunction parseConfig(spec: Obj): Config {\n const config = spec.config ?? {}\n if (!is.object(config)) throw new Error(`'config' must be an object`)\n\n const badKey = Object.keys(config).find(key => !schema.config.keys.includes(key))\n if (badKey) throw new Error(`Unknown 'config' key: '${badKey}'`)\n\n const access = config.access ?? schema.config.access.default\n if (!isArrayOfStrings(access)) throw new Error(`'config.access' must be an array of strings`)\n const badAccess = access.find(value => !schema.config.access.variants.includes(value))\n if (badAccess) throw new Error(`Unknown 'config.access' value: '${badAccess}'`)\n\n const preloadAssets = config.preloadAssets ?? schema.config.preloadAssets.default\n if (!is.boolean(preloadAssets)) throw new Error(`'config.preloadAssets' must be a boolean`)\n\n const allowMissingModels = config.allowMissingModels ?? schema.config.allowMissingModels.default\n if (!is.boolean(allowMissingModels)) throw new Error(`'config.allowMissingModels' must be a boolean`)\n\n return {\n access: access as Access[],\n preloadAssets,\n allowMissingModels,\n }\n}\n\nfunction parseAssets(spec: Obj) {\n const assets = structuredClone(spec.assets ?? [])\n if (!isArrayOfStrings(assets)) throw new Error(`'assets' must be an array of strings`)\n\n // Add icon to assets\n const icon = parseIcon(spec)\n if (icon) assets.push(icon)\n\n return unique(assets.map(path => parsePath(path)))\n}\n\nfunction parseTargets(spec: Obj) {\n const targets = structuredClone(spec.targets ?? [])\n if (!is.array(targets)) throw new Error(`'targets' must be an array`)\n\n // Move top-level target to 'targets'\n if ('matches' in spec || 'load' in spec || 'mode' in spec) {\n targets.unshift({\n matches: structuredClone(spec.matches ?? []),\n load: structuredClone(spec.load ?? []),\n })\n }\n\n return targets.map(target => parseTarget(target))\n}\n\nfunction parseTarget(target: unknown): Target {\n if (!is.object(target)) throw new Error(`Each target must be an object`)\n\n const { keys } = schema.target\n const badKey = Object.keys(target).find(key => !keys.includes(key))\n if (badKey) throw new Error(`Unknown target key: '${badKey}'`)\n\n return {\n matches: parseMatches(target),\n resources: parseResources(target),\n }\n}\n\nfunction parseMatches(target: Obj): Match[] {\n const matches = ensureArray(target.matches ?? [])\n return matches.map(match => parseMatch(match)).flat()\n}\n\nfunction parseMatch(match: unknown): Match | Match[] {\n if (!is.string(match)) throw new Error(`Invalid match pattern: '${JSON.stringify(match)}'`)\n\n if (match === '<popup>') return { context: 'locus', value: 'popup' }\n if (match === '<sidePanel>') return { context: 'locus', value: 'sidePanel' }\n if (match === '<background>') return { context: 'locus', value: 'background' }\n\n const context = match.startsWith('frame:') ? 'frame' : 'top'\n let pattern = context === 'frame' ? match.replace('frame:', '') : match\n\n if (pattern === '<allUrls>') return { context, value: '<all_urls>' }\n if (pattern === '<all_urls>') throw new Error(`Use '<allUrls>' instead of '<all_urls>'`)\n\n if (pattern.startsWith('exact:')) {\n return { context, value: parseMatchPattern(pattern.replace('exact:', '')) }\n }\n\n // Ensure pattern url has a path: `*://example.com` -> `*://example.com/`\n const href = pattern.replaceAll('*', 'wildcard--')\n if (!URL.canParse(href)) throw new Error(`Invalid match pattern: '${match}'`)\n const url = new URL(href)\n if (url.pathname === '') url.pathname = '/'\n pattern = url.href.replaceAll('wildcard--', '*')\n\n return [\n { context, value: parseMatchPattern(pattern) },\n { context, value: parseMatchPattern(`${pattern}?*`) },\n ]\n}\n\nfunction parseMatchPattern(pattern: string): MatchPattern {\n const matcher = matchPattern(pattern)\n if (!matcher.valid) throw new Error(`Invalid match pattern: '${pattern}'`)\n return pattern\n}\n\nfunction parseResources(target: Obj) {\n const load = ensureArray(target.load ?? [])\n if (!isArrayOfStrings(load)) throw new Error(`'load' must be an array of strings`)\n return load.map(loadEntry => parseResource(loadEntry))\n}\n\nfunction parseResource(loadEntry: string): Resource {\n const isJs = loadEntry.toLowerCase().endsWith('.js')\n const isCss = loadEntry.toLowerCase().endsWith('.css')\n if (!isJs && !isCss) throw new Error(`Invalid 'load' file, must be JS or CSS: '${loadEntry}'`)\n\n if (loadEntry.startsWith('lite:')) {\n if (!isJs) throw new Error(`'lite:' resources must be JS files: '${loadEntry}'`)\n return { path: loadEntry.replace('lite:', ''), type: 'lite-js' }\n } else if (loadEntry.startsWith('shadow:')) {\n if (!isCss) throw new Error(`'shadow:' resources must be CSS files: '${loadEntry}'`)\n return { path: loadEntry.replace('shadow:', ''), type: 'shadow-css' }\n } else {\n return { path: loadEntry, type: isJs ? 'js' : 'css' }\n }\n}\n\nfunction parsePermissions(spec: Obj): Permissions {\n const permissions = spec.permissions ?? []\n if (!isArrayOfStrings(permissions)) throw new Error(`'permissions' must be an array of strings`)\n\n const badPermission = permissions.find(value => !schema.permissions.includes(value))\n if (badPermission) throw new Error(`Unknown permission: '${badPermission}'`)\n\n const mandatoryPermissions = new Set<string>()\n const optionalPermissions = new Set<string>()\n for (const permission of permissions) {\n if (permission.startsWith('optional:')) {\n optionalPermissions.add(permission.replace('optional:', ''))\n } else {\n mandatoryPermissions.add(permission)\n }\n }\n\n for (const permission of mandatoryPermissions) {\n if (optionalPermissions.has(permission)) {\n throw new Error(`Permission cannot be both mandatory and optional: '${permission}'`)\n }\n }\n\n return {\n mandatory: [...mandatoryPermissions] as Permission[],\n optional: [...optionalPermissions] as Permission[],\n }\n}\n\nfunction parseManifest(spec: Obj): Manifest | null {\n if (!('manifest' in spec)) return null\n if (!is.object(spec.manifest)) throw new Error(`'manifest' must be an object`)\n return spec.manifest\n}\n\n// ---------------------------------------------------------------------------\n// HELPERS\n// ---------------------------------------------------------------------------\n\nfunction isArrayOfStrings(value: unknown) {\n return is.array(value) && value.every(is.string)\n}\n\nfunction isValidUrl(value: unknown) {\n if (!is.string(value)) return false\n return URL.canParse(value)\n}\n\n/**\n * - 'path/to' -> 'path/to'\n * - 'path/to/' -> 'path/to'\n * - '/path/to' -> 'path/to'\n * - 'path//to' -> 'path/to'\n * - 'path/./to' -> 'path/to'\n * - './path/to' -> 'path/to'\n * - 'path/../to' -> 'path/../to'\n * - '../path/to' -> throw\n */\nfunction parsePath(path: string) {\n const normalizedPath = path\n .split('/')\n .filter(path => path && path !== '.')\n .join('/')\n\n if (normalizedPath.startsWith('..')) throw new Error(`External paths are not allowed: '${path}'`)\n\n return normalizedPath\n}\n\nexport default parseSpec\n"],"mappings":"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","names":["path"]}
|
|
1
|
+
{"version":3,"file":"epos-spec.js","sourceRoot":"","sources":["../src/epos-spec.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "epos-spec",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.7.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "imkost",
|
|
7
7
|
"description": "",
|
|
8
8
|
"keywords": [],
|
|
9
9
|
"scripts": {
|
|
10
|
-
"dev": "
|
|
11
|
-
"build": "
|
|
12
|
-
"lint": "
|
|
10
|
+
"dev": "rimraf dist && tsgo --watch",
|
|
11
|
+
"build": "rimraf dist && tsgo",
|
|
12
|
+
"lint": "tsgo --noEmit",
|
|
13
13
|
"release": "sh -c 'npm version ${1:-minor} && npm run build && npm publish' --"
|
|
14
14
|
},
|
|
15
15
|
"exports": {
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
],
|
|
21
21
|
"dependencies": {
|
|
22
22
|
"browser-extension-url-match": "^1.2.0",
|
|
23
|
-
"dropcap": "^1.
|
|
23
|
+
"dropcap": "^1.9.0",
|
|
24
24
|
"strip-json-comments": "^5.0.3"
|
|
25
25
|
}
|
|
26
26
|
}
|