indraq_cli 1.5.8 → 1.9.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/LICENSE +21 -21
- package/README.md +1517 -1686
- package/cloud-api/.dockerignore +18 -0
- package/cloud-api/.env.example +14 -0
- package/cloud-api/Dockerfile +19 -0
- package/cloud-api/README.md +141 -0
- package/cloud-api/package-lock.json +2250 -0
- package/cloud-api/package.json +29 -0
- package/cloud-api/sql/001_init.sql +8 -0
- package/cloud-api/sql/002_user_providers_and_project_resources.sql +40 -0
- package/cloud-api/sql/003_environment_infrastructure.sql +19 -0
- package/cloud-api/sql/004_managed_aws_credentials.sql +20 -0
- package/cloud-api/sql/005_project_members_and_resource_grants.sql +22 -0
- package/cloud-api/sql/006_catalog_identity_password_security.sql +96 -0
- package/cloud-api/sql/007_aws_access_key_rotation.sql +16 -0
- package/cloud-api/src/index.ts +1254 -0
- package/cloud-api/tsconfig.json +18 -0
- package/dist/cli/create-program.d.ts.map +1 -1
- package/dist/cli/create-program.js +21 -3
- package/dist/cli/create-program.js.map +1 -1
- package/dist/cli/doctor.command.d.ts +1 -1
- package/dist/cli/doctor.command.d.ts.map +1 -1
- package/dist/cli/doctor.command.js +70 -12
- package/dist/cli/doctor.command.js.map +1 -1
- package/dist/cli/help-content.d.ts +1 -1
- package/dist/cli/help-content.d.ts.map +1 -1
- package/dist/cli/help-content.js +256 -177
- package/dist/cli/help-content.js.map +1 -1
- package/dist/modules/access/commands/access.command.d.ts +3 -0
- package/dist/modules/access/commands/access.command.d.ts.map +1 -0
- package/dist/modules/access/commands/access.command.js +226 -0
- package/dist/modules/access/commands/access.command.js.map +1 -0
- package/dist/modules/access/index.d.ts +3 -0
- package/dist/modules/access/index.d.ts.map +1 -0
- package/dist/modules/access/index.js +11 -0
- package/dist/modules/access/index.js.map +1 -0
- package/dist/modules/aws/commands/configure-aws.command.d.ts +2 -0
- package/dist/modules/aws/commands/configure-aws.command.d.ts.map +1 -0
- package/dist/modules/aws/commands/configure-aws.command.js +7 -0
- package/dist/modules/aws/commands/configure-aws.command.js.map +1 -0
- package/dist/modules/aws/commands/dns.command.d.ts +22 -0
- package/dist/modules/aws/commands/dns.command.d.ts.map +1 -0
- package/dist/modules/aws/commands/dns.command.js +229 -0
- package/dist/modules/aws/commands/dns.command.js.map +1 -0
- package/dist/modules/aws/commands/healthcheck.command.d.ts +22 -0
- package/dist/modules/aws/commands/healthcheck.command.d.ts.map +1 -0
- package/dist/modules/aws/commands/healthcheck.command.js +125 -0
- package/dist/modules/aws/commands/healthcheck.command.js.map +1 -0
- package/dist/modules/aws/commands/iam.command.d.ts +24 -0
- package/dist/modules/aws/commands/iam.command.d.ts.map +1 -0
- package/dist/modules/aws/commands/iam.command.js +219 -0
- package/dist/modules/aws/commands/iam.command.js.map +1 -0
- package/dist/modules/aws/config/aws-config.d.ts +23 -0
- package/dist/modules/aws/config/aws-config.d.ts.map +1 -0
- package/dist/modules/aws/config/aws-config.js +72 -0
- package/dist/modules/aws/config/aws-config.js.map +1 -0
- package/dist/modules/aws/index.d.ts +3 -0
- package/dist/modules/aws/index.d.ts.map +1 -0
- package/dist/modules/aws/index.js +54 -0
- package/dist/modules/aws/index.js.map +1 -0
- package/dist/modules/aws/services/aws-clients.d.ts +9 -0
- package/dist/modules/aws/services/aws-clients.d.ts.map +1 -0
- package/dist/modules/aws/services/aws-clients.js +43 -0
- package/dist/modules/aws/services/aws-clients.js.map +1 -0
- package/dist/modules/aws/services/route53-lookup.service.d.ts +9 -0
- package/dist/modules/aws/services/route53-lookup.service.d.ts.map +1 -0
- package/dist/modules/aws/services/route53-lookup.service.js +57 -0
- package/dist/modules/aws/services/route53-lookup.service.js.map +1 -0
- package/dist/modules/cloud/commands/cloud.command.d.ts +38 -0
- package/dist/modules/cloud/commands/cloud.command.d.ts.map +1 -0
- package/dist/modules/cloud/commands/cloud.command.js +443 -0
- package/dist/modules/cloud/commands/cloud.command.js.map +1 -0
- package/dist/modules/cloud/commands/credentials.command.d.ts +5 -0
- package/dist/modules/cloud/commands/credentials.command.d.ts.map +1 -0
- package/dist/modules/cloud/commands/credentials.command.js +25 -0
- package/dist/modules/cloud/commands/credentials.command.js.map +1 -0
- package/dist/modules/cloud/commands/environment.command.d.ts +6 -0
- package/dist/modules/cloud/commands/environment.command.d.ts.map +1 -0
- package/dist/modules/cloud/commands/environment.command.js +75 -0
- package/dist/modules/cloud/commands/environment.command.js.map +1 -0
- package/dist/modules/cloud/commands/provider.command.d.ts +3 -0
- package/dist/modules/cloud/commands/provider.command.d.ts.map +1 -0
- package/dist/modules/cloud/commands/provider.command.js +193 -0
- package/dist/modules/cloud/commands/provider.command.js.map +1 -0
- package/dist/modules/cloud/config/cloud-config.d.ts +19 -0
- package/dist/modules/cloud/config/cloud-config.d.ts.map +1 -0
- package/dist/modules/cloud/config/cloud-config.js +53 -0
- package/dist/modules/cloud/config/cloud-config.js.map +1 -0
- package/dist/modules/cloud/index.d.ts +3 -0
- package/dist/modules/cloud/index.d.ts.map +1 -0
- package/dist/modules/cloud/index.js +62 -0
- package/dist/modules/cloud/index.js.map +1 -0
- package/dist/modules/cloud/services/cloud-api.service.d.ts +17 -0
- package/dist/modules/cloud/services/cloud-api.service.d.ts.map +1 -0
- package/dist/modules/cloud/services/cloud-api.service.js +61 -0
- package/dist/modules/cloud/services/cloud-api.service.js.map +1 -0
- package/dist/modules/cloud/services/cloud-aws.service.d.ts +23 -0
- package/dist/modules/cloud/services/cloud-aws.service.d.ts.map +1 -0
- package/dist/modules/cloud/services/cloud-aws.service.js +26 -0
- package/dist/modules/cloud/services/cloud-aws.service.js.map +1 -0
- package/dist/modules/cloud/services/cloud-ghcr.service.d.ts +12 -0
- package/dist/modules/cloud/services/cloud-ghcr.service.d.ts.map +1 -0
- package/dist/modules/cloud/services/cloud-ghcr.service.js +31 -0
- package/dist/modules/cloud/services/cloud-ghcr.service.js.map +1 -0
- package/dist/modules/cloud/services/cloud-jenkins.service.d.ts +29 -0
- package/dist/modules/cloud/services/cloud-jenkins.service.d.ts.map +1 -0
- package/dist/modules/cloud/services/cloud-jenkins.service.js +236 -0
- package/dist/modules/cloud/services/cloud-jenkins.service.js.map +1 -0
- package/dist/modules/cloud/services/cloud-npm.service.d.ts +3 -0
- package/dist/modules/cloud/services/cloud-npm.service.d.ts.map +1 -0
- package/dist/modules/cloud/services/cloud-npm.service.js +13 -0
- package/dist/modules/cloud/services/cloud-npm.service.js.map +1 -0
- package/dist/modules/cloud/services/environment.service.d.ts +25 -0
- package/dist/modules/cloud/services/environment.service.d.ts.map +1 -0
- package/dist/modules/cloud/services/environment.service.js +21 -0
- package/dist/modules/cloud/services/environment.service.js.map +1 -0
- package/dist/modules/cloud/services/managed-aws-credential.service.d.ts +36 -0
- package/dist/modules/cloud/services/managed-aws-credential.service.d.ts.map +1 -0
- package/dist/modules/cloud/services/managed-aws-credential.service.js +35 -0
- package/dist/modules/cloud/services/managed-aws-credential.service.js.map +1 -0
- package/dist/modules/cloud/services/project-cloud.service.d.ts +28 -0
- package/dist/modules/cloud/services/project-cloud.service.d.ts.map +1 -0
- package/dist/modules/cloud/services/project-cloud.service.js +50 -0
- package/dist/modules/cloud/services/project-cloud.service.js.map +1 -0
- package/dist/modules/cloud/services/user-provider.service.d.ts +17 -0
- package/dist/modules/cloud/services/user-provider.service.d.ts.map +1 -0
- package/dist/modules/cloud/services/user-provider.service.js +25 -0
- package/dist/modules/cloud/services/user-provider.service.js.map +1 -0
- package/dist/modules/configure/configure.command.d.ts.map +1 -1
- package/dist/modules/configure/configure.command.js +17 -94
- package/dist/modules/configure/configure.command.js.map +1 -1
- package/dist/modules/deploy/commands/build.command.d.ts +1 -2
- package/dist/modules/deploy/commands/build.command.d.ts.map +1 -1
- package/dist/modules/deploy/commands/build.command.js +82 -124
- package/dist/modules/deploy/commands/build.command.js.map +1 -1
- package/dist/modules/deploy/index.d.ts.map +1 -1
- package/dist/modules/deploy/index.js +10 -30
- package/dist/modules/deploy/index.js.map +1 -1
- package/dist/modules/deploy/services/docker.service.d.ts +6 -3
- package/dist/modules/deploy/services/docker.service.d.ts.map +1 -1
- package/dist/modules/deploy/services/docker.service.js +8 -11
- package/dist/modules/deploy/services/docker.service.js.map +1 -1
- package/dist/modules/dockerfile/commands/create-dockerfile.command.d.ts +13 -0
- package/dist/modules/dockerfile/commands/create-dockerfile.command.d.ts.map +1 -0
- package/dist/modules/dockerfile/commands/create-dockerfile.command.js +39 -0
- package/dist/modules/dockerfile/commands/create-dockerfile.command.js.map +1 -0
- package/dist/modules/dockerfile/index.d.ts +3 -0
- package/dist/modules/dockerfile/index.d.ts.map +1 -0
- package/dist/modules/dockerfile/index.js +7 -0
- package/dist/modules/dockerfile/index.js.map +1 -0
- package/dist/modules/jenkins/commands/admin.command.d.ts +22 -0
- package/dist/modules/jenkins/commands/admin.command.d.ts.map +1 -0
- package/dist/modules/jenkins/commands/admin.command.js +128 -0
- package/dist/modules/jenkins/commands/admin.command.js.map +1 -0
- package/dist/modules/jenkins/commands/create-deployment.command.d.ts +13 -0
- package/dist/modules/jenkins/commands/create-deployment.command.d.ts.map +1 -0
- package/dist/modules/jenkins/commands/create-deployment.command.js +115 -0
- package/dist/modules/jenkins/commands/create-deployment.command.js.map +1 -0
- package/dist/modules/jenkins/index.d.ts +3 -0
- package/dist/modules/jenkins/index.d.ts.map +1 -0
- package/dist/modules/jenkins/index.js +28 -0
- package/dist/modules/jenkins/index.js.map +1 -0
- package/dist/modules/mobile/commands/build-mobile.command.d.ts.map +1 -1
- package/dist/modules/mobile/commands/build-mobile.command.js +4 -22
- package/dist/modules/mobile/commands/build-mobile.command.js.map +1 -1
- package/dist/modules/mobile/commands/configure-mobile.command.d.ts +1 -1
- package/dist/modules/mobile/commands/configure-mobile.command.d.ts.map +1 -1
- package/dist/modules/mobile/commands/configure-mobile.command.js +11 -9
- package/dist/modules/mobile/commands/configure-mobile.command.js.map +1 -1
- package/dist/modules/mobile/services/jenkins-mobile.service.d.ts +2 -2
- package/dist/modules/mobile/services/jenkins-mobile.service.d.ts.map +1 -1
- package/dist/modules/mobile/services/jenkins-mobile.service.js +1 -2
- package/dist/modules/mobile/services/jenkins-mobile.service.js.map +1 -1
- package/dist/modules/mobile/services/project.service.d.ts +2 -2
- package/dist/modules/mobile/services/project.service.d.ts.map +1 -1
- package/dist/modules/prebuild/commands/prebuild.command.d.ts +13 -0
- package/dist/modules/prebuild/commands/prebuild.command.d.ts.map +1 -0
- package/dist/modules/prebuild/commands/prebuild.command.js +507 -0
- package/dist/modules/prebuild/commands/prebuild.command.js.map +1 -0
- package/dist/modules/prebuild/index.d.ts +3 -0
- package/dist/modules/prebuild/index.d.ts.map +1 -0
- package/dist/modules/prebuild/index.js +19 -0
- package/dist/modules/prebuild/index.js.map +1 -0
- package/dist/modules/proxy/commands/configure-proxy.command.d.ts +2 -0
- package/dist/modules/proxy/commands/configure-proxy.command.d.ts.map +1 -0
- package/dist/modules/proxy/commands/configure-proxy.command.js +7 -0
- package/dist/modules/proxy/commands/configure-proxy.command.js.map +1 -0
- package/dist/modules/proxy/commands/npm-user.command.d.ts +28 -0
- package/dist/modules/proxy/commands/npm-user.command.d.ts.map +1 -0
- package/dist/modules/proxy/commands/npm-user.command.js +77 -0
- package/dist/modules/proxy/commands/npm-user.command.js.map +1 -0
- package/dist/modules/proxy/commands/proxy.command.d.ts +22 -0
- package/dist/modules/proxy/commands/proxy.command.d.ts.map +1 -0
- package/dist/modules/proxy/commands/proxy.command.js +173 -0
- package/dist/modules/proxy/commands/proxy.command.js.map +1 -0
- package/dist/modules/proxy/config/npm-config.d.ts +17 -0
- package/dist/modules/proxy/config/npm-config.d.ts.map +1 -0
- package/dist/modules/proxy/config/npm-config.js +50 -0
- package/dist/modules/proxy/config/npm-config.js.map +1 -0
- package/dist/modules/proxy/index.d.ts +3 -0
- package/dist/modules/proxy/index.d.ts.map +1 -0
- package/dist/modules/proxy/index.js +21 -0
- package/dist/modules/proxy/index.js.map +1 -0
- package/dist/modules/proxy/services/npm-api.service.d.ts +76 -0
- package/dist/modules/proxy/services/npm-api.service.d.ts.map +1 -0
- package/dist/modules/proxy/services/npm-api.service.js +82 -0
- package/dist/modules/proxy/services/npm-api.service.js.map +1 -0
- package/dist/modules/scaffold/commands/init.command.d.ts +6 -0
- package/dist/modules/scaffold/commands/init.command.d.ts.map +1 -0
- package/dist/modules/scaffold/commands/init.command.js +193 -0
- package/dist/modules/scaffold/commands/init.command.js.map +1 -0
- package/dist/modules/scaffold/config/project-metadata.d.ts +9 -0
- package/dist/modules/scaffold/config/project-metadata.d.ts.map +1 -0
- package/dist/modules/scaffold/config/project-metadata.js +75 -0
- package/dist/modules/scaffold/config/project-metadata.js.map +1 -0
- package/dist/modules/scaffold/index.d.ts +3 -0
- package/dist/modules/scaffold/index.d.ts.map +1 -0
- package/dist/modules/scaffold/index.js +7 -0
- package/dist/modules/scaffold/index.js.map +1 -0
- package/dist/modules/scaffold/services/docker-template.service.d.ts +3 -0
- package/dist/modules/scaffold/services/docker-template.service.d.ts.map +1 -0
- package/dist/modules/scaffold/services/docker-template.service.js +131 -0
- package/dist/modules/scaffold/services/docker-template.service.js.map +1 -0
- package/dist/modules/scaffold/services/filesystem.service.d.ts +7 -0
- package/dist/modules/scaffold/services/filesystem.service.d.ts.map +1 -0
- package/dist/modules/scaffold/services/filesystem.service.js +97 -0
- package/dist/modules/scaffold/services/filesystem.service.js.map +1 -0
- package/dist/modules/scaffold/services/project-template.service.d.ts +4 -0
- package/dist/modules/scaffold/services/project-template.service.d.ts.map +1 -0
- package/dist/modules/scaffold/services/project-template.service.js +82 -0
- package/dist/modules/scaffold/services/project-template.service.js.map +1 -0
- package/dist/modules/scaffold/types.d.ts +65 -0
- package/dist/modules/scaffold/types.d.ts.map +1 -0
- package/dist/modules/scaffold/types.js +3 -0
- package/dist/modules/scaffold/types.js.map +1 -0
- package/dist/modules/users/commands/user.command.d.ts +22 -0
- package/dist/modules/users/commands/user.command.d.ts.map +1 -0
- package/dist/modules/users/commands/user.command.js +350 -0
- package/dist/modules/users/commands/user.command.js.map +1 -0
- package/dist/modules/users/index.d.ts +3 -0
- package/dist/modules/users/index.d.ts.map +1 -0
- package/dist/modules/users/index.js +34 -0
- package/dist/modules/users/index.js.map +1 -0
- package/dist/modules/users/providers/aws-user.provider.d.ts +11 -0
- package/dist/modules/users/providers/aws-user.provider.d.ts.map +1 -0
- package/dist/modules/users/providers/aws-user.provider.js +129 -0
- package/dist/modules/users/providers/aws-user.provider.js.map +1 -0
- package/dist/modules/users/providers/jenkins-user.provider.d.ts +6 -0
- package/dist/modules/users/providers/jenkins-user.provider.d.ts.map +1 -0
- package/dist/modules/users/providers/jenkins-user.provider.js +97 -0
- package/dist/modules/users/providers/jenkins-user.provider.js.map +1 -0
- package/dist/modules/users/providers/npm-user.provider.d.ts +4 -0
- package/dist/modules/users/providers/npm-user.provider.d.ts.map +1 -0
- package/dist/modules/users/providers/npm-user.provider.js +47 -0
- package/dist/modules/users/providers/npm-user.provider.js.map +1 -0
- package/dist/shared/config/config-files.d.ts.map +1 -1
- package/dist/shared/config/config-files.js +14 -10
- package/dist/shared/config/config-files.js.map +1 -1
- package/dist/shared/github/github-api.service.d.ts.map +1 -1
- package/dist/shared/github/github-api.service.js +25 -37
- package/dist/shared/github/github-api.service.js.map +1 -1
- package/dist/shared/jenkins/jenkins.service.d.ts +2 -0
- package/dist/shared/jenkins/jenkins.service.d.ts.map +1 -1
- package/dist/shared/jenkins/jenkins.service.js +30 -1
- package/dist/shared/jenkins/jenkins.service.js.map +1 -1
- package/dist/shared/listing.d.ts +9 -0
- package/dist/shared/listing.d.ts.map +1 -0
- package/dist/shared/listing.js +29 -0
- package/dist/shared/listing.js.map +1 -0
- package/docs/ARCHITECTURE.md +29 -0
- package/docs/CREATE-DEPLOYMENT-reference.groovy +1105 -0
- package/package.json +76 -59
- package/templates/jenkins/CREATE-DEPLOYMENT.groovy +1105 -0
- package/templates/jenkins/Jenkinsfile-Mobile-App +759 -759
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.runMobileGenerator = exports.directoryHasFiles = exports.initializeGit = exports.installDependencies = exports.writeArtifacts = exports.assertSafeInitTarget = void 0;
|
|
4
|
+
const node_fs_1 = require("node:fs");
|
|
5
|
+
const node_path_1 = require("node:path");
|
|
6
|
+
const node_child_process_1 = require("node:child_process");
|
|
7
|
+
const markers = ['package.json', 'src', 'app', 'server.js', 'server.ts', 'next.config.js', 'next.config.mjs', 'vite.config.js', 'vite.config.ts', 'angular.json', 'android', 'ios'];
|
|
8
|
+
const assertSafeInitTarget = (target) => {
|
|
9
|
+
if (!(0, node_fs_1.existsSync)(target))
|
|
10
|
+
return;
|
|
11
|
+
const existing = new Set((0, node_fs_1.readdirSync)(target));
|
|
12
|
+
const found = markers.filter((m) => existing.has(m));
|
|
13
|
+
if (found.length)
|
|
14
|
+
throw new Error(`Initialization aborted: ${target} already contains application code (${found.join(', ')}). IndraQ never overwrites an existing application.`);
|
|
15
|
+
};
|
|
16
|
+
exports.assertSafeInitTarget = assertSafeInitTarget;
|
|
17
|
+
const writeArtifacts = (root, files, overwrite = false) => {
|
|
18
|
+
(0, node_fs_1.mkdirSync)(root, { recursive: true });
|
|
19
|
+
for (const [relative, content] of Object.entries(files)) {
|
|
20
|
+
const path = (0, node_path_1.join)(root, relative);
|
|
21
|
+
if ((0, node_fs_1.existsSync)(path) && !overwrite)
|
|
22
|
+
throw new Error(`Refusing to overwrite ${path}.`);
|
|
23
|
+
(0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(path), { recursive: true });
|
|
24
|
+
(0, node_fs_1.writeFileSync)(path, content, 'utf8');
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
exports.writeArtifacts = writeArtifacts;
|
|
28
|
+
const npmCliPath = () => {
|
|
29
|
+
const candidates = [
|
|
30
|
+
process.env.npm_execpath,
|
|
31
|
+
(0, node_path_1.join)((0, node_path_1.dirname)(process.execPath), 'node_modules', 'npm', 'bin', 'npm-cli.js')
|
|
32
|
+
].filter((value) => !!value);
|
|
33
|
+
return candidates.find((value) => (0, node_fs_1.existsSync)(value));
|
|
34
|
+
};
|
|
35
|
+
const runNpm = (cwd, args, stdio = 'inherit') => {
|
|
36
|
+
// Prefer running npm's JS entrypoint with the exact Node executable that is
|
|
37
|
+
// already running IndraQ. This avoids Windows .cmd/PATH resolution problems
|
|
38
|
+
// seen when a globally linked CLI starts npm from PowerShell.
|
|
39
|
+
const cli = npmCliPath();
|
|
40
|
+
if (cli)
|
|
41
|
+
return (0, node_child_process_1.spawnSync)(process.execPath, [cli, ...args], { cwd, stdio, encoding: 'utf8', windowsHide: true });
|
|
42
|
+
if (process.platform === 'win32') {
|
|
43
|
+
const shell = process.env.ComSpec || process.env.COMSPEC || 'cmd.exe';
|
|
44
|
+
return (0, node_child_process_1.spawnSync)(shell, ['/d', '/s', '/c', 'npm', ...args], { cwd, stdio, encoding: 'utf8', windowsHide: true });
|
|
45
|
+
}
|
|
46
|
+
return (0, node_child_process_1.spawnSync)('npm', args, { cwd, stdio, encoding: 'utf8' });
|
|
47
|
+
};
|
|
48
|
+
const installDependencies = (root) => {
|
|
49
|
+
if (!(0, node_fs_1.existsSync)((0, node_path_1.join)(root, 'package.json'))) {
|
|
50
|
+
process.stderr.write(`⚠ npm install skipped in ${root}: package.json is missing.\n`);
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
const version = runNpm(root, ['--version'], 'pipe');
|
|
54
|
+
if (version.error || version.status !== 0) {
|
|
55
|
+
process.stderr.write(`⚠ npm is not callable from IndraQ in ${root}: ${version.error?.message || version.stderr || 'unknown error'}.\n`);
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
const attempts = [
|
|
59
|
+
['install', '--no-audit', '--no-fund', '--loglevel=error'],
|
|
60
|
+
['install', '--no-audit', '--no-fund', '--legacy-peer-deps', '--loglevel=error']
|
|
61
|
+
];
|
|
62
|
+
let lastStatus = null;
|
|
63
|
+
for (const [index, args] of attempts.entries()) {
|
|
64
|
+
console.log(`Installing dependencies in ${root} (npm ${String(version.stdout || '').trim()})...`);
|
|
65
|
+
const result = runNpm(root, args, 'inherit');
|
|
66
|
+
if (result.error) {
|
|
67
|
+
process.stderr.write(`⚠ Unable to start npm in ${root}: ${result.error.message}.\n`);
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
if (result.status === 0 && (0, node_fs_1.existsSync)((0, node_path_1.join)(root, 'node_modules')))
|
|
71
|
+
return true;
|
|
72
|
+
lastStatus = result.status;
|
|
73
|
+
if (index < attempts.length - 1)
|
|
74
|
+
process.stderr.write(`⚠ npm install attempt ${index + 1} failed in ${root}; retrying with --legacy-peer-deps...\n`);
|
|
75
|
+
}
|
|
76
|
+
process.stderr.write(`⚠ npm install failed in ${root} after ${attempts.length} attempts (exit ${lastStatus ?? 'unknown'}). IndraQ will keep the generated project and Cloud/infrastructure setup.\n`);
|
|
77
|
+
return false;
|
|
78
|
+
};
|
|
79
|
+
exports.installDependencies = installDependencies;
|
|
80
|
+
const initializeGit = (root) => { if ((0, node_fs_1.existsSync)((0, node_path_1.join)(root, '.git')))
|
|
81
|
+
return; const result = (0, node_child_process_1.spawnSync)('git', ['init'], { cwd: root, stdio: 'ignore' }); if (result.status !== 0)
|
|
82
|
+
process.stderr.write('⚠ Git initialization was skipped because Git was unavailable.\n'); };
|
|
83
|
+
exports.initializeGit = initializeGit;
|
|
84
|
+
const directoryHasFiles = (root) => (0, node_fs_1.existsSync)(root) && (0, node_fs_1.statSync)(root).isDirectory() && (0, node_fs_1.readdirSync)(root).length > 0;
|
|
85
|
+
exports.directoryHasFiles = directoryHasFiles;
|
|
86
|
+
const runMobileGenerator = (target, name, framework, version) => {
|
|
87
|
+
const args = framework === 'expo'
|
|
88
|
+
? ['--yes', `create-expo-app@${version}`, target, '--template', 'blank-typescript']
|
|
89
|
+
: ['--yes', `@react-native-community/cli@${version}`, 'init', name.replace(/[^A-Za-z0-9]/g, ''), '--directory', target];
|
|
90
|
+
const result = process.platform === 'win32'
|
|
91
|
+
? (0, node_child_process_1.spawnSync)(process.env.ComSpec || process.env.COMSPEC || 'cmd.exe', ['/d', '/s', '/c', 'npx', ...args], { stdio: 'inherit', windowsHide: true })
|
|
92
|
+
: (0, node_child_process_1.spawnSync)('npx', args, { stdio: 'inherit' });
|
|
93
|
+
if (result.error || result.status !== 0)
|
|
94
|
+
throw new Error(`${framework} generator failed. Check network access and the requested generator version.`);
|
|
95
|
+
};
|
|
96
|
+
exports.runMobileGenerator = runMobileGenerator;
|
|
97
|
+
//# sourceMappingURL=filesystem.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filesystem.service.js","sourceRoot":"","sources":["../../../../src/modules/scaffold/services/filesystem.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { DatabaseConfig, Integration } from '../types';
|
|
2
|
+
export declare const frontendFiles: (name: string, framework: "vite" | "react" | "next" | "vanilla") => Record<string, string>;
|
|
3
|
+
export declare const backendFiles: (name: string, port: number, db: DatabaseConfig, features: Integration[]) => Record<string, string>;
|
|
4
|
+
//# sourceMappingURL=project-template.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-template.service.d.ts","sourceRoot":"","sources":["../../../../src/modules/scaffold/services/project-template.service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAW5D,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,EAAE,WAAW,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,KAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAOlH,CAAC;AAGH,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,EAAE,MAAM,MAAM,EAAE,IAAI,cAAc,EAAE,UAAU,WAAW,EAAE,KAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CA0B3H,CAAC"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.backendFiles = exports.frontendFiles = void 0;
|
|
4
|
+
const node_crypto_1 = require("node:crypto");
|
|
5
|
+
const packageJson = (value) => `${JSON.stringify(value, null, 2)}\n`;
|
|
6
|
+
const frontendCoreFiles = (name, framework) => {
|
|
7
|
+
if (framework === 'vanilla')
|
|
8
|
+
return { 'package.json': packageJson({ name, private: true, scripts: { start: 'npx serve -s . -l 3000' }, dependencies: { serve: '^14.2.4' } }), 'index.html': `<!doctype html><html><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>${name}</title></head><body><main><h1>${name}</h1><p>Generated by IndraQ CLI.</p></main></body></html>\n` };
|
|
9
|
+
if (framework === 'next')
|
|
10
|
+
return { 'package.json': packageJson({ name, private: true, scripts: { dev: 'next dev', build: 'next build', start: 'next start' }, dependencies: { next: '^15.5.0', react: '^19.1.0', 'react-dom': '^19.1.0' }, devDependencies: { typescript: '^5.9.0', '@types/node': '^24.0.0', '@types/react': '^19.1.0' } }), 'next.config.mjs': `export default { output: 'standalone' };\n`, 'app/layout.tsx': `export default function Layout({ children }: { children: React.ReactNode }) { return <html><body>{children}</body></html>; }\n`, 'app/page.tsx': `export default function Home() { return <main><h1>${name}</h1><p>Generated by IndraQ CLI.</p></main>; }\n`, 'public/.gitkeep': '' };
|
|
11
|
+
if (framework === 'react')
|
|
12
|
+
return { 'package.json': packageJson({ name, private: true, scripts: { dev: 'vite', start: 'vite', build: 'vite build', preview: 'vite preview' }, dependencies: { react: '^19.1.0', 'react-dom': '^19.1.0' }, devDependencies: { '@vitejs/plugin-react': '^5.0.0', vite: '^7.1.0' } }), 'index.html': `<div id="root"></div><script type="module" src="/src/main.jsx"></script>\n`, 'src/main.jsx': `import React from 'react'; import { createRoot } from 'react-dom/client'; import './style.css'; createRoot(document.getElementById('root')).render(<main><h1>${name}</h1><p>Generated by IndraQ CLI.</p></main>);\n`, 'src/style.css': `body{font-family:system-ui;margin:0;padding:3rem;background:#081b2c;color:#fff}\n`, 'vite.config.js': `import { defineConfig } from 'vite'; import react from '@vitejs/plugin-react'; export default defineConfig({ plugins: [react()] });\n` };
|
|
13
|
+
const vite = framework === 'vite';
|
|
14
|
+
return { 'package.json': packageJson({ name, private: true, scripts: vite ? { dev: 'vite', build: 'tsc -b && vite build', preview: 'vite preview' } : { start: 'react-scripts start', build: 'react-scripts build', test: 'react-scripts test' }, dependencies: { react: '^19.1.0', 'react-dom': '^19.1.0', ...(!vite ? { 'react-scripts': '^5.0.1' } : {}) }, devDependencies: vite ? { '@vitejs/plugin-react': '^5.0.0', vite: '^7.1.0', typescript: '^5.9.0', '@types/react': '^19.1.0', '@types/react-dom': '^19.1.0' } : {} }), 'index.html': `<div id="root"></div><script type="module" src="/src/main.tsx"></script>\n`, 'src/main.tsx': `import React from 'react'; import { createRoot } from 'react-dom/client'; import './style.css'; createRoot(document.getElementById('root')!).render(<main><h1>${name}</h1><p>Generated by IndraQ CLI.</p></main>);\n`, 'src/style.css': `body{font-family:system-ui;margin:0;padding:3rem;background:#081b2c;color:#fff}\n`, ...(vite ? { 'vite.config.ts': `import { defineConfig } from 'vite'; import react from '@vitejs/plugin-react'; export default defineConfig({ plugins: [react()] });\n`, 'tsconfig.json': packageJson({ compilerOptions: { target: 'ES2022', lib: ['DOM', 'ES2022'], jsx: 'react-jsx', module: 'ESNext', moduleResolution: 'Bundler', strict: true, noEmit: true }, include: ['src'] }) } : {}) };
|
|
15
|
+
};
|
|
16
|
+
const frontendFiles = (name, framework) => ({
|
|
17
|
+
'.env.development': `${framework === 'vite' ? 'VITE_' : framework === 'react' ? 'REACT_APP_' : framework === 'next' ? 'NEXT_PUBLIC_' : ''}APP_ENV=development\n`,
|
|
18
|
+
'.env.staging': `${framework === 'vite' ? 'VITE_' : framework === 'react' ? 'REACT_APP_' : framework === 'next' ? 'NEXT_PUBLIC_' : ''}APP_ENV=staging\n`,
|
|
19
|
+
'.env.production': `${framework === 'vite' ? 'VITE_' : framework === 'react' ? 'REACT_APP_' : framework === 'next' ? 'NEXT_PUBLIC_' : ''}APP_ENV=production\n`,
|
|
20
|
+
'.env.example': `${framework === 'vite' ? 'VITE_' : framework === 'react' ? 'REACT_APP_' : framework === 'next' ? 'NEXT_PUBLIC_' : ''}APP_ENV=development\n`,
|
|
21
|
+
'.gitignore': 'node_modules\ndist\nbuild\n.next\n.env.development\n.env.staging\n.env.production\n',
|
|
22
|
+
...frontendCoreFiles(name, framework)
|
|
23
|
+
});
|
|
24
|
+
exports.frontendFiles = frontendFiles;
|
|
25
|
+
const databaseDeps = (db) => db.kind === 'postgresql' ? { pg: '^8.16.0' } : db.kind === 'mongodb' ? { mongoose: '^8.18.0' } : db.kind === 'sqlserver' ? { mssql: '^11.0.1' } : {};
|
|
26
|
+
const backendFiles = (name, port, db, features) => {
|
|
27
|
+
if (features.includes('bullmq') && !features.includes('redis'))
|
|
28
|
+
features.push('redis');
|
|
29
|
+
const deps = { express: '^5.1.0', dotenv: '^17.2.0', ...databaseDeps(db) };
|
|
30
|
+
if (features.includes('redis'))
|
|
31
|
+
deps.ioredis = '^5.7.0';
|
|
32
|
+
if (features.includes('bullmq') || features.includes('worker'))
|
|
33
|
+
deps.bullmq = '^5.58.0';
|
|
34
|
+
if (features.includes('jwt'))
|
|
35
|
+
deps.jsonwebtoken = '^9.0.2';
|
|
36
|
+
if (features.includes('swagger')) {
|
|
37
|
+
deps['swagger-ui-express'] = '^5.0.1';
|
|
38
|
+
deps['swagger-jsdoc'] = '^6.2.8';
|
|
39
|
+
}
|
|
40
|
+
if (features.includes('websockets'))
|
|
41
|
+
deps.ws = '^8.18.3';
|
|
42
|
+
if (features.includes('s3'))
|
|
43
|
+
deps['@aws-sdk/client-s3'] = '^3.883.0';
|
|
44
|
+
if (features.includes('mail'))
|
|
45
|
+
deps.nodemailer = '^7.0.6';
|
|
46
|
+
if (features.includes('cron'))
|
|
47
|
+
deps['node-cron'] = '^4.2.1';
|
|
48
|
+
const env = `NODE_ENV=development\nPORT=${port}\n${db.kind !== 'none' ? `DB_TYPE=${db.kind}\nDB_HOST=${db.host}\nDB_PORT=${db.port}\nDB_USER=${db.username}\nDB_PASSWORD=${db.password}\nDB_NAME=${db.database}\n` : ''}${features.includes('redis') ? 'REDIS_URL=redis://localhost:6379\n' : ''}${features.includes('jwt') ? `JWT_SECRET=${(0, node_crypto_1.randomBytes)(48).toString('base64url')}\n` : ''}${features.includes('s3') ? 'S3_REGION=us-east-1\nS3_BUCKET=\nS3_ACCESS_KEY_ID=\nS3_SECRET_ACCESS_KEY=\n' : ''}${features.includes('mail') ? 'SMTP_HOST=\nSMTP_PORT=587\nSMTP_USER=\nSMTP_PASSWORD=\n' : ''}`;
|
|
49
|
+
const example = env.replace(/^DB_PASSWORD=.*$/m, 'DB_PASSWORD=<secret>').replace(/^JWT_SECRET=.*$/m, 'JWT_SECRET=<generate-a-secure-secret>').replace(/^(S3_ACCESS_KEY_ID|S3_SECRET_ACCESS_KEY|SMTP_PASSWORD)=.*$/gm, '$1=<secret>');
|
|
50
|
+
const appImports = `${features.includes('swagger') ? "import swaggerUi from 'swagger-ui-express'; import swaggerJsdoc from 'swagger-jsdoc';" : ''}`;
|
|
51
|
+
const appWiring = `${features.includes('swagger') ? "app.use('/docs', swaggerUi.serve, swaggerUi.setup(swaggerJsdoc({ definition: { openapi: '3.0.0', info: { title: 'API', version: '1.0.0' } }, apis: ['./src/routes/*.ts'] })));" : ''}`;
|
|
52
|
+
const indexWiring = `${features.includes('websockets') ? "const wss = new WebSocketServer({ server }); wss.on('connection', socket => socket.send(JSON.stringify({ type: 'connected' })));" : ''}${features.includes('cron') ? "cron.schedule('0 * * * *', () => console.log('Scheduled task tick'));" : ''}`;
|
|
53
|
+
const files = { 'package.json': packageJson({ name, private: true, scripts: { dev: 'tsx watch src/index.ts', build: 'tsc', start: 'node dist/index.js', ...(features.includes('worker') ? { worker: 'tsx src/workers/queue.worker.ts' } : {}) }, dependencies: deps, devDependencies: { typescript: '^5.9.0', tsx: '^4.20.0', '@types/node': '^24.0.0', '@types/express': '^5.0.0', ...(features.includes('websockets') ? { '@types/ws': '^8.18.1' } : {}), ...(features.includes('jwt') ? { '@types/jsonwebtoken': '^9.0.10' } : {}) } }), 'tsconfig.json': packageJson({ compilerOptions: { target: 'ES2022', module: 'NodeNext', moduleResolution: 'NodeNext', rootDir: 'src', outDir: 'dist', strict: true, esModuleInterop: true, skipLibCheck: true }, include: ['src/**/*.ts'] }), 'src/app.ts': `import express from 'express'; ${appImports}\nimport healthRouter from './routes/health.routes.js';\nconst app = express(); app.use(express.json()); app.use('/health', healthRouter); ${appWiring}\nexport default app;\n`, 'src/index.ts': `import 'dotenv/config'; import app from './app.js'; import { createServer } from 'node:http'; ${features.includes('websockets') ? "import { WebSocketServer } from 'ws';" : ''} ${features.includes('cron') ? "import cron from 'node-cron';" : ''}\nconst port = Number(process.env.PORT || ${port}); const server = createServer(app); ${indexWiring}\nserver.listen(port, () => console.log(\`API listening on ${'${port}'}\`));\n`, 'src/controllers/health.controller.ts': `import type { Request, Response } from 'express'; export const health = (_req: Request, res: Response) => res.json({ status: 'ok', uptime: process.uptime() });\n`, 'src/routes/health.routes.ts': `import { Router } from 'express'; import { health } from '../controllers/health.controller.js'; const router = Router(); router.get('/', health); export default router;\n`, 'src/services/.gitkeep': '', 'src/models/.gitkeep': '', 'src/middlewares/error.middleware.ts': `import type { NextFunction, Request, Response } from 'express'; export const errorHandler = (error: Error, _req: Request, res: Response, _next: NextFunction) => res.status(500).json({ error: error.message });\n`, 'src/config/.gitkeep': '', 'src/utils/.gitkeep': '', '.env.development': env, '.env.staging': env.replace('NODE_ENV=development', 'NODE_ENV=staging'), '.env.production': env.replace('NODE_ENV=development', 'NODE_ENV=production'), '.env.example': example, '.gitignore': `node_modules\ndist\n.env.development\n.env.staging\n.env.production\n`, '.dockerignore': `node_modules\ndist\n.git\ncoverage\n` };
|
|
54
|
+
files['.env'] = env;
|
|
55
|
+
files['.gitignore'] = `${files['.gitignore'] || ''}.env\n`;
|
|
56
|
+
if (db.kind !== 'none') {
|
|
57
|
+
if (db.kind === 'postgresql')
|
|
58
|
+
files['src/config/database.ts'] = `// @ts-expect-error pg types are optional at scaffold time\nimport pg from 'pg'; const pool = new pg.Pool({ host: process.env.DB_HOST, port: Number(process.env.DB_PORT), user: process.env.DB_USER, password: process.env.DB_PASSWORD, database: process.env.DB_NAME }); export const connectDatabase = async () => { await pool.query('SELECT 1'); }; export { pool };\n`;
|
|
59
|
+
if (db.kind === 'mongodb')
|
|
60
|
+
files['src/config/database.ts'] = `import mongoose from 'mongoose'; export const connectDatabase = async () => { const uri = \`mongodb://${'${process.env.DB_USER}'}:${'${encodeURIComponent(process.env.DB_PASSWORD || "")}'}@${'${process.env.DB_HOST}'}:${'${process.env.DB_PORT}'}/${'${process.env.DB_NAME}'}\`; await mongoose.connect(uri); };\n`;
|
|
61
|
+
if (db.kind === 'sqlserver')
|
|
62
|
+
files['src/config/database.ts'] = `import sql from 'mssql'; export const connectDatabase = async () => { await sql.connect({ server: process.env.DB_HOST!, port: Number(process.env.DB_PORT), user: process.env.DB_USER!, password: process.env.DB_PASSWORD!, database: process.env.DB_NAME!, options: { encrypt: true, trustServerCertificate: false } }); };\n`;
|
|
63
|
+
files['src/index.ts'] = `import 'dotenv/config'; import app from './app.js'; import { createServer } from 'node:http'; import { connectDatabase } from './config/database.js'; ${features.includes('websockets') ? "import { WebSocketServer } from 'ws';" : ''} ${features.includes('cron') ? "import cron from 'node-cron';" : ''}\nconst port = Number(process.env.PORT || ${port}); const server = createServer(app); ${indexWiring}\nconst start = async () => { await connectDatabase(); server.listen(port, () => console.log(\`API listening on ${'${port}'}\`)); }; void start();\n`;
|
|
64
|
+
}
|
|
65
|
+
if (features.includes('redis'))
|
|
66
|
+
files['src/config/redis.ts'] = `import Redis from 'ioredis'; export const redis = new Redis(process.env.REDIS_URL || 'redis://localhost:6379');\n`;
|
|
67
|
+
if (features.includes('bullmq'))
|
|
68
|
+
files['src/services/queue.service.ts'] = `import { Queue } from 'bullmq'; import { redis } from '../config/redis.js'; export const jobs = new Queue('jobs', { connection: redis });\n`;
|
|
69
|
+
if (features.includes('worker'))
|
|
70
|
+
files['src/workers/queue.worker.ts'] = `import { Worker } from 'bullmq'; import { redis } from '../config/redis.js'; new Worker('jobs', async job => console.log('Processing', job.id), { connection: redis });\n`;
|
|
71
|
+
if (features.includes('jwt'))
|
|
72
|
+
files['src/utils/jwt.ts'] = `import jwt from 'jsonwebtoken'; export const signToken = (subject: string) => jwt.sign({}, process.env.JWT_SECRET!, { subject, expiresIn: '1h' });\n`;
|
|
73
|
+
if (features.includes('s3'))
|
|
74
|
+
files['src/config/s3.ts'] = `import { S3Client } from '@aws-sdk/client-s3'; export const s3 = new S3Client({ region: process.env.S3_REGION, credentials: process.env.S3_ACCESS_KEY_ID && process.env.S3_SECRET_ACCESS_KEY ? { accessKeyId: process.env.S3_ACCESS_KEY_ID, secretAccessKey: process.env.S3_SECRET_ACCESS_KEY } : undefined });\n`;
|
|
75
|
+
if (features.includes('mail'))
|
|
76
|
+
files['src/services/mail.service.ts'] = `import nodemailer from 'nodemailer'; export const mail = nodemailer.createTransport({ host: process.env.SMTP_HOST, port: Number(process.env.SMTP_PORT || 587), secure: false, auth: process.env.SMTP_USER ? { user: process.env.SMTP_USER, pass: process.env.SMTP_PASSWORD } : undefined });\n`;
|
|
77
|
+
if (features.includes('swagger') || features.includes('mail'))
|
|
78
|
+
files['src/types/external.d.ts'] = `${features.includes('swagger') ? "declare module 'swagger-ui-express';\ndeclare module 'swagger-jsdoc';\n" : ''}${features.includes('mail') ? "declare module 'nodemailer';\n" : ''}`;
|
|
79
|
+
return files;
|
|
80
|
+
};
|
|
81
|
+
exports.backendFiles = backendFiles;
|
|
82
|
+
//# sourceMappingURL=project-template.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-template.service.js","sourceRoot":"","sources":["../../../../src/modules/scaffold/services/project-template.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
export type ProjectKind = 'frontend' | 'backend' | 'fullstack' | 'mobile';
|
|
2
|
+
export type WebFramework = 'vite' | 'react' | 'next' | 'vanilla' | 'express';
|
|
3
|
+
export type MobileFramework = 'expo' | 'react-native';
|
|
4
|
+
export type DatabaseKind = 'none' | 'postgresql' | 'mongodb' | 'sqlserver';
|
|
5
|
+
export type Integration = 'redis' | 'bullmq' | 'jwt' | 'swagger' | 'websockets' | 's3' | 'mail' | 'cron' | 'worker';
|
|
6
|
+
export interface ProjectComponent {
|
|
7
|
+
name: string;
|
|
8
|
+
kind: 'frontend' | 'backend';
|
|
9
|
+
path: string;
|
|
10
|
+
framework: WebFramework;
|
|
11
|
+
appPort: number;
|
|
12
|
+
containerPort: number;
|
|
13
|
+
healthEndpoint: string;
|
|
14
|
+
imageName: string;
|
|
15
|
+
buildOutput?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface ProjectMetadata {
|
|
18
|
+
schemaVersion: 1 | 2;
|
|
19
|
+
projectId?: string;
|
|
20
|
+
name: string;
|
|
21
|
+
kind: ProjectKind;
|
|
22
|
+
framework: WebFramework | MobileFramework;
|
|
23
|
+
nodeVersion: string;
|
|
24
|
+
appPort: number;
|
|
25
|
+
containerPort: number;
|
|
26
|
+
healthEndpoint: string;
|
|
27
|
+
imageName: string;
|
|
28
|
+
buildOutput?: string;
|
|
29
|
+
components?: ProjectComponent[];
|
|
30
|
+
createdAt: string;
|
|
31
|
+
}
|
|
32
|
+
export interface DockerSpec {
|
|
33
|
+
framework: WebFramework;
|
|
34
|
+
nodeVersion: string;
|
|
35
|
+
appPort: number;
|
|
36
|
+
buildOutput?: string;
|
|
37
|
+
healthEndpoint?: string;
|
|
38
|
+
compose?: boolean;
|
|
39
|
+
}
|
|
40
|
+
export interface DatabaseConfig {
|
|
41
|
+
kind: DatabaseKind;
|
|
42
|
+
host?: string;
|
|
43
|
+
port?: number;
|
|
44
|
+
username?: string;
|
|
45
|
+
password?: string;
|
|
46
|
+
database?: string;
|
|
47
|
+
}
|
|
48
|
+
export interface InitSpec {
|
|
49
|
+
target: string;
|
|
50
|
+
name: string;
|
|
51
|
+
kind: ProjectKind;
|
|
52
|
+
frontendFramework?: Exclude<WebFramework, 'express'>;
|
|
53
|
+
mobileFramework?: MobileFramework;
|
|
54
|
+
nodeVersion: string;
|
|
55
|
+
appPort: number;
|
|
56
|
+
database: DatabaseConfig;
|
|
57
|
+
integrations: Integration[];
|
|
58
|
+
skipInstall: boolean;
|
|
59
|
+
}
|
|
60
|
+
export interface ProjectReference {
|
|
61
|
+
schemaVersion: 3;
|
|
62
|
+
projectId: string;
|
|
63
|
+
}
|
|
64
|
+
export type LocalProjectFile = ProjectMetadata | ProjectReference;
|
|
65
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/modules/scaffold/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;AAC1E,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;AAC7E,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,cAAc,CAAC;AACtD,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,YAAY,GAAG,SAAS,GAAG,WAAW,CAAC;AAC3E,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,GAAG,YAAY,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;AACpH,MAAM,WAAW,gBAAgB;IAAG,IAAI,EAAC,MAAM,CAAC;IAAC,IAAI,EAAC,UAAU,GAAC,SAAS,CAAC;IAAC,IAAI,EAAC,MAAM,CAAC;IAAC,SAAS,EAAC,YAAY,CAAC;IAAC,OAAO,EAAC,MAAM,CAAC;IAAC,aAAa,EAAC,MAAM,CAAC;IAAC,cAAc,EAAC,MAAM,CAAC;IAAC,SAAS,EAAC,MAAM,CAAC;IAAC,WAAW,CAAC,EAAC,MAAM,CAAC;CAAE;AACtN,MAAM,WAAW,eAAe;IAAG,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE,YAAY,GAAG,eAAe,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;CAAE;AAC5U,MAAM,WAAW,UAAU;IAAG,SAAS,EAAE,YAAY,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAAE;AAChK,MAAM,WAAW,cAAc;IAAG,IAAI,EAAE,YAAY,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAAE;AAC9I,MAAM,WAAW,QAAQ;IAAG,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,WAAW,CAAC;IAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IAAC,eAAe,CAAC,EAAE,eAAe,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,cAAc,CAAC;IAAC,YAAY,EAAE,WAAW,EAAE,CAAC;IAAC,WAAW,EAAE,OAAO,CAAC;CAAE;AAE1R,MAAM,WAAW,gBAAgB;IAAG,aAAa,EAAE,CAAC,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;CAAE;AAC1E,MAAM,MAAM,gBAAgB,GAAG,eAAe,GAAG,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/modules/scaffold/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type ListCliOptions } from '../../../shared/listing';
|
|
2
|
+
interface UserOptions extends ListCliOptions {
|
|
3
|
+
email?: string;
|
|
4
|
+
password?: string;
|
|
5
|
+
providers?: string;
|
|
6
|
+
cloud?: boolean;
|
|
7
|
+
aws?: boolean;
|
|
8
|
+
npm?: boolean;
|
|
9
|
+
jenkins?: boolean;
|
|
10
|
+
role?: string;
|
|
11
|
+
reason?: string;
|
|
12
|
+
awsPolicies?: string;
|
|
13
|
+
npmRole?: string;
|
|
14
|
+
jenkinsRoles?: string;
|
|
15
|
+
yes?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export declare const listUnifiedUsers: (options: ListCliOptions) => Promise<void>;
|
|
18
|
+
export declare const createUnifiedUser: (usernameArg: string | undefined, options: UserOptions) => Promise<void>;
|
|
19
|
+
export declare const updateUnifiedUser: (usernameArg: string | undefined, options: UserOptions) => Promise<void>;
|
|
20
|
+
export declare const deleteUnifiedUser: (usernameArg: string | undefined, options: UserOptions) => Promise<void>;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=user.command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user.command.d.ts","sourceRoot":"","sources":["../../../../src/modules/users/commands/user.command.ts"],"names":[],"mappings":"AAWA,OAAO,EAAe,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAG3E,UAAU,WAAY,SAAQ,cAAc;IAAG,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAC;CAAE;AAkHvR,eAAO,MAAM,gBAAgB,GAAU,SAAS,cAAc,KAAG,OAAO,CAAC,IAAI,CAI5E,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAU,aAAa,MAAM,GAAG,SAAS,EAAE,SAAS,WAAW,KAAG,OAAO,CAAC,IAAI,CAkH3G,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAU,aAAa,MAAM,GAAG,SAAS,EAAE,SAAS,WAAW,KAAG,OAAO,CAAC,IAAI,CAsB3G,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAU,aAAa,MAAM,GAAG,SAAS,EAAE,SAAS,WAAW,KAAG,OAAO,CAAC,IAAI,CA2B3G,CAAC"}
|