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,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NpmApiService = void 0;
|
|
4
|
+
const npm_config_1 = require("../config/npm-config");
|
|
5
|
+
const jsonError = async (response) => {
|
|
6
|
+
try {
|
|
7
|
+
const body = await response.json();
|
|
8
|
+
return body.error?.message || body.message || response.statusText;
|
|
9
|
+
}
|
|
10
|
+
catch {
|
|
11
|
+
return response.statusText;
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
class NpmApiService {
|
|
15
|
+
token;
|
|
16
|
+
url;
|
|
17
|
+
identity;
|
|
18
|
+
secret;
|
|
19
|
+
constructor(project, local) { const resolved = project && local ? { project, local } : (0, npm_config_1.requireNpmConfig)(); this.url = resolved.project.url.replace(/\/$/, ''); this.identity = resolved.local.identity; this.secret = resolved.local.secret; }
|
|
20
|
+
async authenticate() {
|
|
21
|
+
if (this.token)
|
|
22
|
+
return this.token;
|
|
23
|
+
const response = await fetch(`${this.url}/api/tokens`, { method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify({ identity: this.identity, secret: this.secret }) });
|
|
24
|
+
if (!response.ok)
|
|
25
|
+
throw new Error(`Nginx Proxy Manager authentication failed (HTTP ${response.status}): ${await jsonError(response)}`);
|
|
26
|
+
const data = await response.json();
|
|
27
|
+
if (!data.token)
|
|
28
|
+
throw new Error('Nginx Proxy Manager returned no authentication token.');
|
|
29
|
+
this.token = data.token;
|
|
30
|
+
return data.token;
|
|
31
|
+
}
|
|
32
|
+
async request(path, init = {}) {
|
|
33
|
+
const token = await this.authenticate();
|
|
34
|
+
let response;
|
|
35
|
+
try {
|
|
36
|
+
response = await fetch(`${this.url}/api${path}`, { ...init, headers: { authorization: `Bearer ${token}`, 'content-type': 'application/json', ...(init.headers || {}) } });
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
throw new Error(`Unable to reach Nginx Proxy Manager at ${this.url}: ${error instanceof Error ? error.message : 'network failure'}`, { cause: error });
|
|
40
|
+
}
|
|
41
|
+
if (!response.ok) {
|
|
42
|
+
const detail = await jsonError(response);
|
|
43
|
+
if (response.status === 401)
|
|
44
|
+
throw new Error(`Nginx Proxy Manager authentication expired or failed: ${detail}`);
|
|
45
|
+
if (response.status === 403)
|
|
46
|
+
throw new Error(`Nginx Proxy Manager permission denied: ${detail}`);
|
|
47
|
+
if (response.status === 404)
|
|
48
|
+
throw new Error(`Nginx Proxy Manager resource not found: ${detail}`);
|
|
49
|
+
if (response.status === 400 || response.status === 409 || response.status === 422)
|
|
50
|
+
throw new Error(`Nginx Proxy Manager rejected the request: ${detail}`);
|
|
51
|
+
throw new Error(`Nginx Proxy Manager API failed (HTTP ${response.status}): ${detail}`);
|
|
52
|
+
}
|
|
53
|
+
if (response.status === 204)
|
|
54
|
+
return undefined;
|
|
55
|
+
return response.json();
|
|
56
|
+
}
|
|
57
|
+
validate() { return this.request('/users?expand=permissions'); }
|
|
58
|
+
listUsers() { return this.request('/users?expand=permissions'); }
|
|
59
|
+
createUser(input) {
|
|
60
|
+
const { password, ...user } = input;
|
|
61
|
+
// NPM's user-create schema accepts auth:{type,secret}; `initial_password` is not valid.
|
|
62
|
+
return this.request('/users', { method: 'POST', body: JSON.stringify({ ...user, auth: { type: 'password', secret: password } }) });
|
|
63
|
+
}
|
|
64
|
+
updateUser(id, input) { return this.request(`/users/${id}`, { method: 'PUT', body: JSON.stringify(input) }); }
|
|
65
|
+
updateUserPassword(id, password) {
|
|
66
|
+
return this.request(`/users/${id}/auth`, { method: 'PUT', body: JSON.stringify({ type: 'password', secret: password }) });
|
|
67
|
+
}
|
|
68
|
+
updateUserPermissions(id, permissions) {
|
|
69
|
+
return this.request(`/users/${id}/permissions`, { method: 'PUT', body: JSON.stringify(permissions) });
|
|
70
|
+
}
|
|
71
|
+
deleteUser(id) { return this.request(`/users/${id}`, { method: 'DELETE' }); }
|
|
72
|
+
listProxyHosts() { return this.request('/nginx/proxy-hosts?expand=certificate'); }
|
|
73
|
+
listCertificates() { return this.request('/nginx/certificates'); }
|
|
74
|
+
createProxyHost(payload) { return this.request('/nginx/proxy-hosts', { method: 'POST', body: JSON.stringify(payload) }); }
|
|
75
|
+
updateProxyHost(id, payload) { return this.request(`/nginx/proxy-hosts/${id}`, { method: 'PUT', body: JSON.stringify(payload) }); }
|
|
76
|
+
deleteProxyHost(id) { return this.request(`/nginx/proxy-hosts/${id}`, { method: 'DELETE' }); }
|
|
77
|
+
requestCertificate(domain, email) {
|
|
78
|
+
return this.request('/nginx/certificates', { method: 'POST', body: JSON.stringify({ provider: 'letsencrypt', nice_name: domain, domain_names: [domain], meta: { letsencrypt_agree: true, letsencrypt_email: email, dns_challenge: false } }) });
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
exports.NpmApiService = NpmApiService;
|
|
82
|
+
//# sourceMappingURL=npm-api.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"npm-api.service.js","sourceRoot":"","sources":["../../../../src/modules/proxy/services/npm-api.service.ts"],"names":[],"mappings":";;;AAAA,qDAAoG;AASpG,MAAM,SAAS,GAAG,KAAK,EAAE,QAAkB,EAAmB,EAAE;IAC9D,IAAI,CAAC;QAAC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAwD,CAAC;QAAC,OAAO,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC,UAAU,CAAC;IAAC,CAAC;IACpK,MAAM,CAAC;QAAC,OAAO,QAAQ,CAAC,UAAU,CAAC;IAAC,CAAC;AACvC,CAAC,CAAC;AAEF,MAAa,aAAa;IAChB,KAAK,CAAU;IACN,GAAG,CAAS;IACZ,QAAQ,CAAS;IACjB,MAAM,CAAS;IAChC,YAAY,OAA0B,EAAE,KAAsB,IAAI,MAAM,QAAQ,GAAG,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAA,6BAAgB,GAAE,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAE1Q,KAAK,CAAC,YAAY;QACxB,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC;QAClC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,aAAa,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;QACpM,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,mDAAmD,QAAQ,CAAC,MAAM,MAAM,MAAM,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACvI,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAmB,CAAC;QAAC,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC/I,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QAAC,OAAO,IAAI,CAAC,KAAK,CAAC;IAC7C,CAAC;IACD,KAAK,CAAC,OAAO,CAAI,IAAY,EAAE,OAAoB,EAAE;QACnD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QACxC,IAAI,QAAkB,CAAC;QACvB,IAAI,CAAC;YAAC,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,OAAO,IAAI,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAAC,CAAC;QAClL,OAAO,KAAK,EAAE,CAAC;YAAC,MAAM,IAAI,KAAK,CAAC,0CAA0C,IAAI,CAAC,GAAG,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAAC,CAAC;QACzK,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,CAAC;YACzC,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,yDAAyD,MAAM,EAAE,CAAC,CAAC;YAChH,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,MAAM,EAAE,CAAC,CAAC;YACjG,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,MAAM,EAAE,CAAC,CAAC;YAClG,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,MAAM,EAAE,CAAC,CAAC;YAC1J,MAAM,IAAI,KAAK,CAAC,wCAAwC,QAAQ,CAAC,MAAM,MAAM,MAAM,EAAE,CAAC,CAAC;QACzF,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;YAAE,OAAO,SAAc,CAAC;QACnD,OAAO,QAAQ,CAAC,IAAI,EAAgB,CAAC;IACvC,CAAC;IACD,QAAQ,KAAyB,OAAO,IAAI,CAAC,OAAO,CAAY,2BAA2B,CAAC,CAAC,CAAC,CAAC;IAC/F,SAAS,KAAyB,OAAO,IAAI,CAAC,OAAO,CAAY,2BAA2B,CAAC,CAAC,CAAC,CAAC;IAChG,UAAU,CAAC,KAA0C;QACnD,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;QACpC,wFAAwF;QACxF,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IACrI,CAAC;IACD,UAAU,CAAC,EAAU,EAAE,KAA4B,IAAsB,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/J,kBAAkB,CAAC,EAAU,EAAE,QAAgB;QAC7C,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;IAC5H,CAAC;IACD,qBAAqB,CAAC,EAAU,EAAE,WAA+B;QAC/D,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,cAAc,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACxG,CAAC;IACD,UAAU,CAAC,EAAU,IAAmB,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;IACpG,cAAc,KAA2B,OAAO,IAAI,CAAC,OAAO,CAAC,uCAAuC,CAAC,CAAC,CAAC,CAAC;IACxG,gBAAgB,KAAgC,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAC7F,eAAe,CAAC,OAAgC,IAAwB,OAAO,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACvK,eAAe,CAAC,EAAU,EAAE,OAAgC,IAAwB,OAAO,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACxL,eAAe,CAAC,EAAU,IAAmB,OAAO,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;IACrH,kBAAkB,CAAC,MAAc,EAAE,KAAa;QAC9C,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IAClP,CAAC;CACF;AArDD,sCAqDC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.command.d.ts","sourceRoot":"","sources":["../../../../src/modules/scaffold/commands/init.command.ts"],"names":[],"mappings":"AAcA,UAAU,WAAW;IAAG,WAAW,CAAC,EAAE,OAAO,CAAC;CAAE;AAgFhD,eAAO,MAAM,WAAW,GAAU,6BAAe,EAAE,SAAS,WAAW,KAAG,OAAO,CAAC,IAAI,CAyDrF,CAAC"}
|
|
@@ -0,0 +1,193 @@
|
|
|
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.initProject = void 0;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
9
|
+
const node_path_1 = require("node:path");
|
|
10
|
+
const node_fs_1 = require("node:fs");
|
|
11
|
+
const cloud_config_1 = require("../../cloud/config/cloud-config");
|
|
12
|
+
const cloud_command_1 = require("../../cloud/commands/cloud.command");
|
|
13
|
+
const cloud_api_service_1 = require("../../cloud/services/cloud-api.service");
|
|
14
|
+
const prebuild_command_1 = require("../../prebuild/commands/prebuild.command");
|
|
15
|
+
const filesystem_service_1 = require("../services/filesystem.service");
|
|
16
|
+
const project_template_service_1 = require("../services/project-template.service");
|
|
17
|
+
const docker_template_service_1 = require("../services/docker-template.service");
|
|
18
|
+
const project_metadata_1 = require("../config/project-metadata");
|
|
19
|
+
const portDefaults = { none: 0, postgresql: 5432, mongodb: 27017, sqlserver: 1433 };
|
|
20
|
+
const ensureLogin = async () => {
|
|
21
|
+
const cloud = (0, cloud_config_1.getCloudConfig)();
|
|
22
|
+
if (cloud.token) {
|
|
23
|
+
try {
|
|
24
|
+
await new cloud_api_service_1.CloudApiService().request('/auth/me');
|
|
25
|
+
console.log(chalk_1.default.green('✓ IndraQ Cloud login verified.'));
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
console.log(chalk_1.default.yellow('⚠ Existing Cloud session is expired or invalid.'));
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
const login = (await inquirer_1.default.prompt([{ type: 'confirm', name: 'ok', message: 'Log in to IndraQ Cloud now?', default: true }])).ok;
|
|
33
|
+
if (!login)
|
|
34
|
+
throw new Error('`indraq init` requires login.');
|
|
35
|
+
await (0, cloud_command_1.loginCloud)({});
|
|
36
|
+
await new cloud_api_service_1.CloudApiService().request('/auth/me');
|
|
37
|
+
console.log(chalk_1.default.green('✓ IndraQ Cloud login verified.'));
|
|
38
|
+
};
|
|
39
|
+
const askDatabase = async () => {
|
|
40
|
+
const { kind } = await inquirer_1.default.prompt([{ type: 'list', name: 'kind', message: 'Database:', choices: ['none', 'postgresql', 'mongodb', 'sqlserver'] }]);
|
|
41
|
+
if (kind === 'none')
|
|
42
|
+
return { kind };
|
|
43
|
+
const answer = await inquirer_1.default.prompt([
|
|
44
|
+
{ type: 'input', name: 'host', message: 'Database host/IP:', default: 'localhost' },
|
|
45
|
+
{ type: 'number', name: 'port', message: 'Database port:', default: portDefaults[kind] },
|
|
46
|
+
{ type: 'input', name: 'username', message: 'Database username:', validate: (v) => !!v || 'Required' },
|
|
47
|
+
{ type: 'password', name: 'password', message: 'Database password:', mask: '*', validate: (v) => !!v || 'Required' },
|
|
48
|
+
{ type: 'input', name: 'database', message: 'Database name:', validate: (v) => !!v || 'Required' }
|
|
49
|
+
]);
|
|
50
|
+
return { kind, ...answer };
|
|
51
|
+
};
|
|
52
|
+
const scaffoldWeb = (spec, overwrite) => {
|
|
53
|
+
const roots = [];
|
|
54
|
+
const components = [];
|
|
55
|
+
const frontend = spec.kind === 'frontend' || spec.kind === 'fullstack';
|
|
56
|
+
const backend = spec.kind === 'backend' || spec.kind === 'fullstack';
|
|
57
|
+
const slug = spec.name.toLowerCase().replace(/[^a-z0-9_.-]+/g, '-');
|
|
58
|
+
if (frontend) {
|
|
59
|
+
const root = spec.kind === 'fullstack' ? (0, node_path_1.resolve)(spec.target, 'frontend') : spec.target;
|
|
60
|
+
const framework = spec.frontendFramework;
|
|
61
|
+
const containerPort = framework === 'next' ? 3000 : 80;
|
|
62
|
+
const buildOutput = framework === 'vite' || framework === 'react' ? 'dist' : undefined;
|
|
63
|
+
(0, filesystem_service_1.writeArtifacts)(root, (0, project_template_service_1.frontendFiles)(spec.kind === 'fullstack' ? `${slug}-frontend` : slug, framework), overwrite);
|
|
64
|
+
(0, filesystem_service_1.writeArtifacts)(root, (0, docker_template_service_1.dockerArtifacts)({ framework, nodeVersion: spec.nodeVersion, appPort: containerPort, ...(buildOutput ? { buildOutput } : {}) }), overwrite);
|
|
65
|
+
roots.push(root);
|
|
66
|
+
components.push({ name: `${spec.name}-frontend`, kind: 'frontend', path: spec.kind === 'fullstack' ? 'frontend' : '.', framework, appPort: containerPort, containerPort, healthEndpoint: framework === 'next' ? '/' : '/health', imageName: spec.kind === 'fullstack' ? `${slug}-frontend` : slug, ...(buildOutput ? { buildOutput } : {}) });
|
|
67
|
+
}
|
|
68
|
+
if (backend) {
|
|
69
|
+
const root = spec.kind === 'fullstack' ? (0, node_path_1.resolve)(spec.target, 'backend') : spec.target;
|
|
70
|
+
(0, filesystem_service_1.writeArtifacts)(root, (0, project_template_service_1.backendFiles)(spec.kind === 'fullstack' ? `${slug}-backend` : slug, spec.appPort, spec.database, spec.integrations), overwrite);
|
|
71
|
+
(0, filesystem_service_1.writeArtifacts)(root, (0, docker_template_service_1.dockerArtifacts)({ framework: 'express', nodeVersion: spec.nodeVersion, appPort: spec.appPort, healthEndpoint: '/health' }), true);
|
|
72
|
+
roots.push(root);
|
|
73
|
+
components.push({ name: `${spec.name}-backend`, kind: 'backend', path: spec.kind === 'fullstack' ? 'backend' : '.', framework: 'express', appPort: spec.appPort, containerPort: spec.appPort, healthEndpoint: '/health', imageName: spec.kind === 'fullstack' ? `${slug}-backend` : slug });
|
|
74
|
+
}
|
|
75
|
+
const first = components[0];
|
|
76
|
+
const metadata = { schemaVersion: 2, name: spec.name, kind: spec.kind, framework: spec.kind === 'fullstack' ? spec.frontendFramework : first.framework, nodeVersion: spec.nodeVersion, appPort: first.appPort, containerPort: first.containerPort, healthEndpoint: first.healthEndpoint, imageName: slug, createdAt: new Date().toISOString(), ...(spec.kind === 'fullstack' ? { components } : {}), ...(first.buildOutput ? { buildOutput: first.buildOutput } : {}) };
|
|
77
|
+
(0, project_metadata_1.saveProjectMetadata)(spec.target, metadata);
|
|
78
|
+
return { roots, metadata };
|
|
79
|
+
};
|
|
80
|
+
const handleExistingIndraQProject = async (target) => {
|
|
81
|
+
const exactProjectFile = (0, node_path_1.join)(target, '.indraq', 'project.json');
|
|
82
|
+
if (!(0, node_fs_1.existsSync)(exactProjectFile))
|
|
83
|
+
return false;
|
|
84
|
+
const original = process.cwd();
|
|
85
|
+
try {
|
|
86
|
+
process.chdir(target);
|
|
87
|
+
const local = (0, project_metadata_1.getLocalProjectFile)(target);
|
|
88
|
+
if (!local)
|
|
89
|
+
return false;
|
|
90
|
+
if (local.schemaVersion === 3) {
|
|
91
|
+
await new cloud_api_service_1.CloudApiService().request(`/projects/${local.projectId}`);
|
|
92
|
+
console.log(chalk_1.default.green(`✓ Existing IndraQ Cloud project detected: ${local.projectId}`));
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
console.log(chalk_1.default.yellow('⚠ Existing IndraQ project is not fully cloud-linked. Completing project setup now.'));
|
|
96
|
+
await (0, cloud_command_1.syncProject)();
|
|
97
|
+
}
|
|
98
|
+
const reconcile = (await inquirer_1.default.prompt([{ type: 'confirm', name: 'ok', message: 'Check and configure any pending GHCR/Jenkins/DNS/NPM setup now?', default: true }])).ok;
|
|
99
|
+
if (reconcile)
|
|
100
|
+
await (0, prebuild_command_1.prebuild)({});
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
finally {
|
|
104
|
+
process.chdir(original);
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
const confirmExistingOverwrite = async (target) => {
|
|
108
|
+
if (!(0, filesystem_service_1.directoryHasFiles)(target))
|
|
109
|
+
return false;
|
|
110
|
+
console.log(chalk_1.default.yellow(`⚠ Existing files were found in ${target}, but this folder was not initialized by IndraQ.`));
|
|
111
|
+
console.log(chalk_1.default.yellow(' Continuing may overwrite package.json, source files, Docker files, and generated environment files.'));
|
|
112
|
+
const first = (await inquirer_1.default.prompt([{ type: 'confirm', name: 'ok', message: 'Continue with IndraQ initialization?', default: false }])).ok;
|
|
113
|
+
if (!first)
|
|
114
|
+
throw new Error('Initialization cancelled before touching existing files.');
|
|
115
|
+
const second = (await inquirer_1.default.prompt([{ type: 'input', name: 'text', message: 'Type OVERWRITE to confirm a second time:', validate: (v) => v.trim() === 'OVERWRITE' || 'Type OVERWRITE exactly.' }])).text;
|
|
116
|
+
return second.trim() === 'OVERWRITE';
|
|
117
|
+
};
|
|
118
|
+
const initProject = async (directory = '.', options) => {
|
|
119
|
+
const target = (0, node_path_1.resolve)(directory);
|
|
120
|
+
await ensureLogin();
|
|
121
|
+
if (await handleExistingIndraQProject(target))
|
|
122
|
+
return;
|
|
123
|
+
const overwrite = await confirmExistingOverwrite(target);
|
|
124
|
+
const answer = await inquirer_1.default.prompt([
|
|
125
|
+
{ type: 'input', name: 'name', message: 'Application name:', default: (0, node_path_1.basename)(target), validate: (v) => !!v.trim() || 'Required' },
|
|
126
|
+
{ type: 'list', name: 'kind', message: 'Project type:', choices: [{ name: 'Frontend', value: 'frontend' }, { name: 'Backend', value: 'backend' }, { name: 'Frontend + Backend', value: 'fullstack' }, { name: 'Mobile App', value: 'mobile' }] },
|
|
127
|
+
{ type: 'list', name: 'frontendFramework', message: 'Frontend framework:', choices: ['vite', 'react', 'vanilla', 'next'], when: (a) => a.kind === 'frontend' || a.kind === 'fullstack' },
|
|
128
|
+
{ type: 'list', name: 'mobileFramework', message: 'Mobile framework:', choices: ['expo', 'react-native'], when: (a) => a.kind === 'mobile' },
|
|
129
|
+
{ type: 'input', name: 'mobileVersion', message: 'Official generator version:', default: 'latest', when: (a) => a.kind === 'mobile' },
|
|
130
|
+
{ type: 'input', name: 'nodeVersion', message: 'Node.js Docker version:', default: '22' },
|
|
131
|
+
{ type: 'number', name: 'appPort', message: 'Backend port:', default: 3000, when: (a) => a.kind === 'backend' || a.kind === 'fullstack' },
|
|
132
|
+
{ type: 'checkbox', name: 'integrations', message: 'Backend integrations:', choices: ['redis', 'bullmq', 'jwt', 'swagger', 'websockets', 's3', 'mail', 'cron', 'worker'], when: (a) => a.kind === 'backend' || a.kind === 'fullstack' }
|
|
133
|
+
]);
|
|
134
|
+
if (answer.kind === 'mobile') {
|
|
135
|
+
(0, filesystem_service_1.runMobileGenerator)(target, answer.name, answer.mobileFramework, answer.mobileVersion || 'latest');
|
|
136
|
+
const meta = { schemaVersion: 1, name: answer.name.trim(), kind: 'mobile', framework: answer.mobileFramework, nodeVersion: answer.nodeVersion, appPort: 0, containerPort: 0, healthEndpoint: '', imageName: answer.name.toLowerCase().replace(/[^a-z0-9_.-]+/g, '-'), createdAt: new Date().toISOString() };
|
|
137
|
+
(0, project_metadata_1.saveProjectMetadata)(target, meta);
|
|
138
|
+
const original = process.cwd();
|
|
139
|
+
try {
|
|
140
|
+
process.chdir(target);
|
|
141
|
+
await (0, cloud_command_1.syncProject)();
|
|
142
|
+
}
|
|
143
|
+
finally {
|
|
144
|
+
process.chdir(original);
|
|
145
|
+
}
|
|
146
|
+
console.log(chalk_1.default.green(`✓ ${answer.mobileFramework} project generated, installed and linked at ${target}`));
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
const database = answer.kind === 'backend' || answer.kind === 'fullstack' ? await askDatabase() : { kind: 'none' };
|
|
150
|
+
const spec = { target, name: answer.name.trim(), kind: answer.kind, frontendFramework: answer.frontendFramework, mobileFramework: answer.mobileFramework, nodeVersion: answer.nodeVersion, appPort: answer.appPort || 3000, database, integrations: answer.integrations || [], skipInstall: !!options.skipInstall };
|
|
151
|
+
const result = scaffoldWeb(spec, overwrite);
|
|
152
|
+
(0, filesystem_service_1.initializeGit)(target);
|
|
153
|
+
// Link the project before dependency installation. A temporary npm registry/network
|
|
154
|
+
// failure must never leave an otherwise valid IndraQ project half-created.
|
|
155
|
+
const original = process.cwd();
|
|
156
|
+
const failedInstalls = [];
|
|
157
|
+
try {
|
|
158
|
+
process.chdir(target);
|
|
159
|
+
await (0, cloud_command_1.syncProject)();
|
|
160
|
+
console.log(chalk_1.default.green(`✓ ${spec.kind} project generated and Cloud project linked.`));
|
|
161
|
+
if (!spec.skipInstall) {
|
|
162
|
+
for (const root of result.roots)
|
|
163
|
+
if (!(0, filesystem_service_1.installDependencies)(root))
|
|
164
|
+
failedInstalls.push(root);
|
|
165
|
+
if (!failedInstalls.length)
|
|
166
|
+
console.log(chalk_1.default.green('✓ Project dependencies installed successfully.'));
|
|
167
|
+
else {
|
|
168
|
+
console.log(chalk_1.default.yellow(`⚠ Dependency installation is still pending in ${failedInstalls.length} component(s). Project linking/setup will continue.`));
|
|
169
|
+
for (const root of failedInstalls)
|
|
170
|
+
console.log(chalk_1.default.yellow(` ${root}: run npm install`));
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
else
|
|
174
|
+
console.log(chalk_1.default.yellow('⚠ Dependency installation skipped by request.'));
|
|
175
|
+
const mode = (await inquirer_1.default.prompt([{ type: 'list', name: 'mode', message: 'Infrastructure setup:', choices: [
|
|
176
|
+
{ name: 'Full setup now — GHCR + Jenkins + Route53 + NPM', value: 'full' },
|
|
177
|
+
{ name: 'Project only — I will run prebuild later', value: 'project' }
|
|
178
|
+
] }])).mode;
|
|
179
|
+
if (mode === 'full')
|
|
180
|
+
await (0, prebuild_command_1.prebuild)({});
|
|
181
|
+
else
|
|
182
|
+
console.log(chalk_1.default.gray('Run `indraq prebuild` later. It will detect and configure only pending infrastructure.'));
|
|
183
|
+
if (failedInstalls.length)
|
|
184
|
+
console.log(chalk_1.default.yellow('⚠ Init completed with dependency-install warnings. The Cloud project and selected infrastructure setup were preserved.'));
|
|
185
|
+
else
|
|
186
|
+
console.log(chalk_1.default.green('✓ Init complete. You can start writing code.'));
|
|
187
|
+
}
|
|
188
|
+
finally {
|
|
189
|
+
process.chdir(original);
|
|
190
|
+
}
|
|
191
|
+
};
|
|
192
|
+
exports.initProject = initProject;
|
|
193
|
+
//# sourceMappingURL=init.command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.command.js","sourceRoot":"","sources":["../../../../src/modules/scaffold/commands/init.command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { LocalProjectFile, ProjectMetadata, ProjectReference } from '../types';
|
|
2
|
+
export declare const saveProjectMetadata: (root: string, metadata: ProjectMetadata) => void;
|
|
3
|
+
export declare const saveProjectReference: (root: string, projectId: string) => void;
|
|
4
|
+
export declare const findProjectMetadataPath: (start: string) => string | null;
|
|
5
|
+
export declare const getLocalProjectFile: (root?: string) => LocalProjectFile | null;
|
|
6
|
+
export declare const getProjectReference: (root?: string) => ProjectReference | null;
|
|
7
|
+
export declare const getProjectMetadata: (root?: string) => ProjectMetadata | null;
|
|
8
|
+
export declare const findProjectRoot: (start?: string) => string | null;
|
|
9
|
+
//# sourceMappingURL=project-metadata.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-metadata.d.ts","sourceRoot":"","sources":["../../../../src/modules/scaffold/config/project-metadata.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAKpF,eAAO,MAAM,mBAAmB,GAAI,MAAM,MAAM,EAAE,UAAU,eAAe,KAAG,IAI7E,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,MAAM,MAAM,EAAE,WAAW,MAAM,KAAG,IAKtE,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,OAAO,MAAM,KAAG,MAAM,GAAG,IAShE,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,aAAoB,KAAG,gBAAgB,GAAG,IAc7E,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,aAAoB,KAAG,gBAAgB,GAAG,IAK7E,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,aAAoB,KAAG,eAAe,GAAG,IAI3E,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,cAAqB,KAAG,MAAM,GAAG,IAGhE,CAAC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.findProjectRoot = exports.getProjectMetadata = exports.getProjectReference = exports.getLocalProjectFile = exports.findProjectMetadataPath = exports.saveProjectReference = exports.saveProjectMetadata = void 0;
|
|
4
|
+
const node_fs_1 = require("node:fs");
|
|
5
|
+
const node_path_1 = require("node:path");
|
|
6
|
+
const REL = '.indraq/project.json';
|
|
7
|
+
const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
|
|
8
|
+
const saveProjectMetadata = (root, metadata) => {
|
|
9
|
+
const path = (0, node_path_1.join)(root, REL);
|
|
10
|
+
(0, node_fs_1.mkdirSync)((0, node_path_1.join)(root, '.indraq'), { recursive: true });
|
|
11
|
+
(0, node_fs_1.writeFileSync)(path, `${JSON.stringify(metadata, null, 2)}\n`, 'utf8');
|
|
12
|
+
};
|
|
13
|
+
exports.saveProjectMetadata = saveProjectMetadata;
|
|
14
|
+
const saveProjectReference = (root, projectId) => {
|
|
15
|
+
const path = (0, node_path_1.join)(root, REL);
|
|
16
|
+
(0, node_fs_1.mkdirSync)((0, node_path_1.join)(root, '.indraq'), { recursive: true });
|
|
17
|
+
const reference = { schemaVersion: 3, projectId };
|
|
18
|
+
(0, node_fs_1.writeFileSync)(path, `${JSON.stringify(reference, null, 2)}\n`, 'utf8');
|
|
19
|
+
};
|
|
20
|
+
exports.saveProjectReference = saveProjectReference;
|
|
21
|
+
const findProjectMetadataPath = (start) => {
|
|
22
|
+
let current = (0, node_path_1.resolve)(start);
|
|
23
|
+
const root = (0, node_path_1.parse)(current).root;
|
|
24
|
+
while (true) {
|
|
25
|
+
const path = (0, node_path_1.join)(current, REL);
|
|
26
|
+
if ((0, node_fs_1.existsSync)(path))
|
|
27
|
+
return path;
|
|
28
|
+
if (current === root)
|
|
29
|
+
return null;
|
|
30
|
+
current = (0, node_path_1.dirname)(current);
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
exports.findProjectMetadataPath = findProjectMetadataPath;
|
|
34
|
+
const getLocalProjectFile = (root = process.cwd()) => {
|
|
35
|
+
const path = (0, exports.findProjectMetadataPath)(root);
|
|
36
|
+
if (!path)
|
|
37
|
+
return null;
|
|
38
|
+
try {
|
|
39
|
+
const value = JSON.parse((0, node_fs_1.readFileSync)(path, 'utf8'));
|
|
40
|
+
if (value.schemaVersion === 3) {
|
|
41
|
+
if (!value.projectId || typeof value.projectId !== 'string' || !UUID_RE.test(value.projectId))
|
|
42
|
+
throw new Error('invalid project reference UUID; run `indraq project link` to repair it');
|
|
43
|
+
return value;
|
|
44
|
+
}
|
|
45
|
+
if (![1, 2].includes(value.schemaVersion) || !value.name || !value.kind || !value.framework)
|
|
46
|
+
throw new Error('invalid structure');
|
|
47
|
+
return value;
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
throw new Error(`Invalid ${path}: ${error instanceof Error ? error.message : 'unknown error'}`);
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
exports.getLocalProjectFile = getLocalProjectFile;
|
|
54
|
+
const getProjectReference = (root = process.cwd()) => {
|
|
55
|
+
const value = (0, exports.getLocalProjectFile)(root);
|
|
56
|
+
if (!value)
|
|
57
|
+
return null;
|
|
58
|
+
if (value.schemaVersion === 3)
|
|
59
|
+
return value;
|
|
60
|
+
return value.projectId ? { schemaVersion: 3, projectId: value.projectId } : null;
|
|
61
|
+
};
|
|
62
|
+
exports.getProjectReference = getProjectReference;
|
|
63
|
+
const getProjectMetadata = (root = process.cwd()) => {
|
|
64
|
+
const value = (0, exports.getLocalProjectFile)(root);
|
|
65
|
+
if (!value)
|
|
66
|
+
return null;
|
|
67
|
+
return value.schemaVersion === 3 ? null : value;
|
|
68
|
+
};
|
|
69
|
+
exports.getProjectMetadata = getProjectMetadata;
|
|
70
|
+
const findProjectRoot = (start = process.cwd()) => {
|
|
71
|
+
const path = (0, exports.findProjectMetadataPath)(start);
|
|
72
|
+
return path ? (0, node_path_1.dirname)((0, node_path_1.dirname)(path)) : null;
|
|
73
|
+
};
|
|
74
|
+
exports.findProjectRoot = findProjectRoot;
|
|
75
|
+
//# sourceMappingURL=project-metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-metadata.js","sourceRoot":"","sources":["../../../../src/modules/scaffold/config/project-metadata.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/scaffold/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,eAAO,MAAM,sBAAsB,GAAI,SAAS,OAAO,KAAG,IAAiL,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerScaffoldModule = void 0;
|
|
4
|
+
const init_command_1 = require("./commands/init.command");
|
|
5
|
+
const registerScaffoldModule = (program) => { program.command('init [directory]').description('Safely initialize a new application.').option('--skip-install', 'Generate without npm install').action(init_command_1.initProject); };
|
|
6
|
+
exports.registerScaffoldModule = registerScaffoldModule;
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/scaffold/index.ts"],"names":[],"mappings":";;;AACA,0DAAsD;AAC/C,MAAM,sBAAsB,GAAG,CAAC,OAAgB,EAAQ,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,WAAW,CAAC,sCAAsC,CAAC,CAAC,MAAM,CAAC,gBAAgB,EAAE,8BAA8B,CAAC,CAAC,MAAM,CAAC,0BAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAA/N,QAAA,sBAAsB,0BAAyM"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docker-template.service.d.ts","sourceRoot":"","sources":["../../../../src/modules/scaffold/services/docker-template.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAqC3C,eAAO,MAAM,eAAe,GAAI,MAAM,UAAU,KAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CA2FvE,CAAC"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.dockerArtifacts = void 0;
|
|
4
|
+
const nginx = `server {
|
|
5
|
+
listen 80;
|
|
6
|
+
server_name _;
|
|
7
|
+
root /usr/share/nginx/html;
|
|
8
|
+
index index.html;
|
|
9
|
+
location / { try_files $uri $uri/ /index.html; }
|
|
10
|
+
location = /health { access_log off; return 200 'healthy\\n'; add_header Content-Type text/plain; }
|
|
11
|
+
}\n`;
|
|
12
|
+
// Docker build contexts are copied wholesale. This ignore file is therefore the
|
|
13
|
+
// single place that decides which local files are excluded from the image.
|
|
14
|
+
// Company policy: environment files are intentionally NOT ignored so they are
|
|
15
|
+
// baked into images when present in the project build context.
|
|
16
|
+
const ignore = `node_modules
|
|
17
|
+
npm-debug.log*
|
|
18
|
+
yarn-debug.log*
|
|
19
|
+
yarn-error.log*
|
|
20
|
+
pnpm-debug.log*
|
|
21
|
+
*.log
|
|
22
|
+
.git
|
|
23
|
+
.gitignore
|
|
24
|
+
.indraq
|
|
25
|
+
dist
|
|
26
|
+
build
|
|
27
|
+
.next
|
|
28
|
+
coverage
|
|
29
|
+
.cache
|
|
30
|
+
.vite
|
|
31
|
+
.turbo
|
|
32
|
+
.DS_Store
|
|
33
|
+
Thumbs.db
|
|
34
|
+
`;
|
|
35
|
+
const installDependencies = `RUN if [ -f package-lock.json ]; then npm ci; else npm install; fi`;
|
|
36
|
+
const dockerArtifacts = (spec) => {
|
|
37
|
+
const node = spec.nodeVersion.replace(/^v/, '');
|
|
38
|
+
let dockerfile;
|
|
39
|
+
const files = { '.dockerignore': ignore };
|
|
40
|
+
if (spec.framework === 'vite' || spec.framework === 'react') {
|
|
41
|
+
const output = spec.buildOutput || (spec.framework === 'vite' ? 'dist' : 'build');
|
|
42
|
+
dockerfile = `FROM node:${node}-alpine AS build
|
|
43
|
+
WORKDIR /myapp
|
|
44
|
+
# Copy the complete project context. .dockerignore controls all exclusions.
|
|
45
|
+
COPY . .
|
|
46
|
+
${installDependencies}
|
|
47
|
+
RUN npm run build
|
|
48
|
+
|
|
49
|
+
FROM nginx:alpine
|
|
50
|
+
RUN apk add --no-cache curl
|
|
51
|
+
COPY nginx.conf /etc/nginx/conf.d/default.conf
|
|
52
|
+
# Static frontends are served from their compiled output; the build stage above
|
|
53
|
+
# received the complete project context without guessing source/config filenames.
|
|
54
|
+
COPY --from=build /myapp/${output} /usr/share/nginx/html
|
|
55
|
+
EXPOSE 80
|
|
56
|
+
HEALTHCHECK --interval=30s --timeout=3s CMD curl -fsS http://127.0.0.1/health >/dev/null || exit 1
|
|
57
|
+
CMD ["nginx", "-g", "daemon off;"]
|
|
58
|
+
`;
|
|
59
|
+
files['nginx.conf'] = nginx;
|
|
60
|
+
}
|
|
61
|
+
else if (spec.framework === 'vanilla') {
|
|
62
|
+
dockerfile = `FROM nginx:alpine
|
|
63
|
+
RUN apk add --no-cache curl
|
|
64
|
+
# Copy the complete project context. .dockerignore controls all exclusions.
|
|
65
|
+
COPY . /usr/share/nginx/html
|
|
66
|
+
COPY nginx.conf /etc/nginx/conf.d/default.conf
|
|
67
|
+
EXPOSE 80
|
|
68
|
+
HEALTHCHECK --interval=30s --timeout=3s CMD curl -fsS http://127.0.0.1/health >/dev/null || exit 1
|
|
69
|
+
CMD ["nginx", "-g", "daemon off;"]
|
|
70
|
+
`;
|
|
71
|
+
files['nginx.conf'] = nginx;
|
|
72
|
+
}
|
|
73
|
+
else if (spec.framework === 'next') {
|
|
74
|
+
dockerfile = `FROM node:${node}-alpine AS build
|
|
75
|
+
WORKDIR /myapp
|
|
76
|
+
# Copy the complete project context. .dockerignore controls all exclusions.
|
|
77
|
+
COPY . .
|
|
78
|
+
${installDependencies}
|
|
79
|
+
RUN npm run build
|
|
80
|
+
RUN npm prune --omit=dev
|
|
81
|
+
|
|
82
|
+
FROM node:${node}-alpine AS runtime
|
|
83
|
+
WORKDIR /myapp
|
|
84
|
+
RUN apk add --no-cache curl
|
|
85
|
+
ENV NODE_ENV=production PORT=${spec.appPort}
|
|
86
|
+
# Copy the complete filtered project from the build stage, including generated
|
|
87
|
+
# build output and production node_modules. No project filenames are guessed.
|
|
88
|
+
COPY --from=build --chown=node:node /myapp ./
|
|
89
|
+
USER node
|
|
90
|
+
EXPOSE ${spec.appPort}
|
|
91
|
+
HEALTHCHECK --interval=30s --timeout=3s CMD curl -fsS http://127.0.0.1:${spec.appPort}/ >/dev/null || exit 1
|
|
92
|
+
CMD ["npm", "start"]
|
|
93
|
+
`;
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
dockerfile = `FROM node:${node}-alpine AS build
|
|
97
|
+
WORKDIR /myapp
|
|
98
|
+
# Copy the complete project context. .dockerignore controls all exclusions.
|
|
99
|
+
COPY . .
|
|
100
|
+
${installDependencies}
|
|
101
|
+
RUN npm run build
|
|
102
|
+
RUN npm prune --omit=dev
|
|
103
|
+
|
|
104
|
+
FROM node:${node}-alpine AS runtime
|
|
105
|
+
WORKDIR /myapp
|
|
106
|
+
RUN apk add --no-cache curl
|
|
107
|
+
ENV NODE_ENV=production PORT=${spec.appPort}
|
|
108
|
+
# Copy the complete filtered project from the build stage, including generated
|
|
109
|
+
# build output and production node_modules. No project filenames are guessed.
|
|
110
|
+
COPY --from=build --chown=node:node /myapp ./
|
|
111
|
+
USER node
|
|
112
|
+
EXPOSE ${spec.appPort}
|
|
113
|
+
HEALTHCHECK --interval=30s --timeout=3s CMD curl -fsS http://127.0.0.1:${spec.appPort}${spec.healthEndpoint || '/health'} >/dev/null || exit 1
|
|
114
|
+
CMD ["npm", "start"]
|
|
115
|
+
`;
|
|
116
|
+
}
|
|
117
|
+
files.Dockerfile = dockerfile;
|
|
118
|
+
if (spec.compose)
|
|
119
|
+
files['docker-compose.yml'] = `services:
|
|
120
|
+
app:
|
|
121
|
+
build: .
|
|
122
|
+
ports:
|
|
123
|
+
- "${spec.appPort}:${spec.framework === 'express' || spec.framework === 'next' ? spec.appPort : 80}"
|
|
124
|
+
env_file:
|
|
125
|
+
- .env.development
|
|
126
|
+
restart: unless-stopped
|
|
127
|
+
`;
|
|
128
|
+
return files;
|
|
129
|
+
};
|
|
130
|
+
exports.dockerArtifacts = dockerArtifacts;
|
|
131
|
+
//# sourceMappingURL=docker-template.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docker-template.service.js","sourceRoot":"","sources":["../../../../src/modules/scaffold/services/docker-template.service.ts"],"names":[],"mappings":";;;AAEA,MAAM,KAAK,GAAG;;;;;;;IAOV,CAAC;AAEL,gFAAgF;AAChF,2EAA2E;AAC3E,8EAA8E;AAC9E,+DAA+D;AAC/D,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;CAkBd,CAAC;AAEF,MAAM,mBAAmB,GAAG,oEAAoE,CAAC;AAE1F,MAAM,eAAe,GAAG,CAAC,IAAgB,EAA0B,EAAE;IAC1E,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAChD,IAAI,UAAkB,CAAC;IACvB,MAAM,KAAK,GAA2B,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC;IAElE,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC;QAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAClF,UAAU,GAAG,aAAa,IAAI;;;;EAIhC,mBAAmB;;;;;;;;2BAQM,MAAM;;;;CAIhC,CAAC;QACE,KAAK,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC;IAC9B,CAAC;SAAM,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACxC,UAAU,GAAG;;;;;;;;CAQhB,CAAC;QACE,KAAK,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC;IAC9B,CAAC;SAAM,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,EAAE,CAAC;QACrC,UAAU,GAAG,aAAa,IAAI;;;;EAIhC,mBAAmB;;;;YAIT,IAAI;;;+BAGe,IAAI,CAAC,OAAO;;;;;SAKlC,IAAI,CAAC,OAAO;yEACoD,IAAI,CAAC,OAAO;;CAEpF,CAAC;IACA,CAAC;SAAM,CAAC;QACN,UAAU,GAAG,aAAa,IAAI;;;;EAIhC,mBAAmB;;;;YAIT,IAAI;;;+BAGe,IAAI,CAAC,OAAO;;;;;SAKlC,IAAI,CAAC,OAAO;yEACoD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,IAAI,SAAS;;CAEvH,CAAC;IACA,CAAC;IAED,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC;IAC9B,IAAI,IAAI,CAAC,OAAO;QAAE,KAAK,CAAC,oBAAoB,CAAC,GAAG;;;;WAIvC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;;;;CAIvG,CAAC;IACA,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AA3FW,QAAA,eAAe,mBA2F1B"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const assertSafeInitTarget: (target: string) => void;
|
|
2
|
+
export declare const writeArtifacts: (root: string, files: Record<string, string>, overwrite?: boolean) => void;
|
|
3
|
+
export declare const installDependencies: (root: string) => boolean;
|
|
4
|
+
export declare const initializeGit: (root: string) => void;
|
|
5
|
+
export declare const directoryHasFiles: (root: string) => boolean;
|
|
6
|
+
export declare const runMobileGenerator: (target: string, name: string, framework: "expo" | "react-native", version: string) => void;
|
|
7
|
+
//# sourceMappingURL=filesystem.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filesystem.service.d.ts","sourceRoot":"","sources":["../../../../src/modules/scaffold/services/filesystem.service.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,oBAAoB,GAAI,QAAQ,MAAM,KAAG,IAIrD,CAAC;AACF,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,EAAE,OAAO,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,mBAAiB,KAAG,IAG/F,CAAC;AAuBF,eAAO,MAAM,mBAAmB,GAAI,MAAM,MAAM,KAAG,OAuBlD,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,KAAG,IAAoP,CAAC;AAClS,eAAO,MAAM,iBAAiB,GAAI,MAAM,MAAM,KAAG,OAA2F,CAAC;AAC7I,eAAO,MAAM,kBAAkB,GAAI,QAAQ,MAAM,EAAE,MAAM,MAAM,EAAE,WAAW,MAAM,GAAG,cAAc,EAAE,SAAS,MAAM,KAAG,IAQtH,CAAC"}
|