@webiny/project 6.4.4-beta.0 → 6.4.4-beta.10
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/abstractions/features/DestroyApp.d.ts +2 -2
- package/abstractions/features/DestroyApp.js.map +1 -1
- package/abstractions/services/StackOutputCacheService.d.ts +10 -0
- package/abstractions/services/StackOutputCacheService.js +5 -0
- package/abstractions/services/StackOutputCacheService.js.map +1 -0
- package/abstractions/services/index.d.ts +1 -0
- package/abstractions/services/index.js +1 -0
- package/createProjectSdkContainer.js +2 -1
- package/createProjectSdkContainer.js.map +1 -1
- package/decorators/DestroyAppClearStackOutputCache.d.ts +25 -0
- package/decorators/DestroyAppClearStackOutputCache.js +29 -0
- package/decorators/DestroyAppClearStackOutputCache.js.map +1 -0
- package/decorators/index.d.ts +1 -0
- package/decorators/index.js +1 -0
- package/package.json +16 -16
- package/services/GetProjectConfigService/renderConfigWorker.js +8 -2
- package/services/GetProjectConfigService/renderConfigWorker.js.map +1 -1
- package/services/InitProjectSdkService/InitProjectSdkService.js +2 -1
- package/services/InitProjectSdkService/InitProjectSdkService.js.map +1 -1
- package/services/LoggerService/LoggerService.js +3 -3
- package/services/PulumiGetStackOutputService/PulumiGetStackOutputService.d.ts +3 -11
- package/services/PulumiGetStackOutputService/PulumiGetStackOutputService.js +7 -64
- package/services/PulumiGetStackOutputService/PulumiGetStackOutputService.js.map +1 -1
- package/services/StackOutputCacheService/StackOutputCacheService.d.ts +18 -0
- package/services/StackOutputCacheService/StackOutputCacheService.js +89 -0
- package/services/StackOutputCacheService/StackOutputCacheService.js.map +1 -0
- package/services/StackOutputCacheService/index.d.ts +1 -0
- package/services/StackOutputCacheService/index.js +1 -0
- package/services/index.d.ts +1 -0
- package/services/index.js +1 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { type AppName } from "../../abstractions/types.js";
|
|
2
2
|
import { type ExecaChildProcess } from "execa";
|
|
3
3
|
type IPulumiProcess = ExecaChildProcess<string>;
|
|
4
|
-
interface IDestroyAppParams {
|
|
4
|
+
export interface IDestroyAppParams {
|
|
5
5
|
app: AppName;
|
|
6
6
|
}
|
|
7
|
-
interface IDestroyApp {
|
|
7
|
+
export interface IDestroyApp {
|
|
8
8
|
execute(params: IDestroyAppParams): Promise<{
|
|
9
9
|
pulumiProcess: IPulumiProcess;
|
|
10
10
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abstractions/features/DestroyApp.js","sources":["../../../src/abstractions/features/DestroyApp.ts"],"sourcesContent":["import { createAbstraction } from \"~/abstractions/createAbstraction.js\";\nimport { type AppName } from \"~/abstractions/types.js\";\nimport { type ExecaChildProcess } from \"execa\";\n\ntype IPulumiProcess = ExecaChildProcess<string>;\n\
|
|
1
|
+
{"version":3,"file":"abstractions/features/DestroyApp.js","sources":["../../../src/abstractions/features/DestroyApp.ts"],"sourcesContent":["import { createAbstraction } from \"~/abstractions/createAbstraction.js\";\nimport { type AppName } from \"~/abstractions/types.js\";\nimport { type ExecaChildProcess } from \"execa\";\n\ntype IPulumiProcess = ExecaChildProcess<string>;\n\nexport interface IDestroyAppParams {\n app: AppName;\n}\n\nexport interface IDestroyApp {\n execute(params: IDestroyAppParams): Promise<{ pulumiProcess: IPulumiProcess }>;\n}\n\nexport const DestroyApp = createAbstraction<IDestroyApp>(\"DestroyApp\");\n\nexport namespace DestroyApp {\n export type Interface = IDestroyApp;\n\n export type Params = IDestroyAppParams;\n\n export type PulumiProcess = IPulumiProcess;\n}\n"],"names":["DestroyApp","createAbstraction"],"mappings":";AAcO,MAAMA,aAAaC,kBAA+B"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type IAppModel } from "../../abstractions/models/IAppModel.js";
|
|
2
|
+
export interface IStackOutputCacheService {
|
|
3
|
+
read(app: IAppModel): Promise<Record<string, any> | null>;
|
|
4
|
+
write(app: IAppModel, data: Record<string, any>): Promise<void>;
|
|
5
|
+
delete(app: IAppModel): Promise<void>;
|
|
6
|
+
}
|
|
7
|
+
export declare const StackOutputCacheService: import("@webiny/di").Abstraction<IStackOutputCacheService>;
|
|
8
|
+
export declare namespace StackOutputCacheService {
|
|
9
|
+
type Interface = IStackOutputCacheService;
|
|
10
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abstractions/services/StackOutputCacheService.js","sources":["../../../src/abstractions/services/StackOutputCacheService.ts"],"sourcesContent":["import { createAbstraction } from \"~/abstractions/createAbstraction.js\";\nimport { type IAppModel } from \"~/abstractions/models/IAppModel.js\";\n\nexport interface IStackOutputCacheService {\n read(app: IAppModel): Promise<Record<string, any> | null>;\n write(app: IAppModel, data: Record<string, any>): Promise<void>;\n delete(app: IAppModel): Promise<void>;\n}\n\nexport const StackOutputCacheService =\n createAbstraction<IStackOutputCacheService>(\"StackOutputCacheService\");\n\nexport namespace StackOutputCacheService {\n export type Interface = IStackOutputCacheService;\n}\n"],"names":["StackOutputCacheService","createAbstraction"],"mappings":";AASO,MAAMA,0BACTC,kBAA4C"}
|
|
@@ -29,6 +29,7 @@ export { PulumiGetStackOutputService } from "./PulumiGetStackOutputService.js";
|
|
|
29
29
|
export { PulumiLoginService } from "./PulumiLoginService.js";
|
|
30
30
|
export { PulumiSelectStackService } from "./PulumiSelectStackService.js";
|
|
31
31
|
export { SetProjectIdService } from "./SetProjectIdService.js";
|
|
32
|
+
export { StackOutputCacheService } from "./StackOutputCacheService.js";
|
|
32
33
|
export { StdioService } from "./StdioService.js";
|
|
33
34
|
export { UiService } from "./UiService.js";
|
|
34
35
|
export { ValidateProjectConfigService } from "./ValidateProjectConfigService.js";
|
|
@@ -29,6 +29,7 @@ export { PulumiGetStackOutputService } from "./PulumiGetStackOutputService.js";
|
|
|
29
29
|
export { PulumiLoginService } from "./PulumiLoginService.js";
|
|
30
30
|
export { PulumiSelectStackService } from "./PulumiSelectStackService.js";
|
|
31
31
|
export { SetProjectIdService } from "./SetProjectIdService.js";
|
|
32
|
+
export { StackOutputCacheService } from "./StackOutputCacheService.js";
|
|
32
33
|
export { StdioService } from "./StdioService.js";
|
|
33
34
|
export { UiService } from "./UiService.js";
|
|
34
35
|
export { ValidateProjectConfigService } from "./ValidateProjectConfigService.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Container } from "@webiny/di";
|
|
2
2
|
import { adminAfterBuild, adminAfterDeploy, adminBeforeBuild, adminBeforeDeploy, adminBeforeWatch, afterBuild, afterDeploy, apiAfterBuild, apiAfterDeploy, apiBeforeBuild, apiBeforeDeploy, apiBeforeWatch, beforeBuild, beforeDeploy, beforeWatch, buildApp, coreAfterBuild, coreAfterDeploy, coreBeforeBuild, coreBeforeDeploy, coreBeforeWatch, deployApp, destroyApp, exportStack, getApp, getAppOutput, getAppStackOutput, getFeatureFlags, getLogger, getProductionEnvironments, getProject, getProjectConfig, getProjectInfo, getPulumiResourceNamePrefix, installExtension, isCi, isTelemetryEnabled, isWcpEnabled, isWebinyJsRepo, refreshApp, runPulumiCommand, validateProjectConfig, watch } from "./features/index.js";
|
|
3
|
-
import { buildAppWorkspaceService, buildProjectWorkspaceService, getAppPackagesService, getAppService, getCwdService, getIsCiService, getNpmVersionService, getNpxVersionService, getProjectConfigService, getProjectIdService, getProjectInstallationIdService, getProjectService, getProjectVersionService, getPulumiService, getPulumiVersionService, getYarnVersionService, initProjectSdkService, installExtensionService, isRemotePulumiBackendService, listAppLambdaFunctionsService, listDeployedEnvironmentsService, listPackagesInAppWorkspaceService, listPackagesService, loadEnvVarsService, localStorageService, loggerService, projectInfoService, projectSdkParamsService, pulumiExportService, pulumiGetConfigPassphraseService, pulumiGetSecretsProviderService, pulumiGetStackOutputService, pulumiImportService, pulumiLoginService, pulumiSelectStackService, setProjectIdService, stdioService, uiService, validateProjectConfigService, watchedLambdaFunctionsService, wcpService } from "./services/index.js";
|
|
3
|
+
import { buildAppWorkspaceService, buildProjectWorkspaceService, getAppPackagesService, getAppService, getCwdService, getIsCiService, getNpmVersionService, getNpxVersionService, getProjectConfigService, getProjectIdService, getProjectInstallationIdService, getProjectService, getProjectVersionService, getPulumiService, getPulumiVersionService, getYarnVersionService, initProjectSdkService, installExtensionService, isRemotePulumiBackendService, listAppLambdaFunctionsService, listDeployedEnvironmentsService, listPackagesInAppWorkspaceService, listPackagesService, loadEnvVarsService, localStorageService, loggerService, projectInfoService, projectSdkParamsService, pulumiExportService, pulumiGetConfigPassphraseService, pulumiGetSecretsProviderService, pulumiGetStackOutputService, pulumiImportService, pulumiLoginService, pulumiSelectStackService, setProjectIdService, stackOutputCacheService, stdioService, uiService, validateProjectConfigService, watchedLambdaFunctionsService, wcpService } from "./services/index.js";
|
|
4
4
|
import { BuildProjectWorkspaceService, GetProjectConfig, InitProjectSdkService, LoadEnvVarsService, LoggerService, ProjectSdkParamsService, ValidateProjectConfig } from "./abstractions/index.js";
|
|
5
5
|
import { getFeatureFlagsWithLicense } from "./decorators/index.js";
|
|
6
6
|
const createProjectSdkContainer = async (params)=>{
|
|
@@ -42,6 +42,7 @@ const createProjectSdkContainer = async (params)=>{
|
|
|
42
42
|
container.register(pulumiLoginService).inSingletonScope();
|
|
43
43
|
container.register(pulumiSelectStackService).inSingletonScope();
|
|
44
44
|
container.register(setProjectIdService).inSingletonScope();
|
|
45
|
+
container.register(stackOutputCacheService).inSingletonScope();
|
|
45
46
|
container.register(stdioService).inSingletonScope();
|
|
46
47
|
container.register(uiService).inSingletonScope();
|
|
47
48
|
container.register(validateProjectConfigService).inSingletonScope();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createProjectSdkContainer.js","sources":["../src/createProjectSdkContainer.ts"],"sourcesContent":["import { Container } from \"@webiny/di\";\nimport {\n beforeBuild,\n afterBuild,\n beforeWatch,\n beforeDeploy,\n afterDeploy,\n adminAfterBuild,\n adminAfterDeploy,\n adminBeforeBuild,\n adminBeforeDeploy,\n adminBeforeWatch,\n apiAfterBuild,\n apiAfterDeploy,\n apiBeforeBuild,\n apiBeforeDeploy,\n apiBeforeWatch,\n buildApp,\n coreAfterBuild,\n coreAfterDeploy,\n coreBeforeBuild,\n coreBeforeDeploy,\n coreBeforeWatch,\n deployApp,\n destroyApp,\n exportStack,\n getApp,\n getAppOutput,\n getAppStackOutput,\n getLogger,\n getProductionEnvironments,\n getProject,\n getProjectConfig,\n getProjectInfo,\n getPulumiResourceNamePrefix,\n getFeatureFlags,\n installExtension,\n isCi,\n isTelemetryEnabled,\n isWcpEnabled,\n isWebinyJsRepo,\n refreshApp,\n runPulumiCommand,\n validateProjectConfig,\n watch\n} from \"./features/index.js\";\n\nimport {\n getAppService,\n buildAppWorkspaceService,\n buildProjectWorkspaceService,\n watchedLambdaFunctionsService,\n getAppPackagesService,\n getCwdService,\n getIsCiService,\n getNpmVersionService,\n getNpxVersionService,\n getProjectConfigService,\n getProjectIdService,\n getProjectInstallationIdService,\n getProjectService,\n getProjectVersionService,\n getPulumiService,\n getPulumiVersionService,\n getYarnVersionService,\n initProjectSdkService,\n installExtensionService,\n isRemotePulumiBackendService,\n listAppLambdaFunctionsService,\n listDeployedEnvironmentsService,\n listPackagesInAppWorkspaceService,\n listPackagesService,\n loadEnvVarsService,\n localStorageService,\n loggerService,\n projectInfoService,\n projectSdkParamsService,\n pulumiGetConfigPassphraseService,\n pulumiGetSecretsProviderService,\n pulumiExportService,\n pulumiImportService,\n pulumiGetStackOutputService,\n pulumiLoginService,\n pulumiSelectStackService,\n setProjectIdService,\n stdioService,\n uiService,\n validateProjectConfigService,\n wcpService\n} from \"./services/index.js\";\n\nimport {\n GetProjectConfig,\n BuildProjectWorkspaceService,\n ProjectSdkParamsService,\n LoadEnvVarsService,\n ValidateProjectConfig,\n LoggerService,\n InitProjectSdkService\n} from \"~/abstractions/index.js\";\nimport { getFeatureFlagsWithLicense } from \"./decorators/index.js\";\n\nexport const createProjectSdkContainer = async (\n params: Partial<ProjectSdkParamsService.Params>\n) => {\n const container = new Container();\n\n // Services.\n container.register(getAppService).inSingletonScope();\n container.register(buildAppWorkspaceService).inSingletonScope();\n container.register(buildProjectWorkspaceService).inSingletonScope();\n container.register(watchedLambdaFunctionsService).inSingletonScope();\n container.register(getAppPackagesService).inSingletonScope();\n container.register(getCwdService).inSingletonScope();\n container.register(getIsCiService).inSingletonScope();\n container.register(getNpmVersionService).inSingletonScope();\n container.register(getNpxVersionService).inSingletonScope();\n container.register(getProjectConfigService).inSingletonScope();\n container.register(getProjectIdService).inSingletonScope();\n container.register(getProjectInstallationIdService).inSingletonScope();\n container.register(getProjectService).inSingletonScope();\n container.register(getProjectVersionService).inSingletonScope();\n container.register(getPulumiService).inSingletonScope();\n container.register(getPulumiVersionService).inSingletonScope();\n container.register(getYarnVersionService).inSingletonScope();\n container.register(initProjectSdkService).inSingletonScope();\n container.register(installExtensionService).inSingletonScope();\n container.register(isRemotePulumiBackendService).inSingletonScope();\n container.register(listAppLambdaFunctionsService).inSingletonScope();\n container.register(listDeployedEnvironmentsService).inSingletonScope();\n container.register(listPackagesInAppWorkspaceService).inSingletonScope();\n container.register(listPackagesService).inSingletonScope();\n container.register(loadEnvVarsService).inSingletonScope();\n container.register(localStorageService).inSingletonScope();\n container.register(loggerService).inSingletonScope();\n container.register(projectInfoService).inSingletonScope();\n container.register(projectSdkParamsService).inSingletonScope();\n container.register(pulumiGetConfigPassphraseService).inSingletonScope();\n container.register(pulumiGetSecretsProviderService).inSingletonScope();\n container.register(pulumiExportService).inSingletonScope();\n container.register(pulumiImportService).inSingletonScope();\n container.register(pulumiGetStackOutputService).inSingletonScope();\n container.register(pulumiLoginService).inSingletonScope();\n container.register(pulumiSelectStackService).inSingletonScope();\n container.register(setProjectIdService).inSingletonScope();\n container.register(stdioService).inSingletonScope();\n container.register(uiService).inSingletonScope();\n container.register(validateProjectConfigService).inSingletonScope();\n container.register(wcpService).inSingletonScope();\n\n // Features.\n container.register(buildApp).inSingletonScope();\n container.register(deployApp).inSingletonScope();\n container.register(destroyApp).inSingletonScope();\n container.register(exportStack).inSingletonScope();\n container.register(getApp).inSingletonScope();\n container.register(getAppOutput).inSingletonScope();\n container.register(getAppStackOutput).inSingletonScope();\n container.register(getLogger).inSingletonScope();\n container.register(getProductionEnvironments).inSingletonScope();\n container.register(getProject).inSingletonScope();\n container.register(getProjectConfig).inSingletonScope();\n container.register(getProjectInfo).inSingletonScope();\n container.register(getPulumiResourceNamePrefix).inSingletonScope();\n container.register(installExtension).inSingletonScope();\n container.register(isCi).inSingletonScope();\n container.register(isTelemetryEnabled).inSingletonScope();\n container.register(isWcpEnabled).inSingletonScope();\n container.register(isWebinyJsRepo).inSingletonScope();\n container.register(refreshApp).inSingletonScope();\n container.register(runPulumiCommand).inSingletonScope();\n container.register(getFeatureFlags).inSingletonScope();\n container.register(validateProjectConfig).inSingletonScope();\n container.register(watch).inSingletonScope();\n container.registerDecorator(getFeatureFlagsWithLicense);\n\n // Hooks.\n container.registerComposite(beforeBuild);\n container.registerComposite(afterBuild);\n container.registerComposite(beforeWatch);\n container.registerComposite(beforeDeploy);\n container.registerComposite(afterDeploy);\n container.registerComposite(apiBeforeBuild);\n container.registerComposite(apiBeforeDeploy);\n container.registerComposite(apiBeforeWatch);\n container.registerComposite(apiAfterBuild);\n container.registerComposite(apiAfterDeploy);\n container.registerComposite(adminBeforeBuild);\n container.registerComposite(adminBeforeDeploy);\n container.registerComposite(adminBeforeWatch);\n container.registerComposite(adminAfterBuild);\n container.registerComposite(adminAfterDeploy);\n container.registerComposite(coreBeforeBuild);\n container.registerComposite(coreBeforeDeploy);\n container.registerComposite(coreBeforeWatch);\n container.registerComposite(coreAfterBuild);\n container.registerComposite(coreAfterDeploy);\n\n // Initialize project SDK.\n container.resolve(ProjectSdkParamsService).set(params);\n await container.resolve(LoadEnvVarsService).execute();\n await container.resolve(BuildProjectWorkspaceService).execute();\n\n const logger = container.resolve(LoggerService);\n logger.log(\"Initializing Project SDK container...\");\n\n const projectExtensions = await container.resolve(GetProjectConfig).execute({\n tags: { runtimeContext: \"project\" }\n });\n\n await container.resolve(ValidateProjectConfig).execute(projectExtensions);\n\n // Initialize project SDK extensions (env vars, hooks, pulumi, implementations, decorators).\n await container.resolve(InitProjectSdkService).execute(container);\n\n return container;\n};\n"],"names":["createProjectSdkContainer","params","container","Container","getAppService","buildAppWorkspaceService","buildProjectWorkspaceService","watchedLambdaFunctionsService","getAppPackagesService","getCwdService","getIsCiService","getNpmVersionService","getNpxVersionService","getProjectConfigService","getProjectIdService","getProjectInstallationIdService","getProjectService","getProjectVersionService","getPulumiService","getPulumiVersionService","getYarnVersionService","initProjectSdkService","installExtensionService","isRemotePulumiBackendService","listAppLambdaFunctionsService","listDeployedEnvironmentsService","listPackagesInAppWorkspaceService","listPackagesService","loadEnvVarsService","localStorageService","loggerService","projectInfoService","projectSdkParamsService","pulumiGetConfigPassphraseService","pulumiGetSecretsProviderService","pulumiExportService","pulumiImportService","pulumiGetStackOutputService","pulumiLoginService","pulumiSelectStackService","setProjectIdService","stdioService","uiService","validateProjectConfigService","wcpService","buildApp","deployApp","destroyApp","exportStack","getApp","getAppOutput","getAppStackOutput","getLogger","getProductionEnvironments","getProject","getProjectConfig","getProjectInfo","getPulumiResourceNamePrefix","installExtension","isCi","isTelemetryEnabled","isWcpEnabled","isWebinyJsRepo","refreshApp","runPulumiCommand","getFeatureFlags","validateProjectConfig","watch","getFeatureFlagsWithLicense","beforeBuild","afterBuild","beforeWatch","beforeDeploy","afterDeploy","apiBeforeBuild","apiBeforeDeploy","apiBeforeWatch","apiAfterBuild","apiAfterDeploy","adminBeforeBuild","adminBeforeDeploy","adminBeforeWatch","adminAfterBuild","adminAfterDeploy","coreBeforeBuild","coreBeforeDeploy","coreBeforeWatch","coreAfterBuild","coreAfterDeploy","ProjectSdkParamsService","LoadEnvVarsService","BuildProjectWorkspaceService","logger","LoggerService","projectExtensions","GetProjectConfig","ValidateProjectConfig","InitProjectSdkService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"createProjectSdkContainer.js","sources":["../src/createProjectSdkContainer.ts"],"sourcesContent":["import { Container } from \"@webiny/di\";\nimport {\n beforeBuild,\n afterBuild,\n beforeWatch,\n beforeDeploy,\n afterDeploy,\n adminAfterBuild,\n adminAfterDeploy,\n adminBeforeBuild,\n adminBeforeDeploy,\n adminBeforeWatch,\n apiAfterBuild,\n apiAfterDeploy,\n apiBeforeBuild,\n apiBeforeDeploy,\n apiBeforeWatch,\n buildApp,\n coreAfterBuild,\n coreAfterDeploy,\n coreBeforeBuild,\n coreBeforeDeploy,\n coreBeforeWatch,\n deployApp,\n destroyApp,\n exportStack,\n getApp,\n getAppOutput,\n getAppStackOutput,\n getLogger,\n getProductionEnvironments,\n getProject,\n getProjectConfig,\n getProjectInfo,\n getPulumiResourceNamePrefix,\n getFeatureFlags,\n installExtension,\n isCi,\n isTelemetryEnabled,\n isWcpEnabled,\n isWebinyJsRepo,\n refreshApp,\n runPulumiCommand,\n validateProjectConfig,\n watch\n} from \"./features/index.js\";\n\nimport {\n getAppService,\n buildAppWorkspaceService,\n buildProjectWorkspaceService,\n watchedLambdaFunctionsService,\n getAppPackagesService,\n getCwdService,\n getIsCiService,\n getNpmVersionService,\n getNpxVersionService,\n getProjectConfigService,\n getProjectIdService,\n getProjectInstallationIdService,\n getProjectService,\n getProjectVersionService,\n getPulumiService,\n getPulumiVersionService,\n getYarnVersionService,\n initProjectSdkService,\n installExtensionService,\n isRemotePulumiBackendService,\n listAppLambdaFunctionsService,\n listDeployedEnvironmentsService,\n listPackagesInAppWorkspaceService,\n listPackagesService,\n loadEnvVarsService,\n localStorageService,\n loggerService,\n projectInfoService,\n projectSdkParamsService,\n pulumiGetConfigPassphraseService,\n pulumiGetSecretsProviderService,\n pulumiExportService,\n pulumiImportService,\n pulumiGetStackOutputService,\n pulumiLoginService,\n pulumiSelectStackService,\n setProjectIdService,\n stackOutputCacheService,\n stdioService,\n uiService,\n validateProjectConfigService,\n wcpService\n} from \"./services/index.js\";\n\nimport {\n GetProjectConfig,\n BuildProjectWorkspaceService,\n ProjectSdkParamsService,\n LoadEnvVarsService,\n ValidateProjectConfig,\n LoggerService,\n InitProjectSdkService\n} from \"~/abstractions/index.js\";\nimport { getFeatureFlagsWithLicense } from \"./decorators/index.js\";\n\nexport const createProjectSdkContainer = async (\n params: Partial<ProjectSdkParamsService.Params>\n) => {\n const container = new Container();\n\n // Services.\n container.register(getAppService).inSingletonScope();\n container.register(buildAppWorkspaceService).inSingletonScope();\n container.register(buildProjectWorkspaceService).inSingletonScope();\n container.register(watchedLambdaFunctionsService).inSingletonScope();\n container.register(getAppPackagesService).inSingletonScope();\n container.register(getCwdService).inSingletonScope();\n container.register(getIsCiService).inSingletonScope();\n container.register(getNpmVersionService).inSingletonScope();\n container.register(getNpxVersionService).inSingletonScope();\n container.register(getProjectConfigService).inSingletonScope();\n container.register(getProjectIdService).inSingletonScope();\n container.register(getProjectInstallationIdService).inSingletonScope();\n container.register(getProjectService).inSingletonScope();\n container.register(getProjectVersionService).inSingletonScope();\n container.register(getPulumiService).inSingletonScope();\n container.register(getPulumiVersionService).inSingletonScope();\n container.register(getYarnVersionService).inSingletonScope();\n container.register(initProjectSdkService).inSingletonScope();\n container.register(installExtensionService).inSingletonScope();\n container.register(isRemotePulumiBackendService).inSingletonScope();\n container.register(listAppLambdaFunctionsService).inSingletonScope();\n container.register(listDeployedEnvironmentsService).inSingletonScope();\n container.register(listPackagesInAppWorkspaceService).inSingletonScope();\n container.register(listPackagesService).inSingletonScope();\n container.register(loadEnvVarsService).inSingletonScope();\n container.register(localStorageService).inSingletonScope();\n container.register(loggerService).inSingletonScope();\n container.register(projectInfoService).inSingletonScope();\n container.register(projectSdkParamsService).inSingletonScope();\n container.register(pulumiGetConfigPassphraseService).inSingletonScope();\n container.register(pulumiGetSecretsProviderService).inSingletonScope();\n container.register(pulumiExportService).inSingletonScope();\n container.register(pulumiImportService).inSingletonScope();\n container.register(pulumiGetStackOutputService).inSingletonScope();\n container.register(pulumiLoginService).inSingletonScope();\n container.register(pulumiSelectStackService).inSingletonScope();\n container.register(setProjectIdService).inSingletonScope();\n container.register(stackOutputCacheService).inSingletonScope();\n container.register(stdioService).inSingletonScope();\n container.register(uiService).inSingletonScope();\n container.register(validateProjectConfigService).inSingletonScope();\n container.register(wcpService).inSingletonScope();\n\n // Features.\n container.register(buildApp).inSingletonScope();\n container.register(deployApp).inSingletonScope();\n container.register(destroyApp).inSingletonScope();\n container.register(exportStack).inSingletonScope();\n container.register(getApp).inSingletonScope();\n container.register(getAppOutput).inSingletonScope();\n container.register(getAppStackOutput).inSingletonScope();\n container.register(getLogger).inSingletonScope();\n container.register(getProductionEnvironments).inSingletonScope();\n container.register(getProject).inSingletonScope();\n container.register(getProjectConfig).inSingletonScope();\n container.register(getProjectInfo).inSingletonScope();\n container.register(getPulumiResourceNamePrefix).inSingletonScope();\n container.register(installExtension).inSingletonScope();\n container.register(isCi).inSingletonScope();\n container.register(isTelemetryEnabled).inSingletonScope();\n container.register(isWcpEnabled).inSingletonScope();\n container.register(isWebinyJsRepo).inSingletonScope();\n container.register(refreshApp).inSingletonScope();\n container.register(runPulumiCommand).inSingletonScope();\n container.register(getFeatureFlags).inSingletonScope();\n container.register(validateProjectConfig).inSingletonScope();\n container.register(watch).inSingletonScope();\n container.registerDecorator(getFeatureFlagsWithLicense);\n\n // Hooks.\n container.registerComposite(beforeBuild);\n container.registerComposite(afterBuild);\n container.registerComposite(beforeWatch);\n container.registerComposite(beforeDeploy);\n container.registerComposite(afterDeploy);\n container.registerComposite(apiBeforeBuild);\n container.registerComposite(apiBeforeDeploy);\n container.registerComposite(apiBeforeWatch);\n container.registerComposite(apiAfterBuild);\n container.registerComposite(apiAfterDeploy);\n container.registerComposite(adminBeforeBuild);\n container.registerComposite(adminBeforeDeploy);\n container.registerComposite(adminBeforeWatch);\n container.registerComposite(adminAfterBuild);\n container.registerComposite(adminAfterDeploy);\n container.registerComposite(coreBeforeBuild);\n container.registerComposite(coreBeforeDeploy);\n container.registerComposite(coreBeforeWatch);\n container.registerComposite(coreAfterBuild);\n container.registerComposite(coreAfterDeploy);\n\n // Initialize project SDK.\n container.resolve(ProjectSdkParamsService).set(params);\n await container.resolve(LoadEnvVarsService).execute();\n await container.resolve(BuildProjectWorkspaceService).execute();\n\n const logger = container.resolve(LoggerService);\n logger.log(\"Initializing Project SDK container...\");\n\n const projectExtensions = await container.resolve(GetProjectConfig).execute({\n tags: { runtimeContext: \"project\" }\n });\n\n await container.resolve(ValidateProjectConfig).execute(projectExtensions);\n\n // Initialize project SDK extensions (env vars, hooks, pulumi, implementations, decorators).\n await container.resolve(InitProjectSdkService).execute(container);\n\n return container;\n};\n"],"names":["createProjectSdkContainer","params","container","Container","getAppService","buildAppWorkspaceService","buildProjectWorkspaceService","watchedLambdaFunctionsService","getAppPackagesService","getCwdService","getIsCiService","getNpmVersionService","getNpxVersionService","getProjectConfigService","getProjectIdService","getProjectInstallationIdService","getProjectService","getProjectVersionService","getPulumiService","getPulumiVersionService","getYarnVersionService","initProjectSdkService","installExtensionService","isRemotePulumiBackendService","listAppLambdaFunctionsService","listDeployedEnvironmentsService","listPackagesInAppWorkspaceService","listPackagesService","loadEnvVarsService","localStorageService","loggerService","projectInfoService","projectSdkParamsService","pulumiGetConfigPassphraseService","pulumiGetSecretsProviderService","pulumiExportService","pulumiImportService","pulumiGetStackOutputService","pulumiLoginService","pulumiSelectStackService","setProjectIdService","stackOutputCacheService","stdioService","uiService","validateProjectConfigService","wcpService","buildApp","deployApp","destroyApp","exportStack","getApp","getAppOutput","getAppStackOutput","getLogger","getProductionEnvironments","getProject","getProjectConfig","getProjectInfo","getPulumiResourceNamePrefix","installExtension","isCi","isTelemetryEnabled","isWcpEnabled","isWebinyJsRepo","refreshApp","runPulumiCommand","getFeatureFlags","validateProjectConfig","watch","getFeatureFlagsWithLicense","beforeBuild","afterBuild","beforeWatch","beforeDeploy","afterDeploy","apiBeforeBuild","apiBeforeDeploy","apiBeforeWatch","apiAfterBuild","apiAfterDeploy","adminBeforeBuild","adminBeforeDeploy","adminBeforeWatch","adminAfterBuild","adminAfterDeploy","coreBeforeBuild","coreBeforeDeploy","coreBeforeWatch","coreAfterBuild","coreAfterDeploy","ProjectSdkParamsService","LoadEnvVarsService","BuildProjectWorkspaceService","logger","LoggerService","projectExtensions","GetProjectConfig","ValidateProjectConfig","InitProjectSdkService"],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { DestroyApp, GetApp, LoggerService, StackOutputCacheService } from "../abstractions/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Decorator that clears the stack output cache when an app is destroyed.
|
|
4
|
+
*
|
|
5
|
+
* Without this, the cache file written during deploy would remain on disk after a
|
|
6
|
+
* destroy, and a subsequent deploy (or any stack output read) would use it and behave
|
|
7
|
+
* as if the stack were still deployed.
|
|
8
|
+
*
|
|
9
|
+
* The cache is cleared before the destroy runs. Since the cache is only a performance
|
|
10
|
+
* optimization, this is safe even if the destroy fails and the stack remains: the next
|
|
11
|
+
* read simply fetches fresh output from Pulumi again.
|
|
12
|
+
*/
|
|
13
|
+
export declare class DestroyAppClearStackOutputCache implements DestroyApp.Interface {
|
|
14
|
+
private getApp;
|
|
15
|
+
private logger;
|
|
16
|
+
private stackOutputCacheService;
|
|
17
|
+
private decoratee;
|
|
18
|
+
constructor(getApp: GetApp.Interface, logger: LoggerService.Interface, stackOutputCacheService: StackOutputCacheService.Interface, decoratee: DestroyApp.Interface);
|
|
19
|
+
execute(params: DestroyApp.Params): Promise<{
|
|
20
|
+
pulumiProcess: import("child_process").ChildProcess & import("execa").ExecaChildPromise<string> & Promise<import("execa").ExecaReturnValue<string>>;
|
|
21
|
+
}>;
|
|
22
|
+
}
|
|
23
|
+
export declare const destroyAppClearStackOutputCache: typeof DestroyAppClearStackOutputCache & {
|
|
24
|
+
__abstraction: import("@webiny/di").Abstraction<import("../abstractions/features/DestroyApp").IDestroyApp>;
|
|
25
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { DestroyApp, GetApp, LoggerService, StackOutputCacheService } from "../abstractions/index.js";
|
|
2
|
+
class DestroyAppClearStackOutputCache {
|
|
3
|
+
constructor(getApp, logger, stackOutputCacheService, decoratee){
|
|
4
|
+
this.getApp = getApp;
|
|
5
|
+
this.logger = logger;
|
|
6
|
+
this.stackOutputCacheService = stackOutputCacheService;
|
|
7
|
+
this.decoratee = decoratee;
|
|
8
|
+
}
|
|
9
|
+
async execute(params) {
|
|
10
|
+
try {
|
|
11
|
+
const app = this.getApp.execute(params.app);
|
|
12
|
+
await this.stackOutputCacheService.delete(app);
|
|
13
|
+
} catch (error) {
|
|
14
|
+
this.logger.error("Failed to clear stack output cache before destroy.", error);
|
|
15
|
+
}
|
|
16
|
+
return this.decoratee.execute(params);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
const destroyAppClearStackOutputCache = DestroyApp.createDecorator({
|
|
20
|
+
decorator: DestroyAppClearStackOutputCache,
|
|
21
|
+
dependencies: [
|
|
22
|
+
GetApp,
|
|
23
|
+
LoggerService,
|
|
24
|
+
StackOutputCacheService
|
|
25
|
+
]
|
|
26
|
+
});
|
|
27
|
+
export { DestroyAppClearStackOutputCache, destroyAppClearStackOutputCache };
|
|
28
|
+
|
|
29
|
+
//# sourceMappingURL=DestroyAppClearStackOutputCache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decorators/DestroyAppClearStackOutputCache.js","sources":["../../src/decorators/DestroyAppClearStackOutputCache.ts"],"sourcesContent":["import {\n DestroyApp,\n GetApp,\n LoggerService,\n StackOutputCacheService\n} from \"~/abstractions/index.js\";\n\n/**\n * Decorator that clears the stack output cache when an app is destroyed.\n *\n * Without this, the cache file written during deploy would remain on disk after a\n * destroy, and a subsequent deploy (or any stack output read) would use it and behave\n * as if the stack were still deployed.\n *\n * The cache is cleared before the destroy runs. Since the cache is only a performance\n * optimization, this is safe even if the destroy fails and the stack remains: the next\n * read simply fetches fresh output from Pulumi again.\n */\nexport class DestroyAppClearStackOutputCache implements DestroyApp.Interface {\n constructor(\n private getApp: GetApp.Interface,\n private logger: LoggerService.Interface,\n private stackOutputCacheService: StackOutputCacheService.Interface,\n private decoratee: DestroyApp.Interface\n ) {}\n\n async execute(params: DestroyApp.Params) {\n try {\n const app = this.getApp.execute(params.app);\n await this.stackOutputCacheService.delete(app);\n } catch (error) {\n // Cache clearing failure shouldn't prevent the destroy from running.\n this.logger.error(\"Failed to clear stack output cache before destroy.\", error);\n }\n\n return this.decoratee.execute(params);\n }\n}\n\nexport const destroyAppClearStackOutputCache = DestroyApp.createDecorator({\n decorator: DestroyAppClearStackOutputCache,\n dependencies: [GetApp, LoggerService, StackOutputCacheService]\n});\n"],"names":["DestroyAppClearStackOutputCache","getApp","logger","stackOutputCacheService","decoratee","params","app","error","destroyAppClearStackOutputCache","DestroyApp","GetApp","LoggerService","StackOutputCacheService"],"mappings":";AAkBO,MAAMA;IACT,YACYC,MAAwB,EACxBC,MAA+B,EAC/BC,uBAA0D,EAC1DC,SAA+B,CACzC;aAJUH,MAAM,GAANA;aACAC,MAAM,GAANA;aACAC,uBAAuB,GAAvBA;aACAC,SAAS,GAATA;IACT;IAEH,MAAM,QAAQC,MAAyB,EAAE;QACrC,IAAI;YACA,MAAMC,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAACD,OAAO,GAAG;YAC1C,MAAM,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAACC;QAC9C,EAAE,OAAOC,OAAO;YAEZ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sDAAsDA;QAC5E;QAEA,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAACF;IAClC;AACJ;AAEO,MAAMG,kCAAkCC,WAAW,eAAe,CAAC;IACtE,WAAWT;IACX,cAAc;QAACU;QAAQC;QAAeC;KAAwB;AAClE"}
|
package/decorators/index.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ export * from "./DeployAppClearWatchedLambdaFunctions.js";
|
|
|
3
3
|
export * from "./DeployAppRefreshStackOutputCache.js";
|
|
4
4
|
export * from "./DeployAppWithHooks.js";
|
|
5
5
|
export * from "./DeployAppWithWatchedLambdaReplacement.js";
|
|
6
|
+
export * from "./DestroyAppClearStackOutputCache.js";
|
|
6
7
|
export * from "./WatchWithHooks.js";
|
|
7
8
|
export * from "./GetPulumiServiceWithDownloadInfo.js";
|
|
8
9
|
export * from "./GetFeatureFlagsWithLicense.js";
|
package/decorators/index.js
CHANGED
|
@@ -3,6 +3,7 @@ export * from "./DeployAppClearWatchedLambdaFunctions.js";
|
|
|
3
3
|
export * from "./DeployAppRefreshStackOutputCache.js";
|
|
4
4
|
export * from "./DeployAppWithHooks.js";
|
|
5
5
|
export * from "./DeployAppWithWatchedLambdaReplacement.js";
|
|
6
|
+
export * from "./DestroyAppClearStackOutputCache.js";
|
|
6
7
|
export * from "./WatchWithHooks.js";
|
|
7
8
|
export * from "./GetPulumiServiceWithDownloadInfo.js";
|
|
8
9
|
export * from "./GetFeatureFlagsWithLicense.js";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/project",
|
|
3
|
-
"version": "6.4.4-beta.
|
|
3
|
+
"version": "6.4.4-beta.10",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./index.js",
|
|
@@ -13,17 +13,17 @@
|
|
|
13
13
|
"description": "An SDK for managing Webiny projects.",
|
|
14
14
|
"license": "MIT",
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@webiny/aws-sdk": "6.4.4-beta.
|
|
17
|
-
"@webiny/build-tools": "6.4.4-beta.
|
|
18
|
-
"@webiny/di": "1.0.
|
|
19
|
-
"@webiny/feature-flags": "6.4.4-beta.
|
|
20
|
-
"@webiny/global-config": "6.4.4-beta.
|
|
21
|
-
"@webiny/pulumi-sdk": "6.4.4-beta.
|
|
22
|
-
"@webiny/react-properties": "6.4.4-beta.
|
|
23
|
-
"@webiny/system-requirements": "6.4.4-beta.
|
|
24
|
-
"@webiny/telemetry": "6.4.4-beta.
|
|
25
|
-
"@webiny/utils": "6.4.4-beta.
|
|
26
|
-
"@webiny/wcp": "6.4.4-beta.
|
|
16
|
+
"@webiny/aws-sdk": "6.4.4-beta.10",
|
|
17
|
+
"@webiny/build-tools": "6.4.4-beta.10",
|
|
18
|
+
"@webiny/di": "1.0.2",
|
|
19
|
+
"@webiny/feature-flags": "6.4.4-beta.10",
|
|
20
|
+
"@webiny/global-config": "6.4.4-beta.10",
|
|
21
|
+
"@webiny/pulumi-sdk": "6.4.4-beta.10",
|
|
22
|
+
"@webiny/react-properties": "6.4.4-beta.10",
|
|
23
|
+
"@webiny/system-requirements": "6.4.4-beta.10",
|
|
24
|
+
"@webiny/telemetry": "6.4.4-beta.10",
|
|
25
|
+
"@webiny/utils": "6.4.4-beta.10",
|
|
26
|
+
"@webiny/wcp": "6.4.4-beta.10",
|
|
27
27
|
"chalk": "5.6.2",
|
|
28
28
|
"chokidar": "5.0.0",
|
|
29
29
|
"ci-info": "4.4.0",
|
|
@@ -36,12 +36,12 @@
|
|
|
36
36
|
"find-up": "8.0.0",
|
|
37
37
|
"get-tsconfig": "4.14.0",
|
|
38
38
|
"graphql-request": "7.4.0",
|
|
39
|
-
"humanize-duration": "3.
|
|
39
|
+
"humanize-duration": "3.34.0",
|
|
40
40
|
"jsdom": "29.1.1",
|
|
41
41
|
"load-json-file": "7.0.1",
|
|
42
42
|
"lodash": "4.18.1",
|
|
43
43
|
"minimatch": "10.2.5",
|
|
44
|
-
"mqtt": "5.15.
|
|
44
|
+
"mqtt": "5.15.2",
|
|
45
45
|
"neverthrow": "8.2.0",
|
|
46
46
|
"p-retry": "8.0.0",
|
|
47
47
|
"pino": "10.3.1",
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
"replace-in-path": "1.1.0",
|
|
52
52
|
"serialize-error": "13.0.1",
|
|
53
53
|
"ts-morph": "28.0.0",
|
|
54
|
-
"tsx": "4.
|
|
54
|
+
"tsx": "4.23.0",
|
|
55
55
|
"write-json-file": "7.0.0",
|
|
56
56
|
"zod": "4.4.3"
|
|
57
57
|
},
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
"@types/jsdom": "28.0.3",
|
|
62
62
|
"@types/lodash": "4.17.24",
|
|
63
63
|
"rimraf": "6.1.3",
|
|
64
|
-
"type-fest": "5.
|
|
64
|
+
"type-fest": "5.8.0",
|
|
65
65
|
"typescript": "6.0.3"
|
|
66
66
|
},
|
|
67
67
|
"adio": {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import "tsx/esm";
|
|
2
|
-
import {
|
|
2
|
+
import { AsyncProperties, toObject } from "@webiny/react-properties";
|
|
3
3
|
import debounce from "debounce";
|
|
4
4
|
import react from "react";
|
|
5
5
|
import { createRoot } from "react-dom/client";
|
|
@@ -41,7 +41,13 @@ process.on("unhandledRejection", (reason)=>{
|
|
|
41
41
|
const { project: projectModelDto } = JSON.parse(process.argv[2]);
|
|
42
42
|
const project = ProjectModel.fromDto(projectModelDto);
|
|
43
43
|
const { Extensions: Extensions } = await import(toImportSpecifier(project.paths.webinyConfigBaseFile.toString()));
|
|
44
|
+
const RENDER_TIMEOUT_MS = 30000;
|
|
45
|
+
const timeout = setTimeout(()=>{
|
|
46
|
+
sendError(new Error(`Config rendering timed out after ${RENDER_TIMEOUT_MS}ms. This usually means an <Await> promise never settled.`));
|
|
47
|
+
process.exit(1);
|
|
48
|
+
}, RENDER_TIMEOUT_MS);
|
|
44
49
|
const onChange = debounce((value)=>{
|
|
50
|
+
clearTimeout(timeout);
|
|
45
51
|
sendSuccess(toObject(value));
|
|
46
52
|
process.exit(0);
|
|
47
53
|
});
|
|
@@ -50,7 +56,7 @@ __webpack_require__.g.window = renderConfigWorker_window;
|
|
|
50
56
|
__webpack_require__.g.document = renderConfigWorker_window.document;
|
|
51
57
|
const root = renderConfigWorker_window.document.getElementById("root");
|
|
52
58
|
const reactRoot = createRoot(root);
|
|
53
|
-
reactRoot.render(/*#__PURE__*/ react.createElement(WcpProjectLicenseProvider, null, /*#__PURE__*/ react.createElement(EnvProvider, null, /*#__PURE__*/ react.createElement(ProductionEnvironmentsCollector, null, /*#__PURE__*/ react.createElement(
|
|
59
|
+
reactRoot.render(/*#__PURE__*/ react.createElement(WcpProjectLicenseProvider, null, /*#__PURE__*/ react.createElement(EnvProvider, null, /*#__PURE__*/ react.createElement(ProductionEnvironmentsCollector, null, /*#__PURE__*/ react.createElement(AsyncProperties, {
|
|
54
60
|
onChange: onChange
|
|
55
61
|
}, /*#__PURE__*/ react.createElement(Extensions, null))))));
|
|
56
62
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"services/GetProjectConfigService/renderConfigWorker.js","sources":["../../../src/services/GetProjectConfigService/renderConfigWorker.tsx"],"sourcesContent":["import \"tsx/esm\";\nimport {
|
|
1
|
+
{"version":3,"file":"services/GetProjectConfigService/renderConfigWorker.js","sources":["../../../src/services/GetProjectConfigService/renderConfigWorker.tsx"],"sourcesContent":["import \"tsx/esm\";\nimport { AsyncProperties, toObject } from \"@webiny/react-properties\";\nimport debounce from \"debounce\";\nimport React from \"react\";\nimport { createRoot } from \"react-dom/client\";\nimport { JSDOM } from \"jsdom\";\nimport { serializeError } from \"serialize-error\";\nimport type { RenderConfigParamsDto, RenderConfigWorkerMessageDto } from \"./renderConfig.js\";\nimport { ProjectModel } from \"~/models/ProjectModel.js\";\nimport { toImportSpecifier } from \"~/utils/index.js\";\nimport { EnvProvider } from \"./EnvContext.js\";\nimport { WcpProjectLicenseProvider } from \"./WcpProjectLicenseContext.js\";\nimport { ProductionEnvironmentsCollector } from \"./ProductionEnvironmentsContext.js\";\n\nconst sendError = (err: Error) => {\n const message: RenderConfigWorkerMessageDto = {\n type: \"error\",\n error: serializeError(err),\n data: null\n };\n\n if (process.send) {\n process.send!(message);\n } else {\n console.error(message);\n }\n};\n\nconst sendSuccess = (data: Record<string, any> = {}) => {\n const message: RenderConfigWorkerMessageDto = {\n type: \"success\",\n error: null,\n data\n };\n\n if (process.send) {\n process.send!(message);\n } else {\n console.log(message);\n }\n};\n\nprocess.on(\"uncaughtException\", err => {\n sendError(err);\n process.exit(1);\n});\n\nprocess.on(\"unhandledRejection\", reason => {\n const err = reason instanceof Error ? reason : new Error(String(reason));\n sendError(err);\n process.exit(1);\n});\n\nconst { project: projectModelDto } = JSON.parse(process.argv[2]) as RenderConfigParamsDto;\nconst project = ProjectModel.fromDto(projectModelDto);\n\nconst { Extensions } = await import(\n toImportSpecifier(project.paths.webinyConfigBaseFile.toString())\n);\n\nconst RENDER_TIMEOUT_MS = 30_000;\n\nconst timeout = setTimeout(() => {\n sendError(\n new Error(\n `Config rendering timed out after ${RENDER_TIMEOUT_MS}ms. ` +\n `This usually means an <Await> promise never settled.`\n )\n );\n process.exit(1);\n}, RENDER_TIMEOUT_MS);\n\nconst onChange = debounce((value: any) => {\n clearTimeout(timeout);\n sendSuccess(toObject(value));\n process.exit(0);\n});\n\nconst { window } = new JSDOM(`<div id=\"root\"/>`);\n\n(global as any).window = window;\n\n(global as any).document = window.document;\n\nconst root = window.document.getElementById(\"root\")!;\n\nconst reactRoot = createRoot(root);\n\nreactRoot.render(\n <WcpProjectLicenseProvider>\n <EnvProvider>\n <ProductionEnvironmentsCollector>\n <AsyncProperties onChange={onChange}>\n <Extensions />\n </AsyncProperties>\n </ProductionEnvironmentsCollector>\n </EnvProvider>\n </WcpProjectLicenseProvider>\n);\n"],"names":["sendError","err","message","serializeError","process","console","sendSuccess","data","reason","Error","String","projectModelDto","JSON","project","ProjectModel","Extensions","toImportSpecifier","RENDER_TIMEOUT_MS","timeout","setTimeout","onChange","debounce","value","clearTimeout","toObject","window","JSDOM","global","root","reactRoot","createRoot","WcpProjectLicenseProvider","EnvProvider","ProductionEnvironmentsCollector","AsyncProperties"],"mappings":";;;;;;;;;;;;;AAcA,MAAMA,YAAY,CAACC;IACf,MAAMC,UAAwC;QAC1C,MAAM;QACN,OAAOC,eAAeF;QACtB,MAAM;IACV;IAEA,IAAIG,QAAQ,IAAI,EACZA,QAAQ,IAAI,CAAEF;SAEdG,QAAQ,KAAK,CAACH;AAEtB;AAEA,MAAMI,cAAc,CAACC,OAA4B,CAAC,CAAC;IAC/C,MAAML,UAAwC;QAC1C,MAAM;QACN,OAAO;QACPK;IACJ;IAEA,IAAIH,QAAQ,IAAI,EACZA,QAAQ,IAAI,CAAEF;SAEdG,QAAQ,GAAG,CAACH;AAEpB;AAEAE,QAAQ,EAAE,CAAC,qBAAqBH,CAAAA;IAC5BD,UAAUC;IACVG,QAAQ,IAAI,CAAC;AACjB;AAEAA,QAAQ,EAAE,CAAC,sBAAsBI,CAAAA;IAC7B,MAAMP,MAAMO,kBAAkBC,QAAQD,SAAS,IAAIC,MAAMC,OAAOF;IAChER,UAAUC;IACVG,QAAQ,IAAI,CAAC;AACjB;AAEA,MAAM,EAAE,SAASO,eAAe,EAAE,GAAGC,KAAK,KAAK,CAACR,QAAQ,IAAI,CAAC,EAAE;AAC/D,MAAMS,UAAUC,aAAa,OAAO,CAACH;AAErC,MAAM,EAAEI,YAAAA,UAAU,EAAE,GAAG,MAAM,MAAM,CAC/BC,kBAAkBH,QAAQ,KAAK,CAAC,oBAAoB,CAAC,QAAQ;AAGjE,MAAMI,oBAAoB;AAE1B,MAAMC,UAAUC,WAAW;IACvBnB,UACI,IAAIS,MACA,CAAC,iCAAiC,EAAEQ,kBAAkB,wDAAI,CAAC;IAInEb,QAAQ,IAAI,CAAC;AACjB,GAAGa;AAEH,MAAMG,WAAWC,SAAS,CAACC;IACvBC,aAAaL;IACbZ,YAAYkB,SAASF;IACrBlB,QAAQ,IAAI,CAAC;AACjB;AAEA,MAAM,EAAEqB,QAAAA,yBAAM,EAAE,GAAG,IAAIC,MAAM;AAE5BC,oBAAAA,CAAMA,CAAS,MAAM,GAAGF;AAExBE,oBAAAA,CAAMA,CAAS,QAAQ,GAAGF,0BAAO,QAAQ;AAE1C,MAAMG,OAAOH,0BAAO,QAAQ,CAAC,cAAc,CAAC;AAE5C,MAAMI,YAAYC,WAAWF;AAE7BC,UAAU,MAAM,CAAC,WAAD,GACZ,oBAACE,2BAAyBA,MAAAA,WAAAA,GACtB,oBAACC,aAAWA,MAAAA,WAAAA,GACR,oBAACC,iCAA+BA,MAAAA,WAAAA,GAC5B,oBAACC,iBAAeA;IAAC,UAAUd;iBACvB,oBAACL,YAAUA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createImplementation } from "@webiny/di";
|
|
2
2
|
import { GetProjectConfig, GetProjectService, InitProjectSdkService } from "../../abstractions/index.js";
|
|
3
|
-
import { buildAppWithHooks, deployAppClearWatchedLambdaFunctions, deployAppRefreshStackOutputCache, deployAppWithHooks, deployAppWithWatchedLambdaReplacement, getPulumiServiceWithDownloadInfo, watchWithHooks } from "../../decorators/index.js";
|
|
3
|
+
import { buildAppWithHooks, deployAppClearWatchedLambdaFunctions, deployAppRefreshStackOutputCache, deployAppWithHooks, deployAppWithWatchedLambdaReplacement, destroyAppClearStackOutputCache, getPulumiServiceWithDownloadInfo, watchWithHooks } from "../../decorators/index.js";
|
|
4
4
|
import { applyEnvVars } from "./applyEnvVars.js";
|
|
5
5
|
import { applyWcpEnvVars } from "./applyWcpEnvVars.js";
|
|
6
6
|
import { registerHooks } from "./registerHooks.js";
|
|
@@ -27,6 +27,7 @@ class DefaultInitProjectSdkService {
|
|
|
27
27
|
container.registerDecorator(deployAppWithWatchedLambdaReplacement);
|
|
28
28
|
container.registerDecorator(deployAppClearWatchedLambdaFunctions);
|
|
29
29
|
container.registerDecorator(deployAppRefreshStackOutputCache);
|
|
30
|
+
container.registerDecorator(destroyAppClearStackOutputCache);
|
|
30
31
|
container.registerDecorator(deployAppWithHooks);
|
|
31
32
|
container.registerDecorator(watchWithHooks);
|
|
32
33
|
container.registerDecorator(getPulumiServiceWithDownloadInfo);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"services/InitProjectSdkService/InitProjectSdkService.js","sources":["../../../src/services/InitProjectSdkService/InitProjectSdkService.ts"],"sourcesContent":["import { createImplementation, Container } from \"@webiny/di\";\nimport {\n GetProjectService,\n GetProjectConfig,\n InitProjectSdkService\n} from \"~/abstractions/index.js\";\nimport {\n buildAppWithHooks,\n deployAppClearWatchedLambdaFunctions,\n deployAppRefreshStackOutputCache,\n deployAppWithHooks,\n deployAppWithWatchedLambdaReplacement,\n watchWithHooks,\n getPulumiServiceWithDownloadInfo\n} from \"~/decorators/index.js\";\nimport { applyEnvVars } from \"./applyEnvVars.js\";\nimport { applyWcpEnvVars } from \"./applyWcpEnvVars.js\";\nimport { registerHooks } from \"./registerHooks.js\";\nimport { registerPulumiExtensions } from \"./registerPulumiExtensions.js\";\nimport { registerImplementations } from \"./registerImplementations.js\";\nimport { registerDecorators } from \"./registerDecorators.js\";\n\nexport class DefaultInitProjectSdkService implements InitProjectSdkService.Interface {\n constructor(\n private getProjectService: GetProjectService.Interface,\n private getProjectConfig: GetProjectConfig.Interface\n ) {}\n\n async execute(container: Container) {\n const project = this.getProjectService.execute();\n const projectExtensions = await this.getProjectConfig.execute({\n tags: { runtimeContext: \"project\" }\n });\n\n // Apply environment variables from extensions.\n applyEnvVars(projectExtensions);\n\n // Set WCP environment variables if project ID exists.\n await applyWcpEnvVars(container);\n\n // Register hooks from extensions.\n await registerHooks(container, projectExtensions, project);\n\n // Register Pulumi extensions.\n await registerPulumiExtensions(container, projectExtensions, project);\n\n // Decorators that must be applied last on top of potentially custom ones.\n container.registerDecorator(buildAppWithHooks);\n container.registerDecorator(deployAppWithWatchedLambdaReplacement);\n container.registerDecorator(deployAppClearWatchedLambdaFunctions);\n container.registerDecorator(deployAppRefreshStackOutputCache);\n container.registerDecorator(deployAppWithHooks);\n container.registerDecorator(watchWithHooks);\n container.registerDecorator(getPulumiServiceWithDownloadInfo);\n\n // Register custom implementations first (they replace existing implementations).\n await registerImplementations(container, projectExtensions, project);\n\n // Register decorators after implementations (they enhance existing implementations).\n await registerDecorators(container, projectExtensions, project);\n }\n}\n\nexport const initProjectSdkService = createImplementation({\n abstraction: InitProjectSdkService,\n implementation: DefaultInitProjectSdkService,\n dependencies: [GetProjectService, GetProjectConfig]\n});\n"],"names":["DefaultInitProjectSdkService","getProjectService","getProjectConfig","container","project","projectExtensions","applyEnvVars","applyWcpEnvVars","registerHooks","registerPulumiExtensions","buildAppWithHooks","deployAppWithWatchedLambdaReplacement","deployAppClearWatchedLambdaFunctions","deployAppRefreshStackOutputCache","deployAppWithHooks","watchWithHooks","getPulumiServiceWithDownloadInfo","registerImplementations","registerDecorators","initProjectSdkService","createImplementation","InitProjectSdkService","GetProjectService","GetProjectConfig"],"mappings":";;;;;;;;;
|
|
1
|
+
{"version":3,"file":"services/InitProjectSdkService/InitProjectSdkService.js","sources":["../../../src/services/InitProjectSdkService/InitProjectSdkService.ts"],"sourcesContent":["import { createImplementation, Container } from \"@webiny/di\";\nimport {\n GetProjectService,\n GetProjectConfig,\n InitProjectSdkService\n} from \"~/abstractions/index.js\";\nimport {\n buildAppWithHooks,\n deployAppClearWatchedLambdaFunctions,\n deployAppRefreshStackOutputCache,\n deployAppWithHooks,\n deployAppWithWatchedLambdaReplacement,\n destroyAppClearStackOutputCache,\n watchWithHooks,\n getPulumiServiceWithDownloadInfo\n} from \"~/decorators/index.js\";\nimport { applyEnvVars } from \"./applyEnvVars.js\";\nimport { applyWcpEnvVars } from \"./applyWcpEnvVars.js\";\nimport { registerHooks } from \"./registerHooks.js\";\nimport { registerPulumiExtensions } from \"./registerPulumiExtensions.js\";\nimport { registerImplementations } from \"./registerImplementations.js\";\nimport { registerDecorators } from \"./registerDecorators.js\";\n\nexport class DefaultInitProjectSdkService implements InitProjectSdkService.Interface {\n constructor(\n private getProjectService: GetProjectService.Interface,\n private getProjectConfig: GetProjectConfig.Interface\n ) {}\n\n async execute(container: Container) {\n const project = this.getProjectService.execute();\n const projectExtensions = await this.getProjectConfig.execute({\n tags: { runtimeContext: \"project\" }\n });\n\n // Apply environment variables from extensions.\n applyEnvVars(projectExtensions);\n\n // Set WCP environment variables if project ID exists.\n await applyWcpEnvVars(container);\n\n // Register hooks from extensions.\n await registerHooks(container, projectExtensions, project);\n\n // Register Pulumi extensions.\n await registerPulumiExtensions(container, projectExtensions, project);\n\n // Decorators that must be applied last on top of potentially custom ones.\n container.registerDecorator(buildAppWithHooks);\n container.registerDecorator(deployAppWithWatchedLambdaReplacement);\n container.registerDecorator(deployAppClearWatchedLambdaFunctions);\n container.registerDecorator(deployAppRefreshStackOutputCache);\n container.registerDecorator(destroyAppClearStackOutputCache);\n container.registerDecorator(deployAppWithHooks);\n container.registerDecorator(watchWithHooks);\n container.registerDecorator(getPulumiServiceWithDownloadInfo);\n\n // Register custom implementations first (they replace existing implementations).\n await registerImplementations(container, projectExtensions, project);\n\n // Register decorators after implementations (they enhance existing implementations).\n await registerDecorators(container, projectExtensions, project);\n }\n}\n\nexport const initProjectSdkService = createImplementation({\n abstraction: InitProjectSdkService,\n implementation: DefaultInitProjectSdkService,\n dependencies: [GetProjectService, GetProjectConfig]\n});\n"],"names":["DefaultInitProjectSdkService","getProjectService","getProjectConfig","container","project","projectExtensions","applyEnvVars","applyWcpEnvVars","registerHooks","registerPulumiExtensions","buildAppWithHooks","deployAppWithWatchedLambdaReplacement","deployAppClearWatchedLambdaFunctions","deployAppRefreshStackOutputCache","destroyAppClearStackOutputCache","deployAppWithHooks","watchWithHooks","getPulumiServiceWithDownloadInfo","registerImplementations","registerDecorators","initProjectSdkService","createImplementation","InitProjectSdkService","GetProjectService","GetProjectConfig"],"mappings":";;;;;;;;;AAuBO,MAAMA;IACT,YACYC,iBAA8C,EAC9CC,gBAA4C,CACtD;aAFUD,iBAAiB,GAAjBA;aACAC,gBAAgB,GAAhBA;IACT;IAEH,MAAM,QAAQC,SAAoB,EAAE;QAChC,MAAMC,UAAU,IAAI,CAAC,iBAAiB,CAAC,OAAO;QAC9C,MAAMC,oBAAoB,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;YAC1D,MAAM;gBAAE,gBAAgB;YAAU;QACtC;QAGAC,aAAaD;QAGb,MAAME,gBAAgBJ;QAGtB,MAAMK,cAAcL,WAAWE,mBAAmBD;QAGlD,MAAMK,yBAAyBN,WAAWE,mBAAmBD;QAG7DD,UAAU,iBAAiB,CAACO;QAC5BP,UAAU,iBAAiB,CAACQ;QAC5BR,UAAU,iBAAiB,CAACS;QAC5BT,UAAU,iBAAiB,CAACU;QAC5BV,UAAU,iBAAiB,CAACW;QAC5BX,UAAU,iBAAiB,CAACY;QAC5BZ,UAAU,iBAAiB,CAACa;QAC5Bb,UAAU,iBAAiB,CAACc;QAG5B,MAAMC,wBAAwBf,WAAWE,mBAAmBD;QAG5D,MAAMe,mBAAmBhB,WAAWE,mBAAmBD;IAC3D;AACJ;AAEO,MAAMgB,wBAAwBC,qBAAqB;IACtD,aAAaC;IACb,gBAAgBtB;IAChB,cAAc;QAACuB;QAAmBC;KAAiB;AACvD"}
|
|
@@ -3,7 +3,7 @@ import { GetProjectService, LoggerService, ProjectSdkParamsService } from "../..
|
|
|
3
3
|
import node_path from "node:path";
|
|
4
4
|
import { pino } from "pino";
|
|
5
5
|
import pino_pretty from "pino-pretty";
|
|
6
|
-
import * as
|
|
6
|
+
import * as __rspack_external_node_fs_1b05aee1 from "node:fs";
|
|
7
7
|
const DEFAULT_LOG_LEVEL = "info";
|
|
8
8
|
class DefaultLoggerService {
|
|
9
9
|
constructor(getProjectService, projectSdkParamsService){
|
|
@@ -56,11 +56,11 @@ class DefaultLoggerService {
|
|
|
56
56
|
const project = this.getProjectService.execute();
|
|
57
57
|
const logsFolderPath = project.paths.dotWebinyFolder.join("logs").toString();
|
|
58
58
|
const logsFileName = this.getLogFileName();
|
|
59
|
-
if (!
|
|
59
|
+
if (!__rspack_external_node_fs_1b05aee1.existsSync(logsFolderPath)) __rspack_external_node_fs_1b05aee1.mkdirSync(logsFolderPath, {
|
|
60
60
|
recursive: true
|
|
61
61
|
});
|
|
62
62
|
const logFilePath = node_path.join(logsFolderPath, logsFileName);
|
|
63
|
-
return
|
|
63
|
+
return __rspack_external_node_fs_1b05aee1.createWriteStream(logFilePath, {
|
|
64
64
|
flags: "a"
|
|
65
65
|
});
|
|
66
66
|
}
|
|
@@ -1,20 +1,12 @@
|
|
|
1
|
-
import { GetPulumiService,
|
|
1
|
+
import { GetPulumiService, LoggerService, PulumiGetStackOutputService, PulumiSelectStackService, StackOutputCacheService } from "../../abstractions/index.js";
|
|
2
2
|
import { type AppModel } from "../../models/index.js";
|
|
3
3
|
export declare class DefaultPulumiGetStackOutputService implements PulumiGetStackOutputService.Interface {
|
|
4
4
|
private getPulumiService;
|
|
5
5
|
private pulumiSelectStackService;
|
|
6
6
|
private loggerService;
|
|
7
|
-
private
|
|
8
|
-
|
|
9
|
-
private static readonly DEFAULT_ENV;
|
|
10
|
-
private static readonly DEFAULT_REGION;
|
|
11
|
-
private static readonly DEFAULT_VARIANT;
|
|
12
|
-
constructor(getPulumiService: GetPulumiService.Interface, pulumiSelectStackService: PulumiSelectStackService.Interface, loggerService: LoggerService.Interface, getProjectService: GetProjectService.Interface, projectSdkParamsService: ProjectSdkParamsService.Interface);
|
|
7
|
+
private stackOutputCacheService;
|
|
8
|
+
constructor(getPulumiService: GetPulumiService.Interface, pulumiSelectStackService: PulumiSelectStackService.Interface, loggerService: LoggerService.Interface, stackOutputCacheService: StackOutputCacheService.Interface);
|
|
13
9
|
execute<TOutput extends Record<string, any> = Record<string, any>>(app: AppModel, params?: PulumiGetStackOutputService.Params): Promise<TOutput | null>;
|
|
14
10
|
private applyMapping;
|
|
15
|
-
private getCacheKey;
|
|
16
|
-
private getCachePath;
|
|
17
|
-
private readFromCache;
|
|
18
|
-
private writeToCache;
|
|
19
11
|
}
|
|
20
12
|
export declare const pulumiGetStackOutputService: import("@webiny/di").Implementation<typeof DefaultPulumiGetStackOutputService>;
|
|
@@ -1,36 +1,18 @@
|
|
|
1
1
|
import { createImplementation } from "@webiny/di";
|
|
2
|
-
import {
|
|
2
|
+
import { GetPulumiService, LoggerService, PulumiGetStackOutputService, PulumiSelectStackService, StackOutputCacheService } from "../../abstractions/index.js";
|
|
3
3
|
import { createEnvConfiguration, withPulumiConfigPassphrase } from "../../utils/env/index.js";
|
|
4
4
|
import { mapStackOutput } from "./mapStackOutput.js";
|
|
5
|
-
import promises from "fs/promises";
|
|
6
|
-
import path from "path";
|
|
7
5
|
class DefaultPulumiGetStackOutputService {
|
|
8
|
-
|
|
9
|
-
this.DEFAULT_ENV = "dev";
|
|
10
|
-
}
|
|
11
|
-
static{
|
|
12
|
-
this.DEFAULT_REGION = "default";
|
|
13
|
-
}
|
|
14
|
-
static{
|
|
15
|
-
this.DEFAULT_VARIANT = "default";
|
|
16
|
-
}
|
|
17
|
-
constructor(getPulumiService, pulumiSelectStackService, loggerService, getProjectService, projectSdkParamsService){
|
|
6
|
+
constructor(getPulumiService, pulumiSelectStackService, loggerService, stackOutputCacheService){
|
|
18
7
|
this.getPulumiService = getPulumiService;
|
|
19
8
|
this.pulumiSelectStackService = pulumiSelectStackService;
|
|
20
9
|
this.loggerService = loggerService;
|
|
21
|
-
this.
|
|
22
|
-
this.projectSdkParamsService = projectSdkParamsService;
|
|
10
|
+
this.stackOutputCacheService = stackOutputCacheService;
|
|
23
11
|
}
|
|
24
12
|
async execute(app, params) {
|
|
25
13
|
if (!params?.skipCache) {
|
|
26
|
-
const cachedOutput = await this.
|
|
27
|
-
if (null !== cachedOutput)
|
|
28
|
-
this.loggerService.debug({
|
|
29
|
-
app: app.name,
|
|
30
|
-
cacheKey: this.getCacheKey(app)
|
|
31
|
-
}, "Stack output read from cache");
|
|
32
|
-
return this.applyMapping(cachedOutput, params?.map);
|
|
33
|
-
}
|
|
14
|
+
const cachedOutput = await this.stackOutputCacheService.read(app);
|
|
15
|
+
if (null !== cachedOutput) return this.applyMapping(cachedOutput, params?.map);
|
|
34
16
|
}
|
|
35
17
|
const pulumi = await this.getPulumiService.execute({
|
|
36
18
|
app
|
|
@@ -55,11 +37,7 @@ class DefaultPulumiGetStackOutputService {
|
|
|
55
37
|
try {
|
|
56
38
|
const stackOutputJson = JSON.parse(stackOutputString.stdout);
|
|
57
39
|
if (!stackOutputJson) return null;
|
|
58
|
-
await this.
|
|
59
|
-
this.loggerService.debug("Stack output stored to cache", {
|
|
60
|
-
app: app.name,
|
|
61
|
-
cacheKey: this.getCacheKey(app)
|
|
62
|
-
});
|
|
40
|
+
await this.stackOutputCacheService.write(app, stackOutputJson);
|
|
63
41
|
return this.applyMapping(stackOutputJson, params?.map);
|
|
64
42
|
} catch {
|
|
65
43
|
this.loggerService.error("Could not parse stack output as JSON.", stackOutputString.stdout, app, params);
|
|
@@ -70,40 +48,6 @@ class DefaultPulumiGetStackOutputService {
|
|
|
70
48
|
if (!map) return data;
|
|
71
49
|
return mapStackOutput(data, map);
|
|
72
50
|
}
|
|
73
|
-
getCacheKey(app) {
|
|
74
|
-
const sdkParams = this.projectSdkParamsService.get();
|
|
75
|
-
const env = sdkParams.env || DefaultPulumiGetStackOutputService.DEFAULT_ENV;
|
|
76
|
-
const region = sdkParams.region || DefaultPulumiGetStackOutputService.DEFAULT_REGION;
|
|
77
|
-
const variant = sdkParams.variant || DefaultPulumiGetStackOutputService.DEFAULT_VARIANT;
|
|
78
|
-
return `${app.name}-${env}-${region}-${variant}.json`;
|
|
79
|
-
}
|
|
80
|
-
getCachePath(app) {
|
|
81
|
-
const project = this.getProjectService.execute();
|
|
82
|
-
const cacheDir = project.paths.dotWebinyFolder.join("caches", "stack-output").toString();
|
|
83
|
-
const cacheKey = this.getCacheKey(app);
|
|
84
|
-
return path.join(cacheDir, cacheKey);
|
|
85
|
-
}
|
|
86
|
-
async readFromCache(app) {
|
|
87
|
-
const cachePath = this.getCachePath(app);
|
|
88
|
-
try {
|
|
89
|
-
const content = await promises.readFile(cachePath, "utf-8");
|
|
90
|
-
return JSON.parse(content);
|
|
91
|
-
} catch {
|
|
92
|
-
return null;
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
async writeToCache(app, data) {
|
|
96
|
-
const cachePath = this.getCachePath(app);
|
|
97
|
-
const cacheDir = path.dirname(cachePath);
|
|
98
|
-
try {
|
|
99
|
-
await promises.mkdir(cacheDir, {
|
|
100
|
-
recursive: true
|
|
101
|
-
});
|
|
102
|
-
await promises.writeFile(cachePath, JSON.stringify(data, null, 2), "utf-8");
|
|
103
|
-
} catch (error) {
|
|
104
|
-
this.loggerService.error("Could not write to cache file.", cachePath, error);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
51
|
}
|
|
108
52
|
const pulumiGetStackOutputService = createImplementation({
|
|
109
53
|
abstraction: PulumiGetStackOutputService,
|
|
@@ -112,8 +56,7 @@ const pulumiGetStackOutputService = createImplementation({
|
|
|
112
56
|
GetPulumiService,
|
|
113
57
|
PulumiSelectStackService,
|
|
114
58
|
LoggerService,
|
|
115
|
-
|
|
116
|
-
ProjectSdkParamsService
|
|
59
|
+
StackOutputCacheService
|
|
117
60
|
]
|
|
118
61
|
});
|
|
119
62
|
export { DefaultPulumiGetStackOutputService, pulumiGetStackOutputService };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"services/PulumiGetStackOutputService/PulumiGetStackOutputService.js","sources":["../../../src/services/PulumiGetStackOutputService/PulumiGetStackOutputService.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/di\";\nimport {\n GetPulumiService,\n
|
|
1
|
+
{"version":3,"file":"services/PulumiGetStackOutputService/PulumiGetStackOutputService.js","sources":["../../../src/services/PulumiGetStackOutputService/PulumiGetStackOutputService.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/di\";\nimport {\n GetPulumiService,\n LoggerService,\n PulumiGetStackOutputService,\n PulumiSelectStackService,\n StackOutputCacheService\n} from \"~/abstractions/index.js\";\nimport { type AppModel } from \"~/models/index.js\";\nimport { createEnvConfiguration, withPulumiConfigPassphrase } from \"~/utils/env/index.js\";\nimport { mapStackOutput } from \"./mapStackOutput.js\";\n\nexport class DefaultPulumiGetStackOutputService implements PulumiGetStackOutputService.Interface {\n constructor(\n private getPulumiService: GetPulumiService.Interface,\n private pulumiSelectStackService: PulumiSelectStackService.Interface,\n private loggerService: LoggerService.Interface,\n private stackOutputCacheService: StackOutputCacheService.Interface\n ) {}\n\n async execute<TOutput extends Record<string, any> = Record<string, any>>(\n app: AppModel,\n params?: PulumiGetStackOutputService.Params\n ): Promise<TOutput | null> {\n // Try to read from cache if skipCache is not true\n if (!params?.skipCache) {\n const cachedOutput = await this.stackOutputCacheService.read(app);\n if (cachedOutput !== null) {\n return this.applyMapping(cachedOutput, params?.map) as TOutput;\n }\n }\n\n const pulumi = await this.getPulumiService.execute({ app });\n\n await this.pulumiSelectStackService.execute(app);\n\n const stackOutputString = await pulumi.run({\n command: [\"stack\", \"output\"],\n args: {\n json: true\n },\n execa: {\n env: createEnvConfiguration({\n configurations: [withPulumiConfigPassphrase()]\n })\n }\n });\n\n try {\n const stackOutputJson = JSON.parse(stackOutputString.stdout);\n if (!stackOutputJson) {\n return null;\n }\n\n await this.stackOutputCacheService.write(app, stackOutputJson);\n\n return this.applyMapping(stackOutputJson, params?.map) as TOutput;\n } catch {\n this.loggerService.error(\n \"Could not parse stack output as JSON.\",\n stackOutputString.stdout,\n app,\n params\n );\n return null;\n }\n }\n\n private applyMapping(\n data: Record<string, any>,\n map?: Record<string, any>\n ): Record<string, any> {\n if (!map) {\n return data;\n }\n // If a mapping is provided, we map the output to the specified structure.\n return mapStackOutput(data, map);\n }\n}\n\nexport const pulumiGetStackOutputService = createImplementation({\n abstraction: PulumiGetStackOutputService,\n implementation: DefaultPulumiGetStackOutputService,\n dependencies: [\n GetPulumiService,\n PulumiSelectStackService,\n LoggerService,\n StackOutputCacheService\n ]\n});\n"],"names":["DefaultPulumiGetStackOutputService","getPulumiService","pulumiSelectStackService","loggerService","stackOutputCacheService","app","params","cachedOutput","pulumi","stackOutputString","createEnvConfiguration","withPulumiConfigPassphrase","stackOutputJson","JSON","data","map","mapStackOutput","pulumiGetStackOutputService","createImplementation","PulumiGetStackOutputService","GetPulumiService","PulumiSelectStackService","LoggerService","StackOutputCacheService"],"mappings":";;;;AAYO,MAAMA;IACT,YACYC,gBAA4C,EAC5CC,wBAA4D,EAC5DC,aAAsC,EACtCC,uBAA0D,CACpE;aAJUH,gBAAgB,GAAhBA;aACAC,wBAAwB,GAAxBA;aACAC,aAAa,GAAbA;aACAC,uBAAuB,GAAvBA;IACT;IAEH,MAAM,QACFC,GAAa,EACbC,MAA2C,EACpB;QAEvB,IAAI,CAACA,QAAQ,WAAW;YACpB,MAAMC,eAAe,MAAM,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAACF;YAC7D,IAAIE,AAAiB,SAAjBA,cACA,OAAO,IAAI,CAAC,YAAY,CAACA,cAAcD,QAAQ;QAEvD;QAEA,MAAME,SAAS,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;YAAEH;QAAI;QAEzD,MAAM,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAACA;QAE5C,MAAMI,oBAAoB,MAAMD,OAAO,GAAG,CAAC;YACvC,SAAS;gBAAC;gBAAS;aAAS;YAC5B,MAAM;gBACF,MAAM;YACV;YACA,OAAO;gBACH,KAAKE,uBAAuB;oBACxB,gBAAgB;wBAACC;qBAA6B;gBAClD;YACJ;QACJ;QAEA,IAAI;YACA,MAAMC,kBAAkBC,KAAK,KAAK,CAACJ,kBAAkB,MAAM;YAC3D,IAAI,CAACG,iBACD,OAAO;YAGX,MAAM,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAACP,KAAKO;YAE9C,OAAO,IAAI,CAAC,YAAY,CAACA,iBAAiBN,QAAQ;QACtD,EAAE,OAAM;YACJ,IAAI,CAAC,aAAa,CAAC,KAAK,CACpB,yCACAG,kBAAkB,MAAM,EACxBJ,KACAC;YAEJ,OAAO;QACX;IACJ;IAEQ,aACJQ,IAAyB,EACzBC,GAAyB,EACN;QACnB,IAAI,CAACA,KACD,OAAOD;QAGX,OAAOE,eAAeF,MAAMC;IAChC;AACJ;AAEO,MAAME,8BAA8BC,qBAAqB;IAC5D,aAAaC;IACb,gBAAgBnB;IAChB,cAAc;QACVoB;QACAC;QACAC;QACAC;KACH;AACL"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { GetProjectService, LoggerService, ProjectSdkParamsService, StackOutputCacheService } from "../../abstractions/index.js";
|
|
2
|
+
import { type AppModel } from "../../models/index.js";
|
|
3
|
+
export declare class DefaultStackOutputCacheService implements StackOutputCacheService.Interface {
|
|
4
|
+
private getProjectService;
|
|
5
|
+
private projectSdkParamsService;
|
|
6
|
+
private loggerService;
|
|
7
|
+
private static readonly DEFAULT_ENV;
|
|
8
|
+
private static readonly DEFAULT_REGION;
|
|
9
|
+
private static readonly DEFAULT_VARIANT;
|
|
10
|
+
constructor(getProjectService: GetProjectService.Interface, projectSdkParamsService: ProjectSdkParamsService.Interface, loggerService: LoggerService.Interface);
|
|
11
|
+
read(app: AppModel): Promise<Record<string, any> | null>;
|
|
12
|
+
write(app: AppModel, data: Record<string, any>): Promise<void>;
|
|
13
|
+
delete(app: AppModel): Promise<void>;
|
|
14
|
+
private getCacheKey;
|
|
15
|
+
private getCacheDir;
|
|
16
|
+
private getCachePath;
|
|
17
|
+
}
|
|
18
|
+
export declare const stackOutputCacheService: import("@webiny/di").Implementation<typeof DefaultStackOutputCacheService>;
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { createImplementation } from "@webiny/di";
|
|
2
|
+
import { GetProjectService, LoggerService, ProjectSdkParamsService, StackOutputCacheService } from "../../abstractions/index.js";
|
|
3
|
+
import promises from "fs/promises";
|
|
4
|
+
class DefaultStackOutputCacheService {
|
|
5
|
+
static{
|
|
6
|
+
this.DEFAULT_ENV = "dev";
|
|
7
|
+
}
|
|
8
|
+
static{
|
|
9
|
+
this.DEFAULT_REGION = "default";
|
|
10
|
+
}
|
|
11
|
+
static{
|
|
12
|
+
this.DEFAULT_VARIANT = "default";
|
|
13
|
+
}
|
|
14
|
+
constructor(getProjectService, projectSdkParamsService, loggerService){
|
|
15
|
+
this.getProjectService = getProjectService;
|
|
16
|
+
this.projectSdkParamsService = projectSdkParamsService;
|
|
17
|
+
this.loggerService = loggerService;
|
|
18
|
+
}
|
|
19
|
+
async read(app) {
|
|
20
|
+
const cachePath = this.getCachePath(app);
|
|
21
|
+
try {
|
|
22
|
+
const content = await promises.readFile(cachePath, "utf-8");
|
|
23
|
+
const data = JSON.parse(content);
|
|
24
|
+
this.loggerService.debug({
|
|
25
|
+
app: app.name,
|
|
26
|
+
cacheKey: this.getCacheKey(app)
|
|
27
|
+
}, "Stack output read from cache");
|
|
28
|
+
return data;
|
|
29
|
+
} catch {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
async write(app, data) {
|
|
34
|
+
const cachePath = this.getCachePath(app);
|
|
35
|
+
const cacheDir = this.getCacheDir().toString();
|
|
36
|
+
try {
|
|
37
|
+
await promises.mkdir(cacheDir, {
|
|
38
|
+
recursive: true
|
|
39
|
+
});
|
|
40
|
+
await promises.writeFile(cachePath, JSON.stringify(data, null, 2), "utf-8");
|
|
41
|
+
this.loggerService.debug("Stack output stored to cache", {
|
|
42
|
+
app: app.name,
|
|
43
|
+
cacheKey: this.getCacheKey(app)
|
|
44
|
+
});
|
|
45
|
+
} catch (error) {
|
|
46
|
+
this.loggerService.error("Could not write to cache file.", cachePath, error);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
async delete(app) {
|
|
50
|
+
const cachePath = this.getCachePath(app);
|
|
51
|
+
try {
|
|
52
|
+
await promises.rm(cachePath, {
|
|
53
|
+
force: true
|
|
54
|
+
});
|
|
55
|
+
this.loggerService.debug("Stack output cache deleted.", {
|
|
56
|
+
app: app.name,
|
|
57
|
+
cacheKey: this.getCacheKey(app)
|
|
58
|
+
});
|
|
59
|
+
} catch (error) {
|
|
60
|
+
this.loggerService.error("Could not delete stack output cache file.", cachePath, error);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
getCacheKey(app) {
|
|
64
|
+
const sdkParams = this.projectSdkParamsService.get();
|
|
65
|
+
const env = sdkParams.env || DefaultStackOutputCacheService.DEFAULT_ENV;
|
|
66
|
+
const region = sdkParams.region || DefaultStackOutputCacheService.DEFAULT_REGION;
|
|
67
|
+
const variant = sdkParams.variant || DefaultStackOutputCacheService.DEFAULT_VARIANT;
|
|
68
|
+
return `${app.name}-${env}-${region}-${variant}.json`;
|
|
69
|
+
}
|
|
70
|
+
getCacheDir() {
|
|
71
|
+
const project = this.getProjectService.execute();
|
|
72
|
+
return project.paths.dotWebinyFolder.join("caches", "stack-output");
|
|
73
|
+
}
|
|
74
|
+
getCachePath(app) {
|
|
75
|
+
return this.getCacheDir().join(this.getCacheKey(app)).toString();
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
const stackOutputCacheService = createImplementation({
|
|
79
|
+
abstraction: StackOutputCacheService,
|
|
80
|
+
implementation: DefaultStackOutputCacheService,
|
|
81
|
+
dependencies: [
|
|
82
|
+
GetProjectService,
|
|
83
|
+
ProjectSdkParamsService,
|
|
84
|
+
LoggerService
|
|
85
|
+
]
|
|
86
|
+
});
|
|
87
|
+
export { DefaultStackOutputCacheService, stackOutputCacheService };
|
|
88
|
+
|
|
89
|
+
//# sourceMappingURL=StackOutputCacheService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"services/StackOutputCacheService/StackOutputCacheService.js","sources":["../../../src/services/StackOutputCacheService/StackOutputCacheService.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/di\";\nimport {\n GetProjectService,\n LoggerService,\n ProjectSdkParamsService,\n StackOutputCacheService\n} from \"~/abstractions/index.js\";\nimport { type AppModel } from \"~/models/index.js\";\nimport fs from \"fs/promises\";\n\nexport class DefaultStackOutputCacheService implements StackOutputCacheService.Interface {\n private static readonly DEFAULT_ENV = \"dev\";\n private static readonly DEFAULT_REGION = \"default\";\n private static readonly DEFAULT_VARIANT = \"default\";\n\n constructor(\n private getProjectService: GetProjectService.Interface,\n private projectSdkParamsService: ProjectSdkParamsService.Interface,\n private loggerService: LoggerService.Interface\n ) {}\n\n async read(app: AppModel): Promise<Record<string, any> | null> {\n const cachePath = this.getCachePath(app);\n\n try {\n const content = await fs.readFile(cachePath, \"utf-8\");\n const data = JSON.parse(content);\n this.loggerService.debug(\n { app: app.name, cacheKey: this.getCacheKey(app) },\n \"Stack output read from cache\"\n );\n return data;\n } catch {\n // File doesn't exist or couldn't be read/parsed - this is expected on first run.\n return null;\n }\n }\n\n async write(app: AppModel, data: Record<string, any>): Promise<void> {\n const cachePath = this.getCachePath(app);\n const cacheDir = this.getCacheDir().toString();\n\n try {\n // Create cache directory if it doesn't exist.\n await fs.mkdir(cacheDir, { recursive: true });\n await fs.writeFile(cachePath, JSON.stringify(data, null, 2), \"utf-8\");\n this.loggerService.debug(\"Stack output stored to cache\", {\n app: app.name,\n cacheKey: this.getCacheKey(app)\n });\n } catch (error) {\n this.loggerService.error(\"Could not write to cache file.\", cachePath, error);\n }\n }\n\n async delete(app: AppModel): Promise<void> {\n const cachePath = this.getCachePath(app);\n\n try {\n // `force: true` makes this a no-op if the cache file doesn't exist.\n await fs.rm(cachePath, { force: true });\n this.loggerService.debug(\"Stack output cache deleted.\", {\n app: app.name,\n cacheKey: this.getCacheKey(app)\n });\n } catch (error) {\n this.loggerService.error(\"Could not delete stack output cache file.\", cachePath, error);\n }\n }\n\n private getCacheKey(app: AppModel): string {\n const sdkParams = this.projectSdkParamsService.get();\n const env = sdkParams.env || DefaultStackOutputCacheService.DEFAULT_ENV;\n const region = sdkParams.region || DefaultStackOutputCacheService.DEFAULT_REGION;\n const variant = sdkParams.variant || DefaultStackOutputCacheService.DEFAULT_VARIANT;\n return `${app.name}-${env}-${region}-${variant}.json`;\n }\n\n private getCacheDir() {\n const project = this.getProjectService.execute();\n return project.paths.dotWebinyFolder.join(\"caches\", \"stack-output\");\n }\n\n private getCachePath(app: AppModel): string {\n return this.getCacheDir().join(this.getCacheKey(app)).toString();\n }\n}\n\nexport const stackOutputCacheService = createImplementation({\n abstraction: StackOutputCacheService,\n implementation: DefaultStackOutputCacheService,\n dependencies: [GetProjectService, ProjectSdkParamsService, LoggerService]\n});\n"],"names":["DefaultStackOutputCacheService","getProjectService","projectSdkParamsService","loggerService","app","cachePath","content","fs","data","JSON","cacheDir","error","sdkParams","env","region","variant","project","stackOutputCacheService","createImplementation","StackOutputCacheService","GetProjectService","ProjectSdkParamsService","LoggerService"],"mappings":";;;AAUO,MAAMA;;aACe,WAAW,GAAG;;;aACd,cAAc,GAAG;;;aACjB,eAAe,GAAG;;IAE1C,YACYC,iBAA8C,EAC9CC,uBAA0D,EAC1DC,aAAsC,CAChD;aAHUF,iBAAiB,GAAjBA;aACAC,uBAAuB,GAAvBA;aACAC,aAAa,GAAbA;IACT;IAEH,MAAM,KAAKC,GAAa,EAAuC;QAC3D,MAAMC,YAAY,IAAI,CAAC,YAAY,CAACD;QAEpC,IAAI;YACA,MAAME,UAAU,MAAMC,SAAAA,QAAW,CAACF,WAAW;YAC7C,MAAMG,OAAOC,KAAK,KAAK,CAACH;YACxB,IAAI,CAAC,aAAa,CAAC,KAAK,CACpB;gBAAE,KAAKF,IAAI,IAAI;gBAAE,UAAU,IAAI,CAAC,WAAW,CAACA;YAAK,GACjD;YAEJ,OAAOI;QACX,EAAE,OAAM;YAEJ,OAAO;QACX;IACJ;IAEA,MAAM,MAAMJ,GAAa,EAAEI,IAAyB,EAAiB;QACjE,MAAMH,YAAY,IAAI,CAAC,YAAY,CAACD;QACpC,MAAMM,WAAW,IAAI,CAAC,WAAW,GAAG,QAAQ;QAE5C,IAAI;YAEA,MAAMH,SAAAA,KAAQ,CAACG,UAAU;gBAAE,WAAW;YAAK;YAC3C,MAAMH,SAAAA,SAAY,CAACF,WAAWI,KAAK,SAAS,CAACD,MAAM,MAAM,IAAI;YAC7D,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,gCAAgC;gBACrD,KAAKJ,IAAI,IAAI;gBACb,UAAU,IAAI,CAAC,WAAW,CAACA;YAC/B;QACJ,EAAE,OAAOO,OAAO;YACZ,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,kCAAkCN,WAAWM;QAC1E;IACJ;IAEA,MAAM,OAAOP,GAAa,EAAiB;QACvC,MAAMC,YAAY,IAAI,CAAC,YAAY,CAACD;QAEpC,IAAI;YAEA,MAAMG,SAAAA,EAAK,CAACF,WAAW;gBAAE,OAAO;YAAK;YACrC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,+BAA+B;gBACpD,KAAKD,IAAI,IAAI;gBACb,UAAU,IAAI,CAAC,WAAW,CAACA;YAC/B;QACJ,EAAE,OAAOO,OAAO;YACZ,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,6CAA6CN,WAAWM;QACrF;IACJ;IAEQ,YAAYP,GAAa,EAAU;QACvC,MAAMQ,YAAY,IAAI,CAAC,uBAAuB,CAAC,GAAG;QAClD,MAAMC,MAAMD,UAAU,GAAG,IAAIZ,+BAA+B,WAAW;QACvE,MAAMc,SAASF,UAAU,MAAM,IAAIZ,+BAA+B,cAAc;QAChF,MAAMe,UAAUH,UAAU,OAAO,IAAIZ,+BAA+B,eAAe;QACnF,OAAO,GAAGI,IAAI,IAAI,CAAC,CAAC,EAAES,IAAI,CAAC,EAAEC,OAAO,CAAC,EAAEC,QAAQ,KAAK,CAAC;IACzD;IAEQ,cAAc;QAClB,MAAMC,UAAU,IAAI,CAAC,iBAAiB,CAAC,OAAO;QAC9C,OAAOA,QAAQ,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU;IACxD;IAEQ,aAAaZ,GAAa,EAAU;QACxC,OAAO,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAACA,MAAM,QAAQ;IAClE;AACJ;AAEO,MAAMa,0BAA0BC,qBAAqB;IACxD,aAAaC;IACb,gBAAgBnB;IAChB,cAAc;QAACoB;QAAmBC;QAAyBC;KAAc;AAC7E"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./StackOutputCacheService.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./StackOutputCacheService.js";
|
package/services/index.d.ts
CHANGED
|
@@ -29,6 +29,7 @@ export * from "./PulumiGetStackOutputService/index.js";
|
|
|
29
29
|
export * from "./PulumiLoginService/index.js";
|
|
30
30
|
export * from "./PulumiSelectStackService/index.js";
|
|
31
31
|
export * from "./SetProjectIdService/index.js";
|
|
32
|
+
export * from "./StackOutputCacheService/index.js";
|
|
32
33
|
export * from "./StdioService/index.js";
|
|
33
34
|
export * from "./UiService/index.js";
|
|
34
35
|
export * from "./ValidateProjectConfigService/index.js";
|
package/services/index.js
CHANGED
|
@@ -29,6 +29,7 @@ export * from "./PulumiGetStackOutputService/index.js";
|
|
|
29
29
|
export * from "./PulumiLoginService/index.js";
|
|
30
30
|
export * from "./PulumiSelectStackService/index.js";
|
|
31
31
|
export * from "./SetProjectIdService/index.js";
|
|
32
|
+
export * from "./StackOutputCacheService/index.js";
|
|
32
33
|
export * from "./StdioService/index.js";
|
|
33
34
|
export * from "./UiService/index.js";
|
|
34
35
|
export * from "./ValidateProjectConfigService/index.js";
|