@qodalis/cli-speed-test 0.0.3 → 0.0.4
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/esm2022/lib/processors/cli-speed-test-command-processor.mjs +3 -1
- package/esm2022/lib/version.mjs +2 -2
- package/fesm2022/qodalis-cli-speed-test.mjs +3 -1
- package/fesm2022/qodalis-cli-speed-test.mjs.map +1 -1
- package/lib/version.d.ts +1 -1
- package/package.json +3 -3
- package/umd/index.js +3 -1
|
@@ -10,6 +10,8 @@ export class CliSpeedTestCommandProcessor {
|
|
|
10
10
|
this.version = LIBRARY_VERSION;
|
|
11
11
|
this.metadata = {
|
|
12
12
|
icon: '🚀',
|
|
13
|
+
requiredCoreVersion: '0.0.16',
|
|
14
|
+
requiredCliVersion: '1.0.37',
|
|
13
15
|
};
|
|
14
16
|
this.processors = [
|
|
15
17
|
{
|
|
@@ -164,4 +166,4 @@ export class CliSpeedTestCommandProcessor {
|
|
|
164
166
|
}
|
|
165
167
|
}
|
|
166
168
|
}
|
|
167
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLXNwZWVkLXRlc3QtY29tbWFuZC1wcm9jZXNzb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlZC10ZXN0L3NyYy9saWIvcHJvY2Vzc29ycy9jbGktc3BlZWQtdGVzdC1jb21tYW5kLXByb2Nlc3Nvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsa0JBQWtCLEVBRWxCLG9CQUFvQixHQUN2QixNQUFNLG1CQUFtQixDQUFDO0FBTTNCLE9BQU8sS0FBeUMsTUFBTSxPQUFPLENBQUM7QUFDOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUU3QyxNQUFNLE9BQU8sNEJBQTRCO0lBZXJDO1FBZEEsWUFBTyxHQUFHLFlBQVksQ0FBQztRQUV2QixnQkFBVyxHQUFHLDRCQUE0QixDQUFDO1FBRTNDLFdBQU0sR0FBRyxvQkFBb0IsQ0FBQztRQUU5QixlQUFVLEdBQXdDLEVBQUUsQ0FBQztRQUVyRCxZQUFPLEdBQUcsZUFBZSxDQUFDO1FBRTFCLGFBQVEsR0FBc0M7WUFDMUMsSUFBSSxFQUFFLElBQUk7U0FDYixDQUFDO1FBR0UsSUFBSSxDQUFDLFVBQVUsR0FBRztZQUNkO2dCQUNJLE9BQU8sRUFBRSxLQUFLO2dCQUNkLFdBQVcsRUFBRSw2QkFBNkI7Z0JBQzFDLFVBQVUsRUFBRTtvQkFDUjt3QkFDSSxJQUFJLEVBQUUsY0FBYzt3QkFDcEIsV0FBVyxFQUFFLDBCQUEwQjt3QkFDdkMsSUFBSSxFQUFFLFFBQVE7d0JBQ2QsUUFBUSxFQUFFLEtBQUs7cUJBQ2xCO29CQUNEO3dCQUNJLElBQUksRUFBRSxZQUFZO3dCQUNsQixXQUFXLEVBQUUsd0JBQXdCO3dCQUNyQyxJQUFJLEVBQUUsUUFBUTt3QkFDZCxRQUFRLEVBQUUsS0FBSztxQkFDbEI7aUJBQ0o7Z0JBQ0QsY0FBYyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUU7b0JBQ3ZD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QkFDbkIsSUFBSSxDQUFDLGNBQWMsRUFBRTtvQkFDakIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsNkJBQTZCLENBQUMsQ0FBQztpQkFDNUQ7cUJBQU07b0JBQ0gsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUNsQyxNQUFNLFNBQVMsR0FBRyxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUM7b0JBQy9DLE9BQU8sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUN2Qiw0QkFBNEIsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUM3RCxDQUFDO2lCQUNMO2FBQ0o7aUJBQU07Z0JBQ0gsTUFBTSxDQUFDLENBQUM7YUFDWDtTQUNKO0lBQ0wsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDbGlGb3JlZ3JvdW5kQ29sb3IsXG4gICAgQ2xpUHJvY2Vzc29yTWV0YWRhdGEsXG4gICAgRGVmYXVsdExpYnJhcnlBdXRob3IsXG59IGZyb20gJ0Bxb2RhbGlzL2NsaS1jb3JlJztcbmltcG9ydCB7XG4gICAgQ2xpUHJvY2Vzc0NvbW1hbmQsXG4gICAgSUNsaUNvbW1hbmRQcm9jZXNzb3IsXG4gICAgSUNsaUV4ZWN1dGlvbkNvbnRleHQsXG59IGZyb20gJ0Bxb2RhbGlzL2NsaS1jb3JlJztcbmltcG9ydCBheGlvcywgeyBDYW5jZWxUb2tlbiwgQ2FuY2VsVG9rZW5Tb3VyY2UgfSBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBMSUJSQVJZX1ZFUlNJT04gfSBmcm9tICcuLi92ZXJzaW9uJztcblxuZXhwb3J0IGNsYXNzIENsaVNwZWVkVGVzdENvbW1hbmRQcm9jZXNzb3IgaW1wbGVtZW50cyBJQ2xpQ29tbWFuZFByb2Nlc3NvciB7XG4gICAgY29tbWFuZCA9ICdzcGVlZC10ZXN0JztcblxuICAgIGRlc2NyaXB0aW9uID0gJ1J1biBhbiBpbnRlcm5ldCBzcGVlZCB0ZXN0JztcblxuICAgIGF1dGhvciA9IERlZmF1bHRMaWJyYXJ5QXV0aG9yO1xuXG4gICAgcHJvY2Vzc29ycz86IElDbGlDb21tYW5kUHJvY2Vzc29yW10gfCB1bmRlZmluZWQgPSBbXTtcblxuICAgIHZlcnNpb24gPSBMSUJSQVJZX1ZFUlNJT047XG5cbiAgICBtZXRhZGF0YT86IENsaVByb2Nlc3Nvck1ldGFkYXRhIHwgdW5kZWZpbmVkID0ge1xuICAgICAgICBpY29uOiAn8J+agCcsXG4gICAgfTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnByb2Nlc3NvcnMgPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29tbWFuZDogJ3J1bicsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdSdW4gdGhlIGludGVybmV0IHNwZWVkIHRlc3QnLFxuICAgICAgICAgICAgICAgIHBhcmFtZXRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2Rvd25sb2FkLXVybCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1VSTCB0byBkb3dubG9hZCB0aGUgZmlsZScsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3VwbG9hZC11cmwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdVUkwgdG8gdXBsb2FkIHRoZSBmaWxlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgcHJvY2Vzc0NvbW1hbmQ6IGFzeW5jIChjb21tYW5kLCBjb250ZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNvdXJjZTogQ2FuY2VsVG9rZW5Tb3VyY2UgPVxuICAgICAgICAgICAgICAgICAgICAgICAgYXhpb3MuQ2FuY2VsVG9rZW4uc291cmNlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gY29udGV4dC5vbkFib3J0LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UuY2FuY2VsKCdTcGVlZCB0ZXN0IGFib3J0ZWQgYnkgdXNlcicpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgbmV3IFByb21pc2U8dm9pZD4oYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVJbmZvKCdTdGFydGluZyBsaXZlIHNwZWVkIHRlc3QuLi4nKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG93bmxvYWRVcmwgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQuYXJnc1snZG93bmxvYWQtdXJsJ10gfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaHR0cHM6Ly9wcm94eS5xb2RhbGlzLmNvbS9wcm94eS9odHRwcy9uYmcxLXNwZWVkLmhldHpuZXIuY29tLzEwME1CLmJpbic7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwbG9hZFVybCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC5hcmdzWyd1cGxvYWQtdXJsJ10gfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaHR0cHM6Ly9odHRwYmluLm9yZy9wb3N0JztcblxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJ1bkRvd25sb2FkU3BlZWRUZXN0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3dubG9hZFVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLnRva2VuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJ1blVwbG9hZFNwZWVkVGVzdChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBsb2FkVXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQud3JpdGVyLndyaXRlSW5mbygnU3BlZWQgdGVzdCBjb21wbGV0ZWQnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYFNwZWVkIHRlc3QgZmFpbGVkOiAke2Vycm9yPy50b1N0cmluZygpfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnNob3dQcm9tcHQoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgYXN5bmMgcHJvY2Vzc0NvbW1hbmQoXG4gICAgICAgIGNvbW1hbmQ6IENsaVByb2Nlc3NDb21tYW5kLFxuICAgICAgICBjb250ZXh0OiBJQ2xpRXhlY3V0aW9uQ29udGV4dCxcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgY29udGV4dC5leGVjdXRvci5zaG93SGVscChjb21tYW5kLCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICB3cml0ZURlc2NyaXB0aW9uKGNvbnRleHQ6IElDbGlFeGVjdXRpb25Db250ZXh0KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgd3JpdGVyIH0gPSBjb250ZXh0O1xuICAgICAgICB3cml0ZXIud3JpdGVsbih0aGlzLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgd3JpdGVyLndyaXRlbG4oKTtcbiAgICAgICAgd3JpdGVyLndyaXRlbG4oJ/Cfk4sgVXNhZ2U6Jyk7XG4gICAgICAgIHdyaXRlci53cml0ZWxuKGAgICR7d3JpdGVyLndyYXBJbkNvbG9yKCdzcGVlZC10ZXN0IHJ1bicsIENsaUZvcmVncm91bmRDb2xvci5DeWFuKX0gICAgICAgICAgICAgICAgICAgICAgICAgIFJ1biBkb3dubG9hZCAmIHVwbG9hZCB0ZXN0YCk7XG4gICAgICAgIHdyaXRlci53cml0ZWxuKGAgICR7d3JpdGVyLndyYXBJbkNvbG9yKCdzcGVlZC10ZXN0IHJ1biAtLWRvd25sb2FkLXVybD08dXJsPicsIENsaUZvcmVncm91bmRDb2xvci5DeWFuKX0gICAgIEN1c3RvbSBkb3dubG9hZCBVUkxgKTtcbiAgICAgICAgd3JpdGVyLndyaXRlbG4oYCAgJHt3cml0ZXIud3JhcEluQ29sb3IoJ3NwZWVkLXRlc3QgcnVuIC0tdXBsb2FkLXVybD08dXJsPicsIENsaUZvcmVncm91bmRDb2xvci5DeWFuKX0gICAgICAgQ3VzdG9tIHVwbG9hZCBVUkxgKTtcbiAgICAgICAgd3JpdGVyLndyaXRlbG4oKTtcbiAgICAgICAgd3JpdGVyLndyaXRlbG4oYPCfkqEgUHJlc3MgJHt3cml0ZXIud3JhcEluQ29sb3IoJ0N0cmwrQycsIENsaUZvcmVncm91bmRDb2xvci5ZZWxsb3cpfSB0byBhYm9ydCB0aGUgdGVzdGApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJ1biB0aGUgZG93bmxvYWQgc3BlZWQgdGVzdCB3aXRoIGxpdmUgdXBkYXRlcy5cbiAgICAgKiBAcGFyYW0gY29udGV4dCBDTEkgZXhlY3V0aW9uIGNvbnRleHQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBhc3luYyBydW5Eb3dubG9hZFNwZWVkVGVzdChcbiAgICAgICAgdXJsOiBzdHJpbmcsXG4gICAgICAgIGNvbnRleHQ6IElDbGlFeGVjdXRpb25Db250ZXh0LFxuICAgICAgICBjYW5jZWxUb2tlbjogQ2FuY2VsVG9rZW4sXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgICBsZXQgcHJldmlvdXNUaW1lID0gc3RhcnRUaW1lO1xuICAgICAgICBsZXQgcHJldmlvdXNMb2FkZWQgPSAwO1xuXG4gICAgICAgIGF3YWl0IGF4aW9zLmdldCh1cmwsIHtcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJyxcbiAgICAgICAgICAgIGNhbmNlbFRva2VuOiBjYW5jZWxUb2tlbixcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICBPcmlnaW46IG51bGwsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25Eb3dubG9hZFByb2dyZXNzOiAocHJvZ3Jlc3NFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghIWNhbmNlbFRva2VuLnJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NwZWVkIHRlc3QgYWJvcnRlZCBieSB1c2VyJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbGFwc2VkVGltZSA9IChjdXJyZW50VGltZSAtIHByZXZpb3VzVGltZSkgLyAxMDAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGVzU2luY2VMYXN0VXBkYXRlID1cbiAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3NFdmVudC5sb2FkZWQgLSBwcmV2aW91c0xvYWRlZDtcblxuICAgICAgICAgICAgICAgIGlmIChlbGFwc2VkVGltZSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3BlZWRJbkJwcyA9IGJ5dGVzU2luY2VMYXN0VXBkYXRlIC8gZWxhcHNlZFRpbWU7IC8vIEJ5dGVzIHBlciBzZWNvbmRcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3BlZWRJbk1icHMgPSAoc3BlZWRJbkJwcyAqIDgpIC8gKDEwMjQgKiAxMDI0KTsgLy8gQ29udmVydCB0byBNYnBzXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQud3JpdGVyLndyaXRlbG4oXG4gICAgICAgICAgICAgICAgICAgICAgICBgRG93bmxvYWQgU3BlZWQ6ICR7c3BlZWRJbk1icHMudG9GaXhlZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgKX0gTWJwcyAoUHJvZ3Jlc3M6ICR7KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcm9ncmVzc0V2ZW50LmxvYWRlZCAvIHByb2dyZXNzRXZlbnQudG90YWwhKSAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwXG4gICAgICAgICAgICAgICAgICAgICAgICApLnRvRml4ZWQoMil9JSlgLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBwcmV2aW91cyB2YWx1ZXNcbiAgICAgICAgICAgICAgICBwcmV2aW91c1RpbWUgPSBjdXJyZW50VGltZTtcbiAgICAgICAgICAgICAgICBwcmV2aW91c0xvYWRlZCA9IHByb2dyZXNzRXZlbnQubG9hZGVkO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgZW5kVGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgICBjb25zdCB0b3RhbFRpbWUgPSAoZW5kVGltZSAtIHN0YXJ0VGltZSkgLyAxMDAwO1xuICAgICAgICBjb250ZXh0LndyaXRlci53cml0ZVN1Y2Nlc3MoXG4gICAgICAgICAgICBgRG93bmxvYWQgdGVzdCBjb21wbGV0ZWQgaW4gJHt0b3RhbFRpbWUudG9GaXhlZCgyKX0gc2Vjb25kc2AsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUnVuIHRoZSB1cGxvYWQgc3BlZWQgdGVzdCB3aXRoIGxpdmUgdXBkYXRlcy5cbiAgICAgKiBAcGFyYW0gY29udGV4dCBDTEkgZXhlY3V0aW9uIGNvbnRleHQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBhc3luYyBydW5VcGxvYWRTcGVlZFRlc3QoXG4gICAgICAgIHVybDogc3RyaW5nLFxuICAgICAgICBjb250ZXh0OiBJQ2xpRXhlY3V0aW9uQ29udGV4dCxcbiAgICAgICAgc291cmNlOiBDYW5jZWxUb2tlblNvdXJjZSxcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgdGVzdERhdGEgPSBuZXcgVWludDhBcnJheSgyMCAqIDEwMjQgKiAxMDI0KTsgLy8gMjAgTUIgb2YgcmFuZG9tIGRhdGFcbiAgICAgICAgdGVzdERhdGEuZmlsbCgwKTtcbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICAgIGxldCBwcmV2aW91c1RpbWUgPSBzdGFydFRpbWU7XG4gICAgICAgIGxldCBwcmV2aW91c1VwbG9hZGVkID0gMDtcblxuICAgICAgICBsZXQgdXBsb2FkQ29tcGxldGUgPSBmYWxzZTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgYXhpb3MucG9zdCh1cmwsIHRlc3REYXRhLCB7XG4gICAgICAgICAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScgfSxcbiAgICAgICAgICAgICAgICBjYW5jZWxUb2tlbjogc291cmNlLnRva2VuLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ3N0cmVhbScsXG4gICAgICAgICAgICAgICAgb25VcGxvYWRQcm9ncmVzczogKHByb2dyZXNzRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEhc291cmNlLnRva2VuLnJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTcGVlZCB0ZXN0IGFib3J0ZWQgYnkgdXNlcicpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZWxhcHNlZFRpbWUgPSAoY3VycmVudFRpbWUgLSBwcmV2aW91c1RpbWUpIC8gMTAwMDsgLy8gVGltZSBzaW5jZSBsYXN0IHVwZGF0ZVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBieXRlc1NpbmNlTGFzdFVwZGF0ZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmVzc0V2ZW50LmxvYWRlZCAtIHByZXZpb3VzVXBsb2FkZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsYXBzZWRUaW1lID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3BlZWRJbkJwcyA9IGJ5dGVzU2luY2VMYXN0VXBkYXRlIC8gZWxhcHNlZFRpbWU7IC8vIEJ5dGVzIHBlciBzZWNvbmRcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwZWVkSW5NYnBzID0gKHNwZWVkSW5CcHMgKiA4KSAvICgxMDI0ICogMTAyNCk7IC8vIENvbnZlcnQgdG8gTWJwc1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVsbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgVXBsb2FkIFNwZWVkOiAke3NwZWVkSW5NYnBzLnRvRml4ZWQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX0gTWJwcyAoUHJvZ3Jlc3M6ICR7KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJvZ3Jlc3NFdmVudC5sb2FkZWQgLyBwcm9ncmVzc0V2ZW50LnRvdGFsISkgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLnRvRml4ZWQoMil9JSlgLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBwcmV2aW91cyB2YWx1ZXNcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNUaW1lID0gY3VycmVudFRpbWU7XG4gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzVXBsb2FkZWQgPSBwcm9ncmVzc0V2ZW50LmxvYWRlZDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvZ3Jlc3NFdmVudC5sb2FkZWQgPj0gcHJvZ3Jlc3NFdmVudC50b3RhbCEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwbG9hZENvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS5jYW5jZWwoJ1VwbG9hZCB0ZXN0IGNvbXBsZXRlZCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoYXhpb3MuaXNDYW5jZWwoZSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXVwbG9hZENvbXBsZXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQud3JpdGVyLndyaXRlRXJyb3IoJ1VwbG9hZCB0ZXN0IGFib3J0ZWQgYnkgdXNlcicpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdG90YWxUaW1lID0gKGVuZFRpbWUgLSBzdGFydFRpbWUpIC8gMTAwMDtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVTdWNjZXNzKFxuICAgICAgICAgICAgICAgICAgICAgICAgYFVwbG9hZCB0ZXN0IGNvbXBsZXRlZCBpbiAke3RvdGFsVGltZS50b0ZpeGVkKDIpfSBzZWNvbmRzYCxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|
|
169
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLXNwZWVkLXRlc3QtY29tbWFuZC1wcm9jZXNzb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlZC10ZXN0L3NyYy9saWIvcHJvY2Vzc29ycy9jbGktc3BlZWQtdGVzdC1jb21tYW5kLXByb2Nlc3Nvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsa0JBQWtCLEVBRWxCLG9CQUFvQixHQUN2QixNQUFNLG1CQUFtQixDQUFDO0FBTTNCLE9BQU8sS0FBeUMsTUFBTSxPQUFPLENBQUM7QUFDOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUU3QyxNQUFNLE9BQU8sNEJBQTRCO0lBaUJyQztRQWhCQSxZQUFPLEdBQUcsWUFBWSxDQUFDO1FBRXZCLGdCQUFXLEdBQUcsNEJBQTRCLENBQUM7UUFFM0MsV0FBTSxHQUFHLG9CQUFvQixDQUFDO1FBRTlCLGVBQVUsR0FBd0MsRUFBRSxDQUFDO1FBRXJELFlBQU8sR0FBRyxlQUFlLENBQUM7UUFFMUIsYUFBUSxHQUFzQztZQUMxQyxJQUFJLEVBQUUsSUFBSTtZQUNWLG1CQUFtQixFQUFFLFFBQVE7WUFDN0Isa0JBQWtCLEVBQUUsUUFBUTtTQUMvQixDQUFDO1FBR0UsSUFBSSxDQUFDLFVBQVUsR0FBRztZQUNkO2dCQUNJLE9BQU8sRUFBRSxLQUFLO2dCQUNkLFdBQVcsRUFBRSw2QkFBNkI7Z0JBQzFDLFVBQVUsRUFBRTtvQkFDUjt3QkFDSSxJQUFJLEVBQUUsY0FBYzt3QkFDcEIsV0FBVyxFQUFFLDBCQUEwQjt3QkFDdkMsSUFBSSxFQUFFLFFBQVE7d0JBQ2QsUUFBUSxFQUFFLEtBQUs7cUJBQ2xCO29CQUNEO3dCQUNJLElBQUksRUFBRSxZQUFZO3dCQUNsQixXQUFXLEVBQUUsd0JBQXdCO3dCQUNyQyxJQUFJLEVBQUUsUUFBUTt3QkFDZCxRQUFRLEVBQUUsS0FBSztxQkFDbEI7aUJBQ0o7Z0JBQ0QsY0FB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RTtZQUNSLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDbkIsSUFBSSxDQUFDLGNBQWMsRUFBRTtvQkFDakIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsNkJBQTZCLENBQUMsQ0FBQztpQkFDNUQ7cUJBQU07b0JBQ0gsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUNsQyxNQUFNLFNBQVMsR0FBRyxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUM7b0JBQy9DLE9BQU8sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUN2Qiw0QkFBNEIsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUM3RCxDQUFDO2lCQUNMO2FBQ0o7aUJBQU07Z0JBQ0gsTUFBTSxDQUFDLENBQUM7YUFDWDtTQUNKO0lBQ0wsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDbGlGb3JlZ3JvdW5kQ29sb3IsXG4gICAgQ2xpUHJvY2Vzc29yTWV0YWRhdGEsXG4gICAgRGVmYXVsdExpYnJhcnlBdXRob3IsXG59IGZyb20gJ0Bxb2RhbGlzL2NsaS1jb3JlJztcbmltcG9ydCB7XG4gICAgQ2xpUHJvY2Vzc0NvbW1hbmQsXG4gICAgSUNsaUNvbW1hbmRQcm9jZXNzb3IsXG4gICAgSUNsaUV4ZWN1dGlvbkNvbnRleHQsXG59IGZyb20gJ0Bxb2RhbGlzL2NsaS1jb3JlJztcbmltcG9ydCBheGlvcywgeyBDYW5jZWxUb2tlbiwgQ2FuY2VsVG9rZW5Tb3VyY2UgfSBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBMSUJSQVJZX1ZFUlNJT04gfSBmcm9tICcuLi92ZXJzaW9uJztcblxuZXhwb3J0IGNsYXNzIENsaVNwZWVkVGVzdENvbW1hbmRQcm9jZXNzb3IgaW1wbGVtZW50cyBJQ2xpQ29tbWFuZFByb2Nlc3NvciB7XG4gICAgY29tbWFuZCA9ICdzcGVlZC10ZXN0JztcblxuICAgIGRlc2NyaXB0aW9uID0gJ1J1biBhbiBpbnRlcm5ldCBzcGVlZCB0ZXN0JztcblxuICAgIGF1dGhvciA9IERlZmF1bHRMaWJyYXJ5QXV0aG9yO1xuXG4gICAgcHJvY2Vzc29ycz86IElDbGlDb21tYW5kUHJvY2Vzc29yW10gfCB1bmRlZmluZWQgPSBbXTtcblxuICAgIHZlcnNpb24gPSBMSUJSQVJZX1ZFUlNJT047XG5cbiAgICBtZXRhZGF0YT86IENsaVByb2Nlc3Nvck1ldGFkYXRhIHwgdW5kZWZpbmVkID0ge1xuICAgICAgICBpY29uOiAn8J+agCcsXG4gICAgICAgIHJlcXVpcmVkQ29yZVZlcnNpb246ICcwLjAuMTYnLFxuICAgICAgICByZXF1aXJlZENsaVZlcnNpb246ICcxLjAuMzcnLFxuICAgIH07XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzb3JzID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbW1hbmQ6ICdydW4nLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnUnVuIHRoZSBpbnRlcm5ldCBzcGVlZCB0ZXN0JyxcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdkb3dubG9hZC11cmwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdVUkwgdG8gZG93bmxvYWQgdGhlIGZpbGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICd1cGxvYWQtdXJsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVVJMIHRvIHVwbG9hZCB0aGUgZmlsZScsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NDb21tYW5kOiBhc3luYyAoY29tbWFuZCwgY29udGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzb3VyY2U6IENhbmNlbFRva2VuU291cmNlID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGF4aW9zLkNhbmNlbFRva2VuLnNvdXJjZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IGNvbnRleHQub25BYm9ydC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLmNhbmNlbCgnU3BlZWQgdGVzdCBhYm9ydGVkIGJ5IHVzZXInKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIG5ldyBQcm9taXNlPHZvaWQ+KGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQud3JpdGVyLndyaXRlSW5mbygnU3RhcnRpbmcgbGl2ZSBzcGVlZCB0ZXN0Li4uJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvd25sb2FkVXJsID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLmFyZ3NbJ2Rvd25sb2FkLXVybCddIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2h0dHBzOi8vcHJveHkucW9kYWxpcy5jb20vcHJveHkvaHR0cHMvbmJnMS1zcGVlZC5oZXR6bmVyLmNvbS8xMDBNQi5iaW4nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGxvYWRVcmwgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQuYXJnc1sndXBsb2FkLXVybCddIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2h0dHBzOi8vaHR0cGJpbi5vcmcvcG9zdCc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5ydW5Eb3dubG9hZFNwZWVkVGVzdChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG93bmxvYWRVcmwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS50b2tlbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5ydW5VcGxvYWRTcGVlZFRlc3QoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwbG9hZFVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LndyaXRlci53cml0ZUluZm8oJ1NwZWVkIHRlc3QgY29tcGxldGVkJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQud3JpdGVyLndyaXRlRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBTcGVlZCB0ZXN0IGZhaWxlZDogJHtlcnJvcj8udG9TdHJpbmcoKX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5zaG93UHJvbXB0KCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIGFzeW5jIHByb2Nlc3NDb21tYW5kKFxuICAgICAgICBjb21tYW5kOiBDbGlQcm9jZXNzQ29tbWFuZCxcbiAgICAgICAgY29udGV4dDogSUNsaUV4ZWN1dGlvbkNvbnRleHQsXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IGNvbnRleHQuZXhlY3V0b3Iuc2hvd0hlbHAoY29tbWFuZCwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgd3JpdGVEZXNjcmlwdGlvbihjb250ZXh0OiBJQ2xpRXhlY3V0aW9uQ29udGV4dCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IHdyaXRlciB9ID0gY29udGV4dDtcbiAgICAgICAgd3JpdGVyLndyaXRlbG4odGhpcy5kZXNjcmlwdGlvbik7XG4gICAgICAgIHdyaXRlci53cml0ZWxuKCk7XG4gICAgICAgIHdyaXRlci53cml0ZWxuKCfwn5OLIFVzYWdlOicpO1xuICAgICAgICB3cml0ZXIud3JpdGVsbihgICAke3dyaXRlci53cmFwSW5Db2xvcignc3BlZWQtdGVzdCBydW4nLCBDbGlGb3JlZ3JvdW5kQ29sb3IuQ3lhbil9ICAgICAgICAgICAgICAgICAgICAgICAgICBSdW4gZG93bmxvYWQgJiB1cGxvYWQgdGVzdGApO1xuICAgICAgICB3cml0ZXIud3JpdGVsbihgICAke3dyaXRlci53cmFwSW5Db2xvcignc3BlZWQtdGVzdCBydW4gLS1kb3dubG9hZC11cmw9PHVybD4nLCBDbGlGb3JlZ3JvdW5kQ29sb3IuQ3lhbil9ICAgICBDdXN0b20gZG93bmxvYWQgVVJMYCk7XG4gICAgICAgIHdyaXRlci53cml0ZWxuKGAgICR7d3JpdGVyLndyYXBJbkNvbG9yKCdzcGVlZC10ZXN0IHJ1biAtLXVwbG9hZC11cmw9PHVybD4nLCBDbGlGb3JlZ3JvdW5kQ29sb3IuQ3lhbil9ICAgICAgIEN1c3RvbSB1cGxvYWQgVVJMYCk7XG4gICAgICAgIHdyaXRlci53cml0ZWxuKCk7XG4gICAgICAgIHdyaXRlci53cml0ZWxuKGDwn5KhIFByZXNzICR7d3JpdGVyLndyYXBJbkNvbG9yKCdDdHJsK0MnLCBDbGlGb3JlZ3JvdW5kQ29sb3IuWWVsbG93KX0gdG8gYWJvcnQgdGhlIHRlc3RgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSdW4gdGhlIGRvd25sb2FkIHNwZWVkIHRlc3Qgd2l0aCBsaXZlIHVwZGF0ZXMuXG4gICAgICogQHBhcmFtIGNvbnRleHQgQ0xJIGV4ZWN1dGlvbiBjb250ZXh0LlxuICAgICAqL1xuICAgIHByaXZhdGUgYXN5bmMgcnVuRG93bmxvYWRTcGVlZFRlc3QoXG4gICAgICAgIHVybDogc3RyaW5nLFxuICAgICAgICBjb250ZXh0OiBJQ2xpRXhlY3V0aW9uQ29udGV4dCxcbiAgICAgICAgY2FuY2VsVG9rZW46IENhbmNlbFRva2VuLFxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgICAgbGV0IHByZXZpb3VzVGltZSA9IHN0YXJ0VGltZTtcbiAgICAgICAgbGV0IHByZXZpb3VzTG9hZGVkID0gMDtcblxuICAgICAgICBhd2FpdCBheGlvcy5nZXQodXJsLCB7XG4gICAgICAgICAgICByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcicsXG4gICAgICAgICAgICBjYW5jZWxUb2tlbjogY2FuY2VsVG9rZW4sXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgT3JpZ2luOiBudWxsLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uRG93bmxvYWRQcm9ncmVzczogKHByb2dyZXNzRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoISFjYW5jZWxUb2tlbi5yZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTcGVlZCB0ZXN0IGFib3J0ZWQgYnkgdXNlcicpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZWxhcHNlZFRpbWUgPSAoY3VycmVudFRpbWUgLSBwcmV2aW91c1RpbWUpIC8gMTAwMDtcbiAgICAgICAgICAgICAgICBjb25zdCBieXRlc1NpbmNlTGFzdFVwZGF0ZSA9XG4gICAgICAgICAgICAgICAgICAgIHByb2dyZXNzRXZlbnQubG9hZGVkIC0gcHJldmlvdXNMb2FkZWQ7XG5cbiAgICAgICAgICAgICAgICBpZiAoZWxhcHNlZFRpbWUgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwZWVkSW5CcHMgPSBieXRlc1NpbmNlTGFzdFVwZGF0ZSAvIGVsYXBzZWRUaW1lOyAvLyBCeXRlcyBwZXIgc2Vjb25kXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwZWVkSW5NYnBzID0gKHNwZWVkSW5CcHMgKiA4KSAvICgxMDI0ICogMTAyNCk7IC8vIENvbnZlcnQgdG8gTWJwc1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LndyaXRlci53cml0ZWxuKFxuICAgICAgICAgICAgICAgICAgICAgICAgYERvd25sb2FkIFNwZWVkOiAke3NwZWVkSW5NYnBzLnRvRml4ZWQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMixcbiAgICAgICAgICAgICAgICAgICAgICAgICl9IE1icHMgKFByb2dyZXNzOiAkeyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJvZ3Jlc3NFdmVudC5sb2FkZWQgLyBwcm9ncmVzc0V2ZW50LnRvdGFsISkgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMFxuICAgICAgICAgICAgICAgICAgICAgICAgKS50b0ZpeGVkKDIpfSUpYCxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgcHJldmlvdXMgdmFsdWVzXG4gICAgICAgICAgICAgICAgcHJldmlvdXNUaW1lID0gY3VycmVudFRpbWU7XG4gICAgICAgICAgICAgICAgcHJldmlvdXNMb2FkZWQgPSBwcm9ncmVzc0V2ZW50LmxvYWRlZDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGVuZFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgICAgY29uc3QgdG90YWxUaW1lID0gKGVuZFRpbWUgLSBzdGFydFRpbWUpIC8gMTAwMDtcbiAgICAgICAgY29udGV4dC53cml0ZXIud3JpdGVTdWNjZXNzKFxuICAgICAgICAgICAgYERvd25sb2FkIHRlc3QgY29tcGxldGVkIGluICR7dG90YWxUaW1lLnRvRml4ZWQoMil9IHNlY29uZHNgLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJ1biB0aGUgdXBsb2FkIHNwZWVkIHRlc3Qgd2l0aCBsaXZlIHVwZGF0ZXMuXG4gICAgICogQHBhcmFtIGNvbnRleHQgQ0xJIGV4ZWN1dGlvbiBjb250ZXh0LlxuICAgICAqL1xuICAgIHByaXZhdGUgYXN5bmMgcnVuVXBsb2FkU3BlZWRUZXN0KFxuICAgICAgICB1cmw6IHN0cmluZyxcbiAgICAgICAgY29udGV4dDogSUNsaUV4ZWN1dGlvbkNvbnRleHQsXG4gICAgICAgIHNvdXJjZTogQ2FuY2VsVG9rZW5Tb3VyY2UsXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHRlc3REYXRhID0gbmV3IFVpbnQ4QXJyYXkoMjAgKiAxMDI0ICogMTAyNCk7IC8vIDIwIE1CIG9mIHJhbmRvbSBkYXRhXG4gICAgICAgIHRlc3REYXRhLmZpbGwoMCk7XG4gICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgICBsZXQgcHJldmlvdXNUaW1lID0gc3RhcnRUaW1lO1xuICAgICAgICBsZXQgcHJldmlvdXNVcGxvYWRlZCA9IDA7XG5cbiAgICAgICAgbGV0IHVwbG9hZENvbXBsZXRlID0gZmFsc2U7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IGF4aW9zLnBvc3QodXJsLCB0ZXN0RGF0YSwge1xuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nIH0sXG4gICAgICAgICAgICAgICAgY2FuY2VsVG9rZW46IHNvdXJjZS50b2tlbixcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6ICdzdHJlYW0nLFxuICAgICAgICAgICAgICAgIG9uVXBsb2FkUHJvZ3Jlc3M6IChwcm9ncmVzc0V2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghIXNvdXJjZS50b2tlbi5yZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU3BlZWQgdGVzdCBhYm9ydGVkIGJ5IHVzZXInKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lID0gKGN1cnJlbnRUaW1lIC0gcHJldmlvdXNUaW1lKSAvIDEwMDA7IC8vIFRpbWUgc2luY2UgbGFzdCB1cGRhdGVcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZXNTaW5jZUxhc3RVcGRhdGUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3NFdmVudC5sb2FkZWQgLSBwcmV2aW91c1VwbG9hZGVkO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChlbGFwc2VkVGltZSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwZWVkSW5CcHMgPSBieXRlc1NpbmNlTGFzdFVwZGF0ZSAvIGVsYXBzZWRUaW1lOyAvLyBCeXRlcyBwZXIgc2Vjb25kXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcGVlZEluTWJwcyA9IChzcGVlZEluQnBzICogOCkgLyAoMTAyNCAqIDEwMjQpOyAvLyBDb252ZXJ0IHRvIE1icHNcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQud3JpdGVyLndyaXRlbG4oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYFVwbG9hZCBTcGVlZDogJHtzcGVlZEluTWJwcy50b0ZpeGVkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9IE1icHMgKFByb2dyZXNzOiAkeyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByb2dyZXNzRXZlbnQubG9hZGVkIC8gcHJvZ3Jlc3NFdmVudC50b3RhbCEpICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKS50b0ZpeGVkKDIpfSUpYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgcHJldmlvdXMgdmFsdWVzXG4gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzVGltZSA9IGN1cnJlbnRUaW1lO1xuICAgICAgICAgICAgICAgICAgICBwcmV2aW91c1VwbG9hZGVkID0gcHJvZ3Jlc3NFdmVudC5sb2FkZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb2dyZXNzRXZlbnQubG9hZGVkID49IHByb2dyZXNzRXZlbnQudG90YWwhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGxvYWRDb21wbGV0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UuY2FuY2VsKCdVcGxvYWQgdGVzdCBjb21wbGV0ZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGF4aW9zLmlzQ2FuY2VsKGUpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF1cGxvYWRDb21wbGV0ZSkge1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LndyaXRlci53cml0ZUVycm9yKCdVcGxvYWQgdGVzdCBhYm9ydGVkIGJ5IHVzZXInKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmRUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvdGFsVGltZSA9IChlbmRUaW1lIC0gc3RhcnRUaW1lKSAvIDEwMDA7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQud3JpdGVyLndyaXRlU3VjY2VzcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIGBVcGxvYWQgdGVzdCBjb21wbGV0ZWQgaW4gJHt0b3RhbFRpbWUudG9GaXhlZCgyKX0gc2Vjb25kc2AsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIl19
|
package/esm2022/lib/version.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// Automatically generated during build
|
|
2
|
-
export const LIBRARY_VERSION = '0.0.
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
export const LIBRARY_VERSION = '0.0.4';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWVkLXRlc3Qvc3JjL2xpYi92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLHVDQUF1QztBQUN2QyxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiXG4vLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBkdXJpbmcgYnVpbGRcbmV4cG9ydCBjb25zdCBMSUJSQVJZX1ZFUlNJT04gPSAnMC4wLjQnO1xuICAiXX0=
|
|
@@ -5,7 +5,7 @@ import { DefaultLibraryAuthor, CliForegroundColor } from '@qodalis/cli-core';
|
|
|
5
5
|
import axios from 'axios';
|
|
6
6
|
|
|
7
7
|
// Automatically generated during build
|
|
8
|
-
const LIBRARY_VERSION = '0.0.
|
|
8
|
+
const LIBRARY_VERSION = '0.0.4';
|
|
9
9
|
|
|
10
10
|
class CliSpeedTestCommandProcessor {
|
|
11
11
|
constructor() {
|
|
@@ -16,6 +16,8 @@ class CliSpeedTestCommandProcessor {
|
|
|
16
16
|
this.version = LIBRARY_VERSION;
|
|
17
17
|
this.metadata = {
|
|
18
18
|
icon: '🚀',
|
|
19
|
+
requiredCoreVersion: '0.0.16',
|
|
20
|
+
requiredCliVersion: '1.0.37',
|
|
19
21
|
};
|
|
20
22
|
this.processors = [
|
|
21
23
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qodalis-cli-speed-test.mjs","sources":["../../../projects/speed-test/src/lib/version.ts","../../../projects/speed-test/src/lib/processors/cli-speed-test-command-processor.ts","../../../projects/speed-test/src/lib/cli-speed-test.module.ts","../../../projects/speed-test/src/public-api.ts","../../../projects/speed-test/src/qodalis-cli-speed-test.ts"],"sourcesContent":["\n// Automatically generated during build\nexport const LIBRARY_VERSION = '0.0.3';\n ","import {\n CliForegroundColor,\n CliProcessorMetadata,\n DefaultLibraryAuthor,\n} from '@qodalis/cli-core';\nimport {\n CliProcessCommand,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport axios, { CancelToken, CancelTokenSource } from 'axios';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliSpeedTestCommandProcessor implements ICliCommandProcessor {\n command = 'speed-test';\n\n description = 'Run an internet speed test';\n\n author = DefaultLibraryAuthor;\n\n processors?: ICliCommandProcessor[] | undefined = [];\n\n version = LIBRARY_VERSION;\n\n metadata?: CliProcessorMetadata | undefined = {\n icon: '🚀',\n };\n\n constructor() {\n this.processors = [\n {\n command: 'run',\n description: 'Run the internet speed test',\n parameters: [\n {\n name: 'download-url',\n description: 'URL to download the file',\n type: 'string',\n required: false,\n },\n {\n name: 'upload-url',\n description: 'URL to upload the file',\n type: 'string',\n required: false,\n },\n ],\n processCommand: async (command, context) => {\n const source: CancelTokenSource =\n axios.CancelToken.source();\n\n const subscription = context.onAbort.subscribe(() => {\n source.cancel('Speed test aborted by user');\n\n subscription.unsubscribe();\n });\n\n new Promise<void>(async (resolve, reject) => {\n context.writer.writeInfo('Starting live speed test...');\n\n const downloadUrl =\n command.args['download-url'] ||\n 'https://proxy.qodalis.com/proxy/https/nbg1-speed.hetzner.com/100MB.bin';\n\n const uploadUrl =\n command.args['upload-url'] ||\n 'https://httpbin.org/post';\n\n try {\n await this.runDownloadSpeedTest(\n downloadUrl,\n context,\n source.token,\n );\n\n await this.runUploadSpeedTest(\n uploadUrl,\n context,\n source,\n );\n\n context.writer.writeInfo('Speed test completed');\n\n resolve();\n } catch (error) {\n context.writer.writeError(\n `Speed test failed: ${error?.toString()}`,\n );\n\n reject(error);\n }\n\n subscription.unsubscribe();\n\n context.showPrompt();\n });\n },\n },\n ];\n }\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n await context.executor.showHelp(command, context);\n }\n\n writeDescription(context: ICliExecutionContext): void {\n const { writer } = context;\n writer.writeln(this.description);\n writer.writeln();\n writer.writeln('📋 Usage:');\n writer.writeln(` ${writer.wrapInColor('speed-test run', CliForegroundColor.Cyan)} Run download & upload test`);\n writer.writeln(` ${writer.wrapInColor('speed-test run --download-url=<url>', CliForegroundColor.Cyan)} Custom download URL`);\n writer.writeln(` ${writer.wrapInColor('speed-test run --upload-url=<url>', CliForegroundColor.Cyan)} Custom upload URL`);\n writer.writeln();\n writer.writeln(`💡 Press ${writer.wrapInColor('Ctrl+C', CliForegroundColor.Yellow)} to abort the test`);\n }\n\n /**\n * Run the download speed test with live updates.\n * @param context CLI execution context.\n */\n private async runDownloadSpeedTest(\n url: string,\n context: ICliExecutionContext,\n cancelToken: CancelToken,\n ): Promise<void> {\n const startTime = performance.now();\n let previousTime = startTime;\n let previousLoaded = 0;\n\n await axios.get(url, {\n responseType: 'arraybuffer',\n cancelToken: cancelToken,\n headers: {\n Origin: null,\n },\n onDownloadProgress: (progressEvent) => {\n if (!!cancelToken.reason) {\n throw new Error('Speed test aborted by user');\n }\n\n const currentTime = performance.now();\n const elapsedTime = (currentTime - previousTime) / 1000;\n const bytesSinceLastUpdate =\n progressEvent.loaded - previousLoaded;\n\n if (elapsedTime > 0) {\n const speedInBps = bytesSinceLastUpdate / elapsedTime; // Bytes per second\n const speedInMbps = (speedInBps * 8) / (1024 * 1024); // Convert to Mbps\n context.writer.writeln(\n `Download Speed: ${speedInMbps.toFixed(\n 2,\n )} Mbps (Progress: ${(\n (progressEvent.loaded / progressEvent.total!) *\n 100\n ).toFixed(2)}%)`,\n );\n }\n\n // Update previous values\n previousTime = currentTime;\n previousLoaded = progressEvent.loaded;\n },\n });\n\n const endTime = performance.now();\n const totalTime = (endTime - startTime) / 1000;\n context.writer.writeSuccess(\n `Download test completed in ${totalTime.toFixed(2)} seconds`,\n );\n }\n\n /**\n * Run the upload speed test with live updates.\n * @param context CLI execution context.\n */\n private async runUploadSpeedTest(\n url: string,\n context: ICliExecutionContext,\n source: CancelTokenSource,\n ): Promise<void> {\n const testData = new Uint8Array(20 * 1024 * 1024); // 20 MB of random data\n testData.fill(0);\n const startTime = performance.now();\n let previousTime = startTime;\n let previousUploaded = 0;\n\n let uploadComplete = false;\n\n try {\n await axios.post(url, testData, {\n headers: { 'Content-Type': 'application/octet-stream' },\n cancelToken: source.token,\n responseType: 'stream',\n onUploadProgress: (progressEvent) => {\n if (!!source.token.reason) {\n throw new Error('Speed test aborted by user');\n }\n\n const currentTime = performance.now();\n const elapsedTime = (currentTime - previousTime) / 1000; // Time since last update\n const bytesSinceLastUpdate =\n progressEvent.loaded - previousUploaded;\n\n if (elapsedTime > 0) {\n const speedInBps = bytesSinceLastUpdate / elapsedTime; // Bytes per second\n const speedInMbps = (speedInBps * 8) / (1024 * 1024); // Convert to Mbps\n context.writer.writeln(\n `Upload Speed: ${speedInMbps.toFixed(\n 2,\n )} Mbps (Progress: ${(\n (progressEvent.loaded / progressEvent.total!) *\n 100\n ).toFixed(2)}%)`,\n );\n }\n\n // Update previous values\n previousTime = currentTime;\n previousUploaded = progressEvent.loaded;\n\n if (progressEvent.loaded >= progressEvent.total!) {\n uploadComplete = true;\n source.cancel('Upload test completed');\n }\n },\n });\n } catch (e) {\n if (axios.isCancel(e)) {\n if (!uploadComplete) {\n context.writer.writeError('Upload test aborted by user');\n } else {\n const endTime = performance.now();\n const totalTime = (endTime - startTime) / 1000;\n context.writer.writeSuccess(\n `Upload test completed in ${totalTime.toFixed(2)} seconds`,\n );\n }\n } else {\n throw e;\n }\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { resolveCommandProcessorProvider } from '@qodalis/angular-cli';\nimport { CliSpeedTestCommandProcessor } from './processors/cli-speed-test-command-processor';\n\n@NgModule({\n declarations: [],\n imports: [],\n exports: [],\n providers: [resolveCommandProcessorProvider(CliSpeedTestCommandProcessor)],\n})\nexport class CliSpeedTestModule {}\n","/*\n * Public API Surface of speed-test\n */\n\nexport * from './lib/cli-speed-test.module';\n\nexport * from './lib/processors/cli-speed-test-command-processor';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"qodalis-cli-speed-test.mjs","sources":["../../../projects/speed-test/src/lib/version.ts","../../../projects/speed-test/src/lib/processors/cli-speed-test-command-processor.ts","../../../projects/speed-test/src/lib/cli-speed-test.module.ts","../../../projects/speed-test/src/public-api.ts","../../../projects/speed-test/src/qodalis-cli-speed-test.ts"],"sourcesContent":["\n// Automatically generated during build\nexport const LIBRARY_VERSION = '0.0.4';\n ","import {\n CliForegroundColor,\n CliProcessorMetadata,\n DefaultLibraryAuthor,\n} from '@qodalis/cli-core';\nimport {\n CliProcessCommand,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport axios, { CancelToken, CancelTokenSource } from 'axios';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliSpeedTestCommandProcessor implements ICliCommandProcessor {\n command = 'speed-test';\n\n description = 'Run an internet speed test';\n\n author = DefaultLibraryAuthor;\n\n processors?: ICliCommandProcessor[] | undefined = [];\n\n version = LIBRARY_VERSION;\n\n metadata?: CliProcessorMetadata | undefined = {\n icon: '🚀',\n requiredCoreVersion: '0.0.16',\n requiredCliVersion: '1.0.37',\n };\n\n constructor() {\n this.processors = [\n {\n command: 'run',\n description: 'Run the internet speed test',\n parameters: [\n {\n name: 'download-url',\n description: 'URL to download the file',\n type: 'string',\n required: false,\n },\n {\n name: 'upload-url',\n description: 'URL to upload the file',\n type: 'string',\n required: false,\n },\n ],\n processCommand: async (command, context) => {\n const source: CancelTokenSource =\n axios.CancelToken.source();\n\n const subscription = context.onAbort.subscribe(() => {\n source.cancel('Speed test aborted by user');\n\n subscription.unsubscribe();\n });\n\n new Promise<void>(async (resolve, reject) => {\n context.writer.writeInfo('Starting live speed test...');\n\n const downloadUrl =\n command.args['download-url'] ||\n 'https://proxy.qodalis.com/proxy/https/nbg1-speed.hetzner.com/100MB.bin';\n\n const uploadUrl =\n command.args['upload-url'] ||\n 'https://httpbin.org/post';\n\n try {\n await this.runDownloadSpeedTest(\n downloadUrl,\n context,\n source.token,\n );\n\n await this.runUploadSpeedTest(\n uploadUrl,\n context,\n source,\n );\n\n context.writer.writeInfo('Speed test completed');\n\n resolve();\n } catch (error) {\n context.writer.writeError(\n `Speed test failed: ${error?.toString()}`,\n );\n\n reject(error);\n }\n\n subscription.unsubscribe();\n\n context.showPrompt();\n });\n },\n },\n ];\n }\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n await context.executor.showHelp(command, context);\n }\n\n writeDescription(context: ICliExecutionContext): void {\n const { writer } = context;\n writer.writeln(this.description);\n writer.writeln();\n writer.writeln('📋 Usage:');\n writer.writeln(` ${writer.wrapInColor('speed-test run', CliForegroundColor.Cyan)} Run download & upload test`);\n writer.writeln(` ${writer.wrapInColor('speed-test run --download-url=<url>', CliForegroundColor.Cyan)} Custom download URL`);\n writer.writeln(` ${writer.wrapInColor('speed-test run --upload-url=<url>', CliForegroundColor.Cyan)} Custom upload URL`);\n writer.writeln();\n writer.writeln(`💡 Press ${writer.wrapInColor('Ctrl+C', CliForegroundColor.Yellow)} to abort the test`);\n }\n\n /**\n * Run the download speed test with live updates.\n * @param context CLI execution context.\n */\n private async runDownloadSpeedTest(\n url: string,\n context: ICliExecutionContext,\n cancelToken: CancelToken,\n ): Promise<void> {\n const startTime = performance.now();\n let previousTime = startTime;\n let previousLoaded = 0;\n\n await axios.get(url, {\n responseType: 'arraybuffer',\n cancelToken: cancelToken,\n headers: {\n Origin: null,\n },\n onDownloadProgress: (progressEvent) => {\n if (!!cancelToken.reason) {\n throw new Error('Speed test aborted by user');\n }\n\n const currentTime = performance.now();\n const elapsedTime = (currentTime - previousTime) / 1000;\n const bytesSinceLastUpdate =\n progressEvent.loaded - previousLoaded;\n\n if (elapsedTime > 0) {\n const speedInBps = bytesSinceLastUpdate / elapsedTime; // Bytes per second\n const speedInMbps = (speedInBps * 8) / (1024 * 1024); // Convert to Mbps\n context.writer.writeln(\n `Download Speed: ${speedInMbps.toFixed(\n 2,\n )} Mbps (Progress: ${(\n (progressEvent.loaded / progressEvent.total!) *\n 100\n ).toFixed(2)}%)`,\n );\n }\n\n // Update previous values\n previousTime = currentTime;\n previousLoaded = progressEvent.loaded;\n },\n });\n\n const endTime = performance.now();\n const totalTime = (endTime - startTime) / 1000;\n context.writer.writeSuccess(\n `Download test completed in ${totalTime.toFixed(2)} seconds`,\n );\n }\n\n /**\n * Run the upload speed test with live updates.\n * @param context CLI execution context.\n */\n private async runUploadSpeedTest(\n url: string,\n context: ICliExecutionContext,\n source: CancelTokenSource,\n ): Promise<void> {\n const testData = new Uint8Array(20 * 1024 * 1024); // 20 MB of random data\n testData.fill(0);\n const startTime = performance.now();\n let previousTime = startTime;\n let previousUploaded = 0;\n\n let uploadComplete = false;\n\n try {\n await axios.post(url, testData, {\n headers: { 'Content-Type': 'application/octet-stream' },\n cancelToken: source.token,\n responseType: 'stream',\n onUploadProgress: (progressEvent) => {\n if (!!source.token.reason) {\n throw new Error('Speed test aborted by user');\n }\n\n const currentTime = performance.now();\n const elapsedTime = (currentTime - previousTime) / 1000; // Time since last update\n const bytesSinceLastUpdate =\n progressEvent.loaded - previousUploaded;\n\n if (elapsedTime > 0) {\n const speedInBps = bytesSinceLastUpdate / elapsedTime; // Bytes per second\n const speedInMbps = (speedInBps * 8) / (1024 * 1024); // Convert to Mbps\n context.writer.writeln(\n `Upload Speed: ${speedInMbps.toFixed(\n 2,\n )} Mbps (Progress: ${(\n (progressEvent.loaded / progressEvent.total!) *\n 100\n ).toFixed(2)}%)`,\n );\n }\n\n // Update previous values\n previousTime = currentTime;\n previousUploaded = progressEvent.loaded;\n\n if (progressEvent.loaded >= progressEvent.total!) {\n uploadComplete = true;\n source.cancel('Upload test completed');\n }\n },\n });\n } catch (e) {\n if (axios.isCancel(e)) {\n if (!uploadComplete) {\n context.writer.writeError('Upload test aborted by user');\n } else {\n const endTime = performance.now();\n const totalTime = (endTime - startTime) / 1000;\n context.writer.writeSuccess(\n `Upload test completed in ${totalTime.toFixed(2)} seconds`,\n );\n }\n } else {\n throw e;\n }\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { resolveCommandProcessorProvider } from '@qodalis/angular-cli';\nimport { CliSpeedTestCommandProcessor } from './processors/cli-speed-test-command-processor';\n\n@NgModule({\n declarations: [],\n imports: [],\n exports: [],\n providers: [resolveCommandProcessorProvider(CliSpeedTestCommandProcessor)],\n})\nexport class CliSpeedTestModule {}\n","/*\n * Public API Surface of speed-test\n */\n\nexport * from './lib/cli-speed-test.module';\n\nexport * from './lib/processors/cli-speed-test-command-processor';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/lib/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const LIBRARY_VERSION = "0.0.
|
|
1
|
+
export declare const LIBRARY_VERSION = "0.0.4";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@qodalis/cli-speed-test",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.4",
|
|
4
4
|
"description": "An Angular CLI extension that provides speed test utilities",
|
|
5
5
|
"author": "Nicolae Lupei, Qodalis Solutions",
|
|
6
6
|
"license": "MIT",
|
|
@@ -24,8 +24,8 @@
|
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
26
|
"tslib": "^2.3.0",
|
|
27
|
-
"@qodalis/cli-core": "^0.0.
|
|
28
|
-
"@qodalis/angular-cli": "^1.0.
|
|
27
|
+
"@qodalis/cli-core": "^0.0.16",
|
|
28
|
+
"@qodalis/angular-cli": "^1.0.37"
|
|
29
29
|
},
|
|
30
30
|
"sideEffects": false,
|
|
31
31
|
"cliDependencies": [
|
package/umd/index.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
})(this, (function (cliCore, axios) { 'use strict';
|
|
6
6
|
|
|
7
7
|
// Automatically generated during build
|
|
8
|
-
const LIBRARY_VERSION = '0.0.
|
|
8
|
+
const LIBRARY_VERSION = '0.0.4';
|
|
9
9
|
|
|
10
10
|
class CliSpeedTestCommandProcessor {
|
|
11
11
|
constructor() {
|
|
@@ -16,6 +16,8 @@
|
|
|
16
16
|
this.version = LIBRARY_VERSION;
|
|
17
17
|
this.metadata = {
|
|
18
18
|
icon: '🚀',
|
|
19
|
+
requiredCoreVersion: '0.0.16',
|
|
20
|
+
requiredCliVersion: '1.0.37',
|
|
19
21
|
};
|
|
20
22
|
this.processors = [
|
|
21
23
|
{
|