@soapjs/cli 1.0.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/.nvmrc +1 -0
- package/LICENSE +21 -0
- package/README.md +360 -0
- package/build/cli.d.ts +3 -0
- package/build/cli.js +50 -0
- package/build/commands/add/add.command.d.ts +2 -0
- package/build/commands/add/add.command.js +709 -0
- package/build/commands/add/command-plan.d.ts +15 -0
- package/build/commands/add/command-plan.js +182 -0
- package/build/commands/add/entity-plan.d.ts +7 -0
- package/build/commands/add/entity-plan.js +106 -0
- package/build/commands/add/event-plan.d.ts +8 -0
- package/build/commands/add/event-plan.js +59 -0
- package/build/commands/add/query-plan.d.ts +10 -0
- package/build/commands/add/query-plan.js +156 -0
- package/build/commands/add/repository-plan.d.ts +11 -0
- package/build/commands/add/repository-plan.js +252 -0
- package/build/commands/add/resource-plan.d.ts +52 -0
- package/build/commands/add/resource-plan.js +2031 -0
- package/build/commands/add/route-plan.d.ts +24 -0
- package/build/commands/add/route-plan.js +256 -0
- package/build/commands/add/socket-plan.d.ts +9 -0
- package/build/commands/add/socket-plan.js +81 -0
- package/build/commands/add/use-case-plan.d.ts +7 -0
- package/build/commands/add/use-case-plan.js +86 -0
- package/build/commands/check/check.command.d.ts +2 -0
- package/build/commands/check/check.command.js +113 -0
- package/build/commands/create/create.command.d.ts +2 -0
- package/build/commands/create/create.command.js +234 -0
- package/build/commands/create/project-plan.d.ts +44 -0
- package/build/commands/create/project-plan.js +1430 -0
- package/build/commands/doctor/doctor.command.d.ts +2 -0
- package/build/commands/doctor/doctor.command.js +38 -0
- package/build/commands/generate/bruno-analysis.d.ts +19 -0
- package/build/commands/generate/bruno-analysis.js +51 -0
- package/build/commands/generate/bruno-plan.d.ts +6 -0
- package/build/commands/generate/bruno-plan.js +326 -0
- package/build/commands/generate/generate.command.d.ts +2 -0
- package/build/commands/generate/generate.command.js +130 -0
- package/build/commands/info/info.command.d.ts +2 -0
- package/build/commands/info/info.command.js +26 -0
- package/build/commands/remove/remove.command.d.ts +2 -0
- package/build/commands/remove/remove.command.js +328 -0
- package/build/commands/shared/common-options.d.ts +10 -0
- package/build/commands/shared/common-options.js +23 -0
- package/build/commands/update/update.command.d.ts +2 -0
- package/build/commands/update/update.command.js +155 -0
- package/build/config/auth-policy.d.ts +4 -0
- package/build/config/auth-policy.js +54 -0
- package/build/config/find-soap-root.d.ts +1 -0
- package/build/config/find-soap-root.js +22 -0
- package/build/config/load-soap-config.d.ts +2 -0
- package/build/config/load-soap-config.js +30 -0
- package/build/config/schemas/types.d.ts +127 -0
- package/build/config/schemas/types.js +2 -0
- package/build/config/schemas/validation.d.ts +5 -0
- package/build/config/schemas/validation.js +130 -0
- package/build/config/soap-config.service.d.ts +4 -0
- package/build/config/soap-config.service.js +24 -0
- package/build/config/write-soap-config.d.ts +8 -0
- package/build/config/write-soap-config.js +25 -0
- package/build/core/command-context.d.ts +20 -0
- package/build/core/command-context.js +30 -0
- package/build/core/errors.d.ts +6 -0
- package/build/core/errors.js +23 -0
- package/build/core/output.d.ts +12 -0
- package/build/core/output.js +30 -0
- package/build/core/result.d.ts +9 -0
- package/build/core/result.js +11 -0
- package/build/dependencies/dependency-resolver.d.ts +6 -0
- package/build/dependencies/dependency-resolver.js +68 -0
- package/build/dependencies/package-manager.d.ts +7 -0
- package/build/dependencies/package-manager.js +54 -0
- package/build/index.d.ts +2 -0
- package/build/index.js +9 -0
- package/build/io/conflict-policy.d.ts +10 -0
- package/build/io/conflict-policy.js +32 -0
- package/build/io/file-writer.d.ts +19 -0
- package/build/io/file-writer.js +65 -0
- package/build/io/format-file.d.ts +1 -0
- package/build/io/format-file.js +13 -0
- package/build/presets/create-presets.d.ts +4 -0
- package/build/presets/create-presets.js +97 -0
- package/build/presets/index.d.ts +2 -0
- package/build/presets/index.js +18 -0
- package/build/presets/preset.types.d.ts +6 -0
- package/build/presets/preset.types.js +2 -0
- package/build/prompts/add-resource.prompt.d.ts +13 -0
- package/build/prompts/add-resource.prompt.js +80 -0
- package/build/prompts/add-route.prompt.d.ts +16 -0
- package/build/prompts/add-route.prompt.js +140 -0
- package/build/prompts/create-project.prompt.d.ts +11 -0
- package/build/prompts/create-project.prompt.js +156 -0
- package/build/prompts/generate-bruno.prompt.d.ts +7 -0
- package/build/prompts/generate-bruno.prompt.js +21 -0
- package/build/prompts/index.d.ts +8 -0
- package/build/prompts/index.js +24 -0
- package/build/prompts/inquirer-prompt-adapter.d.ts +8 -0
- package/build/prompts/inquirer-prompt-adapter.js +52 -0
- package/build/prompts/mock-prompt-adapter.d.ts +13 -0
- package/build/prompts/mock-prompt-adapter.js +60 -0
- package/build/prompts/prompt-adapter.d.ts +7 -0
- package/build/prompts/prompt-adapter.js +2 -0
- package/build/prompts/prompt.types.d.ts +26 -0
- package/build/prompts/prompt.types.js +2 -0
- package/build/registry/registry.service.d.ts +19 -0
- package/build/registry/registry.service.js +68 -0
- package/build/resolvers/add-resource.resolver.d.ts +23 -0
- package/build/resolvers/add-resource.resolver.js +73 -0
- package/build/resolvers/add-route.resolver.d.ts +34 -0
- package/build/resolvers/add-route.resolver.js +83 -0
- package/build/resolvers/create-config.resolver.d.ts +32 -0
- package/build/resolvers/create-config.resolver.js +57 -0
- package/build/resolvers/generate-bruno.resolver.d.ts +17 -0
- package/build/resolvers/generate-bruno.resolver.js +23 -0
- package/build/resolvers/index.d.ts +5 -0
- package/build/resolvers/index.js +21 -0
- package/build/resolvers/resolver.types.d.ts +8 -0
- package/build/resolvers/resolver.types.js +2 -0
- package/build/summary/create-summary.d.ts +2 -0
- package/build/summary/create-summary.js +24 -0
- package/build/summary/index.d.ts +1 -0
- package/build/summary/index.js +17 -0
- package/build/templates/naming.d.ts +11 -0
- package/build/templates/naming.js +30 -0
- package/build/templates/template-context.d.ts +6 -0
- package/build/templates/template-context.js +2 -0
- package/build/templates/template-engine.d.ts +1 -0
- package/build/templates/template-engine.js +10 -0
- package/build/templates/template-resolver.d.ts +2 -0
- package/build/templates/template-resolver.js +17 -0
- package/build/terminal/terminal-capabilities.d.ts +6 -0
- package/build/terminal/terminal-capabilities.js +14 -0
- package/docs/adr/0001-soap-cli-project-aware-generator.md +108 -0
- package/docs/cli/add-resource.md +127 -0
- package/docs/cli/add-route.md +79 -0
- package/docs/cli/bruno.md +58 -0
- package/docs/cli/create.md +73 -0
- package/docs/cli/index.md +92 -0
- package/docs/cli/interactive-mode.md +61 -0
- package/docs/cli/remove.md +45 -0
- package/docs/guides/auth.md +90 -0
- package/docs/guides/cqrs-events-realtime.md +100 -0
- package/docs/guides/index.md +24 -0
- package/docs/guides/quality-and-safety.md +88 -0
- package/docs/guides/regular-api.md +119 -0
- package/docs/guides/storage.md +101 -0
- package/docs/plans/interactive-mode-plan.md +601 -0
- package/package.json +44 -0
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.registerCreateCommand = void 0;
|
|
7
|
+
const child_process_1 = require("child_process");
|
|
8
|
+
const fs_1 = __importDefault(require("fs"));
|
|
9
|
+
const path_1 = __importDefault(require("path"));
|
|
10
|
+
const command_context_1 = require("../../core/command-context");
|
|
11
|
+
const errors_1 = require("../../core/errors");
|
|
12
|
+
const write_soap_config_1 = require("../../config/write-soap-config");
|
|
13
|
+
const dependency_resolver_1 = require("../../dependencies/dependency-resolver");
|
|
14
|
+
const package_manager_1 = require("../../dependencies/package-manager");
|
|
15
|
+
const file_writer_1 = require("../../io/file-writer");
|
|
16
|
+
const registry_service_1 = require("../../registry/registry.service");
|
|
17
|
+
const common_options_1 = require("../shared/common-options");
|
|
18
|
+
const project_plan_1 = require("./project-plan");
|
|
19
|
+
const create_config_resolver_1 = require("../../resolvers/create-config.resolver");
|
|
20
|
+
const prompts_1 = require("../../prompts");
|
|
21
|
+
const summary_1 = require("../../summary");
|
|
22
|
+
const presets_1 = require("../../presets");
|
|
23
|
+
function registerCreateCommand(program) {
|
|
24
|
+
(0, common_options_1.addConflictOption)((0, common_options_1.addInteractiveOption)(program
|
|
25
|
+
.command("create <name>")
|
|
26
|
+
.description("Create a new SoapJS service project.")
|
|
27
|
+
.option("--framework <framework>", "framework adapter", "express")
|
|
28
|
+
.option("--architecture <architecture>", "architecture mode: regular, cqrs", "regular")
|
|
29
|
+
.option("--db <database>", "database capability: mongo, postgres, mysql, sqlite, redis, none", collect, [])
|
|
30
|
+
.option("--auth <auth>", "auth capability: jwt, api-key, local, none", collect, [])
|
|
31
|
+
.option("--messaging <messaging>", "messaging capability: in-memory, kafka, none", collect, [])
|
|
32
|
+
.option("--telemetry <telemetry>", "telemetry capability: logs, otel-noop, none", collect, [])
|
|
33
|
+
.option("--docs <docs>", "docs capability: openapi, none", collect, [])
|
|
34
|
+
.option("--contracts <contracts>", "contract capability: zod, none", collect, [])
|
|
35
|
+
.option("--api-client <client>", "api client capability: bruno, none", collect, [])
|
|
36
|
+
.option("--realtime <realtime>", "realtime capability: ws, none", collect, [])
|
|
37
|
+
.option("--zones <zones>", "comma-separated zones", "public,private,admin")
|
|
38
|
+
.option("--package-manager <manager>", "package manager: npm, pnpm, yarn, bun")
|
|
39
|
+
.option("--preset <preset>", "create preset")
|
|
40
|
+
.option("--skip-install", "do not install dependencies", false)
|
|
41
|
+
.option("--install", "install dependencies after generation", false)
|
|
42
|
+
.option("--git-init", "initialize a git repository after generation", false)
|
|
43
|
+
.option("--yes", "skip interactive confirmation prompts", false)
|
|
44
|
+
.option("--force", "overwrite generated files even when modified", false)
|
|
45
|
+
.option("--write-new", "write modified generated files as .new", false)))
|
|
46
|
+
.action(async (name, options, command) => {
|
|
47
|
+
const preset = (0, presets_1.resolveCreatePreset)(options.preset);
|
|
48
|
+
(0, common_options_1.assertInteractiveTerminal)(options);
|
|
49
|
+
const context = (0, command_context_1.getCommandContext)(command);
|
|
50
|
+
const root = (0, project_plan_1.targetRoot)(context.cwd, name);
|
|
51
|
+
if (options.framework !== "express") {
|
|
52
|
+
throw new errors_1.CliError("Only --framework express is supported in this MVP.");
|
|
53
|
+
}
|
|
54
|
+
if (options.architecture !== "regular" && options.architecture !== "cqrs") {
|
|
55
|
+
throw new errors_1.CliError("Architecture must be regular or cqrs.");
|
|
56
|
+
}
|
|
57
|
+
if (fs_1.default.existsSync(root) && !fs_1.default.statSync(root).isDirectory()) {
|
|
58
|
+
throw new errors_1.CliError(`Target path exists and is not a directory: ${root}`);
|
|
59
|
+
}
|
|
60
|
+
const prompt = options.interactive ? new prompts_1.InquirerPromptAdapter() : undefined;
|
|
61
|
+
const promptAnswers = prompt
|
|
62
|
+
? await (0, prompts_1.promptCreateProject)(prompt, {
|
|
63
|
+
provided: createProvidedCreateOptions(command),
|
|
64
|
+
preset: preset?.config,
|
|
65
|
+
})
|
|
66
|
+
: undefined;
|
|
67
|
+
const resolved = create_config_resolver_1.createConfigResolver.resolve({
|
|
68
|
+
flags: createExplicitCreateFlags(options, command),
|
|
69
|
+
promptAnswers,
|
|
70
|
+
preset: preset?.config,
|
|
71
|
+
});
|
|
72
|
+
const packageManager = (0, package_manager_1.detectPackageManager)(root, resolved.packageManager);
|
|
73
|
+
const dependencies = (0, dependency_resolver_1.resolveDependencies)(resolved.capabilities);
|
|
74
|
+
const plan = {
|
|
75
|
+
name,
|
|
76
|
+
root,
|
|
77
|
+
framework: resolved.framework,
|
|
78
|
+
architecture: resolved.architecture,
|
|
79
|
+
packageManager,
|
|
80
|
+
capabilities: resolved.capabilities,
|
|
81
|
+
zones: resolved.zones,
|
|
82
|
+
dependencies,
|
|
83
|
+
};
|
|
84
|
+
const config = (0, project_plan_1.createSoapConfigBundle)(plan);
|
|
85
|
+
const files = (0, project_plan_1.createProjectFiles)(plan);
|
|
86
|
+
registerSoapConfigFiles(config);
|
|
87
|
+
if (options.interactive) {
|
|
88
|
+
context.output.info((0, summary_1.formatCreateSummary)(plan));
|
|
89
|
+
if (!options.yes) {
|
|
90
|
+
const confirmed = await prompt.confirm({
|
|
91
|
+
message: "Generate project?",
|
|
92
|
+
defaultValue: true,
|
|
93
|
+
});
|
|
94
|
+
if (!confirmed) {
|
|
95
|
+
context.output.warn("Project generation aborted.");
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
if (context.dryRun) {
|
|
101
|
+
context.output.info(`Project: ${name}`);
|
|
102
|
+
context.output.info(`Target: ${root}`);
|
|
103
|
+
context.output.info(`Files: ${files.length + 4}`);
|
|
104
|
+
}
|
|
105
|
+
await (0, file_writer_1.writePlannedFiles)({
|
|
106
|
+
root,
|
|
107
|
+
files,
|
|
108
|
+
registry: config.registry,
|
|
109
|
+
force: options.force,
|
|
110
|
+
writeNew: options.writeNew,
|
|
111
|
+
onConflict: options.onConflict,
|
|
112
|
+
}, context);
|
|
113
|
+
await (0, write_soap_config_1.writeSoapConfig)(root, config, context);
|
|
114
|
+
const shouldInstall = Boolean(options.install || promptAnswers?.install);
|
|
115
|
+
const shouldGitInit = Boolean(options.gitInit || promptAnswers?.gitInit);
|
|
116
|
+
if (context.dryRun) {
|
|
117
|
+
if (shouldGitInit) {
|
|
118
|
+
context.output.info("Would initialize git repository.");
|
|
119
|
+
}
|
|
120
|
+
if (shouldInstall && !options.skipInstall) {
|
|
121
|
+
context.output.info(`Would run ${(0, package_manager_1.installCommand)(packageManager)}.`);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
if (shouldGitInit) {
|
|
126
|
+
await runPostCreateCommand({
|
|
127
|
+
cwd: root,
|
|
128
|
+
command: "git",
|
|
129
|
+
args: ["init"],
|
|
130
|
+
label: "git init",
|
|
131
|
+
context,
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
if (shouldInstall && !options.skipInstall) {
|
|
135
|
+
const install = (0, package_manager_1.installCommandParts)(packageManager);
|
|
136
|
+
await runPostCreateCommand({
|
|
137
|
+
cwd: root,
|
|
138
|
+
command: install.command,
|
|
139
|
+
args: install.args,
|
|
140
|
+
label: (0, package_manager_1.installCommand)(packageManager),
|
|
141
|
+
context,
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
else if (shouldInstall && options.skipInstall) {
|
|
145
|
+
context.output.warn("Skipping dependency installation because --skip-install was provided.");
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
context.output.success(`Created SoapJS project at ${path_1.default.relative(context.cwd, root) || root}`);
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
exports.registerCreateCommand = registerCreateCommand;
|
|
152
|
+
function createProvidedCreateOptions(command) {
|
|
153
|
+
return {
|
|
154
|
+
framework: isCliOption(command, "framework"),
|
|
155
|
+
architecture: isCliOption(command, "architecture"),
|
|
156
|
+
db: isCliOption(command, "db"),
|
|
157
|
+
auth: isCliOption(command, "auth"),
|
|
158
|
+
messaging: isCliOption(command, "messaging"),
|
|
159
|
+
telemetry: isCliOption(command, "telemetry"),
|
|
160
|
+
docs: isCliOption(command, "docs"),
|
|
161
|
+
contracts: isCliOption(command, "contracts"),
|
|
162
|
+
apiClient: isCliOption(command, "apiClient"),
|
|
163
|
+
realtime: isCliOption(command, "realtime"),
|
|
164
|
+
zones: isCliOption(command, "zones"),
|
|
165
|
+
packageManager: isCliOption(command, "packageManager"),
|
|
166
|
+
install: isCliOption(command, "install") || isCliOption(command, "skipInstall"),
|
|
167
|
+
gitInit: isCliOption(command, "gitInit"),
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
function createExplicitCreateFlags(options, command) {
|
|
171
|
+
return {
|
|
172
|
+
framework: isCliOption(command, "framework") ? options.framework : undefined,
|
|
173
|
+
architecture: isCliOption(command, "architecture") ? options.architecture : undefined,
|
|
174
|
+
db: isCliOption(command, "db") ? options.db : undefined,
|
|
175
|
+
auth: isCliOption(command, "auth") ? options.auth : undefined,
|
|
176
|
+
messaging: isCliOption(command, "messaging") ? options.messaging : undefined,
|
|
177
|
+
telemetry: isCliOption(command, "telemetry") ? options.telemetry : undefined,
|
|
178
|
+
docs: isCliOption(command, "docs") ? options.docs : undefined,
|
|
179
|
+
contracts: isCliOption(command, "contracts") ? options.contracts : undefined,
|
|
180
|
+
apiClient: isCliOption(command, "apiClient") ? options.apiClient : undefined,
|
|
181
|
+
realtime: isCliOption(command, "realtime") ? options.realtime : undefined,
|
|
182
|
+
zones: isCliOption(command, "zones") ? options.zones : undefined,
|
|
183
|
+
packageManager: isCliOption(command, "packageManager") ? options.packageManager : undefined,
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
function isCliOption(command, name) {
|
|
187
|
+
return command.getOptionValueSource(name) === "cli";
|
|
188
|
+
}
|
|
189
|
+
function collect(value, previous) {
|
|
190
|
+
previous.push(value);
|
|
191
|
+
return previous;
|
|
192
|
+
}
|
|
193
|
+
async function runPostCreateCommand(options) {
|
|
194
|
+
options.context.output.info(`Running ${options.label}...`);
|
|
195
|
+
try {
|
|
196
|
+
await runCommand(options.command, options.args, options.cwd, options.context.silent);
|
|
197
|
+
options.context.output.success(`Finished ${options.label}.`);
|
|
198
|
+
}
|
|
199
|
+
catch (error) {
|
|
200
|
+
options.context.output.warn(`${options.label} failed: ${error.message}`);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
function runCommand(command, args, cwd, silent) {
|
|
204
|
+
return new Promise((resolve, reject) => {
|
|
205
|
+
const child = (0, child_process_1.spawn)(command, args, {
|
|
206
|
+
cwd,
|
|
207
|
+
stdio: silent ? "ignore" : "inherit",
|
|
208
|
+
});
|
|
209
|
+
child.on("error", (error) => {
|
|
210
|
+
reject(error);
|
|
211
|
+
});
|
|
212
|
+
child.on("close", (code) => {
|
|
213
|
+
if (code === 0) {
|
|
214
|
+
resolve();
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
reject(new Error(`${command} ${args.join(" ")} exited with code ${code ?? "unknown"}`));
|
|
218
|
+
});
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
function registerSoapConfigFiles(config) {
|
|
222
|
+
const entries = [
|
|
223
|
+
{ path: ".soap/project.json", content: JSON.stringify(config.project, null, 2), type: "config" },
|
|
224
|
+
{ path: ".soap/structure.json", content: JSON.stringify(config.structure, null, 2), type: "config" },
|
|
225
|
+
{ path: ".soap/api.json", content: JSON.stringify(config.api, null, 2), type: "config" },
|
|
226
|
+
];
|
|
227
|
+
for (const entry of entries) {
|
|
228
|
+
(0, registry_service_1.upsertGeneratedFile)(config.registry, {
|
|
229
|
+
path: entry.path,
|
|
230
|
+
type: entry.type,
|
|
231
|
+
hash: (0, registry_service_1.hashContent)(`${entry.content}\n`),
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { PackageManager } from "../../core/command-context";
|
|
2
|
+
import { ApiZone, Architecture, AuthCapability, ContractsCapability, DatabaseCapability, DocsCapability, MessagingCapability, ProjectCapabilities, RealtimeCapability, SoapApiConfig, SoapProjectConfig, SoapRegistryConfig, SoapStructureConfig, TelemetryCapability } from "../../config/schemas/types";
|
|
3
|
+
import { ResolvedDependencies } from "../../dependencies/dependency-resolver";
|
|
4
|
+
import { PlannedFile } from "../../io/file-writer";
|
|
5
|
+
export interface ProjectPlan {
|
|
6
|
+
name: string;
|
|
7
|
+
root: string;
|
|
8
|
+
framework: "express";
|
|
9
|
+
architecture: Architecture;
|
|
10
|
+
packageManager: PackageManager;
|
|
11
|
+
capabilities: ProjectCapabilities;
|
|
12
|
+
zones: ApiZone[];
|
|
13
|
+
dependencies: ResolvedDependencies;
|
|
14
|
+
}
|
|
15
|
+
export interface ProjectConfigBundle {
|
|
16
|
+
project: SoapProjectConfig;
|
|
17
|
+
structure: SoapStructureConfig;
|
|
18
|
+
api: SoapApiConfig;
|
|
19
|
+
registry: SoapRegistryConfig;
|
|
20
|
+
}
|
|
21
|
+
export declare function createDefaultCapabilities(): ProjectCapabilities;
|
|
22
|
+
export declare function createSoapConfigBundle(plan: ProjectPlan): ProjectConfigBundle;
|
|
23
|
+
export declare function parseCsvOption<T extends string>(value: string | string[] | undefined, allowed: readonly T[]): T[];
|
|
24
|
+
export declare const databaseOptions: DatabaseCapability[];
|
|
25
|
+
export declare const authOptions: AuthCapability[];
|
|
26
|
+
export declare const messagingOptions: MessagingCapability[];
|
|
27
|
+
export declare const realtimeOptions: RealtimeCapability[];
|
|
28
|
+
export declare const telemetryOptions: TelemetryCapability[];
|
|
29
|
+
export declare const docsOptions: DocsCapability[];
|
|
30
|
+
export declare const contractsOptions: ContractsCapability[];
|
|
31
|
+
export declare const zonesOptions: ApiZone[];
|
|
32
|
+
export declare function targetRoot(cwd: string, name: string): string;
|
|
33
|
+
export declare function createProjectFiles(plan: ProjectPlan): PlannedFile[];
|
|
34
|
+
export interface ResourceRegistration {
|
|
35
|
+
functionName: string;
|
|
36
|
+
importPath: string;
|
|
37
|
+
}
|
|
38
|
+
export declare function createResourcesTs(resources: ResourceRegistration[]): string;
|
|
39
|
+
export interface ControllerRegistration {
|
|
40
|
+
className: string;
|
|
41
|
+
importPath: string;
|
|
42
|
+
spread?: boolean;
|
|
43
|
+
}
|
|
44
|
+
export declare function createControllersTs(controllers: ControllerRegistration[]): string;
|