Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(@angular-devkit/core): Jobs API added
See the README for more details about usage.
- Loading branch information
Showing
25 changed files
with
3,447 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
/** | ||
* @license | ||
* Copyright Google Inc. 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 | ||
*/ | ||
import * as jobs from './job-registry'; | ||
|
||
export { | ||
jobs, | ||
}; |
81 changes: 81 additions & 0 deletions
81
packages/angular_devkit/core/node/experimental/job-registry.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,81 @@ | ||
/** | ||
* @license | ||
* Copyright Google Inc. 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 | ||
*/ | ||
import { Observable, of } from 'rxjs'; | ||
import { JsonValue, experimental as core_experimental, schema } from '../../src'; | ||
import { ModuleNotFoundException, resolve } from '../resolve'; | ||
|
||
export class NodeModuleJobRegistry<MinimumArgumentValueT extends JsonValue = JsonValue, | ||
MinimumInputValueT extends JsonValue = JsonValue, | ||
MinimumOutputValueT extends JsonValue = JsonValue, | ||
> implements core_experimental.jobs.Registry<MinimumArgumentValueT, | ||
MinimumInputValueT, | ||
MinimumOutputValueT> { | ||
public constructor(private _resolveLocal = true, private _resolveGlobal = false) { | ||
} | ||
|
||
protected _resolve(name: string): string | null { | ||
try { | ||
return resolve(name, { | ||
checkLocal: this._resolveLocal, | ||
checkGlobal: this._resolveGlobal, | ||
basedir: __dirname, | ||
}); | ||
} catch (e) { | ||
if (e instanceof ModuleNotFoundException) { | ||
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<A extends MinimumArgumentValueT, | ||
I extends MinimumInputValueT, | ||
O extends MinimumOutputValueT, | ||
>( | ||
name: core_experimental.jobs.JobName, | ||
): Observable<core_experimental.jobs.JobHandler<A, I, O> | null> { | ||
const [moduleName, exportName] = name.split(/#/, 2); | ||
|
||
const resolvedPath = this._resolve(moduleName); | ||
if (!resolvedPath) { | ||
return of(null); | ||
} | ||
|
||
const pkg = require(resolvedPath); | ||
const handler = pkg[exportName || 'default']; | ||
if (!handler) { | ||
return of(null); | ||
} | ||
|
||
// TODO: this should be unknown | ||
// tslint:disable-next-line:no-any | ||
function _getValue(...fields: any[]) { | ||
return fields.find(x => 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 of(Object.assign(handler.bind(undefined), { | ||
jobDescription: { | ||
argument, | ||
input, | ||
output, | ||
channels, | ||
}, | ||
})); | ||
} | ||
} |
26 changes: 26 additions & 0 deletions
26
packages/angular_devkit/core/node/experimental/job-registry_spec.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
/** | ||
* @license | ||
* Copyright Google Inc. 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 | ||
*/ | ||
import * as path from 'path'; | ||
import { experimental as core_experimental } from '../../src'; | ||
import { NodeModuleJobRegistry } from './job-registry'; | ||
|
||
const root = path.join( | ||
path.dirname(require.resolve(__filename)), | ||
'../../../../../tests/angular_devkit/core/node/jobs', | ||
); | ||
|
||
|
||
describe('NodeModuleJobScheduler', () => { | ||
it('works', async () => { | ||
const registry = new NodeModuleJobRegistry(); | ||
const scheduler = new core_experimental.jobs.SimpleScheduler(registry); | ||
|
||
const job = scheduler.schedule(path.join(root, 'add'), [1, 2, 3]); | ||
expect(await job.output.toPromise()).toBe(6); | ||
}); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.