保誠-保戶業務員媒合平台
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#!/usr/bin/env node
const fs = require('fs');
const cssesc = require('../cssesc.js');
const strings = process.argv.splice(2);
const stdin = process.stdin;
const options = {};
const log = console.log;
 
const main = function() {
    const option = strings[0];
 
    if (/^(?:-h|--help|undefined)$/.test(option)) {
        log(
            'cssesc v%s - https://mths.be/cssesc',
            cssesc.version
        );
        log([
            '\nUsage:\n',
            '\tcssesc [string]',
            '\tcssesc [-i | --identifier] [string]',
            '\tcssesc [-s | --single-quotes] [string]',
            '\tcssesc [-d | --double-quotes] [string]',
            '\tcssesc [-w | --wrap] [string]',
            '\tcssesc [-e | --escape-everything] [string]',
            '\tcssesc [-v | --version]',
            '\tcssesc [-h | --help]',
            '\nExamples:\n',
            '\tcssesc \'f\xF6o \u2665 b\xE5r \uD834\uDF06 baz\'',
            '\tcssesc --identifier \'f\xF6o \u2665 b\xE5r \uD834\uDF06 baz\'',
            '\tcssesc --escape-everything \'f\xF6o \u2665 b\xE5r \uD834\uDF06 baz\'',
            '\tcssesc --double-quotes --wrap \'f\xF6o \u2665 b\xE5r \uD834\uDF06 baz\'',
            '\techo \'f\xF6o \u2665 b\xE5r \uD834\uDF06 baz\' | cssesc'
        ].join('\n'));
        return process.exit(1);
    }
 
    if (/^(?:-v|--version)$/.test(option)) {
        log('v%s', cssesc.version);
        return process.exit(1);
    }
 
    strings.forEach(function(string) {
        // Process options
        if (/^(?:-i|--identifier)$/.test(string)) {
            options.isIdentifier = true;
            return;
        }
        if (/^(?:-s|--single-quotes)$/.test(string)) {
            options.quotes = 'single';
            return;
        }
        if (/^(?:-d|--double-quotes)$/.test(string)) {
            options.quotes = 'double';
            return;
        }
        if (/^(?:-w|--wrap)$/.test(string)) {
            options.wrap = true;
            return;
        }
        if (/^(?:-e|--escape-everything)$/.test(string)) {
            options.escapeEverything = true;
            return;
        }
 
        // Process string(s)
        let result;
        try {
            result = cssesc(string, options);
            log(result);
        } catch (exception) {
            log(exception.message + '\n');
            log('Error: failed to escape.');
            log('If you think this is a bug in cssesc, please report it:');
            log('https://github.com/mathiasbynens/cssesc/issues/new');
            log(
                '\nStack trace using cssesc@%s:\n',
                cssesc.version
            );
            log(exception.stack);
            return process.exit(1);
        }
    });
    // Return with exit status 0 outside of the `forEach` loop, in case
    // multiple strings were passed in.
    return process.exit(0);
 
};
 
if (stdin.isTTY) {
    // handle shell arguments
    main();
} else {
    let timeout;
    // Either the script is called from within a non-TTY context, or `stdin`
    // content is being piped in.
    if (!process.stdout.isTTY) {
        // The script was called from a non-TTY context. This is a rather uncommon
        // use case we don’t actively support. However, we don’t want the script
        // to wait forever in such cases, so…
        timeout = setTimeout(function() {
            // …if no piped data arrived after a whole minute, handle shell
            // arguments instead.
            main();
        }, 60000);
    }
    let data = '';
    stdin.on('data', function(chunk) {
        clearTimeout(timeout);
        data += chunk;
    });
    stdin.on('end', function() {
        strings.push(data.trim());
        main();
    });
    stdin.resume();
}