Loosen plugin id rule (todo §2); allow digits and dashes anywhere (^[a-z0-9-]+$)
This commit is contained in:
@@ -36,9 +36,11 @@ test("definePlugin returns the manifest unchanged — id/mount come from the fol
|
||||
assert.equal(scheduling.routes?.length, 3);
|
||||
});
|
||||
|
||||
test("isValidPluginId accepts kebab-case folder names and rejects everything else", () => {
|
||||
for (const ok of ["scheduling", "people", "people-directory"]) assert.ok(isValidPluginId(ok), ok);
|
||||
for (const bad of ["People", "people_dir", "people-", "-people", "people--dir", "people1", "", "a/b"]) {
|
||||
test("isValidPluginId accepts lowercase/digits/dashes anywhere and rejects everything else", () => {
|
||||
for (const ok of ["scheduling", "people-directory", "people2", "v2", "people--dir", "-people", "people-", "a-1-b", "1"]) {
|
||||
assert.ok(isValidPluginId(ok), ok);
|
||||
}
|
||||
for (const bad of ["People", "people_dir", "a/b", "a.b", "a b", ""]) {
|
||||
assert.ok(!isValidPluginId(bad), bad);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -71,10 +71,10 @@ export function definePlugin(manifest: PluginManifest): PluginManifest {
|
||||
return manifest;
|
||||
}
|
||||
|
||||
// A plugin id (its folder name) — lowercase letters in dash-separated segments: no digits,
|
||||
// uppercase, or leading/trailing/double dashes. Tight on purpose: the id forms the mount path
|
||||
// `/<id>`, the view/static namespace, and the central-override target.
|
||||
const PLUGIN_ID = /^[a-z]+(?:-[a-z]+)*$/;
|
||||
// A plugin id (its folder name) — lowercase a–z, digits, and dashes, dashes allowed anywhere.
|
||||
// Rejects uppercase, underscores, dots, slashes, spaces: the id forms the mount path `/<id>`,
|
||||
// the view/static namespace, and the central-override target, so it must stay URL/path-safe.
|
||||
const PLUGIN_ID = /^[a-z0-9-]+$/;
|
||||
|
||||
export function isValidPluginId(id: string): boolean {
|
||||
return PLUGIN_ID.test(id);
|
||||
|
||||
Reference in New Issue
Block a user