@bluelibs/runner-dev 5.3.0 → 6.0.1
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/AI.md +25 -3
- package/README.md +190 -55
- package/dist/cli/generators/artifact.js +2 -14
- package/dist/cli/generators/artifact.js.map +1 -1
- package/dist/cli/generators/common.d.ts +1 -0
- package/dist/cli/generators/common.js +22 -0
- package/dist/cli/generators/common.js.map +1 -1
- package/dist/cli/generators/printNewHelp.js +2 -2
- package/dist/cli/generators/printNewHelp.js.map +1 -1
- package/dist/cli/generators/scaffold/templates/package.json.d.ts +2 -2
- package/dist/cli/generators/scaffold/templates/package.json.js +2 -2
- package/dist/cli/generators/scaffold/templates/src/main.ts.js +7 -9
- package/dist/cli/generators/scaffold/templates/src/main.ts.js.map +1 -1
- package/dist/cli/generators/scaffold.js +1 -135
- package/dist/cli/generators/scaffold.js.map +1 -1
- package/dist/cli/generators/templates.js +64 -63
- package/dist/cli/generators/templates.js.map +1 -1
- package/dist/generated/resolvers-types.d.ts +376 -144
- package/dist/index.d.ts +39 -43
- package/dist/resources/cli.config.resource.d.ts +1 -1
- package/dist/resources/cli.config.resource.js +2 -2
- package/dist/resources/cli.config.resource.js.map +1 -1
- package/dist/resources/coverage.resource.d.ts +2 -2
- package/dist/resources/coverage.resource.js +3 -3
- package/dist/resources/coverage.resource.js.map +1 -1
- package/dist/resources/dev.resource.d.ts +1 -1
- package/dist/resources/dev.resource.js +2 -2
- package/dist/resources/dev.resource.js.map +1 -1
- package/dist/resources/docs.generator.resource.d.ts +4 -4
- package/dist/resources/docs.generator.resource.js +2 -2
- package/dist/resources/docs.generator.resource.js.map +1 -1
- package/dist/resources/graphql-accumulator.resource.d.ts +2 -2
- package/dist/resources/graphql-accumulator.resource.js +6 -3
- package/dist/resources/graphql-accumulator.resource.js.map +1 -1
- package/dist/resources/graphql.cli.resource.d.ts +1 -1
- package/dist/resources/graphql.cli.resource.js +2 -2
- package/dist/resources/graphql.cli.resource.js.map +1 -1
- package/dist/resources/graphql.query.cli.task.d.ts +14 -16
- package/dist/resources/graphql.query.cli.task.js +3 -3
- package/dist/resources/graphql.query.cli.task.js.map +1 -1
- package/dist/resources/graphql.query.task.d.ts +18 -20
- package/dist/resources/graphql.query.task.js +4 -4
- package/dist/resources/graphql.query.task.js.map +1 -1
- package/dist/resources/http.tag.d.ts +1 -1
- package/dist/resources/http.tag.js +2 -2
- package/dist/resources/http.tag.js.map +1 -1
- package/dist/resources/introspector.cli.resource.d.ts +2 -2
- package/dist/resources/introspector.cli.resource.js +14 -6
- package/dist/resources/introspector.cli.resource.js.map +1 -1
- package/dist/resources/introspector.resource.d.ts +3 -3
- package/dist/resources/introspector.resource.js +4 -5
- package/dist/resources/introspector.resource.js.map +1 -1
- package/dist/resources/live.resource.d.ts +4 -6
- package/dist/resources/live.resource.js +38 -25
- package/dist/resources/live.resource.js.map +1 -1
- package/dist/resources/models/Introspector.d.ts +28 -14
- package/dist/resources/models/Introspector.js +334 -161
- package/dist/resources/models/Introspector.js.map +1 -1
- package/dist/resources/models/durable.runtime.js +36 -10
- package/dist/resources/models/durable.runtime.js.map +1 -1
- package/dist/resources/models/durable.tools.d.ts +1 -1
- package/dist/resources/models/durable.tools.js +6 -3
- package/dist/resources/models/durable.tools.js.map +1 -1
- package/dist/resources/models/initializeFromStore.js +54 -21
- package/dist/resources/models/initializeFromStore.js.map +1 -1
- package/dist/resources/models/initializeFromStore.utils.d.ts +7 -6
- package/dist/resources/models/initializeFromStore.utils.js +302 -25
- package/dist/resources/models/initializeFromStore.utils.js.map +1 -1
- package/dist/resources/models/introspector.tools.js +18 -6
- package/dist/resources/models/introspector.tools.js.map +1 -1
- package/dist/resources/routeHandlers/getDocsData.d.ts +4 -0
- package/dist/resources/routeHandlers/getDocsData.js +28 -0
- package/dist/resources/routeHandlers/getDocsData.js.map +1 -1
- package/dist/resources/routeHandlers/registerHttpRoutes.hook.d.ts +26 -25
- package/dist/resources/routeHandlers/registerHttpRoutes.hook.js +10 -9
- package/dist/resources/routeHandlers/registerHttpRoutes.hook.js.map +1 -1
- package/dist/resources/server.resource.d.ts +20 -22
- package/dist/resources/server.resource.js +6 -6
- package/dist/resources/server.resource.js.map +1 -1
- package/dist/resources/swap.cli.resource.d.ts +4 -4
- package/dist/resources/swap.cli.resource.js +2 -2
- package/dist/resources/swap.cli.resource.js.map +1 -1
- package/dist/resources/swap.resource.d.ts +7 -7
- package/dist/resources/swap.resource.js +188 -38
- package/dist/resources/swap.resource.js.map +1 -1
- package/dist/resources/swap.tools.d.ts +3 -2
- package/dist/resources/swap.tools.js +27 -27
- package/dist/resources/swap.tools.js.map +1 -1
- package/dist/resources/telemetry.resource.d.ts +1 -1
- package/dist/resources/telemetry.resource.js +46 -43
- package/dist/resources/telemetry.resource.js.map +1 -1
- package/dist/runner-compat.d.ts +85 -0
- package/dist/runner-compat.js +178 -0
- package/dist/runner-compat.js.map +1 -0
- package/dist/runner-node-compat.d.ts +2 -0
- package/dist/runner-node-compat.js +28 -0
- package/dist/runner-node-compat.js.map +1 -0
- package/dist/schema/index.js +4 -8
- package/dist/schema/index.js.map +1 -1
- package/dist/schema/model.d.ts +80 -23
- package/dist/schema/model.js.map +1 -1
- package/dist/schema/query.js +2 -1
- package/dist/schema/query.js.map +1 -1
- package/dist/schema/types/AllType.js +6 -3
- package/dist/schema/types/AllType.js.map +1 -1
- package/dist/schema/types/BaseElementCommon.js +2 -2
- package/dist/schema/types/ErrorType.js +1 -1
- package/dist/schema/types/ErrorType.js.map +1 -1
- package/dist/schema/types/EventType.js +19 -2
- package/dist/schema/types/EventType.js.map +1 -1
- package/dist/schema/types/LaneSummaryTypes.d.ts +3 -0
- package/dist/schema/types/LaneSummaryTypes.js +19 -0
- package/dist/schema/types/LaneSummaryTypes.js.map +1 -0
- package/dist/schema/types/LiveType.js +67 -0
- package/dist/schema/types/LiveType.js.map +1 -1
- package/dist/schema/types/ResourceType.js +100 -19
- package/dist/schema/types/ResourceType.js.map +1 -1
- package/dist/schema/types/RunOptionsType.js +41 -5
- package/dist/schema/types/RunOptionsType.js.map +1 -1
- package/dist/schema/types/TagType.js +35 -4
- package/dist/schema/types/TagType.js.map +1 -1
- package/dist/schema/types/TaskType.js +5 -0
- package/dist/schema/types/TaskType.js.map +1 -1
- package/dist/schema/types/index.d.ts +2 -2
- package/dist/schema/types/index.js +6 -7
- package/dist/schema/types/index.js.map +1 -1
- package/dist/schema/types/middleware/common.d.ts +3 -2
- package/dist/schema/types/middleware/common.js +19 -13
- package/dist/schema/types/middleware/common.js.map +1 -1
- package/dist/ui/.vite/manifest.json +2 -2
- package/dist/ui/assets/docs-Btkv97Ls.js +302 -0
- package/dist/ui/assets/docs-Btkv97Ls.js.map +1 -0
- package/dist/ui/assets/docs-CipvKUxZ.css +1 -0
- package/dist/utils/lane-resources.d.ts +55 -0
- package/dist/utils/lane-resources.js +143 -0
- package/dist/utils/lane-resources.js.map +1 -0
- package/dist/utils/zod.js +36 -3
- package/dist/utils/zod.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +4 -4
- package/readmes/runner-AI.md +740 -0
- package/readmes/runner-durable-workflows.md +2247 -0
- package/readmes/runner-full-guide.md +5869 -0
- package/readmes/runner-remote-lanes.md +909 -0
- package/dist/ui/assets/docs-BhRuaJ5l.css +0 -1
- package/dist/ui/assets/docs-H4oDZj7p.js +0 -302
- package/dist/ui/assets/docs-H4oDZj7p.js.map +0 -1
package/AI.md
CHANGED
|
@@ -13,8 +13,25 @@ Runner-Dev is a powerful development toolkit for applications built with the **@
|
|
|
13
13
|
- **MCP Integration**: AI-native development environment
|
|
14
14
|
- **Tags (first-class)**: Discover Tag objects and reverse usage via GraphQL (`tags`, `tag(id)`).
|
|
15
15
|
- **Documentation UI Overviews**: Sortable and searchable overview tables with a `Used By` counter column for faster cross-element inspection.
|
|
16
|
-
- **Visibility Awareness**: Every element exposes `isPrivate` (based on Runner `
|
|
16
|
+
- **Visibility Awareness**: Every element exposes `isPrivate` (based on Runner `isolate()` boundaries), and resources expose `isolation`.
|
|
17
|
+
- **Subtree Governance Awareness**: Resources expose normalized `subtree` policy summaries (middleware and validator counts per branch).
|
|
18
|
+
- **Lifecycle Awareness**: Resources expose `cooldown` support and run options expose `lifecycleMode`, `disposeBudgetMs`, `disposeDrainBudgetMs`.
|
|
19
|
+
- **Lane Awareness**: Events expose optional `eventLane` summaries (`globals.tags.eventLane`) and both tasks and events expose optional `rpcLane` summaries (`globals.tags.rpcLane`).
|
|
20
|
+
- **Isolation Wildcard Explorer**: Wildcard isolation rules can be clicked to inspect all matching resources in a searchable modal list.
|
|
21
|
+
- **Tag Handlers**: Tag views separate direct tag usages from handler elements that depend on the tag id.
|
|
17
22
|
- **Task Interceptor Introspection**: Tasks expose `interceptorCount` and `hasInterceptors` for runtime `task.intercept(...)` registrations.
|
|
23
|
+
- **Schema Export Compatibility**: Schema fields prefer `toJSONSchema()` exporters (including matcher-normalized schemas), with `zod` conversion as compatibility fallback.
|
|
24
|
+
|
|
25
|
+
## Runner 6.0 Migration Notes
|
|
26
|
+
|
|
27
|
+
| Before | After (hard switch) |
|
|
28
|
+
| --------------------- | --------------------------------------------------------- |
|
|
29
|
+
| `Resource.exports` | `Resource.isolation { deny, only, exports, exportsMode }` |
|
|
30
|
+
| `Middleware.global` | `Middleware.autoApply { enabled, scope, hasPredicate }` |
|
|
31
|
+
| `Tag.middlewares` | `Tag.taskMiddlewares` + `Tag.resourceMiddlewares` |
|
|
32
|
+
| N/A | `Tag.errors`, `Tag.targets` |
|
|
33
|
+
| `RunOptions.initMode` | `RunOptions.lifecycleMode` (+ disposal budgets) |
|
|
34
|
+
| `Resource.tunnelInfo` | Removed (hard switch to Event Lane + RPC Lane surfaces) |
|
|
18
35
|
|
|
19
36
|
## Available GraphQL Queries
|
|
20
37
|
|
|
@@ -44,7 +61,7 @@ query SystemOverview {
|
|
|
44
61
|
shutdownHooks
|
|
45
62
|
dryRun
|
|
46
63
|
lazy
|
|
47
|
-
|
|
64
|
+
lifecycleMode
|
|
48
65
|
runtimeEventCycleDetection
|
|
49
66
|
hasOnUnhandledError
|
|
50
67
|
rootId
|
|
@@ -71,7 +88,12 @@ query Architecture {
|
|
|
71
88
|
resources {
|
|
72
89
|
id
|
|
73
90
|
isPrivate
|
|
74
|
-
|
|
91
|
+
isolation {
|
|
92
|
+
deny
|
|
93
|
+
only
|
|
94
|
+
exports
|
|
95
|
+
exportsMode
|
|
96
|
+
}
|
|
75
97
|
meta {
|
|
76
98
|
title
|
|
77
99
|
description
|
package/README.md
CHANGED
|
@@ -11,7 +11,7 @@ Runner Dev Tools provide introspection, live telemetry, and a GraphQL API to exp
|
|
|
11
11
|
|
|
12
12
|
The way it works, is that this is a resource that opens a graphql server which opens your application to introspection.
|
|
13
13
|
|
|
14
|
-
If
|
|
14
|
+
If your runner primitives expose `toJSONSchema()` (for example matcher-based normalized schemas), runner-dev uses that as first-class schema export. `zod` schemas are also supported and converted to JSON Schema.
|
|
15
15
|
|
|
16
16
|
## Install
|
|
17
17
|
|
|
@@ -22,41 +22,62 @@ npx @bluelibs/runner-dev
|
|
|
22
22
|
```
|
|
23
23
|
|
|
24
24
|
```ts
|
|
25
|
+
import { r } from "@bluelibs/runner";
|
|
25
26
|
import { dev } from "@bluelibs/runner-dev";
|
|
26
27
|
|
|
27
|
-
const app =
|
|
28
|
-
|
|
28
|
+
const app = r
|
|
29
|
+
.resource("app")
|
|
30
|
+
.register([
|
|
29
31
|
// your resources,
|
|
30
32
|
dev, // if you are fine with defaults or
|
|
31
33
|
dev.with({
|
|
32
34
|
port: 1337, // default,
|
|
33
35
|
maxEntries: 10000, // how many logs to keep in the store.
|
|
34
36
|
}),
|
|
35
|
-
]
|
|
36
|
-
|
|
37
|
+
])
|
|
38
|
+
.build();
|
|
37
39
|
```
|
|
38
40
|
|
|
39
41
|
## What you get
|
|
40
42
|
|
|
41
43
|
- Fully-featured UI with AI assistance to explore your app, call tasks, emit events, diagnostics, logs and more.
|
|
42
44
|
- Overview tables across UI sections now include sortable and searchable columns (`ID`, `Title`, `Description`, `Used By`) with per-element usage counters.
|
|
43
|
-
- Overview tables now include `Visibility` (`Public`/`Private`) derived from Runner resource `
|
|
45
|
+
- Overview tables now include `Visibility` (`Public`/`Private`) derived from Runner resource `isolate()` boundaries.
|
|
44
46
|
- Introspector: programmatic API to inspect tasks, hooks, resources, events, middleware, and diagnostics (including file paths, contents)
|
|
45
47
|
- Task introspection includes runtime `interceptorCount` / `hasInterceptors` (registered via `taskDependency.intercept(...)` in resource init).
|
|
46
|
-
- Resource introspection includes `
|
|
48
|
+
- Resource introspection includes `isolation` (`deny`, `only`, `exports`, `exportsMode`) from `.isolate(...)`.
|
|
49
|
+
- Resource introspection includes `subtree` governance summaries (middleware attachment counts and validator counts per branch).
|
|
50
|
+
- Resource introspection indicates whether a resource exposes a `cooldown()` hook for shutdown lifecycle.
|
|
51
|
+
- Isolation wildcard rules are clickable in the docs UI and open a modal showing matched resources with inline filtering when lists are large.
|
|
52
|
+
- Event introspection includes `transactional`, `parallel`, optional `eventLane { laneId, orderingKey, metadata }`, and optional `rpcLane { laneId }`.
|
|
53
|
+
- Task introspection includes optional `rpcLane { laneId }`.
|
|
54
|
+
- Tag pages distinguish between directly tagged elements and tag handlers (elements that depend on the tag id).
|
|
47
55
|
- Live: in-memory logs and event emissions
|
|
48
56
|
- Live File Previews and Saving.
|
|
49
57
|
- GraphQL server: deep graph navigation over your app’s topology and live data
|
|
50
58
|
- CLI with scaffolding, query-ing capabilities on a live endpoint or via dry-run mode.
|
|
51
59
|
- MCP server: allow your AI to do introspection for you.
|
|
52
60
|
|
|
61
|
+
## Runner 6.0 Migration Notes
|
|
62
|
+
|
|
63
|
+
| Before | After (hard switch) |
|
|
64
|
+
| --------------------- | -------------------------------------------------------------------------------------------- |
|
|
65
|
+
| `Resource.exports` | `Resource.isolation { deny, only, exports, exportsMode }` |
|
|
66
|
+
| `Middleware.global` | `Middleware.autoApply { enabled, scope, hasPredicate }` |
|
|
67
|
+
| `Tag.middlewares` | `Tag.taskMiddlewares` + `Tag.resourceMiddlewares` |
|
|
68
|
+
| N/A | `Tag.errors`, `Tag.targets` |
|
|
69
|
+
| `RunOptions.initMode` | `RunOptions.lifecycleMode` + `dispose.{ totalBudgetMs, drainingBudgetMs, cooldownWindowMs }` |
|
|
70
|
+
| N/A | `Resource.subtree`, `Resource.cooldown` |
|
|
71
|
+
| N/A | `Event.transactional`, `Event.parallel`, `Event.eventLane`, `Event.rpcLane`, `Task.rpcLane` |
|
|
72
|
+
| `Resource.tunnelInfo` | Removed (hard switch to lane surfaces) |
|
|
73
|
+
|
|
53
74
|
## Table of Contents
|
|
54
75
|
|
|
55
76
|
- [Quickstart Guide](#quickstart)
|
|
56
77
|
- [Model Context Protocol (MCP) Server](#cli-usage-mcp-server)
|
|
57
78
|
- [CLI Tooling & Scaffolding](#cli-usage-direct)
|
|
58
79
|
- [Live Telemetry & Correlation](#live-telemetry)
|
|
59
|
-
- [Hot-Swapping Debugging System](
|
|
80
|
+
- [Hot-Swapping Debugging System](#hot-swapping-debugging-system)
|
|
60
81
|
- [GraphQL API Examples](#example-queries)
|
|
61
82
|
- [API Reference](API_REFERENCE.md)
|
|
62
83
|
- [Contributing & Local Dev](CONTRIBUTING.md)
|
|
@@ -66,27 +87,27 @@ const app = resource({
|
|
|
66
87
|
Register the Dev resources in your Runner root:
|
|
67
88
|
|
|
68
89
|
```ts
|
|
69
|
-
import {
|
|
90
|
+
import { r } from "@bluelibs/runner";
|
|
70
91
|
import { dev } from "@bluelibs/runner-dev";
|
|
71
92
|
|
|
72
|
-
export const app =
|
|
73
|
-
|
|
74
|
-
register
|
|
93
|
+
export const app = r
|
|
94
|
+
.resource("app")
|
|
95
|
+
.register([
|
|
75
96
|
// You can omit .with() if you are fine with defaults.
|
|
76
97
|
dev.with({
|
|
77
98
|
port: 1337, // default
|
|
78
99
|
maxEntries: 1000, // default
|
|
79
100
|
}),
|
|
80
101
|
// rest of your app.
|
|
81
|
-
]
|
|
82
|
-
|
|
102
|
+
])
|
|
103
|
+
.build();
|
|
83
104
|
```
|
|
84
105
|
|
|
85
106
|
### Accessing the UI
|
|
86
107
|
|
|
87
108
|
Once your application is running with the `dev` resource, you can access the visual DevTools UI:
|
|
88
109
|
|
|
89
|
-
|
|
110
|
+
Open [http://localhost:1337](http://localhost:1337) in your browser.
|
|
90
111
|
|
|
91
112
|
Inside the UI, you can:
|
|
92
113
|
|
|
@@ -205,15 +226,15 @@ runner-dev new resource-middleware soft-delete --ns app --dir src --export
|
|
|
205
226
|
|
|
206
227
|
Flags for artifact scaffolding:
|
|
207
228
|
|
|
208
|
-
- `--ns` / `--namespace`: namespace used
|
|
209
|
-
- `--id <id>`: explicit id override (for example: `
|
|
229
|
+
- `--ns` / `--namespace`: namespace used for folders only, mapped to `<dir>/<ns>/<type>` (default: `app`)
|
|
230
|
+
- `--id <id>`: explicit local id override (for example: `save-user`)
|
|
210
231
|
- `--dir <dir>`: base directory under which files are created (default: `src`)
|
|
211
232
|
- `--export`: append a re-export to an `index.ts` in the target folder for better auto-import UX
|
|
212
233
|
- `--dry` / `--dry-run`: print the generated file without writing it
|
|
213
234
|
|
|
214
235
|
Conventions:
|
|
215
236
|
|
|
216
|
-
- Generated ids
|
|
237
|
+
- Generated ids are local ids only and default to the kebab-cased artifact name
|
|
217
238
|
- Folders:
|
|
218
239
|
- resources: `src/resources`
|
|
219
240
|
- tasks: `src/tasks`
|
|
@@ -635,42 +656,40 @@ All Dev UI modals (code viewer, execute, trace view, log details, stats overlay)
|
|
|
635
656
|
- Define an event:
|
|
636
657
|
|
|
637
658
|
```ts
|
|
638
|
-
import {
|
|
659
|
+
import { r } from "@bluelibs/runner";
|
|
639
660
|
|
|
640
|
-
export const userCreated = event<{ id: string; name: string }>(
|
|
641
|
-
id: "evt.user.created",
|
|
642
|
-
});
|
|
661
|
+
export const userCreated = r.event<{ id: string; name: string }>("userCreated").build();
|
|
643
662
|
```
|
|
644
663
|
|
|
645
664
|
- Use it in a task:
|
|
646
665
|
|
|
647
666
|
```ts
|
|
648
|
-
import {
|
|
667
|
+
import { r } from "@bluelibs/runner";
|
|
649
668
|
import { userCreated } from "./events";
|
|
650
669
|
|
|
651
|
-
export const createUser =
|
|
652
|
-
|
|
653
|
-
dependencies
|
|
654
|
-
async
|
|
670
|
+
export const createUser = r
|
|
671
|
+
.task<{ name: string }>("createUser")
|
|
672
|
+
.dependencies({ userCreated })
|
|
673
|
+
.run(async (input, { userCreated }) => {
|
|
655
674
|
const id = crypto.randomUUID();
|
|
656
675
|
await userCreated({ id, name: input.name });
|
|
657
676
|
return { id };
|
|
658
|
-
}
|
|
659
|
-
|
|
677
|
+
})
|
|
678
|
+
.build();
|
|
660
679
|
```
|
|
661
680
|
|
|
662
681
|
- Emit logs:
|
|
663
682
|
|
|
664
683
|
```ts
|
|
665
|
-
import { globals,
|
|
684
|
+
import { globals, r } from "@bluelibs/runner";
|
|
666
685
|
|
|
667
|
-
export const logSomething =
|
|
668
|
-
|
|
669
|
-
dependencies
|
|
670
|
-
async
|
|
686
|
+
export const logSomething = r
|
|
687
|
+
.task("logSomething")
|
|
688
|
+
.dependencies({ logger: globals.resources.logger })
|
|
689
|
+
.run(async (_i, { logger }) => {
|
|
671
690
|
logger.info("Hello world!");
|
|
672
|
-
}
|
|
673
|
-
|
|
691
|
+
})
|
|
692
|
+
.build();
|
|
674
693
|
```
|
|
675
694
|
|
|
676
695
|
## Notes on Overrides
|
|
@@ -687,7 +706,7 @@ export const logSomething = task({
|
|
|
687
706
|
|
|
688
707
|
For full details on development, testing, and codegen, see [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
689
708
|
|
|
690
|
-
##
|
|
709
|
+
## Hot-Swapping Debugging System
|
|
691
710
|
|
|
692
711
|
**Revolutionary live debugging feature that allows AI assistants and developers to dynamically replace task run functions in live applications.**
|
|
693
712
|
|
|
@@ -707,12 +726,12 @@ The hot-swapping system enables:
|
|
|
707
726
|
Add the swap manager to your app:
|
|
708
727
|
|
|
709
728
|
```ts
|
|
710
|
-
import {
|
|
729
|
+
import { r } from "@bluelibs/runner";
|
|
711
730
|
import { resources as dev } from "@bluelibs/runner-dev";
|
|
712
731
|
|
|
713
|
-
export const app =
|
|
714
|
-
|
|
715
|
-
register
|
|
732
|
+
export const app = r
|
|
733
|
+
.resource("app")
|
|
734
|
+
.register([
|
|
716
735
|
// Core dev resources
|
|
717
736
|
dev.live,
|
|
718
737
|
dev.introspector,
|
|
@@ -722,8 +741,8 @@ export const app = resource({
|
|
|
722
741
|
|
|
723
742
|
// GraphQL server with swap mutations
|
|
724
743
|
dev.server.with({ port: 1337 }),
|
|
725
|
-
]
|
|
726
|
-
|
|
744
|
+
])
|
|
745
|
+
.build();
|
|
727
746
|
```
|
|
728
747
|
|
|
729
748
|
### GraphQL API
|
|
@@ -809,7 +828,7 @@ mutation {
|
|
|
809
828
|
await deps.emitLog({
|
|
810
829
|
timestamp: new Date(),
|
|
811
830
|
level: "info",
|
|
812
|
-
message: "
|
|
831
|
+
message: "DEBUG: Creating user started",
|
|
813
832
|
data: { input }
|
|
814
833
|
});
|
|
815
834
|
}
|
|
@@ -834,7 +853,7 @@ mutation {
|
|
|
834
853
|
await deps.emitLog({
|
|
835
854
|
timestamp: new Date(),
|
|
836
855
|
level: "info",
|
|
837
|
-
message: "
|
|
856
|
+
message: "DEBUG: User created successfully",
|
|
838
857
|
data: { result }
|
|
839
858
|
});
|
|
840
859
|
}
|
|
@@ -915,7 +934,7 @@ Swapped functions can emit logs that are captured by the live telemetry system:
|
|
|
915
934
|
# After swapping with debug logging, query the logs
|
|
916
935
|
query RecentDebugLogs {
|
|
917
936
|
live {
|
|
918
|
-
logs(last: 50, filter: { messageIncludes: "
|
|
937
|
+
logs(last: 50, filter: { messageIncludes: "DEBUG" }) {
|
|
919
938
|
timestampMs
|
|
920
939
|
level
|
|
921
940
|
message
|
|
@@ -1139,7 +1158,7 @@ The system automatically handles complex JavaScript types:
|
|
|
1139
1158
|
|
|
1140
1159
|
For advanced debugging, the system provides an `eval` mutation to execute arbitrary JavaScript/TypeScript code on the server.
|
|
1141
1160
|
|
|
1142
|
-
|
|
1161
|
+
**Security Warning**: This feature is powerful and executes code with the same privileges as the application. It is intended for development environments only and is disabled by default in production. To enable it, set the environment variable `RUNNER_DEV_EVAL=1`.
|
|
1143
1162
|
|
|
1144
1163
|
#### `eval` Mutation
|
|
1145
1164
|
|
|
@@ -1182,13 +1201,129 @@ mutation {
|
|
|
1182
1201
|
|
|
1183
1202
|
### Architecture
|
|
1184
1203
|
|
|
1185
|
-
The hot-swapping system
|
|
1204
|
+
The hot-swapping system is organized into five high-level capabilities:
|
|
1205
|
+
|
|
1206
|
+
- **Execution Control**: swaps task `run` implementations at runtime and supports rollback.
|
|
1207
|
+
- **Validation Pipeline**: parses and compiles submitted code before activation.
|
|
1208
|
+
- **API Surface**: exposes swap and restore operations through GraphQL mutations.
|
|
1209
|
+
- **Observability**: integrates with live telemetry so swapped behavior can be inspected immediately.
|
|
1210
|
+
- **Safety Controls**: isolates failures to the attempted swap and preserves previous task behavior when validation fails.
|
|
1211
|
+
|
|
1212
|
+
The implementation remains fully type-safe and is covered by both unit and GraphQL integration tests.
|
|
1213
|
+
|
|
1214
|
+
---
|
|
1215
|
+
|
|
1216
|
+
## System Architecture
|
|
1217
|
+
|
|
1218
|
+
### Overview
|
|
1219
|
+
|
|
1220
|
+
Runner-Dev is built as a modular system of resources that integrate with the @bluelibs/runner framework to provide comprehensive development tools. The architecture follows a resource-based composition pattern where each component is a self-contained resource that can be registered and configured independently.
|
|
1221
|
+
|
|
1222
|
+
### Core Components
|
|
1223
|
+
|
|
1224
|
+
```mermaid
|
|
1225
|
+
graph TB
|
|
1226
|
+
subgraph "Core Framework (@bluelibs/runner)"
|
|
1227
|
+
App[Application Root]
|
|
1228
|
+
Resource[Resources]
|
|
1229
|
+
Task[Tasks]
|
|
1230
|
+
Event[Events]
|
|
1231
|
+
Middleware[Middleware]
|
|
1232
|
+
Hook[Hooks]
|
|
1233
|
+
Tag[Tags]
|
|
1234
|
+
end
|
|
1235
|
+
|
|
1236
|
+
subgraph "DevTools Layer (@bluelibs/runner-dev)"
|
|
1237
|
+
Dev[dev Resource]
|
|
1238
|
+
Introspector[Introspector]
|
|
1239
|
+
Live[Live Telemetry]
|
|
1240
|
+
Swap[Swap Manager]
|
|
1241
|
+
GraphQL[GraphQL Server]
|
|
1242
|
+
MCP[MCP Server]
|
|
1243
|
+
end
|
|
1244
|
+
|
|
1245
|
+
subgraph "Interfaces"
|
|
1246
|
+
UI[React UI]
|
|
1247
|
+
CLI[CLI Tools]
|
|
1248
|
+
AI[AI Assistants]
|
|
1249
|
+
end
|
|
1250
|
+
|
|
1251
|
+
App --> Dev
|
|
1252
|
+
Dev --> Introspector
|
|
1253
|
+
Dev --> Live
|
|
1254
|
+
Dev --> Swap
|
|
1255
|
+
Dev --> GraphQL
|
|
1256
|
+
GraphQL --> MCP
|
|
1257
|
+
|
|
1258
|
+
Introspector --> Resource
|
|
1259
|
+
Introspector --> Task
|
|
1260
|
+
Introspector --> Event
|
|
1261
|
+
Introspector --> Middleware
|
|
1262
|
+
Introspector --> Hook
|
|
1263
|
+
Introspector --> Tag
|
|
1264
|
+
|
|
1265
|
+
GraphQL --> UI
|
|
1266
|
+
GraphQL --> CLI
|
|
1267
|
+
MCP --> AI
|
|
1268
|
+
```
|
|
1269
|
+
|
|
1270
|
+
### Component Responsibilities (High-Level)
|
|
1271
|
+
|
|
1272
|
+
| Layer | Responsibility |
|
|
1273
|
+
| --------------------------- | -------------------------------------------------------------------------------- |
|
|
1274
|
+
| **Composition Layer** | Registers and wires DevTools capabilities into the Runner application lifecycle. |
|
|
1275
|
+
| **Introspection Layer** | Builds a runtime model of tasks, resources, events, middleware, hooks, and tags. |
|
|
1276
|
+
| **Observability Layer** | Captures logs, emissions, errors, runs, and health metrics for analysis. |
|
|
1277
|
+
| **Execution Control Layer** | Supports remote task invocation and controlled hot-swapping workflows. |
|
|
1278
|
+
| **Access Layer** | Exposes a GraphQL API and transports for UI, CLI, and MCP clients. |
|
|
1279
|
+
|
|
1280
|
+
### Data Flow
|
|
1281
|
+
|
|
1282
|
+
```mermaid
|
|
1283
|
+
sequenceDiagram
|
|
1284
|
+
participant App as Runner App
|
|
1285
|
+
participant Dev as dev Resource
|
|
1286
|
+
participant Intro as Introspector
|
|
1287
|
+
participant GQL as GraphQL Server
|
|
1288
|
+
participant UI as React UI
|
|
1289
|
+
|
|
1290
|
+
App->>Dev: register dev.with({port: 1337})
|
|
1291
|
+
Dev->>Intro: walk application graph
|
|
1292
|
+
Intro-->>Dev: serialized topology
|
|
1293
|
+
Dev->>GQL: start server on port 1337
|
|
1294
|
+
|
|
1295
|
+
UI->>GQL: query { tasks { id dependsOn } }
|
|
1296
|
+
GQL-->>UI: introspected data
|
|
1297
|
+
|
|
1298
|
+
UI->>GQL: mutation invokeTask(...)
|
|
1299
|
+
GQL->>App: execute task
|
|
1300
|
+
App-->>GQL: result
|
|
1301
|
+
GQL-->>UI: response
|
|
1302
|
+
```
|
|
1303
|
+
|
|
1304
|
+
### Key Architectural Patterns
|
|
1305
|
+
|
|
1306
|
+
1. **Resource-Based Composition**: Everything in Runner is a resource that can be registered and composed. The dev tools themselves are resources.
|
|
1307
|
+
|
|
1308
|
+
2. **Introspection System**: The Introspector walks the application graph at runtime, extracting metadata about:
|
|
1309
|
+
|
|
1310
|
+
- Tasks (dependencies, emissions, interceptors)
|
|
1311
|
+
- Resources (isolation rules, subtree governance, cooldown hooks)
|
|
1312
|
+
- Events (listeners, transactional/parallel modes, lanes)
|
|
1313
|
+
- Middleware (auto-apply scopes, tags)
|
|
1314
|
+
- Tags (cross-cutting concerns with handlers)
|
|
1315
|
+
|
|
1316
|
+
3. **Live Telemetry**: In-memory store for recent activity with SSE streaming via `/live/stream`
|
|
1317
|
+
|
|
1318
|
+
4. **Hot-Swapping**: Modify task implementations without restart via `swapTask` mutation
|
|
1319
|
+
|
|
1320
|
+
5. **GraphQL API**: Full schema at `src/schema/` with queries for architecture and mutations for invocation/swapping
|
|
1321
|
+
|
|
1322
|
+
6. **MCP Integration**: AI assistants can connect via Model Context Protocol to introspect and interact with running apps
|
|
1186
1323
|
|
|
1187
|
-
|
|
1188
|
-
- **GraphQL Types** (`src/schema/types/SwapType.ts`): Type definitions for GraphQL API
|
|
1189
|
-
- **GraphQL Mutations** (`src/schema/mutation.ts`): Remote swap operations
|
|
1190
|
-
- **TypeScript Compiler**: Automatic code compilation and validation
|
|
1191
|
-
- **State Management**: Tracking of swapped functions and original code
|
|
1192
|
-
- **Error Handling**: Comprehensive validation and recovery mechanisms
|
|
1324
|
+
### Entry Points
|
|
1193
1325
|
|
|
1194
|
-
|
|
1326
|
+
- **Main export**: `src/index.ts` - exports `dev` resource and types
|
|
1327
|
+
- **CLI entry**: `src/cli.ts` - command-line interface
|
|
1328
|
+
- **MCP entry**: `src/mcp.ts` - Model Context Protocol server
|
|
1329
|
+
- **UI entry**: `src/ui/index.html` - React documentation UI
|
|
@@ -14,20 +14,8 @@ async function scaffoldArtifact({ kind, name, namespace, baseDir, dryRun = false
|
|
|
14
14
|
const kebab = (0, common_1.toKebabCase)(name);
|
|
15
15
|
const camel = (0, common_1.toCamelCase)(name);
|
|
16
16
|
const pascal = (0, common_1.toPascalCase)(name);
|
|
17
|
-
const id = explicitId ||
|
|
18
|
-
|
|
19
|
-
? "resources"
|
|
20
|
-
: kind === "task"
|
|
21
|
-
? "tasks"
|
|
22
|
-
: kind === "event"
|
|
23
|
-
? "events"
|
|
24
|
-
: kind === "hook"
|
|
25
|
-
? "hooks"
|
|
26
|
-
: kind === "tag"
|
|
27
|
-
? "tags"
|
|
28
|
-
: kind === "task-middleware" || kind === "resource-middleware"
|
|
29
|
-
? "middleware"
|
|
30
|
-
: kind}.${kebab}`;
|
|
17
|
+
const id = explicitId || kebab;
|
|
18
|
+
(0, common_1.validateLocalId)(id);
|
|
31
19
|
// Build directory as: <baseDir>/<namespace segments>/<type-collection>
|
|
32
20
|
const nsSegments = namespace
|
|
33
21
|
.split(".")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifact.js","sourceRoot":"","sources":["../../../src/cli/generators/artifact.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"artifact.js","sourceRoot":"","sources":["../../../src/cli/generators/artifact.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,3 +2,4 @@ export type ArtifactKind = "project" | "resource" | "task" | "event" | "hook" |
|
|
|
2
2
|
export declare function toKebabCase(input: string): string;
|
|
3
3
|
export declare function toCamelCase(input: string): string;
|
|
4
4
|
export declare function toPascalCase(input: string): string;
|
|
5
|
+
export declare function validateLocalId(id: string): void;
|
|
@@ -3,6 +3,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.toKebabCase = toKebabCase;
|
|
4
4
|
exports.toCamelCase = toCamelCase;
|
|
5
5
|
exports.toPascalCase = toPascalCase;
|
|
6
|
+
exports.validateLocalId = validateLocalId;
|
|
7
|
+
const RESERVED_LOCAL_IDS = new Set([
|
|
8
|
+
"tasks",
|
|
9
|
+
"resources",
|
|
10
|
+
"events",
|
|
11
|
+
"hooks",
|
|
12
|
+
"tags",
|
|
13
|
+
"errors",
|
|
14
|
+
"asyncContexts",
|
|
15
|
+
]);
|
|
6
16
|
function toKebabCase(input) {
|
|
7
17
|
return input
|
|
8
18
|
.replace(/([a-z])([A-Z])/g, "$1-$2")
|
|
@@ -21,4 +31,16 @@ function toPascalCase(input) {
|
|
|
21
31
|
const s = toCamelCase(input);
|
|
22
32
|
return s.charAt(0).toUpperCase() + s.slice(1);
|
|
23
33
|
}
|
|
34
|
+
function validateLocalId(id) {
|
|
35
|
+
const trimmedId = id.trim();
|
|
36
|
+
if (!trimmedId) {
|
|
37
|
+
throw new Error("Definition id cannot be empty.");
|
|
38
|
+
}
|
|
39
|
+
if (trimmedId.includes(".")) {
|
|
40
|
+
throw new Error(`Definition id "${trimmedId}" is invalid. Use a local id without dots, for example "create-user".`);
|
|
41
|
+
}
|
|
42
|
+
if (RESERVED_LOCAL_IDS.has(trimmedId)) {
|
|
43
|
+
throw new Error(`Definition id "${trimmedId}" is reserved. Choose a different local id.`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
24
46
|
//# sourceMappingURL=common.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/cli/generators/common.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/cli/generators/common.ts"],"names":[],"mappings":";;AAoBA,kCAMC;AAED,kCAMC;AAED,oCAGC;AAED,0CAkBC;AAjDD,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC;IACjC,OAAO;IACP,WAAW;IACX,QAAQ;IACR,OAAO;IACP,MAAM;IACN,QAAQ;IACR,eAAe;CAChB,CAAC,CAAC;AAEH,SAAgB,WAAW,CAAC,KAAa;IACvC,OAAO,KAAK;SACT,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC;SACnC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC;SAC9B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,WAAW,EAAE,CAAC;AACnB,CAAC;AAED,SAAgB,WAAW,CAAC,KAAa;IACvC,MAAM,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC;SACzB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;SACrE,IAAI,CAAC,EAAE,CAAC,CAAC;IACZ,OAAO,CAAC,IAAI,MAAM,CAAC;AACrB,CAAC;AAED,SAAgB,YAAY,CAAC,KAAa;IACxC,MAAM,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAC7B,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,SAAgB,eAAe,CAAC,EAAU;IACxC,MAAM,SAAS,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;IAE5B,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IAED,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CACb,kBAAkB,SAAS,uEAAuE,CACnG,CAAC;IACJ,CAAC;IAED,IAAI,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CACb,kBAAkB,SAAS,6CAA6C,CACzE,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -37,9 +37,9 @@ function printNewHelp() {
|
|
|
37
37
|
[format_1.c.yellow("--run-tests"), "Run 'npm test' after project scaffold"],
|
|
38
38
|
[
|
|
39
39
|
format_1.c.yellow("--ns=<namespace>"),
|
|
40
|
-
"Namespace for
|
|
40
|
+
"Namespace for folders (default: app). Maps to <dir>/<ns>/<type>.",
|
|
41
41
|
],
|
|
42
|
-
[format_1.c.yellow("--id=<id>"), "Explicit id override (ex:
|
|
42
|
+
[format_1.c.yellow("--id=<id>"), "Explicit local id override (ex: save-user)"],
|
|
43
43
|
[format_1.c.yellow("--dir=<dir>"), "Base directory (default: src)"],
|
|
44
44
|
[format_1.c.yellow("--export"), "Append export to <dir>/.../index.ts"],
|
|
45
45
|
[format_1.c.yellow("--dry"), "Print file to stdout, do not write"],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"printNewHelp.js","sourceRoot":"","sources":["../../../src/cli/generators/printNewHelp.ts"],"names":[],"mappings":";;AAIA,oCAqFC;AAzFD,sCAA+D;AAE/D,6CAA6C;AAC7C,yDAAyD;AACzD,SAAgB,YAAY;IAC1B,OAAO,CAAC,GAAG,CACT;QACE,EAAE;QACF,UAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC;QACzB,IAAA,gBAAO,GAAE;QACT,IAAA,kBAAS,EACP;YACE,CAAC,UAAC,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAAE,gBAAgB,CAAC;YAChD,CAAC,UAAC,CAAC,GAAG,CAAC,+BAA+B,CAAC,EAAE,wBAAwB,CAAC;YAClE,CAAC,UAAC,CAAC,GAAG,CAAC,gCAAgC,CAAC,EAAE,mBAAmB,CAAC;YAC9D,CAAC,UAAC,CAAC,GAAG,CAAC,4BAA4B,CAAC,EAAE,eAAe,CAAC;YACtD,CAAC,UAAC,CAAC,GAAG,CAAC,6BAA6B,CAAC,EAAE,gBAAgB,CAAC;YACxD,CAAC,UAAC,CAAC,GAAG,CAAC,4BAA4B,CAAC,EAAE,eAAe,CAAC;YACtD,CAAC,UAAC,CAAC,GAAG,CAAC,2BAA2B,CAAC,EAAE,cAAc,CAAC;YACpD;gBACE,UAAC,CAAC,GAAG,CAAC,sCAAsC,CAAC;gBAC7C,0BAA0B;aAC3B;YACD;gBACE,UAAC,CAAC,GAAG,CAAC,0CAA0C,CAAC;gBACjD,8BAA8B;aAC/B;SACF,EACD,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CACtB;QACD,EAAE;QACF,UAAC,CAAC,IAAI,CAAC,OAAO,CAAC;QACf,IAAA,kBAAS,EACP;YACE;gBACE,UAAC,CAAC,MAAM,CAAC,WAAW,CAAC;gBACrB,6CAA6C;aAC9C;YACD,CAAC,UAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,0CAA0C,CAAC;YAC/D,CAAC,UAAC,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,uCAAuC,CAAC;YAClE;gBACE,UAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC;gBAC5B,
|
|
1
|
+
{"version":3,"file":"printNewHelp.js","sourceRoot":"","sources":["../../../src/cli/generators/printNewHelp.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,10 +12,10 @@ export declare function packageJson(projectName: string): {
|
|
|
12
12
|
readonly "schema:sdl": "runner-dev schema sdl";
|
|
13
13
|
};
|
|
14
14
|
readonly dependencies: {
|
|
15
|
-
readonly "@bluelibs/runner": "^
|
|
15
|
+
readonly "@bluelibs/runner": "^6.0.0";
|
|
16
16
|
};
|
|
17
17
|
readonly devDependencies: {
|
|
18
|
-
readonly "@bluelibs/runner-dev": "^
|
|
18
|
+
readonly "@bluelibs/runner-dev": "^6.0.0";
|
|
19
19
|
readonly typescript: "^5.6.3";
|
|
20
20
|
readonly tsx: "^4.19.2";
|
|
21
21
|
readonly jest: "^29.7.0";
|
|
@@ -16,10 +16,10 @@ function packageJson(projectName) {
|
|
|
16
16
|
"schema:sdl": "runner-dev schema sdl",
|
|
17
17
|
},
|
|
18
18
|
dependencies: {
|
|
19
|
-
"@bluelibs/runner": "^
|
|
19
|
+
"@bluelibs/runner": "^6.0.0",
|
|
20
20
|
},
|
|
21
21
|
devDependencies: {
|
|
22
|
-
"@bluelibs/runner-dev": "^
|
|
22
|
+
"@bluelibs/runner-dev": "^6.0.0",
|
|
23
23
|
typescript: "^5.6.3",
|
|
24
24
|
tsx: "^4.19.2",
|
|
25
25
|
jest: "^29.7.0",
|
|
@@ -2,21 +2,19 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.mainTs = mainTs;
|
|
4
4
|
function mainTs(projectName) {
|
|
5
|
-
return `import {
|
|
5
|
+
return `import { r, run } from '@bluelibs/runner';
|
|
6
6
|
import { dev } from '@bluelibs/runner-dev';
|
|
7
7
|
|
|
8
8
|
// Minimal Runner app using runner-dev's dev resource
|
|
9
|
-
const app = resource({
|
|
10
|
-
|
|
11
|
-
register: [
|
|
9
|
+
const app = r.resource('${projectName}')
|
|
10
|
+
.register([
|
|
12
11
|
dev.with({ port: 1337 }),
|
|
13
|
-
]
|
|
14
|
-
|
|
12
|
+
])
|
|
13
|
+
.build();
|
|
15
14
|
|
|
16
15
|
run(app)
|
|
17
|
-
.then(() => {
|
|
18
|
-
|
|
19
|
-
console.log('Runner app started on http://localhost:1337');
|
|
16
|
+
.then(({ logger }) => {
|
|
17
|
+
logger.info('Runner app started on http://localhost:1337');
|
|
20
18
|
})
|
|
21
19
|
.catch((err) => {
|
|
22
20
|
// eslint-disable-next-line no-console
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.ts.js","sourceRoot":"","sources":["../../../../../../src/cli/generators/scaffold/templates/src/main.ts.ts"],"names":[],"mappings":";;AAAA,
|
|
1
|
+
{"version":3,"file":"main.ts.js","sourceRoot":"","sources":["../../../../../../src/cli/generators/scaffold/templates/src/main.ts.ts"],"names":[],"mappings":";;AAAA,wBAqBC;AArBD,SAAgB,MAAM,CAAC,WAAmB;IACxC,OAAO;;;;0BAIiB,WAAW;;;;;;;;;;;;;;;CAepC,CAAC;AACF,CAAC"}
|