source: trip-planner-front/node_modules/@angular/compiler-cli/ngcc/src/locking/lock_file_with_child_process/index.js@ 6a3a178

Last change on this file since 6a3a178 was 6a3a178, checked in by Ema <ema_spirova@…>, 3 years ago

initial commit

  • Property mode set to 100644
File size: 12.7 KB
Line 
1(function (factory) {
2 if (typeof module === "object" && typeof module.exports === "object") {
3 var v = factory(require, exports);
4 if (v !== undefined) module.exports = v;
5 }
6 else if (typeof define === "function" && define.amd) {
7 define("@angular/compiler-cli/ngcc/src/locking/lock_file_with_child_process/index", ["require", "exports", "child_process", "@angular/compiler-cli/src/ngtsc/logging", "@angular/compiler-cli/ngcc/src/locking/lock_file", "@angular/compiler-cli/ngcc/src/locking/lock_file_with_child_process/util"], factory);
8 }
9})(function (require, exports) {
10 "use strict";
11 Object.defineProperty(exports, "__esModule", { value: true });
12 exports.LockFileWithChildProcess = void 0;
13 /**
14 * @license
15 * Copyright Google LLC All Rights Reserved.
16 *
17 * Use of this source code is governed by an MIT-style license that can be
18 * found in the LICENSE file at https://angular.io/license
19 */
20 var child_process_1 = require("child_process");
21 var logging_1 = require("@angular/compiler-cli/src/ngtsc/logging");
22 var lock_file_1 = require("@angular/compiler-cli/ngcc/src/locking/lock_file");
23 var util_1 = require("@angular/compiler-cli/ngcc/src/locking/lock_file_with_child_process/util");
24 /// <reference types="node" />
25 /**
26 * This `LockFile` implementation uses a child-process to remove the lock file when the main process
27 * exits (for whatever reason).
28 *
29 * There are a few milliseconds between the child-process being forked and it registering its
30 * `disconnect` event, which is responsible for tidying up the lock-file in the event that the main
31 * process exits unexpectedly.
32 *
33 * We eagerly create the unlocker child-process so that it maximizes the time before the lock-file
34 * is actually written, which makes it very unlikely that the unlocker would not be ready in the
35 * case that the developer hits Ctrl-C or closes the terminal within a fraction of a second of the
36 * lock-file being created.
37 *
38 * The worst case scenario is that ngcc is killed too quickly and leaves behind an orphaned
39 * lock-file. In which case the next ngcc run will display a helpful error message about deleting
40 * the lock-file.
41 */
42 var LockFileWithChildProcess = /** @class */ (function () {
43 function LockFileWithChildProcess(fs, logger) {
44 this.fs = fs;
45 this.logger = logger;
46 this.path = lock_file_1.getLockFilePath(fs);
47 this.unlocker = this.createUnlocker(this.path);
48 }
49 LockFileWithChildProcess.prototype.write = function () {
50 if (this.unlocker === null) {
51 // In case we already disconnected the previous unlocker child-process, perhaps by calling
52 // `remove()`. Normally the LockFile should only be used once per instance.
53 this.unlocker = this.createUnlocker(this.path);
54 }
55 this.logger.debug("Attemping to write lock-file at " + this.path + " with PID " + process.pid);
56 // To avoid race conditions, check for existence of the lock-file by trying to create it.
57 // This will throw an error if the file already exists.
58 this.fs.writeFile(this.path, process.pid.toString(), /* exclusive */ true);
59 this.logger.debug("Written lock-file at " + this.path + " with PID " + process.pid);
60 };
61 LockFileWithChildProcess.prototype.read = function () {
62 try {
63 return this.fs.readFile(this.path);
64 }
65 catch (_a) {
66 return '{unknown}';
67 }
68 };
69 LockFileWithChildProcess.prototype.remove = function () {
70 util_1.removeLockFile(this.fs, this.logger, this.path, process.pid.toString());
71 if (this.unlocker !== null) {
72 // If there is an unlocker child-process then disconnect from it so that it can exit itself.
73 this.unlocker.disconnect();
74 this.unlocker = null;
75 }
76 };
77 LockFileWithChildProcess.prototype.createUnlocker = function (path) {
78 var _a, _b;
79 this.logger.debug('Forking unlocker child-process');
80 var logLevel = this.logger.level !== undefined ? this.logger.level.toString() : logging_1.LogLevel.info.toString();
81 var isWindows = process.platform === 'win32';
82 var unlocker = child_process_1.fork(__dirname + '/unlocker.js', [path, logLevel], { detached: true, stdio: isWindows ? 'pipe' : 'inherit' });
83 if (isWindows) {
84 (_a = unlocker.stdout) === null || _a === void 0 ? void 0 : _a.on('data', process.stdout.write.bind(process.stdout));
85 (_b = unlocker.stderr) === null || _b === void 0 ? void 0 : _b.on('data', process.stderr.write.bind(process.stderr));
86 }
87 return unlocker;
88 };
89 return LockFileWithChildProcess;
90 }());
91 exports.LockFileWithChildProcess = LockFileWithChildProcess;
92});
93//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvbmdjYy9zcmMvbG9ja2luZy9sb2NrX2ZpbGVfd2l0aF9jaGlsZF9wcm9jZXNzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQUFBOzs7Ozs7T0FNRztJQUNILCtDQUFpRDtJQUdqRCxtRUFBK0Q7SUFDL0QsOEVBQXVEO0lBRXZELGlHQUFzQztJQUV0Qyw4QkFBOEI7SUFFOUI7Ozs7Ozs7Ozs7Ozs7Ozs7T0FnQkc7SUFDSDtRQUlFLGtDQUFzQixFQUFjLEVBQVksTUFBYztZQUF4QyxPQUFFLEdBQUYsRUFBRSxDQUFZO1lBQVksV0FBTSxHQUFOLE1BQU0sQ0FBUTtZQUM1RCxJQUFJLENBQUMsSUFBSSxHQUFHLDJCQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqRCxDQUFDO1FBR0Qsd0NBQUssR0FBTDtZQUNFLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUU7Z0JBQzFCLDBGQUEwRjtnQkFDMUYsMkVBQTJFO2dCQUMzRSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2hEO1lBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMscUNBQW1DLElBQUksQ0FBQyxJQUFJLGtCQUFhLE9BQU8sQ0FBQyxHQUFLLENBQUMsQ0FBQztZQUMxRix5RkFBeUY7WUFDekYsdURBQXVEO1lBQ3ZELElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0UsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsMEJBQXdCLElBQUksQ0FBQyxJQUFJLGtCQUFhLE9BQU8sQ0FBQyxHQUFLLENBQUMsQ0FBQztRQUNqRixDQUFDO1FBRUQsdUNBQUksR0FBSjtZQUNFLElBQUk7Z0JBQ0YsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDcEM7WUFBQyxXQUFNO2dCQUNOLE9BQU8sV0FBVyxDQUFDO2FBQ3BCO1FBQ0gsQ0FBQztRQUVELHlDQUFNLEdBQU47WUFDRSxxQkFBYyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUN4RSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFO2dCQUMxQiw0RkFBNEY7Z0JBQzVGLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO2FBQ3RCO1FBQ0gsQ0FBQztRQUVTLGlEQUFjLEdBQXhCLFVBQXlCLElBQW9COztZQUMzQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1lBQ3BELElBQU0sUUFBUSxHQUNWLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLGtCQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzlGLElBQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxRQUFRLEtBQUssT0FBTyxDQUFDO1lBQy9DLElBQU0sUUFBUSxHQUFHLG9CQUFJLENBQ2pCLFNBQVMsR0FBRyxjQUFjLEVBQUUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLEVBQzVDLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBQyxDQUFDLENBQUM7WUFDN0QsSUFBSSxTQUFTLEVBQUU7Z0JBQ2IsTUFBQSxRQUFRLENBQUMsTUFBTSwwQ0FBRSxFQUFFLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDdkUsTUFBQSxRQUFRLENBQUMsTUFBTSwwQ0FBRSxFQUFFLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQzthQUN4RTtZQUNELE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUM7UUFDSCwrQkFBQztJQUFELENBQUMsQUF0REQsSUFzREM7SUF0RFksNERBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5pbXBvcnQge0NoaWxkUHJvY2VzcywgZm9ya30gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5cbmltcG9ydCB7QWJzb2x1dGVGc1BhdGgsIEZpbGVTeXN0ZW19IGZyb20gJy4uLy4uLy4uLy4uL3NyYy9uZ3RzYy9maWxlX3N5c3RlbSc7XG5pbXBvcnQge0xvZ2dlciwgTG9nTGV2ZWx9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy9uZ3RzYy9sb2dnaW5nJztcbmltcG9ydCB7Z2V0TG9ja0ZpbGVQYXRoLCBMb2NrRmlsZX0gZnJvbSAnLi4vbG9ja19maWxlJztcblxuaW1wb3J0IHtyZW1vdmVMb2NrRmlsZX0gZnJvbSAnLi91dGlsJztcblxuLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCJub2RlXCIgLz5cblxuLyoqXG4gKiBUaGlzIGBMb2NrRmlsZWAgaW1wbGVtZW50YXRpb24gdXNlcyBhIGNoaWxkLXByb2Nlc3MgdG8gcmVtb3ZlIHRoZSBsb2NrIGZpbGUgd2hlbiB0aGUgbWFpbiBwcm9jZXNzXG4gKiBleGl0cyAoZm9yIHdoYXRldmVyIHJlYXNvbikuXG4gKlxuICogVGhlcmUgYXJlIGEgZmV3IG1pbGxpc2Vjb25kcyBiZXR3ZWVuIHRoZSBjaGlsZC1wcm9jZXNzIGJlaW5nIGZvcmtlZCBhbmQgaXQgcmVnaXN0ZXJpbmcgaXRzXG4gKiBgZGlzY29ubmVjdGAgZXZlbnQsIHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvciB0aWR5aW5nIHVwIHRoZSBsb2NrLWZpbGUgaW4gdGhlIGV2ZW50IHRoYXQgdGhlIG1haW5cbiAqIHByb2Nlc3MgZXhpdHMgdW5leHBlY3RlZGx5LlxuICpcbiAqIFdlIGVhZ2VybHkgY3JlYXRlIHRoZSB1bmxvY2tlciBjaGlsZC1wcm9jZXNzIHNvIHRoYXQgaXQgbWF4aW1pemVzIHRoZSB0aW1lIGJlZm9yZSB0aGUgbG9jay1maWxlXG4gKiBpcyBhY3R1YWxseSB3cml0dGVuLCB3aGljaCBtYWtlcyBpdCB2ZXJ5IHVubGlrZWx5IHRoYXQgdGhlIHVubG9ja2VyIHdvdWxkIG5vdCBiZSByZWFkeSBpbiB0aGVcbiAqIGNhc2UgdGhhdCB0aGUgZGV2ZWxvcGVyIGhpdHMgQ3RybC1DIG9yIGNsb3NlcyB0aGUgdGVybWluYWwgd2l0aGluIGEgZnJhY3Rpb24gb2YgYSBzZWNvbmQgb2YgdGhlXG4gKiBsb2NrLWZpbGUgYmVpbmcgY3JlYXRlZC5cbiAqXG4gKiBUaGUgd29yc3QgY2FzZSBzY2VuYXJpbyBpcyB0aGF0IG5nY2MgaXMga2lsbGVkIHRvbyBxdWlja2x5IGFuZCBsZWF2ZXMgYmVoaW5kIGFuIG9ycGhhbmVkXG4gKiBsb2NrLWZpbGUuIEluIHdoaWNoIGNhc2UgdGhlIG5leHQgbmdjYyBydW4gd2lsbCBkaXNwbGF5IGEgaGVscGZ1bCBlcnJvciBtZXNzYWdlIGFib3V0IGRlbGV0aW5nXG4gKiB0aGUgbG9jay1maWxlLlxuICovXG5leHBvcnQgY2xhc3MgTG9ja0ZpbGVXaXRoQ2hpbGRQcm9jZXNzIGltcGxlbWVudHMgTG9ja0ZpbGUge1xuICBwYXRoOiBBYnNvbHV0ZUZzUGF0aDtcbiAgcHJpdmF0ZSB1bmxvY2tlcjogQ2hpbGRQcm9jZXNzfG51bGw7XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGZzOiBGaWxlU3lzdGVtLCBwcm90ZWN0ZWQgbG9nZ2VyOiBMb2dnZXIpIHtcbiAgICB0aGlzLnBhdGggPSBnZXRMb2NrRmlsZVBhdGgoZnMpO1xuICAgIHRoaXMudW5sb2NrZXIgPSB0aGlzLmNyZWF0ZVVubG9ja2VyKHRoaXMucGF0aCk7XG4gIH1cblxuXG4gIHdyaXRlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnVubG9ja2VyID09PSBudWxsKSB7XG4gICAgICAvLyBJbiBjYXNlIHdlIGFscmVhZHkgZGlzY29ubmVjdGVkIHRoZSBwcmV2aW91cyB1bmxvY2tlciBjaGlsZC1wcm9jZXNzLCBwZXJoYXBzIGJ5IGNhbGxpbmdcbiAgICAgIC8vIGByZW1vdmUoKWAuIE5vcm1hbGx5IHRoZSBMb2NrRmlsZSBzaG91bGQgb25seSBiZSB1c2VkIG9uY2UgcGVyIGluc3RhbmNlLlxuICAgICAgdGhpcy51bmxvY2tlciA9IHRoaXMuY3JlYXRlVW5sb2NrZXIodGhpcy5wYXRoKTtcbiAgICB9XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoYEF0dGVtcGluZyB0byB3cml0ZSBsb2NrLWZpbGUgYXQgJHt0aGlzLnBhdGh9IHdpdGggUElEICR7cHJvY2Vzcy5waWR9YCk7XG4gICAgLy8gVG8gYXZvaWQgcmFjZSBjb25kaXRpb25zLCBjaGVjayBmb3IgZXhpc3RlbmNlIG9mIHRoZSBsb2NrLWZpbGUgYnkgdHJ5aW5nIHRvIGNyZWF0ZSBpdC5cbiAgICAvLyBUaGlzIHdpbGwgdGhyb3cgYW4gZXJyb3IgaWYgdGhlIGZpbGUgYWxyZWFkeSBleGlzdHMuXG4gICAgdGhpcy5mcy53cml0ZUZpbGUodGhpcy5wYXRoLCBwcm9jZXNzLnBpZC50b1N0cmluZygpLCAvKiBleGNsdXNpdmUgKi8gdHJ1ZSk7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoYFdyaXR0ZW4gbG9jay1maWxlIGF0ICR7dGhpcy5wYXRofSB3aXRoIFBJRCAke3Byb2Nlc3MucGlkfWApO1xuICB9XG5cbiAgcmVhZCgpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5mcy5yZWFkRmlsZSh0aGlzLnBhdGgpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuICd7dW5rbm93bn0nO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZSgpIHtcbiAgICByZW1vdmVMb2NrRmlsZSh0aGlzLmZzLCB0aGlzLmxvZ2dlciwgdGhpcy5wYXRoLCBwcm9jZXNzLnBpZC50b1N0cmluZygpKTtcbiAgICBpZiAodGhpcy51bmxvY2tlciAhPT0gbnVsbCkge1xuICAgICAgLy8gSWYgdGhlcmUgaXMgYW4gdW5sb2NrZXIgY2hpbGQtcHJvY2VzcyB0aGVuIGRpc2Nvbm5lY3QgZnJvbSBpdCBzbyB0aGF0IGl0IGNhbiBleGl0IGl0c2VsZi5cbiAgICAgIHRoaXMudW5sb2NrZXIuZGlzY29ubmVjdCgpO1xuICAgICAgdGhpcy51bmxvY2tlciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZVVubG9ja2VyKHBhdGg6IEFic29sdXRlRnNQYXRoKTogQ2hpbGRQcm9jZXNzIHtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnRm9ya2luZyB1bmxvY2tlciBjaGlsZC1wcm9jZXNzJyk7XG4gICAgY29uc3QgbG9nTGV2ZWwgPVxuICAgICAgICB0aGlzLmxvZ2dlci5sZXZlbCAhPT0gdW5kZWZpbmVkID8gdGhpcy5sb2dnZXIubGV2ZWwudG9TdHJpbmcoKSA6IExvZ0xldmVsLmluZm8udG9TdHJpbmcoKTtcbiAgICBjb25zdCBpc1dpbmRvd3MgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInO1xuICAgIGNvbnN0IHVubG9ja2VyID0gZm9yayhcbiAgICAgICAgX19kaXJuYW1lICsgJy91bmxvY2tlci5qcycsIFtwYXRoLCBsb2dMZXZlbF0sXG4gICAgICAgIHtkZXRhY2hlZDogdHJ1ZSwgc3RkaW86IGlzV2luZG93cyA/ICdwaXBlJyA6ICdpbmhlcml0J30pO1xuICAgIGlmIChpc1dpbmRvd3MpIHtcbiAgICAgIHVubG9ja2VyLnN0ZG91dD8ub24oJ2RhdGEnLCBwcm9jZXNzLnN0ZG91dC53cml0ZS5iaW5kKHByb2Nlc3Muc3Rkb3V0KSk7XG4gICAgICB1bmxvY2tlci5zdGRlcnI/Lm9uKCdkYXRhJywgcHJvY2Vzcy5zdGRlcnIud3JpdGUuYmluZChwcm9jZXNzLnN0ZGVycikpO1xuICAgIH1cbiAgICByZXR1cm4gdW5sb2NrZXI7XG4gIH1cbn1cbiJdfQ==
Note: See TracBrowser for help on using the repository browser.