@aws-amplify/amplify-category-storage
Version:
amplify-cli storage plugin
151 lines • 8.8 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.addLambdaTrigger = exports.s3RemoveAdminLambdaTrigger = exports.s3RegisterAdminTrigger = exports.s3RemoveStorageLambdaTrigger = exports.s3AddStorageLambdaTrigger = exports.s3ValidateBucketName = exports.s3CreateStorageResource = exports.s3UpdateUserInput = exports.s3GetAdminTriggerFunctionName = exports.s3GetUserInput = exports.s3GetResourceName = void 0;
const amplify_cli_core_1 = require("@aws-amplify/amplify-cli-core");
const s3_stack_transform_1 = require("../cdk-stack-builder/s3-stack-transform");
const s3_user_input_state_1 = require("./s3-user-input-state");
const s3_walkthrough_1 = require("./s3-walkthrough");
function s3GetResourceName() {
const amplifyMeta = amplify_cli_core_1.stateManager.getMeta();
let resourceName = undefined;
if (amplifyMeta[amplify_cli_core_1.AmplifyCategories.STORAGE]) {
const categoryResources = amplifyMeta[amplify_cli_core_1.AmplifyCategories.STORAGE];
Object.keys(categoryResources).forEach((resource) => {
if (categoryResources[resource].service === amplify_cli_core_1.AmplifySupportedService.S3) {
resourceName = resource;
}
});
}
return resourceName;
}
exports.s3GetResourceName = s3GetResourceName;
async function s3GetUserInput(context, s3ResourceName) {
if ((0, s3_walkthrough_1.isMigrateStorageRequired)(context, s3ResourceName)) {
await (0, s3_walkthrough_1.migrateStorageCategory)(context, s3ResourceName);
}
const cliInputsState = new s3_user_input_state_1.S3InputState(context, s3ResourceName, undefined);
return cliInputsState.getUserInput();
}
exports.s3GetUserInput = s3GetUserInput;
async function s3GetAdminTriggerFunctionName(context) {
var _a;
const s3ResourceName = await s3GetResourceName();
const s3UserInput = s3ResourceName ? await s3GetUserInput(context, s3ResourceName) : undefined;
return (_a = s3UserInput === null || s3UserInput === void 0 ? void 0 : s3UserInput.adminTriggerFunction) === null || _a === void 0 ? void 0 : _a.triggerFunction;
}
exports.s3GetAdminTriggerFunctionName = s3GetAdminTriggerFunctionName;
async function s3UpdateUserInput(context, storageInput) {
await s3APIHelperTransformAndSaveState(context, storageInput, amplify_cli_core_1.CLISubCommandType.UPDATE);
return storageInput;
}
exports.s3UpdateUserInput = s3UpdateUserInput;
async function s3CreateStorageResource(context, storageInput) {
const storageResourceName = s3GetResourceName();
if (storageResourceName) {
throw new Error('Add Storage Failed.. already exists');
}
if (storageInput.bucketName) {
s3ValidateBucketName(storageInput.bucketName);
}
await s3APIHelperTransformAndSaveState(context, storageInput, amplify_cli_core_1.CLISubCommandType.ADD);
return storageInput;
}
exports.s3CreateStorageResource = s3CreateStorageResource;
function s3ValidateBucketName(bucketName) {
const regexp = '^[a-z0-9-]{3,47}$';
const isValidBucketName = new RegExp(regexp, 'g').test(bucketName);
if (!isValidBucketName) {
throw new Error('Bucket name can only use the following characters: a-z 0-9 - and should have minimum 3 character and max of 47 character');
}
return true;
}
exports.s3ValidateBucketName = s3ValidateBucketName;
async function s3AddStorageLambdaTrigger(context, s3ResourceName, storageLambdaTrigger) {
const cliInputsState = new s3_user_input_state_1.S3InputState(context, s3ResourceName, undefined);
if (!cliInputsState.cliInputFileExists()) {
throw new Error(`Error Adding trigger function on storage resource ${s3ResourceName} : resource does not exist`);
}
const s3UserInput = cliInputsState.getUserInput();
s3UserInput.triggerFunction = storageLambdaTrigger.triggerFunction;
await cliInputsState.saveCliInputPayload(s3UserInput);
await (0, s3_walkthrough_1.createNewLambdaAndUpdateCFN)(context, s3UserInput.triggerFunction, undefined);
await s3APIHelperTransformAndSaveState(context, s3UserInput, amplify_cli_core_1.CLISubCommandType.UPDATE);
return s3UserInput;
}
exports.s3AddStorageLambdaTrigger = s3AddStorageLambdaTrigger;
async function s3RemoveStorageLambdaTrigger(context, s3ResourceName) {
var _a;
const cliInputsState = new s3_user_input_state_1.S3InputState(context, s3ResourceName, undefined);
if (!cliInputsState.cliInputFileExists()) {
throw new Error(`Error Adding trigger function on storage resource ${s3ResourceName} : resource does not exist`);
}
const s3UserInput = cliInputsState.getUserInput();
if (((_a = s3UserInput.adminTriggerFunction) === null || _a === void 0 ? void 0 : _a.triggerFunction) === s3UserInput.triggerFunction) {
throw new Error(`Error removing trigger function from storage resource ${s3ResourceName} : function used by ${amplify_cli_core_1.AmplifyCategories.PREDICTIONS}`);
}
s3UserInput.triggerFunction = undefined;
await s3APIHelperTransformAndSaveState(context, s3UserInput, amplify_cli_core_1.CLISubCommandType.UPDATE);
}
exports.s3RemoveStorageLambdaTrigger = s3RemoveStorageLambdaTrigger;
async function s3RegisterAdminTrigger(context, s3ResourceName, adminLambdaTrigger) {
const cliInputsState = new s3_user_input_state_1.S3InputState(context, s3ResourceName, undefined);
if (!cliInputsState.cliInputFileExists()) {
throw new Error(`Error Registering existing trigger function on storage resource ${s3ResourceName} : resource does not exist`);
}
const s3UserInput = cliInputsState.getUserInput();
s3UserInput.adminTriggerFunction = adminLambdaTrigger;
await s3APIHelperTransformAndSaveState(context, s3UserInput, amplify_cli_core_1.CLISubCommandType.UPDATE);
return s3UserInput;
}
exports.s3RegisterAdminTrigger = s3RegisterAdminTrigger;
async function s3RemoveAdminLambdaTrigger(context, s3ResourceName) {
const cliInputsState = new s3_user_input_state_1.S3InputState(context, s3ResourceName, undefined);
if (!cliInputsState.cliInputFileExists()) {
throw new Error(`Error Registering existing trigger function on storage resource ${s3ResourceName} : resource does not exist`);
}
const s3UserInput = cliInputsState.getUserInput();
s3UserInput.adminTriggerFunction = undefined;
await s3APIHelperTransformAndSaveState(context, s3UserInput, amplify_cli_core_1.CLISubCommandType.UPDATE);
return s3UserInput;
}
exports.s3RemoveAdminLambdaTrigger = s3RemoveAdminLambdaTrigger;
async function addLambdaTrigger(context, s3ResourceName, triggerFunctionParams) {
const cliInputsState = new s3_user_input_state_1.S3InputState(context, s3ResourceName, undefined);
if (!cliInputsState.cliInputFileExists()) {
cliInputsState.addAdditionalLambdaTrigger(triggerFunctionParams);
const stackGenerator = new s3_stack_transform_1.AmplifyS3ResourceStackTransform(s3ResourceName, context);
await stackGenerator.transform(amplify_cli_core_1.CLISubCommandType.UPDATE);
return stackGenerator.getCFN();
}
else {
throw new Error(`Error Adding trigger function on storage resource ${s3ResourceName} : resource does not exist`);
}
}
exports.addLambdaTrigger = addLambdaTrigger;
async function s3APIHelperTransformAndSaveState(context, storageInput, phase) {
if (phase != amplify_cli_core_1.CLISubCommandType.ADD && (0, s3_walkthrough_1.isMigrateStorageRequired)(context, storageInput.resourceName)) {
await (0, s3_walkthrough_1.migrateStorageCategory)(context, storageInput.resourceName);
}
let cliInputsState;
if (phase === amplify_cli_core_1.CLISubCommandType.ADD) {
cliInputsState = new s3_user_input_state_1.S3InputState(context, storageInput.resourceName, storageInput);
}
else {
cliInputsState = new s3_user_input_state_1.S3InputState(context, storageInput.resourceName, undefined);
}
await cliInputsState.saveCliInputPayload(storageInput);
const stackGenerator = new s3_stack_transform_1.AmplifyS3ResourceStackTransform(storageInput.resourceName, context);
await stackGenerator.transform(phase);
const dependsOn = stackGenerator.getS3DependsOn();
if (phase == amplify_cli_core_1.CLISubCommandType.ADD) {
context.amplify.updateamplifyMetaAfterResourceAdd(amplify_cli_core_1.AmplifyCategories.STORAGE, storageInput.resourceName, {
service: amplify_cli_core_1.AmplifySupportedService.S3,
providerPlugin: 'awscloudformation',
dependsOn,
});
}
else {
context.amplify.updateamplifyMetaAfterResourceUpdate(amplify_cli_core_1.AmplifyCategories.STORAGE, storageInput.resourceName, 'dependsOn', dependsOn);
}
}
//# sourceMappingURL=s3-resource-api.js.map