@strapi/cloud-cli 5.18.1 → 5.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/dist/create-project/action.d.ts +2 -2
  2. package/dist/create-project/action.d.ts.map +1 -1
  3. package/dist/create-project/action.js +38 -11
  4. package/dist/create-project/action.js.map +1 -1
  5. package/dist/create-project/action.mjs +39 -12
  6. package/dist/create-project/action.mjs.map +1 -1
  7. package/dist/deploy-project/action.d.ts.map +1 -1
  8. package/dist/deploy-project/action.js +54 -17
  9. package/dist/deploy-project/action.js.map +1 -1
  10. package/dist/deploy-project/action.mjs +55 -18
  11. package/dist/deploy-project/action.mjs.map +1 -1
  12. package/dist/package.json.js +4 -4
  13. package/dist/package.json.mjs +4 -4
  14. package/dist/services/build-logs.d.ts.map +1 -1
  15. package/dist/services/build-logs.js +7 -7
  16. package/dist/services/build-logs.js.map +1 -1
  17. package/dist/services/build-logs.mjs +7 -7
  18. package/dist/services/build-logs.mjs.map +1 -1
  19. package/dist/services/cli-api.d.ts +7 -2
  20. package/dist/services/cli-api.d.ts.map +1 -1
  21. package/dist/services/cli-api.js +2 -3
  22. package/dist/services/cli-api.js.map +1 -1
  23. package/dist/services/cli-api.mjs +2 -3
  24. package/dist/services/cli-api.mjs.map +1 -1
  25. package/dist/services/notification.d.ts +4 -1
  26. package/dist/services/notification.d.ts.map +1 -1
  27. package/dist/services/notification.js +44 -2
  28. package/dist/services/notification.js.map +1 -1
  29. package/dist/services/notification.mjs +44 -2
  30. package/dist/services/notification.mjs.map +1 -1
  31. package/dist/types.d.ts +11 -0
  32. package/dist/types.d.ts.map +1 -1
  33. package/dist/utils/compress-files.d.ts.map +1 -1
  34. package/dist/utils/compress-files.js +2 -0
  35. package/dist/utils/compress-files.js.map +1 -1
  36. package/dist/utils/compress-files.mjs +2 -0
  37. package/dist/utils/compress-files.mjs.map +1 -1
  38. package/dist/utils/error-message-factories.d.ts +9 -0
  39. package/dist/utils/error-message-factories.d.ts.map +1 -0
  40. package/dist/utils/error-message-factories.js +25 -0
  41. package/dist/utils/error-message-factories.js.map +1 -0
  42. package/dist/utils/error-message-factories.mjs +22 -0
  43. package/dist/utils/error-message-factories.mjs.map +1 -0
  44. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"cli-api.js","sources":["../../src/services/cli-api.ts"],"sourcesContent":["import axios, { type AxiosResponse } from 'axios';\nimport fse from 'fs-extra';\nimport os from 'os';\nimport { apiConfig } from '../config/api';\nimport type { CLIContext, CloudCliConfig, TrackPayload } from '../types';\nimport { getLocalConfig } from '../config/local';\n\nimport packageJson from '../../package.json';\n\nexport const VERSION = 'v2';\n\nexport type ProjectInfo = {\n id: string;\n name: string;\n targetEnvironment?: string;\n displayName?: string;\n nodeVersion?: string;\n region?: string;\n plan?: string;\n url?: string;\n};\n\nexport type EnvironmentInfo = Record<string, unknown>;\n\nexport type EnvironmentDetails = {\n name: string;\n hasLiveDeployment: boolean;\n hasPendingDeployment: boolean;\n};\n\nexport type ProjectInput = Omit<ProjectInfo, 'id'>;\n\nexport type DeployResponse = {\n build_id: string;\n image: string;\n};\n\nexport type ListProjectsResponse = {\n data: {\n data: string;\n };\n};\n\nexport type ListEnvironmentsResponse = {\n data: {\n data: EnvironmentInfo[] | Record<string, never>;\n };\n};\n\nexport type ListLinkProjectsResponse = {\n data: {\n data: ProjectInfo[] | Record<string, never>;\n };\n};\n\nexport type ListLinkEnvironmentsResponse = {\n data: {\n data: EnvironmentDetails[] | Record<string, never>;\n };\n};\n\nexport type GetProjectResponse = {\n data: {\n displayName: string;\n updatedAt: string;\n suspendedAt?: string;\n isTrial: boolean;\n environments: string[];\n environmentsDetails: EnvironmentDetails[];\n };\n metadata: {\n dashboardUrls: {\n project: string;\n deployments: string;\n };\n };\n};\n\nexport type CreateTrialResponse = {\n licenseKey: string;\n};\n\nexport interface CloudApiService {\n deploy(\n deployInput: {\n filePath: string;\n project: { name: string; targetEnvironment?: string };\n },\n {\n onUploadProgress,\n }: {\n onUploadProgress: (progressEvent: { loaded: number; total?: number }) => void;\n }\n ): Promise<AxiosResponse<DeployResponse>>;\n\n createProject(createProjectInput: ProjectInput): Promise<{\n data: ProjectInput;\n status: number;\n }>;\n\n getUserInfo(): Promise<AxiosResponse>;\n\n config(): Promise<AxiosResponse<CloudCliConfig>>;\n\n listProjects(): Promise<AxiosResponse<ListProjectsResponse>>;\n\n listLinkProjects(): Promise<AxiosResponse<ListLinkProjectsResponse>>;\n\n listEnvironments(project: { name: string }): Promise<AxiosResponse<ListEnvironmentsResponse>>;\n\n listLinkEnvironments(project: {\n name: string;\n }): Promise<AxiosResponse<ListLinkEnvironmentsResponse>>;\n\n getProject(project: { name: string }): Promise<AxiosResponse<GetProjectResponse>>;\n\n createTrial(createTrialInput: {\n strapiVersion: string;\n }): Promise<AxiosResponse<CreateTrialResponse>>;\n\n track(event: string, payload?: TrackPayload): Promise<AxiosResponse<void>>;\n}\n\nexport async function cloudApiFactory(\n { logger }: { logger: CLIContext['logger'] },\n token?: string\n): Promise<CloudApiService> {\n const localConfig = await getLocalConfig();\n const customHeaders = {\n 'x-device-id': localConfig.installId,\n 'x-app-version': packageJson.version,\n 'x-os-name': os.type(),\n 'x-os-version': os.version(),\n 'x-language': Intl.DateTimeFormat().resolvedOptions().locale,\n 'x-node-version': process.versions.node,\n };\n const axiosCloudAPI = axios.create({\n baseURL: `${apiConfig.apiBaseUrl}/${VERSION}`,\n headers: {\n 'Content-Type': 'application/json',\n ...customHeaders,\n },\n });\n\n if (token) {\n axiosCloudAPI.defaults.headers.Authorization = `Bearer ${token}`;\n }\n\n return {\n deploy({ filePath, project }, { onUploadProgress }) {\n return axiosCloudAPI.post(\n `/deploy/${project.name}`,\n { file: fse.createReadStream(filePath), targetEnvironment: project.targetEnvironment },\n {\n headers: {\n 'Content-Type': 'multipart/form-data',\n },\n onUploadProgress,\n }\n );\n },\n\n async createProject({ name, nodeVersion, region, plan }) {\n const response = await axiosCloudAPI.post('/project', {\n projectName: name,\n region,\n nodeVersion,\n plan,\n });\n\n return {\n data: {\n id: response.data.id,\n name: response.data.name,\n nodeVersion: response.data.nodeVersion,\n region: response.data.region,\n },\n status: response.status,\n };\n },\n\n getUserInfo() {\n return axiosCloudAPI.get('/user');\n },\n\n async config(): Promise<AxiosResponse<CloudCliConfig>> {\n try {\n const response = await axiosCloudAPI.get('/config');\n\n if (response.status !== 200) {\n throw new Error('Error fetching cloud CLI config from the server.');\n }\n\n return response;\n } catch (error) {\n logger.debug(\n \"🥲 Oops! Couldn't retrieve the cloud CLI config from the server. Please try again.\"\n );\n\n throw error;\n }\n },\n\n async listProjects(): Promise<AxiosResponse<ListProjectsResponse>> {\n try {\n const response = await axiosCloudAPI.get('/projects');\n\n if (response.status !== 200) {\n throw new Error('Error fetching cloud projects from the server.');\n }\n\n return response;\n } catch (error) {\n logger.debug(\n \"🥲 Oops! Couldn't retrieve your project's list from the server. Please try again.\"\n );\n throw error;\n }\n },\n\n async listLinkProjects(): Promise<AxiosResponse<ListLinkProjectsResponse, unknown>> {\n try {\n const response = await axiosCloudAPI.get('/projects-linkable');\n\n if (response.status !== 200) {\n throw new Error('Error fetching cloud projects from the server.');\n }\n\n return response;\n } catch (error) {\n logger.debug(\n \"🥲 Oops! Couldn't retrieve your project's list from the server. Please try again.\"\n );\n throw error;\n }\n },\n\n async listEnvironments({ name }): Promise<AxiosResponse<ListEnvironmentsResponse>> {\n try {\n const response = await axiosCloudAPI.get(`/projects/${name}/environments`);\n\n if (response.status !== 200) {\n throw new Error('Error fetching cloud environments from the server.');\n }\n\n return response;\n } catch (error) {\n logger.debug(\n \"🥲 Oops! Couldn't retrieve your project's environments from the server. Please try again.\"\n );\n throw error;\n }\n },\n\n async listLinkEnvironments({ name }): Promise<AxiosResponse<ListLinkEnvironmentsResponse>> {\n try {\n const response = await axiosCloudAPI.get(`/projects/${name}/environments-linkable`);\n\n if (response.status !== 200) {\n throw new Error('Error fetching cloud environments from the server.');\n }\n\n return response;\n } catch (error) {\n logger.debug(\n \"🥲 Oops! Couldn't retrieve your project's environments from the server. Please try again.\"\n );\n throw error;\n }\n },\n\n async getProject({ name }): Promise<AxiosResponse<GetProjectResponse>> {\n try {\n const response = await axiosCloudAPI.get(`/projects/${name}`);\n\n if (response.status !== 200) {\n throw new Error(\"Error fetching project's details.\");\n }\n\n return response;\n } catch (error) {\n logger.debug(\n \"🥲 Oops! There was a problem retrieving your project's details. Please try again.\"\n );\n throw error;\n }\n },\n\n async createTrial({ strapiVersion }): Promise<AxiosResponse<CreateTrialResponse>> {\n try {\n const response = await axiosCloudAPI.post(`/cms-trial-request`, { strapiVersion });\n\n if (response.status !== 200) {\n throw new Error('Error creating trial.');\n }\n\n return response;\n } catch (error) {\n logger.debug('🥲 Oops! There was a problem creating your trial. Please try again.');\n throw error;\n }\n },\n\n track(event, payload = {}) {\n return axiosCloudAPI.post<void>('/track', {\n event,\n payload,\n });\n },\n };\n}\n"],"names":["VERSION","cloudApiFactory","logger","token","localConfig","getLocalConfig","customHeaders","installId","packageJson","version","os","type","Intl","DateTimeFormat","resolvedOptions","locale","process","versions","node","axiosCloudAPI","axios","create","baseURL","apiConfig","apiBaseUrl","headers","defaults","Authorization","deploy","filePath","project","onUploadProgress","post","name","file","fse","createReadStream","targetEnvironment","createProject","nodeVersion","region","plan","response","projectName","data","id","status","getUserInfo","get","config","Error","error","debug","listProjects","listLinkProjects","listEnvironments","listLinkEnvironments","getProject","createTrial","strapiVersion","track","event","payload"],"mappings":"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"}
1
+ {"version":3,"file":"cli-api.js","sources":["../../src/services/cli-api.ts"],"sourcesContent":["import axios, { type AxiosResponse } from 'axios';\nimport fse from 'fs-extra';\nimport os from 'os';\nimport { apiConfig } from '../config/api';\nimport type { CLIContext, CloudCliConfig, TrackPayload } from '../types';\nimport { getLocalConfig } from '../config/local';\n\nimport packageJson from '../../package.json';\n\nexport const VERSION = 'v3';\n\nexport type ProjectInfo = {\n id: string;\n name: string;\n targetEnvironment?: string;\n displayName?: string;\n nodeVersion?: string;\n region?: string;\n plan?: string;\n url?: string;\n};\n\nexport type EnvironmentInfo = Record<string, unknown>;\n\nexport type EnvironmentDetails = {\n name: string;\n hasLiveDeployment: boolean;\n hasPendingDeployment: boolean;\n};\n\nexport type ProjectInput = Omit<ProjectInfo, 'id'>;\n\nexport type DeployResponse = {\n build_id: string;\n image: string;\n};\n\nexport type ListProjectsResponse = {\n data: {\n data: string;\n };\n};\n\nexport type ListEnvironmentsResponse = {\n data: {\n data: EnvironmentInfo[] | Record<string, never>;\n };\n};\n\nexport type ListLinkProjectsResponse = {\n data: {\n data: ProjectInfo[] | Record<string, never>;\n };\n};\n\nexport type ListLinkEnvironmentsResponse = {\n data: {\n data: EnvironmentDetails[] | Record<string, never>;\n };\n};\n\nexport type GetProjectResponse = {\n data: {\n displayName: string;\n updatedAt: string;\n suspendedAt?: string;\n isTrial: boolean;\n environments: string[];\n environmentsDetails: EnvironmentDetails[];\n };\n metadata: {\n dashboardUrls: {\n project: string;\n deployments: string;\n };\n };\n};\n\nexport type CreateTrialResponse = {\n licenseKey: string;\n};\n\nexport type CreateProjectResponse = {\n name: string;\n environmentInternalName: string;\n url?: string;\n};\n\nexport interface CloudApiService {\n deploy(\n deployInput: {\n filePath: string;\n project: { name: string; targetEnvironment?: string };\n },\n {\n onUploadProgress,\n }: {\n onUploadProgress: (progressEvent: { loaded: number; total?: number }) => void;\n }\n ): Promise<AxiosResponse<DeployResponse>>;\n\n createProject(createProjectInput: ProjectInput): Promise<{\n data: CreateProjectResponse;\n status: number;\n }>;\n\n getUserInfo(): Promise<AxiosResponse>;\n\n config(): Promise<AxiosResponse<CloudCliConfig>>;\n\n listProjects(): Promise<AxiosResponse<ListProjectsResponse>>;\n\n listLinkProjects(): Promise<AxiosResponse<ListLinkProjectsResponse>>;\n\n listEnvironments(project: { name: string }): Promise<AxiosResponse<ListEnvironmentsResponse>>;\n\n listLinkEnvironments(project: {\n name: string;\n }): Promise<AxiosResponse<ListLinkEnvironmentsResponse>>;\n\n getProject(project: { name: string }): Promise<AxiosResponse<GetProjectResponse>>;\n\n createTrial(createTrialInput: {\n strapiVersion: string;\n }): Promise<AxiosResponse<CreateTrialResponse>>;\n\n track(event: string, payload?: TrackPayload): Promise<AxiosResponse<void>>;\n}\n\nexport async function cloudApiFactory(\n { logger }: { logger: CLIContext['logger'] },\n token?: string\n): Promise<CloudApiService> {\n const localConfig = await getLocalConfig();\n const customHeaders = {\n 'x-device-id': localConfig.installId,\n 'x-app-version': packageJson.version,\n 'x-os-name': os.type(),\n 'x-os-version': os.version(),\n 'x-language': Intl.DateTimeFormat().resolvedOptions().locale,\n 'x-node-version': process.versions.node,\n };\n const axiosCloudAPI = axios.create({\n baseURL: `${apiConfig.apiBaseUrl}/${VERSION}`,\n headers: {\n 'Content-Type': 'application/json',\n ...customHeaders,\n },\n });\n\n if (token) {\n axiosCloudAPI.defaults.headers.Authorization = `Bearer ${token}`;\n }\n\n return {\n deploy({ filePath, project }, { onUploadProgress }) {\n return axiosCloudAPI.post(\n `/deploy/${project.name}`,\n { file: fse.createReadStream(filePath), targetEnvironment: project.targetEnvironment },\n {\n headers: {\n 'Content-Type': 'multipart/form-data',\n },\n onUploadProgress,\n }\n );\n },\n\n async createProject({ name, nodeVersion, region, plan }) {\n const response = await axiosCloudAPI.post('/project', {\n projectName: name,\n region,\n nodeVersion,\n plan,\n });\n\n return {\n data: {\n id: response.data.id,\n name: response.data.name,\n environmentInternalName: response.data.environmentInternalName,\n },\n status: response.status,\n };\n },\n\n getUserInfo() {\n return axiosCloudAPI.get('/user');\n },\n\n async config(): Promise<AxiosResponse<CloudCliConfig>> {\n try {\n const response = await axiosCloudAPI.get('/config');\n\n if (response.status !== 200) {\n throw new Error('Error fetching cloud CLI config from the server.');\n }\n\n return response;\n } catch (error) {\n logger.debug(\n \"🥲 Oops! Couldn't retrieve the cloud CLI config from the server. Please try again.\"\n );\n\n throw error;\n }\n },\n\n async listProjects(): Promise<AxiosResponse<ListProjectsResponse>> {\n try {\n const response = await axiosCloudAPI.get('/projects');\n\n if (response.status !== 200) {\n throw new Error('Error fetching cloud projects from the server.');\n }\n\n return response;\n } catch (error) {\n logger.debug(\n \"🥲 Oops! Couldn't retrieve your project's list from the server. Please try again.\"\n );\n throw error;\n }\n },\n\n async listLinkProjects(): Promise<AxiosResponse<ListLinkProjectsResponse, unknown>> {\n try {\n const response = await axiosCloudAPI.get('/projects-linkable');\n\n if (response.status !== 200) {\n throw new Error('Error fetching cloud projects from the server.');\n }\n\n return response;\n } catch (error) {\n logger.debug(\n \"🥲 Oops! Couldn't retrieve your project's list from the server. Please try again.\"\n );\n throw error;\n }\n },\n\n async listEnvironments({ name }): Promise<AxiosResponse<ListEnvironmentsResponse>> {\n try {\n const response = await axiosCloudAPI.get(`/projects/${name}/environments`);\n\n if (response.status !== 200) {\n throw new Error('Error fetching cloud environments from the server.');\n }\n\n return response;\n } catch (error) {\n logger.debug(\n \"🥲 Oops! Couldn't retrieve your project's environments from the server. Please try again.\"\n );\n throw error;\n }\n },\n\n async listLinkEnvironments({ name }): Promise<AxiosResponse<ListLinkEnvironmentsResponse>> {\n try {\n const response = await axiosCloudAPI.get(`/projects/${name}/environments-linkable`);\n\n if (response.status !== 200) {\n throw new Error('Error fetching cloud environments from the server.');\n }\n\n return response;\n } catch (error) {\n logger.debug(\n \"🥲 Oops! Couldn't retrieve your project's environments from the server. Please try again.\"\n );\n throw error;\n }\n },\n\n async getProject({ name }): Promise<AxiosResponse<GetProjectResponse>> {\n try {\n const response = await axiosCloudAPI.get(`/projects/${name}`);\n\n if (response.status !== 200) {\n throw new Error(\"Error fetching project's details.\");\n }\n\n return response;\n } catch (error) {\n logger.debug(\n \"🥲 Oops! There was a problem retrieving your project's details. Please try again.\"\n );\n throw error;\n }\n },\n\n async createTrial({ strapiVersion }): Promise<AxiosResponse<CreateTrialResponse>> {\n try {\n const response = await axiosCloudAPI.post(`/cms-trial-request`, { strapiVersion });\n\n if (response.status !== 200) {\n throw new Error('Error creating trial.');\n }\n\n return response;\n } catch (error) {\n logger.debug('🥲 Oops! There was a problem creating your trial. Please try again.');\n throw error;\n }\n },\n\n track(event, payload = {}) {\n return axiosCloudAPI.post<void>('/track', {\n event,\n payload,\n });\n },\n };\n}\n"],"names":["VERSION","cloudApiFactory","logger","token","localConfig","getLocalConfig","customHeaders","installId","packageJson","version","os","type","Intl","DateTimeFormat","resolvedOptions","locale","process","versions","node","axiosCloudAPI","axios","create","baseURL","apiConfig","apiBaseUrl","headers","defaults","Authorization","deploy","filePath","project","onUploadProgress","post","name","file","fse","createReadStream","targetEnvironment","createProject","nodeVersion","region","plan","response","projectName","data","id","environmentInternalName","status","getUserInfo","get","config","Error","error","debug","listProjects","listLinkProjects","listEnvironments","listLinkEnvironments","getProject","createTrial","strapiVersion","track","event","payload"],"mappings":"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"}
@@ -5,7 +5,7 @@ import { apiConfig } from '../config/api.mjs';
5
5
  import { getLocalConfig } from '../config/local.mjs';
6
6
  import packageJson from '../package.json.mjs';
7
7
 
8
- const VERSION = 'v2';
8
+ const VERSION = 'v3';
9
9
  async function cloudApiFactory({ logger }, token) {
10
10
  const localConfig = await getLocalConfig();
11
11
  const customHeaders = {
@@ -49,8 +49,7 @@ async function cloudApiFactory({ logger }, token) {
49
49
  data: {
50
50
  id: response.data.id,
51
51
  name: response.data.name,
52
- nodeVersion: response.data.nodeVersion,
53
- region: response.data.region
52
+ environmentInternalName: response.data.environmentInternalName
54
53
  },
55
54
  status: response.status
56
55
  };
@@ -1 +1 @@
1
- {"version":3,"file":"cli-api.mjs","sources":["../../src/services/cli-api.ts"],"sourcesContent":["import axios, { type AxiosResponse } from 'axios';\nimport fse from 'fs-extra';\nimport os from 'os';\nimport { apiConfig } from '../config/api';\nimport type { CLIContext, CloudCliConfig, TrackPayload } from '../types';\nimport { getLocalConfig } from '../config/local';\n\nimport packageJson from '../../package.json';\n\nexport const VERSION = 'v2';\n\nexport type ProjectInfo = {\n id: string;\n name: string;\n targetEnvironment?: string;\n displayName?: string;\n nodeVersion?: string;\n region?: string;\n plan?: string;\n url?: string;\n};\n\nexport type EnvironmentInfo = Record<string, unknown>;\n\nexport type EnvironmentDetails = {\n name: string;\n hasLiveDeployment: boolean;\n hasPendingDeployment: boolean;\n};\n\nexport type ProjectInput = Omit<ProjectInfo, 'id'>;\n\nexport type DeployResponse = {\n build_id: string;\n image: string;\n};\n\nexport type ListProjectsResponse = {\n data: {\n data: string;\n };\n};\n\nexport type ListEnvironmentsResponse = {\n data: {\n data: EnvironmentInfo[] | Record<string, never>;\n };\n};\n\nexport type ListLinkProjectsResponse = {\n data: {\n data: ProjectInfo[] | Record<string, never>;\n };\n};\n\nexport type ListLinkEnvironmentsResponse = {\n data: {\n data: EnvironmentDetails[] | Record<string, never>;\n };\n};\n\nexport type GetProjectResponse = {\n data: {\n displayName: string;\n updatedAt: string;\n suspendedAt?: string;\n isTrial: boolean;\n environments: string[];\n environmentsDetails: EnvironmentDetails[];\n };\n metadata: {\n dashboardUrls: {\n project: string;\n deployments: string;\n };\n };\n};\n\nexport type CreateTrialResponse = {\n licenseKey: string;\n};\n\nexport interface CloudApiService {\n deploy(\n deployInput: {\n filePath: string;\n project: { name: string; targetEnvironment?: string };\n },\n {\n onUploadProgress,\n }: {\n onUploadProgress: (progressEvent: { loaded: number; total?: number }) => void;\n }\n ): Promise<AxiosResponse<DeployResponse>>;\n\n createProject(createProjectInput: ProjectInput): Promise<{\n data: ProjectInput;\n status: number;\n }>;\n\n getUserInfo(): Promise<AxiosResponse>;\n\n config(): Promise<AxiosResponse<CloudCliConfig>>;\n\n listProjects(): Promise<AxiosResponse<ListProjectsResponse>>;\n\n listLinkProjects(): Promise<AxiosResponse<ListLinkProjectsResponse>>;\n\n listEnvironments(project: { name: string }): Promise<AxiosResponse<ListEnvironmentsResponse>>;\n\n listLinkEnvironments(project: {\n name: string;\n }): Promise<AxiosResponse<ListLinkEnvironmentsResponse>>;\n\n getProject(project: { name: string }): Promise<AxiosResponse<GetProjectResponse>>;\n\n createTrial(createTrialInput: {\n strapiVersion: string;\n }): Promise<AxiosResponse<CreateTrialResponse>>;\n\n track(event: string, payload?: TrackPayload): Promise<AxiosResponse<void>>;\n}\n\nexport async function cloudApiFactory(\n { logger }: { logger: CLIContext['logger'] },\n token?: string\n): Promise<CloudApiService> {\n const localConfig = await getLocalConfig();\n const customHeaders = {\n 'x-device-id': localConfig.installId,\n 'x-app-version': packageJson.version,\n 'x-os-name': os.type(),\n 'x-os-version': os.version(),\n 'x-language': Intl.DateTimeFormat().resolvedOptions().locale,\n 'x-node-version': process.versions.node,\n };\n const axiosCloudAPI = axios.create({\n baseURL: `${apiConfig.apiBaseUrl}/${VERSION}`,\n headers: {\n 'Content-Type': 'application/json',\n ...customHeaders,\n },\n });\n\n if (token) {\n axiosCloudAPI.defaults.headers.Authorization = `Bearer ${token}`;\n }\n\n return {\n deploy({ filePath, project }, { onUploadProgress }) {\n return axiosCloudAPI.post(\n `/deploy/${project.name}`,\n { file: fse.createReadStream(filePath), targetEnvironment: project.targetEnvironment },\n {\n headers: {\n 'Content-Type': 'multipart/form-data',\n },\n onUploadProgress,\n }\n );\n },\n\n async createProject({ name, nodeVersion, region, plan }) {\n const response = await axiosCloudAPI.post('/project', {\n projectName: name,\n region,\n nodeVersion,\n plan,\n });\n\n return {\n data: {\n id: response.data.id,\n name: response.data.name,\n nodeVersion: response.data.nodeVersion,\n region: response.data.region,\n },\n status: response.status,\n };\n },\n\n getUserInfo() {\n return axiosCloudAPI.get('/user');\n },\n\n async config(): Promise<AxiosResponse<CloudCliConfig>> {\n try {\n const response = await axiosCloudAPI.get('/config');\n\n if (response.status !== 200) {\n throw new Error('Error fetching cloud CLI config from the server.');\n }\n\n return response;\n } catch (error) {\n logger.debug(\n \"🥲 Oops! Couldn't retrieve the cloud CLI config from the server. Please try again.\"\n );\n\n throw error;\n }\n },\n\n async listProjects(): Promise<AxiosResponse<ListProjectsResponse>> {\n try {\n const response = await axiosCloudAPI.get('/projects');\n\n if (response.status !== 200) {\n throw new Error('Error fetching cloud projects from the server.');\n }\n\n return response;\n } catch (error) {\n logger.debug(\n \"🥲 Oops! Couldn't retrieve your project's list from the server. Please try again.\"\n );\n throw error;\n }\n },\n\n async listLinkProjects(): Promise<AxiosResponse<ListLinkProjectsResponse, unknown>> {\n try {\n const response = await axiosCloudAPI.get('/projects-linkable');\n\n if (response.status !== 200) {\n throw new Error('Error fetching cloud projects from the server.');\n }\n\n return response;\n } catch (error) {\n logger.debug(\n \"🥲 Oops! Couldn't retrieve your project's list from the server. Please try again.\"\n );\n throw error;\n }\n },\n\n async listEnvironments({ name }): Promise<AxiosResponse<ListEnvironmentsResponse>> {\n try {\n const response = await axiosCloudAPI.get(`/projects/${name}/environments`);\n\n if (response.status !== 200) {\n throw new Error('Error fetching cloud environments from the server.');\n }\n\n return response;\n } catch (error) {\n logger.debug(\n \"🥲 Oops! Couldn't retrieve your project's environments from the server. Please try again.\"\n );\n throw error;\n }\n },\n\n async listLinkEnvironments({ name }): Promise<AxiosResponse<ListLinkEnvironmentsResponse>> {\n try {\n const response = await axiosCloudAPI.get(`/projects/${name}/environments-linkable`);\n\n if (response.status !== 200) {\n throw new Error('Error fetching cloud environments from the server.');\n }\n\n return response;\n } catch (error) {\n logger.debug(\n \"🥲 Oops! Couldn't retrieve your project's environments from the server. Please try again.\"\n );\n throw error;\n }\n },\n\n async getProject({ name }): Promise<AxiosResponse<GetProjectResponse>> {\n try {\n const response = await axiosCloudAPI.get(`/projects/${name}`);\n\n if (response.status !== 200) {\n throw new Error(\"Error fetching project's details.\");\n }\n\n return response;\n } catch (error) {\n logger.debug(\n \"🥲 Oops! There was a problem retrieving your project's details. Please try again.\"\n );\n throw error;\n }\n },\n\n async createTrial({ strapiVersion }): Promise<AxiosResponse<CreateTrialResponse>> {\n try {\n const response = await axiosCloudAPI.post(`/cms-trial-request`, { strapiVersion });\n\n if (response.status !== 200) {\n throw new Error('Error creating trial.');\n }\n\n return response;\n } catch (error) {\n logger.debug('🥲 Oops! There was a problem creating your trial. Please try again.');\n throw error;\n }\n },\n\n track(event, payload = {}) {\n return axiosCloudAPI.post<void>('/track', {\n event,\n payload,\n });\n },\n };\n}\n"],"names":["VERSION","cloudApiFactory","logger","token","localConfig","getLocalConfig","customHeaders","installId","packageJson","version","os","type","Intl","DateTimeFormat","resolvedOptions","locale","process","versions","node","axiosCloudAPI","axios","create","baseURL","apiConfig","apiBaseUrl","headers","defaults","Authorization","deploy","filePath","project","onUploadProgress","post","name","file","fse","createReadStream","targetEnvironment","createProject","nodeVersion","region","plan","response","projectName","data","id","status","getUserInfo","get","config","Error","error","debug","listProjects","listLinkProjects","listEnvironments","listLinkEnvironments","getProject","createTrial","strapiVersion","track","event","payload"],"mappings":"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"}
1
+ {"version":3,"file":"cli-api.mjs","sources":["../../src/services/cli-api.ts"],"sourcesContent":["import axios, { type AxiosResponse } from 'axios';\nimport fse from 'fs-extra';\nimport os from 'os';\nimport { apiConfig } from '../config/api';\nimport type { CLIContext, CloudCliConfig, TrackPayload } from '../types';\nimport { getLocalConfig } from '../config/local';\n\nimport packageJson from '../../package.json';\n\nexport const VERSION = 'v3';\n\nexport type ProjectInfo = {\n id: string;\n name: string;\n targetEnvironment?: string;\n displayName?: string;\n nodeVersion?: string;\n region?: string;\n plan?: string;\n url?: string;\n};\n\nexport type EnvironmentInfo = Record<string, unknown>;\n\nexport type EnvironmentDetails = {\n name: string;\n hasLiveDeployment: boolean;\n hasPendingDeployment: boolean;\n};\n\nexport type ProjectInput = Omit<ProjectInfo, 'id'>;\n\nexport type DeployResponse = {\n build_id: string;\n image: string;\n};\n\nexport type ListProjectsResponse = {\n data: {\n data: string;\n };\n};\n\nexport type ListEnvironmentsResponse = {\n data: {\n data: EnvironmentInfo[] | Record<string, never>;\n };\n};\n\nexport type ListLinkProjectsResponse = {\n data: {\n data: ProjectInfo[] | Record<string, never>;\n };\n};\n\nexport type ListLinkEnvironmentsResponse = {\n data: {\n data: EnvironmentDetails[] | Record<string, never>;\n };\n};\n\nexport type GetProjectResponse = {\n data: {\n displayName: string;\n updatedAt: string;\n suspendedAt?: string;\n isTrial: boolean;\n environments: string[];\n environmentsDetails: EnvironmentDetails[];\n };\n metadata: {\n dashboardUrls: {\n project: string;\n deployments: string;\n };\n };\n};\n\nexport type CreateTrialResponse = {\n licenseKey: string;\n};\n\nexport type CreateProjectResponse = {\n name: string;\n environmentInternalName: string;\n url?: string;\n};\n\nexport interface CloudApiService {\n deploy(\n deployInput: {\n filePath: string;\n project: { name: string; targetEnvironment?: string };\n },\n {\n onUploadProgress,\n }: {\n onUploadProgress: (progressEvent: { loaded: number; total?: number }) => void;\n }\n ): Promise<AxiosResponse<DeployResponse>>;\n\n createProject(createProjectInput: ProjectInput): Promise<{\n data: CreateProjectResponse;\n status: number;\n }>;\n\n getUserInfo(): Promise<AxiosResponse>;\n\n config(): Promise<AxiosResponse<CloudCliConfig>>;\n\n listProjects(): Promise<AxiosResponse<ListProjectsResponse>>;\n\n listLinkProjects(): Promise<AxiosResponse<ListLinkProjectsResponse>>;\n\n listEnvironments(project: { name: string }): Promise<AxiosResponse<ListEnvironmentsResponse>>;\n\n listLinkEnvironments(project: {\n name: string;\n }): Promise<AxiosResponse<ListLinkEnvironmentsResponse>>;\n\n getProject(project: { name: string }): Promise<AxiosResponse<GetProjectResponse>>;\n\n createTrial(createTrialInput: {\n strapiVersion: string;\n }): Promise<AxiosResponse<CreateTrialResponse>>;\n\n track(event: string, payload?: TrackPayload): Promise<AxiosResponse<void>>;\n}\n\nexport async function cloudApiFactory(\n { logger }: { logger: CLIContext['logger'] },\n token?: string\n): Promise<CloudApiService> {\n const localConfig = await getLocalConfig();\n const customHeaders = {\n 'x-device-id': localConfig.installId,\n 'x-app-version': packageJson.version,\n 'x-os-name': os.type(),\n 'x-os-version': os.version(),\n 'x-language': Intl.DateTimeFormat().resolvedOptions().locale,\n 'x-node-version': process.versions.node,\n };\n const axiosCloudAPI = axios.create({\n baseURL: `${apiConfig.apiBaseUrl}/${VERSION}`,\n headers: {\n 'Content-Type': 'application/json',\n ...customHeaders,\n },\n });\n\n if (token) {\n axiosCloudAPI.defaults.headers.Authorization = `Bearer ${token}`;\n }\n\n return {\n deploy({ filePath, project }, { onUploadProgress }) {\n return axiosCloudAPI.post(\n `/deploy/${project.name}`,\n { file: fse.createReadStream(filePath), targetEnvironment: project.targetEnvironment },\n {\n headers: {\n 'Content-Type': 'multipart/form-data',\n },\n onUploadProgress,\n }\n );\n },\n\n async createProject({ name, nodeVersion, region, plan }) {\n const response = await axiosCloudAPI.post('/project', {\n projectName: name,\n region,\n nodeVersion,\n plan,\n });\n\n return {\n data: {\n id: response.data.id,\n name: response.data.name,\n environmentInternalName: response.data.environmentInternalName,\n },\n status: response.status,\n };\n },\n\n getUserInfo() {\n return axiosCloudAPI.get('/user');\n },\n\n async config(): Promise<AxiosResponse<CloudCliConfig>> {\n try {\n const response = await axiosCloudAPI.get('/config');\n\n if (response.status !== 200) {\n throw new Error('Error fetching cloud CLI config from the server.');\n }\n\n return response;\n } catch (error) {\n logger.debug(\n \"🥲 Oops! Couldn't retrieve the cloud CLI config from the server. Please try again.\"\n );\n\n throw error;\n }\n },\n\n async listProjects(): Promise<AxiosResponse<ListProjectsResponse>> {\n try {\n const response = await axiosCloudAPI.get('/projects');\n\n if (response.status !== 200) {\n throw new Error('Error fetching cloud projects from the server.');\n }\n\n return response;\n } catch (error) {\n logger.debug(\n \"🥲 Oops! Couldn't retrieve your project's list from the server. Please try again.\"\n );\n throw error;\n }\n },\n\n async listLinkProjects(): Promise<AxiosResponse<ListLinkProjectsResponse, unknown>> {\n try {\n const response = await axiosCloudAPI.get('/projects-linkable');\n\n if (response.status !== 200) {\n throw new Error('Error fetching cloud projects from the server.');\n }\n\n return response;\n } catch (error) {\n logger.debug(\n \"🥲 Oops! Couldn't retrieve your project's list from the server. Please try again.\"\n );\n throw error;\n }\n },\n\n async listEnvironments({ name }): Promise<AxiosResponse<ListEnvironmentsResponse>> {\n try {\n const response = await axiosCloudAPI.get(`/projects/${name}/environments`);\n\n if (response.status !== 200) {\n throw new Error('Error fetching cloud environments from the server.');\n }\n\n return response;\n } catch (error) {\n logger.debug(\n \"🥲 Oops! Couldn't retrieve your project's environments from the server. Please try again.\"\n );\n throw error;\n }\n },\n\n async listLinkEnvironments({ name }): Promise<AxiosResponse<ListLinkEnvironmentsResponse>> {\n try {\n const response = await axiosCloudAPI.get(`/projects/${name}/environments-linkable`);\n\n if (response.status !== 200) {\n throw new Error('Error fetching cloud environments from the server.');\n }\n\n return response;\n } catch (error) {\n logger.debug(\n \"🥲 Oops! Couldn't retrieve your project's environments from the server. Please try again.\"\n );\n throw error;\n }\n },\n\n async getProject({ name }): Promise<AxiosResponse<GetProjectResponse>> {\n try {\n const response = await axiosCloudAPI.get(`/projects/${name}`);\n\n if (response.status !== 200) {\n throw new Error(\"Error fetching project's details.\");\n }\n\n return response;\n } catch (error) {\n logger.debug(\n \"🥲 Oops! There was a problem retrieving your project's details. Please try again.\"\n );\n throw error;\n }\n },\n\n async createTrial({ strapiVersion }): Promise<AxiosResponse<CreateTrialResponse>> {\n try {\n const response = await axiosCloudAPI.post(`/cms-trial-request`, { strapiVersion });\n\n if (response.status !== 200) {\n throw new Error('Error creating trial.');\n }\n\n return response;\n } catch (error) {\n logger.debug('🥲 Oops! There was a problem creating your trial. Please try again.');\n throw error;\n }\n },\n\n track(event, payload = {}) {\n return axiosCloudAPI.post<void>('/track', {\n event,\n payload,\n });\n },\n };\n}\n"],"names":["VERSION","cloudApiFactory","logger","token","localConfig","getLocalConfig","customHeaders","installId","packageJson","version","os","type","Intl","DateTimeFormat","resolvedOptions","locale","process","versions","node","axiosCloudAPI","axios","create","baseURL","apiConfig","apiBaseUrl","headers","defaults","Authorization","deploy","filePath","project","onUploadProgress","post","name","file","fse","createReadStream","targetEnvironment","createProject","nodeVersion","region","plan","response","projectName","data","id","environmentInternalName","status","getUserInfo","get","config","Error","error","debug","listProjects","listLinkProjects","listEnvironments","listLinkEnvironments","getProject","createTrial","strapiVersion","track","event","payload"],"mappings":"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"}
@@ -1,3 +1,6 @@
1
1
  import type { CLIContext, CloudCliConfig } from '../types';
2
- export declare function notificationServiceFactory({ logger }: CLIContext): (url: string, token: string, cliConfig: CloudCliConfig) => void;
2
+ export declare function notificationServiceFactory({ logger }: CLIContext): (url: string, token: string, cliConfig: CloudCliConfig) => {
3
+ waitForEnvironmentCreation: (environmentName: string) => Promise<unknown>;
4
+ close: () => void;
5
+ };
3
6
  //# sourceMappingURL=notification.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"notification.d.ts","sourceRoot":"","sources":["../../src/services/notification.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAS3D,wBAAgB,0BAA0B,CAAC,EAAE,MAAM,EAAE,EAAE,UAAU,SAClD,MAAM,SAAS,MAAM,aAAa,cAAc,UAmC9D"}
1
+ {"version":3,"file":"notification.d.ts","sourceRoot":"","sources":["../../src/services/notification.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAsB3D,wBAAgB,0BAA0B,CAAC,EAAE,MAAM,EAAE,EAAE,UAAU,SAClD,MAAM,SAAS,MAAM,aAAa,cAAc;kDAiDN,MAAM;;EA6B9D"}
@@ -1,10 +1,12 @@
1
1
  'use strict';
2
2
 
3
3
  var EventSource = require('eventsource');
4
+ var EventEmitter = require('node:events');
4
5
 
5
6
  function notificationServiceFactory({ logger }) {
6
7
  return (url, token, cliConfig)=>{
7
8
  const CONN_TIMEOUT = Number(cliConfig.notificationsConnectionTimeout);
9
+ const eventEmitter = new EventEmitter();
8
10
  const es = new EventSource(url, {
9
11
  headers: {
10
12
  Authorization: `Bearer ${token}`
@@ -16,19 +18,59 @@ function notificationServiceFactory({ logger }) {
16
18
  timeoutId = setTimeout(()=>{
17
19
  logger.log('We were unable to connect to the server at this time. This could be due to a temporary issue. Please try again in a moment.');
18
20
  es.close();
21
+ eventEmitter.emit('connectionTimedOut');
19
22
  }, CONN_TIMEOUT); // 5 minutes
20
23
  };
21
- es.onopen = resetTimeout;
24
+ es.onopen = ()=>{
25
+ resetTimeout();
26
+ };
22
27
  es.onmessage = (event)=>{
23
28
  resetTimeout();
29
+ if (!event.data) {
30
+ return;
31
+ }
24
32
  const data = JSON.parse(event.data);
25
33
  if (data.message) {
26
34
  logger.log(data.message);
27
35
  }
28
36
  // Close connection when a specific event is received
29
- if (data.event === 'deploymentFinished' || data.event === 'deploymentFailed') {
37
+ if (data.event === 'deploymentCompleted' || data.event === 'deploymentFailed' || data.event === 'environmentCreationFailed' || data.event === 'environmentCreationCompleted') {
38
+ clearTimeout(timeoutId);
30
39
  es.close();
31
40
  }
41
+ eventEmitter.emit(data.event, data);
42
+ };
43
+ const waitForEnvironmentCreation = (environmentName)=>{
44
+ return new Promise((resolve, reject)=>{
45
+ eventEmitter.on('environmentCreationCompleted', (data)=>{
46
+ if (data.environmentName !== environmentName) {
47
+ return;
48
+ }
49
+ resolve('Environment created successfully');
50
+ eventEmitter.removeAllListeners('environmentCreationCompleted');
51
+ });
52
+ eventEmitter.on('environmentCreationFailed', (data)=>{
53
+ if (data.environmentName !== environmentName) {
54
+ return;
55
+ }
56
+ reject(new Error(`Environment creation failed`, {
57
+ cause: 'EnvironmentCreationFailed'
58
+ }));
59
+ eventEmitter.removeAllListeners('environmentCreationFailed');
60
+ });
61
+ eventEmitter.on('connectionTimedOut', ()=>{
62
+ reject(new Error('Connection timed out'));
63
+ });
64
+ });
65
+ };
66
+ const close = ()=>{
67
+ clearTimeout(timeoutId);
68
+ es.close();
69
+ eventEmitter.removeAllListeners();
70
+ };
71
+ return {
72
+ waitForEnvironmentCreation,
73
+ close
32
74
  };
33
75
  };
34
76
  }
@@ -1 +1 @@
1
- {"version":3,"file":"notification.js","sources":["../../src/services/notification.ts"],"sourcesContent":["import EventSource from 'eventsource';\nimport type { CLIContext, CloudCliConfig } from '../types';\n\ntype Event = {\n type: string;\n data: string;\n lastEventId: string;\n origin: string;\n};\n\nexport function notificationServiceFactory({ logger }: CLIContext) {\n return (url: string, token: string, cliConfig: CloudCliConfig) => {\n const CONN_TIMEOUT = Number(cliConfig.notificationsConnectionTimeout);\n\n const es = new EventSource(url, {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n });\n let timeoutId: NodeJS.Timeout;\n\n const resetTimeout = () => {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(() => {\n logger.log(\n 'We were unable to connect to the server at this time. This could be due to a temporary issue. Please try again in a moment.'\n );\n es.close();\n }, CONN_TIMEOUT); // 5 minutes\n };\n\n es.onopen = resetTimeout;\n es.onmessage = (event: Event) => {\n resetTimeout();\n const data = JSON.parse(event.data);\n\n if (data.message) {\n logger.log(data.message);\n }\n\n // Close connection when a specific event is received\n if (data.event === 'deploymentFinished' || data.event === 'deploymentFailed') {\n es.close();\n }\n };\n };\n}\n"],"names":["notificationServiceFactory","logger","url","token","cliConfig","CONN_TIMEOUT","Number","notificationsConnectionTimeout","es","EventSource","headers","Authorization","timeoutId","resetTimeout","clearTimeout","setTimeout","log","close","onopen","onmessage","event","data","JSON","parse","message"],"mappings":";;;;AAUO,SAASA,0BAAAA,CAA2B,EAAEC,MAAM,EAAc,EAAA;IAC/D,OAAO,CAACC,KAAaC,KAAeC,EAAAA,SAAAA,GAAAA;QAClC,MAAMC,YAAAA,GAAeC,MAAOF,CAAAA,SAAAA,CAAUG,8BAA8B,CAAA;QAEpE,MAAMC,EAAAA,GAAK,IAAIC,WAAAA,CAAYP,GAAK,EAAA;YAC9BQ,OAAS,EAAA;AACPC,gBAAAA,aAAAA,EAAe,CAAC,OAAO,EAAER,KAAAA,CAAM;AACjC;AACF,SAAA,CAAA;QACA,IAAIS,SAAAA;AAEJ,QAAA,MAAMC,YAAe,GAAA,IAAA;YACnBC,YAAaF,CAAAA,SAAAA,CAAAA;AACbA,YAAAA,SAAAA,GAAYG,UAAW,CAAA,IAAA;AACrBd,gBAAAA,MAAAA,CAAOe,GAAG,CACR,6HAAA,CAAA;AAEFR,gBAAAA,EAAAA,CAAGS,KAAK,EAAA;AACV,aAAA,EAAGZ;AACL,SAAA;AAEAG,QAAAA,EAAAA,CAAGU,MAAM,GAAGL,YAAAA;QACZL,EAAGW,CAAAA,SAAS,GAAG,CAACC,KAAAA,GAAAA;AACdP,YAAAA,YAAAA,EAAAA;AACA,YAAA,MAAMQ,IAAOC,GAAAA,IAAAA,CAAKC,KAAK,CAACH,MAAMC,IAAI,CAAA;YAElC,IAAIA,IAAAA,CAAKG,OAAO,EAAE;gBAChBvB,MAAOe,CAAAA,GAAG,CAACK,IAAAA,CAAKG,OAAO,CAAA;AACzB;;AAGA,YAAA,IAAIH,KAAKD,KAAK,KAAK,wBAAwBC,IAAKD,CAAAA,KAAK,KAAK,kBAAoB,EAAA;AAC5EZ,gBAAAA,EAAAA,CAAGS,KAAK,EAAA;AACV;AACF,SAAA;AACF,KAAA;AACF;;;;"}
1
+ {"version":3,"file":"notification.js","sources":["../../src/services/notification.ts"],"sourcesContent":["import EventSource from 'eventsource';\nimport EventEmitter from 'node:events';\nimport type { CLIContext, CloudCliConfig } from '../types';\n\ntype Event = {\n type: string;\n data: string;\n lastEventId: string;\n origin: string;\n};\n\ntype DeploymentNotificationData = {\n event:\n | 'deploymentFailed'\n | 'deploymentCompleted'\n | 'environmentCreationFailed'\n | 'environmentCreationCompleted';\n userId: string;\n projectName: string;\n environmentName: string;\n createdAt: string;\n message?: string;\n};\n\nexport function notificationServiceFactory({ logger }: CLIContext) {\n return (url: string, token: string, cliConfig: CloudCliConfig) => {\n const CONN_TIMEOUT = Number(cliConfig.notificationsConnectionTimeout);\n const eventEmitter = new EventEmitter();\n\n const es = new EventSource(url, {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n });\n let timeoutId: NodeJS.Timeout;\n\n const resetTimeout = () => {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(() => {\n logger.log(\n 'We were unable to connect to the server at this time. This could be due to a temporary issue. Please try again in a moment.'\n );\n es.close();\n eventEmitter.emit('connectionTimedOut');\n }, CONN_TIMEOUT); // 5 minutes\n };\n\n es.onopen = () => {\n resetTimeout();\n };\n es.onmessage = (event: Event) => {\n resetTimeout();\n if (!event.data) {\n return;\n }\n const data: DeploymentNotificationData = JSON.parse(event.data);\n\n if (data.message) {\n logger.log(data.message);\n }\n\n // Close connection when a specific event is received\n if (\n data.event === 'deploymentCompleted' ||\n data.event === 'deploymentFailed' ||\n data.event === 'environmentCreationFailed' ||\n data.event === 'environmentCreationCompleted'\n ) {\n clearTimeout(timeoutId);\n es.close();\n }\n eventEmitter.emit(data.event, data);\n };\n\n const waitForEnvironmentCreation = (environmentName: string) => {\n return new Promise((resolve, reject) => {\n eventEmitter.on('environmentCreationCompleted', (data: DeploymentNotificationData) => {\n if (data.environmentName !== environmentName) {\n return;\n }\n resolve('Environment created successfully');\n eventEmitter.removeAllListeners('environmentCreationCompleted');\n });\n eventEmitter.on('environmentCreationFailed', (data: DeploymentNotificationData) => {\n if (data.environmentName !== environmentName) {\n return;\n }\n reject(new Error(`Environment creation failed`, { cause: 'EnvironmentCreationFailed' }));\n eventEmitter.removeAllListeners('environmentCreationFailed');\n });\n\n eventEmitter.on('connectionTimedOut', () => {\n reject(new Error('Connection timed out'));\n });\n });\n };\n const close = () => {\n clearTimeout(timeoutId);\n es.close();\n eventEmitter.removeAllListeners();\n };\n return { waitForEnvironmentCreation, close };\n };\n}\n"],"names":["notificationServiceFactory","logger","url","token","cliConfig","CONN_TIMEOUT","Number","notificationsConnectionTimeout","eventEmitter","EventEmitter","es","EventSource","headers","Authorization","timeoutId","resetTimeout","clearTimeout","setTimeout","log","close","emit","onopen","onmessage","event","data","JSON","parse","message","waitForEnvironmentCreation","environmentName","Promise","resolve","reject","on","removeAllListeners","Error","cause"],"mappings":"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"}
@@ -1,8 +1,10 @@
1
1
  import EventSource from 'eventsource';
2
+ import EventEmitter from 'node:events';
2
3
 
3
4
  function notificationServiceFactory({ logger }) {
4
5
  return (url, token, cliConfig)=>{
5
6
  const CONN_TIMEOUT = Number(cliConfig.notificationsConnectionTimeout);
7
+ const eventEmitter = new EventEmitter();
6
8
  const es = new EventSource(url, {
7
9
  headers: {
8
10
  Authorization: `Bearer ${token}`
@@ -14,19 +16,59 @@ function notificationServiceFactory({ logger }) {
14
16
  timeoutId = setTimeout(()=>{
15
17
  logger.log('We were unable to connect to the server at this time. This could be due to a temporary issue. Please try again in a moment.');
16
18
  es.close();
19
+ eventEmitter.emit('connectionTimedOut');
17
20
  }, CONN_TIMEOUT); // 5 minutes
18
21
  };
19
- es.onopen = resetTimeout;
22
+ es.onopen = ()=>{
23
+ resetTimeout();
24
+ };
20
25
  es.onmessage = (event)=>{
21
26
  resetTimeout();
27
+ if (!event.data) {
28
+ return;
29
+ }
22
30
  const data = JSON.parse(event.data);
23
31
  if (data.message) {
24
32
  logger.log(data.message);
25
33
  }
26
34
  // Close connection when a specific event is received
27
- if (data.event === 'deploymentFinished' || data.event === 'deploymentFailed') {
35
+ if (data.event === 'deploymentCompleted' || data.event === 'deploymentFailed' || data.event === 'environmentCreationFailed' || data.event === 'environmentCreationCompleted') {
36
+ clearTimeout(timeoutId);
28
37
  es.close();
29
38
  }
39
+ eventEmitter.emit(data.event, data);
40
+ };
41
+ const waitForEnvironmentCreation = (environmentName)=>{
42
+ return new Promise((resolve, reject)=>{
43
+ eventEmitter.on('environmentCreationCompleted', (data)=>{
44
+ if (data.environmentName !== environmentName) {
45
+ return;
46
+ }
47
+ resolve('Environment created successfully');
48
+ eventEmitter.removeAllListeners('environmentCreationCompleted');
49
+ });
50
+ eventEmitter.on('environmentCreationFailed', (data)=>{
51
+ if (data.environmentName !== environmentName) {
52
+ return;
53
+ }
54
+ reject(new Error(`Environment creation failed`, {
55
+ cause: 'EnvironmentCreationFailed'
56
+ }));
57
+ eventEmitter.removeAllListeners('environmentCreationFailed');
58
+ });
59
+ eventEmitter.on('connectionTimedOut', ()=>{
60
+ reject(new Error('Connection timed out'));
61
+ });
62
+ });
63
+ };
64
+ const close = ()=>{
65
+ clearTimeout(timeoutId);
66
+ es.close();
67
+ eventEmitter.removeAllListeners();
68
+ };
69
+ return {
70
+ waitForEnvironmentCreation,
71
+ close
30
72
  };
31
73
  };
32
74
  }
@@ -1 +1 @@
1
- {"version":3,"file":"notification.mjs","sources":["../../src/services/notification.ts"],"sourcesContent":["import EventSource from 'eventsource';\nimport type { CLIContext, CloudCliConfig } from '../types';\n\ntype Event = {\n type: string;\n data: string;\n lastEventId: string;\n origin: string;\n};\n\nexport function notificationServiceFactory({ logger }: CLIContext) {\n return (url: string, token: string, cliConfig: CloudCliConfig) => {\n const CONN_TIMEOUT = Number(cliConfig.notificationsConnectionTimeout);\n\n const es = new EventSource(url, {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n });\n let timeoutId: NodeJS.Timeout;\n\n const resetTimeout = () => {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(() => {\n logger.log(\n 'We were unable to connect to the server at this time. This could be due to a temporary issue. Please try again in a moment.'\n );\n es.close();\n }, CONN_TIMEOUT); // 5 minutes\n };\n\n es.onopen = resetTimeout;\n es.onmessage = (event: Event) => {\n resetTimeout();\n const data = JSON.parse(event.data);\n\n if (data.message) {\n logger.log(data.message);\n }\n\n // Close connection when a specific event is received\n if (data.event === 'deploymentFinished' || data.event === 'deploymentFailed') {\n es.close();\n }\n };\n };\n}\n"],"names":["notificationServiceFactory","logger","url","token","cliConfig","CONN_TIMEOUT","Number","notificationsConnectionTimeout","es","EventSource","headers","Authorization","timeoutId","resetTimeout","clearTimeout","setTimeout","log","close","onopen","onmessage","event","data","JSON","parse","message"],"mappings":";;AAUO,SAASA,0BAAAA,CAA2B,EAAEC,MAAM,EAAc,EAAA;IAC/D,OAAO,CAACC,KAAaC,KAAeC,EAAAA,SAAAA,GAAAA;QAClC,MAAMC,YAAAA,GAAeC,MAAOF,CAAAA,SAAAA,CAAUG,8BAA8B,CAAA;QAEpE,MAAMC,EAAAA,GAAK,IAAIC,WAAAA,CAAYP,GAAK,EAAA;YAC9BQ,OAAS,EAAA;AACPC,gBAAAA,aAAAA,EAAe,CAAC,OAAO,EAAER,KAAAA,CAAM;AACjC;AACF,SAAA,CAAA;QACA,IAAIS,SAAAA;AAEJ,QAAA,MAAMC,YAAe,GAAA,IAAA;YACnBC,YAAaF,CAAAA,SAAAA,CAAAA;AACbA,YAAAA,SAAAA,GAAYG,UAAW,CAAA,IAAA;AACrBd,gBAAAA,MAAAA,CAAOe,GAAG,CACR,6HAAA,CAAA;AAEFR,gBAAAA,EAAAA,CAAGS,KAAK,EAAA;AACV,aAAA,EAAGZ;AACL,SAAA;AAEAG,QAAAA,EAAAA,CAAGU,MAAM,GAAGL,YAAAA;QACZL,EAAGW,CAAAA,SAAS,GAAG,CAACC,KAAAA,GAAAA;AACdP,YAAAA,YAAAA,EAAAA;AACA,YAAA,MAAMQ,IAAOC,GAAAA,IAAAA,CAAKC,KAAK,CAACH,MAAMC,IAAI,CAAA;YAElC,IAAIA,IAAAA,CAAKG,OAAO,EAAE;gBAChBvB,MAAOe,CAAAA,GAAG,CAACK,IAAAA,CAAKG,OAAO,CAAA;AACzB;;AAGA,YAAA,IAAIH,KAAKD,KAAK,KAAK,wBAAwBC,IAAKD,CAAAA,KAAK,KAAK,kBAAoB,EAAA;AAC5EZ,gBAAAA,EAAAA,CAAGS,KAAK,EAAA;AACV;AACF,SAAA;AACF,KAAA;AACF;;;;"}
1
+ {"version":3,"file":"notification.mjs","sources":["../../src/services/notification.ts"],"sourcesContent":["import EventSource from 'eventsource';\nimport EventEmitter from 'node:events';\nimport type { CLIContext, CloudCliConfig } from '../types';\n\ntype Event = {\n type: string;\n data: string;\n lastEventId: string;\n origin: string;\n};\n\ntype DeploymentNotificationData = {\n event:\n | 'deploymentFailed'\n | 'deploymentCompleted'\n | 'environmentCreationFailed'\n | 'environmentCreationCompleted';\n userId: string;\n projectName: string;\n environmentName: string;\n createdAt: string;\n message?: string;\n};\n\nexport function notificationServiceFactory({ logger }: CLIContext) {\n return (url: string, token: string, cliConfig: CloudCliConfig) => {\n const CONN_TIMEOUT = Number(cliConfig.notificationsConnectionTimeout);\n const eventEmitter = new EventEmitter();\n\n const es = new EventSource(url, {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n });\n let timeoutId: NodeJS.Timeout;\n\n const resetTimeout = () => {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(() => {\n logger.log(\n 'We were unable to connect to the server at this time. This could be due to a temporary issue. Please try again in a moment.'\n );\n es.close();\n eventEmitter.emit('connectionTimedOut');\n }, CONN_TIMEOUT); // 5 minutes\n };\n\n es.onopen = () => {\n resetTimeout();\n };\n es.onmessage = (event: Event) => {\n resetTimeout();\n if (!event.data) {\n return;\n }\n const data: DeploymentNotificationData = JSON.parse(event.data);\n\n if (data.message) {\n logger.log(data.message);\n }\n\n // Close connection when a specific event is received\n if (\n data.event === 'deploymentCompleted' ||\n data.event === 'deploymentFailed' ||\n data.event === 'environmentCreationFailed' ||\n data.event === 'environmentCreationCompleted'\n ) {\n clearTimeout(timeoutId);\n es.close();\n }\n eventEmitter.emit(data.event, data);\n };\n\n const waitForEnvironmentCreation = (environmentName: string) => {\n return new Promise((resolve, reject) => {\n eventEmitter.on('environmentCreationCompleted', (data: DeploymentNotificationData) => {\n if (data.environmentName !== environmentName) {\n return;\n }\n resolve('Environment created successfully');\n eventEmitter.removeAllListeners('environmentCreationCompleted');\n });\n eventEmitter.on('environmentCreationFailed', (data: DeploymentNotificationData) => {\n if (data.environmentName !== environmentName) {\n return;\n }\n reject(new Error(`Environment creation failed`, { cause: 'EnvironmentCreationFailed' }));\n eventEmitter.removeAllListeners('environmentCreationFailed');\n });\n\n eventEmitter.on('connectionTimedOut', () => {\n reject(new Error('Connection timed out'));\n });\n });\n };\n const close = () => {\n clearTimeout(timeoutId);\n es.close();\n eventEmitter.removeAllListeners();\n };\n return { waitForEnvironmentCreation, close };\n };\n}\n"],"names":["notificationServiceFactory","logger","url","token","cliConfig","CONN_TIMEOUT","Number","notificationsConnectionTimeout","eventEmitter","EventEmitter","es","EventSource","headers","Authorization","timeoutId","resetTimeout","clearTimeout","setTimeout","log","close","emit","onopen","onmessage","event","data","JSON","parse","message","waitForEnvironmentCreation","environmentName","Promise","resolve","reject","on","removeAllListeners","Error","cause"],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -7,6 +7,10 @@ export type ProjectAnswers = {
7
7
  region: string;
8
8
  plan: string;
9
9
  };
10
+ type BoxedErrorMessage = {
11
+ firstLine: string;
12
+ secondLine: string;
13
+ };
10
14
  export type CloudCliConfig = {
11
15
  clientId: string;
12
16
  baseUrl: string;
@@ -21,9 +25,15 @@ export type CloudCliConfig = {
21
25
  introText: string;
22
26
  userChoice?: object;
23
27
  reference?: string;
28
+ errors: {
29
+ environmentCreationFailed: BoxedErrorMessage;
30
+ };
24
31
  };
25
32
  projectDeployment: {
26
33
  confirmationText: string;
34
+ errors: {
35
+ environmentNotReady: BoxedErrorMessage;
36
+ };
27
37
  };
28
38
  buildLogsConnectionTimeout: string;
29
39
  buildLogsMaxRetries: string;
@@ -32,6 +42,7 @@ export type CloudCliConfig = {
32
42
  featureFlags: {
33
43
  cloudLoginPromptEnabled: boolean;
34
44
  growthSsoTrialEnabled: boolean;
45
+ asyncProjectCreationEnabled: boolean;
35
46
  };
36
47
  };
37
48
  export interface CLIContext {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE;QACf,SAAS,EAAE,aAAa,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC,CAAC;QAC3D,QAAQ,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;QAClC,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,iBAAiB,EAAE;QACjB,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF,0BAA0B,EAAE,MAAM,CAAC;IACnC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,8BAA8B,EAAE,MAAM,CAAC;IACvC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE;QACZ,uBAAuB,EAAE,OAAO,CAAC;QACjC,qBAAqB,EAAE,OAAO,CAAC;KAChC,CAAC;CACH,CAAC;AAEF,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,MAAM,kBAAkB,GAAG,CAAC,MAAM,EAAE;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,UAAU,CAAC;CACjB,KAAK,IAAI,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;AAE/C,MAAM,MAAM,2BAA2B,GAAG,CAAC,MAAM,EAAE;IACjD,OAAO,EAAE,OAAO,CAAC;CAClB,KAAK,IAAI,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;AAE/C,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,kBAAkB,CAAC;IAC5B,MAAM,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAClF,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEnD,mBAAmB,oBAAoB,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE;QACf,SAAS,EAAE,aAAa,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC,CAAC;QAC3D,QAAQ,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;QAClC,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE;YACN,yBAAyB,EAAE,iBAAiB,CAAC;SAC9C,CAAC;KACH,CAAC;IACF,iBAAiB,EAAE;QACjB,gBAAgB,EAAE,MAAM,CAAC;QACzB,MAAM,EAAE;YACN,mBAAmB,EAAE,iBAAiB,CAAC;SACxC,CAAC;KACH,CAAC;IACF,0BAA0B,EAAE,MAAM,CAAC;IACnC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,8BAA8B,EAAE,MAAM,CAAC;IACvC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE;QACZ,uBAAuB,EAAE,OAAO,CAAC;QACjC,qBAAqB,EAAE,OAAO,CAAC;QAC/B,2BAA2B,EAAE,OAAO,CAAC;KACtC,CAAC;CACH,CAAC;AAEF,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,MAAM,kBAAkB,GAAG,CAAC,MAAM,EAAE;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,UAAU,CAAC;CACjB,KAAK,IAAI,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;AAE/C,MAAM,MAAM,2BAA2B,GAAG,CAAC,MAAM,EAAE;IACjD,OAAO,EAAE,OAAO,CAAC;CAClB,KAAK,IAAI,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;AAE/C,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,kBAAkB,CAAC;IAC5B,MAAM,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAClF,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEnD,mBAAmB,oBAAoB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"compress-files.d.ts","sourceRoot":"","sources":["../../src/utils/compress-files.ts"],"names":[],"mappings":"AAoBA,QAAA,MAAM,aAAa,eAAgB,MAAM,QAAQ,MAAM,kBAAkB,MAAM,EAAE,KAAG,OAgBnF,CAAC;AAwCF,QAAA,MAAM,kBAAkB,gBACT,MAAM,oBACD,MAAM,YACd,MAAM,KACf,QAAQ,IAAI,CAWd,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"compress-files.d.ts","sourceRoot":"","sources":["../../src/utils/compress-files.ts"],"names":[],"mappings":"AAsBA,QAAA,MAAM,aAAa,eAAgB,MAAM,QAAQ,MAAM,kBAAkB,MAAM,EAAE,KAAG,OAgBnF,CAAC;AAwCF,QAAA,MAAM,kBAAkB,gBACT,MAAM,oBACD,MAAM,YACd,MAAM,KACf,QAAQ,IAAI,CAWd,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,CAAC"}
@@ -30,6 +30,7 @@ const IGNORED_PATTERNS = [
30
30
  '**/.git/**',
31
31
  '**/node_modules/**',
32
32
  '**/build/**',
33
+ '**/data/uploads/**',
33
34
  '**/dist/**',
34
35
  '**/.cache/**',
35
36
  '**/.circleci/**',
@@ -38,6 +39,7 @@ const IGNORED_PATTERNS = [
38
39
  '**/.gitkeep',
39
40
  '**/.gitlab-ci.yml',
40
41
  '**/.idea/**',
42
+ '**/public/uploads/**',
41
43
  '**/.vscode/**'
42
44
  ];
43
45
  const isIgnoredFile = (folderPath, file, ignorePatterns)=>{
@@ -1 +1 @@
1
- {"version":3,"file":"compress-files.js","sources":["../../src/utils/compress-files.ts"],"sourcesContent":["import * as fse from 'fs-extra';\nimport * as tar from 'tar';\nimport * as path from 'path';\nimport { minimatch } from 'minimatch';\n\nconst IGNORED_PATTERNS = [\n '**/.git/**',\n '**/node_modules/**',\n '**/build/**',\n '**/dist/**',\n '**/.cache/**',\n '**/.circleci/**',\n '**/.github/**',\n '**/.gitignore',\n '**/.gitkeep',\n '**/.gitlab-ci.yml',\n '**/.idea/**',\n '**/.vscode/**',\n];\n\nconst isIgnoredFile = (folderPath: string, file: string, ignorePatterns: string[]): boolean => {\n ignorePatterns.push(...IGNORED_PATTERNS);\n const relativeFilePath = path.join(folderPath, file);\n let isIgnored = false;\n for (const pattern of ignorePatterns) {\n if (pattern.startsWith('!')) {\n if (minimatch(relativeFilePath, pattern.slice(1), { matchBase: true, dot: true })) {\n return false;\n }\n } else if (minimatch(relativeFilePath, pattern, { matchBase: true, dot: true })) {\n if (path.basename(file) !== '.gitkeep') {\n isIgnored = true;\n }\n }\n }\n return isIgnored;\n};\n\nconst getFiles = async (\n dirPath: string,\n ignorePatterns: string[] = [],\n subfolder: string = ''\n): Promise<string[]> => {\n const arrayOfFiles: string[] = [];\n const entries = await fse.readdir(path.join(dirPath, subfolder));\n\n for (const entry of entries) {\n const entryPathFromRoot = path.join(subfolder, entry);\n const entryPath = path.relative(dirPath, entryPathFromRoot);\n const isIgnored = isIgnoredFile(dirPath, entryPathFromRoot, ignorePatterns);\n\n if (!isIgnored) {\n if (fse.statSync(entryPath).isDirectory()) {\n const subFiles = await getFiles(dirPath, ignorePatterns, entryPathFromRoot);\n arrayOfFiles.push(...subFiles);\n } else {\n arrayOfFiles.push(entryPath);\n }\n }\n }\n return arrayOfFiles;\n};\n\nconst readGitignore = async (folderPath: string): Promise<string[]> => {\n const gitignorePath = path.resolve(folderPath, '.gitignore');\n const pathExist = await fse.pathExists(gitignorePath);\n\n if (!pathExist) return [];\n\n const gitignoreContent = await fse.readFile(gitignorePath, 'utf8');\n\n return gitignoreContent\n .split(/\\r?\\n/)\n .filter((line) => Boolean(line.trim()) && !line.startsWith('#'));\n};\n\nconst compressFilesToTar = async (\n storagePath: string,\n folderToCompress: string,\n filename: string\n): Promise<void> => {\n const ignorePatterns = await readGitignore(folderToCompress);\n const filesToCompress = await getFiles(folderToCompress, ignorePatterns);\n\n return tar.c(\n {\n gzip: true,\n file: path.resolve(storagePath, filename),\n },\n filesToCompress\n );\n};\n\nexport { compressFilesToTar, isIgnoredFile };\n"],"names":["IGNORED_PATTERNS","isIgnoredFile","folderPath","file","ignorePatterns","push","relativeFilePath","path","join","isIgnored","pattern","startsWith","minimatch","slice","matchBase","dot","basename","getFiles","dirPath","subfolder","arrayOfFiles","entries","fse","readdir","entry","entryPathFromRoot","entryPath","relative","statSync","isDirectory","subFiles","readGitignore","gitignorePath","resolve","pathExist","pathExists","gitignoreContent","readFile","split","filter","line","Boolean","trim","compressFilesToTar","storagePath","folderToCompress","filename","filesToCompress","tar","c","gzip"],"mappings":"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"}
1
+ {"version":3,"file":"compress-files.js","sources":["../../src/utils/compress-files.ts"],"sourcesContent":["import * as fse from 'fs-extra';\nimport * as tar from 'tar';\nimport * as path from 'path';\nimport { minimatch } from 'minimatch';\n\nconst IGNORED_PATTERNS = [\n '**/.git/**',\n '**/node_modules/**',\n '**/build/**',\n '**/data/uploads/**',\n '**/dist/**',\n '**/.cache/**',\n '**/.circleci/**',\n '**/.github/**',\n '**/.gitignore',\n '**/.gitkeep',\n '**/.gitlab-ci.yml',\n '**/.idea/**',\n '**/public/uploads/**',\n '**/.vscode/**',\n];\n\nconst isIgnoredFile = (folderPath: string, file: string, ignorePatterns: string[]): boolean => {\n ignorePatterns.push(...IGNORED_PATTERNS);\n const relativeFilePath = path.join(folderPath, file);\n let isIgnored = false;\n for (const pattern of ignorePatterns) {\n if (pattern.startsWith('!')) {\n if (minimatch(relativeFilePath, pattern.slice(1), { matchBase: true, dot: true })) {\n return false;\n }\n } else if (minimatch(relativeFilePath, pattern, { matchBase: true, dot: true })) {\n if (path.basename(file) !== '.gitkeep') {\n isIgnored = true;\n }\n }\n }\n return isIgnored;\n};\n\nconst getFiles = async (\n dirPath: string,\n ignorePatterns: string[] = [],\n subfolder: string = ''\n): Promise<string[]> => {\n const arrayOfFiles: string[] = [];\n const entries = await fse.readdir(path.join(dirPath, subfolder));\n\n for (const entry of entries) {\n const entryPathFromRoot = path.join(subfolder, entry);\n const entryPath = path.relative(dirPath, entryPathFromRoot);\n const isIgnored = isIgnoredFile(dirPath, entryPathFromRoot, ignorePatterns);\n\n if (!isIgnored) {\n if (fse.statSync(entryPath).isDirectory()) {\n const subFiles = await getFiles(dirPath, ignorePatterns, entryPathFromRoot);\n arrayOfFiles.push(...subFiles);\n } else {\n arrayOfFiles.push(entryPath);\n }\n }\n }\n return arrayOfFiles;\n};\n\nconst readGitignore = async (folderPath: string): Promise<string[]> => {\n const gitignorePath = path.resolve(folderPath, '.gitignore');\n const pathExist = await fse.pathExists(gitignorePath);\n\n if (!pathExist) return [];\n\n const gitignoreContent = await fse.readFile(gitignorePath, 'utf8');\n\n return gitignoreContent\n .split(/\\r?\\n/)\n .filter((line) => Boolean(line.trim()) && !line.startsWith('#'));\n};\n\nconst compressFilesToTar = async (\n storagePath: string,\n folderToCompress: string,\n filename: string\n): Promise<void> => {\n const ignorePatterns = await readGitignore(folderToCompress);\n const filesToCompress = await getFiles(folderToCompress, ignorePatterns);\n\n return tar.c(\n {\n gzip: true,\n file: path.resolve(storagePath, filename),\n },\n filesToCompress\n );\n};\n\nexport { compressFilesToTar, isIgnoredFile };\n"],"names":["IGNORED_PATTERNS","isIgnoredFile","folderPath","file","ignorePatterns","push","relativeFilePath","path","join","isIgnored","pattern","startsWith","minimatch","slice","matchBase","dot","basename","getFiles","dirPath","subfolder","arrayOfFiles","entries","fse","readdir","entry","entryPathFromRoot","entryPath","relative","statSync","isDirectory","subFiles","readGitignore","gitignorePath","resolve","pathExist","pathExists","gitignoreContent","readFile","split","filter","line","Boolean","trim","compressFilesToTar","storagePath","folderToCompress","filename","filesToCompress","tar","c","gzip"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,MAAMA,gBAAmB,GAAA;AACvB,IAAA,YAAA;AACA,IAAA,oBAAA;AACA,IAAA,aAAA;AACA,IAAA,oBAAA;AACA,IAAA,YAAA;AACA,IAAA,cAAA;AACA,IAAA,iBAAA;AACA,IAAA,eAAA;AACA,IAAA,eAAA;AACA,IAAA,aAAA;AACA,IAAA,mBAAA;AACA,IAAA,aAAA;AACA,IAAA,sBAAA;AACA,IAAA;AACD,CAAA;AAEKC,MAAAA,aAAAA,GAAgB,CAACC,UAAAA,EAAoBC,IAAcC,EAAAA,cAAAA,GAAAA;AACvDA,IAAAA,cAAAA,CAAeC,IAAI,CAAIL,GAAAA,gBAAAA,CAAAA;AACvB,IAAA,MAAMM,gBAAmBC,GAAAA,eAAAA,CAAKC,IAAI,CAACN,UAAYC,EAAAA,IAAAA,CAAAA;AAC/C,IAAA,IAAIM,SAAY,GAAA,KAAA;IAChB,KAAK,MAAMC,WAAWN,cAAgB,CAAA;QACpC,IAAIM,OAAAA,CAAQC,UAAU,CAAC,GAAM,CAAA,EAAA;AAC3B,YAAA,IAAIC,mBAAUN,CAAAA,gBAAAA,EAAkBI,OAAQG,CAAAA,KAAK,CAAC,CAAI,CAAA,EAAA;gBAAEC,SAAW,EAAA,IAAA;gBAAMC,GAAK,EAAA;aAAS,CAAA,EAAA;gBACjF,OAAO,KAAA;AACT;SACK,MAAA,IAAIH,mBAAUN,CAAAA,gBAAAA,EAAkBI,OAAS,EAAA;YAAEI,SAAW,EAAA,IAAA;YAAMC,GAAK,EAAA;SAAS,CAAA,EAAA;AAC/E,YAAA,IAAIR,eAAKS,CAAAA,QAAQ,CAACb,IAAAA,CAAAA,KAAU,UAAY,EAAA;gBACtCM,SAAY,GAAA,IAAA;AACd;AACF;AACF;IACA,OAAOA,SAAAA;AACT;AAEA,MAAMQ,WAAW,OACfC,OAAAA,EACAd,iBAA2B,EAAE,EAC7Be,YAAoB,EAAE,GAAA;AAEtB,IAAA,MAAMC,eAAyB,EAAE;IACjC,MAAMC,OAAAA,GAAU,MAAMC,cAAIC,CAAAA,OAAO,CAAChB,eAAKC,CAAAA,IAAI,CAACU,OAASC,EAAAA,SAAAA,CAAAA,CAAAA;IAErD,KAAK,MAAMK,SAASH,OAAS,CAAA;AAC3B,QAAA,MAAMI,iBAAoBlB,GAAAA,eAAAA,CAAKC,IAAI,CAACW,SAAWK,EAAAA,KAAAA,CAAAA;AAC/C,QAAA,MAAME,SAAYnB,GAAAA,eAAAA,CAAKoB,QAAQ,CAACT,OAASO,EAAAA,iBAAAA,CAAAA;QACzC,MAAMhB,SAAAA,GAAYR,aAAciB,CAAAA,OAAAA,EAASO,iBAAmBrB,EAAAA,cAAAA,CAAAA;AAE5D,QAAA,IAAI,CAACK,SAAW,EAAA;AACd,YAAA,IAAIa,cAAIM,CAAAA,QAAQ,CAACF,SAAAA,CAAAA,CAAWG,WAAW,EAAI,EAAA;AACzC,gBAAA,MAAMC,QAAW,GAAA,MAAMb,QAASC,CAAAA,OAAAA,EAASd,cAAgBqB,EAAAA,iBAAAA,CAAAA;AACzDL,gBAAAA,YAAAA,CAAaf,IAAI,CAAIyB,GAAAA,QAAAA,CAAAA;aAChB,MAAA;AACLV,gBAAAA,YAAAA,CAAaf,IAAI,CAACqB,SAAAA,CAAAA;AACpB;AACF;AACF;IACA,OAAON,YAAAA;AACT,CAAA;AAEA,MAAMW,gBAAgB,OAAO7B,UAAAA,GAAAA;AAC3B,IAAA,MAAM8B,aAAgBzB,GAAAA,eAAAA,CAAK0B,OAAO,CAAC/B,UAAY,EAAA,YAAA,CAAA;AAC/C,IAAA,MAAMgC,SAAY,GAAA,MAAMZ,cAAIa,CAAAA,UAAU,CAACH,aAAAA,CAAAA;IAEvC,IAAI,CAACE,SAAW,EAAA,OAAO,EAAE;AAEzB,IAAA,MAAME,gBAAmB,GAAA,MAAMd,cAAIe,CAAAA,QAAQ,CAACL,aAAe,EAAA,MAAA,CAAA;AAE3D,IAAA,OAAOI,gBACJE,CAAAA,KAAK,CAAC,OAAA,CAAA,CACNC,MAAM,CAAC,CAACC,IAASC,GAAAA,OAAAA,CAAQD,KAAKE,IAAI,EAAA,CAAA,IAAO,CAACF,IAAAA,CAAK7B,UAAU,CAAC,GAAA,CAAA,CAAA;AAC/D,CAAA;AAEMgC,MAAAA,kBAAAA,GAAqB,OACzBC,WAAAA,EACAC,gBACAC,EAAAA,QAAAA,GAAAA;IAEA,MAAM1C,cAAAA,GAAiB,MAAM2B,aAAcc,CAAAA,gBAAAA,CAAAA;IAC3C,MAAME,eAAAA,GAAkB,MAAM9B,QAAAA,CAAS4B,gBAAkBzC,EAAAA,cAAAA,CAAAA;IAEzD,OAAO4C,cAAAA,CAAIC,CAAC,CACV;QACEC,IAAM,EAAA,IAAA;QACN/C,IAAMI,EAAAA,eAAAA,CAAK0B,OAAO,CAACW,WAAaE,EAAAA,QAAAA;KAElCC,EAAAA,eAAAA,CAAAA;AAEJ;;;;;"}
@@ -7,6 +7,7 @@ const IGNORED_PATTERNS = [
7
7
  '**/.git/**',
8
8
  '**/node_modules/**',
9
9
  '**/build/**',
10
+ '**/data/uploads/**',
10
11
  '**/dist/**',
11
12
  '**/.cache/**',
12
13
  '**/.circleci/**',
@@ -15,6 +16,7 @@ const IGNORED_PATTERNS = [
15
16
  '**/.gitkeep',
16
17
  '**/.gitlab-ci.yml',
17
18
  '**/.idea/**',
19
+ '**/public/uploads/**',
18
20
  '**/.vscode/**'
19
21
  ];
20
22
  const isIgnoredFile = (folderPath, file, ignorePatterns)=>{
@@ -1 +1 @@
1
- {"version":3,"file":"compress-files.mjs","sources":["../../src/utils/compress-files.ts"],"sourcesContent":["import * as fse from 'fs-extra';\nimport * as tar from 'tar';\nimport * as path from 'path';\nimport { minimatch } from 'minimatch';\n\nconst IGNORED_PATTERNS = [\n '**/.git/**',\n '**/node_modules/**',\n '**/build/**',\n '**/dist/**',\n '**/.cache/**',\n '**/.circleci/**',\n '**/.github/**',\n '**/.gitignore',\n '**/.gitkeep',\n '**/.gitlab-ci.yml',\n '**/.idea/**',\n '**/.vscode/**',\n];\n\nconst isIgnoredFile = (folderPath: string, file: string, ignorePatterns: string[]): boolean => {\n ignorePatterns.push(...IGNORED_PATTERNS);\n const relativeFilePath = path.join(folderPath, file);\n let isIgnored = false;\n for (const pattern of ignorePatterns) {\n if (pattern.startsWith('!')) {\n if (minimatch(relativeFilePath, pattern.slice(1), { matchBase: true, dot: true })) {\n return false;\n }\n } else if (minimatch(relativeFilePath, pattern, { matchBase: true, dot: true })) {\n if (path.basename(file) !== '.gitkeep') {\n isIgnored = true;\n }\n }\n }\n return isIgnored;\n};\n\nconst getFiles = async (\n dirPath: string,\n ignorePatterns: string[] = [],\n subfolder: string = ''\n): Promise<string[]> => {\n const arrayOfFiles: string[] = [];\n const entries = await fse.readdir(path.join(dirPath, subfolder));\n\n for (const entry of entries) {\n const entryPathFromRoot = path.join(subfolder, entry);\n const entryPath = path.relative(dirPath, entryPathFromRoot);\n const isIgnored = isIgnoredFile(dirPath, entryPathFromRoot, ignorePatterns);\n\n if (!isIgnored) {\n if (fse.statSync(entryPath).isDirectory()) {\n const subFiles = await getFiles(dirPath, ignorePatterns, entryPathFromRoot);\n arrayOfFiles.push(...subFiles);\n } else {\n arrayOfFiles.push(entryPath);\n }\n }\n }\n return arrayOfFiles;\n};\n\nconst readGitignore = async (folderPath: string): Promise<string[]> => {\n const gitignorePath = path.resolve(folderPath, '.gitignore');\n const pathExist = await fse.pathExists(gitignorePath);\n\n if (!pathExist) return [];\n\n const gitignoreContent = await fse.readFile(gitignorePath, 'utf8');\n\n return gitignoreContent\n .split(/\\r?\\n/)\n .filter((line) => Boolean(line.trim()) && !line.startsWith('#'));\n};\n\nconst compressFilesToTar = async (\n storagePath: string,\n folderToCompress: string,\n filename: string\n): Promise<void> => {\n const ignorePatterns = await readGitignore(folderToCompress);\n const filesToCompress = await getFiles(folderToCompress, ignorePatterns);\n\n return tar.c(\n {\n gzip: true,\n file: path.resolve(storagePath, filename),\n },\n filesToCompress\n );\n};\n\nexport { compressFilesToTar, isIgnoredFile };\n"],"names":["IGNORED_PATTERNS","isIgnoredFile","folderPath","file","ignorePatterns","push","relativeFilePath","path","join","isIgnored","pattern","startsWith","minimatch","slice","matchBase","dot","basename","getFiles","dirPath","subfolder","arrayOfFiles","entries","fse","readdir","entry","entryPathFromRoot","entryPath","relative","statSync","isDirectory","subFiles","readGitignore","gitignorePath","resolve","pathExist","pathExists","gitignoreContent","readFile","split","filter","line","Boolean","trim","compressFilesToTar","storagePath","folderToCompress","filename","filesToCompress","tar","c","gzip"],"mappings":"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"}
1
+ {"version":3,"file":"compress-files.mjs","sources":["../../src/utils/compress-files.ts"],"sourcesContent":["import * as fse from 'fs-extra';\nimport * as tar from 'tar';\nimport * as path from 'path';\nimport { minimatch } from 'minimatch';\n\nconst IGNORED_PATTERNS = [\n '**/.git/**',\n '**/node_modules/**',\n '**/build/**',\n '**/data/uploads/**',\n '**/dist/**',\n '**/.cache/**',\n '**/.circleci/**',\n '**/.github/**',\n '**/.gitignore',\n '**/.gitkeep',\n '**/.gitlab-ci.yml',\n '**/.idea/**',\n '**/public/uploads/**',\n '**/.vscode/**',\n];\n\nconst isIgnoredFile = (folderPath: string, file: string, ignorePatterns: string[]): boolean => {\n ignorePatterns.push(...IGNORED_PATTERNS);\n const relativeFilePath = path.join(folderPath, file);\n let isIgnored = false;\n for (const pattern of ignorePatterns) {\n if (pattern.startsWith('!')) {\n if (minimatch(relativeFilePath, pattern.slice(1), { matchBase: true, dot: true })) {\n return false;\n }\n } else if (minimatch(relativeFilePath, pattern, { matchBase: true, dot: true })) {\n if (path.basename(file) !== '.gitkeep') {\n isIgnored = true;\n }\n }\n }\n return isIgnored;\n};\n\nconst getFiles = async (\n dirPath: string,\n ignorePatterns: string[] = [],\n subfolder: string = ''\n): Promise<string[]> => {\n const arrayOfFiles: string[] = [];\n const entries = await fse.readdir(path.join(dirPath, subfolder));\n\n for (const entry of entries) {\n const entryPathFromRoot = path.join(subfolder, entry);\n const entryPath = path.relative(dirPath, entryPathFromRoot);\n const isIgnored = isIgnoredFile(dirPath, entryPathFromRoot, ignorePatterns);\n\n if (!isIgnored) {\n if (fse.statSync(entryPath).isDirectory()) {\n const subFiles = await getFiles(dirPath, ignorePatterns, entryPathFromRoot);\n arrayOfFiles.push(...subFiles);\n } else {\n arrayOfFiles.push(entryPath);\n }\n }\n }\n return arrayOfFiles;\n};\n\nconst readGitignore = async (folderPath: string): Promise<string[]> => {\n const gitignorePath = path.resolve(folderPath, '.gitignore');\n const pathExist = await fse.pathExists(gitignorePath);\n\n if (!pathExist) return [];\n\n const gitignoreContent = await fse.readFile(gitignorePath, 'utf8');\n\n return gitignoreContent\n .split(/\\r?\\n/)\n .filter((line) => Boolean(line.trim()) && !line.startsWith('#'));\n};\n\nconst compressFilesToTar = async (\n storagePath: string,\n folderToCompress: string,\n filename: string\n): Promise<void> => {\n const ignorePatterns = await readGitignore(folderToCompress);\n const filesToCompress = await getFiles(folderToCompress, ignorePatterns);\n\n return tar.c(\n {\n gzip: true,\n file: path.resolve(storagePath, filename),\n },\n filesToCompress\n );\n};\n\nexport { compressFilesToTar, isIgnoredFile };\n"],"names":["IGNORED_PATTERNS","isIgnoredFile","folderPath","file","ignorePatterns","push","relativeFilePath","path","join","isIgnored","pattern","startsWith","minimatch","slice","matchBase","dot","basename","getFiles","dirPath","subfolder","arrayOfFiles","entries","fse","readdir","entry","entryPathFromRoot","entryPath","relative","statSync","isDirectory","subFiles","readGitignore","gitignorePath","resolve","pathExist","pathExists","gitignoreContent","readFile","split","filter","line","Boolean","trim","compressFilesToTar","storagePath","folderToCompress","filename","filesToCompress","tar","c","gzip"],"mappings":";;;;;AAKA,MAAMA,gBAAmB,GAAA;AACvB,IAAA,YAAA;AACA,IAAA,oBAAA;AACA,IAAA,aAAA;AACA,IAAA,oBAAA;AACA,IAAA,YAAA;AACA,IAAA,cAAA;AACA,IAAA,iBAAA;AACA,IAAA,eAAA;AACA,IAAA,eAAA;AACA,IAAA,aAAA;AACA,IAAA,mBAAA;AACA,IAAA,aAAA;AACA,IAAA,sBAAA;AACA,IAAA;AACD,CAAA;AAEKC,MAAAA,aAAAA,GAAgB,CAACC,UAAAA,EAAoBC,IAAcC,EAAAA,cAAAA,GAAAA;AACvDA,IAAAA,cAAAA,CAAeC,IAAI,CAAIL,GAAAA,gBAAAA,CAAAA;AACvB,IAAA,MAAMM,gBAAmBC,GAAAA,IAAAA,CAAKC,IAAI,CAACN,UAAYC,EAAAA,IAAAA,CAAAA;AAC/C,IAAA,IAAIM,SAAY,GAAA,KAAA;IAChB,KAAK,MAAMC,WAAWN,cAAgB,CAAA;QACpC,IAAIM,OAAAA,CAAQC,UAAU,CAAC,GAAM,CAAA,EAAA;AAC3B,YAAA,IAAIC,SAAUN,CAAAA,gBAAAA,EAAkBI,OAAQG,CAAAA,KAAK,CAAC,CAAI,CAAA,EAAA;gBAAEC,SAAW,EAAA,IAAA;gBAAMC,GAAK,EAAA;aAAS,CAAA,EAAA;gBACjF,OAAO,KAAA;AACT;SACK,MAAA,IAAIH,SAAUN,CAAAA,gBAAAA,EAAkBI,OAAS,EAAA;YAAEI,SAAW,EAAA,IAAA;YAAMC,GAAK,EAAA;SAAS,CAAA,EAAA;AAC/E,YAAA,IAAIR,IAAKS,CAAAA,QAAQ,CAACb,IAAAA,CAAAA,KAAU,UAAY,EAAA;gBACtCM,SAAY,GAAA,IAAA;AACd;AACF;AACF;IACA,OAAOA,SAAAA;AACT;AAEA,MAAMQ,WAAW,OACfC,OAAAA,EACAd,iBAA2B,EAAE,EAC7Be,YAAoB,EAAE,GAAA;AAEtB,IAAA,MAAMC,eAAyB,EAAE;IACjC,MAAMC,OAAAA,GAAU,MAAMC,GAAIC,CAAAA,OAAO,CAAChB,IAAKC,CAAAA,IAAI,CAACU,OAASC,EAAAA,SAAAA,CAAAA,CAAAA;IAErD,KAAK,MAAMK,SAASH,OAAS,CAAA;AAC3B,QAAA,MAAMI,iBAAoBlB,GAAAA,IAAAA,CAAKC,IAAI,CAACW,SAAWK,EAAAA,KAAAA,CAAAA;AAC/C,QAAA,MAAME,SAAYnB,GAAAA,IAAAA,CAAKoB,QAAQ,CAACT,OAASO,EAAAA,iBAAAA,CAAAA;QACzC,MAAMhB,SAAAA,GAAYR,aAAciB,CAAAA,OAAAA,EAASO,iBAAmBrB,EAAAA,cAAAA,CAAAA;AAE5D,QAAA,IAAI,CAACK,SAAW,EAAA;AACd,YAAA,IAAIa,GAAIM,CAAAA,QAAQ,CAACF,SAAAA,CAAAA,CAAWG,WAAW,EAAI,EAAA;AACzC,gBAAA,MAAMC,QAAW,GAAA,MAAMb,QAASC,CAAAA,OAAAA,EAASd,cAAgBqB,EAAAA,iBAAAA,CAAAA;AACzDL,gBAAAA,YAAAA,CAAaf,IAAI,CAAIyB,GAAAA,QAAAA,CAAAA;aAChB,MAAA;AACLV,gBAAAA,YAAAA,CAAaf,IAAI,CAACqB,SAAAA,CAAAA;AACpB;AACF;AACF;IACA,OAAON,YAAAA;AACT,CAAA;AAEA,MAAMW,gBAAgB,OAAO7B,UAAAA,GAAAA;AAC3B,IAAA,MAAM8B,aAAgBzB,GAAAA,IAAAA,CAAK0B,OAAO,CAAC/B,UAAY,EAAA,YAAA,CAAA;AAC/C,IAAA,MAAMgC,SAAY,GAAA,MAAMZ,GAAIa,CAAAA,UAAU,CAACH,aAAAA,CAAAA;IAEvC,IAAI,CAACE,SAAW,EAAA,OAAO,EAAE;AAEzB,IAAA,MAAME,gBAAmB,GAAA,MAAMd,GAAIe,CAAAA,QAAQ,CAACL,aAAe,EAAA,MAAA,CAAA;AAE3D,IAAA,OAAOI,gBACJE,CAAAA,KAAK,CAAC,OAAA,CAAA,CACNC,MAAM,CAAC,CAACC,IAASC,GAAAA,OAAAA,CAAQD,KAAKE,IAAI,EAAA,CAAA,IAAO,CAACF,IAAAA,CAAK7B,UAAU,CAAC,GAAA,CAAA,CAAA;AAC/D,CAAA;AAEMgC,MAAAA,kBAAAA,GAAqB,OACzBC,WAAAA,EACAC,gBACAC,EAAAA,QAAAA,GAAAA;IAEA,MAAM1C,cAAAA,GAAiB,MAAM2B,aAAcc,CAAAA,gBAAAA,CAAAA;IAC3C,MAAME,eAAAA,GAAkB,MAAM9B,QAAAA,CAAS4B,gBAAkBzC,EAAAA,cAAAA,CAAAA;IAEzD,OAAO4C,GAAAA,CAAIC,CAAC,CACV;QACEC,IAAM,EAAA,IAAA;QACN/C,IAAMI,EAAAA,IAAAA,CAAK0B,OAAO,CAACW,WAAaE,EAAAA,QAAAA;KAElCC,EAAAA,eAAAA,CAAAA;AAEJ;;;;"}
@@ -0,0 +1,9 @@
1
+ type EnvironmentErrorMessage = {
2
+ projectName: string;
3
+ firstLine: string;
4
+ secondLine: string;
5
+ };
6
+ export declare const environmentErrorMessageFactory: ({ projectName, firstLine, secondLine, }: EnvironmentErrorMessage) => string;
7
+ export declare const environmentCreationErrorFactory: (environmentErrorMessage: string) => string;
8
+ export {};
9
+ //# sourceMappingURL=error-message-factories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-message-factories.d.ts","sourceRoot":"","sources":["../../src/utils/error-message-factories.ts"],"names":[],"mappings":"AAIA,KAAK,uBAAuB,GAAG;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,8BAA8B,4CAIxC,uBAAuB,WAQzB,CAAC;AAEF,eAAO,MAAM,+BAA+B,4BAA6B,MAAM,WAO3E,CAAC"}
@@ -0,0 +1,25 @@
1
+ 'use strict';
2
+
3
+ var chalk = require('chalk');
4
+ var boxen = require('boxen');
5
+ var api = require('../config/api.js');
6
+
7
+ const environmentErrorMessageFactory = ({ projectName, firstLine, secondLine })=>{
8
+ return [
9
+ chalk.yellow(firstLine),
10
+ '',
11
+ chalk.cyan(secondLine),
12
+ chalk.blue(' → ') + chalk.blue.underline(`${api.apiConfig.dashboardBaseUrl}/projects/${projectName}`)
13
+ ].join('\n');
14
+ };
15
+ const environmentCreationErrorFactory = (environmentErrorMessage)=>boxen(environmentErrorMessage, {
16
+ padding: 1,
17
+ margin: 1,
18
+ borderStyle: 'round',
19
+ borderColor: 'white',
20
+ titleAlignment: 'left'
21
+ });
22
+
23
+ exports.environmentCreationErrorFactory = environmentCreationErrorFactory;
24
+ exports.environmentErrorMessageFactory = environmentErrorMessageFactory;
25
+ //# sourceMappingURL=error-message-factories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-message-factories.js","sources":["../../src/utils/error-message-factories.ts"],"sourcesContent":["import chalk from 'chalk';\nimport boxen from 'boxen';\nimport { apiConfig } from '../config/api';\n\ntype EnvironmentErrorMessage = {\n projectName: string;\n firstLine: string;\n secondLine: string;\n};\n\nexport const environmentErrorMessageFactory = ({\n projectName,\n firstLine,\n secondLine,\n}: EnvironmentErrorMessage) => {\n return [\n chalk.yellow(firstLine),\n '',\n chalk.cyan(secondLine),\n chalk.blue(' → ') +\n chalk.blue.underline(`${apiConfig.dashboardBaseUrl}/projects/${projectName}`),\n ].join('\\n');\n};\n\nexport const environmentCreationErrorFactory = (environmentErrorMessage: string) =>\n boxen(environmentErrorMessage, {\n padding: 1,\n margin: 1,\n borderStyle: 'round',\n borderColor: 'white',\n titleAlignment: 'left',\n });\n"],"names":["environmentErrorMessageFactory","projectName","firstLine","secondLine","chalk","yellow","cyan","blue","underline","apiConfig","dashboardBaseUrl","join","environmentCreationErrorFactory","environmentErrorMessage","boxen","padding","margin","borderStyle","borderColor","titleAlignment"],"mappings":";;;;;;AAUO,MAAMA,iCAAiC,CAAC,EAC7CC,WAAW,EACXC,SAAS,EACTC,UAAU,EACc,GAAA;IACxB,OAAO;AACLC,QAAAA,KAAAA,CAAMC,MAAM,CAACH,SAAAA,CAAAA;AACb,QAAA,EAAA;AACAE,QAAAA,KAAAA,CAAME,IAAI,CAACH,UAAAA,CAAAA;AACXC,QAAAA,KAAAA,CAAMG,IAAI,CAAC,MAAA,CAAA,GACTH,KAAMG,CAAAA,IAAI,CAACC,SAAS,CAAC,CAAC,EAAEC,cAAUC,gBAAgB,CAAC,UAAU,EAAET,YAAY,CAAC;AAC/E,KAAA,CAACU,IAAI,CAAC,IAAA,CAAA;AACT;AAEaC,MAAAA,+BAAAA,GAAkC,CAACC,uBAAAA,GAC9CC,MAAMD,uBAAyB,EAAA;QAC7BE,OAAS,EAAA,CAAA;QACTC,MAAQ,EAAA,CAAA;QACRC,WAAa,EAAA,OAAA;QACbC,WAAa,EAAA,OAAA;QACbC,cAAgB,EAAA;KACf;;;;;"}
@@ -0,0 +1,22 @@
1
+ import chalk from 'chalk';
2
+ import boxen from 'boxen';
3
+ import { apiConfig } from '../config/api.mjs';
4
+
5
+ const environmentErrorMessageFactory = ({ projectName, firstLine, secondLine })=>{
6
+ return [
7
+ chalk.yellow(firstLine),
8
+ '',
9
+ chalk.cyan(secondLine),
10
+ chalk.blue(' → ') + chalk.blue.underline(`${apiConfig.dashboardBaseUrl}/projects/${projectName}`)
11
+ ].join('\n');
12
+ };
13
+ const environmentCreationErrorFactory = (environmentErrorMessage)=>boxen(environmentErrorMessage, {
14
+ padding: 1,
15
+ margin: 1,
16
+ borderStyle: 'round',
17
+ borderColor: 'white',
18
+ titleAlignment: 'left'
19
+ });
20
+
21
+ export { environmentCreationErrorFactory, environmentErrorMessageFactory };
22
+ //# sourceMappingURL=error-message-factories.mjs.map