« get me outta code hell

structures.js « thing « src - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/thing/structures.js
blob: 89c9bd392cfa975fd4572fbeb00eb313ca43af24 (plain)
1
2
3
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
// Generic structure utilities common across various Thing types.

export function validateDirectory(directory) {
    if (typeof directory !== 'string')
        throw new TypeError(`Expected a string, got ${directory}`);

    if (directory.length === 0)
        throw new TypeError(`Expected directory to be non-zero length`);

    if (directory.match(/[^a-zA-Z0-9\-]/))
        throw new TypeError(`Expected only letters, numbers, and dash, got "${directory}"`);

    return true;
}

export function validateReference(type = '') {
    return ref => {
        if (typeof ref !== 'string')
            throw new TypeError(`Expected a string, got ${ref}`);

        if (type) {
            if (!ref.includes(':'))
                throw new TypeError(`Expected ref to begin with "${type}:", but no type specified (ref: ${ref})`);

            const typePart = ref.split(':')[0];
            if (typePart !== type)
                throw new TypeError(`Expected ref to begin with "${type}:", got "${typePart}:" (ref: ${ref})`);
        }

        return true;
    };
}