@t4h.framework/cli 0.2.0 → 0.4.0
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/dist/commands/dev/dev.js +127 -67
- package/dist/commands/dev/dev.js.map +1 -1
- package/dist/commands/dev-server-up-app-process.js +37 -40
- package/dist/commands/dev-server-up-app-process.js.map +1 -1
- package/dist/helpers/advance-async-activity.js +48 -0
- package/dist/helpers/advance-async-activity.js.map +1 -0
- package/dist/helpers/repository.js +9 -0
- package/dist/helpers/repository.js.map +1 -0
- package/dist/helpers/workflow-run.js +128 -0
- package/dist/helpers/workflow-run.js.map +1 -0
- package/dist/models/DevServer.js +9 -0
- package/dist/models/DevServer.js.map +1 -1
- package/dist/models/DevServerCacheClaim.js +12 -0
- package/dist/models/DevServerCacheClaim.js.map +1 -0
- package/dist/models/DevServerWorkflowClaim.js +24 -0
- package/dist/models/DevServerWorkflowClaim.js.map +1 -0
- package/dist/tools/is-workflow-waiting.js +12 -0
- package/dist/tools/is-workflow-waiting.js.map +1 -0
- package/dist/tools/json-schema-to-inquirer-question.js +3 -2
- package/dist/tools/json-schema-to-inquirer-question.js.map +1 -1
- package/package.json +11 -9
- package/dist/tools/dev-workflow-executor.js +0 -166
- package/dist/tools/dev-workflow-executor.js.map +0 -1
package/dist/commands/dev/dev.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { parseEnv } from 'node:util';
|
|
1
4
|
import { AbortPromptError } from '@inquirer/core';
|
|
2
5
|
import { input, select } from '@inquirer/prompts';
|
|
3
6
|
import { Command, Option } from 'commander';
|
|
4
7
|
import { DevServer } from '../../models/DevServer.js';
|
|
8
|
+
import { isWorkflowWaiting } from '../../tools/is-workflow-waiting.js';
|
|
5
9
|
import { jsonSchemaToInquirerQuestion } from '../../tools/json-schema-to-inquirer-question.js';
|
|
6
10
|
export const devCommand = new Command('dev')
|
|
7
11
|
.description('Start the development server')
|
|
@@ -19,90 +23,146 @@ export const devCommand = new Command('dev')
|
|
|
19
23
|
};
|
|
20
24
|
})
|
|
21
25
|
.default({}))
|
|
26
|
+
.addOption(new Option('--env-file-if-exists <file-path>', 'Load variables from a .env file if it exists').argParser(value => path.resolve(process.cwd(), value)))
|
|
22
27
|
.action(async (options) => {
|
|
23
28
|
let abortController = null;
|
|
29
|
+
let currentLoopPromise = null;
|
|
30
|
+
if (options.envFileIfExists && fs.existsSync(options.envFileIfExists))
|
|
31
|
+
Object.assign(options.env, parseEnv(fs.readFileSync(options.envFileIfExists, 'utf8')));
|
|
24
32
|
const devServer = new DevServer({ entrypoint: options.entrypoint, env: options.env }, async (manifest) => {
|
|
25
33
|
if (abortController) {
|
|
26
34
|
abortController.abort();
|
|
27
|
-
console.clear();
|
|
28
35
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
async function selectWorkflowToRun() {
|
|
32
|
-
const fn = await select({
|
|
33
|
-
message: 'Select a workflow to run',
|
|
34
|
-
choices: [
|
|
35
|
-
...manifest.workflows.map(workflow => ({
|
|
36
|
-
name: workflow.id,
|
|
37
|
-
value: async () => {
|
|
38
|
-
let input;
|
|
39
|
-
if (workflow.schema)
|
|
40
|
-
input = await jsonSchemaToInquirerQuestion(workflow.schema);
|
|
41
|
-
await devServer.runWorkflow(workflow.id, input);
|
|
42
|
-
},
|
|
43
|
-
})),
|
|
44
|
-
{
|
|
45
|
-
name: '.. (Go Back)',
|
|
46
|
-
value: async () => { },
|
|
47
|
-
},
|
|
48
|
-
],
|
|
49
|
-
});
|
|
50
|
-
await fn();
|
|
51
|
-
}
|
|
52
|
-
async function selectEnvToSet() {
|
|
53
|
-
const fn = await select({
|
|
54
|
-
message: 'Select an environment variable to set',
|
|
55
|
-
choices: [
|
|
56
|
-
...Object.entries(manifest.env.properties).map(([name]) => ({
|
|
57
|
-
name: name,
|
|
58
|
-
value: async () => {
|
|
59
|
-
const value = await input({
|
|
60
|
-
message: `Enter the value for ${name}`,
|
|
61
|
-
});
|
|
62
|
-
await devServer.setEnv(name, value);
|
|
63
|
-
},
|
|
64
|
-
})),
|
|
65
|
-
{
|
|
66
|
-
name: '.. (Go Back)',
|
|
67
|
-
value: async () => { },
|
|
68
|
-
},
|
|
69
|
-
],
|
|
70
|
-
});
|
|
71
|
-
await fn();
|
|
36
|
+
if (currentLoopPromise) {
|
|
37
|
+
await currentLoopPromise.catch(() => { });
|
|
72
38
|
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
39
|
+
console.clear();
|
|
40
|
+
abortController = new AbortController();
|
|
41
|
+
const currentSignal = abortController.signal;
|
|
42
|
+
currentLoopPromise = (async () => {
|
|
43
|
+
await Promise.all(Object.entries(options.env).map(([name, value]) => devServer.setEnv(name, value)));
|
|
44
|
+
async function selectWorkflowToRun() {
|
|
45
|
+
const fn = await select({
|
|
46
|
+
message: 'Select a workflow to run',
|
|
77
47
|
choices: [
|
|
78
|
-
{
|
|
79
|
-
name:
|
|
48
|
+
...manifest.workflows.map(workflow => ({
|
|
49
|
+
name: workflow.id,
|
|
80
50
|
value: async () => {
|
|
81
|
-
|
|
82
|
-
|
|
51
|
+
let input;
|
|
52
|
+
if (workflow.schema)
|
|
53
|
+
input = await jsonSchemaToInquirerQuestion(workflow.schema, {
|
|
54
|
+
signal: currentSignal,
|
|
55
|
+
});
|
|
56
|
+
const result = await devServer.runWorkflow(workflow.id, input);
|
|
57
|
+
if (isWorkflowWaiting(result))
|
|
58
|
+
console.log(`Workflow paused on async activity. Pending id: ${result.id}\nUse "Advance pending async activity" to continue.`);
|
|
83
59
|
},
|
|
60
|
+
})),
|
|
61
|
+
{
|
|
62
|
+
name: '.. (Go Back)',
|
|
63
|
+
value: async () => { },
|
|
84
64
|
},
|
|
65
|
+
],
|
|
66
|
+
}, { signal: currentSignal });
|
|
67
|
+
await fn();
|
|
68
|
+
}
|
|
69
|
+
async function selectEnvToSet() {
|
|
70
|
+
const fn = await select({
|
|
71
|
+
message: 'Select an environment variable to set',
|
|
72
|
+
choices: [
|
|
73
|
+
...Object.entries(manifest.env.properties).map(([name]) => ({
|
|
74
|
+
name: name,
|
|
75
|
+
value: async () => {
|
|
76
|
+
const value = await input({ message: `Enter the value for ${name}` }, { signal: currentSignal });
|
|
77
|
+
await devServer.setEnv(name, value);
|
|
78
|
+
},
|
|
79
|
+
})),
|
|
85
80
|
{
|
|
86
|
-
name: '
|
|
87
|
-
value:
|
|
81
|
+
name: '.. (Go Back)',
|
|
82
|
+
value: async () => { },
|
|
88
83
|
},
|
|
84
|
+
],
|
|
85
|
+
}, { signal: currentSignal });
|
|
86
|
+
await fn();
|
|
87
|
+
}
|
|
88
|
+
async function advancePendingAsyncActivity() {
|
|
89
|
+
const waitingActivities = await devServer.listWaitingAsyncActivities();
|
|
90
|
+
if (waitingActivities.length === 0) {
|
|
91
|
+
console.log('No pending async activities.');
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
console.table(waitingActivities);
|
|
95
|
+
const fn = await select({
|
|
96
|
+
message: 'Select a pending async activity to advance',
|
|
97
|
+
choices: [
|
|
98
|
+
...waitingActivities.map((activity) => ({
|
|
99
|
+
name: `${activity.id} (workflow: ${activity.workflowId})`,
|
|
100
|
+
value: async () => {
|
|
101
|
+
const raw = await input({
|
|
102
|
+
message: 'Enter advance payload as JSON (e.g. {"status":"fulfilled","output":{}})',
|
|
103
|
+
}, { signal: currentSignal });
|
|
104
|
+
let payload;
|
|
105
|
+
try {
|
|
106
|
+
payload = raw.trim() === '' ? {} : JSON.parse(raw);
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
console.error('Invalid JSON.');
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
const result = await devServer.advanceAsyncActivity(activity.id, payload);
|
|
113
|
+
if (isWorkflowWaiting(result)) {
|
|
114
|
+
console.log(`Workflow still paused. Pending id: ${result.id}`);
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
console.log('Workflow result:', result);
|
|
118
|
+
},
|
|
119
|
+
})),
|
|
89
120
|
{
|
|
90
|
-
name: '
|
|
91
|
-
value:
|
|
121
|
+
name: '.. (Go Back)',
|
|
122
|
+
value: async () => { },
|
|
92
123
|
},
|
|
93
|
-
{ name: 'Exit', value: async () => process.exit(0) },
|
|
94
124
|
],
|
|
95
|
-
}, {
|
|
96
|
-
|
|
97
|
-
});
|
|
98
|
-
await choice();
|
|
125
|
+
}, { signal: currentSignal });
|
|
126
|
+
await fn();
|
|
99
127
|
}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
128
|
+
try {
|
|
129
|
+
while (!currentSignal.aborted) {
|
|
130
|
+
const choice = await select({
|
|
131
|
+
message: 'Select an option',
|
|
132
|
+
choices: [
|
|
133
|
+
{
|
|
134
|
+
name: 'List environment variables',
|
|
135
|
+
value: async () => {
|
|
136
|
+
const env = await devServer.listEnv();
|
|
137
|
+
console.table(env);
|
|
138
|
+
},
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
name: 'Set environment variable',
|
|
142
|
+
value: selectEnvToSet,
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
name: 'Run workflow',
|
|
146
|
+
value: selectWorkflowToRun,
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
name: 'Advance pending async activity',
|
|
150
|
+
value: advancePendingAsyncActivity,
|
|
151
|
+
},
|
|
152
|
+
{ name: 'Exit', value: async () => process.exit(0) },
|
|
153
|
+
],
|
|
154
|
+
}, {
|
|
155
|
+
signal: currentSignal,
|
|
156
|
+
});
|
|
157
|
+
await choice();
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
catch (error) {
|
|
161
|
+
if (error instanceof AbortPromptError)
|
|
162
|
+
return;
|
|
163
|
+
throw error;
|
|
164
|
+
}
|
|
165
|
+
})();
|
|
106
166
|
});
|
|
107
167
|
await devServer.start();
|
|
108
168
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../../../src/commands/dev/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAE3C,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACrD,OAAO,EAAE,4BAA4B,EAAE,MAAM,iDAAiD,CAAA;
|
|
1
|
+
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../../../src/commands/dev/dev.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,20 +1,28 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CacheClaim } from '@t4h.framework/cache';
|
|
2
|
+
import { App, Env, WorkflowClaim, } from '@t4h.framework/core';
|
|
2
3
|
import { FileSystemClaim } from '@t4h.framework/fs';
|
|
3
4
|
import { HttpClientRequestClaim } from '@t4h.framework/http';
|
|
4
5
|
import { ORMClaim } from '@t4h.framework/orm';
|
|
5
6
|
import Type from 'typebox';
|
|
6
7
|
import { SmtpSendEmailClaim } from '../../../smtp/dist/models/SmtpSendEmailClaim.js';
|
|
8
|
+
import { advanceAsyncActivity } from '../helpers/advance-async-activity.js';
|
|
9
|
+
import { PENDING_ACTIVITIES, RUN_WORKFLOW_STORAGE, WORKFLOW_PARENT_PAIR, WORKFLOW_RUNS, } from '../helpers/repository.js';
|
|
10
|
+
import { workflowRun as workflowRunHelper } from '../helpers/workflow-run.js';
|
|
11
|
+
import { DevServerCacheClaim } from '../models/DevServerCacheClaim.js';
|
|
7
12
|
import { DevServerFileSystemClaim } from '../models/DevServerFileSystemClaim.js';
|
|
8
13
|
import { DevServerHttpClientRequestClaim } from '../models/DevServerHttpClientRequestClaim.js';
|
|
9
14
|
import { DevServerORMClaim } from '../models/DevServerORMClaim.js';
|
|
10
15
|
import { DevServerSmtpSendEmailClaim } from '../models/DevServerSmtpSendEmailClaim.js';
|
|
16
|
+
import { DevServerWorkflowClaim } from '../models/DevServerWorkflowClaim.js';
|
|
11
17
|
import { JSONRPCClient } from '../models/JSONRPCClient.js';
|
|
12
18
|
import { JSONRPCServer, JSONRPCServerMethod } from '../models/JSONRPCServer.js';
|
|
13
19
|
import { upApp } from '../tools/up-app.js';
|
|
14
20
|
const [entrypoint, ...envArgs] = process.argv.slice(2);
|
|
15
21
|
if (typeof entrypoint !== 'string')
|
|
16
22
|
throw new Error('Entrypoint is not a string');
|
|
17
|
-
|
|
23
|
+
export let app = null;
|
|
24
|
+
export const env = new Map(envArgs.map(env => env.split('=')));
|
|
25
|
+
export const claims = [
|
|
18
26
|
{ provide: ORMClaim, value: new DevServerORMClaim() },
|
|
19
27
|
{
|
|
20
28
|
provide: HttpClientRequestClaim,
|
|
@@ -28,52 +36,41 @@ const claims = [
|
|
|
28
36
|
provide: SmtpSendEmailClaim,
|
|
29
37
|
value: new DevServerSmtpSendEmailClaim(),
|
|
30
38
|
},
|
|
39
|
+
{
|
|
40
|
+
provide: WorkflowClaim,
|
|
41
|
+
value: new DevServerWorkflowClaim((workflowId, input, childRunId) => {
|
|
42
|
+
const parentWorkflowRunId = RUN_WORKFLOW_STORAGE.getStore();
|
|
43
|
+
if (parentWorkflowRunId)
|
|
44
|
+
WORKFLOW_PARENT_PAIR.set(childRunId, parentWorkflowRunId);
|
|
45
|
+
return workflowRunHelper(workflowId, input, [], childRunId);
|
|
46
|
+
}),
|
|
47
|
+
},
|
|
48
|
+
{ provide: CacheClaim, value: new DevServerCacheClaim() },
|
|
31
49
|
];
|
|
32
|
-
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
workflow = app.workflows.find(workflow => workflow.id === workflowId);
|
|
42
|
-
if (!workflow)
|
|
43
|
-
return;
|
|
44
|
-
try {
|
|
45
|
-
return await Internals.runWorkflow(workflow, {
|
|
46
|
-
claims,
|
|
47
|
-
history,
|
|
48
|
-
env,
|
|
49
|
-
input,
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
catch (errorOrPushActivity) {
|
|
53
|
-
if (errorOrPushActivity instanceof PushActivity) {
|
|
54
|
-
const output = await Internals.runActivity(errorOrPushActivity.activity, { claims, env }, async (activity) => {
|
|
55
|
-
if (!(activity instanceof SyncActivity))
|
|
56
|
-
throw new Error('Async activity not supported');
|
|
57
|
-
return await activity.run(errorOrPushActivity.input);
|
|
58
|
-
});
|
|
59
|
-
return workflow_run(workflowId, input, [
|
|
60
|
-
...history,
|
|
61
|
-
{ type: 'sync', output },
|
|
62
|
-
]);
|
|
63
|
-
}
|
|
64
|
-
throw errorOrPushActivity;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
const workflowRun = new JSONRPCServerMethod('workflow.run', { schema: [Type.String(), Type.Any()] }, async (workflowId, input) => workflow_run(workflowId, input));
|
|
50
|
+
const workflowRun = new JSONRPCServerMethod('workflow.run', { schema: [Type.String(), Type.Any()] }, async (workflowId, input) => workflowRunHelper(workflowId, input));
|
|
51
|
+
const workflowAdvanceAsyncActivity = new JSONRPCServerMethod('workflow.async-activities.advance', { schema: [Type.String(), Type.Any()] }, async (id, payload) => advanceAsyncActivity(id, payload));
|
|
52
|
+
const workflowListPendingAsyncActivities = new JSONRPCServerMethod('workflow.async-activities.waiting.list', { schema: [] }, () => {
|
|
53
|
+
return [...PENDING_ACTIVITIES.entries()].map(([id, state]) => ({
|
|
54
|
+
id,
|
|
55
|
+
workflowId: WORKFLOW_RUNS.get(state.runId)?.workflowId ?? 'unknown',
|
|
56
|
+
hasSchema: Boolean(state.bootstrap.schema),
|
|
57
|
+
}));
|
|
58
|
+
});
|
|
68
59
|
const envSet = new JSONRPCServerMethod('env.set', { schema: [Type.String(), Type.String()] }, (name, value) => env.set(name, value));
|
|
69
60
|
const envList = new JSONRPCServerMethod('env.list', () => Object.fromEntries(env));
|
|
70
|
-
const server = new JSONRPCServer([
|
|
61
|
+
const server = new JSONRPCServer([
|
|
62
|
+
workflowRun,
|
|
63
|
+
workflowAdvanceAsyncActivity,
|
|
64
|
+
workflowListPendingAsyncActivities,
|
|
65
|
+
envSet,
|
|
66
|
+
envList,
|
|
67
|
+
], message => {
|
|
71
68
|
process.send?.(message);
|
|
72
69
|
});
|
|
73
70
|
const client = new JSONRPCClient(async (message) => {
|
|
74
71
|
process.send?.(message);
|
|
75
72
|
});
|
|
76
|
-
process.on('message', message => Promise.all([server.handle(message), client.handle(message)]));
|
|
73
|
+
process.on('message', message => Env.run(env, () => Promise.all([server.handle(message), client.handle(message)])));
|
|
77
74
|
Env.run(env, async () => {
|
|
78
75
|
app = await upApp(entrypoint);
|
|
79
76
|
const manifest = app.toManifest();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev-server-up-app-process.js","sourceRoot":"","sources":["../../src/commands/dev-server-up-app-process.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"dev-server-up-app-process.js","sourceRoot":"","sources":["../../src/commands/dev-server-up-app-process.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { AsyncActivityResultFulfilled, AsyncActivityResultPending, AsyncActivityResultRejected, Internals, } from '@t4h.framework/core';
|
|
2
|
+
import { PENDING_ACTIVITIES, WORKFLOW_RUNS } from './repository.js';
|
|
3
|
+
import { workflowRun } from './workflow-run.js';
|
|
4
|
+
import { claims, env } from '../commands/dev-server-up-app-process.js';
|
|
5
|
+
export const INTERNAL_PENDING_ID_KEY = '__INTERNAL_PENDING_ID__';
|
|
6
|
+
function rebuild(history, id, result) {
|
|
7
|
+
return history.map(item => {
|
|
8
|
+
const isTarget = item.type === 'async' &&
|
|
9
|
+
item.status === 'pending' &&
|
|
10
|
+
item.output?.[INTERNAL_PENDING_ID_KEY] === id;
|
|
11
|
+
if (!isTarget)
|
|
12
|
+
return item;
|
|
13
|
+
const status = result instanceof AsyncActivityResultRejected ? 'rejected' : 'fulfilled';
|
|
14
|
+
return {
|
|
15
|
+
...item,
|
|
16
|
+
status,
|
|
17
|
+
output: result.payload,
|
|
18
|
+
};
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
export async function advanceAsyncActivity(id, payload) {
|
|
22
|
+
const state = PENDING_ACTIVITIES.get(id);
|
|
23
|
+
if (!state)
|
|
24
|
+
throw new Error(`Unknown pending async activity: ${id}`);
|
|
25
|
+
const run = WORKFLOW_RUNS.get(state.runId);
|
|
26
|
+
if (!run)
|
|
27
|
+
throw new Error(`Unknown workflow run: ${state.runId}`);
|
|
28
|
+
const ActivityClass = state.activityConstructor;
|
|
29
|
+
const result = await Internals.runActivity(new ActivityClass(), { claims, env }, async (asyncActivity) => {
|
|
30
|
+
return asyncActivity.advance(payload, state.bootstrap);
|
|
31
|
+
});
|
|
32
|
+
const isFulfilled = result instanceof AsyncActivityResultFulfilled;
|
|
33
|
+
const isRejected = result instanceof AsyncActivityResultRejected;
|
|
34
|
+
if (isFulfilled || isRejected) {
|
|
35
|
+
PENDING_ACTIVITIES.delete(id);
|
|
36
|
+
const history = rebuild(run.history, id, result);
|
|
37
|
+
return workflowRun(run.workflowId, run.input, history, state.runId);
|
|
38
|
+
}
|
|
39
|
+
if (result instanceof AsyncActivityResultPending) {
|
|
40
|
+
state.bootstrap = result;
|
|
41
|
+
PENDING_ACTIVITIES.set(id, state);
|
|
42
|
+
return { isWaiting: true, id };
|
|
43
|
+
}
|
|
44
|
+
throw new Error('Unexpected async activity advance result', {
|
|
45
|
+
cause: result,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=advance-async-activity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"advance-async-activity.js","sourceRoot":"","sources":["../../src/helpers/advance-async-activity.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,EAC1B,2BAA2B,EAC3B,SAAS,GAEV,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,0CAA0C,CAAA;AAEtE,MAAM,CAAC,MAAM,uBAAuB,GAAG,yBAAyB,CAAA;AAEhE,SAAS,OAAO,CACd,OAA+B,EAC/B,EAAU,EACV,MAAkE;IAElE,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QACxB,MAAM,QAAQ,GACZ,IAAI,CAAC,IAAI,KAAK,OAAO;YACrB,IAAI,CAAC,MAAM,KAAK,SAAS;YACzB,IAAI,CAAC,MAAM,EAAE,CAAC,uBAAuB,CAAC,KAAK,EAAE,CAAA;QAE/C,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAA;QAE1B,MAAM,MAAM,GACV,MAAM,YAAY,2BAA2B,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAA;QAE1E,OAAO;YACL,GAAG,IAAI;YACP,MAAM;YACN,MAAM,EAAE,MAAM,CAAC,OAAO;SACvB,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,EAAU,EAAE,OAAgB;IACrE,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAExC,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,EAAE,EAAE,CAAC,CAAA;IAEpE,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAE1C,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,KAAK,CAAC,KAAK,EAAE,CAAC,CAAA;IAEjE,MAAM,aAAa,GAAG,KAAK,CAAC,mBAAmB,CAAA;IAE/C,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,WAAW,CACxC,IAAI,aAAa,EAAE,EACnB,EAAE,MAAM,EAAE,GAAG,EAAE,EACf,KAAK,EAAC,aAAa,EAAC,EAAE;QACpB,OAAO,aAAa,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,CAAA;IACxD,CAAC,CACF,CAAA;IAED,MAAM,WAAW,GAAG,MAAM,YAAY,4BAA4B,CAAA;IAClE,MAAM,UAAU,GAAG,MAAM,YAAY,2BAA2B,CAAA;IAEhE,IAAI,WAAW,IAAI,UAAU,EAAE,CAAC;QAC9B,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QAE7B,MAAM,OAAO,GAAG,OAAO,CACrB,GAAG,CAAC,OAAO,EACX,EAAE,EACF,MAAoE,CACrE,CAAA;QAED,OAAO,WAAW,CAChB,GAAG,CAAC,UAAU,EACd,GAAG,CAAC,KAAK,EACT,OAAiC,EACjC,KAAK,CAAC,KAAK,CACZ,CAAA;IACH,CAAC;IAED,IAAI,MAAM,YAAY,0BAA0B,EAAE,CAAC;QACjD,KAAK,CAAC,SAAS,GAAG,MAAM,CAAA;QAExB,kBAAkB,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;QAEjC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,CAAA;IAChC,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,0CAA0C,EAAE;QAC1D,KAAK,EAAE,MAAM;KACd,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
2
|
+
export const PENDING_ACTIVITIES = new Map();
|
|
3
|
+
export const WORKFLOW_RUNS = new Map();
|
|
4
|
+
export const RUN_WORKFLOW_STORAGE = new AsyncLocalStorage();
|
|
5
|
+
export const WORKFLOW_PARENT_PAIR = new Map();
|
|
6
|
+
export const WORKFLOW_PENDING_ACTIVITY_ID = new Map();
|
|
7
|
+
export const LATEST_CHILD_RUN_ID_BY_PARENT = new Map();
|
|
8
|
+
export const PENDING_CHILD_RESULTS = new Map();
|
|
9
|
+
//# sourceMappingURL=repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/helpers/repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAqBpD,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAA6B,CAAA;AAEtE,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,GAAG,EAA4B,CAAA;AAEhE,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,iBAAiB,EAAU,CAAA;AAEnE,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAAkB,CAAA;AAE7D,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,GAAG,EAAkB,CAAA;AAErE,MAAM,CAAC,MAAM,6BAA6B,GAAG,IAAI,GAAG,EAAkB,CAAA;AAEtE,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,GAAG,EAAe,CAAA"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { AsyncActivity, AsyncActivityResultFulfilled, AsyncActivityResultPending, AsyncActivityResultRejected, Internals, PushActivity, PushWaitAsyncActivity, SyncActivity, } from '@t4h.framework/core';
|
|
3
|
+
import { advanceAsyncActivity, INTERNAL_PENDING_ID_KEY, } from './advance-async-activity.js';
|
|
4
|
+
import { LATEST_CHILD_RUN_ID_BY_PARENT, PENDING_ACTIVITIES, PENDING_CHILD_RESULTS, RUN_WORKFLOW_STORAGE, WORKFLOW_PARENT_PAIR, WORKFLOW_PENDING_ACTIVITY_ID, WORKFLOW_RUNS, } from './repository.js';
|
|
5
|
+
import { app, claims, env } from '../commands/dev-server-up-app-process.js';
|
|
6
|
+
async function callbackParentWorkflow(workflowRunId, parentWorkflowRunId, payload) {
|
|
7
|
+
if (!WORKFLOW_RUNS.has(parentWorkflowRunId))
|
|
8
|
+
throw new Error(`Unknown workflow run: ${parentWorkflowRunId}`);
|
|
9
|
+
const pendingActivityId = WORKFLOW_PENDING_ACTIVITY_ID.get(workflowRunId);
|
|
10
|
+
if (!pendingActivityId) {
|
|
11
|
+
PENDING_CHILD_RESULTS.set(workflowRunId, payload);
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
await advanceAsyncActivity(pendingActivityId, payload);
|
|
15
|
+
}
|
|
16
|
+
export async function workflowRun(workflowId, input, history = [], runId = randomUUID()) {
|
|
17
|
+
return RUN_WORKFLOW_STORAGE.run(runId, async () => {
|
|
18
|
+
WORKFLOW_RUNS.set(runId, { workflowId, input, history: [...history] });
|
|
19
|
+
if (!app)
|
|
20
|
+
throw new TypeError('App is not defined');
|
|
21
|
+
let workflow = app.workflows.find(workflow => workflow.id === workflowId);
|
|
22
|
+
if (!workflow && workflowId.startsWith(':')) {
|
|
23
|
+
const index = parseInt(workflowId.slice(1));
|
|
24
|
+
workflow = app.workflows[index];
|
|
25
|
+
}
|
|
26
|
+
if (!workflow)
|
|
27
|
+
return;
|
|
28
|
+
try {
|
|
29
|
+
const result = await Internals.runWorkflow(workflow, {
|
|
30
|
+
claims,
|
|
31
|
+
history,
|
|
32
|
+
env,
|
|
33
|
+
input,
|
|
34
|
+
});
|
|
35
|
+
const parentWorkflowRunId = WORKFLOW_PARENT_PAIR.get(runId);
|
|
36
|
+
if (!parentWorkflowRunId)
|
|
37
|
+
return result;
|
|
38
|
+
await callbackParentWorkflow(runId, parentWorkflowRunId, {
|
|
39
|
+
status: 'fulfilled',
|
|
40
|
+
output: result,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
catch (pushActivityOrError) {
|
|
44
|
+
if (pushActivityOrError instanceof PushWaitAsyncActivity)
|
|
45
|
+
return { isWaiting: true, id: 'unknown' };
|
|
46
|
+
if (pushActivityOrError instanceof PushActivity) {
|
|
47
|
+
const { activity, input: activityInput } = pushActivityOrError;
|
|
48
|
+
const newHistory = [...history];
|
|
49
|
+
if (activity instanceof SyncActivity) {
|
|
50
|
+
const output = await Internals.runActivity(activity, { claims, env }, async (activity) => activity.run(activityInput));
|
|
51
|
+
newHistory.push({ type: 'sync', output });
|
|
52
|
+
return workflowRun(workflowId, input, newHistory, runId);
|
|
53
|
+
}
|
|
54
|
+
if (activity instanceof AsyncActivity) {
|
|
55
|
+
const bootstrap = await Internals.runActivity(activity, { claims, env }, async (activity) => activity.bootstrap(activityInput));
|
|
56
|
+
if (bootstrap instanceof AsyncActivityResultFulfilled) {
|
|
57
|
+
newHistory.push({
|
|
58
|
+
type: 'async',
|
|
59
|
+
status: 'fulfilled',
|
|
60
|
+
output: bootstrap.payload,
|
|
61
|
+
});
|
|
62
|
+
return workflowRun(workflowId, input, newHistory, runId);
|
|
63
|
+
}
|
|
64
|
+
if (bootstrap instanceof AsyncActivityResultRejected) {
|
|
65
|
+
newHistory.push({
|
|
66
|
+
type: 'async',
|
|
67
|
+
status: 'rejected',
|
|
68
|
+
output: bootstrap.payload,
|
|
69
|
+
});
|
|
70
|
+
return workflowRun(workflowId, input, newHistory, runId);
|
|
71
|
+
}
|
|
72
|
+
if (bootstrap instanceof AsyncActivityResultPending) {
|
|
73
|
+
const id = randomUUID();
|
|
74
|
+
const childWorkflowRunId = LATEST_CHILD_RUN_ID_BY_PARENT.get(runId);
|
|
75
|
+
const newHistoryWithPending = [...history];
|
|
76
|
+
newHistoryWithPending.push({
|
|
77
|
+
type: 'async',
|
|
78
|
+
status: 'pending',
|
|
79
|
+
output: { [INTERNAL_PENDING_ID_KEY]: id },
|
|
80
|
+
});
|
|
81
|
+
WORKFLOW_RUNS.set(runId, {
|
|
82
|
+
workflowId,
|
|
83
|
+
input,
|
|
84
|
+
history: newHistoryWithPending,
|
|
85
|
+
});
|
|
86
|
+
PENDING_ACTIVITIES.set(id, {
|
|
87
|
+
runId,
|
|
88
|
+
bootstrap,
|
|
89
|
+
// @ts-expect-error: TODO
|
|
90
|
+
activityConstructor: activity.constructor,
|
|
91
|
+
});
|
|
92
|
+
if (childWorkflowRunId) {
|
|
93
|
+
WORKFLOW_PENDING_ACTIVITY_ID.set(childWorkflowRunId, id);
|
|
94
|
+
LATEST_CHILD_RUN_ID_BY_PARENT.delete(runId);
|
|
95
|
+
const pendingResult = PENDING_CHILD_RESULTS.get(childWorkflowRunId);
|
|
96
|
+
if (pendingResult) {
|
|
97
|
+
PENDING_CHILD_RESULTS.delete(childWorkflowRunId);
|
|
98
|
+
return advanceAsyncActivity(id, pendingResult);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return workflowRun(workflowId, input, newHistoryWithPending, runId);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
throw new Error('Unsupported activity in PushActivity', {
|
|
105
|
+
cause: pushActivityOrError,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
console.error(pushActivityOrError);
|
|
109
|
+
const parentWorkflowRunId = WORKFLOW_PARENT_PAIR.get(runId);
|
|
110
|
+
if (parentWorkflowRunId)
|
|
111
|
+
await callbackParentWorkflow(runId, parentWorkflowRunId, {
|
|
112
|
+
status: 'rejected',
|
|
113
|
+
output: pushActivityOrError instanceof Error
|
|
114
|
+
? pushActivityOrError.message
|
|
115
|
+
: String(pushActivityOrError),
|
|
116
|
+
});
|
|
117
|
+
return {
|
|
118
|
+
error: pushActivityOrError instanceof Error
|
|
119
|
+
? pushActivityOrError.message
|
|
120
|
+
: String(pushActivityOrError),
|
|
121
|
+
stack: pushActivityOrError instanceof Error
|
|
122
|
+
? pushActivityOrError.stack
|
|
123
|
+
: undefined,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=workflow-run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-run.js","sourceRoot":"","sources":["../../src/helpers/workflow-run.ts"],"names":[],"mappings":"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"}
|
package/dist/models/DevServer.js
CHANGED
|
@@ -49,6 +49,9 @@ export class DevServer {
|
|
|
49
49
|
});
|
|
50
50
|
}
|
|
51
51
|
async onTsBuildSuccess() {
|
|
52
|
+
if (this.app) {
|
|
53
|
+
this.app.kill();
|
|
54
|
+
}
|
|
52
55
|
const { default: packageJson } = await import(this.packageJsonPath, {
|
|
53
56
|
with: { type: 'json' },
|
|
54
57
|
});
|
|
@@ -73,5 +76,11 @@ export class DevServer {
|
|
|
73
76
|
async listEnv() {
|
|
74
77
|
return await this.jsonRpcClient.call('env.list');
|
|
75
78
|
}
|
|
79
|
+
async listWaitingAsyncActivities() {
|
|
80
|
+
return await this.jsonRpcClient.call('workflow.async-activities.waiting.list');
|
|
81
|
+
}
|
|
82
|
+
async advanceAsyncActivity(id, payload) {
|
|
83
|
+
return await this.jsonRpcClient.call('workflow.async-activities.advance', id, payload);
|
|
84
|
+
}
|
|
76
85
|
}
|
|
77
86
|
//# sourceMappingURL=DevServer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DevServer.js","sourceRoot":"","sources":["../../src/models/DevServer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DevServer.js","sourceRoot":"","sources":["../../src/models/DevServer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { CacheClaim } from '@t4h.framework/cache';
|
|
2
|
+
const cache = new Map();
|
|
3
|
+
export class DevServerCacheClaim extends CacheClaim {
|
|
4
|
+
get(key) {
|
|
5
|
+
return cache.get(key);
|
|
6
|
+
}
|
|
7
|
+
set(key, value) {
|
|
8
|
+
cache.set(key, value);
|
|
9
|
+
return Promise.resolve();
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=DevServerCacheClaim.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DevServerCacheClaim.js","sourceRoot":"","sources":["../../src/models/DevServerCacheClaim.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAGjD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAwB,CAAA;AAE7C,MAAM,OAAO,mBAAoB,SAAQ,UAAU;IAC1C,GAAG,CACR,GAAW;QAEX,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAkB,CAAA;IACxC,CAAC;IAEM,GAAG,CAAC,GAAW,EAAE,KAAmB;QACzC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QAErB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAA;IAC1B,CAAC;CACF"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { WorkflowClaim, } from '@t4h.framework/core';
|
|
3
|
+
import { LATEST_CHILD_RUN_ID_BY_PARENT, RUN_WORKFLOW_STORAGE, } from '../helpers/repository.js';
|
|
4
|
+
export class DevServerWorkflowClaim extends WorkflowClaim {
|
|
5
|
+
run;
|
|
6
|
+
constructor(run) {
|
|
7
|
+
super();
|
|
8
|
+
this.run = run;
|
|
9
|
+
}
|
|
10
|
+
async start(workflow, input) {
|
|
11
|
+
const workflowId = workflow.id;
|
|
12
|
+
if (!workflowId)
|
|
13
|
+
throw new TypeError('Could not start workflow without an id');
|
|
14
|
+
const id = randomUUID();
|
|
15
|
+
const parentWorkflowRunId = RUN_WORKFLOW_STORAGE.getStore();
|
|
16
|
+
if (parentWorkflowRunId)
|
|
17
|
+
LATEST_CHILD_RUN_ID_BY_PARENT.set(parentWorkflowRunId, id);
|
|
18
|
+
await this.run(workflowId, input, id).catch(error => {
|
|
19
|
+
console.error('[DevServer] nested workflow failed:', error);
|
|
20
|
+
});
|
|
21
|
+
return id;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=DevServerWorkflowClaim.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DevServerWorkflowClaim.js","sourceRoot":"","sources":["../../src/models/DevServerWorkflowClaim.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,OAAO,EACL,aAAa,GAId,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EACL,6BAA6B,EAC7B,oBAAoB,GACrB,MAAM,0BAA0B,CAAA;AAEjC,MAAM,OAAO,sBAAuB,SAAQ,aAAa;IAEpC;IADnB,YACmB,GAII;QAErB,KAAK,EAAE,CAAA;QANU,QAAG,GAAH,GAAG,CAIC;IAGvB,CAAC;IAEM,KAAK,CAAC,KAAK,CAChB,QAAmB,EACnB,KAA+B;QAE/B,MAAM,UAAU,GAAG,QAAQ,CAAC,EAAE,CAAA;QAE9B,IAAI,CAAC,UAAU;YACb,MAAM,IAAI,SAAS,CAAC,wCAAwC,CAAC,CAAA;QAE/D,MAAM,EAAE,GAAG,UAAU,EAAE,CAAA;QAEvB,MAAM,mBAAmB,GAAG,oBAAoB,CAAC,QAAQ,EAAE,CAAA;QAE3D,IAAI,mBAAmB;YACrB,6BAA6B,CAAC,GAAG,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAA;QAE5D,MAAM,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;YAClD,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAA;QAC7D,CAAC,CAAC,CAAA;QAEF,OAAO,EAAE,CAAA;IACX,CAAC;CACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export function isWorkflowWaiting(result) {
|
|
2
|
+
if (typeof result !== 'object')
|
|
3
|
+
return false;
|
|
4
|
+
if (result === null)
|
|
5
|
+
return false;
|
|
6
|
+
if (!('isWaiting' in result))
|
|
7
|
+
return false;
|
|
8
|
+
if (!('id' in result))
|
|
9
|
+
return false;
|
|
10
|
+
return result.isWaiting === true && typeof result.id === 'string';
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=is-workflow-waiting.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"is-workflow-waiting.js","sourceRoot":"","sources":["../../src/tools/is-workflow-waiting.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,iBAAiB,CAC/B,MAAe;IAEf,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAE5C,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,KAAK,CAAA;IAEjC,IAAI,CAAC,CAAC,WAAW,IAAI,MAAM,CAAC;QAAE,OAAO,KAAK,CAAA;IAE1C,IAAI,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC;QAAE,OAAO,KAAK,CAAA;IAEnC,OAAO,MAAM,CAAC,SAAS,KAAK,IAAI,IAAI,OAAO,MAAM,CAAC,EAAE,KAAK,QAAQ,CAAA;AACnE,CAAC"}
|
|
@@ -16,6 +16,7 @@ export async function jsonSchemaObjectToInquirerQuestion(schema, context) {
|
|
|
16
16
|
result[key] = await jsonSchemaToInquirerQuestion(property, {
|
|
17
17
|
key: context.key ? `${context.key}.${key}` : key,
|
|
18
18
|
isOptional: !isRequired,
|
|
19
|
+
signal: context.signal,
|
|
19
20
|
});
|
|
20
21
|
}
|
|
21
22
|
return result;
|
|
@@ -23,11 +24,11 @@ export async function jsonSchemaObjectToInquirerQuestion(schema, context) {
|
|
|
23
24
|
export async function jsonSchemaStringToInquirerQuestion(schema, context) {
|
|
24
25
|
return input({
|
|
25
26
|
message: `${context.key ? context.key : ''}${context.key && schema.description ? ': ' : ''}${schema.description ?? ''}`,
|
|
26
|
-
});
|
|
27
|
+
}, { signal: context.signal });
|
|
27
28
|
}
|
|
28
29
|
export async function jsonSchemaNumberToInquirerQuestion(schema, context) {
|
|
29
30
|
return number({
|
|
30
31
|
message: `${context.key ? context.key : ''}${context.key && schema.description ? ': ' : ''}${schema.description ?? ''}`,
|
|
31
|
-
});
|
|
32
|
+
}, { signal: context.signal });
|
|
32
33
|
}
|
|
33
34
|
//# sourceMappingURL=json-schema-to-inquirer-question.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-schema-to-inquirer-question.js","sourceRoot":"","sources":["../../src/tools/json-schema-to-inquirer-question.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"json-schema-to-inquirer-question.js","sourceRoot":"","sources":["../../src/tools/json-schema-to-inquirer-question.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AASjD,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,MAAkB,EAClB,UAA+C,EAAE;IAEjD,IAAI,OAAO,MAAM,KAAK,SAAS;QAAE,OAAM;IAEvC,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ;QAC1B,OAAO,kCAAkC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAE5D,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ;QAC1B,OAAO,kCAAkC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAE5D,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ;QAC1B,OAAO,kCAAkC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAC9D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kCAAkC,CACtD,MAAoC,EACpC,OAA4C;IAE5C,MAAM,MAAM,GAA4B,EAAE,CAAA;IAE1C,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,CAAC;QACtE,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAA;QAEjD,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,4BAA4B,CAAC,QAAQ,EAAE;YACzD,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG;YAChD,UAAU,EAAE,CAAC,UAAU;YACvB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kCAAkC,CACtD,MAAoC,EACpC,OAA4C;IAE5C,OAAO,KAAK,CACV;QACE,OAAO,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,WAAW,IAAI,EAAE,EAAE;KACxH,EACD,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAC3B,CAAA;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kCAAkC,CACtD,MAAoC,EACpC,OAA4C;IAE5C,OAAO,MAAM,CACX;QACE,OAAO,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,WAAW,IAAI,EAAE,EAAE;KACxH,EACD,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAC3B,CAAA;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@t4h.framework/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "CLI tools for the T4H Framework",
|
|
5
5
|
"homepage": "https://github.com/tech4humans-brasil/framework/tree/main/packages/cli",
|
|
6
6
|
"bugs": "https://github.com/tech4humans-brasil/framework/issues",
|
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"@inquirer/prompts": "^8.3.0",
|
|
32
|
+
"@t4h.framework/cache": "^0.0.0",
|
|
32
33
|
"commander": "^14.0.3",
|
|
33
34
|
"form-data": "^4.0.5",
|
|
34
35
|
"json-rpc-2.0": "^1.7.1",
|
|
@@ -40,10 +41,10 @@
|
|
|
40
41
|
"undici": "^7.22.0"
|
|
41
42
|
},
|
|
42
43
|
"devDependencies": {
|
|
43
|
-
"@t4h.framework/core": "^0.
|
|
44
|
-
"@t4h.framework/fs": "^0.
|
|
45
|
-
"@t4h.framework/http": "^0.
|
|
46
|
-
"@t4h.framework/orm": "^0.
|
|
44
|
+
"@t4h.framework/core": "^0.0.0-experimental-858514c-5c550a89ad5a37d7ff14",
|
|
45
|
+
"@t4h.framework/fs": "^0.0.0",
|
|
46
|
+
"@t4h.framework/http": "^0.0.0",
|
|
47
|
+
"@t4h.framework/orm": "^0.0.0",
|
|
47
48
|
"@types/json-schema": "^7.0.15",
|
|
48
49
|
"@types/mime-types": "^3",
|
|
49
50
|
"@types/node": "^25.3.5",
|
|
@@ -54,10 +55,11 @@
|
|
|
54
55
|
"vitest": "^4.0.18"
|
|
55
56
|
},
|
|
56
57
|
"peerDependencies": {
|
|
57
|
-
"@t4h.framework/
|
|
58
|
-
"@t4h.framework/
|
|
59
|
-
"@t4h.framework/
|
|
60
|
-
"@t4h.framework/
|
|
58
|
+
"@t4h.framework/cache": "^0.0.0",
|
|
59
|
+
"@t4h.framework/core": "^0.0.0-experimental-858514c-5c550a89ad5a37d7ff14",
|
|
60
|
+
"@t4h.framework/fs": "^0.0.0",
|
|
61
|
+
"@t4h.framework/http": "^0.0.0",
|
|
62
|
+
"@t4h.framework/orm": "^0.0.0"
|
|
61
63
|
},
|
|
62
64
|
"packageManager": "yarn@4.12.0",
|
|
63
65
|
"engines": {
|
|
@@ -1,166 +0,0 @@
|
|
|
1
|
-
import { App, AsyncActivity, AsyncActivityResultFulfilled, AsyncActivityResultPending, AsyncActivityResultRejected, Internals, PushActivity, PushWaitAsyncActivity, SyncActivity, Workflow, } from '@t4h.framework/core';
|
|
2
|
-
import { uuidv7 } from 'uuidv7';
|
|
3
|
-
export function serializeAsyncPending(pending) {
|
|
4
|
-
return {
|
|
5
|
-
payload: pending.payload,
|
|
6
|
-
schema: pending.schema
|
|
7
|
-
? JSON.parse(JSON.stringify(pending.schema))
|
|
8
|
-
: undefined,
|
|
9
|
-
timeoutAt: pending.timeoutAt?.toISOString(),
|
|
10
|
-
};
|
|
11
|
-
}
|
|
12
|
-
export function deserializeAsyncPending(output) {
|
|
13
|
-
if (!output || typeof output !== 'object')
|
|
14
|
-
return new AsyncActivityResultPending();
|
|
15
|
-
const o = output;
|
|
16
|
-
return new AsyncActivityResultPending({
|
|
17
|
-
payload: o.payload,
|
|
18
|
-
schema: o.schema,
|
|
19
|
-
timeoutAt: o.timeoutAt ? new Date(o.timeoutAt) : undefined,
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
function resolveWorkflow(app, workflowId) {
|
|
23
|
-
let workflow;
|
|
24
|
-
if (workflowId.startsWith(':')) {
|
|
25
|
-
const index = parseInt(workflowId.slice(1), 10);
|
|
26
|
-
workflow = app.workflows[index];
|
|
27
|
-
}
|
|
28
|
-
if (!workflow)
|
|
29
|
-
workflow = app.workflows.find(w => w.id === workflowId);
|
|
30
|
-
return workflow;
|
|
31
|
-
}
|
|
32
|
-
function pendingFromHistory(history) {
|
|
33
|
-
const last = history[history.length - 1];
|
|
34
|
-
if (last &&
|
|
35
|
-
last.type === 'async' &&
|
|
36
|
-
last.status === 'pending' &&
|
|
37
|
-
last.output &&
|
|
38
|
-
typeof last.output === 'object') {
|
|
39
|
-
return last.output;
|
|
40
|
-
}
|
|
41
|
-
return {};
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Runs a workflow until it completes or pauses on a pending async activity
|
|
45
|
-
* (`PushWaitAsyncActivity`).
|
|
46
|
-
*/
|
|
47
|
-
export async function runDevWorkflowUntilPause(app, claims, env, pendingExecutions, workflowId, input, initialHistory, options) {
|
|
48
|
-
let history = [...initialHistory];
|
|
49
|
-
const reuseExecutionId = options?.reuseExecutionId;
|
|
50
|
-
while (true) {
|
|
51
|
-
const workflow = resolveWorkflow(app, workflowId);
|
|
52
|
-
if (!workflow)
|
|
53
|
-
return undefined;
|
|
54
|
-
try {
|
|
55
|
-
const output = await Internals.runWorkflow(workflow, {
|
|
56
|
-
claims,
|
|
57
|
-
history,
|
|
58
|
-
env,
|
|
59
|
-
input,
|
|
60
|
-
});
|
|
61
|
-
return { status: 'done', output };
|
|
62
|
-
}
|
|
63
|
-
catch (error) {
|
|
64
|
-
if (error instanceof PushActivity) {
|
|
65
|
-
const { activity, input: actInput } = error;
|
|
66
|
-
if (activity instanceof SyncActivity) {
|
|
67
|
-
const output = await Internals.runActivity(activity, { claims, env }, async (a) => a.run(actInput));
|
|
68
|
-
history = [...history, { type: 'sync', output }];
|
|
69
|
-
continue;
|
|
70
|
-
}
|
|
71
|
-
if (activity instanceof AsyncActivity) {
|
|
72
|
-
const result = await Internals.runActivity(activity, { claims, env }, async (a) => a.bootstrap(actInput));
|
|
73
|
-
if (result instanceof AsyncActivityResultFulfilled) {
|
|
74
|
-
history = [
|
|
75
|
-
...history,
|
|
76
|
-
{ type: 'async', status: 'fulfilled', output: result.payload },
|
|
77
|
-
];
|
|
78
|
-
}
|
|
79
|
-
else if (result instanceof AsyncActivityResultRejected) {
|
|
80
|
-
history = [
|
|
81
|
-
...history,
|
|
82
|
-
{ type: 'async', status: 'rejected', output: result.payload },
|
|
83
|
-
];
|
|
84
|
-
}
|
|
85
|
-
else if (result instanceof AsyncActivityResultPending) {
|
|
86
|
-
history = [
|
|
87
|
-
...history,
|
|
88
|
-
{
|
|
89
|
-
type: 'async',
|
|
90
|
-
status: 'pending',
|
|
91
|
-
output: serializeAsyncPending(result),
|
|
92
|
-
},
|
|
93
|
-
];
|
|
94
|
-
}
|
|
95
|
-
else {
|
|
96
|
-
throw new Error('Unexpected async activity bootstrap result');
|
|
97
|
-
}
|
|
98
|
-
continue;
|
|
99
|
-
}
|
|
100
|
-
throw new Error('Unsupported activity type');
|
|
101
|
-
}
|
|
102
|
-
if (error instanceof PushWaitAsyncActivity) {
|
|
103
|
-
const activityCtor = Object.getPrototypeOf(error.asyncActivity)
|
|
104
|
-
.constructor;
|
|
105
|
-
const executionId = reuseExecutionId ?? uuidv7();
|
|
106
|
-
pendingExecutions.set(executionId, {
|
|
107
|
-
workflowId,
|
|
108
|
-
input,
|
|
109
|
-
history,
|
|
110
|
-
activityCtor,
|
|
111
|
-
});
|
|
112
|
-
return {
|
|
113
|
-
status: 'pending',
|
|
114
|
-
executionId,
|
|
115
|
-
pending: pendingFromHistory(history),
|
|
116
|
-
};
|
|
117
|
-
}
|
|
118
|
-
throw error;
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
/**
|
|
123
|
-
* Applies `advance` to the pending async activity and continues the workflow
|
|
124
|
-
* until done or the next pause.
|
|
125
|
-
*/
|
|
126
|
-
export async function advanceDevWorkflow(app, claims, env, pendingExecutions, executionId, payload) {
|
|
127
|
-
const state = pendingExecutions.get(executionId);
|
|
128
|
-
if (!state)
|
|
129
|
-
throw new Error(`Unknown execution: ${executionId}`);
|
|
130
|
-
pendingExecutions.delete(executionId);
|
|
131
|
-
const { workflowId, input, history, activityCtor } = state;
|
|
132
|
-
const last = history[history.length - 1];
|
|
133
|
-
if (!last || last.type !== 'async' || last.status !== 'pending')
|
|
134
|
-
throw new Error('Invalid pending execution state');
|
|
135
|
-
const bootstrap = deserializeAsyncPending(last.output);
|
|
136
|
-
const result = await Internals.runActivity(activityCtor, { claims, env }, async (activity) => activity.advance(payload, bootstrap));
|
|
137
|
-
const base = history.slice(0, -1);
|
|
138
|
-
let newHistory;
|
|
139
|
-
if (result instanceof AsyncActivityResultFulfilled) {
|
|
140
|
-
newHistory = [
|
|
141
|
-
...base,
|
|
142
|
-
{ type: 'async', status: 'fulfilled', output: result.payload },
|
|
143
|
-
];
|
|
144
|
-
}
|
|
145
|
-
else if (result instanceof AsyncActivityResultRejected) {
|
|
146
|
-
newHistory = [
|
|
147
|
-
...base,
|
|
148
|
-
{ type: 'async', status: 'rejected', output: result.payload },
|
|
149
|
-
];
|
|
150
|
-
}
|
|
151
|
-
else if (result instanceof AsyncActivityResultPending) {
|
|
152
|
-
newHistory = [
|
|
153
|
-
...base,
|
|
154
|
-
{
|
|
155
|
-
type: 'async',
|
|
156
|
-
status: 'pending',
|
|
157
|
-
output: serializeAsyncPending(result),
|
|
158
|
-
},
|
|
159
|
-
];
|
|
160
|
-
}
|
|
161
|
-
else {
|
|
162
|
-
throw new Error('Unexpected async activity advance result');
|
|
163
|
-
}
|
|
164
|
-
return runDevWorkflowUntilPause(app, claims, env, pendingExecutions, workflowId, input, newHistory, { reuseExecutionId: executionId });
|
|
165
|
-
}
|
|
166
|
-
//# sourceMappingURL=dev-workflow-executor.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dev-workflow-executor.js","sourceRoot":"","sources":["../../src/tools/dev-workflow-executor.ts"],"names":[],"mappings":"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"}
|