@enspirit/emb 0.0.5 → 0.0.7

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.
Files changed (90) hide show
  1. package/README.md +61 -31
  2. package/dist/src/cli/commands/clean.d.ts +3 -1
  3. package/dist/src/cli/commands/clean.js +13 -2
  4. package/dist/src/cli/commands/components/build.d.ts +6 -2
  5. package/dist/src/cli/commands/components/build.js +16 -7
  6. package/dist/src/cli/commands/config/print.js +2 -3
  7. package/dist/src/cli/commands/down.d.ts +2 -2
  8. package/dist/src/cli/commands/down.js +5 -25
  9. package/dist/src/cli/commands/tasks/index.js +11 -5
  10. package/dist/src/cli/commands/tasks/run.d.ts +1 -3
  11. package/dist/src/cli/commands/tasks/run.js +11 -93
  12. package/dist/src/cli/commands/up.d.ts +1 -1
  13. package/dist/src/cli/commands/up.js +12 -34
  14. package/dist/src/config/convert.d.ts +2 -3
  15. package/dist/src/config/convert.js +4 -11
  16. package/dist/src/config/index.d.ts +1 -0
  17. package/dist/src/config/index.js +1 -0
  18. package/dist/src/config/schema.d.ts +36 -29
  19. package/dist/src/config/schema.json +42 -25
  20. package/dist/src/config/types.d.ts +11 -7
  21. package/dist/src/config/validation.d.ts +2 -0
  22. package/dist/src/config/validation.js +26 -1
  23. package/dist/src/docker/compose/index.d.ts +1 -7
  24. package/dist/src/docker/compose/index.js +1 -13
  25. package/dist/src/docker/compose/operations/ComposeDownOperation.d.ts +12 -0
  26. package/dist/src/docker/compose/operations/ComposeDownOperation.js +21 -0
  27. package/dist/src/docker/compose/operations/ComposeUpOperation.d.ts +13 -0
  28. package/dist/src/docker/compose/operations/ComposeUpOperation.js +39 -0
  29. package/dist/src/docker/compose/operations/index.d.ts +2 -0
  30. package/dist/src/docker/compose/operations/index.js +2 -0
  31. package/dist/src/docker/operations/containers/ExecContainerOperation.d.ts +22 -0
  32. package/dist/src/docker/operations/containers/ExecContainerOperation.js +78 -0
  33. package/dist/src/docker/operations/containers/index.d.ts +1 -0
  34. package/dist/src/docker/operations/containers/index.js +1 -0
  35. package/dist/src/monorepo/component.d.ts +2 -2
  36. package/dist/src/monorepo/component.js +6 -6
  37. package/dist/src/monorepo/config.d.ts +6 -3
  38. package/dist/src/monorepo/config.js +22 -4
  39. package/dist/src/monorepo/index.d.ts +2 -0
  40. package/dist/src/monorepo/index.js +2 -0
  41. package/dist/src/monorepo/monorepo.d.ts +4 -2
  42. package/dist/src/monorepo/monorepo.js +30 -6
  43. package/dist/src/monorepo/operations/components/BuildComponentsOperation.d.ts +11 -2
  44. package/dist/src/monorepo/operations/components/BuildComponentsOperation.js +45 -59
  45. package/dist/src/monorepo/operations/components/GetComponentContainerOperation.d.ts +6 -0
  46. package/dist/src/monorepo/operations/components/GetComponentContainerOperation.js +21 -0
  47. package/dist/src/monorepo/operations/components/index.d.ts +1 -0
  48. package/dist/src/monorepo/operations/components/index.js +1 -0
  49. package/dist/src/monorepo/operations/index.d.ts +2 -0
  50. package/dist/src/monorepo/operations/index.js +2 -0
  51. package/dist/src/monorepo/operations/shell/ExecuteLocalCommandOperation.d.ts +16 -0
  52. package/dist/src/monorepo/operations/shell/ExecuteLocalCommandOperation.js +30 -0
  53. package/dist/src/monorepo/operations/shell/index.d.ts +1 -0
  54. package/dist/src/monorepo/operations/shell/index.js +1 -0
  55. package/dist/src/monorepo/operations/tasks/RunTasksOperation.d.ts +21 -0
  56. package/dist/src/monorepo/operations/tasks/RunTasksOperation.js +84 -0
  57. package/dist/src/monorepo/operations/tasks/index.d.ts +1 -0
  58. package/dist/src/monorepo/operations/tasks/index.js +1 -0
  59. package/dist/src/monorepo/plugins/ComponentDiscoverPlugin.d.ts +15 -0
  60. package/dist/src/monorepo/plugins/{ComponentsDiscover.js → ComponentDiscoverPlugin.js} +16 -2
  61. package/dist/src/monorepo/plugins/EmbfileLoaderPlugin.d.ts +14 -0
  62. package/dist/src/monorepo/plugins/EmbfileLoaderPlugin.js +37 -0
  63. package/dist/src/monorepo/plugins/index.d.ts +3 -2
  64. package/dist/src/monorepo/plugins/index.js +5 -2
  65. package/dist/src/monorepo/store/index.js +5 -3
  66. package/dist/src/monorepo/taskManagerFactory.d.ts +3 -0
  67. package/dist/src/monorepo/taskManagerFactory.js +20 -0
  68. package/dist/src/monorepo/types.d.ts +2 -1
  69. package/dist/src/monorepo/utils/findRunOrder.d.ts +34 -0
  70. package/dist/src/monorepo/utils/findRunOrder.js +165 -0
  71. package/dist/src/monorepo/utils/index.d.ts +1 -1
  72. package/dist/src/monorepo/utils/index.js +1 -1
  73. package/dist/src/operations/abstract/AbstractOperation.d.ts +1 -1
  74. package/dist/src/utils/deepMergeArray.d.ts +3 -0
  75. package/dist/src/utils/deepMergeArray.js +1 -0
  76. package/oclif.manifest.json +63 -74
  77. package/package.json +4 -2
  78. package/dist/src/cli/commands/run/index.d.ts +0 -10
  79. package/dist/src/cli/commands/run/index.js +0 -49
  80. package/dist/src/executors/docker.d.ts +0 -6
  81. package/dist/src/executors/docker.js +0 -14
  82. package/dist/src/executors/index.d.ts +0 -6
  83. package/dist/src/executors/index.js +0 -7
  84. package/dist/src/executors/shell.d.ts +0 -2
  85. package/dist/src/executors/shell.js +0 -14
  86. package/dist/src/executors/types.d.ts +0 -8
  87. package/dist/src/executors/types.js +0 -1
  88. package/dist/src/monorepo/plugins/ComponentsDiscover.d.ts +0 -6
  89. package/dist/src/monorepo/utils/findBuildOrder.d.ts +0 -2
  90. package/dist/src/monorepo/utils/findBuildOrder.js +0 -41
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@enspirit/emb",
3
3
  "type": "module",
4
- "version": "0.0.5",
4
+ "version": "0.0.7",
5
5
  "keywords": ["monorepo", "docker", "taskrunner", "ci", "docker compose", "sentinel", "makefile"],
6
6
  "author": "Louis Lambeau <louis.lambeau@enspirit.be>",
7
7
  "license": "ISC",
@@ -35,6 +35,7 @@
35
35
  "@oclif/plugin-autocomplete": "^3.2.34",
36
36
  "@oclif/plugin-help": "^6.2.32",
37
37
  "@oclif/plugin-not-found": "^3.2.63",
38
+ "@oclif/plugin-update": "^4.7.3",
38
39
  "@oclif/table": "^0.4.12",
39
40
  "ajv": "^8.17.1",
40
41
  "colorette": "^2.0.20",
@@ -103,7 +104,8 @@
103
104
  "plugins": [
104
105
  "@oclif/plugin-help",
105
106
  "@oclif/plugin-autocomplete",
106
- "@oclif/plugin-not-found"
107
+ "@oclif/plugin-not-found",
108
+ "@oclif/plugin-update"
107
109
  ],
108
110
  "topicSeparator": " ",
109
111
  "topics": {
@@ -1,10 +0,0 @@
1
- import { Command } from '@oclif/core';
2
- export default class RunComponentScript extends Command {
3
- static args: {
4
- component: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
5
- script: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
6
- };
7
- static description: string;
8
- static strict: boolean;
9
- run(): Promise<void>;
10
- }
@@ -1,49 +0,0 @@
1
- import { getContext } from '../../../index.js';
2
- import { Args, Command } from '@oclif/core';
3
- import { Listr } from 'listr2';
4
- import { spawn } from 'node:child_process';
5
- import fs from 'node:fs/promises';
6
- export default class RunComponentScript extends Command {
7
- static args = {
8
- component: Args.string({
9
- description: 'Component name',
10
- required: true,
11
- }),
12
- script: Args.string({ description: 'NPM script to run', required: true }),
13
- };
14
- static description = "Run an npm script from a component's package.json";
15
- static strict = true;
16
- async run() {
17
- const { args } = await this.parse(RunComponentScript);
18
- const { monorepo } = getContext();
19
- const component = monorepo.component(args.component);
20
- const pkgPath = component.join('package.json');
21
- const tasks = new Listr([
22
- {
23
- rendererOptions: {
24
- persistentOutput: true,
25
- },
26
- async task(_ctx, _task) {
27
- try {
28
- const pkgRaw = await fs.readFile(pkgPath, 'utf8');
29
- const pkg = JSON.parse(pkgRaw);
30
- if (!pkg.scripts?.[args.script]) {
31
- throw new Error(`Script "${args.script}" not found in ${component.name}/package.json`);
32
- }
33
- return spawn('npm', ['run', args.script], {
34
- cwd: component.rootdir,
35
- }).stdout;
36
- }
37
- catch (error) {
38
- const error_ = error instanceof Error
39
- ? new TypeError(`Failed to run ${component.name}:${args.script}\n${error.message}`)
40
- : new Error(`Failed to run ${component.name}:${args.script}\n${error}`);
41
- throw error_;
42
- }
43
- },
44
- title: `Running npm script '${args.script}' on ${args.component}`,
45
- },
46
- ], { concurrent: false });
47
- await tasks.run();
48
- }
49
- }
@@ -1,6 +0,0 @@
1
- import { Container } from 'dockerode';
2
- import { Executor, ExecutorRunOptions } from './types.js';
3
- export type DockerExecutorRunOptions = ExecutorRunOptions & {
4
- container: Container;
5
- };
6
- export declare const dockerExecutor: Executor<DockerExecutorRunOptions>;
@@ -1,14 +0,0 @@
1
- export const dockerExecutor = {
2
- async run(script, options) {
3
- const exec = await options.container.exec({
4
- AttachStderr: true,
5
- AttachStdout: true,
6
- Cmd: ['bash', '-c', script],
7
- });
8
- const stream = await exec.start({});
9
- if (options.out) {
10
- options.container.modem.demuxStream(stream, options.out, options.out);
11
- }
12
- return stream;
13
- },
14
- };
@@ -1,6 +0,0 @@
1
- export * from './docker.js';
2
- export * from './shell.js';
3
- export declare enum ExecutorType {
4
- container = "container",
5
- local = "local"
6
- }
@@ -1,7 +0,0 @@
1
- export * from './docker.js';
2
- export * from './shell.js';
3
- export var ExecutorType;
4
- (function (ExecutorType) {
5
- ExecutorType["container"] = "container";
6
- ExecutorType["local"] = "local";
7
- })(ExecutorType || (ExecutorType = {}));
@@ -1,2 +0,0 @@
1
- import { Executor } from './types.js';
2
- export declare const shellExecutor: Executor;
@@ -1,14 +0,0 @@
1
- import { execa } from 'execa';
2
- export const shellExecutor = {
3
- async run(script, options) {
4
- const process = execa(script, {
5
- all: true,
6
- cwd: options.cwd,
7
- shell: true,
8
- });
9
- if (options.out) {
10
- process.all?.pipe(options.out);
11
- }
12
- return process;
13
- },
14
- };
@@ -1,8 +0,0 @@
1
- import { Writable } from 'node:stream';
2
- export type ExecutorRunOptions = {
3
- cwd?: string;
4
- out?: Writable;
5
- };
6
- export type Executor<RO extends ExecutorRunOptions = ExecutorRunOptions, T = unknown> = {
7
- run(script: string, options?: RO): Promise<T>;
8
- };
@@ -1 +0,0 @@
1
- export {};
@@ -1,6 +0,0 @@
1
- import { MonorepoConfig } from '../index.js';
2
- import { AbstractPlugin } from './plugin.js';
3
- export declare class ComponentDiscoverPlugin extends AbstractPlugin {
4
- static name: string;
5
- extendConfig(config: MonorepoConfig): Promise<MonorepoConfig>;
6
- }
@@ -1,2 +0,0 @@
1
- import { Component } from '../index.js';
2
- export declare const findBuildOrder: (components: Array<Component>, selection?: Array<string>) => Array<Component>;
@@ -1,41 +0,0 @@
1
- import graphlib from 'graphlib';
2
- const toGraph = (components) => {
3
- const graph = new graphlib.Graph();
4
- // Add all components as nodes
5
- for (const comp of components) {
6
- graph.setNode(comp.name);
7
- }
8
- // Add edges
9
- for (const comp of components) {
10
- for (const dep of comp.dependencies ?? []) {
11
- graph.setEdge(dep.name, comp.name);
12
- }
13
- }
14
- return graph;
15
- };
16
- export const findBuildOrder = (components, selection) => {
17
- const hash = components.reduce((cmps, cmp) => {
18
- cmps[cmp.name] = cmp;
19
- return cmps;
20
- }, {});
21
- const graph = toGraph(components);
22
- // Detect cycles
23
- const cycles = graphlib.alg.findCycles(graph);
24
- if (cycles.length > 0) {
25
- throw new Error('Circular dependencies detected: ' + JSON.stringify(cycles));
26
- }
27
- // Pick nodes that we want to build and rebuild a graph only with these
28
- const toBuild = selection || components.map((c) => c.name);
29
- const includingDeps = toBuild
30
- .reduce((set, name) => {
31
- graph.predecessors(name)?.forEach((name) => {
32
- set.add(name);
33
- });
34
- return set;
35
- }, new Set(toBuild))
36
- .values();
37
- const newGraph = toGraph([...includingDeps].map((name) => hash[name]));
38
- // Get build order
39
- const order = graphlib.alg.topsort(newGraph);
40
- return order.map((name) => hash[name]);
41
- };