dexto 1.5.8 → 1.6.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/README.md +3 -3
- package/dist/agents/agent-template.yml +2 -2
- package/dist/agents/coding-agent/README.md +10 -10
- package/dist/agents/coding-agent/coding-agent.yml +84 -83
- package/dist/agents/default-agent.yml +32 -47
- package/dist/agents/explore-agent/explore-agent.yml +3 -6
- package/dist/agents/image-editor-agent/image-editor-agent.yml +1 -1
- package/dist/agents/nano-banana-agent/nano-banana-agent.yml +1 -1
- package/dist/agents/podcast-agent/podcast-agent.yml +1 -1
- package/dist/agents/product-name-researcher/product-name-researcher.yml +1 -1
- package/dist/agents/sora-video-agent/sora-video-agent.yml +4 -6
- package/dist/agents/triage-demo/triage-agent.yml +1 -1
- package/dist/analytics/events.d.ts +1 -1
- package/dist/analytics/events.d.ts.map +1 -1
- package/dist/api/mcp/tool-aggregation-handler.d.ts +2 -2
- package/dist/api/server-hono.d.ts +2 -2
- package/dist/api/server-hono.d.ts.map +1 -1
- package/dist/api/server-hono.js +37 -60
- package/dist/cli/approval/cli-approval-handler.d.ts +10 -3
- package/dist/cli/approval/cli-approval-handler.d.ts.map +1 -1
- package/dist/cli/approval/cli-approval-handler.js +1 -1
- package/dist/cli/assets/sounds/SOURCES.md +35 -0
- package/dist/cli/assets/sounds/boot.wav +0 -0
- package/dist/cli/assets/sounds/chime.wav +0 -0
- package/dist/cli/assets/sounds/coin.wav +0 -0
- package/dist/cli/assets/sounds/confirm.wav +0 -0
- package/dist/cli/assets/sounds/levelup.wav +0 -0
- package/dist/cli/assets/sounds/ping.wav +0 -0
- package/dist/cli/assets/sounds/powerup.wav +0 -0
- package/dist/cli/assets/sounds/startup.wav +0 -0
- package/dist/cli/assets/sounds/success.wav +0 -0
- package/dist/cli/assets/sounds/treasure.wav +0 -0
- package/dist/cli/assets/sounds/win.wav +0 -0
- package/dist/cli/commands/create-app.d.ts +1 -11
- package/dist/cli/commands/create-app.d.ts.map +1 -1
- package/dist/cli/commands/create-app.js +21 -545
- package/dist/cli/commands/create-image.d.ts.map +1 -1
- package/dist/cli/commands/create-image.js +54 -53
- package/dist/cli/commands/image.d.ts +52 -0
- package/dist/cli/commands/image.d.ts.map +1 -0
- package/dist/cli/commands/image.js +118 -0
- package/dist/cli/commands/index.d.ts +2 -1
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/commands/index.js +3 -1
- package/dist/cli/commands/init-app.d.ts +4 -8
- package/dist/cli/commands/init-app.d.ts.map +1 -1
- package/dist/cli/commands/init-app.js +37 -161
- package/dist/cli/commands/interactive-commands/command-parser.d.ts +2 -0
- package/dist/cli/commands/interactive-commands/command-parser.d.ts.map +1 -1
- package/dist/cli/commands/interactive-commands/commands.d.ts +1 -1
- package/dist/cli/commands/interactive-commands/commands.d.ts.map +1 -1
- package/dist/cli/commands/interactive-commands/commands.js +2 -2
- package/dist/cli/commands/interactive-commands/exit-handler.d.ts +12 -0
- package/dist/cli/commands/interactive-commands/exit-handler.d.ts.map +1 -0
- package/dist/cli/commands/interactive-commands/exit-handler.js +20 -0
- package/dist/cli/commands/interactive-commands/exit-stats.d.ts +24 -0
- package/dist/cli/commands/interactive-commands/exit-stats.d.ts.map +1 -0
- package/dist/cli/commands/interactive-commands/exit-stats.js +17 -0
- package/dist/cli/commands/interactive-commands/general-commands.d.ts.map +1 -1
- package/dist/cli/commands/interactive-commands/general-commands.js +55 -5
- package/dist/cli/commands/interactive-commands/prompt-commands.d.ts.map +1 -1
- package/dist/cli/commands/interactive-commands/prompt-commands.js +14 -74
- package/dist/cli/commands/interactive-commands/session/index.d.ts +2 -1
- package/dist/cli/commands/interactive-commands/session/index.d.ts.map +1 -1
- package/dist/cli/commands/interactive-commands/session/index.js +2 -1
- package/dist/cli/commands/interactive-commands/session/session-commands.d.ts +2 -2
- package/dist/cli/commands/interactive-commands/session/session-commands.d.ts.map +1 -1
- package/dist/cli/commands/interactive-commands/session/session-commands.js +2 -4
- package/dist/cli/commands/interactive-commands/system/system-commands.d.ts +1 -13
- package/dist/cli/commands/interactive-commands/system/system-commands.d.ts.map +1 -1
- package/dist/cli/commands/interactive-commands/system/system-commands.js +52 -83
- package/dist/cli/commands/plugin.d.ts +4 -4
- package/dist/cli/commands/sync-agents.d.ts +2 -12
- package/dist/cli/commands/sync-agents.d.ts.map +1 -1
- package/dist/cli/commands/sync-agents.js +2 -50
- package/dist/cli/ink-cli/InkCLIRefactored.d.ts +7 -1
- package/dist/cli/ink-cli/InkCLIRefactored.d.ts.map +1 -1
- package/dist/cli/ink-cli/InkCLIRefactored.js +138 -27
- package/dist/cli/ink-cli/components/ApprovalPrompt.d.ts +2 -2
- package/dist/cli/ink-cli/components/ApprovalPrompt.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/ApprovalPrompt.js +85 -30
- package/dist/cli/ink-cli/components/BackgroundTasksPanel.js +1 -1
- package/dist/cli/ink-cli/components/ElicitationForm.d.ts +5 -3
- package/dist/cli/ink-cli/components/ElicitationForm.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/ElicitationForm.js +414 -180
- package/dist/cli/ink-cli/components/Footer.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/Footer.js +1 -2
- package/dist/cli/ink-cli/components/ResourceAutocomplete.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/ResourceAutocomplete.js +20 -11
- package/dist/cli/ink-cli/components/SlashCommandAutocomplete.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/SlashCommandAutocomplete.js +47 -67
- package/dist/cli/ink-cli/components/StatusBar.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/StatusBar.js +20 -10
- package/dist/cli/ink-cli/components/TodoPanel.js +1 -1
- package/dist/cli/ink-cli/components/base/BaseSelector.d.ts +2 -1
- package/dist/cli/ink-cli/components/base/BaseSelector.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/base/BaseSelector.js +37 -27
- package/dist/cli/ink-cli/components/chat/Header.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/chat/Header.js +1 -1
- package/dist/cli/ink-cli/components/chat/MessageItem.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/chat/MessageItem.js +3 -1
- package/dist/cli/ink-cli/components/chat/ToolIcon.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/chat/ToolIcon.js +5 -15
- package/dist/cli/ink-cli/components/chat/styled-boxes/ConfigBox.js +1 -1
- package/dist/cli/ink-cli/components/chat/styled-boxes/LogConfigBox.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/chat/styled-boxes/LogConfigBox.js +1 -1
- package/dist/cli/ink-cli/components/modes/AlternateBufferCLI.d.ts +3 -1
- package/dist/cli/ink-cli/components/modes/AlternateBufferCLI.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/modes/AlternateBufferCLI.js +5 -3
- package/dist/cli/ink-cli/components/modes/StaticCLI.d.ts +3 -1
- package/dist/cli/ink-cli/components/modes/StaticCLI.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/modes/StaticCLI.js +10 -3
- package/dist/cli/ink-cli/components/overlays/CommandOutputOverlay.d.ts +13 -0
- package/dist/cli/ink-cli/components/overlays/CommandOutputOverlay.d.ts.map +1 -0
- package/dist/cli/ink-cli/components/overlays/CommandOutputOverlay.js +60 -0
- package/dist/cli/ink-cli/components/overlays/LogLevelSelector.js +1 -1
- package/dist/cli/ink-cli/components/overlays/ModelSelectorRefactored.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/overlays/ModelSelectorRefactored.js +213 -100
- package/dist/cli/ink-cli/components/overlays/PromptList.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/overlays/PromptList.js +12 -16
- package/dist/cli/ink-cli/components/overlays/SoundsSelector.d.ts +21 -0
- package/dist/cli/ink-cli/components/overlays/SoundsSelector.d.ts.map +1 -0
- package/dist/cli/ink-cli/components/overlays/SoundsSelector.js +566 -0
- package/dist/cli/ink-cli/components/overlays/ToolBrowser.d.ts +1 -1
- package/dist/cli/ink-cli/components/overlays/ToolBrowser.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/overlays/ToolBrowser.js +100 -45
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/LocalModelWizard.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/LocalModelWizard.js +8 -13
- package/dist/cli/ink-cli/components/renderers/FilePreviewRenderer.d.ts +3 -3
- package/dist/cli/ink-cli/components/renderers/FilePreviewRenderer.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/renderers/FilePreviewRenderer.js +6 -5
- package/dist/cli/ink-cli/components/renderers/FileRenderer.d.ts +3 -1
- package/dist/cli/ink-cli/components/renderers/FileRenderer.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/renderers/FileRenderer.js +18 -7
- package/dist/cli/ink-cli/components/renderers/ShellRenderer.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/renderers/ShellRenderer.js +7 -17
- package/dist/cli/ink-cli/components/renderers/index.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/renderers/index.js +1 -1
- package/dist/cli/ink-cli/components/shared/FocusOverlayFrame.d.ts +7 -0
- package/dist/cli/ink-cli/components/shared/FocusOverlayFrame.d.ts.map +1 -0
- package/dist/cli/ink-cli/components/shared/FocusOverlayFrame.js +8 -0
- package/dist/cli/ink-cli/components/shared/HintBar.d.ts +6 -0
- package/dist/cli/ink-cli/components/shared/HintBar.d.ts.map +1 -0
- package/dist/cli/ink-cli/components/shared/HintBar.js +6 -0
- package/dist/cli/ink-cli/constants/spinnerFrames.d.ts +2 -0
- package/dist/cli/ink-cli/constants/spinnerFrames.d.ts.map +1 -0
- package/dist/cli/ink-cli/constants/spinnerFrames.js +1 -0
- package/dist/cli/ink-cli/constants/tips.d.ts.map +1 -1
- package/dist/cli/ink-cli/constants/tips.js +2 -1
- package/dist/cli/ink-cli/containers/InputContainer.d.ts +4 -0
- package/dist/cli/ink-cli/containers/InputContainer.d.ts.map +1 -1
- package/dist/cli/ink-cli/containers/InputContainer.js +47 -21
- package/dist/cli/ink-cli/containers/OverlayContainer.d.ts +2 -0
- package/dist/cli/ink-cli/containers/OverlayContainer.d.ts.map +1 -1
- package/dist/cli/ink-cli/containers/OverlayContainer.js +101 -40
- package/dist/cli/ink-cli/hooks/useAgentEvents.d.ts.map +1 -1
- package/dist/cli/ink-cli/hooks/useAgentEvents.js +15 -16
- package/dist/cli/ink-cli/hooks/useAnimationTick.d.ts +11 -0
- package/dist/cli/ink-cli/hooks/useAnimationTick.d.ts.map +1 -0
- package/dist/cli/ink-cli/hooks/useAnimationTick.js +54 -0
- package/dist/cli/ink-cli/hooks/useCLIState.d.ts.map +1 -1
- package/dist/cli/ink-cli/hooks/useCLIState.js +1 -0
- package/dist/cli/ink-cli/hooks/useTokenCounter.d.ts.map +1 -1
- package/dist/cli/ink-cli/hooks/useTokenCounter.js +7 -4
- package/dist/cli/ink-cli/services/CommandService.d.ts +1 -1
- package/dist/cli/ink-cli/services/CommandService.d.ts.map +1 -1
- package/dist/cli/ink-cli/services/CommandService.js +2 -2
- package/dist/cli/ink-cli/services/processStream.d.ts +2 -2
- package/dist/cli/ink-cli/services/processStream.d.ts.map +1 -1
- package/dist/cli/ink-cli/services/processStream.js +27 -19
- package/dist/cli/ink-cli/state/initialState.d.ts.map +1 -1
- package/dist/cli/ink-cli/state/initialState.js +1 -0
- package/dist/cli/ink-cli/state/types.d.ts +15 -3
- package/dist/cli/ink-cli/state/types.d.ts.map +1 -1
- package/dist/cli/ink-cli/utils/commandOverlays.d.ts.map +1 -1
- package/dist/cli/ink-cli/utils/commandOverlays.js +1 -0
- package/dist/cli/ink-cli/utils/elicitationSchema.d.ts +11 -0
- package/dist/cli/ink-cli/utils/elicitationSchema.d.ts.map +1 -0
- package/dist/cli/ink-cli/utils/elicitationSchema.js +80 -0
- package/dist/cli/ink-cli/utils/index.d.ts +1 -1
- package/dist/cli/ink-cli/utils/index.d.ts.map +1 -1
- package/dist/cli/ink-cli/utils/index.js +1 -1
- package/dist/cli/ink-cli/utils/messageFormatting.d.ts +10 -19
- package/dist/cli/ink-cli/utils/messageFormatting.d.ts.map +1 -1
- package/dist/cli/ink-cli/utils/messageFormatting.js +43 -262
- package/dist/cli/ink-cli/utils/overlayPresentation.d.ts +19 -0
- package/dist/cli/ink-cli/utils/overlayPresentation.d.ts.map +1 -0
- package/dist/cli/ink-cli/utils/overlayPresentation.js +33 -0
- package/dist/cli/ink-cli/utils/overlaySizing.d.ts +19 -0
- package/dist/cli/ink-cli/utils/overlaySizing.d.ts.map +1 -0
- package/dist/cli/ink-cli/utils/overlaySizing.js +11 -0
- package/dist/cli/ink-cli/utils/soundNotification.d.ts +19 -13
- package/dist/cli/ink-cli/utils/soundNotification.d.ts.map +1 -1
- package/dist/cli/ink-cli/utils/soundNotification.js +120 -97
- package/dist/cli/ink-cli/utils/toolUtils.d.ts.map +1 -1
- package/dist/cli/ink-cli/utils/toolUtils.js +2 -9
- package/dist/cli/utils/config-validation.d.ts +11 -11
- package/dist/cli/utils/config-validation.d.ts.map +1 -1
- package/dist/cli/utils/config-validation.js +56 -290
- package/dist/cli/utils/image-store.d.ts +16 -0
- package/dist/cli/utils/image-store.d.ts.map +1 -0
- package/dist/cli/utils/image-store.js +289 -0
- package/dist/cli/utils/scaffolding-utils.d.ts +5 -0
- package/dist/cli/utils/scaffolding-utils.d.ts.map +1 -1
- package/dist/cli/utils/scaffolding-utils.js +46 -4
- package/dist/cli/utils/template-engine.d.ts +28 -16
- package/dist/cli/utils/template-engine.d.ts.map +1 -1
- package/dist/cli/utils/template-engine.js +339 -479
- package/dist/config/cli-overrides.d.ts +4 -3
- package/dist/config/cli-overrides.d.ts.map +1 -1
- package/dist/config/cli-overrides.js +7 -9
- package/dist/index-main.d.ts +2 -0
- package/dist/index-main.d.ts.map +1 -0
- package/dist/index-main.js +1554 -0
- package/dist/index.js +2 -1589
- package/dist/utils/session-logger-factory.d.ts +3 -0
- package/dist/utils/session-logger-factory.d.ts.map +1 -0
- package/dist/utils/session-logger-factory.js +34 -0
- package/dist/webui/assets/{index-Cz2z7NQ8.js → index-CKhumsZA.js} +231 -231
- package/dist/webui/index.html +1 -1
- package/package.json +11 -8
- package/dist/cli/cli-subscriber.d.ts +0 -45
- package/dist/cli/cli-subscriber.d.ts.map +0 -1
- package/dist/cli/cli-subscriber.js +0 -204
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
3
|
+
import { promises as fs } from 'node:fs';
|
|
4
|
+
import { pathToFileURL } from 'node:url';
|
|
5
|
+
import { getDefaultImageStoreDir, getImagePackageInstallDir, isFileLikeImageSpecifier, loadImageRegistry, parseImageSpecifier, resolveFileLikeImageSpecifierToFileUrl, resolveFileLikeImageSpecifierToPath, resolveImageEntryFileFromStore, saveImageRegistry, } from '@dexto/agent-management';
|
|
6
|
+
import { loadImage } from '@dexto/agent-config';
|
|
7
|
+
import { executeWithTimeout } from './execute.js';
|
|
8
|
+
function hasWorkspaceProtocolDependencies(pkg) {
|
|
9
|
+
if (typeof pkg !== 'object' || pkg === null) {
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
const maybePkg = pkg;
|
|
13
|
+
const depFields = [
|
|
14
|
+
'dependencies',
|
|
15
|
+
'devDependencies',
|
|
16
|
+
'peerDependencies',
|
|
17
|
+
'optionalDependencies',
|
|
18
|
+
];
|
|
19
|
+
for (const field of depFields) {
|
|
20
|
+
const deps = maybePkg[field];
|
|
21
|
+
if (typeof deps !== 'object' || deps === null) {
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
for (const version of Object.values(deps)) {
|
|
25
|
+
if (typeof version === 'string' && version.startsWith('workspace:')) {
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
async function isDirectory(filePath) {
|
|
33
|
+
try {
|
|
34
|
+
const stat = await fs.stat(filePath);
|
|
35
|
+
return stat.isDirectory();
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
async function findSingleTgzFile(dir) {
|
|
42
|
+
const entries = await fs.readdir(dir);
|
|
43
|
+
const tgzFiles = entries.filter((entry) => entry.endsWith('.tgz'));
|
|
44
|
+
if (tgzFiles.length !== 1) {
|
|
45
|
+
throw new Error(`Expected exactly one .tgz file in ${dir}, found ${tgzFiles.length}: ${tgzFiles.join(', ')}`);
|
|
46
|
+
}
|
|
47
|
+
return path.join(dir, tgzFiles[0] ?? '');
|
|
48
|
+
}
|
|
49
|
+
function getInstalledPackageRoot(installDir, packageName) {
|
|
50
|
+
const nodeModulesDir = path.join(installDir, 'node_modules');
|
|
51
|
+
if (packageName.startsWith('@')) {
|
|
52
|
+
const [scope, name] = packageName.split('/');
|
|
53
|
+
if (!scope || !name) {
|
|
54
|
+
throw new Error(`Invalid scoped package name: ${packageName}`);
|
|
55
|
+
}
|
|
56
|
+
return path.join(nodeModulesDir, scope, name);
|
|
57
|
+
}
|
|
58
|
+
return path.join(nodeModulesDir, packageName);
|
|
59
|
+
}
|
|
60
|
+
function readJsonFile(filePath) {
|
|
61
|
+
return JSON.parse(readFileSync(filePath, 'utf-8'));
|
|
62
|
+
}
|
|
63
|
+
function resolveEntryFileFromPackageJson(packageRoot, pkg) {
|
|
64
|
+
if (typeof pkg !== 'object' || pkg === null) {
|
|
65
|
+
throw new Error('Invalid package.json');
|
|
66
|
+
}
|
|
67
|
+
const maybePkg = pkg;
|
|
68
|
+
const exportsField = maybePkg.exports;
|
|
69
|
+
let entryRel;
|
|
70
|
+
if (exportsField && typeof exportsField === 'object') {
|
|
71
|
+
const rootExport = exportsField['.'] ??
|
|
72
|
+
exportsField['./'];
|
|
73
|
+
if (typeof rootExport === 'string') {
|
|
74
|
+
entryRel = rootExport;
|
|
75
|
+
}
|
|
76
|
+
else if (rootExport && typeof rootExport === 'object') {
|
|
77
|
+
const rootObj = rootExport;
|
|
78
|
+
if (typeof rootObj.import === 'string') {
|
|
79
|
+
entryRel = rootObj.import;
|
|
80
|
+
}
|
|
81
|
+
else if (typeof rootObj.default === 'string') {
|
|
82
|
+
entryRel = rootObj.default;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
if (!entryRel) {
|
|
87
|
+
const moduleField = maybePkg.module;
|
|
88
|
+
if (typeof moduleField === 'string')
|
|
89
|
+
entryRel = moduleField;
|
|
90
|
+
}
|
|
91
|
+
if (!entryRel) {
|
|
92
|
+
const mainField = maybePkg.main;
|
|
93
|
+
if (typeof mainField === 'string')
|
|
94
|
+
entryRel = mainField;
|
|
95
|
+
}
|
|
96
|
+
if (!entryRel) {
|
|
97
|
+
const fallback = path.join(packageRoot, 'dist', 'index.js');
|
|
98
|
+
if (existsSync(fallback)) {
|
|
99
|
+
return fallback;
|
|
100
|
+
}
|
|
101
|
+
throw new Error(`Could not determine image entry file from package.json exports/main`);
|
|
102
|
+
}
|
|
103
|
+
const entryPath = path.resolve(packageRoot, entryRel);
|
|
104
|
+
if (!existsSync(entryPath)) {
|
|
105
|
+
throw new Error(`Image entry file not found: ${entryPath}`);
|
|
106
|
+
}
|
|
107
|
+
return entryPath;
|
|
108
|
+
}
|
|
109
|
+
function getInstalledImageEntryFile(installDir, imageId) {
|
|
110
|
+
const packageRoot = getInstalledPackageRoot(installDir, imageId);
|
|
111
|
+
const packageJsonPath = path.join(packageRoot, 'package.json');
|
|
112
|
+
if (!existsSync(packageJsonPath)) {
|
|
113
|
+
throw new Error(`Installed image package.json not found at ${packageJsonPath}`);
|
|
114
|
+
}
|
|
115
|
+
const pkg = readJsonFile(packageJsonPath);
|
|
116
|
+
const entryFilePath = resolveEntryFileFromPackageJson(packageRoot, pkg);
|
|
117
|
+
return pathToFileURL(entryFilePath).href;
|
|
118
|
+
}
|
|
119
|
+
async function upsertRegistryInstall(imageId, version, entryFile, options) {
|
|
120
|
+
const registry = loadImageRegistry(options.storeDir);
|
|
121
|
+
registry.images[imageId] ??= { installed: {} };
|
|
122
|
+
registry.images[imageId].installed[version] = {
|
|
123
|
+
entryFile,
|
|
124
|
+
installedAt: new Date().toISOString(),
|
|
125
|
+
};
|
|
126
|
+
if (options.activate) {
|
|
127
|
+
registry.images[imageId].active = version;
|
|
128
|
+
}
|
|
129
|
+
await saveImageRegistry(registry, options.storeDir);
|
|
130
|
+
}
|
|
131
|
+
async function validateInstalledImageModule(imageId, version, entryFile) {
|
|
132
|
+
try {
|
|
133
|
+
await loadImage(entryFile);
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
137
|
+
throw new Error(`Installed image '${imageId}@${version}' did not export a valid DextoImage.\n` +
|
|
138
|
+
`Entry file: ${entryFile}\n` +
|
|
139
|
+
message);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
async function installImageDirectoryByReference(options) {
|
|
143
|
+
const { packageDir, packageJson, storeDir, activate, force } = options;
|
|
144
|
+
if (typeof packageJson !== 'object' || packageJson === null) {
|
|
145
|
+
throw new Error(`Invalid package.json for local image at ${packageDir}`);
|
|
146
|
+
}
|
|
147
|
+
const maybePkg = packageJson;
|
|
148
|
+
const imageId = maybePkg.name;
|
|
149
|
+
if (typeof imageId !== 'string' || imageId.trim().length === 0) {
|
|
150
|
+
throw new Error(`Local image package.json is missing a valid 'name' field (${packageDir})`);
|
|
151
|
+
}
|
|
152
|
+
const version = maybePkg.version;
|
|
153
|
+
if (typeof version !== 'string' || version.trim().length === 0) {
|
|
154
|
+
throw new Error(`Local image '${imageId}' package.json is missing a valid 'version' field (${packageDir})`);
|
|
155
|
+
}
|
|
156
|
+
if (force) {
|
|
157
|
+
const existingInstallDir = getImagePackageInstallDir(imageId, version, storeDir);
|
|
158
|
+
await fs.rm(existingInstallDir, { recursive: true, force: true }).catch(() => { });
|
|
159
|
+
}
|
|
160
|
+
let entryFilePath;
|
|
161
|
+
try {
|
|
162
|
+
entryFilePath = resolveEntryFileFromPackageJson(packageDir, packageJson);
|
|
163
|
+
}
|
|
164
|
+
catch (error) {
|
|
165
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
166
|
+
if (message.startsWith('Image entry file not found:')) {
|
|
167
|
+
throw new Error(`Local image '${imageId}@${version}' has not been built.\n` +
|
|
168
|
+
`${message}\n` +
|
|
169
|
+
`Run: pnpm run build (or npm run build) in ${packageDir}, then re-run: dexto image install ${packageDir}`);
|
|
170
|
+
}
|
|
171
|
+
throw error;
|
|
172
|
+
}
|
|
173
|
+
const entryFile = pathToFileURL(entryFilePath).href;
|
|
174
|
+
await validateInstalledImageModule(imageId, version, entryFile);
|
|
175
|
+
await upsertRegistryInstall(imageId, version, entryFile, { storeDir, activate });
|
|
176
|
+
return { id: imageId, version, entryFile, installDir: packageDir, installMode: 'linked' };
|
|
177
|
+
}
|
|
178
|
+
export async function installImageToStore(specifier, options = {}) {
|
|
179
|
+
const { force = false, activate = true, storeDir = getDefaultImageStoreDir(), npmTimeoutMs, } = options;
|
|
180
|
+
await fs.mkdir(storeDir, { recursive: true });
|
|
181
|
+
if (isFileLikeImageSpecifier(specifier)) {
|
|
182
|
+
const resolvedPath = resolveFileLikeImageSpecifierToPath(specifier);
|
|
183
|
+
if (await isDirectory(resolvedPath)) {
|
|
184
|
+
const localPackageJsonPath = path.join(resolvedPath, 'package.json');
|
|
185
|
+
if (existsSync(localPackageJsonPath)) {
|
|
186
|
+
const localPkg = readJsonFile(localPackageJsonPath);
|
|
187
|
+
if (hasWorkspaceProtocolDependencies(localPkg)) {
|
|
188
|
+
// `workspace:*` dependencies can only be resolved from within the workspace.
|
|
189
|
+
// Installing this package into the global image store would break dependency
|
|
190
|
+
// resolution, so we register a linked install that points at the local build.
|
|
191
|
+
return await installImageDirectoryByReference({
|
|
192
|
+
packageDir: resolvedPath,
|
|
193
|
+
packageJson: localPkg,
|
|
194
|
+
storeDir,
|
|
195
|
+
activate,
|
|
196
|
+
force,
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
const tmpDir = await fs.mkdtemp(path.join(storeDir, 'tmp-install-'));
|
|
203
|
+
let installDir = null;
|
|
204
|
+
let moved = false;
|
|
205
|
+
try {
|
|
206
|
+
const tmpPackageJsonPath = path.join(tmpDir, 'package.json');
|
|
207
|
+
await fs.writeFile(tmpPackageJsonPath, JSON.stringify({ name: 'dexto-image-store', private: true }, null, 2), 'utf-8');
|
|
208
|
+
let packDir = null;
|
|
209
|
+
let installSpecifier = isFileLikeImageSpecifier(specifier)
|
|
210
|
+
? resolveFileLikeImageSpecifierToPath(specifier)
|
|
211
|
+
: specifier;
|
|
212
|
+
// `npm install <directory>` often installs as a relative link, which can break when
|
|
213
|
+
// the temp install directory is moved into the image store. Avoid this by packing
|
|
214
|
+
// directories into a tarball and installing from the tarball instead.
|
|
215
|
+
if (isFileLikeImageSpecifier(specifier) && (await isDirectory(installSpecifier))) {
|
|
216
|
+
packDir = path.join(tmpDir, '.dexto-pack');
|
|
217
|
+
await fs.mkdir(packDir, { recursive: true });
|
|
218
|
+
await executeWithTimeout('npm', ['pack', installSpecifier, '--pack-destination', packDir], { cwd: tmpDir, ...(npmTimeoutMs !== undefined && { timeoutMs: npmTimeoutMs }) });
|
|
219
|
+
installSpecifier = await findSingleTgzFile(packDir);
|
|
220
|
+
}
|
|
221
|
+
await executeWithTimeout('npm', ['install', installSpecifier, '--no-audit', '--no-fund', '--no-package-lock'], { cwd: tmpDir, ...(npmTimeoutMs !== undefined && { timeoutMs: npmTimeoutMs }) });
|
|
222
|
+
if (packDir) {
|
|
223
|
+
await fs.rm(packDir, { recursive: true, force: true }).catch(() => { });
|
|
224
|
+
}
|
|
225
|
+
const tmpPkgJson = readJsonFile(tmpPackageJsonPath);
|
|
226
|
+
const deps = tmpPkgJson.dependencies ? Object.keys(tmpPkgJson.dependencies) : [];
|
|
227
|
+
if (deps.length !== 1) {
|
|
228
|
+
throw new Error(`Unexpected install state: expected exactly one dependency, got ${deps.length}`);
|
|
229
|
+
}
|
|
230
|
+
const imageId = deps[0] ?? '';
|
|
231
|
+
if (!imageId) {
|
|
232
|
+
throw new Error(`Could not determine installed image package name`);
|
|
233
|
+
}
|
|
234
|
+
const packageRoot = getInstalledPackageRoot(tmpDir, imageId);
|
|
235
|
+
const installedPackageJsonPath = path.join(packageRoot, 'package.json');
|
|
236
|
+
const installedPackageJson = readJsonFile(installedPackageJsonPath);
|
|
237
|
+
const version = installedPackageJson.version;
|
|
238
|
+
if (typeof version !== 'string' || version.trim().length === 0) {
|
|
239
|
+
throw new Error(`Installed image package has an invalid version field`);
|
|
240
|
+
}
|
|
241
|
+
installDir = getImagePackageInstallDir(imageId, version, storeDir);
|
|
242
|
+
if (existsSync(installDir)) {
|
|
243
|
+
if (!force) {
|
|
244
|
+
const entryFile = getInstalledImageEntryFile(installDir, imageId);
|
|
245
|
+
await validateInstalledImageModule(imageId, version, entryFile);
|
|
246
|
+
await upsertRegistryInstall(imageId, version, entryFile, { storeDir, activate });
|
|
247
|
+
await fs.rm(tmpDir, { recursive: true, force: true }).catch(() => { });
|
|
248
|
+
return { id: imageId, version, entryFile, installDir, installMode: 'store' };
|
|
249
|
+
}
|
|
250
|
+
await fs.rm(installDir, { recursive: true, force: true });
|
|
251
|
+
}
|
|
252
|
+
await fs.mkdir(path.dirname(installDir), { recursive: true });
|
|
253
|
+
await fs.rename(tmpDir, installDir);
|
|
254
|
+
moved = true;
|
|
255
|
+
const entryFile = getInstalledImageEntryFile(installDir, imageId);
|
|
256
|
+
await validateInstalledImageModule(imageId, version, entryFile);
|
|
257
|
+
await upsertRegistryInstall(imageId, version, entryFile, { storeDir, activate });
|
|
258
|
+
return { id: imageId, version, entryFile, installDir, installMode: 'store' };
|
|
259
|
+
}
|
|
260
|
+
catch (error) {
|
|
261
|
+
if (moved && installDir) {
|
|
262
|
+
await fs.rm(installDir, { recursive: true, force: true }).catch(() => { });
|
|
263
|
+
}
|
|
264
|
+
else {
|
|
265
|
+
await fs.rm(tmpDir, { recursive: true, force: true }).catch(() => { });
|
|
266
|
+
}
|
|
267
|
+
throw error;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
export async function importImageModule(imageName, storeDir = getDefaultImageStoreDir()) {
|
|
271
|
+
if (isFileLikeImageSpecifier(imageName)) {
|
|
272
|
+
const fileUrl = resolveFileLikeImageSpecifierToFileUrl(imageName);
|
|
273
|
+
return import(fileUrl);
|
|
274
|
+
}
|
|
275
|
+
const parsed = parseImageSpecifier(imageName);
|
|
276
|
+
// Prefer the store when an image is installed there; fall back to host resolution.
|
|
277
|
+
const storeEntryFile = await resolveImageEntryFileFromStore(parsed, storeDir);
|
|
278
|
+
if (storeEntryFile) {
|
|
279
|
+
return import(storeEntryFile);
|
|
280
|
+
}
|
|
281
|
+
try {
|
|
282
|
+
return await import(parsed.id);
|
|
283
|
+
}
|
|
284
|
+
catch (error) {
|
|
285
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
286
|
+
throw new Error(`Failed to import image '${imageName}': ${message}\n` +
|
|
287
|
+
`Install it into the Dexto image store with: dexto image install ${imageName}`);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
import * as p from '@clack/prompts';
|
|
2
|
+
export declare function getDextoCliVersion(): string;
|
|
3
|
+
export declare function getDextoVersionRange(): string;
|
|
4
|
+
export declare function isLocalDependencySpecifier(specifier: string): boolean;
|
|
5
|
+
export declare function hasVersionInPackageSpecifier(specifier: string): boolean;
|
|
6
|
+
export declare function pinDextoPackageIfUnversioned(specifier: string, versionRange: string): string;
|
|
2
7
|
/**
|
|
3
8
|
* Validates a project name against the standard regex
|
|
4
9
|
* @param name - The project name to validate
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaffolding-utils.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/scaffolding-utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"scaffolding-utils.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/scaffolding-utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AASpC,wBAAgB,kBAAkB,IAAI,MAAM,CAM3C;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAOrE;AAED,wBAAgB,4BAA4B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAYvE;AAED,wBAAgB,4BAA4B,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAK5F;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAMpE;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACtC,WAAW,GAAE,MAA2B,EACxC,aAAa,GAAE,MAAiD,GACjE,OAAO,CAAC,MAAM,CAAC,CAmBjB;AAED;;;;;GAKG;AACH,wBAAsB,sBAAsB,CACxC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,GACtC,OAAO,CAAC,MAAM,CAAC,CAiBjB;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAErE;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACjC,WAAW,EAAE,MAAM,EACnB,iBAAiB,GAAE,MAAM,EAAO,GACjC,OAAO,CAAC,IAAI,CAAC,CAIf;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACjC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,KAAK,GAAG,OAAO,GAAG,SAAS,GAClC,OAAO,CAAC,IAAI,CAAC,CAiCf;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkB7F;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgC/E;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA+BjF;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CACrC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE;IACF,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B,EACD,cAAc,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,IAAI,CAAC,CAef;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAClC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,OAAO,CAAC,IAAI,CAAC,CAMf;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEpE"}
|
|
@@ -1,9 +1,49 @@
|
|
|
1
1
|
import fs from 'fs-extra';
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import chalk from 'chalk';
|
|
4
|
+
import { createRequire } from 'module';
|
|
4
5
|
import { executeWithTimeout } from './execute.js';
|
|
5
6
|
import { textOrExit } from './prompt-helpers.js';
|
|
6
7
|
import { getPackageManager, getPackageManagerInstallCommand } from './package-mgmt.js';
|
|
8
|
+
const require = createRequire(import.meta.url);
|
|
9
|
+
const cliPackageJson = require('../../../package.json');
|
|
10
|
+
export function getDextoCliVersion() {
|
|
11
|
+
const version = process.env.DEXTO_CLI_VERSION ?? cliPackageJson.version;
|
|
12
|
+
if (!version) {
|
|
13
|
+
throw new Error('Could not determine dexto CLI version');
|
|
14
|
+
}
|
|
15
|
+
return version;
|
|
16
|
+
}
|
|
17
|
+
export function getDextoVersionRange() {
|
|
18
|
+
return `^${getDextoCliVersion()}`;
|
|
19
|
+
}
|
|
20
|
+
export function isLocalDependencySpecifier(specifier) {
|
|
21
|
+
return (specifier.startsWith('.') ||
|
|
22
|
+
specifier.startsWith('/') ||
|
|
23
|
+
specifier.startsWith('file:') ||
|
|
24
|
+
/^[A-Za-z]:[\\/]/.test(specifier));
|
|
25
|
+
}
|
|
26
|
+
export function hasVersionInPackageSpecifier(specifier) {
|
|
27
|
+
if (isLocalDependencySpecifier(specifier))
|
|
28
|
+
return true;
|
|
29
|
+
const atIndex = specifier.lastIndexOf('@');
|
|
30
|
+
if (atIndex <= 0)
|
|
31
|
+
return false;
|
|
32
|
+
if (specifier.startsWith('@')) {
|
|
33
|
+
const slashIndex = specifier.indexOf('/');
|
|
34
|
+
return slashIndex !== -1 && atIndex > slashIndex;
|
|
35
|
+
}
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
export function pinDextoPackageIfUnversioned(specifier, versionRange) {
|
|
39
|
+
if (isLocalDependencySpecifier(specifier))
|
|
40
|
+
return specifier;
|
|
41
|
+
if (!specifier.startsWith('@dexto/'))
|
|
42
|
+
return specifier;
|
|
43
|
+
if (hasVersionInPackageSpecifier(specifier))
|
|
44
|
+
return specifier;
|
|
45
|
+
return `${specifier}@${versionRange}`;
|
|
46
|
+
}
|
|
7
47
|
/**
|
|
8
48
|
* Validates a project name against the standard regex
|
|
9
49
|
* @param name - The project name to validate
|
|
@@ -164,9 +204,11 @@ export async function createTsconfigForImage(projectPath) {
|
|
|
164
204
|
include: [
|
|
165
205
|
'dexto.image.ts',
|
|
166
206
|
'tools/**/*',
|
|
167
|
-
'blob
|
|
168
|
-
'
|
|
169
|
-
'
|
|
207
|
+
'storage/blob/**/*',
|
|
208
|
+
'storage/database/**/*',
|
|
209
|
+
'storage/cache/**/*',
|
|
210
|
+
'compaction/**/*',
|
|
211
|
+
'hooks/**/*',
|
|
170
212
|
],
|
|
171
213
|
exclude: ['node_modules', 'dist'],
|
|
172
214
|
};
|
|
@@ -199,7 +241,7 @@ export async function createTsconfigForProject(projectPath) {
|
|
|
199
241
|
'src/**/*',
|
|
200
242
|
'storage/**/*',
|
|
201
243
|
'tools/**/*',
|
|
202
|
-
'
|
|
244
|
+
'hooks/**/*',
|
|
203
245
|
'shared/**/*',
|
|
204
246
|
'dexto.config.ts',
|
|
205
247
|
],
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
* Template Engine for Dexto Project Scaffolding
|
|
3
3
|
*
|
|
4
4
|
* Provides code generation functions for various project types.
|
|
5
|
-
*
|
|
6
|
-
* -
|
|
7
|
-
*
|
|
5
|
+
*
|
|
6
|
+
* Note: create-app/init-app scaffolds are programmatic (no YAML/images).
|
|
7
|
+
* Image scaffolds are generated via `dexto create-image`.
|
|
8
8
|
*/
|
|
9
9
|
interface TemplateContext {
|
|
10
10
|
projectName: string;
|
|
@@ -18,13 +18,13 @@ interface TemplateContext {
|
|
|
18
18
|
[key: string]: any;
|
|
19
19
|
}
|
|
20
20
|
/**
|
|
21
|
-
* Generates src/index.ts for an app using
|
|
21
|
+
* Generates src/index.ts for an app using programmatic configuration.
|
|
22
22
|
*/
|
|
23
|
-
export declare function
|
|
23
|
+
export declare function generateIndexForCodeFirstDI(context: TemplateContext): string;
|
|
24
24
|
/**
|
|
25
|
-
* Generates src/index.ts for a web server application using
|
|
25
|
+
* Generates src/index.ts for a web server application using programmatic configuration.
|
|
26
26
|
*/
|
|
27
|
-
export declare function
|
|
27
|
+
export declare function generateWebServerIndexForCodeFirstDI(context: TemplateContext): string;
|
|
28
28
|
/**
|
|
29
29
|
* Generates HTML for web app
|
|
30
30
|
*/
|
|
@@ -41,25 +41,37 @@ export declare function generateWebAppCSS(): string;
|
|
|
41
41
|
* Generates dexto.image.ts file for an image project
|
|
42
42
|
*/
|
|
43
43
|
export declare function generateDextoImageFile(context: TemplateContext): string;
|
|
44
|
-
/**
|
|
45
|
-
* Generates dexto.config.ts file for manual registration projects
|
|
46
|
-
*/
|
|
47
|
-
export declare function generateDextoConfigFile(context: TemplateContext): string;
|
|
48
44
|
/**
|
|
49
45
|
* Generates README.md for an image project
|
|
50
46
|
*/
|
|
51
47
|
export declare function generateImageReadme(context: TemplateContext): string;
|
|
52
48
|
/**
|
|
53
|
-
* Generates an example custom tool
|
|
49
|
+
* Generates an example custom tool factory
|
|
54
50
|
*/
|
|
55
51
|
export declare function generateExampleTool(toolName?: string): string;
|
|
56
52
|
/**
|
|
57
|
-
* Generates
|
|
53
|
+
* Generates an example custom hook factory
|
|
58
54
|
*/
|
|
59
|
-
export declare function
|
|
55
|
+
export declare function generateExampleHook(hookName: string): string;
|
|
56
|
+
/**
|
|
57
|
+
* Generates an example custom compaction factory
|
|
58
|
+
*/
|
|
59
|
+
export declare function generateExampleCompaction(compactionType: string): string;
|
|
60
60
|
/**
|
|
61
|
-
* Generates
|
|
61
|
+
* Generates an example in-memory cache factory
|
|
62
62
|
*/
|
|
63
|
-
export declare function
|
|
63
|
+
export declare function generateExampleCacheFactory(cacheType: string): string;
|
|
64
|
+
/**
|
|
65
|
+
* Generates an example in-memory database factory
|
|
66
|
+
*/
|
|
67
|
+
export declare function generateExampleDatabaseFactory(databaseType: string): string;
|
|
68
|
+
/**
|
|
69
|
+
* Generates an example in-memory blob store factory
|
|
70
|
+
*/
|
|
71
|
+
export declare function generateExampleBlobStoreFactory(blobType: string): string;
|
|
72
|
+
/**
|
|
73
|
+
* Generates README for an app project
|
|
74
|
+
*/
|
|
75
|
+
export declare function generateAppReadme(context: TemplateContext): string;
|
|
64
76
|
export {};
|
|
65
77
|
//# sourceMappingURL=template-engine.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template-engine.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/template-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,UAAU,eAAe;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,
|
|
1
|
+
{"version":3,"file":"template-engine.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/template-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,UAAU,eAAe;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAgC5E;AAED;;GAEG;AACH,wBAAgB,oCAAoC,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAsCrF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAsC9D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAwKzC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAqN1C;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CA2DvE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAgFpE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,GAAE,MAAuB,GAAG,MAAM,CAoD7E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAiC5D;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAsDxE;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAwBrE;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAwB3E;AAED;;GAEG;AACH,wBAAgB,+BAA+B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAyBxE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CA+ClE"}
|