60 lines
1.9 KiB
JavaScript
60 lines
1.9 KiB
JavaScript
|
"use strict";
|
||
|
/**
|
||
|
* @license
|
||
|
* Copyright Google LLC All Rights Reserved.
|
||
|
*
|
||
|
* Use of this source code is governed by an MIT-style license that can be
|
||
|
* found in the LICENSE file at https://angular.io/license
|
||
|
*/
|
||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||
|
exports.NodeModuleJobRegistry = void 0;
|
||
|
const core_1 = require("@angular-devkit/core");
|
||
|
const rxjs_1 = require("rxjs");
|
||
|
class NodeModuleJobRegistry {
|
||
|
_resolve(name) {
|
||
|
try {
|
||
|
return require.resolve(name);
|
||
|
}
|
||
|
catch (e) {
|
||
|
if (e.code === 'MODULE_NOT_FOUND') {
|
||
|
return null;
|
||
|
}
|
||
|
throw e;
|
||
|
}
|
||
|
}
|
||
|
/**
|
||
|
* Get a job description for a named job.
|
||
|
*
|
||
|
* @param name The name of the job.
|
||
|
* @returns A description, or null if the job is not registered.
|
||
|
*/
|
||
|
get(name) {
|
||
|
const [moduleName, exportName] = name.split(/#/, 2);
|
||
|
const resolvedPath = this._resolve(moduleName);
|
||
|
if (!resolvedPath) {
|
||
|
return (0, rxjs_1.of)(null);
|
||
|
}
|
||
|
const pkg = require(resolvedPath);
|
||
|
const handler = pkg[exportName || 'default'];
|
||
|
if (!handler) {
|
||
|
return (0, rxjs_1.of)(null);
|
||
|
}
|
||
|
function _getValue(...fields) {
|
||
|
return fields.find((x) => core_1.schema.isJsonSchema(x)) || true;
|
||
|
}
|
||
|
const argument = _getValue(pkg.argument, handler.argument);
|
||
|
const input = _getValue(pkg.input, handler.input);
|
||
|
const output = _getValue(pkg.output, handler.output);
|
||
|
const channels = _getValue(pkg.channels, handler.channels);
|
||
|
return (0, rxjs_1.of)(Object.assign(handler.bind(undefined), {
|
||
|
jobDescription: {
|
||
|
argument,
|
||
|
input,
|
||
|
output,
|
||
|
channels,
|
||
|
},
|
||
|
}));
|
||
|
}
|
||
|
}
|
||
|
exports.NodeModuleJobRegistry = NodeModuleJobRegistry;
|