保誠-保戶業務員媒合平台
HelenHuang
2022-06-09 9bdb95c9e34cef640534e5e5a1e2225a80442000
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
"use strict";
 
const errorMessage = (schema, data, message) => ({
    keyword: "absolutePath",
    params: { absolutePath: data },
    message: message,
    parentSchema: schema
});
 
const getErrorFor = (shouldBeAbsolute, data, schema) => {
    const message = shouldBeAbsolute
        ? `The provided value ${JSON.stringify(data)} is not an absolute path!`
        : `A relative path is expected. However, the provided value ${JSON.stringify(
                data
          )} is an absolute path!`;
 
    return errorMessage(schema, data, message);
};
 
module.exports = ajv =>
    ajv.addKeyword("absolutePath", {
        errors: true,
        type: "string",
        compile(expected, schema) {
            function callback(data) {
                let passes = true;
                const isExclamationMarkPresent = data.includes("!");
 
                if (isExclamationMarkPresent) {
                    callback.errors = [
                        errorMessage(
                            schema,
                            data,
                            `The provided value ${JSON.stringify(
                                data
                            )} contains exclamation mark (!) which is not allowed because it's reserved for loader syntax.`
                        )
                    ];
                    passes = false;
                }
                // ?:[A-Za-z]:\\ - Windows absolute path
                // \\\\ - Windows network absolute path
                // \/ - Unix-like OS absolute path
                const isCorrectAbsolutePath =
                    expected === /^(?:[A-Za-z]:\\|\\\\|\/)/.test(data);
                if (!isCorrectAbsolutePath) {
                    callback.errors = [getErrorFor(expected, data, schema)];
                    passes = false;
                }
 
                return passes;
            }
            callback.errors = [];
 
            return callback;
        }
    });