├── .DS_Store ├── .editorconfig ├── .eslintignore ├── .eslintrc ├── .github ├── dependabot.yml └── workflows │ ├── cli-testing.yml │ └── main.yml ├── .gitignore ├── README.md ├── bin ├── run └── run.cmd ├── img ├── cli-3.drawio └── cli.png ├── package.json ├── src ├── commands │ ├── client.ts │ ├── config │ │ ├── customData.ts │ │ ├── memory.ts │ │ ├── mock.ts │ │ ├── stage.ts │ │ └── timeout.ts │ ├── init.ts │ ├── login.ts │ ├── merge.ts │ ├── status.ts │ └── update.ts ├── index.ts ├── lib │ ├── api │ │ ├── apiMockDataGenerator │ │ │ ├── MockObject.ts │ │ │ ├── helper.ts │ │ │ └── index.ts │ │ ├── buildSchemaToTypescript.ts │ │ ├── constructs │ │ │ ├── ApiGateway │ │ │ │ └── index.ts │ │ │ ├── ApiManager │ │ │ │ └── index.ts │ │ │ ├── Appsync │ │ │ │ └── index.ts │ │ │ ├── AuroraServerless │ │ │ │ └── index.ts │ │ │ ├── Cdk │ │ │ │ └── index.ts │ │ │ ├── ConstructsImports │ │ │ │ └── index.ts │ │ │ ├── Dynamodb │ │ │ │ └── index.ts │ │ │ ├── Ec2 │ │ │ │ └── index.ts │ │ │ ├── EventBridge │ │ │ │ └── index.ts │ │ │ ├── Iam │ │ │ │ └── index.ts │ │ │ ├── Lambda │ │ │ │ ├── index.ts │ │ │ │ ├── lambdaFunction.ts │ │ │ │ └── utills.ts │ │ │ └── Neptune │ │ │ │ └── index.ts │ │ ├── directives │ │ │ ├── asyncDirective.ts │ │ │ └── microServicesDirective.ts │ │ ├── errorHandling.ts │ │ ├── functions │ │ │ ├── BasicApi │ │ │ │ └── index.ts │ │ │ ├── DefineYourOwnApi │ │ │ │ └── index.ts │ │ │ ├── TodoApi │ │ │ │ └── index.ts │ │ │ ├── UpdateYourOwnApi │ │ │ │ └── index.ts │ │ │ └── index.ts │ │ ├── generators │ │ │ ├── ApiGateway │ │ │ │ └── index.ts │ │ │ ├── ApiTests │ │ │ │ ├── functions │ │ │ │ │ └── index.ts │ │ │ │ └── index.ts │ │ │ ├── Appsync │ │ │ │ ├── functions │ │ │ │ │ └── index.ts │ │ │ │ └── index.ts │ │ │ ├── Aspects │ │ │ │ ├── aspectController.ts │ │ │ │ ├── defaultVisitor.ts │ │ │ │ └── index.ts │ │ │ ├── AuroraServerless │ │ │ │ ├── functions │ │ │ │ │ └── index.ts │ │ │ │ └── index.ts │ │ │ ├── CdkTests │ │ │ │ ├── Appsync │ │ │ │ │ └── index.ts │ │ │ │ ├── AuroraServerless │ │ │ │ │ ├── functions │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── Dynamodb │ │ │ │ │ └── index.ts │ │ │ │ ├── Lambda │ │ │ │ │ ├── functions │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── index.ts │ │ │ │ └── Neptune │ │ │ │ │ ├── functions │ │ │ │ │ └── index.ts │ │ │ │ │ └── index.ts │ │ │ ├── DynamoDB │ │ │ │ ├── functions │ │ │ │ │ └── index.ts │ │ │ │ └── index.ts │ │ │ ├── EventBridge │ │ │ │ └── index.ts │ │ │ ├── Lambda │ │ │ │ ├── customLambda.ts │ │ │ │ ├── functions │ │ │ │ │ └── index.ts │ │ │ │ ├── index.ts │ │ │ │ ├── multipleLambda.ts │ │ │ │ └── singleLambda.ts │ │ │ ├── MockApi │ │ │ │ ├── editableMockApi.ts │ │ │ │ ├── index.ts │ │ │ │ └── utills.ts │ │ │ ├── Neptune │ │ │ │ ├── functions │ │ │ │ │ └── index.ts │ │ │ │ ├── gremlinSetup.ts │ │ │ │ └── index.ts │ │ │ ├── Stack │ │ │ │ ├── functions │ │ │ │ │ └── index.ts │ │ │ │ └── index.ts │ │ │ ├── bin │ │ │ │ └── index.ts │ │ │ └── index.ts │ │ ├── helpers.ts │ │ ├── info.ts │ │ └── template │ │ │ ├── .npmignore │ │ │ ├── README.md │ │ │ ├── cdk.json │ │ │ ├── codegen.yml │ │ │ ├── gitignore │ │ │ ├── graphqlClient │ │ │ └── index.html │ │ │ ├── jest.config.js │ │ │ ├── lambdaLayer │ │ │ └── nodejs │ │ │ │ └── package.json │ │ │ ├── package.json │ │ │ └── tsconfig.json │ ├── configStore.ts │ ├── fs.ts │ ├── inquirer.ts │ └── spinner.ts └── utils │ ├── awsAppsyncDirectives.graphql │ ├── awsAppsyncScalars.graphql │ ├── constants.ts │ └── typescriptWriter │ └── index.ts ├── test ├── mocha.opts ├── test-schemas │ ├── blog.graphql │ ├── github.graphql │ ├── shopping-cart.graphql │ ├── todo.graphql │ ├── tweet.graphql │ └── user.graphql ├── test-scripts │ └── script.ts └── tsconfig.json ├── tsconfig.json ├── tutorials ├── .DS_Store ├── tutorial00-getting-started-graphql │ ├── my_user_api │ │ ├── .gitignore │ │ ├── .npmignore │ │ ├── .panacloud │ │ │ └── editable_src │ │ │ │ ├── graphql │ │ │ │ └── schema │ │ │ │ │ └── schema.graphql │ │ │ │ └── panacloudconfig.json │ │ ├── .vscode │ │ │ └── settings.json │ │ ├── README.md │ │ ├── bin │ │ │ └── my_user_api.ts │ │ ├── cdk.json │ │ ├── editable_src │ │ │ ├── aspects │ │ │ │ ├── AspectController.ts │ │ │ │ └── DefaultVisitor.ts │ │ │ ├── customMockLambdaLayer │ │ │ │ ├── mockData │ │ │ │ │ ├── addUser │ │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ └── user │ │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ └── nodejs │ │ │ │ │ ├── package-lock.json │ │ │ │ │ └── package.json │ │ │ ├── graphql │ │ │ │ ├── schema │ │ │ │ │ └── schema.graphql │ │ │ │ └── types.ts │ │ │ ├── lambdaLayer │ │ │ │ ├── nodejs │ │ │ │ │ ├── package-lock.json │ │ │ │ │ └── package.json │ │ │ │ └── utils │ │ │ │ │ └── gremlin_init.ts │ │ │ ├── lambda_stubs │ │ │ │ ├── addUser │ │ │ │ │ ├── index.ts │ │ │ │ │ └── package.json │ │ │ │ └── user │ │ │ │ │ ├── index.ts │ │ │ │ │ └── package.json │ │ │ └── panacloudconfig.json │ │ ├── graphqlClient │ │ │ └── index.html │ │ ├── jest.config.js │ │ ├── lib │ │ │ ├── AppsyncConstruct │ │ │ │ └── index.ts │ │ │ ├── VpcNeptuneConstruct │ │ │ │ └── index.ts │ │ │ └── my_user_api-stack.ts │ │ ├── mock_lambda │ │ │ ├── addUser │ │ │ │ └── index.ts │ │ │ └── user │ │ │ │ └── index.ts │ │ ├── mock_lambda_layer │ │ │ ├── mockData │ │ │ │ ├── addUser │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ ├── types.ts │ │ │ │ └── user │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ └── nodejs │ │ │ │ ├── package-lock.json │ │ │ │ └── package.json │ │ ├── package-lock.json │ │ ├── package.json │ │ └── tsconfig.json │ ├── readme.md │ └── user.graphql ├── tutorial01-mock-api-with-custom-data │ ├── README.md │ ├── my_user_api │ │ ├── .gitignore │ │ ├── .npmignore │ │ ├── .panacloud │ │ │ └── editable_src │ │ │ │ ├── graphql │ │ │ │ └── schema │ │ │ │ │ └── schema.graphql │ │ │ │ └── panacloudconfig.json │ │ ├── .vscode │ │ │ └── settings.json │ │ ├── README.md │ │ ├── bin │ │ │ └── my_user_api.ts │ │ ├── cdk.json │ │ ├── editable_src │ │ │ ├── aspects │ │ │ │ ├── AspectController.ts │ │ │ │ └── DefaultVisitor.ts │ │ │ ├── customMockLambdaLayer │ │ │ │ ├── mockData │ │ │ │ │ ├── addUser │ │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ └── user │ │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ └── nodejs │ │ │ │ │ ├── package-lock.json │ │ │ │ │ └── package.json │ │ │ ├── graphql │ │ │ │ ├── schema │ │ │ │ │ └── schema.graphql │ │ │ │ └── types.ts │ │ │ ├── lambdaLayer │ │ │ │ ├── nodejs │ │ │ │ │ ├── package-lock.json │ │ │ │ │ └── package.json │ │ │ │ └── utils │ │ │ │ │ └── gremlin_init.ts │ │ │ ├── lambda_stubs │ │ │ │ ├── addUser │ │ │ │ │ ├── index.ts │ │ │ │ │ └── package.json │ │ │ │ └── user │ │ │ │ │ ├── index.ts │ │ │ │ │ └── package.json │ │ │ └── panacloudconfig.json │ │ ├── graphqlClient │ │ │ └── index.html │ │ ├── jest.config.js │ │ ├── lib │ │ │ ├── AppsyncConstruct │ │ │ │ └── index.ts │ │ │ ├── VpcNeptuneConstruct │ │ │ │ └── index.ts │ │ │ └── my_user_api-stack.ts │ │ ├── mock_lambda │ │ │ ├── addUser │ │ │ │ └── index.ts │ │ │ └── user │ │ │ │ └── index.ts │ │ ├── mock_lambda_layer │ │ │ ├── mockData │ │ │ │ ├── addUser │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ ├── types.ts │ │ │ │ └── user │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ └── nodejs │ │ │ │ ├── package-lock.json │ │ │ │ └── package.json │ │ ├── package-lock.json │ │ ├── package.json │ │ ├── tsconfig.json │ │ └── yarn.lock │ ├── result.gif │ └── user.graphql ├── tutorial02-graphql-microservices │ ├── my_user_api │ │ ├── .gitignore │ │ ├── .npmignore │ │ ├── .panacloud │ │ │ └── editable_src │ │ │ │ ├── graphql │ │ │ │ └── schema │ │ │ │ │ └── schema.graphql │ │ │ │ └── panacloudconfig.json │ │ ├── .vscode │ │ │ └── settings.json │ │ ├── README.md │ │ ├── bin │ │ │ └── my_user_api.ts │ │ ├── cdk.json │ │ ├── editable_src │ │ │ ├── aspects │ │ │ │ ├── AspectController.ts │ │ │ │ └── DefaultVisitor.ts │ │ │ ├── customMockLambdaLayer │ │ │ │ ├── mockData │ │ │ │ │ ├── addTodo │ │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ │ ├── deleteTodo │ │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ │ ├── getTodos │ │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ └── updateTodo │ │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ └── nodejs │ │ │ │ │ ├── package-lock.json │ │ │ │ │ └── package.json │ │ │ ├── graphql │ │ │ │ ├── schema │ │ │ │ │ └── schema.graphql │ │ │ │ └── types.ts │ │ │ ├── lambdaLayer │ │ │ │ ├── nodejs │ │ │ │ │ ├── package-lock.json │ │ │ │ │ └── package.json │ │ │ │ └── utils │ │ │ │ │ └── gremlin_init.ts │ │ │ ├── lambda_stubs │ │ │ │ └── todo │ │ │ │ │ ├── addTodo │ │ │ │ │ ├── index.ts │ │ │ │ │ └── package.json │ │ │ │ │ ├── deleteTodo │ │ │ │ │ ├── index.ts │ │ │ │ │ └── package.json │ │ │ │ │ ├── getTodos │ │ │ │ │ ├── index.ts │ │ │ │ │ └── package.json │ │ │ │ │ └── updateTodo │ │ │ │ │ ├── index.ts │ │ │ │ │ └── package.json │ │ │ └── panacloudconfig.json │ │ ├── graphqlClient │ │ │ └── index.html │ │ ├── jest.config.js │ │ ├── lib │ │ │ ├── AppsyncConstruct │ │ │ │ └── index.ts │ │ │ ├── VpcNeptuneConstruct │ │ │ │ └── index.ts │ │ │ └── my_user_api-stack.ts │ │ ├── mock_lambda │ │ │ └── todo │ │ │ │ ├── addTodo │ │ │ │ └── index.ts │ │ │ │ ├── deleteTodo │ │ │ │ └── index.ts │ │ │ │ ├── getTodos │ │ │ │ └── index.ts │ │ │ │ └── updateTodo │ │ │ │ └── index.ts │ │ ├── mock_lambda_layer │ │ │ ├── mockData │ │ │ │ ├── addTodo │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ ├── deleteTodo │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ ├── getTodos │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ ├── types.ts │ │ │ │ └── updateTodo │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ └── nodejs │ │ │ │ ├── package-lock.json │ │ │ │ └── package.json │ │ ├── package-lock.json │ │ ├── package.json │ │ └── tsconfig.json │ ├── readme.md │ └── todoSchema.graphql ├── tutorial03-real-api │ ├── my_user_api │ │ ├── .gitignore │ │ ├── .npmignore │ │ ├── .panacloud │ │ │ └── editable_src │ │ │ │ ├── graphql │ │ │ │ └── schema │ │ │ │ │ └── schema.graphql │ │ │ │ └── panacloudconfig.json │ │ ├── .vscode │ │ │ └── settings.json │ │ ├── README.md │ │ ├── bin │ │ │ └── my_user_api.ts │ │ ├── cdk.json │ │ ├── editable_src │ │ │ ├── aspects │ │ │ │ ├── AspectController.ts │ │ │ │ └── DefaultVisitor.ts │ │ │ ├── customMockLambdaLayer │ │ │ │ ├── mockData │ │ │ │ │ ├── addUser │ │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ └── user │ │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ └── nodejs │ │ │ │ │ ├── package-lock.json │ │ │ │ │ └── package.json │ │ │ ├── graphql │ │ │ │ ├── schema │ │ │ │ │ └── schema.graphql │ │ │ │ └── types.ts │ │ │ ├── lambdaLayer │ │ │ │ ├── nodejs │ │ │ │ │ ├── package-lock.json │ │ │ │ │ └── package.json │ │ │ │ └── utils │ │ │ │ │ └── gremlin_init.ts │ │ │ ├── lambda_stubs │ │ │ │ ├── addUser │ │ │ │ │ ├── index.ts │ │ │ │ │ └── package.json │ │ │ │ └── user │ │ │ │ │ ├── index.ts │ │ │ │ │ └── package.json │ │ │ └── panacloudconfig.json │ │ ├── graphqlClient │ │ │ └── index.html │ │ ├── jest.config.js │ │ ├── lib │ │ │ ├── AppsyncConstruct │ │ │ │ └── index.ts │ │ │ ├── VpcNeptuneConstruct │ │ │ │ └── index.ts │ │ │ └── my_user_api-stack.ts │ │ ├── mock_lambda │ │ │ ├── addUser │ │ │ │ └── index.ts │ │ │ └── user │ │ │ │ └── index.ts │ │ ├── mock_lambda_layer │ │ │ ├── mockData │ │ │ │ ├── addUser │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ ├── types.ts │ │ │ │ └── user │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ └── nodejs │ │ │ │ ├── package-lock.json │ │ │ │ └── package.json │ │ ├── package-lock.json │ │ ├── package.json │ │ └── tsconfig.json │ ├── readme.md │ └── user.graphql ├── tutorial04-adding-stages │ ├── my_user_api │ │ ├── .gitignore │ │ ├── .npmignore │ │ ├── .panacloud │ │ │ └── editable_src │ │ │ │ ├── graphql │ │ │ │ └── schema │ │ │ │ │ └── schema.graphql │ │ │ │ └── panacloudconfig.json │ │ ├── .vscode │ │ │ └── settings.json │ │ ├── README.md │ │ ├── bin │ │ │ └── my_user_api.ts │ │ ├── cdk.json │ │ ├── editable_src │ │ │ ├── aspects │ │ │ │ ├── AspectController.ts │ │ │ │ └── DefaultVisitor.ts │ │ │ ├── customMockLambdaLayer │ │ │ │ ├── mockData │ │ │ │ │ ├── addUser │ │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ └── user │ │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ └── nodejs │ │ │ │ │ ├── package-lock.json │ │ │ │ │ └── package.json │ │ │ ├── graphql │ │ │ │ ├── schema │ │ │ │ │ └── schema.graphql │ │ │ │ └── types.ts │ │ │ ├── lambdaLayer │ │ │ │ ├── nodejs │ │ │ │ │ ├── package-lock.json │ │ │ │ │ └── package.json │ │ │ │ └── utils │ │ │ │ │ └── gremlin_init.ts │ │ │ ├── lambda_stubs │ │ │ │ ├── addUser │ │ │ │ │ ├── index.ts │ │ │ │ │ └── package.json │ │ │ │ └── user │ │ │ │ │ ├── index.ts │ │ │ │ │ └── package.json │ │ │ └── panacloudconfig.json │ │ ├── graphqlClient │ │ │ └── index.html │ │ ├── jest.config.js │ │ ├── lib │ │ │ ├── AppsyncConstruct │ │ │ │ └── index.ts │ │ │ ├── VpcNeptuneConstruct │ │ │ │ └── index.ts │ │ │ └── my_user_api-stack.ts │ │ ├── mock_lambda │ │ │ ├── addUser │ │ │ │ └── index.ts │ │ │ └── user │ │ │ │ └── index.ts │ │ ├── mock_lambda_layer │ │ │ ├── mockData │ │ │ │ ├── addUser │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ ├── types.ts │ │ │ │ └── user │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ └── nodejs │ │ │ │ ├── package-lock.json │ │ │ │ └── package.json │ │ ├── package-lock.json │ │ ├── package.json │ │ └── tsconfig.json │ ├── readme.md │ └── user.graphql ├── tutorial05-customize-lambda-memory-and-timeout │ ├── my_user_api │ │ ├── .gitignore │ │ ├── .npmignore │ │ ├── .panacloud │ │ │ └── editable_src │ │ │ │ ├── graphql │ │ │ │ └── schema │ │ │ │ │ └── schema.graphql │ │ │ │ └── panacloudconfig.json │ │ ├── .vscode │ │ │ └── settings.json │ │ ├── README.md │ │ ├── bin │ │ │ └── my_user_api.ts │ │ ├── cdk.json │ │ ├── editable_src │ │ │ ├── aspects │ │ │ │ ├── AspectController.ts │ │ │ │ └── DefaultVisitor.ts │ │ │ ├── customMockLambdaLayer │ │ │ │ ├── mockData │ │ │ │ │ ├── addUser │ │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ └── user │ │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ └── nodejs │ │ │ │ │ ├── package-lock.json │ │ │ │ │ └── package.json │ │ │ ├── graphql │ │ │ │ ├── schema │ │ │ │ │ └── schema.graphql │ │ │ │ └── types.ts │ │ │ ├── lambdaLayer │ │ │ │ ├── nodejs │ │ │ │ │ ├── package-lock.json │ │ │ │ │ └── package.json │ │ │ │ └── utils │ │ │ │ │ └── gremlin_init.ts │ │ │ ├── lambda_stubs │ │ │ │ ├── addUser │ │ │ │ │ ├── index.ts │ │ │ │ │ └── package.json │ │ │ │ └── user │ │ │ │ │ ├── index.ts │ │ │ │ │ └── package.json │ │ │ └── panacloudconfig.json │ │ ├── graphqlClient │ │ │ └── index.html │ │ ├── jest.config.js │ │ ├── lib │ │ │ ├── AppsyncConstruct │ │ │ │ └── index.ts │ │ │ ├── VpcNeptuneConstruct │ │ │ │ └── index.ts │ │ │ └── my_user_api-stack.ts │ │ ├── mock_lambda │ │ │ ├── addUser │ │ │ │ └── index.ts │ │ │ └── user │ │ │ │ └── index.ts │ │ ├── mock_lambda_layer │ │ │ ├── mockData │ │ │ │ ├── addUser │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ ├── types.ts │ │ │ │ └── user │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ └── nodejs │ │ │ │ ├── package-lock.json │ │ │ │ └── package.json │ │ ├── package-lock.json │ │ ├── package.json │ │ └── tsconfig.json │ ├── readme.md │ └── user.graphql ├── tutorial06-customizing-infrastructure-using-aspects │ ├── my_user_api │ │ ├── .gitignore │ │ ├── .npmignore │ │ ├── .panacloud │ │ │ └── editable_src │ │ │ │ ├── graphql │ │ │ │ └── schema │ │ │ │ │ └── schema.graphql │ │ │ │ └── panacloudconfig.json │ │ ├── .vscode │ │ │ └── settings.json │ │ ├── README.md │ │ ├── bin │ │ │ └── my_user_api.ts │ │ ├── cdk.json │ │ ├── editable_src │ │ │ ├── aspects │ │ │ │ ├── AspectController.ts │ │ │ │ └── DefaultVisitor.ts │ │ │ ├── customMockLambdaLayer │ │ │ │ ├── mockData │ │ │ │ │ ├── addUser │ │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ └── user │ │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ └── nodejs │ │ │ │ │ ├── package-lock.json │ │ │ │ │ └── package.json │ │ │ ├── graphql │ │ │ │ ├── schema │ │ │ │ │ └── schema.graphql │ │ │ │ └── types.ts │ │ │ ├── lambdaLayer │ │ │ │ ├── nodejs │ │ │ │ │ ├── package-lock.json │ │ │ │ │ └── package.json │ │ │ │ └── utils │ │ │ │ │ └── gremlin_init.ts │ │ │ ├── lambda_stubs │ │ │ │ ├── addUser │ │ │ │ │ ├── index.ts │ │ │ │ │ └── package.json │ │ │ │ └── user │ │ │ │ │ ├── index.ts │ │ │ │ │ └── package.json │ │ │ └── panacloudconfig.json │ │ ├── graphqlClient │ │ │ └── index.html │ │ ├── jest.config.js │ │ ├── lib │ │ │ ├── AppsyncConstruct │ │ │ │ └── index.ts │ │ │ ├── VpcNeptuneConstruct │ │ │ │ └── index.ts │ │ │ └── my_user_api-stack.ts │ │ ├── mock_lambda │ │ │ ├── addUser │ │ │ │ └── index.ts │ │ │ └── user │ │ │ │ └── index.ts │ │ ├── mock_lambda_layer │ │ │ ├── mockData │ │ │ │ ├── addUser │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ ├── types.ts │ │ │ │ └── user │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ └── nodejs │ │ │ │ ├── package-lock.json │ │ │ │ └── package.json │ │ ├── package-lock.json │ │ ├── package.json │ │ └── tsconfig.json │ ├── readme.md │ └── user.graphql ├── tutorial07-todo-api-neptune-graph-db │ ├── my_todo_api │ │ ├── .gitignore │ │ ├── .npmignore │ │ ├── .panacloud │ │ │ └── editable_src │ │ │ │ ├── graphql │ │ │ │ └── schema │ │ │ │ │ └── schema.graphql │ │ │ │ └── panacloudconfig.json │ │ ├── .vscode │ │ │ └── settings.json │ │ ├── README.md │ │ ├── bin │ │ │ └── my_todo_api.ts │ │ ├── cdk.json │ │ ├── editable_src │ │ │ ├── aspects │ │ │ │ ├── AspectController.ts │ │ │ │ └── DefaultVisitor.ts │ │ │ ├── customMockLambdaLayer │ │ │ │ ├── mockData │ │ │ │ │ ├── createToDo │ │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ │ ├── deleteToDo │ │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ │ ├── deleteToDos │ │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ │ ├── getToDo │ │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ │ ├── getToDos │ │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ └── updateToDo │ │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ └── nodejs │ │ │ │ │ ├── package-lock.json │ │ │ │ │ └── package.json │ │ │ ├── graphql │ │ │ │ ├── schema │ │ │ │ │ └── schema.graphql │ │ │ │ └── types.ts │ │ │ ├── lambdaLayer │ │ │ │ ├── nodejs │ │ │ │ │ ├── package-lock.json │ │ │ │ │ └── package.json │ │ │ │ └── utils │ │ │ │ │ └── gremlin_init.ts │ │ │ ├── lambda_stubs │ │ │ │ ├── createToDo │ │ │ │ │ ├── index.ts │ │ │ │ │ └── package.json │ │ │ │ ├── deleteToDo │ │ │ │ │ ├── index.ts │ │ │ │ │ └── package.json │ │ │ │ ├── deleteToDos │ │ │ │ │ ├── index.ts │ │ │ │ │ └── package.json │ │ │ │ ├── getToDo │ │ │ │ │ ├── index.ts │ │ │ │ │ └── package.json │ │ │ │ ├── getToDos │ │ │ │ │ ├── index.ts │ │ │ │ │ └── package.json │ │ │ │ └── updateToDo │ │ │ │ │ ├── index.ts │ │ │ │ │ └── package.json │ │ │ └── panacloudconfig.json │ │ ├── graphqlClient │ │ │ ├── data.json │ │ │ └── index.html │ │ ├── jest.config.js │ │ ├── lib │ │ │ ├── AppsyncConstruct │ │ │ │ └── index.ts │ │ │ ├── VpcNeptuneConstruct │ │ │ │ └── index.ts │ │ │ └── my_todo_api-stack.ts │ │ ├── mock_lambda │ │ │ ├── createToDo │ │ │ │ └── index.ts │ │ │ ├── deleteToDo │ │ │ │ └── index.ts │ │ │ ├── deleteToDos │ │ │ │ └── index.ts │ │ │ ├── getToDo │ │ │ │ └── index.ts │ │ │ ├── getToDos │ │ │ │ └── index.ts │ │ │ └── updateToDo │ │ │ │ └── index.ts │ │ ├── mock_lambda_layer │ │ │ ├── mockData │ │ │ │ ├── createToDo │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ ├── deleteToDo │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ ├── deleteToDos │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ ├── getToDo │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ ├── getToDos │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ ├── types.ts │ │ │ │ └── updateToDo │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ └── nodejs │ │ │ │ ├── package-lock.json │ │ │ │ └── package.json │ │ ├── package-lock.json │ │ ├── package.json │ │ ├── tsconfig.json │ │ └── yarn.lock │ ├── readme.md │ └── todo.graphql ├── tutorial08-todo-api-aurora-relational-db │ ├── my_todo_api │ │ ├── .gitignore │ │ ├── .npmignore │ │ ├── .panacloud │ │ │ └── editable_src │ │ │ │ ├── graphql │ │ │ │ └── schema │ │ │ │ │ └── schema.graphql │ │ │ │ └── panacloudconfig.json │ │ ├── .vscode │ │ │ └── settings.json │ │ ├── README.md │ │ ├── bin │ │ │ └── my_todo_api.ts │ │ ├── cdk.json │ │ ├── editable_src │ │ │ ├── aspects │ │ │ │ ├── AspectController.ts │ │ │ │ └── DefaultVisitor.ts │ │ │ ├── customMockLambdaLayer │ │ │ │ ├── mockData │ │ │ │ │ ├── createToDo │ │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ │ ├── deleteToDo │ │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ │ ├── deleteToDos │ │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ │ ├── getToDo │ │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ │ ├── getToDos │ │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ └── updateToDo │ │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ └── nodejs │ │ │ │ │ ├── package-lock.json │ │ │ │ │ └── package.json │ │ │ ├── graphql │ │ │ │ ├── schema │ │ │ │ │ └── schema.graphql │ │ │ │ └── types.ts │ │ │ ├── lambdaLayer │ │ │ │ └── nodejs │ │ │ │ │ ├── package-lock.json │ │ │ │ │ └── package.json │ │ │ ├── lambda_stubs │ │ │ │ ├── createToDo │ │ │ │ │ ├── index.ts │ │ │ │ │ └── package.json │ │ │ │ ├── deleteToDo │ │ │ │ │ ├── index.ts │ │ │ │ │ └── package.json │ │ │ │ ├── deleteToDos │ │ │ │ │ ├── index.ts │ │ │ │ │ └── package.json │ │ │ │ ├── getToDo │ │ │ │ │ ├── index.ts │ │ │ │ │ └── package.json │ │ │ │ ├── getToDos │ │ │ │ │ ├── index.ts │ │ │ │ │ └── package.json │ │ │ │ └── updateToDo │ │ │ │ │ ├── index.ts │ │ │ │ │ └── package.json │ │ │ └── panacloudconfig.json │ │ ├── graphqlClient │ │ │ └── index.html │ │ ├── jest.config.js │ │ ├── lib │ │ │ ├── AppsyncConstruct │ │ │ │ └── index.ts │ │ │ ├── AuroraDBConstruct │ │ │ │ └── index.ts │ │ │ └── my_todo_api-stack.ts │ │ ├── mock_lambda │ │ │ ├── createToDo │ │ │ │ └── index.ts │ │ │ ├── deleteToDo │ │ │ │ └── index.ts │ │ │ ├── deleteToDos │ │ │ │ └── index.ts │ │ │ ├── getToDo │ │ │ │ └── index.ts │ │ │ ├── getToDos │ │ │ │ └── index.ts │ │ │ └── updateToDo │ │ │ │ └── index.ts │ │ ├── mock_lambda_layer │ │ │ ├── mockData │ │ │ │ ├── createToDo │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ ├── deleteToDo │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ ├── deleteToDos │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ ├── getToDo │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ ├── getToDos │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ ├── types.ts │ │ │ │ └── updateToDo │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ └── nodejs │ │ │ │ ├── package-lock.json │ │ │ │ └── package.json │ │ ├── package-lock.json │ │ ├── package.json │ │ └── tsconfig.json │ ├── readme.md │ └── todo.graphql └── tutorial09-todo-api-dynamo-db │ ├── my_todo_api │ ├── .gitignore │ ├── .npmignore │ ├── .panacloud │ │ └── editable_src │ │ │ ├── graphql │ │ │ └── schema │ │ │ │ └── schema.graphql │ │ │ └── panacloudconfig.json │ ├── .vscode │ │ └── settings.json │ ├── README.md │ ├── bin │ │ └── my_todo_api.ts │ ├── cdk.json │ ├── editable_src │ │ ├── aspects │ │ │ ├── AspectController.ts │ │ │ └── DefaultVisitor.ts │ │ ├── customMockLambdaLayer │ │ │ ├── mockData │ │ │ │ ├── createToDo │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ ├── deleteToDo │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ ├── deleteToDos │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ ├── getToDo │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ ├── getToDos │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ │ ├── types.ts │ │ │ │ └── updateToDo │ │ │ │ │ ├── testCollections.ts │ │ │ │ │ └── testCollectionsTypes.ts │ │ │ └── nodejs │ │ │ │ ├── package-lock.json │ │ │ │ └── package.json │ │ ├── graphql │ │ │ ├── schema │ │ │ │ └── schema.graphql │ │ │ └── types.ts │ │ ├── lambdaLayer │ │ │ └── nodejs │ │ │ │ ├── package-lock.json │ │ │ │ └── package.json │ │ ├── lambda_stubs │ │ │ ├── createToDo │ │ │ │ ├── index.ts │ │ │ │ └── package.json │ │ │ ├── deleteToDo │ │ │ │ ├── index.ts │ │ │ │ └── package.json │ │ │ └── getToDos │ │ │ │ ├── index.ts │ │ │ │ └── package.json │ │ └── panacloudconfig.json │ ├── graphqlClient │ │ └── index.html │ ├── jest.config.js │ ├── lib │ │ ├── AppsyncConstruct │ │ │ └── index.ts │ │ ├── DynamoDBConstruct │ │ │ └── index.ts │ │ └── my_todo_api-stack.ts │ ├── mock_lambda │ │ ├── createToDo │ │ │ └── index.ts │ │ ├── deleteToDo │ │ │ └── index.ts │ │ └── getToDos │ │ │ └── index.ts │ ├── mock_lambda_layer │ │ ├── mockData │ │ │ ├── createToDo │ │ │ │ ├── testCollections.ts │ │ │ │ └── testCollectionsTypes.ts │ │ │ ├── deleteToDo │ │ │ │ ├── testCollections.ts │ │ │ │ └── testCollectionsTypes.ts │ │ │ ├── getToDos │ │ │ │ ├── testCollections.ts │ │ │ │ └── testCollectionsTypes.ts │ │ │ └── types.ts │ │ └── nodejs │ │ │ ├── package-lock.json │ │ │ └── package.json │ ├── package-lock.json │ ├── package.json │ ├── tsconfig.json │ └── yarn.lock │ ├── readme.md │ └── todo.graphql └── yarn.lock /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panacloud/cli/794c498c0baf79fe397cc336b547336757f3d1bd/.DS_Store -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | indent_size = 2 6 | charset = utf-8 7 | trim_trailing_whitespace = true 8 | insert_final_newline = true 9 | 10 | [*.md] 11 | trim_trailing_whitespace = false 12 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | /lib 2 | -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "oclif", 4 | "oclif-typescript" 5 | ] 6 | } 7 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: "npm" 4 | directory: "/src/lib/api/template" 5 | schedule: 6 | interval: "monthly" 7 | reviewers: 8 | - "Muh-Hasan" 9 | - package-ecosystem: "npm" 10 | directory: "/src/lib/api/template/lambdaLayer" 11 | schedule: 12 | interval: "monthly" 13 | reviewers: 14 | - "Muh-Hasan" 15 | -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: Test and Release 2 | on: 3 | release: 4 | types: [created] 5 | workflow_dispatch: 6 | 7 | 8 | jobs: 9 | publish: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - uses: actions/checkout@v1 13 | - uses: actions/setup-node@v1 14 | with: 15 | node-version: 10 16 | - run: npm install 17 | # - run: npm test 18 | - uses: JS-DevTools/npm-publish@v1 19 | with: 20 | token: ${{ secrets.NPM_TOKEN }} 21 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *-debug.log 2 | *-error.log 3 | /.nyc_output 4 | /dist 5 | /lib 6 | /package-lock.json 7 | /tmp 8 | node_modules 9 | panacloud 10 | newPanacloud 11 | .env 12 | code* -------------------------------------------------------------------------------- /bin/run: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | require('@oclif/command').run() 4 | .then(require('@oclif/command/flush')) 5 | .catch(require('@oclif/errors/handle')) 6 | -------------------------------------------------------------------------------- /bin/run.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | node "%~dp0\run" %* 4 | -------------------------------------------------------------------------------- /img/cli.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panacloud/cli/794c498c0baf79fe397cc336b547336757f3d1bd/img/cli.png -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | export const dotenv = require("dotenv").config({ path: __dirname+'/.env' }) 2 | export {run} from '@oclif/command' 3 | -------------------------------------------------------------------------------- /src/lib/api/apiMockDataGenerator/helper.ts: -------------------------------------------------------------------------------- 1 | export function isArray(typeName: string) { 2 | return !!typeName.match(/[[a-zA-Z0-9]*]/g) 3 | } 4 | 5 | export function getRandomItem(array: Array) { 6 | return array[Math.floor(Math.random() * array.length)] 7 | } -------------------------------------------------------------------------------- /src/lib/api/apiMockDataGenerator/index.ts: -------------------------------------------------------------------------------- 1 | import * as fs from "fs"; 2 | import { RootMockObject, TestCollectionType } from "./MockObject"; 3 | 4 | export { 5 | RootMockObject, 6 | TestCollectionType 7 | } 8 | // export default function generate() { 9 | // const schema = fs.readFileSync("./schema.gql", { encoding: "utf8" }); 10 | 11 | // const dummyData: TestCollectionType = { fields: {} }; 12 | 13 | // const mockObject = new RootMockObject(schema); 14 | // mockObject.write(dummyData); 15 | 16 | // console.log(JSON.stringify(dummyData , null, 2)); 17 | 18 | // console.log(JSON.stringify(dummyData, null, 2)); 19 | // // console.log(dummyData); 20 | // // return dummyData.fields; 21 | // } 22 | -------------------------------------------------------------------------------- /src/lib/api/constructs/ApiManager/index.ts: -------------------------------------------------------------------------------- 1 | import { CodeMaker } from "codemaker"; 2 | import { TypeScriptWriter } from "../../../../utils/typescriptWriter"; 3 | 4 | export class apiManager { 5 | code: CodeMaker; 6 | constructor(_code: CodeMaker) { 7 | this.code = _code; 8 | } 9 | public apiManagerInitializer(apiName: string) { 10 | const ts = new TypeScriptWriter(this.code); 11 | ts.writeVariableDeclaration( 12 | { 13 | name: "apiManager", 14 | typeName: "PanacloudManager", 15 | initializer: () => { 16 | this.code.line(`new PanacloudManager(this, "${apiName}APIManager")`); 17 | }, 18 | }, 19 | "const" 20 | ); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/lib/api/functions/index.ts: -------------------------------------------------------------------------------- 1 | import defineYourOwnApi from "./DefineYourOwnApi"; 2 | import basicApi from "./BasicApi"; 3 | import todoApi from "./TodoApi"; 4 | import updateYourOwnApi from "./UpdateYourOwnApi"; 5 | 6 | export { defineYourOwnApi, updateYourOwnApi, basicApi, todoApi }; 7 | -------------------------------------------------------------------------------- /src/lib/api/generators/DynamoDB/functions/index.ts: -------------------------------------------------------------------------------- 1 | import { CodeMaker } from "codemaker"; 2 | import { DynamoDB } from "../../../constructs/Dynamodb"; 3 | 4 | export const dynamodbAccessHandler = ( 5 | apiName: string, 6 | code: CodeMaker, 7 | mutationsAndQueries: string[] 8 | ) => { 9 | const dynamoDB = new DynamoDB(code); 10 | 11 | mutationsAndQueries.forEach((key: string) => { 12 | dynamoDB.grantFullAccess(`${apiName}`, `${apiName}_table`, key); 13 | code.line(); 14 | }); 15 | }; 16 | 17 | export const dynamodbPropsHandler = ( 18 | apiName: string, 19 | code: CodeMaker, 20 | mutationsAndQueries: string[] 21 | ) => { 22 | mutationsAndQueries.forEach((key: string) => { 23 | const props = { 24 | name: `${apiName}_lambdaFn_${key}`, 25 | type: "lambda.Function", 26 | }; 27 | code.line(`${props}`); 28 | }); 29 | }; 30 | -------------------------------------------------------------------------------- /src/lib/api/generators/Neptune/functions/index.ts: -------------------------------------------------------------------------------- 1 | import { TypeScriptWriter } from "../../../../../utils/typescriptWriter"; 2 | import { CodeMaker } from "codemaker"; 3 | 4 | export const neptunePropertiesInitializer = ( 5 | apiName: string, 6 | code: CodeMaker 7 | ) => { 8 | const ts = new TypeScriptWriter(code); 9 | code.line(`this.VPCRef = ${apiName}_vpc;`); 10 | code.line(`this.SGRef = ${apiName}_sg;`); 11 | code.line( 12 | `this.neptuneReaderEndpoint = ${apiName}_neptuneCluster.attrReadEndpoint` 13 | ); 14 | }; 15 | -------------------------------------------------------------------------------- /src/lib/api/template/.npmignore: -------------------------------------------------------------------------------- 1 | *.ts 2 | !*.d.ts 3 | 4 | # CDK asset staging directory 5 | .cdk.staging 6 | cdk.out 7 | -------------------------------------------------------------------------------- /src/lib/api/template/cdk.json: -------------------------------------------------------------------------------- 1 | { 2 | "app": "npx ts-node --prefer-ts-exts bin/template.ts", 3 | "context": { 4 | "@aws-cdk/aws-apigateway:usagePlanKeyOrderInsensitiveId": true, 5 | "@aws-cdk/core:stackRelativeExports": "true", 6 | "@aws-cdk/aws-rds:lowercaseDbIdentifier": true, 7 | "@aws-cdk/aws-lambda:recognizeVersionProps": true, 8 | "@aws-cdk/aws-cloudfront:defaultSecurityPolicyTLSv1.2_2021": true 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/lib/api/template/codegen.yml: -------------------------------------------------------------------------------- 1 | schema: ./editable_src/graphql/schema/schema.graphql 2 | 3 | generates: 4 | ./editable_src/graphql/types.ts: 5 | plugins: 6 | - typescript 7 | ./mock_lambda_layer/mockData/types.ts: 8 | plugins: 9 | - typescript 10 | ./editable_src/customMockLambdaLayer/mockData/types.ts: 11 | plugins: 12 | - typescript 13 | 14 | config: 15 | declarationKind: 'interface' 16 | useImplementingTypes: true -------------------------------------------------------------------------------- /src/lib/api/template/gitignore: -------------------------------------------------------------------------------- 1 | *.js 2 | !jest.config.js 3 | *.d.ts 4 | node_modules 5 | 6 | # CDK asset staging directory 7 | .cdk.staging 8 | cdk.out 9 | tests/apiTests/appsyncCredentials.json -------------------------------------------------------------------------------- /src/lib/api/template/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | testEnvironment: 'node', 3 | roots: ['/test'], 4 | testMatch: ['**/*.test.ts'], 5 | transform: { 6 | '^.+\\.tsx?$': 'ts-jest' 7 | } 8 | }; 9 | -------------------------------------------------------------------------------- /src/lib/api/template/lambdaLayer/nodejs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lambda-layer", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "lodash.isequal": "^4.5.0" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/lib/api/template/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "esModuleInterop": true, 4 | "resolveJsonModule": true, 5 | "target": "ES2018", 6 | "module": "commonjs", 7 | "lib": ["es2018"], 8 | "declaration": true, 9 | "strict": true, 10 | "noImplicitAny": true, 11 | "strictNullChecks": true, 12 | "noImplicitThis": true, 13 | "alwaysStrict": true, 14 | "noUnusedLocals": false, 15 | "noUnusedParameters": false, 16 | "noImplicitReturns": true, 17 | "noFallthroughCasesInSwitch": false, 18 | "inlineSourceMap": true, 19 | "inlineSources": true, 20 | "experimentalDecorators": true, 21 | "strictPropertyInitialization": false, 22 | "typeRoots": ["./node_modules/@types"] 23 | }, 24 | "exclude": ["cdk.out","tests/apiTests"] 25 | } 26 | -------------------------------------------------------------------------------- /src/lib/configStore.ts: -------------------------------------------------------------------------------- 1 | const Configstore = require("configstore"); 2 | const fs = require("fs"); 3 | import axios from "axios"; 4 | const { dotenv } = require("../index"); 5 | 6 | export const isLogin = async (): Promise => { 7 | const config = new Configstore("panacloud"); 8 | try { 9 | if (fs.existsSync(config.path)) { 10 | const tokenFile = JSON.parse(fs.readFileSync(config.path)); 11 | const { data } = await axios.get(process.env.API_ENDPOINT!, { 12 | headers: { Authorization: `Bearer ${tokenFile.token}` }, 13 | }); 14 | if (data?.Message) { 15 | return false; 16 | } else { 17 | return true; 18 | } 19 | } else { 20 | return false; 21 | } 22 | } catch (error) { 23 | return false; 24 | } 25 | }; 26 | -------------------------------------------------------------------------------- /src/lib/spinner.ts: -------------------------------------------------------------------------------- 1 | import { error, success } from "log-symbols"; 2 | const ora = require("ora"); 3 | 4 | const startSpinner = (text: string) => 5 | ora({ 6 | text, 7 | }).start(); 8 | 9 | const stopSpinner = (spinner: any, text: string, err: boolean) => { 10 | if (!spinner) { 11 | return; 12 | } 13 | const symbol = err ? error : success; 14 | spinner.stopAndPersist({ 15 | text, 16 | symbol, 17 | }); 18 | }; 19 | 20 | const clearSpinner = (spinner: any) => { 21 | if (spinner) { 22 | spinner.stop(); 23 | } 24 | }; 25 | 26 | export { clearSpinner, startSpinner, stopSpinner }; 27 | -------------------------------------------------------------------------------- /src/utils/awsAppsyncDirectives.graphql: -------------------------------------------------------------------------------- 1 | directive @aws_subscribe(mutations: [String!]!) on FIELD_DEFINITION 2 | 3 | # Allows transformer libraries to deprecate directive arguments. 4 | directive @deprecated(reason: String) on FIELD_DEFINITION | INPUT_FIELD_DEFINITION | ENUM | ENUM_VALUE 5 | 6 | directive @aws_auth(cognito_groups: [String!]!) on FIELD_DEFINITION 7 | directive @aws_api_key on FIELD_DEFINITION | OBJECT 8 | directive @aws_iam on FIELD_DEFINITION | OBJECT 9 | directive @aws_lambda on FIELD_DEFINITION | OBJECT 10 | directive @aws_oidc on FIELD_DEFINITION | OBJECT 11 | directive @aws_cognito_user_pools(cognito_groups: [String!]) on FIELD_DEFINITION | OBJECT 12 | directive @microService(name: String!) on FIELD_DEFINITION 13 | directive @async on FIELD_DEFINITION 14 | -------------------------------------------------------------------------------- /src/utils/awsAppsyncScalars.graphql: -------------------------------------------------------------------------------- 1 | scalar AWSDate 2 | scalar AWSTime 3 | scalar AWSDateTime 4 | scalar AWSTimestamp 5 | scalar AWSEmail 6 | scalar AWSJSON 7 | scalar AWSURL 8 | scalar AWSPhone 9 | scalar AWSIPAddress 10 | -------------------------------------------------------------------------------- /test/mocha.opts: -------------------------------------------------------------------------------- 1 | --require ts-node/register 2 | --watch-extensions ts 3 | --recursive 4 | --reporter spec 5 | --timeout 15000 6 | -------------------------------------------------------------------------------- /test/test-schemas/blog.graphql: -------------------------------------------------------------------------------- 1 | type Query { 2 | getAllBlogs(): [BlogPost] 3 | getBlogPost(id: ID!): BlogPost 4 | } 5 | 6 | type Mutation { 7 | addBlogPost(title: String!, content: String!, authorID: ID!): BlogPost! 8 | } 9 | 10 | type BlogPost { 11 | id: ID! 12 | title: String! 13 | content: String! 14 | hasAuthor: Author! 15 | } 16 | 17 | type Author { 18 | id: ID! 19 | name: String! 20 | hasBlog: [BlogPost] 21 | } -------------------------------------------------------------------------------- /test/test-schemas/todo.graphql: -------------------------------------------------------------------------------- 1 | type ToDo { 2 | id: ID! 3 | title: String! 4 | description: String! 5 | } 6 | 7 | input ToDoInput { 8 | title: String! 9 | description: String! 10 | } 11 | type Query { 12 | getToDo(toDoId: ID!): ToDo! 13 | getToDos: [ToDo!]! 14 | } 15 | 16 | type Mutation { 17 | createToDo(toDoInput: ToDoInput): ToDo 18 | updateToDo(toDoId: ID!, toDoInput: ToDoInput): ToDo 19 | deleteToDo(toDoId: ID!): ToDo 20 | deleteToDos: [ToDo!]! 21 | } -------------------------------------------------------------------------------- /test/test-schemas/user.graphql: -------------------------------------------------------------------------------- 1 | type User { 2 | id: String! 3 | name: String 4 | } 5 | 6 | type Query { 7 | user (id: String): User 8 | } 9 | 10 | type Mutation { 11 | addUser ( 12 | # Name for the User item 13 | name: String!): User! 14 | } -------------------------------------------------------------------------------- /test/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig", 3 | "compilerOptions": { 4 | "noEmit": true 5 | }, 6 | "references": [ 7 | {"path": ".."} 8 | ] 9 | } 10 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "declaration": true, 4 | "importHelpers": true, 5 | "module": "commonjs", 6 | "outDir": "lib", 7 | "rootDir": "src", 8 | "strict": true, 9 | "lib": ["es2018"], 10 | "target": "es2018" 11 | }, 12 | "include": [ 13 | "src/**/*" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /tutorials/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panacloud/cli/794c498c0baf79fe397cc336b547336757f3d1bd/tutorials/.DS_Store -------------------------------------------------------------------------------- /tutorials/tutorial00-getting-started-graphql/my_user_api/.gitignore: -------------------------------------------------------------------------------- 1 | *.js 2 | !jest.config.js 3 | *.d.ts 4 | node_modules 5 | 6 | # CDK asset staging directory 7 | .cdk.staging 8 | cdk.out 9 | tests/apiTests/appsyncCredentials.json -------------------------------------------------------------------------------- /tutorials/tutorial00-getting-started-graphql/my_user_api/.npmignore: -------------------------------------------------------------------------------- 1 | *.ts 2 | !*.d.ts 3 | 4 | # CDK asset staging directory 5 | .cdk.staging 6 | cdk.out 7 | -------------------------------------------------------------------------------- /tutorials/tutorial00-getting-started-graphql/my_user_api/.panacloud/editable_src/graphql/schema/schema.graphql: -------------------------------------------------------------------------------- 1 | scalar AWSDate 2 | scalar AWSTime 3 | scalar AWSDateTime 4 | scalar AWSTimestamp 5 | scalar AWSEmail 6 | scalar AWSJSON 7 | scalar AWSURL 8 | scalar AWSPhone 9 | scalar AWSIPAddress 10 | 11 | type User { 12 | id: String! 13 | name: String 14 | } 15 | 16 | type Query { 17 | user (id: String): User 18 | } 19 | 20 | type Mutation { 21 | addUser ( 22 | # Name for the User item 23 | name: String!): User! 24 | 25 | 26 | } -------------------------------------------------------------------------------- /tutorials/tutorial00-getting-started-graphql/my_user_api/.panacloud/editable_src/panacloudconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "lambdas": { 3 | "user": { "is_mock": true, "memory_size": 128, "timeout": 6 }, 4 | "addUser": { "is_mock": true, "memory_size": 128, "timeout": 6 } 5 | }, 6 | "mockLambdaLayer": { "asset_path": "mock_lambda_layer" }, 7 | "stages": ["prd", "dev"] 8 | } 9 | -------------------------------------------------------------------------------- /tutorials/tutorial00-getting-started-graphql/my_user_api/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | {"files.exclude":{".panacloud":true}} -------------------------------------------------------------------------------- /tutorials/tutorial00-getting-started-graphql/my_user_api/bin/my_user_api.ts: -------------------------------------------------------------------------------- 1 | import * as cdk from "aws-cdk-lib"; 2 | import { MyUserApiStack } from "../lib/my_user_api-stack"; 3 | const app: cdk.App = new cdk.App(); 4 | const deployEnv = process.env.STAGE; 5 | const stack = new MyUserApiStack( 6 | app, 7 | deployEnv ? deployEnv + "-MyUserApiStack" : "MyUserApiStack", 8 | { prod: deployEnv } 9 | ); 10 | -------------------------------------------------------------------------------- /tutorials/tutorial00-getting-started-graphql/my_user_api/cdk.json: -------------------------------------------------------------------------------- 1 | { 2 | "app": "npx ts-node --prefer-ts-exts bin/my_user_api.ts", 3 | "context": { 4 | "@aws-cdk/aws-apigateway:usagePlanKeyOrderInsensitiveId": true, 5 | "@aws-cdk/core:stackRelativeExports": "true", 6 | "@aws-cdk/aws-rds:lowercaseDbIdentifier": true, 7 | "@aws-cdk/aws-lambda:recognizeVersionProps": true, 8 | "@aws-cdk/aws-cloudfront:defaultSecurityPolicyTLSv1.2_2021": true 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /tutorials/tutorial00-getting-started-graphql/my_user_api/editable_src/aspects/AspectController.ts: -------------------------------------------------------------------------------- 1 | import { Aspects } from "aws-cdk-lib"; 2 | import { Stack } from "aws-cdk-lib"; 3 | import { DefaultVisitor } from "./DefaultVisitor"; 4 | export class AspectController { 5 | constructor(scope: Stack, prod?: string) { 6 | Aspects.of(scope).add(new DefaultVisitor()); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /tutorials/tutorial00-getting-started-graphql/my_user_api/editable_src/aspects/DefaultVisitor.ts: -------------------------------------------------------------------------------- 1 | import { IConstruct } from "constructs/lib/construct"; 2 | import { IAspect } from "aws-cdk-lib"; 3 | import { aws_lambda as lambda, Duration } from "aws-cdk-lib"; 4 | export class DefaultVisitor implements IAspect { 5 | constructor() {} 6 | public visit(node: IConstruct): void { 7 | if (node instanceof lambda.Function) { 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /tutorials/tutorial00-getting-started-graphql/my_user_api/editable_src/customMockLambdaLayer/mockData/addUser/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | addUser: [ 6 | { 7 | arguments: { 8 | name: "Cloe", 9 | }, 10 | response: { 11 | id: "Gabriellia", 12 | name: "Ronny", 13 | }, 14 | }, 15 | ], 16 | }, 17 | }; 18 | -------------------------------------------------------------------------------- /tutorials/tutorial00-getting-started-graphql/my_user_api/editable_src/customMockLambdaLayer/mockData/addUser/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { User, MutationAddUserArgs, QueryUserArgs } from "../types"; 2 | 3 | export type TestCollection = { 4 | fields: { addUser: { arguments: MutationAddUserArgs; response: User }[] }; 5 | }; 6 | -------------------------------------------------------------------------------- /tutorials/tutorial00-getting-started-graphql/my_user_api/editable_src/customMockLambdaLayer/mockData/user/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | user: [ 6 | { 7 | arguments: { 8 | id: "Clare", 9 | }, 10 | response: { 11 | id: "Shannah", 12 | name: "Laurice", 13 | }, 14 | }, 15 | ], 16 | }, 17 | }; 18 | -------------------------------------------------------------------------------- /tutorials/tutorial00-getting-started-graphql/my_user_api/editable_src/customMockLambdaLayer/mockData/user/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { User, MutationAddUserArgs, QueryUserArgs } from "../types"; 2 | 3 | export type TestCollection = { 4 | fields: { user: { arguments: QueryUserArgs; response: User }[] }; 5 | }; 6 | -------------------------------------------------------------------------------- /tutorials/tutorial00-getting-started-graphql/my_user_api/editable_src/customMockLambdaLayer/nodejs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lambda-layer", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "axios": "^0.21.1", 13 | "lodash.isequal": "^4.5.0" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /tutorials/tutorial00-getting-started-graphql/my_user_api/editable_src/graphql/schema/schema.graphql: -------------------------------------------------------------------------------- 1 | scalar AWSDate 2 | scalar AWSTime 3 | scalar AWSDateTime 4 | scalar AWSTimestamp 5 | scalar AWSEmail 6 | scalar AWSJSON 7 | scalar AWSURL 8 | scalar AWSPhone 9 | scalar AWSIPAddress 10 | 11 | type User { 12 | id: String! 13 | name: String 14 | } 15 | 16 | type Query { 17 | user (id: String): User 18 | } 19 | 20 | type Mutation { 21 | addUser ( 22 | # Name for the User item 23 | name: String!): User! 24 | 25 | 26 | } -------------------------------------------------------------------------------- /tutorials/tutorial00-getting-started-graphql/my_user_api/editable_src/lambdaLayer/nodejs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lambda-layer", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "axios": "^0.21.1", 13 | "gremlin": "^3.5.2", 14 | "lodash.isequal": "^4.5.0" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /tutorials/tutorial00-getting-started-graphql/my_user_api/editable_src/lambda_stubs/addUser/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "adduser", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC" 12 | } 13 | -------------------------------------------------------------------------------- /tutorials/tutorial00-getting-started-graphql/my_user_api/editable_src/lambda_stubs/user/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "user", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC" 12 | } 13 | -------------------------------------------------------------------------------- /tutorials/tutorial00-getting-started-graphql/my_user_api/editable_src/panacloudconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "lambdas": { 3 | "user": { "is_mock": true, "memory_size": 128, "timeout": 6 }, 4 | "addUser": { "is_mock": true, "memory_size": 128, "timeout": 6 } 5 | }, 6 | "mockData": { "is_custom": false }, 7 | "stages": ["prd", "dev"] 8 | } 9 | -------------------------------------------------------------------------------- /tutorials/tutorial00-getting-started-graphql/my_user_api/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | testEnvironment: "node", 3 | roots: ["/test"], 4 | testMatch: ["**/*.test.ts"], 5 | transform: { 6 | "^.+\\.tsx?$": "ts-jest", 7 | }, 8 | }; 9 | -------------------------------------------------------------------------------- /tutorials/tutorial00-getting-started-graphql/my_user_api/mock_lambda/addUser/index.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "../../mock_lambda_layer/mockData/addUser/testCollectionsTypes"; 2 | var data = require("/opt/mockData/addUser/testCollections") as { 3 | testCollections: TestCollection; 4 | }; 5 | 6 | import * as AWS from "aws-sdk"; 7 | import { AppSyncResolverEvent } from "aws-lambda"; 8 | var isEqual = require("lodash.isequal"); 9 | 10 | exports.handler = async (event: AppSyncResolverEvent) => { 11 | let response = {}; 12 | data.testCollections.fields.addUser.forEach((v: any) => { 13 | if (v.arguments) { 14 | let equal = isEqual(v.arguments, event.arguments); 15 | if (equal) { 16 | response = v.response; 17 | } 18 | } else { 19 | response = v.response; 20 | } 21 | }); 22 | 23 | return response; 24 | }; 25 | -------------------------------------------------------------------------------- /tutorials/tutorial00-getting-started-graphql/my_user_api/mock_lambda/user/index.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "../../mock_lambda_layer/mockData/user/testCollectionsTypes"; 2 | var data = require("/opt/mockData/user/testCollections") as { 3 | testCollections: TestCollection; 4 | }; 5 | 6 | import * as AWS from "aws-sdk"; 7 | import { AppSyncResolverEvent } from "aws-lambda"; 8 | var isEqual = require("lodash.isequal"); 9 | 10 | exports.handler = async (event: AppSyncResolverEvent) => { 11 | let response = {}; 12 | data.testCollections.fields.user.forEach((v: any) => { 13 | if (v.arguments) { 14 | let equal = isEqual(v.arguments, event.arguments); 15 | if (equal) { 16 | response = v.response; 17 | } 18 | } else { 19 | response = v.response; 20 | } 21 | }); 22 | 23 | return response; 24 | }; 25 | -------------------------------------------------------------------------------- /tutorials/tutorial00-getting-started-graphql/my_user_api/mock_lambda_layer/mockData/addUser/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | addUser: [ 6 | { 7 | arguments: { 8 | name: "Cloe", 9 | }, 10 | response: { 11 | id: "Gabriellia", 12 | name: "Ronny", 13 | }, 14 | }, 15 | ], 16 | }, 17 | }; 18 | -------------------------------------------------------------------------------- /tutorials/tutorial00-getting-started-graphql/my_user_api/mock_lambda_layer/mockData/addUser/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { User, MutationAddUserArgs, QueryUserArgs } from "../types"; 2 | 3 | export type TestCollection = { 4 | fields: { addUser: { arguments: MutationAddUserArgs; response: User }[] }; 5 | }; 6 | -------------------------------------------------------------------------------- /tutorials/tutorial00-getting-started-graphql/my_user_api/mock_lambda_layer/mockData/user/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | user: [ 6 | { 7 | arguments: { 8 | id: "Clare", 9 | }, 10 | response: { 11 | id: "Shannah", 12 | name: "Laurice", 13 | }, 14 | }, 15 | ], 16 | }, 17 | }; 18 | -------------------------------------------------------------------------------- /tutorials/tutorial00-getting-started-graphql/my_user_api/mock_lambda_layer/mockData/user/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { User, MutationAddUserArgs, QueryUserArgs } from "../types"; 2 | 3 | export type TestCollection = { 4 | fields: { user: { arguments: QueryUserArgs; response: User }[] }; 5 | }; 6 | -------------------------------------------------------------------------------- /tutorials/tutorial00-getting-started-graphql/my_user_api/mock_lambda_layer/nodejs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lambda-layer", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "axios": "^0.21.1", 13 | "lodash.isequal": "^4.5.0" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /tutorials/tutorial00-getting-started-graphql/my_user_api/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "esModuleInterop": true, 4 | "resolveJsonModule": true, 5 | "target": "ES2018", 6 | "module": "commonjs", 7 | "lib": ["es2018"], 8 | "declaration": true, 9 | "strict": true, 10 | "noImplicitAny": true, 11 | "strictNullChecks": true, 12 | "noImplicitThis": true, 13 | "alwaysStrict": true, 14 | "noUnusedLocals": false, 15 | "noUnusedParameters": false, 16 | "noImplicitReturns": true, 17 | "noFallthroughCasesInSwitch": false, 18 | "inlineSourceMap": true, 19 | "inlineSources": true, 20 | "experimentalDecorators": true, 21 | "strictPropertyInitialization": false, 22 | "typeRoots": ["./node_modules/@types"] 23 | }, 24 | "exclude": ["cdk.out", "tests/apiTests"] 25 | } 26 | -------------------------------------------------------------------------------- /tutorials/tutorial00-getting-started-graphql/user.graphql: -------------------------------------------------------------------------------- 1 | type User { 2 | id: String! 3 | name: String 4 | } 5 | 6 | type Query { 7 | user (id: String): User 8 | } 9 | 10 | type Mutation { 11 | addUser ( 12 | # Name for the User item 13 | name: String!): User! 14 | 15 | 16 | } -------------------------------------------------------------------------------- /tutorials/tutorial01-mock-api-with-custom-data/my_user_api/.gitignore: -------------------------------------------------------------------------------- 1 | *.js 2 | !jest.config.js 3 | *.d.ts 4 | node_modules 5 | 6 | # CDK asset staging directory 7 | .cdk.staging 8 | cdk.out 9 | tests/apiTests/appsyncCredentials.json -------------------------------------------------------------------------------- /tutorials/tutorial01-mock-api-with-custom-data/my_user_api/.npmignore: -------------------------------------------------------------------------------- 1 | *.ts 2 | !*.d.ts 3 | 4 | # CDK asset staging directory 5 | .cdk.staging 6 | cdk.out 7 | -------------------------------------------------------------------------------- /tutorials/tutorial01-mock-api-with-custom-data/my_user_api/.panacloud/editable_src/graphql/schema/schema.graphql: -------------------------------------------------------------------------------- 1 | scalar AWSDate 2 | scalar AWSTime 3 | scalar AWSDateTime 4 | scalar AWSTimestamp 5 | scalar AWSEmail 6 | scalar AWSJSON 7 | scalar AWSURL 8 | scalar AWSPhone 9 | scalar AWSIPAddress 10 | 11 | type User { 12 | id: String! 13 | name: String 14 | } 15 | 16 | type Query { 17 | user (id: String): User 18 | } 19 | 20 | type Mutation { 21 | addUser ( 22 | # Name for the User item 23 | name: String!): User! 24 | } -------------------------------------------------------------------------------- /tutorials/tutorial01-mock-api-with-custom-data/my_user_api/.panacloud/editable_src/panacloudconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "lambdas": { 3 | "user": { "is_mock": true, "memory_size": 128, "timeout": 6 }, 4 | "addUser": { "is_mock": true, "memory_size": 128, "timeout": 6 } 5 | }, 6 | "mockLambdaLayer": { "asset_path": "editable_src/customMockLambda" }, 7 | "stages": ["prd", "dev"] 8 | } 9 | -------------------------------------------------------------------------------- /tutorials/tutorial01-mock-api-with-custom-data/my_user_api/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | {"files.exclude":{".panacloud":true}} -------------------------------------------------------------------------------- /tutorials/tutorial01-mock-api-with-custom-data/my_user_api/bin/my_user_api.ts: -------------------------------------------------------------------------------- 1 | import * as cdk from "aws-cdk-lib"; 2 | import { MyUserApiStack } from "../lib/my_user_api-stack"; 3 | const app: cdk.App = new cdk.App(); 4 | const deployEnv = process.env.STAGE; 5 | const stack = new MyUserApiStack( 6 | app, 7 | deployEnv ? deployEnv + "-MyUserApiStack" : "MyUserApiStack", 8 | { prod: deployEnv } 9 | ); 10 | -------------------------------------------------------------------------------- /tutorials/tutorial01-mock-api-with-custom-data/my_user_api/cdk.json: -------------------------------------------------------------------------------- 1 | { 2 | "app": "npx ts-node --prefer-ts-exts bin/my_user_api.ts", 3 | "context": { 4 | "@aws-cdk/aws-apigateway:usagePlanKeyOrderInsensitiveId": true, 5 | "@aws-cdk/core:stackRelativeExports": "true", 6 | "@aws-cdk/aws-rds:lowercaseDbIdentifier": true, 7 | "@aws-cdk/aws-lambda:recognizeVersionProps": true, 8 | "@aws-cdk/aws-cloudfront:defaultSecurityPolicyTLSv1.2_2021": true 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /tutorials/tutorial01-mock-api-with-custom-data/my_user_api/editable_src/aspects/AspectController.ts: -------------------------------------------------------------------------------- 1 | import { Aspects } from "aws-cdk-lib"; 2 | import { Stack } from "aws-cdk-lib"; 3 | import { DefaultVisitor } from "./DefaultVisitor"; 4 | export class AspectController { 5 | constructor(scope: Stack, prod?: string) { 6 | Aspects.of(scope).add(new DefaultVisitor()); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /tutorials/tutorial01-mock-api-with-custom-data/my_user_api/editable_src/aspects/DefaultVisitor.ts: -------------------------------------------------------------------------------- 1 | import { IConstruct } from "constructs/lib/construct"; 2 | import { IAspect } from "aws-cdk-lib"; 3 | import { aws_lambda as lambda, Duration } from "aws-cdk-lib"; 4 | export class DefaultVisitor implements IAspect { 5 | constructor() {} 6 | public visit(node: IConstruct): void { 7 | if (node instanceof lambda.Function) { 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /tutorials/tutorial01-mock-api-with-custom-data/my_user_api/editable_src/customMockLambdaLayer/mockData/addUser/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | addUser: [ 6 | { 7 | arguments: { 8 | name: "Pegeen", 9 | }, 10 | response: { 11 | id: "Joanie", 12 | name: "Meredith", 13 | }, 14 | }, 15 | ], 16 | }, 17 | }; 18 | -------------------------------------------------------------------------------- /tutorials/tutorial01-mock-api-with-custom-data/my_user_api/editable_src/customMockLambdaLayer/mockData/addUser/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { User, MutationAddUserArgs, QueryUserArgs } from "../types"; 2 | 3 | export type TestCollection = { 4 | fields: { addUser: { arguments: MutationAddUserArgs; response: User }[] }; 5 | }; 6 | -------------------------------------------------------------------------------- /tutorials/tutorial01-mock-api-with-custom-data/my_user_api/editable_src/customMockLambdaLayer/mockData/user/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | user: [ 6 | { 7 | arguments: { 8 | id: "Dahlia", 9 | }, 10 | response: { 11 | id: "Desiri", 12 | name: "Verene", 13 | }, 14 | }, 15 | ], 16 | }, 17 | }; 18 | -------------------------------------------------------------------------------- /tutorials/tutorial01-mock-api-with-custom-data/my_user_api/editable_src/customMockLambdaLayer/mockData/user/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { User, MutationAddUserArgs, QueryUserArgs } from "../types"; 2 | 3 | export type TestCollection = { 4 | fields: { user: { arguments: QueryUserArgs; response: User }[] }; 5 | }; 6 | -------------------------------------------------------------------------------- /tutorials/tutorial01-mock-api-with-custom-data/my_user_api/editable_src/customMockLambdaLayer/nodejs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lambda-layer", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "axios": "^0.21.1", 13 | "lodash.isequal": "^4.5.0" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /tutorials/tutorial01-mock-api-with-custom-data/my_user_api/editable_src/graphql/schema/schema.graphql: -------------------------------------------------------------------------------- 1 | scalar AWSDate 2 | scalar AWSTime 3 | scalar AWSDateTime 4 | scalar AWSTimestamp 5 | scalar AWSEmail 6 | scalar AWSJSON 7 | scalar AWSURL 8 | scalar AWSPhone 9 | scalar AWSIPAddress 10 | 11 | type User { 12 | id: String! 13 | name: String 14 | } 15 | 16 | type Query { 17 | user (id: String): User 18 | } 19 | 20 | type Mutation { 21 | addUser ( 22 | # Name for the User item 23 | name: String!): User! 24 | } -------------------------------------------------------------------------------- /tutorials/tutorial01-mock-api-with-custom-data/my_user_api/editable_src/lambdaLayer/nodejs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lambda-layer", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "axios": "^0.21.1", 13 | "gremlin": "^3.5.2", 14 | "lodash.isequal": "^4.5.0" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /tutorials/tutorial01-mock-api-with-custom-data/my_user_api/editable_src/lambda_stubs/addUser/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "adduser", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC" 12 | } 13 | -------------------------------------------------------------------------------- /tutorials/tutorial01-mock-api-with-custom-data/my_user_api/editable_src/lambda_stubs/user/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "user", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC" 12 | } 13 | -------------------------------------------------------------------------------- /tutorials/tutorial01-mock-api-with-custom-data/my_user_api/editable_src/panacloudconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "lambdas": { 3 | "user": { "is_mock": true, "memory_size": 128, "timeout": 6 }, 4 | "addUser": { "is_mock": true, "memory_size": 128, "timeout": 6 } 5 | }, 6 | "mockLambdaLayer": { "asset_path": "editable_src/customMockLambda" }, 7 | "stages": ["prd", "dev"] 8 | } 9 | -------------------------------------------------------------------------------- /tutorials/tutorial01-mock-api-with-custom-data/my_user_api/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | testEnvironment: "node", 3 | roots: ["/test"], 4 | testMatch: ["**/*.test.ts"], 5 | transform: { 6 | "^.+\\.tsx?$": "ts-jest", 7 | }, 8 | }; 9 | -------------------------------------------------------------------------------- /tutorials/tutorial01-mock-api-with-custom-data/my_user_api/mock_lambda/addUser/index.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "../../mock_lambda_layer/mockData/addUser/testCollectionsTypes"; 2 | var data = require("/opt/mockData/addUser/testCollections") as { 3 | testCollections: TestCollection; 4 | }; 5 | 6 | import * as AWS from "aws-sdk"; 7 | import { AppSyncResolverEvent } from "aws-lambda"; 8 | var isEqual = require("lodash.isequal"); 9 | 10 | exports.handler = async (event: AppSyncResolverEvent) => { 11 | let response = {}; 12 | data.testCollections.fields.addUser.forEach((v: any) => { 13 | if (v.arguments) { 14 | let equal = isEqual(v.arguments, event.arguments); 15 | if (equal) { 16 | response = v.response; 17 | } 18 | } else { 19 | response = v.response; 20 | } 21 | }); 22 | 23 | return response; 24 | }; 25 | -------------------------------------------------------------------------------- /tutorials/tutorial01-mock-api-with-custom-data/my_user_api/mock_lambda/user/index.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "../../mock_lambda_layer/mockData/user/testCollectionsTypes"; 2 | var data = require("/opt/mockData/user/testCollections") as { 3 | testCollections: TestCollection; 4 | }; 5 | 6 | import * as AWS from "aws-sdk"; 7 | import { AppSyncResolverEvent } from "aws-lambda"; 8 | var isEqual = require("lodash.isequal"); 9 | 10 | exports.handler = async (event: AppSyncResolverEvent) => { 11 | let response = {}; 12 | data.testCollections.fields.user.forEach((v: any) => { 13 | if (v.arguments) { 14 | let equal = isEqual(v.arguments, event.arguments); 15 | if (equal) { 16 | response = v.response; 17 | } 18 | } else { 19 | response = v.response; 20 | } 21 | }); 22 | 23 | return response; 24 | }; 25 | -------------------------------------------------------------------------------- /tutorials/tutorial01-mock-api-with-custom-data/my_user_api/mock_lambda_layer/mockData/addUser/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | addUser: [ 6 | { 7 | arguments: { 8 | name: "Licha", 9 | }, 10 | response: { 11 | id: "Maurise", 12 | name: "Cherye", 13 | }, 14 | }, 15 | ], 16 | }, 17 | }; 18 | -------------------------------------------------------------------------------- /tutorials/tutorial01-mock-api-with-custom-data/my_user_api/mock_lambda_layer/mockData/addUser/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { User, MutationAddUserArgs, QueryUserArgs } from "../types"; 2 | 3 | export type TestCollection = { 4 | fields: { addUser: { arguments: MutationAddUserArgs; response: User }[] }; 5 | }; 6 | -------------------------------------------------------------------------------- /tutorials/tutorial01-mock-api-with-custom-data/my_user_api/mock_lambda_layer/mockData/user/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | user: [ 6 | { 7 | arguments: { 8 | id: "Maure", 9 | }, 10 | response: { 11 | id: "Helga", 12 | name: "Helen-Elizabeth", 13 | }, 14 | }, 15 | ], 16 | }, 17 | }; 18 | -------------------------------------------------------------------------------- /tutorials/tutorial01-mock-api-with-custom-data/my_user_api/mock_lambda_layer/mockData/user/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { User, MutationAddUserArgs, QueryUserArgs } from "../types"; 2 | 3 | export type TestCollection = { 4 | fields: { user: { arguments: QueryUserArgs; response: User }[] }; 5 | }; 6 | -------------------------------------------------------------------------------- /tutorials/tutorial01-mock-api-with-custom-data/my_user_api/mock_lambda_layer/nodejs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lambda-layer", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "axios": "^0.21.1", 13 | "lodash.isequal": "^4.5.0" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /tutorials/tutorial01-mock-api-with-custom-data/my_user_api/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "esModuleInterop": true, 4 | "resolveJsonModule": true, 5 | "target": "ES2018", 6 | "module": "commonjs", 7 | "lib": ["es2018"], 8 | "declaration": true, 9 | "strict": true, 10 | "noImplicitAny": true, 11 | "strictNullChecks": true, 12 | "noImplicitThis": true, 13 | "alwaysStrict": true, 14 | "noUnusedLocals": false, 15 | "noUnusedParameters": false, 16 | "noImplicitReturns": true, 17 | "noFallthroughCasesInSwitch": false, 18 | "inlineSourceMap": true, 19 | "inlineSources": true, 20 | "experimentalDecorators": true, 21 | "strictPropertyInitialization": false, 22 | "typeRoots": ["./node_modules/@types"] 23 | }, 24 | "exclude": ["cdk.out", "tests/apiTests"] 25 | } 26 | -------------------------------------------------------------------------------- /tutorials/tutorial01-mock-api-with-custom-data/result.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/panacloud/cli/794c498c0baf79fe397cc336b547336757f3d1bd/tutorials/tutorial01-mock-api-with-custom-data/result.gif -------------------------------------------------------------------------------- /tutorials/tutorial01-mock-api-with-custom-data/user.graphql: -------------------------------------------------------------------------------- 1 | type User { 2 | id: String! 3 | name: String 4 | } 5 | 6 | type Query { 7 | user (id: String): User 8 | } 9 | 10 | type Mutation { 11 | addUser ( 12 | # Name for the User item 13 | name: String!): User! 14 | } -------------------------------------------------------------------------------- /tutorials/tutorial02-graphql-microservices/my_user_api/.gitignore: -------------------------------------------------------------------------------- 1 | *.js 2 | !jest.config.js 3 | *.d.ts 4 | node_modules 5 | 6 | # CDK asset staging directory 7 | .cdk.staging 8 | cdk.out 9 | tests/apiTests/appsyncCredentials.json -------------------------------------------------------------------------------- /tutorials/tutorial02-graphql-microservices/my_user_api/.npmignore: -------------------------------------------------------------------------------- 1 | *.ts 2 | !*.d.ts 3 | 4 | # CDK asset staging directory 5 | .cdk.staging 6 | cdk.out 7 | -------------------------------------------------------------------------------- /tutorials/tutorial02-graphql-microservices/my_user_api/.panacloud/editable_src/graphql/schema/schema.graphql: -------------------------------------------------------------------------------- 1 | scalar AWSDate 2 | scalar AWSTime 3 | scalar AWSDateTime 4 | scalar AWSTimestamp 5 | scalar AWSEmail 6 | scalar AWSJSON 7 | scalar AWSURL 8 | scalar AWSPhone 9 | scalar AWSIPAddress 10 | 11 | type Todo { 12 | id: ID! 13 | title: String! 14 | done: Boolean! 15 | } 16 | 17 | input TodoInput { 18 | id: ID! 19 | title: String! 20 | done: Boolean! 21 | } 22 | 23 | type Query { 24 | getTodos: [Todo] @microService(name:"todo") 25 | } 26 | 27 | type Mutation { 28 | addTodo(todo: TodoInput!): Todo @microService(name:"todo") 29 | updateTodo(todo: TodoInput!): Todo @microService(name:"todo") 30 | deleteTodo(todoId: String!): String @microService(name:"todo") 31 | } -------------------------------------------------------------------------------- /tutorials/tutorial02-graphql-microservices/my_user_api/.panacloud/editable_src/panacloudconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "lambdas": { 3 | "todo": { 4 | "getTodos": { "is_mock": true, "memory_size": 128, "timeout": 6 }, 5 | "addTodo": { "is_mock": true, "memory_size": 128, "timeout": 6 }, 6 | "updateTodo": { "is_mock": true, "memory_size": 128, "timeout": 6 }, 7 | "deleteTodo": { "is_mock": true, "memory_size": 128, "timeout": 6 } 8 | } 9 | }, 10 | "mockLambdaLayer": { "asset_path": "mock_lambda_layer" }, 11 | "stages": ["prd", "dev"] 12 | } 13 | -------------------------------------------------------------------------------- /tutorials/tutorial02-graphql-microservices/my_user_api/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | {"files.exclude":{".panacloud":true}} -------------------------------------------------------------------------------- /tutorials/tutorial02-graphql-microservices/my_user_api/bin/my_user_api.ts: -------------------------------------------------------------------------------- 1 | import * as cdk from "aws-cdk-lib"; 2 | import { MyUserApiStack } from "../lib/my_user_api-stack"; 3 | const app: cdk.App = new cdk.App(); 4 | const deployEnv = process.env.STAGE; 5 | const stack = new MyUserApiStack( 6 | app, 7 | deployEnv ? deployEnv + "-MyUserApiStack" : "MyUserApiStack", 8 | { prod: deployEnv } 9 | ); 10 | -------------------------------------------------------------------------------- /tutorials/tutorial02-graphql-microservices/my_user_api/cdk.json: -------------------------------------------------------------------------------- 1 | { 2 | "app": "npx ts-node --prefer-ts-exts bin/my_user_api.ts", 3 | "context": { 4 | "@aws-cdk/aws-apigateway:usagePlanKeyOrderInsensitiveId": true, 5 | "@aws-cdk/core:stackRelativeExports": "true", 6 | "@aws-cdk/aws-rds:lowercaseDbIdentifier": true, 7 | "@aws-cdk/aws-lambda:recognizeVersionProps": true, 8 | "@aws-cdk/aws-cloudfront:defaultSecurityPolicyTLSv1.2_2021": true 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /tutorials/tutorial02-graphql-microservices/my_user_api/editable_src/aspects/AspectController.ts: -------------------------------------------------------------------------------- 1 | import { Aspects } from "aws-cdk-lib"; 2 | import { Stack } from "aws-cdk-lib"; 3 | import { DefaultVisitor } from "./DefaultVisitor"; 4 | export class AspectController { 5 | constructor(scope: Stack, prod?: string) { 6 | Aspects.of(scope).add(new DefaultVisitor()); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /tutorials/tutorial02-graphql-microservices/my_user_api/editable_src/aspects/DefaultVisitor.ts: -------------------------------------------------------------------------------- 1 | import { IConstruct } from "constructs/lib/construct"; 2 | import { IAspect } from "aws-cdk-lib"; 3 | import { aws_lambda as lambda, Duration } from "aws-cdk-lib"; 4 | export class DefaultVisitor implements IAspect { 5 | constructor() {} 6 | public visit(node: IConstruct): void { 7 | if (node instanceof lambda.Function) { 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /tutorials/tutorial02-graphql-microservices/my_user_api/editable_src/customMockLambdaLayer/mockData/addTodo/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | addTodo: [ 6 | { 7 | arguments: { 8 | todo: { 9 | id: "01", 10 | title: "Marcela", 11 | done: true, 12 | }, 13 | }, 14 | response: { 15 | id: "01", 16 | title: "Karita", 17 | done: true, 18 | }, 19 | }, 20 | ], 21 | }, 22 | }; 23 | -------------------------------------------------------------------------------- /tutorials/tutorial02-graphql-microservices/my_user_api/editable_src/customMockLambdaLayer/mockData/addTodo/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { 2 | Todo, 3 | MutationAddTodoArgs, 4 | MutationUpdateTodoArgs, 5 | MutationDeleteTodoArgs, 6 | } from "../types"; 7 | 8 | export type TestCollection = { 9 | fields: { addTodo: { arguments: MutationAddTodoArgs; response: Todo }[] }; 10 | }; 11 | -------------------------------------------------------------------------------- /tutorials/tutorial02-graphql-microservices/my_user_api/editable_src/customMockLambdaLayer/mockData/deleteTodo/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | deleteTodo: [ 6 | { 7 | arguments: { 8 | todoId: "Ketti", 9 | }, 10 | response: "Codie", 11 | }, 12 | ], 13 | }, 14 | }; 15 | -------------------------------------------------------------------------------- /tutorials/tutorial02-graphql-microservices/my_user_api/editable_src/customMockLambdaLayer/mockData/deleteTodo/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { 2 | Todo, 3 | MutationAddTodoArgs, 4 | MutationUpdateTodoArgs, 5 | MutationDeleteTodoArgs, 6 | } from "../types"; 7 | 8 | export type TestCollection = { 9 | fields: { 10 | deleteTodo: { arguments: MutationDeleteTodoArgs; response: String }[]; 11 | }; 12 | }; 13 | -------------------------------------------------------------------------------- /tutorials/tutorial02-graphql-microservices/my_user_api/editable_src/customMockLambdaLayer/mockData/getTodos/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | getTodos: [ 6 | { 7 | arguments: {}, 8 | response: [ 9 | { 10 | id: "01", 11 | title: "Ashien", 12 | done: true, 13 | }, 14 | { 15 | id: "01", 16 | title: "Minda", 17 | done: true, 18 | }, 19 | { 20 | id: "01", 21 | title: "Amara", 22 | done: true, 23 | }, 24 | ], 25 | }, 26 | ], 27 | }, 28 | }; 29 | -------------------------------------------------------------------------------- /tutorials/tutorial02-graphql-microservices/my_user_api/editable_src/customMockLambdaLayer/mockData/getTodos/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { 2 | Todo, 3 | MutationAddTodoArgs, 4 | MutationUpdateTodoArgs, 5 | MutationDeleteTodoArgs, 6 | } from "../types"; 7 | 8 | export type TestCollection = { 9 | fields: { getTodos: { arguments: {}; response: Todo[] }[] }; 10 | }; 11 | -------------------------------------------------------------------------------- /tutorials/tutorial02-graphql-microservices/my_user_api/editable_src/customMockLambdaLayer/mockData/updateTodo/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | updateTodo: [ 6 | { 7 | arguments: { 8 | todo: { 9 | id: "01", 10 | title: "Melany", 11 | done: true, 12 | }, 13 | }, 14 | response: { 15 | id: "01", 16 | title: "Florentia", 17 | done: true, 18 | }, 19 | }, 20 | ], 21 | }, 22 | }; 23 | -------------------------------------------------------------------------------- /tutorials/tutorial02-graphql-microservices/my_user_api/editable_src/customMockLambdaLayer/mockData/updateTodo/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { 2 | Todo, 3 | MutationAddTodoArgs, 4 | MutationUpdateTodoArgs, 5 | MutationDeleteTodoArgs, 6 | } from "../types"; 7 | 8 | export type TestCollection = { 9 | fields: { 10 | updateTodo: { arguments: MutationUpdateTodoArgs; response: Todo }[]; 11 | }; 12 | }; 13 | -------------------------------------------------------------------------------- /tutorials/tutorial02-graphql-microservices/my_user_api/editable_src/customMockLambdaLayer/nodejs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lambda-layer", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "axios": "^0.21.1", 13 | "lodash.isequal": "^4.5.0" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /tutorials/tutorial02-graphql-microservices/my_user_api/editable_src/graphql/schema/schema.graphql: -------------------------------------------------------------------------------- 1 | scalar AWSDate 2 | scalar AWSTime 3 | scalar AWSDateTime 4 | scalar AWSTimestamp 5 | scalar AWSEmail 6 | scalar AWSJSON 7 | scalar AWSURL 8 | scalar AWSPhone 9 | scalar AWSIPAddress 10 | 11 | type Todo { 12 | id: ID! 13 | title: String! 14 | done: Boolean! 15 | } 16 | 17 | input TodoInput { 18 | id: ID! 19 | title: String! 20 | done: Boolean! 21 | } 22 | 23 | type Query { 24 | getTodos: [Todo] @microService(name:"todo") 25 | } 26 | 27 | type Mutation { 28 | addTodo(todo: TodoInput!): Todo @microService(name:"todo") 29 | updateTodo(todo: TodoInput!): Todo @microService(name:"todo") 30 | deleteTodo(todoId: String!): String @microService(name:"todo") 31 | } -------------------------------------------------------------------------------- /tutorials/tutorial02-graphql-microservices/my_user_api/editable_src/lambdaLayer/nodejs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lambda-layer", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "axios": "^0.21.1", 13 | "gremlin": "^3.5.2", 14 | "lodash.isequal": "^4.5.0" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /tutorials/tutorial02-graphql-microservices/my_user_api/editable_src/lambda_stubs/todo/addTodo/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "addtodo", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC" 12 | } 13 | -------------------------------------------------------------------------------- /tutorials/tutorial02-graphql-microservices/my_user_api/editable_src/lambda_stubs/todo/deleteTodo/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "deletetodo", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC" 12 | } 13 | -------------------------------------------------------------------------------- /tutorials/tutorial02-graphql-microservices/my_user_api/editable_src/lambda_stubs/todo/getTodos/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gettodos", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC" 12 | } 13 | -------------------------------------------------------------------------------- /tutorials/tutorial02-graphql-microservices/my_user_api/editable_src/lambda_stubs/todo/updateTodo/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "updatetodo", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC" 12 | } 13 | -------------------------------------------------------------------------------- /tutorials/tutorial02-graphql-microservices/my_user_api/editable_src/panacloudconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "lambdas": { 3 | "todo": { 4 | "getTodos": { "is_mock": true, "memory_size": 128, "timeout": 6 }, 5 | "addTodo": { "is_mock": true, "memory_size": 128, "timeout": 6 }, 6 | "updateTodo": { "is_mock": true, "memory_size": 128, "timeout": 6 }, 7 | "deleteTodo": { "is_mock": true, "memory_size": 128, "timeout": 6 } 8 | } 9 | }, 10 | "mockLambdaLayer": { "asset_path": "mock_lambda_layer" }, 11 | "stages": ["prd", "dev"] 12 | } 13 | -------------------------------------------------------------------------------- /tutorials/tutorial02-graphql-microservices/my_user_api/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | testEnvironment: "node", 3 | roots: ["/test"], 4 | testMatch: ["**/*.test.ts"], 5 | transform: { 6 | "^.+\\.tsx?$": "ts-jest", 7 | }, 8 | }; 9 | -------------------------------------------------------------------------------- /tutorials/tutorial02-graphql-microservices/my_user_api/mock_lambda/todo/addTodo/index.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "../../../mock_lambda_layer/mockData/addTodo/testCollectionsTypes"; 2 | var data = require("/opt/mockData/addTodo/testCollections") as { 3 | testCollections: TestCollection; 4 | }; 5 | 6 | import * as AWS from "aws-sdk"; 7 | import { AppSyncResolverEvent } from "aws-lambda"; 8 | var isEqual = require("lodash.isequal"); 9 | 10 | exports.handler = async (event: AppSyncResolverEvent) => { 11 | let response = {}; 12 | data.testCollections.fields.addTodo.forEach((v: any) => { 13 | if (v.arguments) { 14 | let equal = isEqual(v.arguments, event.arguments); 15 | if (equal) { 16 | response = v.response; 17 | } 18 | } else { 19 | response = v.response; 20 | } 21 | }); 22 | 23 | return response; 24 | }; 25 | -------------------------------------------------------------------------------- /tutorials/tutorial02-graphql-microservices/my_user_api/mock_lambda_layer/mockData/addTodo/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | addTodo: [ 6 | { 7 | arguments: { 8 | todo: { 9 | id: "01", 10 | title: "Marcela", 11 | done: true, 12 | }, 13 | }, 14 | response: { 15 | id: "01", 16 | title: "Karita", 17 | done: true, 18 | }, 19 | }, 20 | ], 21 | }, 22 | }; 23 | -------------------------------------------------------------------------------- /tutorials/tutorial02-graphql-microservices/my_user_api/mock_lambda_layer/mockData/addTodo/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { 2 | Todo, 3 | MutationAddTodoArgs, 4 | MutationUpdateTodoArgs, 5 | MutationDeleteTodoArgs, 6 | } from "../types"; 7 | 8 | export type TestCollection = { 9 | fields: { addTodo: { arguments: MutationAddTodoArgs; response: Todo }[] }; 10 | }; 11 | -------------------------------------------------------------------------------- /tutorials/tutorial02-graphql-microservices/my_user_api/mock_lambda_layer/mockData/deleteTodo/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | deleteTodo: [ 6 | { 7 | arguments: { 8 | todoId: "Ketti", 9 | }, 10 | response: "Codie", 11 | }, 12 | ], 13 | }, 14 | }; 15 | -------------------------------------------------------------------------------- /tutorials/tutorial02-graphql-microservices/my_user_api/mock_lambda_layer/mockData/deleteTodo/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { 2 | Todo, 3 | MutationAddTodoArgs, 4 | MutationUpdateTodoArgs, 5 | MutationDeleteTodoArgs, 6 | } from "../types"; 7 | 8 | export type TestCollection = { 9 | fields: { 10 | deleteTodo: { arguments: MutationDeleteTodoArgs; response: String }[]; 11 | }; 12 | }; 13 | -------------------------------------------------------------------------------- /tutorials/tutorial02-graphql-microservices/my_user_api/mock_lambda_layer/mockData/getTodos/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | getTodos: [ 6 | { 7 | arguments: {}, 8 | response: [ 9 | { 10 | id: "01", 11 | title: "Ashien", 12 | done: true, 13 | }, 14 | { 15 | id: "01", 16 | title: "Minda", 17 | done: true, 18 | }, 19 | { 20 | id: "01", 21 | title: "Amara", 22 | done: true, 23 | }, 24 | ], 25 | }, 26 | ], 27 | }, 28 | }; 29 | -------------------------------------------------------------------------------- /tutorials/tutorial02-graphql-microservices/my_user_api/mock_lambda_layer/mockData/getTodos/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { 2 | Todo, 3 | MutationAddTodoArgs, 4 | MutationUpdateTodoArgs, 5 | MutationDeleteTodoArgs, 6 | } from "../types"; 7 | 8 | export type TestCollection = { 9 | fields: { getTodos: { arguments: {}; response: Todo[] }[] }; 10 | }; 11 | -------------------------------------------------------------------------------- /tutorials/tutorial02-graphql-microservices/my_user_api/mock_lambda_layer/mockData/updateTodo/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | updateTodo: [ 6 | { 7 | arguments: { 8 | todo: { 9 | id: "01", 10 | title: "Melany", 11 | done: true, 12 | }, 13 | }, 14 | response: { 15 | id: "01", 16 | title: "Florentia", 17 | done: true, 18 | }, 19 | }, 20 | ], 21 | }, 22 | }; 23 | -------------------------------------------------------------------------------- /tutorials/tutorial02-graphql-microservices/my_user_api/mock_lambda_layer/mockData/updateTodo/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { 2 | Todo, 3 | MutationAddTodoArgs, 4 | MutationUpdateTodoArgs, 5 | MutationDeleteTodoArgs, 6 | } from "../types"; 7 | 8 | export type TestCollection = { 9 | fields: { 10 | updateTodo: { arguments: MutationUpdateTodoArgs; response: Todo }[]; 11 | }; 12 | }; 13 | -------------------------------------------------------------------------------- /tutorials/tutorial02-graphql-microservices/my_user_api/mock_lambda_layer/nodejs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lambda-layer", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "axios": "^0.21.1", 13 | "lodash.isequal": "^4.5.0" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /tutorials/tutorial02-graphql-microservices/my_user_api/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "esModuleInterop": true, 4 | "resolveJsonModule": true, 5 | "target": "ES2018", 6 | "module": "commonjs", 7 | "lib": ["es2018"], 8 | "declaration": true, 9 | "strict": true, 10 | "noImplicitAny": true, 11 | "strictNullChecks": true, 12 | "noImplicitThis": true, 13 | "alwaysStrict": true, 14 | "noUnusedLocals": false, 15 | "noUnusedParameters": false, 16 | "noImplicitReturns": true, 17 | "noFallthroughCasesInSwitch": false, 18 | "inlineSourceMap": true, 19 | "inlineSources": true, 20 | "experimentalDecorators": true, 21 | "strictPropertyInitialization": false, 22 | "typeRoots": ["./node_modules/@types"] 23 | }, 24 | "exclude": ["cdk.out", "tests/apiTests"] 25 | } 26 | -------------------------------------------------------------------------------- /tutorials/tutorial02-graphql-microservices/todoSchema.graphql: -------------------------------------------------------------------------------- 1 | type Todo { 2 | id: ID! 3 | title: String! 4 | done: Boolean! 5 | } 6 | 7 | input TodoInput { 8 | id: ID! 9 | title: String! 10 | done: Boolean! 11 | } 12 | 13 | type Query { 14 | getTodos: [Todo] @microService(name:"todo") 15 | } 16 | 17 | type Mutation { 18 | addTodo(todo: TodoInput!): Todo @microService(name:"todo") 19 | updateTodo(todo: TodoInput!): Todo @microService(name:"todo") 20 | deleteTodo(todoId: String!): String @microService(name:"todo") 21 | } -------------------------------------------------------------------------------- /tutorials/tutorial03-real-api/my_user_api/.gitignore: -------------------------------------------------------------------------------- 1 | *.js 2 | !jest.config.js 3 | *.d.ts 4 | node_modules 5 | 6 | # CDK asset staging directory 7 | .cdk.staging 8 | cdk.out 9 | tests/apiTests/appsyncCredentials.json -------------------------------------------------------------------------------- /tutorials/tutorial03-real-api/my_user_api/.npmignore: -------------------------------------------------------------------------------- 1 | *.ts 2 | !*.d.ts 3 | 4 | # CDK asset staging directory 5 | .cdk.staging 6 | cdk.out 7 | -------------------------------------------------------------------------------- /tutorials/tutorial03-real-api/my_user_api/.panacloud/editable_src/graphql/schema/schema.graphql: -------------------------------------------------------------------------------- 1 | scalar AWSDate 2 | scalar AWSTime 3 | scalar AWSDateTime 4 | scalar AWSTimestamp 5 | scalar AWSEmail 6 | scalar AWSJSON 7 | scalar AWSURL 8 | scalar AWSPhone 9 | scalar AWSIPAddress 10 | 11 | type User { 12 | id: String! 13 | name: String 14 | } 15 | 16 | type Query { 17 | user (id: String): User 18 | } 19 | 20 | type Mutation { 21 | addUser ( 22 | # Name for the User item 23 | name: String!): User! 24 | } -------------------------------------------------------------------------------- /tutorials/tutorial03-real-api/my_user_api/.panacloud/editable_src/panacloudconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "lambdas": { 3 | "user": { "is_mock": true, "memory_size": 128, "timeout": 6 }, 4 | "addUser": { "is_mock": false, "memory_size": 128, "timeout": 6 } 5 | }, 6 | "mockData": { "is_custom": false }, 7 | "stages": ["prd", "dev"] 8 | } 9 | -------------------------------------------------------------------------------- /tutorials/tutorial03-real-api/my_user_api/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | {"files.exclude":{".panacloud":true}} -------------------------------------------------------------------------------- /tutorials/tutorial03-real-api/my_user_api/bin/my_user_api.ts: -------------------------------------------------------------------------------- 1 | import * as cdk from "aws-cdk-lib"; 2 | import { MyUserApiStack } from "../lib/my_user_api-stack"; 3 | const app: cdk.App = new cdk.App(); 4 | const deployEnv = process.env.STAGE; 5 | const stack = new MyUserApiStack( 6 | app, 7 | deployEnv ? deployEnv + "-MyUserApiStack" : "MyUserApiStack", 8 | { prod: deployEnv } 9 | ); 10 | -------------------------------------------------------------------------------- /tutorials/tutorial03-real-api/my_user_api/cdk.json: -------------------------------------------------------------------------------- 1 | { 2 | "app": "npx ts-node --prefer-ts-exts bin/my_user_api.ts", 3 | "context": { 4 | "@aws-cdk/aws-apigateway:usagePlanKeyOrderInsensitiveId": true, 5 | "@aws-cdk/core:stackRelativeExports": "true", 6 | "@aws-cdk/aws-rds:lowercaseDbIdentifier": true, 7 | "@aws-cdk/aws-lambda:recognizeVersionProps": true, 8 | "@aws-cdk/aws-cloudfront:defaultSecurityPolicyTLSv1.2_2021": true 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /tutorials/tutorial03-real-api/my_user_api/editable_src/aspects/AspectController.ts: -------------------------------------------------------------------------------- 1 | import { Aspects } from "aws-cdk-lib"; 2 | import { Stack } from "aws-cdk-lib"; 3 | import { DefaultVisitor } from "./DefaultVisitor"; 4 | export class AspectController { 5 | constructor(scope: Stack, prod?: string) { 6 | Aspects.of(scope).add(new DefaultVisitor()); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /tutorials/tutorial03-real-api/my_user_api/editable_src/aspects/DefaultVisitor.ts: -------------------------------------------------------------------------------- 1 | import { IConstruct } from "constructs/lib/construct"; 2 | import { IAspect } from "aws-cdk-lib"; 3 | import { aws_lambda as lambda, Duration } from "aws-cdk-lib"; 4 | export class DefaultVisitor implements IAspect { 5 | constructor() {} 6 | public visit(node: IConstruct): void { 7 | if (node instanceof lambda.Function) { 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /tutorials/tutorial03-real-api/my_user_api/editable_src/customMockLambdaLayer/mockData/addUser/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | addUser: [ 6 | { 7 | arguments: { 8 | name: "Darla", 9 | }, 10 | response: { 11 | id: "Darcy", 12 | name: "Brigit", 13 | }, 14 | }, 15 | ], 16 | }, 17 | }; 18 | -------------------------------------------------------------------------------- /tutorials/tutorial03-real-api/my_user_api/editable_src/customMockLambdaLayer/mockData/addUser/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { User, MutationAddUserArgs, QueryUserArgs } from "../types"; 2 | 3 | export type TestCollection = { 4 | fields: { addUser: { arguments: MutationAddUserArgs; response: User }[] }; 5 | }; 6 | -------------------------------------------------------------------------------- /tutorials/tutorial03-real-api/my_user_api/editable_src/customMockLambdaLayer/mockData/user/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | user: [ 6 | { 7 | arguments: { 8 | id: "Regine", 9 | }, 10 | response: { 11 | id: "Yoshi", 12 | name: "Jodi", 13 | }, 14 | }, 15 | ], 16 | }, 17 | }; 18 | -------------------------------------------------------------------------------- /tutorials/tutorial03-real-api/my_user_api/editable_src/customMockLambdaLayer/mockData/user/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { User, MutationAddUserArgs, QueryUserArgs } from "../types"; 2 | 3 | export type TestCollection = { 4 | fields: { user: { arguments: QueryUserArgs; response: User }[] }; 5 | }; 6 | -------------------------------------------------------------------------------- /tutorials/tutorial03-real-api/my_user_api/editable_src/customMockLambdaLayer/nodejs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lambda-layer", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "axios": "^0.21.1", 13 | "lodash.isequal": "^4.5.0" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /tutorials/tutorial03-real-api/my_user_api/editable_src/graphql/schema/schema.graphql: -------------------------------------------------------------------------------- 1 | scalar AWSDate 2 | scalar AWSTime 3 | scalar AWSDateTime 4 | scalar AWSTimestamp 5 | scalar AWSEmail 6 | scalar AWSJSON 7 | scalar AWSURL 8 | scalar AWSPhone 9 | scalar AWSIPAddress 10 | 11 | type User { 12 | id: String! 13 | name: String 14 | } 15 | 16 | type Query { 17 | user (id: String): User 18 | } 19 | 20 | type Mutation { 21 | addUser ( 22 | # Name for the User item 23 | name: String!): User! 24 | } -------------------------------------------------------------------------------- /tutorials/tutorial03-real-api/my_user_api/editable_src/lambdaLayer/nodejs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lambda-layer", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "axios": "^0.21.1", 13 | "gremlin": "^3.5.2", 14 | "lodash.isequal": "^4.5.0" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /tutorials/tutorial03-real-api/my_user_api/editable_src/lambda_stubs/addUser/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "adduser", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC" 12 | } 13 | -------------------------------------------------------------------------------- /tutorials/tutorial03-real-api/my_user_api/editable_src/lambda_stubs/user/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "user", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC" 12 | } 13 | -------------------------------------------------------------------------------- /tutorials/tutorial03-real-api/my_user_api/editable_src/panacloudconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "lambdas": { 3 | "user": { "is_mock": true, "memory_size": 128, "timeout": 6 }, 4 | "addUser": { "is_mock": false, "memory_size": 128, "timeout": 6 } 5 | }, 6 | "mockData": { "is_custom": false }, 7 | "stages": ["prd", "dev"] 8 | } 9 | -------------------------------------------------------------------------------- /tutorials/tutorial03-real-api/my_user_api/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | testEnvironment: "node", 3 | roots: ["/test"], 4 | testMatch: ["**/*.test.ts"], 5 | transform: { 6 | "^.+\\.tsx?$": "ts-jest", 7 | }, 8 | }; 9 | -------------------------------------------------------------------------------- /tutorials/tutorial03-real-api/my_user_api/mock_lambda/addUser/index.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "../../mock_lambda_layer/mockData/addUser/testCollectionsTypes"; 2 | var data = require("/opt/mockData/addUser/testCollections") as { 3 | testCollections: TestCollection; 4 | }; 5 | 6 | import * as AWS from "aws-sdk"; 7 | import { AppSyncResolverEvent } from "aws-lambda"; 8 | var isEqual = require("lodash.isequal"); 9 | 10 | exports.handler = async (event: AppSyncResolverEvent) => { 11 | let response = {}; 12 | data.testCollections.fields.addUser.forEach((v: any) => { 13 | if (v.arguments) { 14 | let equal = isEqual(v.arguments, event.arguments); 15 | if (equal) { 16 | response = v.response; 17 | } 18 | } else { 19 | response = v.response; 20 | } 21 | }); 22 | 23 | return response; 24 | }; 25 | -------------------------------------------------------------------------------- /tutorials/tutorial03-real-api/my_user_api/mock_lambda/user/index.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "../../mock_lambda_layer/mockData/user/testCollectionsTypes"; 2 | var data = require("/opt/mockData/user/testCollections") as { 3 | testCollections: TestCollection; 4 | }; 5 | 6 | import * as AWS from "aws-sdk"; 7 | import { AppSyncResolverEvent } from "aws-lambda"; 8 | var isEqual = require("lodash.isequal"); 9 | 10 | exports.handler = async (event: AppSyncResolverEvent) => { 11 | let response = {}; 12 | data.testCollections.fields.user.forEach((v: any) => { 13 | if (v.arguments) { 14 | let equal = isEqual(v.arguments, event.arguments); 15 | if (equal) { 16 | response = v.response; 17 | } 18 | } else { 19 | response = v.response; 20 | } 21 | }); 22 | 23 | return response; 24 | }; 25 | -------------------------------------------------------------------------------- /tutorials/tutorial03-real-api/my_user_api/mock_lambda_layer/mockData/addUser/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | addUser: [ 6 | { 7 | arguments: { 8 | name: "Tilda", 9 | }, 10 | response: { 11 | id: "Ofella", 12 | name: "Salomi", 13 | }, 14 | }, 15 | ], 16 | }, 17 | }; 18 | -------------------------------------------------------------------------------- /tutorials/tutorial03-real-api/my_user_api/mock_lambda_layer/mockData/addUser/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { User, MutationAddUserArgs, QueryUserArgs } from "../types"; 2 | 3 | export type TestCollection = { 4 | fields: { addUser: { arguments: MutationAddUserArgs; response: User }[] }; 5 | }; 6 | -------------------------------------------------------------------------------- /tutorials/tutorial03-real-api/my_user_api/mock_lambda_layer/mockData/user/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | user: [ 6 | { 7 | arguments: { 8 | id: "Renee", 9 | }, 10 | response: { 11 | id: "Margeaux", 12 | name: "Ardith", 13 | }, 14 | }, 15 | ], 16 | }, 17 | }; 18 | -------------------------------------------------------------------------------- /tutorials/tutorial03-real-api/my_user_api/mock_lambda_layer/mockData/user/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { User, MutationAddUserArgs, QueryUserArgs } from "../types"; 2 | 3 | export type TestCollection = { 4 | fields: { user: { arguments: QueryUserArgs; response: User }[] }; 5 | }; 6 | -------------------------------------------------------------------------------- /tutorials/tutorial03-real-api/my_user_api/mock_lambda_layer/nodejs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lambda-layer", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "axios": "^0.21.1", 13 | "lodash.isequal": "^4.5.0" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /tutorials/tutorial03-real-api/my_user_api/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "esModuleInterop": true, 4 | "resolveJsonModule": true, 5 | "target": "ES2018", 6 | "module": "commonjs", 7 | "lib": ["es2018"], 8 | "declaration": true, 9 | "strict": true, 10 | "noImplicitAny": true, 11 | "strictNullChecks": true, 12 | "noImplicitThis": true, 13 | "alwaysStrict": true, 14 | "noUnusedLocals": false, 15 | "noUnusedParameters": false, 16 | "noImplicitReturns": true, 17 | "noFallthroughCasesInSwitch": false, 18 | "inlineSourceMap": true, 19 | "inlineSources": true, 20 | "experimentalDecorators": true, 21 | "strictPropertyInitialization": false, 22 | "typeRoots": ["./node_modules/@types"] 23 | }, 24 | "exclude": ["cdk.out", "tests/apiTests"] 25 | } 26 | -------------------------------------------------------------------------------- /tutorials/tutorial03-real-api/user.graphql: -------------------------------------------------------------------------------- 1 | type User { 2 | id: String! 3 | name: String 4 | } 5 | 6 | type Query { 7 | user (id: String): User 8 | } 9 | 10 | type Mutation { 11 | addUser ( 12 | # Name for the User item 13 | name: String!): User! 14 | } -------------------------------------------------------------------------------- /tutorials/tutorial04-adding-stages/my_user_api/.gitignore: -------------------------------------------------------------------------------- 1 | *.js 2 | !jest.config.js 3 | *.d.ts 4 | node_modules 5 | 6 | # CDK asset staging directory 7 | .cdk.staging 8 | cdk.out 9 | tests/apiTests/appsyncCredentials.json -------------------------------------------------------------------------------- /tutorials/tutorial04-adding-stages/my_user_api/.npmignore: -------------------------------------------------------------------------------- 1 | *.ts 2 | !*.d.ts 3 | 4 | # CDK asset staging directory 5 | .cdk.staging 6 | cdk.out 7 | -------------------------------------------------------------------------------- /tutorials/tutorial04-adding-stages/my_user_api/.panacloud/editable_src/graphql/schema/schema.graphql: -------------------------------------------------------------------------------- 1 | scalar AWSDate 2 | scalar AWSTime 3 | scalar AWSDateTime 4 | scalar AWSTimestamp 5 | scalar AWSEmail 6 | scalar AWSJSON 7 | scalar AWSURL 8 | scalar AWSPhone 9 | scalar AWSIPAddress 10 | 11 | type User { 12 | id: String! 13 | name: String 14 | } 15 | 16 | type Query { 17 | user (id: String): User 18 | } 19 | 20 | type Mutation { 21 | addUser ( 22 | # Name for the User item 23 | name: String!): User! 24 | 25 | 26 | } -------------------------------------------------------------------------------- /tutorials/tutorial04-adding-stages/my_user_api/.panacloud/editable_src/panacloudconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "lambdas": { 3 | "user": { "is_mock": true, "memory_size": 128, "timeout": 6 }, 4 | "addUser": { "is_mock": true, "memory_size": 128, "timeout": 6 } 5 | }, 6 | "mockLambdaLayer": { "asset_path": "mock_lambda_layer" }, 7 | "stages": ["prd", "dev", "test"] 8 | } 9 | -------------------------------------------------------------------------------- /tutorials/tutorial04-adding-stages/my_user_api/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | {"files.exclude":{".panacloud":true}} -------------------------------------------------------------------------------- /tutorials/tutorial04-adding-stages/my_user_api/bin/my_user_api.ts: -------------------------------------------------------------------------------- 1 | import * as cdk from "aws-cdk-lib"; 2 | import { MyUserApiStack } from "../lib/my_user_api-stack"; 3 | const app: cdk.App = new cdk.App(); 4 | const deployEnv = process.env.STAGE; 5 | const stack = new MyUserApiStack( 6 | app, 7 | deployEnv ? deployEnv + "-MyUserApiStack" : "MyUserApiStack", 8 | { prod: deployEnv } 9 | ); 10 | -------------------------------------------------------------------------------- /tutorials/tutorial04-adding-stages/my_user_api/cdk.json: -------------------------------------------------------------------------------- 1 | { 2 | "app": "npx ts-node --prefer-ts-exts bin/my_user_api.ts", 3 | "context": { 4 | "@aws-cdk/aws-apigateway:usagePlanKeyOrderInsensitiveId": true, 5 | "@aws-cdk/core:stackRelativeExports": "true", 6 | "@aws-cdk/aws-rds:lowercaseDbIdentifier": true, 7 | "@aws-cdk/aws-lambda:recognizeVersionProps": true, 8 | "@aws-cdk/aws-cloudfront:defaultSecurityPolicyTLSv1.2_2021": true 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /tutorials/tutorial04-adding-stages/my_user_api/editable_src/aspects/AspectController.ts: -------------------------------------------------------------------------------- 1 | import { Aspects } from "aws-cdk-lib"; 2 | import { Stack } from "aws-cdk-lib"; 3 | import { DefaultVisitor } from "./DefaultVisitor"; 4 | export class AspectController { 5 | constructor(scope: Stack, prod?: string) { 6 | Aspects.of(scope).add(new DefaultVisitor()); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /tutorials/tutorial04-adding-stages/my_user_api/editable_src/aspects/DefaultVisitor.ts: -------------------------------------------------------------------------------- 1 | import { IConstruct } from "constructs/lib/construct"; 2 | import { IAspect } from "aws-cdk-lib"; 3 | import { aws_lambda as lambda, Duration } from "aws-cdk-lib"; 4 | export class DefaultVisitor implements IAspect { 5 | constructor() {} 6 | public visit(node: IConstruct): void { 7 | if (node instanceof lambda.Function) { 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /tutorials/tutorial04-adding-stages/my_user_api/editable_src/customMockLambdaLayer/mockData/addUser/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | addUser: [ 6 | { 7 | arguments: { 8 | name: "Kylynn", 9 | }, 10 | response: { 11 | id: "Coralyn", 12 | name: "Kamilah", 13 | }, 14 | }, 15 | ], 16 | }, 17 | }; 18 | -------------------------------------------------------------------------------- /tutorials/tutorial04-adding-stages/my_user_api/editable_src/customMockLambdaLayer/mockData/addUser/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { User, MutationAddUserArgs, QueryUserArgs } from "../types"; 2 | 3 | export type TestCollection = { 4 | fields: { addUser: { arguments: MutationAddUserArgs; response: User }[] }; 5 | }; 6 | -------------------------------------------------------------------------------- /tutorials/tutorial04-adding-stages/my_user_api/editable_src/customMockLambdaLayer/mockData/user/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | user: [ 6 | { 7 | arguments: { 8 | id: "Katerina", 9 | }, 10 | response: { 11 | id: "Gertrude", 12 | name: "Gayle", 13 | }, 14 | }, 15 | ], 16 | }, 17 | }; 18 | -------------------------------------------------------------------------------- /tutorials/tutorial04-adding-stages/my_user_api/editable_src/customMockLambdaLayer/mockData/user/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { User, MutationAddUserArgs, QueryUserArgs } from "../types"; 2 | 3 | export type TestCollection = { 4 | fields: { user: { arguments: QueryUserArgs; response: User }[] }; 5 | }; 6 | -------------------------------------------------------------------------------- /tutorials/tutorial04-adding-stages/my_user_api/editable_src/customMockLambdaLayer/nodejs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lambda-layer", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "axios": "^0.21.1", 13 | "lodash.isequal": "^4.5.0" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /tutorials/tutorial04-adding-stages/my_user_api/editable_src/graphql/schema/schema.graphql: -------------------------------------------------------------------------------- 1 | scalar AWSDate 2 | scalar AWSTime 3 | scalar AWSDateTime 4 | scalar AWSTimestamp 5 | scalar AWSEmail 6 | scalar AWSJSON 7 | scalar AWSURL 8 | scalar AWSPhone 9 | scalar AWSIPAddress 10 | 11 | type User { 12 | id: String! 13 | name: String 14 | } 15 | 16 | type Query { 17 | user (id: String): User 18 | } 19 | 20 | type Mutation { 21 | addUser ( 22 | # Name for the User item 23 | name: String!): User! 24 | 25 | 26 | } -------------------------------------------------------------------------------- /tutorials/tutorial04-adding-stages/my_user_api/editable_src/lambdaLayer/nodejs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lambda-layer", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "axios": "^0.21.1", 13 | "gremlin": "^3.5.2", 14 | "lodash.isequal": "^4.5.0" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /tutorials/tutorial04-adding-stages/my_user_api/editable_src/lambda_stubs/addUser/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "adduser", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC" 12 | } 13 | -------------------------------------------------------------------------------- /tutorials/tutorial04-adding-stages/my_user_api/editable_src/lambda_stubs/user/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "user", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC" 12 | } 13 | -------------------------------------------------------------------------------- /tutorials/tutorial04-adding-stages/my_user_api/editable_src/panacloudconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "lambdas": { 3 | "user": { "is_mock": true, "memory_size": 128, "timeout": 6 }, 4 | "addUser": { "is_mock": true, "memory_size": 128, "timeout": 6 } 5 | }, 6 | "mockData": { "is_custom": false }, 7 | "stages": ["prd", "dev", "test"] 8 | } 9 | -------------------------------------------------------------------------------- /tutorials/tutorial04-adding-stages/my_user_api/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | testEnvironment: "node", 3 | roots: ["/test"], 4 | testMatch: ["**/*.test.ts"], 5 | transform: { 6 | "^.+\\.tsx?$": "ts-jest", 7 | }, 8 | }; 9 | -------------------------------------------------------------------------------- /tutorials/tutorial04-adding-stages/my_user_api/mock_lambda/addUser/index.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "../../mock_lambda_layer/mockData/addUser/testCollectionsTypes"; 2 | var data = require("/opt/mockData/addUser/testCollections") as { 3 | testCollections: TestCollection; 4 | }; 5 | 6 | import * as AWS from "aws-sdk"; 7 | import { AppSyncResolverEvent } from "aws-lambda"; 8 | var isEqual = require("lodash.isequal"); 9 | 10 | exports.handler = async (event: AppSyncResolverEvent) => { 11 | let response = {}; 12 | data.testCollections.fields.addUser.forEach((v: any) => { 13 | if (v.arguments) { 14 | let equal = isEqual(v.arguments, event.arguments); 15 | if (equal) { 16 | response = v.response; 17 | } 18 | } else { 19 | response = v.response; 20 | } 21 | }); 22 | 23 | return response; 24 | }; 25 | -------------------------------------------------------------------------------- /tutorials/tutorial04-adding-stages/my_user_api/mock_lambda/user/index.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "../../mock_lambda_layer/mockData/user/testCollectionsTypes"; 2 | var data = require("/opt/mockData/user/testCollections") as { 3 | testCollections: TestCollection; 4 | }; 5 | 6 | import * as AWS from "aws-sdk"; 7 | import { AppSyncResolverEvent } from "aws-lambda"; 8 | var isEqual = require("lodash.isequal"); 9 | 10 | exports.handler = async (event: AppSyncResolverEvent) => { 11 | let response = {}; 12 | data.testCollections.fields.user.forEach((v: any) => { 13 | if (v.arguments) { 14 | let equal = isEqual(v.arguments, event.arguments); 15 | if (equal) { 16 | response = v.response; 17 | } 18 | } else { 19 | response = v.response; 20 | } 21 | }); 22 | 23 | return response; 24 | }; 25 | -------------------------------------------------------------------------------- /tutorials/tutorial04-adding-stages/my_user_api/mock_lambda_layer/mockData/addUser/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | addUser: [ 6 | { 7 | arguments: { 8 | name: "Kylynn", 9 | }, 10 | response: { 11 | id: "Coralyn", 12 | name: "Kamilah", 13 | }, 14 | }, 15 | ], 16 | }, 17 | }; 18 | -------------------------------------------------------------------------------- /tutorials/tutorial04-adding-stages/my_user_api/mock_lambda_layer/mockData/addUser/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { User, MutationAddUserArgs, QueryUserArgs } from "../types"; 2 | 3 | export type TestCollection = { 4 | fields: { addUser: { arguments: MutationAddUserArgs; response: User }[] }; 5 | }; 6 | -------------------------------------------------------------------------------- /tutorials/tutorial04-adding-stages/my_user_api/mock_lambda_layer/mockData/user/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | user: [ 6 | { 7 | arguments: { 8 | id: "Katerina", 9 | }, 10 | response: { 11 | id: "Gertrude", 12 | name: "Gayle", 13 | }, 14 | }, 15 | ], 16 | }, 17 | }; 18 | -------------------------------------------------------------------------------- /tutorials/tutorial04-adding-stages/my_user_api/mock_lambda_layer/mockData/user/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { User, MutationAddUserArgs, QueryUserArgs } from "../types"; 2 | 3 | export type TestCollection = { 4 | fields: { user: { arguments: QueryUserArgs; response: User }[] }; 5 | }; 6 | -------------------------------------------------------------------------------- /tutorials/tutorial04-adding-stages/my_user_api/mock_lambda_layer/nodejs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lambda-layer", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "axios": "^0.21.1", 13 | "lodash.isequal": "^4.5.0" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /tutorials/tutorial04-adding-stages/my_user_api/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "esModuleInterop": true, 4 | "resolveJsonModule": true, 5 | "target": "ES2018", 6 | "module": "commonjs", 7 | "lib": ["es2018"], 8 | "declaration": true, 9 | "strict": true, 10 | "noImplicitAny": true, 11 | "strictNullChecks": true, 12 | "noImplicitThis": true, 13 | "alwaysStrict": true, 14 | "noUnusedLocals": false, 15 | "noUnusedParameters": false, 16 | "noImplicitReturns": true, 17 | "noFallthroughCasesInSwitch": false, 18 | "inlineSourceMap": true, 19 | "inlineSources": true, 20 | "experimentalDecorators": true, 21 | "strictPropertyInitialization": false, 22 | "typeRoots": ["./node_modules/@types"] 23 | }, 24 | "exclude": ["cdk.out", "tests/apiTests"] 25 | } 26 | -------------------------------------------------------------------------------- /tutorials/tutorial04-adding-stages/user.graphql: -------------------------------------------------------------------------------- 1 | type User { 2 | id: String! 3 | name: String 4 | } 5 | 6 | type Query { 7 | user (id: String): User 8 | } 9 | 10 | type Mutation { 11 | addUser ( 12 | # Name for the User item 13 | name: String!): User! 14 | 15 | 16 | } -------------------------------------------------------------------------------- /tutorials/tutorial05-customize-lambda-memory-and-timeout/my_user_api/.gitignore: -------------------------------------------------------------------------------- 1 | *.js 2 | !jest.config.js 3 | *.d.ts 4 | node_modules 5 | 6 | # CDK asset staging directory 7 | .cdk.staging 8 | cdk.out 9 | tests/apiTests/appsyncCredentials.json -------------------------------------------------------------------------------- /tutorials/tutorial05-customize-lambda-memory-and-timeout/my_user_api/.npmignore: -------------------------------------------------------------------------------- 1 | *.ts 2 | !*.d.ts 3 | 4 | # CDK asset staging directory 5 | .cdk.staging 6 | cdk.out 7 | -------------------------------------------------------------------------------- /tutorials/tutorial05-customize-lambda-memory-and-timeout/my_user_api/.panacloud/editable_src/graphql/schema/schema.graphql: -------------------------------------------------------------------------------- 1 | scalar AWSDate 2 | scalar AWSTime 3 | scalar AWSDateTime 4 | scalar AWSTimestamp 5 | scalar AWSEmail 6 | scalar AWSJSON 7 | scalar AWSURL 8 | scalar AWSPhone 9 | scalar AWSIPAddress 10 | 11 | type User { 12 | id: String! 13 | name: String 14 | } 15 | 16 | type Query { 17 | user (id: String): User 18 | } 19 | 20 | type Mutation { 21 | addUser ( 22 | # Name for the User item 23 | name: String!): User! 24 | 25 | 26 | } -------------------------------------------------------------------------------- /tutorials/tutorial05-customize-lambda-memory-and-timeout/my_user_api/.panacloud/editable_src/panacloudconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "lambdas": { 3 | "user": { "is_mock": true, "memory_size": 1024, "timeout": 6 }, 4 | "addUser": { "is_mock": true, "memory_size": 128, "timeout": 3 } 5 | }, 6 | "mockData": { "is_custom": false }, 7 | "stages": ["prd", "dev"] 8 | } 9 | -------------------------------------------------------------------------------- /tutorials/tutorial05-customize-lambda-memory-and-timeout/my_user_api/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | {"files.exclude":{".panacloud":true}} -------------------------------------------------------------------------------- /tutorials/tutorial05-customize-lambda-memory-and-timeout/my_user_api/bin/my_user_api.ts: -------------------------------------------------------------------------------- 1 | import * as cdk from "aws-cdk-lib"; 2 | import { MyUserApiStack } from "../lib/my_user_api-stack"; 3 | const app: cdk.App = new cdk.App(); 4 | const deployEnv = process.env.STAGE; 5 | const stack = new MyUserApiStack( 6 | app, 7 | deployEnv ? deployEnv + "-MyUserApiStack" : "MyUserApiStack", 8 | { prod: deployEnv } 9 | ); 10 | -------------------------------------------------------------------------------- /tutorials/tutorial05-customize-lambda-memory-and-timeout/my_user_api/cdk.json: -------------------------------------------------------------------------------- 1 | { 2 | "app": "npx ts-node --prefer-ts-exts bin/my_user_api.ts", 3 | "context": { 4 | "@aws-cdk/aws-apigateway:usagePlanKeyOrderInsensitiveId": true, 5 | "@aws-cdk/core:stackRelativeExports": "true", 6 | "@aws-cdk/aws-rds:lowercaseDbIdentifier": true, 7 | "@aws-cdk/aws-lambda:recognizeVersionProps": true, 8 | "@aws-cdk/aws-cloudfront:defaultSecurityPolicyTLSv1.2_2021": true 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /tutorials/tutorial05-customize-lambda-memory-and-timeout/my_user_api/editable_src/aspects/AspectController.ts: -------------------------------------------------------------------------------- 1 | import { Aspects } from "aws-cdk-lib"; 2 | import { Stack } from "aws-cdk-lib"; 3 | import { DefaultVisitor } from "./DefaultVisitor"; 4 | export class AspectController { 5 | constructor(scope: Stack, prod?: string) { 6 | Aspects.of(scope).add(new DefaultVisitor()); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /tutorials/tutorial05-customize-lambda-memory-and-timeout/my_user_api/editable_src/aspects/DefaultVisitor.ts: -------------------------------------------------------------------------------- 1 | import { IConstruct } from "constructs/lib/construct"; 2 | import { IAspect } from "aws-cdk-lib"; 3 | import { aws_lambda as lambda, Duration } from "aws-cdk-lib"; 4 | export class DefaultVisitor implements IAspect { 5 | constructor() {} 6 | public visit(node: IConstruct): void { 7 | if (node instanceof lambda.Function) { 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /tutorials/tutorial05-customize-lambda-memory-and-timeout/my_user_api/editable_src/customMockLambdaLayer/mockData/addUser/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | addUser: [ 6 | { 7 | arguments: { 8 | name: "Allissa", 9 | }, 10 | response: { 11 | id: "Sharline", 12 | name: "Damaris", 13 | }, 14 | }, 15 | ], 16 | }, 17 | }; 18 | -------------------------------------------------------------------------------- /tutorials/tutorial05-customize-lambda-memory-and-timeout/my_user_api/editable_src/customMockLambdaLayer/mockData/addUser/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { User, MutationAddUserArgs, QueryUserArgs } from "../types"; 2 | 3 | export type TestCollection = { 4 | fields: { addUser: { arguments: MutationAddUserArgs; response: User }[] }; 5 | }; 6 | -------------------------------------------------------------------------------- /tutorials/tutorial05-customize-lambda-memory-and-timeout/my_user_api/editable_src/customMockLambdaLayer/mockData/user/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | user: [ 6 | { 7 | arguments: { 8 | id: "Luelle", 9 | }, 10 | response: { 11 | id: "Ofella", 12 | name: "Babbie", 13 | }, 14 | }, 15 | ], 16 | }, 17 | }; 18 | -------------------------------------------------------------------------------- /tutorials/tutorial05-customize-lambda-memory-and-timeout/my_user_api/editable_src/customMockLambdaLayer/mockData/user/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { User, MutationAddUserArgs, QueryUserArgs } from "../types"; 2 | 3 | export type TestCollection = { 4 | fields: { user: { arguments: QueryUserArgs; response: User }[] }; 5 | }; 6 | -------------------------------------------------------------------------------- /tutorials/tutorial05-customize-lambda-memory-and-timeout/my_user_api/editable_src/customMockLambdaLayer/nodejs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lambda-layer", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "axios": "^0.21.1", 13 | "lodash.isequal": "^4.5.0" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /tutorials/tutorial05-customize-lambda-memory-and-timeout/my_user_api/editable_src/graphql/schema/schema.graphql: -------------------------------------------------------------------------------- 1 | scalar AWSDate 2 | scalar AWSTime 3 | scalar AWSDateTime 4 | scalar AWSTimestamp 5 | scalar AWSEmail 6 | scalar AWSJSON 7 | scalar AWSURL 8 | scalar AWSPhone 9 | scalar AWSIPAddress 10 | 11 | type User { 12 | id: String! 13 | name: String 14 | } 15 | 16 | type Query { 17 | user (id: String): User 18 | } 19 | 20 | type Mutation { 21 | addUser ( 22 | # Name for the User item 23 | name: String!): User! 24 | 25 | 26 | } -------------------------------------------------------------------------------- /tutorials/tutorial05-customize-lambda-memory-and-timeout/my_user_api/editable_src/lambdaLayer/nodejs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lambda-layer", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "axios": "^0.21.1", 13 | "gremlin": "^3.5.2", 14 | "lodash.isequal": "^4.5.0" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /tutorials/tutorial05-customize-lambda-memory-and-timeout/my_user_api/editable_src/lambda_stubs/addUser/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "adduser", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC" 12 | } 13 | -------------------------------------------------------------------------------- /tutorials/tutorial05-customize-lambda-memory-and-timeout/my_user_api/editable_src/lambda_stubs/user/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "user", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC" 12 | } 13 | -------------------------------------------------------------------------------- /tutorials/tutorial05-customize-lambda-memory-and-timeout/my_user_api/editable_src/panacloudconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "lambdas": { 3 | "user": { "is_mock": true, "memory_size": 1024, "timeout": 6 }, 4 | "addUser": { "is_mock": true, "memory_size": 128, "timeout": 3 } 5 | }, 6 | "mockData": { "is_custom": false }, 7 | "stages": ["prd", "dev"] 8 | } 9 | -------------------------------------------------------------------------------- /tutorials/tutorial05-customize-lambda-memory-and-timeout/my_user_api/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | testEnvironment: "node", 3 | roots: ["/test"], 4 | testMatch: ["**/*.test.ts"], 5 | transform: { 6 | "^.+\\.tsx?$": "ts-jest", 7 | }, 8 | }; 9 | -------------------------------------------------------------------------------- /tutorials/tutorial05-customize-lambda-memory-and-timeout/my_user_api/mock_lambda/user/index.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "../../mock_lambda_layer/mockData/user/testCollectionsTypes"; 2 | var data = require("/opt/mockData/user/testCollections") as { 3 | testCollections: TestCollection; 4 | }; 5 | 6 | import * as AWS from "aws-sdk"; 7 | import { AppSyncResolverEvent } from "aws-lambda"; 8 | var isEqual = require("lodash.isequal"); 9 | 10 | exports.handler = async (event: AppSyncResolverEvent) => { 11 | let response = {}; 12 | data.testCollections.fields.user.forEach((v: any) => { 13 | if (v.arguments) { 14 | let equal = isEqual(v.arguments, event.arguments); 15 | if (equal) { 16 | response = v.response; 17 | } 18 | } else { 19 | response = v.response; 20 | } 21 | }); 22 | 23 | return response; 24 | }; 25 | -------------------------------------------------------------------------------- /tutorials/tutorial05-customize-lambda-memory-and-timeout/my_user_api/mock_lambda_layer/mockData/addUser/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | addUser: [ 6 | { 7 | arguments: { 8 | name: "Norri", 9 | }, 10 | response: { 11 | id: "Bryn", 12 | name: "Gaynor", 13 | }, 14 | }, 15 | ], 16 | }, 17 | }; 18 | -------------------------------------------------------------------------------- /tutorials/tutorial05-customize-lambda-memory-and-timeout/my_user_api/mock_lambda_layer/mockData/addUser/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { User, MutationAddUserArgs, QueryUserArgs } from "../types"; 2 | 3 | export type TestCollection = { 4 | fields: { addUser: { arguments: MutationAddUserArgs; response: User }[] }; 5 | }; 6 | -------------------------------------------------------------------------------- /tutorials/tutorial05-customize-lambda-memory-and-timeout/my_user_api/mock_lambda_layer/mockData/user/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | user: [ 6 | { 7 | arguments: { 8 | id: "Gracie", 9 | }, 10 | response: { 11 | id: "Codee", 12 | name: "Mariejeanne", 13 | }, 14 | }, 15 | ], 16 | }, 17 | }; 18 | -------------------------------------------------------------------------------- /tutorials/tutorial05-customize-lambda-memory-and-timeout/my_user_api/mock_lambda_layer/mockData/user/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { User, MutationAddUserArgs, QueryUserArgs } from "../types"; 2 | 3 | export type TestCollection = { 4 | fields: { user: { arguments: QueryUserArgs; response: User }[] }; 5 | }; 6 | -------------------------------------------------------------------------------- /tutorials/tutorial05-customize-lambda-memory-and-timeout/my_user_api/mock_lambda_layer/nodejs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lambda-layer", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "axios": "^0.21.1", 13 | "lodash.isequal": "^4.5.0" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /tutorials/tutorial05-customize-lambda-memory-and-timeout/my_user_api/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "esModuleInterop": true, 4 | "resolveJsonModule": true, 5 | "target": "ES2018", 6 | "module": "commonjs", 7 | "lib": ["es2018"], 8 | "declaration": true, 9 | "strict": true, 10 | "noImplicitAny": true, 11 | "strictNullChecks": true, 12 | "noImplicitThis": true, 13 | "alwaysStrict": true, 14 | "noUnusedLocals": false, 15 | "noUnusedParameters": false, 16 | "noImplicitReturns": true, 17 | "noFallthroughCasesInSwitch": false, 18 | "inlineSourceMap": true, 19 | "inlineSources": true, 20 | "experimentalDecorators": true, 21 | "strictPropertyInitialization": false, 22 | "typeRoots": ["./node_modules/@types"] 23 | }, 24 | "exclude": ["cdk.out", "tests/apiTests"] 25 | } 26 | -------------------------------------------------------------------------------- /tutorials/tutorial05-customize-lambda-memory-and-timeout/user.graphql: -------------------------------------------------------------------------------- 1 | type User { 2 | id: String! 3 | name: String 4 | } 5 | 6 | type Query { 7 | user (id: String): User 8 | } 9 | 10 | type Mutation { 11 | addUser ( 12 | # Name for the User item 13 | name: String!): User! 14 | 15 | 16 | } -------------------------------------------------------------------------------- /tutorials/tutorial06-customizing-infrastructure-using-aspects/my_user_api/.gitignore: -------------------------------------------------------------------------------- 1 | *.js 2 | !jest.config.js 3 | *.d.ts 4 | node_modules 5 | 6 | # CDK asset staging directory 7 | .cdk.staging 8 | cdk.out 9 | tests/apiTests/appsyncCredentials.json -------------------------------------------------------------------------------- /tutorials/tutorial06-customizing-infrastructure-using-aspects/my_user_api/.npmignore: -------------------------------------------------------------------------------- 1 | *.ts 2 | !*.d.ts 3 | 4 | # CDK asset staging directory 5 | .cdk.staging 6 | cdk.out 7 | -------------------------------------------------------------------------------- /tutorials/tutorial06-customizing-infrastructure-using-aspects/my_user_api/.panacloud/editable_src/graphql/schema/schema.graphql: -------------------------------------------------------------------------------- 1 | scalar AWSDate 2 | scalar AWSTime 3 | scalar AWSDateTime 4 | scalar AWSTimestamp 5 | scalar AWSEmail 6 | scalar AWSJSON 7 | scalar AWSURL 8 | scalar AWSPhone 9 | scalar AWSIPAddress 10 | 11 | type User { 12 | id: String! 13 | name: String 14 | } 15 | 16 | type Query { 17 | user (id: String): User 18 | } 19 | 20 | type Mutation { 21 | addUser ( 22 | # Name for the User item 23 | name: String!): User! 24 | 25 | 26 | } -------------------------------------------------------------------------------- /tutorials/tutorial06-customizing-infrastructure-using-aspects/my_user_api/.panacloud/editable_src/panacloudconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "lambdas": { 3 | "user": { "is_mock": true, "memory_size": 128, "timeout": 6 }, 4 | "addUser": { "is_mock": true, "memory_size": 128, "timeout": 6 } 5 | }, 6 | "mockLambdaLayer": { "asset_path": "mock_lambda_layer" }, 7 | "stages": ["prd", "dev"] 8 | } 9 | -------------------------------------------------------------------------------- /tutorials/tutorial06-customizing-infrastructure-using-aspects/my_user_api/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | {"files.exclude":{".panacloud":true}} -------------------------------------------------------------------------------- /tutorials/tutorial06-customizing-infrastructure-using-aspects/my_user_api/bin/my_user_api.ts: -------------------------------------------------------------------------------- 1 | import * as cdk from "aws-cdk-lib"; 2 | import { MyUserApiStack } from "../lib/my_user_api-stack"; 3 | const app: cdk.App = new cdk.App(); 4 | const deployEnv = process.env.STAGE; 5 | const stack = new MyUserApiStack( 6 | app, 7 | deployEnv ? deployEnv + "-MyUserApiStack" : "MyUserApiStack", 8 | { prod: deployEnv } 9 | ); 10 | -------------------------------------------------------------------------------- /tutorials/tutorial06-customizing-infrastructure-using-aspects/my_user_api/cdk.json: -------------------------------------------------------------------------------- 1 | { 2 | "app": "npx ts-node --prefer-ts-exts bin/my_user_api.ts", 3 | "context": { 4 | "@aws-cdk/aws-apigateway:usagePlanKeyOrderInsensitiveId": true, 5 | "@aws-cdk/core:stackRelativeExports": "true", 6 | "@aws-cdk/aws-rds:lowercaseDbIdentifier": true, 7 | "@aws-cdk/aws-lambda:recognizeVersionProps": true, 8 | "@aws-cdk/aws-cloudfront:defaultSecurityPolicyTLSv1.2_2021": true 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /tutorials/tutorial06-customizing-infrastructure-using-aspects/my_user_api/editable_src/aspects/AspectController.ts: -------------------------------------------------------------------------------- 1 | import { Aspects } from "aws-cdk-lib"; 2 | import { Stack } from "aws-cdk-lib"; 3 | import { DefaultVisitor } from "./DefaultVisitor"; 4 | export class AspectController { 5 | constructor(scope: Stack, prod?: string) { 6 | Aspects.of(scope).add(new DefaultVisitor()); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /tutorials/tutorial06-customizing-infrastructure-using-aspects/my_user_api/editable_src/aspects/DefaultVisitor.ts: -------------------------------------------------------------------------------- 1 | import { IConstruct } from "constructs/lib/construct"; 2 | import { IAspect } from "aws-cdk-lib"; 3 | import { aws_lambda as lambda, Duration } from "aws-cdk-lib"; 4 | export class DefaultVisitor implements IAspect { 5 | constructor() {} 6 | public visit(node: IConstruct): void { 7 | if (node instanceof lambda.Function) { 8 | if(node.node.id === "myUserApiLambdaaddUser"){ 9 | node.addEnvironment("name","xyz") 10 | } 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /tutorials/tutorial06-customizing-infrastructure-using-aspects/my_user_api/editable_src/customMockLambdaLayer/mockData/addUser/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | addUser: [ 6 | { 7 | arguments: { 8 | name: "Elladine", 9 | }, 10 | response: { 11 | id: "Kial", 12 | name: "Myrtie", 13 | }, 14 | }, 15 | ], 16 | }, 17 | }; 18 | -------------------------------------------------------------------------------- /tutorials/tutorial06-customizing-infrastructure-using-aspects/my_user_api/editable_src/customMockLambdaLayer/mockData/addUser/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { User, MutationAddUserArgs, QueryUserArgs } from "../types"; 2 | 3 | export type TestCollection = { 4 | fields: { addUser: { arguments: MutationAddUserArgs; response: User }[] }; 5 | }; 6 | -------------------------------------------------------------------------------- /tutorials/tutorial06-customizing-infrastructure-using-aspects/my_user_api/editable_src/customMockLambdaLayer/mockData/user/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | user: [ 6 | { 7 | arguments: { 8 | id: "Jane", 9 | }, 10 | response: { 11 | id: "Yoshi", 12 | name: "Nana", 13 | }, 14 | }, 15 | ], 16 | }, 17 | }; 18 | -------------------------------------------------------------------------------- /tutorials/tutorial06-customizing-infrastructure-using-aspects/my_user_api/editable_src/customMockLambdaLayer/mockData/user/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { User, MutationAddUserArgs, QueryUserArgs } from "../types"; 2 | 3 | export type TestCollection = { 4 | fields: { user: { arguments: QueryUserArgs; response: User }[] }; 5 | }; 6 | -------------------------------------------------------------------------------- /tutorials/tutorial06-customizing-infrastructure-using-aspects/my_user_api/editable_src/customMockLambdaLayer/nodejs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lambda-layer", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "axios": "^0.21.1", 13 | "lodash.isequal": "^4.5.0" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /tutorials/tutorial06-customizing-infrastructure-using-aspects/my_user_api/editable_src/graphql/schema/schema.graphql: -------------------------------------------------------------------------------- 1 | scalar AWSDate 2 | scalar AWSTime 3 | scalar AWSDateTime 4 | scalar AWSTimestamp 5 | scalar AWSEmail 6 | scalar AWSJSON 7 | scalar AWSURL 8 | scalar AWSPhone 9 | scalar AWSIPAddress 10 | 11 | type User { 12 | id: String! 13 | name: String 14 | } 15 | 16 | type Query { 17 | user (id: String): User 18 | } 19 | 20 | type Mutation { 21 | addUser ( 22 | # Name for the User item 23 | name: String!): User! 24 | 25 | 26 | } -------------------------------------------------------------------------------- /tutorials/tutorial06-customizing-infrastructure-using-aspects/my_user_api/editable_src/lambdaLayer/nodejs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lambda-layer", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "axios": "^0.21.1", 13 | "gremlin": "^3.5.2", 14 | "lodash.isequal": "^4.5.0" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /tutorials/tutorial06-customizing-infrastructure-using-aspects/my_user_api/editable_src/lambda_stubs/addUser/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "adduser", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC" 12 | } 13 | -------------------------------------------------------------------------------- /tutorials/tutorial06-customizing-infrastructure-using-aspects/my_user_api/editable_src/lambda_stubs/user/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "user", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC" 12 | } 13 | -------------------------------------------------------------------------------- /tutorials/tutorial06-customizing-infrastructure-using-aspects/my_user_api/editable_src/panacloudconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "lambdas": { 3 | "user": { "is_mock": true, "memory_size": 128, "timeout": 6 }, 4 | "addUser": { "is_mock": true, "memory_size": 128, "timeout": 6 } 5 | }, 6 | "mockLambdaLayer": { "asset_path": "mock_lambda_layer" }, 7 | "stages": ["prd", "dev"] 8 | } 9 | -------------------------------------------------------------------------------- /tutorials/tutorial06-customizing-infrastructure-using-aspects/my_user_api/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | testEnvironment: "node", 3 | roots: ["/test"], 4 | testMatch: ["**/*.test.ts"], 5 | transform: { 6 | "^.+\\.tsx?$": "ts-jest", 7 | }, 8 | }; 9 | -------------------------------------------------------------------------------- /tutorials/tutorial06-customizing-infrastructure-using-aspects/my_user_api/mock_lambda/user/index.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "../../mock_lambda_layer/mockData/user/testCollectionsTypes"; 2 | var data = require("/opt/mockData/user/testCollections") as { 3 | testCollections: TestCollection; 4 | }; 5 | 6 | import * as AWS from "aws-sdk"; 7 | import { AppSyncResolverEvent } from "aws-lambda"; 8 | var isEqual = require("lodash.isequal"); 9 | 10 | exports.handler = async (event: AppSyncResolverEvent) => { 11 | let response = {}; 12 | data.testCollections.fields.user.forEach((v: any) => { 13 | if (v.arguments) { 14 | let equal = isEqual(v.arguments, event.arguments); 15 | if (equal) { 16 | response = v.response; 17 | } 18 | } else { 19 | response = v.response; 20 | } 21 | }); 22 | 23 | return response; 24 | }; 25 | -------------------------------------------------------------------------------- /tutorials/tutorial06-customizing-infrastructure-using-aspects/my_user_api/mock_lambda_layer/mockData/addUser/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | addUser: [ 6 | { 7 | arguments: { 8 | name: "Elladine", 9 | }, 10 | response: { 11 | id: "Kial", 12 | name: "Myrtie", 13 | }, 14 | }, 15 | ], 16 | }, 17 | }; 18 | -------------------------------------------------------------------------------- /tutorials/tutorial06-customizing-infrastructure-using-aspects/my_user_api/mock_lambda_layer/mockData/addUser/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { User, MutationAddUserArgs, QueryUserArgs } from "../types"; 2 | 3 | export type TestCollection = { 4 | fields: { addUser: { arguments: MutationAddUserArgs; response: User }[] }; 5 | }; 6 | -------------------------------------------------------------------------------- /tutorials/tutorial06-customizing-infrastructure-using-aspects/my_user_api/mock_lambda_layer/mockData/user/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | user: [ 6 | { 7 | arguments: { 8 | id: "Jane", 9 | }, 10 | response: { 11 | id: "Yoshi", 12 | name: "Nana", 13 | }, 14 | }, 15 | ], 16 | }, 17 | }; 18 | -------------------------------------------------------------------------------- /tutorials/tutorial06-customizing-infrastructure-using-aspects/my_user_api/mock_lambda_layer/mockData/user/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { User, MutationAddUserArgs, QueryUserArgs } from "../types"; 2 | 3 | export type TestCollection = { 4 | fields: { user: { arguments: QueryUserArgs; response: User }[] }; 5 | }; 6 | -------------------------------------------------------------------------------- /tutorials/tutorial06-customizing-infrastructure-using-aspects/my_user_api/mock_lambda_layer/nodejs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lambda-layer", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "axios": "^0.21.1", 13 | "lodash.isequal": "^4.5.0" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /tutorials/tutorial06-customizing-infrastructure-using-aspects/my_user_api/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "esModuleInterop": true, 4 | "resolveJsonModule": true, 5 | "target": "ES2018", 6 | "module": "commonjs", 7 | "lib": ["es2018"], 8 | "declaration": true, 9 | "strict": true, 10 | "noImplicitAny": true, 11 | "strictNullChecks": true, 12 | "noImplicitThis": true, 13 | "alwaysStrict": true, 14 | "noUnusedLocals": false, 15 | "noUnusedParameters": false, 16 | "noImplicitReturns": true, 17 | "noFallthroughCasesInSwitch": false, 18 | "inlineSourceMap": true, 19 | "inlineSources": true, 20 | "experimentalDecorators": true, 21 | "strictPropertyInitialization": false, 22 | "typeRoots": ["./node_modules/@types"] 23 | }, 24 | "exclude": ["cdk.out", "tests/apiTests"] 25 | } 26 | -------------------------------------------------------------------------------- /tutorials/tutorial06-customizing-infrastructure-using-aspects/user.graphql: -------------------------------------------------------------------------------- 1 | type User { 2 | id: String! 3 | name: String 4 | } 5 | 6 | type Query { 7 | user (id: String): User 8 | } 9 | 10 | type Mutation { 11 | addUser ( 12 | # Name for the User item 13 | name: String!): User! 14 | 15 | 16 | } -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/my_todo_api/.gitignore: -------------------------------------------------------------------------------- 1 | *.js 2 | !jest.config.js 3 | *.d.ts 4 | node_modules 5 | 6 | # CDK asset staging directory 7 | .cdk.staging 8 | cdk.out 9 | tests/apiTests/appsyncCredentials.json -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/my_todo_api/.npmignore: -------------------------------------------------------------------------------- 1 | *.ts 2 | !*.d.ts 3 | 4 | # CDK asset staging directory 5 | .cdk.staging 6 | cdk.out 7 | -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/my_todo_api/.panacloud/editable_src/graphql/schema/schema.graphql: -------------------------------------------------------------------------------- 1 | scalar AWSDate 2 | scalar AWSTime 3 | scalar AWSDateTime 4 | scalar AWSTimestamp 5 | scalar AWSEmail 6 | scalar AWSJSON 7 | scalar AWSURL 8 | scalar AWSPhone 9 | scalar AWSIPAddress 10 | 11 | type ToDo { 12 | id: ID! 13 | title: String! 14 | description: String! 15 | } 16 | 17 | input ToDoInput { 18 | title: String! 19 | description: String! 20 | } 21 | type Query { 22 | getToDo(toDoId: ID!): ToDo! 23 | getToDos: [ToDo!]! 24 | } 25 | 26 | type Mutation { 27 | createToDo(toDoInput: ToDoInput): ToDo 28 | updateToDo(toDoId: ID!, toDoInput: ToDoInput): ToDo 29 | deleteToDo(toDoId: ID!): String 30 | deleteToDos: String 31 | } -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/my_todo_api/.panacloud/editable_src/panacloudconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "lambdas": { 3 | "getToDo": { "is_mock": false, "memory_size": 128, "timeout": 6 }, 4 | "getToDos": { "is_mock": false, "memory_size": 128, "timeout": 6 }, 5 | "createToDo": { "is_mock": false, "memory_size": 128, "timeout": 6 }, 6 | "updateToDo": { "is_mock": false, "memory_size": 128, "timeout": 6 }, 7 | "deleteToDo": { "is_mock": false, "memory_size": 128, "timeout": 6 }, 8 | "deleteToDos": { "is_mock": false, "memory_size": 128, "timeout": 6 } 9 | }, 10 | "mockData": { "is_custom": false }, 11 | "stages": ["prd", "dev"] 12 | } 13 | -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/my_todo_api/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | {"files.exclude":{".panacloud":true}} -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/my_todo_api/bin/my_todo_api.ts: -------------------------------------------------------------------------------- 1 | import * as cdk from "aws-cdk-lib"; 2 | import { MyTodoApiStack } from "../lib/my_todo_api-stack"; 3 | const app: cdk.App = new cdk.App(); 4 | const deployEnv = process.env.STAGE; 5 | const stack = new MyTodoApiStack( 6 | app, 7 | deployEnv ? deployEnv + "-MyTodoApiStack" : "MyTodoApiStack", 8 | { prod: deployEnv } 9 | ); 10 | -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/my_todo_api/cdk.json: -------------------------------------------------------------------------------- 1 | { 2 | "app": "npx ts-node --prefer-ts-exts bin/my_todo_api.ts", 3 | "context": { 4 | "@aws-cdk/aws-apigateway:usagePlanKeyOrderInsensitiveId": true, 5 | "@aws-cdk/core:stackRelativeExports": "true", 6 | "@aws-cdk/aws-rds:lowercaseDbIdentifier": true, 7 | "@aws-cdk/aws-lambda:recognizeVersionProps": true, 8 | "@aws-cdk/aws-cloudfront:defaultSecurityPolicyTLSv1.2_2021": true 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/my_todo_api/editable_src/aspects/AspectController.ts: -------------------------------------------------------------------------------- 1 | import { Aspects } from "aws-cdk-lib"; 2 | import { Stack } from "aws-cdk-lib"; 3 | import { DefaultVisitor } from "./DefaultVisitor"; 4 | export class AspectController { 5 | constructor(scope: Stack, prod?: string) { 6 | Aspects.of(scope).add(new DefaultVisitor()); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/my_todo_api/editable_src/aspects/DefaultVisitor.ts: -------------------------------------------------------------------------------- 1 | import { IConstruct } from "constructs/lib/construct"; 2 | import { IAspect } from "aws-cdk-lib"; 3 | import { aws_lambda as lambda, Duration } from "aws-cdk-lib"; 4 | export class DefaultVisitor implements IAspect { 5 | constructor() {} 6 | public visit(node: IConstruct): void { 7 | if (node instanceof lambda.Function) { 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/my_todo_api/editable_src/customMockLambdaLayer/mockData/createToDo/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | createToDo: [ 6 | { 7 | arguments: { 8 | toDoInput: { 9 | title: "Tanya", 10 | description: "Othelia", 11 | }, 12 | }, 13 | response: { 14 | id: "01", 15 | title: "Kass", 16 | description: "Rita", 17 | }, 18 | }, 19 | ], 20 | }, 21 | }; 22 | -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/my_todo_api/editable_src/customMockLambdaLayer/mockData/createToDo/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { 2 | ToDo, 3 | MutationCreateToDoArgs, 4 | MutationUpdateToDoArgs, 5 | MutationDeleteToDoArgs, 6 | QueryGetToDoArgs, 7 | } from "../types"; 8 | 9 | export type TestCollection = { 10 | fields: { 11 | createToDo: { arguments: MutationCreateToDoArgs; response: ToDo }[]; 12 | }; 13 | }; 14 | -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/my_todo_api/editable_src/customMockLambdaLayer/mockData/deleteToDo/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | deleteToDo: [ 6 | { 7 | arguments: { 8 | toDoId: "01", 9 | }, 10 | response: { 11 | id: "01", 12 | title: "Ella", 13 | description: "Blancha", 14 | }, 15 | }, 16 | ], 17 | }, 18 | }; 19 | -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/my_todo_api/editable_src/customMockLambdaLayer/mockData/deleteToDo/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { 2 | ToDo, 3 | MutationCreateToDoArgs, 4 | MutationUpdateToDoArgs, 5 | MutationDeleteToDoArgs, 6 | QueryGetToDoArgs, 7 | } from "../types"; 8 | 9 | export type TestCollection = { 10 | fields: { 11 | deleteToDo: { arguments: MutationDeleteToDoArgs; response: ToDo }[]; 12 | }; 13 | }; 14 | -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/my_todo_api/editable_src/customMockLambdaLayer/mockData/deleteToDos/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | deleteToDos: [ 6 | { 7 | arguments: {}, 8 | response: [ 9 | { 10 | id: "01", 11 | title: "Frances", 12 | description: "Prue", 13 | }, 14 | { 15 | id: "01", 16 | title: "Dyanna", 17 | description: "Rosa", 18 | }, 19 | { 20 | id: "01", 21 | title: "Pandora", 22 | description: "Joellyn", 23 | }, 24 | ], 25 | }, 26 | ], 27 | }, 28 | }; 29 | -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/my_todo_api/editable_src/customMockLambdaLayer/mockData/deleteToDos/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { 2 | ToDo, 3 | MutationCreateToDoArgs, 4 | MutationUpdateToDoArgs, 5 | MutationDeleteToDoArgs, 6 | QueryGetToDoArgs, 7 | } from "../types"; 8 | 9 | export type TestCollection = { 10 | fields: { deleteToDos: { arguments: {}; response: ToDo[] }[] }; 11 | }; 12 | -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/my_todo_api/editable_src/customMockLambdaLayer/mockData/getToDo/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | getToDo: [ 6 | { 7 | arguments: { 8 | toDoId: "01", 9 | }, 10 | response: { 11 | id: "01", 12 | title: "Nancey", 13 | description: "Doe", 14 | }, 15 | }, 16 | ], 17 | }, 18 | }; 19 | -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/my_todo_api/editable_src/customMockLambdaLayer/mockData/getToDo/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { 2 | ToDo, 3 | MutationCreateToDoArgs, 4 | MutationUpdateToDoArgs, 5 | MutationDeleteToDoArgs, 6 | QueryGetToDoArgs, 7 | } from "../types"; 8 | 9 | export type TestCollection = { 10 | fields: { getToDo: { arguments: QueryGetToDoArgs; response: ToDo }[] }; 11 | }; 12 | -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/my_todo_api/editable_src/customMockLambdaLayer/mockData/getToDos/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | getToDos: [ 6 | { 7 | arguments: {}, 8 | response: [ 9 | { 10 | id: "01", 11 | title: "Mela", 12 | description: "Ainslee", 13 | }, 14 | { 15 | id: "01", 16 | title: "Waly", 17 | description: "Beverlie", 18 | }, 19 | { 20 | id: "01", 21 | title: "Rebekkah", 22 | description: "Rayna", 23 | }, 24 | ], 25 | }, 26 | ], 27 | }, 28 | }; 29 | -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/my_todo_api/editable_src/customMockLambdaLayer/mockData/getToDos/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { 2 | ToDo, 3 | MutationCreateToDoArgs, 4 | MutationUpdateToDoArgs, 5 | MutationDeleteToDoArgs, 6 | QueryGetToDoArgs, 7 | } from "../types"; 8 | 9 | export type TestCollection = { 10 | fields: { getToDos: { arguments: {}; response: ToDo[] }[] }; 11 | }; 12 | -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/my_todo_api/editable_src/customMockLambdaLayer/mockData/updateToDo/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | updateToDo: [ 6 | { 7 | arguments: { 8 | toDoId: "01", 9 | toDoInput: { 10 | title: "Florenza", 11 | description: "Tedi", 12 | }, 13 | }, 14 | response: { 15 | id: "01", 16 | title: "Casandra", 17 | description: "Riannon", 18 | }, 19 | }, 20 | ], 21 | }, 22 | }; 23 | -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/my_todo_api/editable_src/customMockLambdaLayer/mockData/updateToDo/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { 2 | ToDo, 3 | MutationCreateToDoArgs, 4 | MutationUpdateToDoArgs, 5 | MutationDeleteToDoArgs, 6 | QueryGetToDoArgs, 7 | } from "../types"; 8 | 9 | export type TestCollection = { 10 | fields: { 11 | updateToDo: { arguments: MutationUpdateToDoArgs; response: ToDo }[]; 12 | }; 13 | }; 14 | -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/my_todo_api/editable_src/customMockLambdaLayer/nodejs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lambda-layer", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "axios": "^0.21.1", 13 | "lodash.isequal": "^4.5.0" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/my_todo_api/editable_src/graphql/schema/schema.graphql: -------------------------------------------------------------------------------- 1 | scalar AWSDate 2 | scalar AWSTime 3 | scalar AWSDateTime 4 | scalar AWSTimestamp 5 | scalar AWSEmail 6 | scalar AWSJSON 7 | scalar AWSURL 8 | scalar AWSPhone 9 | scalar AWSIPAddress 10 | 11 | type ToDo { 12 | id: ID! 13 | title: String! 14 | description: String! 15 | } 16 | 17 | input ToDoInput { 18 | title: String! 19 | description: String! 20 | } 21 | type Query { 22 | getToDo(toDoId: ID!): ToDo! 23 | getToDos: [ToDo!]! 24 | } 25 | 26 | type Mutation { 27 | createToDo(toDoInput: ToDoInput): ToDo 28 | updateToDo(toDoId: ID!, toDoInput: ToDoInput): ToDo 29 | deleteToDo(toDoId: ID!): String 30 | deleteToDos: String 31 | } -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/my_todo_api/editable_src/lambdaLayer/nodejs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lambda-layer", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "axios": "^0.21.1", 13 | "gremlin": "^3.5.2", 14 | "lodash.isequal": "^4.5.0" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/my_todo_api/editable_src/lambda_stubs/createToDo/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "createtodo", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC" 12 | } 13 | -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/my_todo_api/editable_src/lambda_stubs/deleteToDo/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "deletetodo", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC" 12 | } 13 | -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/my_todo_api/editable_src/lambda_stubs/deleteToDos/index.ts: -------------------------------------------------------------------------------- 1 | var axios = require("axios"); 2 | import * as AWS from "aws-sdk"; 3 | import { AppSyncResolverEvent } from "aws-lambda"; 4 | import { process as gprocess } from "gremlin"; 5 | const initGremlin = require("/opt/utils/gremlin_init"); 6 | exports.handler = async (event: AppSyncResolverEvent) => { 7 | const { g, conn } = initGremlin.initializeGremlinClient( 8 | process.env.NEPTUNE_ENDPOINT! 9 | ); 10 | 11 | const result = await deleteToDos(g); 12 | return result; 13 | }; 14 | 15 | async function deleteToDos(g: gprocess.GraphTraversalSource) { 16 | await g.V().hasLabel("todo").drop().iterate(); 17 | return "Deleted all todos"; 18 | } 19 | -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/my_todo_api/editable_src/lambda_stubs/deleteToDos/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "deletetodos", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC" 12 | } 13 | -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/my_todo_api/editable_src/lambda_stubs/getToDo/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gettodo", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC" 12 | } 13 | -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/my_todo_api/editable_src/lambda_stubs/getToDos/index.ts: -------------------------------------------------------------------------------- 1 | var axios = require("axios"); 2 | import * as AWS from "aws-sdk"; 3 | import { AppSyncResolverEvent } from "aws-lambda"; 4 | import { process as gprocess } from "gremlin"; 5 | const initGremlin = require("/opt/utils/gremlin_init"); 6 | exports.handler = async (event: AppSyncResolverEvent) => { 7 | const { g, conn } = initGremlin.initializeGremlinClient( 8 | process.env.NEPTUNE_ENDPOINT! 9 | ); 10 | 11 | const result = await getToDos(g); 12 | return result; 13 | }; 14 | 15 | async function getToDos(g: gprocess.GraphTraversalSource) { 16 | let data = await g.V().hasLabel("todo").elementMap().toList(); 17 | 18 | return data; 19 | } 20 | -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/my_todo_api/editable_src/lambda_stubs/getToDos/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gettodos", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC" 12 | } 13 | -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/my_todo_api/editable_src/lambda_stubs/updateToDo/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "updatetodo", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC" 12 | } 13 | -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/my_todo_api/editable_src/panacloudconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "lambdas": { 3 | "getToDo": { "is_mock": false, "memory_size": 128, "timeout": 6 }, 4 | "getToDos": { "is_mock": false, "memory_size": 128, "timeout": 6 }, 5 | "createToDo": { "is_mock": false, "memory_size": 128, "timeout": 6 }, 6 | "updateToDo": { "is_mock": false, "memory_size": 128, "timeout": 6 }, 7 | "deleteToDo": { "is_mock": false, "memory_size": 128, "timeout": 6 }, 8 | "deleteToDos": { "is_mock": false, "memory_size": 128, "timeout": 6 } 9 | }, 10 | "mockData": { "is_custom": false }, 11 | "stages": ["prd", "dev"] 12 | } 13 | -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/my_todo_api/graphqlClient/data.json: -------------------------------------------------------------------------------- 1 | {"API_URL":"https://nj3htwjmdrhpbg5mtxf5ejjxqy.appsync-api.us-east-1.amazonaws.com/graphql","API_KEY":"da2-slyoguhgnrcrbkkt2ds5t76c3i"} 2 | -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/my_todo_api/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | testEnvironment: "node", 3 | roots: ["/test"], 4 | testMatch: ["**/*.test.ts"], 5 | transform: { 6 | "^.+\\.tsx?$": "ts-jest", 7 | }, 8 | }; 9 | -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/my_todo_api/mock_lambda/getToDo/index.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "../../mock_lambda_layer/mockData/getToDo/testCollectionsTypes"; 2 | var data = require("/opt/mockData/getToDo/testCollections") as { 3 | testCollections: TestCollection; 4 | }; 5 | 6 | import * as AWS from "aws-sdk"; 7 | import { AppSyncResolverEvent } from "aws-lambda"; 8 | var isEqual = require("lodash.isequal"); 9 | 10 | exports.handler = async (event: AppSyncResolverEvent) => { 11 | let response = {}; 12 | data.testCollections.fields.getToDo.forEach((v: any) => { 13 | if (v.arguments) { 14 | let equal = isEqual(v.arguments, event.arguments); 15 | if (equal) { 16 | response = v.response; 17 | } 18 | } else { 19 | response = v.response; 20 | } 21 | }); 22 | 23 | return response; 24 | }; 25 | -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/my_todo_api/mock_lambda/getToDos/index.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "../../mock_lambda_layer/mockData/getToDos/testCollectionsTypes"; 2 | var data = require("/opt/mockData/getToDos/testCollections") as { 3 | testCollections: TestCollection; 4 | }; 5 | 6 | import * as AWS from "aws-sdk"; 7 | import { AppSyncResolverEvent } from "aws-lambda"; 8 | var isEqual = require("lodash.isequal"); 9 | 10 | exports.handler = async (event: AppSyncResolverEvent) => { 11 | let response = {}; 12 | data.testCollections.fields.getToDos.forEach((v: any) => { 13 | if (v.arguments) { 14 | let equal = isEqual(v.arguments, event.arguments); 15 | if (equal) { 16 | response = v.response; 17 | } 18 | } else { 19 | response = v.response; 20 | } 21 | }); 22 | 23 | return response; 24 | }; 25 | -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/my_todo_api/mock_lambda_layer/mockData/createToDo/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | createToDo: [ 6 | { 7 | arguments: { 8 | toDoInput: { 9 | title: "Donnamarie", 10 | description: "Mirabelle", 11 | }, 12 | }, 13 | response: { 14 | id: "01", 15 | title: "Wren", 16 | description: "Dorine", 17 | }, 18 | }, 19 | ], 20 | }, 21 | }; 22 | -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/my_todo_api/mock_lambda_layer/mockData/createToDo/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { 2 | ToDo, 3 | MutationCreateToDoArgs, 4 | MutationUpdateToDoArgs, 5 | MutationDeleteToDoArgs, 6 | QueryGetToDoArgs, 7 | } from "../types"; 8 | 9 | export type TestCollection = { 10 | fields: { 11 | createToDo: { arguments: MutationCreateToDoArgs; response: ToDo }[]; 12 | }; 13 | }; 14 | -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/my_todo_api/mock_lambda_layer/mockData/deleteToDo/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | deleteToDo: [ 6 | { 7 | arguments: { 8 | toDoId: "01", 9 | }, 10 | response: "Clarisse", 11 | }, 12 | ], 13 | }, 14 | }; 15 | -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/my_todo_api/mock_lambda_layer/mockData/deleteToDo/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { 2 | ToDo, 3 | MutationCreateToDoArgs, 4 | MutationUpdateToDoArgs, 5 | MutationDeleteToDoArgs, 6 | QueryGetToDoArgs, 7 | } from "../types"; 8 | 9 | export type TestCollection = { 10 | fields: { 11 | deleteToDo: { arguments: MutationDeleteToDoArgs; response: String }[]; 12 | }; 13 | }; 14 | -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/my_todo_api/mock_lambda_layer/mockData/deleteToDos/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | deleteToDos: [ 6 | { 7 | arguments: {}, 8 | response: "Camille", 9 | }, 10 | ], 11 | }, 12 | }; 13 | -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/my_todo_api/mock_lambda_layer/mockData/deleteToDos/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { 2 | ToDo, 3 | MutationCreateToDoArgs, 4 | MutationUpdateToDoArgs, 5 | MutationDeleteToDoArgs, 6 | QueryGetToDoArgs, 7 | } from "../types"; 8 | 9 | export type TestCollection = { 10 | fields: { deleteToDos: { arguments: {}; response: String }[] }; 11 | }; 12 | -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/my_todo_api/mock_lambda_layer/mockData/getToDo/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | getToDo: [ 6 | { 7 | arguments: { 8 | toDoId: "01", 9 | }, 10 | response: { 11 | id: "01", 12 | title: "Annelise", 13 | description: "Lillian", 14 | }, 15 | }, 16 | ], 17 | }, 18 | }; 19 | -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/my_todo_api/mock_lambda_layer/mockData/getToDo/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { 2 | ToDo, 3 | MutationCreateToDoArgs, 4 | MutationUpdateToDoArgs, 5 | MutationDeleteToDoArgs, 6 | QueryGetToDoArgs, 7 | } from "../types"; 8 | 9 | export type TestCollection = { 10 | fields: { getToDo: { arguments: QueryGetToDoArgs; response: ToDo }[] }; 11 | }; 12 | -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/my_todo_api/mock_lambda_layer/mockData/getToDos/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | getToDos: [ 6 | { 7 | arguments: {}, 8 | response: [ 9 | { 10 | id: "01", 11 | title: "Mable", 12 | description: "Ilise", 13 | }, 14 | { 15 | id: "01", 16 | title: "Ailee", 17 | description: "Helga", 18 | }, 19 | { 20 | id: "01", 21 | title: "Farrah", 22 | description: "Sabrina", 23 | }, 24 | ], 25 | }, 26 | ], 27 | }, 28 | }; 29 | -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/my_todo_api/mock_lambda_layer/mockData/getToDos/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { 2 | ToDo, 3 | MutationCreateToDoArgs, 4 | MutationUpdateToDoArgs, 5 | MutationDeleteToDoArgs, 6 | QueryGetToDoArgs, 7 | } from "../types"; 8 | 9 | export type TestCollection = { 10 | fields: { getToDos: { arguments: {}; response: ToDo[] }[] }; 11 | }; 12 | -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/my_todo_api/mock_lambda_layer/mockData/updateToDo/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | updateToDo: [ 6 | { 7 | arguments: { 8 | toDoId: "01", 9 | toDoInput: { 10 | title: "Maren", 11 | description: "Malory", 12 | }, 13 | }, 14 | response: { 15 | id: "01", 16 | title: "Melitta", 17 | description: "Loleta", 18 | }, 19 | }, 20 | ], 21 | }, 22 | }; 23 | -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/my_todo_api/mock_lambda_layer/mockData/updateToDo/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { 2 | ToDo, 3 | MutationCreateToDoArgs, 4 | MutationUpdateToDoArgs, 5 | MutationDeleteToDoArgs, 6 | QueryGetToDoArgs, 7 | } from "../types"; 8 | 9 | export type TestCollection = { 10 | fields: { 11 | updateToDo: { arguments: MutationUpdateToDoArgs; response: ToDo }[]; 12 | }; 13 | }; 14 | -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/my_todo_api/mock_lambda_layer/nodejs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lambda-layer", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "axios": "^0.21.1", 13 | "lodash.isequal": "^4.5.0" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/my_todo_api/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "esModuleInterop": true, 4 | "resolveJsonModule": true, 5 | "target": "ES2018", 6 | "module": "commonjs", 7 | "lib": ["es2018"], 8 | "declaration": true, 9 | "strict": true, 10 | "noImplicitAny": true, 11 | "strictNullChecks": true, 12 | "noImplicitThis": true, 13 | "alwaysStrict": true, 14 | "noUnusedLocals": false, 15 | "noUnusedParameters": false, 16 | "noImplicitReturns": true, 17 | "noFallthroughCasesInSwitch": false, 18 | "inlineSourceMap": true, 19 | "inlineSources": true, 20 | "experimentalDecorators": true, 21 | "strictPropertyInitialization": false, 22 | "typeRoots": ["./node_modules/@types"] 23 | }, 24 | "exclude": ["cdk.out", "tests/apiTests"] 25 | } 26 | -------------------------------------------------------------------------------- /tutorials/tutorial07-todo-api-neptune-graph-db/todo.graphql: -------------------------------------------------------------------------------- 1 | type ToDo { 2 | id: ID! 3 | title: String! 4 | description: String! 5 | } 6 | 7 | input ToDoInput { 8 | title: String! 9 | description: String! 10 | } 11 | type Query { 12 | getToDo(toDoId: ID!): ToDo! 13 | getToDos: [ToDo!]! 14 | } 15 | 16 | type Mutation { 17 | createToDo(toDoInput: ToDoInput): ToDo 18 | updateToDo(toDoId: ID!, toDoInput: ToDoInput): ToDo 19 | deleteToDo(toDoId: ID!): ToDo 20 | deleteToDos: [ToDo!]! 21 | } -------------------------------------------------------------------------------- /tutorials/tutorial08-todo-api-aurora-relational-db/my_todo_api/.gitignore: -------------------------------------------------------------------------------- 1 | *.js 2 | !jest.config.js 3 | *.d.ts 4 | node_modules 5 | 6 | # CDK asset staging directory 7 | .cdk.staging 8 | cdk.out 9 | tests/apiTests/appsyncCredentials.json -------------------------------------------------------------------------------- /tutorials/tutorial08-todo-api-aurora-relational-db/my_todo_api/.npmignore: -------------------------------------------------------------------------------- 1 | *.ts 2 | !*.d.ts 3 | 4 | # CDK asset staging directory 5 | .cdk.staging 6 | cdk.out 7 | -------------------------------------------------------------------------------- /tutorials/tutorial08-todo-api-aurora-relational-db/my_todo_api/.panacloud/editable_src/graphql/schema/schema.graphql: -------------------------------------------------------------------------------- 1 | scalar AWSDate 2 | scalar AWSTime 3 | scalar AWSDateTime 4 | scalar AWSTimestamp 5 | scalar AWSEmail 6 | scalar AWSJSON 7 | scalar AWSURL 8 | scalar AWSPhone 9 | scalar AWSIPAddress 10 | 11 | type ToDo { 12 | id: ID! 13 | title: String! 14 | description: String! 15 | } 16 | 17 | input ToDoInput { 18 | title: String! 19 | description: String! 20 | } 21 | type Query { 22 | getToDo(toDoId: ID!): ToDo! 23 | getToDos: [ToDo!]! 24 | } 25 | 26 | type Mutation { 27 | createToDo(toDoInput: ToDoInput): ToDo 28 | updateToDo(toDoId: ID!, toDoInput: ToDoInput): ToDo 29 | deleteToDo(toDoId: ID!): ToDo 30 | deleteToDos: [ToDo!]! 31 | } -------------------------------------------------------------------------------- /tutorials/tutorial08-todo-api-aurora-relational-db/my_todo_api/.panacloud/editable_src/panacloudconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "lambdas": { 3 | "getToDo": { "is_mock": false, "memory_size": 128, "timeout": 6 }, 4 | "getToDos": { "is_mock": false, "memory_size": 128, "timeout": 6 }, 5 | "createToDo": { "is_mock": false, "memory_size": 128, "timeout": 6 }, 6 | "updateToDo": { "is_mock": false, "memory_size": 128, "timeout": 6 }, 7 | "deleteToDo": { "is_mock": false, "memory_size": 128, "timeout": 6 }, 8 | "deleteToDos": { "is_mock": false, "memory_size": 128, "timeout": 6 } 9 | }, 10 | "mockData": { "is_custom": false }, 11 | "stages": ["prd", "dev"] 12 | } 13 | -------------------------------------------------------------------------------- /tutorials/tutorial08-todo-api-aurora-relational-db/my_todo_api/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | {"files.exclude":{".panacloud":true}} -------------------------------------------------------------------------------- /tutorials/tutorial08-todo-api-aurora-relational-db/my_todo_api/bin/my_todo_api.ts: -------------------------------------------------------------------------------- 1 | import * as cdk from "aws-cdk-lib"; 2 | import { MyTodoApiStack } from "../lib/my_todo_api-stack"; 3 | const app: cdk.App = new cdk.App(); 4 | const deployEnv = process.env.STAGE; 5 | const stack = new MyTodoApiStack( 6 | app, 7 | deployEnv ? deployEnv + "-MyTodoApiStack" : "MyTodoApiStack", 8 | { prod: deployEnv } 9 | ); 10 | -------------------------------------------------------------------------------- /tutorials/tutorial08-todo-api-aurora-relational-db/my_todo_api/cdk.json: -------------------------------------------------------------------------------- 1 | { 2 | "app": "npx ts-node --prefer-ts-exts bin/my_todo_api.ts", 3 | "context": { 4 | "@aws-cdk/aws-apigateway:usagePlanKeyOrderInsensitiveId": true, 5 | "@aws-cdk/core:stackRelativeExports": "true", 6 | "@aws-cdk/aws-rds:lowercaseDbIdentifier": true, 7 | "@aws-cdk/aws-lambda:recognizeVersionProps": true, 8 | "@aws-cdk/aws-cloudfront:defaultSecurityPolicyTLSv1.2_2021": true 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /tutorials/tutorial08-todo-api-aurora-relational-db/my_todo_api/editable_src/aspects/AspectController.ts: -------------------------------------------------------------------------------- 1 | import { Aspects } from "aws-cdk-lib"; 2 | import { Stack } from "aws-cdk-lib"; 3 | import { DefaultVisitor } from "./DefaultVisitor"; 4 | export class AspectController { 5 | constructor(scope: Stack, prod?: string) { 6 | Aspects.of(scope).add(new DefaultVisitor()); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /tutorials/tutorial08-todo-api-aurora-relational-db/my_todo_api/editable_src/aspects/DefaultVisitor.ts: -------------------------------------------------------------------------------- 1 | import { IConstruct } from "constructs/lib/construct"; 2 | import { IAspect } from "aws-cdk-lib"; 3 | import { aws_lambda as lambda, Duration } from "aws-cdk-lib"; 4 | export class DefaultVisitor implements IAspect { 5 | constructor() {} 6 | public visit(node: IConstruct): void { 7 | if (node instanceof lambda.Function) { 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /tutorials/tutorial08-todo-api-aurora-relational-db/my_todo_api/editable_src/customMockLambdaLayer/mockData/createToDo/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | createToDo: [ 6 | { 7 | arguments: { 8 | toDoInput: { 9 | title: "Genevieve", 10 | description: "Maurita", 11 | }, 12 | }, 13 | response: { 14 | id: "01", 15 | title: "Misha", 16 | description: "Susan", 17 | }, 18 | }, 19 | ], 20 | }, 21 | }; 22 | -------------------------------------------------------------------------------- /tutorials/tutorial08-todo-api-aurora-relational-db/my_todo_api/editable_src/customMockLambdaLayer/mockData/createToDo/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { 2 | ToDo, 3 | MutationCreateToDoArgs, 4 | MutationUpdateToDoArgs, 5 | MutationDeleteToDoArgs, 6 | QueryGetToDoArgs, 7 | } from "../types"; 8 | 9 | export type TestCollection = { 10 | fields: { 11 | createToDo: { arguments: MutationCreateToDoArgs; response: ToDo }[]; 12 | }; 13 | }; 14 | -------------------------------------------------------------------------------- /tutorials/tutorial08-todo-api-aurora-relational-db/my_todo_api/editable_src/customMockLambdaLayer/mockData/deleteToDo/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | deleteToDo: [ 6 | { 7 | arguments: { 8 | toDoId: "01", 9 | }, 10 | response: { 11 | id: "01", 12 | title: "Madelaine", 13 | description: "Dita", 14 | }, 15 | }, 16 | ], 17 | }, 18 | }; 19 | -------------------------------------------------------------------------------- /tutorials/tutorial08-todo-api-aurora-relational-db/my_todo_api/editable_src/customMockLambdaLayer/mockData/deleteToDo/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { 2 | ToDo, 3 | MutationCreateToDoArgs, 4 | MutationUpdateToDoArgs, 5 | MutationDeleteToDoArgs, 6 | QueryGetToDoArgs, 7 | } from "../types"; 8 | 9 | export type TestCollection = { 10 | fields: { 11 | deleteToDo: { arguments: MutationDeleteToDoArgs; response: ToDo }[]; 12 | }; 13 | }; 14 | -------------------------------------------------------------------------------- /tutorials/tutorial08-todo-api-aurora-relational-db/my_todo_api/editable_src/customMockLambdaLayer/mockData/deleteToDos/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | deleteToDos: [ 6 | { 7 | arguments: {}, 8 | response: [ 9 | { 10 | id: "01", 11 | title: "Dolores", 12 | description: "Luelle", 13 | }, 14 | { 15 | id: "01", 16 | title: "Hope", 17 | description: "Rhona", 18 | }, 19 | { 20 | id: "01", 21 | title: "Teena", 22 | description: "Calida", 23 | }, 24 | ], 25 | }, 26 | ], 27 | }, 28 | }; 29 | -------------------------------------------------------------------------------- /tutorials/tutorial08-todo-api-aurora-relational-db/my_todo_api/editable_src/customMockLambdaLayer/mockData/deleteToDos/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { 2 | ToDo, 3 | MutationCreateToDoArgs, 4 | MutationUpdateToDoArgs, 5 | MutationDeleteToDoArgs, 6 | QueryGetToDoArgs, 7 | } from "../types"; 8 | 9 | export type TestCollection = { 10 | fields: { deleteToDos: { arguments: {}; response: ToDo[] }[] }; 11 | }; 12 | -------------------------------------------------------------------------------- /tutorials/tutorial08-todo-api-aurora-relational-db/my_todo_api/editable_src/customMockLambdaLayer/mockData/getToDo/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | getToDo: [ 6 | { 7 | arguments: { 8 | toDoId: "01", 9 | }, 10 | response: { 11 | id: "01", 12 | title: "Gilemette", 13 | description: "Therese", 14 | }, 15 | }, 16 | ], 17 | }, 18 | }; 19 | -------------------------------------------------------------------------------- /tutorials/tutorial08-todo-api-aurora-relational-db/my_todo_api/editable_src/customMockLambdaLayer/mockData/getToDo/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { 2 | ToDo, 3 | MutationCreateToDoArgs, 4 | MutationUpdateToDoArgs, 5 | MutationDeleteToDoArgs, 6 | QueryGetToDoArgs, 7 | } from "../types"; 8 | 9 | export type TestCollection = { 10 | fields: { getToDo: { arguments: QueryGetToDoArgs; response: ToDo }[] }; 11 | }; 12 | -------------------------------------------------------------------------------- /tutorials/tutorial08-todo-api-aurora-relational-db/my_todo_api/editable_src/customMockLambdaLayer/mockData/getToDos/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | getToDos: [ 6 | { 7 | arguments: {}, 8 | response: [ 9 | { 10 | id: "01", 11 | title: "Carine", 12 | description: "Miguelita", 13 | }, 14 | { 15 | id: "01", 16 | title: "Melessa", 17 | description: "Emmalynne", 18 | }, 19 | { 20 | id: "01", 21 | title: "Estrella", 22 | description: "Julianne", 23 | }, 24 | ], 25 | }, 26 | ], 27 | }, 28 | }; 29 | -------------------------------------------------------------------------------- /tutorials/tutorial08-todo-api-aurora-relational-db/my_todo_api/editable_src/customMockLambdaLayer/mockData/getToDos/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { 2 | ToDo, 3 | MutationCreateToDoArgs, 4 | MutationUpdateToDoArgs, 5 | MutationDeleteToDoArgs, 6 | QueryGetToDoArgs, 7 | } from "../types"; 8 | 9 | export type TestCollection = { 10 | fields: { getToDos: { arguments: {}; response: ToDo[] }[] }; 11 | }; 12 | -------------------------------------------------------------------------------- /tutorials/tutorial08-todo-api-aurora-relational-db/my_todo_api/editable_src/customMockLambdaLayer/mockData/updateToDo/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | updateToDo: [ 6 | { 7 | arguments: { 8 | toDoId: "01", 9 | toDoInput: { 10 | title: "Malissia", 11 | description: "Ethyl", 12 | }, 13 | }, 14 | response: { 15 | id: "01", 16 | title: "Glenn", 17 | description: "Luz", 18 | }, 19 | }, 20 | ], 21 | }, 22 | }; 23 | -------------------------------------------------------------------------------- /tutorials/tutorial08-todo-api-aurora-relational-db/my_todo_api/editable_src/customMockLambdaLayer/mockData/updateToDo/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { 2 | ToDo, 3 | MutationCreateToDoArgs, 4 | MutationUpdateToDoArgs, 5 | MutationDeleteToDoArgs, 6 | QueryGetToDoArgs, 7 | } from "../types"; 8 | 9 | export type TestCollection = { 10 | fields: { 11 | updateToDo: { arguments: MutationUpdateToDoArgs; response: ToDo }[]; 12 | }; 13 | }; 14 | -------------------------------------------------------------------------------- /tutorials/tutorial08-todo-api-aurora-relational-db/my_todo_api/editable_src/customMockLambdaLayer/nodejs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lambda-layer", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "axios": "^0.21.1", 13 | "lodash.isequal": "^4.5.0" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /tutorials/tutorial08-todo-api-aurora-relational-db/my_todo_api/editable_src/graphql/schema/schema.graphql: -------------------------------------------------------------------------------- 1 | scalar AWSDate 2 | scalar AWSTime 3 | scalar AWSDateTime 4 | scalar AWSTimestamp 5 | scalar AWSEmail 6 | scalar AWSJSON 7 | scalar AWSURL 8 | scalar AWSPhone 9 | scalar AWSIPAddress 10 | 11 | type ToDo { 12 | id: ID! 13 | title: String! 14 | description: String! 15 | } 16 | 17 | input ToDoInput { 18 | title: String! 19 | description: String! 20 | } 21 | type Query { 22 | getToDo(toDoId: ID!): ToDo! 23 | getToDos: [ToDo!]! 24 | } 25 | 26 | type Mutation { 27 | createToDo(toDoInput: ToDoInput): ToDo 28 | updateToDo(toDoId: ID!, toDoInput: ToDoInput): ToDo 29 | deleteToDo(toDoId: ID!): ToDo 30 | deleteToDos: [ToDo!]! 31 | } -------------------------------------------------------------------------------- /tutorials/tutorial08-todo-api-aurora-relational-db/my_todo_api/editable_src/lambdaLayer/nodejs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lambda-layer", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "axios": "^0.21.1", 13 | "data-api-client": "^1.2.0", 14 | "lodash.isequal": "^4.5.0" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /tutorials/tutorial08-todo-api-aurora-relational-db/my_todo_api/editable_src/lambda_stubs/createToDo/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "createtodo", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC" 12 | } 13 | -------------------------------------------------------------------------------- /tutorials/tutorial08-todo-api-aurora-relational-db/my_todo_api/editable_src/lambda_stubs/deleteToDo/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "deletetodo", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC" 12 | } 13 | -------------------------------------------------------------------------------- /tutorials/tutorial08-todo-api-aurora-relational-db/my_todo_api/editable_src/lambda_stubs/deleteToDos/index.ts: -------------------------------------------------------------------------------- 1 | var axios = require("axios"); 2 | import * as AWS from "aws-sdk"; 3 | import { AppSyncResolverEvent } from "aws-lambda"; 4 | const db = require("data-api-client")({ 5 | secretArn: process.env.SECRET_ARN, 6 | resourceArn: process.env.CLUSTER_ARN, 7 | database: process.env.DB_NAME, 8 | }); 9 | exports.handler = async (event: AppSyncResolverEvent) => { 10 | const result = await deleteToDos(); 11 | return result; 12 | }; 13 | 14 | async function deleteToDos() { 15 | await db.query( 16 | `CREATE TABLE IF NOT EXISTS todos (id serial, text TEXT,completed BOOLEAN, PRIMARY KEY (id))` 17 | ); 18 | const todo = await db.query(`DELETE FROM todos RETURNING *`); 19 | console.log(todo); 20 | return todo.records[0]; 21 | } 22 | -------------------------------------------------------------------------------- /tutorials/tutorial08-todo-api-aurora-relational-db/my_todo_api/editable_src/lambda_stubs/deleteToDos/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "deletetodos", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC" 12 | } 13 | -------------------------------------------------------------------------------- /tutorials/tutorial08-todo-api-aurora-relational-db/my_todo_api/editable_src/lambda_stubs/getToDo/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gettodo", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC" 12 | } 13 | -------------------------------------------------------------------------------- /tutorials/tutorial08-todo-api-aurora-relational-db/my_todo_api/editable_src/lambda_stubs/getToDos/index.ts: -------------------------------------------------------------------------------- 1 | var axios = require("axios"); 2 | import * as AWS from "aws-sdk"; 3 | import { AppSyncResolverEvent } from "aws-lambda"; 4 | const db = require("data-api-client")({ 5 | secretArn: process.env.SECRET_ARN, 6 | resourceArn: process.env.CLUSTER_ARN, 7 | database: process.env.DB_NAME, 8 | }); 9 | exports.handler = async (event: AppSyncResolverEvent) => { 10 | const result = await getToDos(); 11 | return result; 12 | }; 13 | 14 | async function getToDos() { 15 | await db.query( 16 | `CREATE TABLE IF NOT EXISTS todos (id serial, title TEXT,description TEXT, PRIMARY KEY (id))` 17 | ); 18 | const query = `SELECT * FROM Todos`; 19 | const todos = await db.query(query); 20 | return todos.records; 21 | } 22 | -------------------------------------------------------------------------------- /tutorials/tutorial08-todo-api-aurora-relational-db/my_todo_api/editable_src/lambda_stubs/getToDos/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gettodos", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC" 12 | } 13 | -------------------------------------------------------------------------------- /tutorials/tutorial08-todo-api-aurora-relational-db/my_todo_api/editable_src/lambda_stubs/updateToDo/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "updatetodo", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC" 12 | } 13 | -------------------------------------------------------------------------------- /tutorials/tutorial08-todo-api-aurora-relational-db/my_todo_api/editable_src/panacloudconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "lambdas": { 3 | "getToDo": { "is_mock": false, "memory_size": 128, "timeout": 6 }, 4 | "getToDos": { "is_mock": false, "memory_size": 128, "timeout": 6 }, 5 | "createToDo": { "is_mock": false, "memory_size": 128, "timeout": 6 }, 6 | "updateToDo": { "is_mock": false, "memory_size": 128, "timeout": 6 }, 7 | "deleteToDo": { "is_mock": false, "memory_size": 128, "timeout": 6 }, 8 | "deleteToDos": { "is_mock": false, "memory_size": 128, "timeout": 6 } 9 | }, 10 | "mockData": { "is_custom": false }, 11 | "stages": ["prd", "dev"] 12 | } 13 | -------------------------------------------------------------------------------- /tutorials/tutorial08-todo-api-aurora-relational-db/my_todo_api/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | testEnvironment: "node", 3 | roots: ["/test"], 4 | testMatch: ["**/*.test.ts"], 5 | transform: { 6 | "^.+\\.tsx?$": "ts-jest", 7 | }, 8 | }; 9 | -------------------------------------------------------------------------------- /tutorials/tutorial08-todo-api-aurora-relational-db/my_todo_api/mock_lambda/getToDo/index.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "../../mock_lambda_layer/mockData/getToDo/testCollectionsTypes"; 2 | var data = require("/opt/mockData/getToDo/testCollections") as { 3 | testCollections: TestCollection; 4 | }; 5 | 6 | import * as AWS from "aws-sdk"; 7 | import { AppSyncResolverEvent } from "aws-lambda"; 8 | var isEqual = require("lodash.isequal"); 9 | 10 | exports.handler = async (event: AppSyncResolverEvent) => { 11 | let response = {}; 12 | data.testCollections.fields.getToDo.forEach((v: any) => { 13 | if (v.arguments) { 14 | let equal = isEqual(v.arguments, event.arguments); 15 | if (equal) { 16 | response = v.response; 17 | } 18 | } else { 19 | response = v.response; 20 | } 21 | }); 22 | 23 | return response; 24 | }; 25 | -------------------------------------------------------------------------------- /tutorials/tutorial08-todo-api-aurora-relational-db/my_todo_api/mock_lambda_layer/mockData/createToDo/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | createToDo: [ 6 | { 7 | arguments: { 8 | toDoInput: { 9 | title: "Esmeralda", 10 | description: "Abbey", 11 | }, 12 | }, 13 | response: { 14 | id: "01", 15 | title: "Mame", 16 | description: "Simona", 17 | }, 18 | }, 19 | ], 20 | }, 21 | }; 22 | -------------------------------------------------------------------------------- /tutorials/tutorial08-todo-api-aurora-relational-db/my_todo_api/mock_lambda_layer/mockData/createToDo/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { 2 | ToDo, 3 | MutationCreateToDoArgs, 4 | MutationUpdateToDoArgs, 5 | MutationDeleteToDoArgs, 6 | QueryGetToDoArgs, 7 | } from "../types"; 8 | 9 | export type TestCollection = { 10 | fields: { 11 | createToDo: { arguments: MutationCreateToDoArgs; response: ToDo }[]; 12 | }; 13 | }; 14 | -------------------------------------------------------------------------------- /tutorials/tutorial08-todo-api-aurora-relational-db/my_todo_api/mock_lambda_layer/mockData/deleteToDo/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | deleteToDo: [ 6 | { 7 | arguments: { 8 | toDoId: "01", 9 | }, 10 | response: { 11 | id: "01", 12 | title: "Priscilla", 13 | description: "Sabine", 14 | }, 15 | }, 16 | ], 17 | }, 18 | }; 19 | -------------------------------------------------------------------------------- /tutorials/tutorial08-todo-api-aurora-relational-db/my_todo_api/mock_lambda_layer/mockData/deleteToDo/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { 2 | ToDo, 3 | MutationCreateToDoArgs, 4 | MutationUpdateToDoArgs, 5 | MutationDeleteToDoArgs, 6 | QueryGetToDoArgs, 7 | } from "../types"; 8 | 9 | export type TestCollection = { 10 | fields: { 11 | deleteToDo: { arguments: MutationDeleteToDoArgs; response: ToDo }[]; 12 | }; 13 | }; 14 | -------------------------------------------------------------------------------- /tutorials/tutorial08-todo-api-aurora-relational-db/my_todo_api/mock_lambda_layer/mockData/deleteToDos/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | deleteToDos: [ 6 | { 7 | arguments: {}, 8 | response: [ 9 | { 10 | id: "01", 11 | title: "Selie", 12 | description: "Brittaney", 13 | }, 14 | { 15 | id: "01", 16 | title: "Hilary", 17 | description: "Fionna", 18 | }, 19 | { 20 | id: "01", 21 | title: "Leesa", 22 | description: "Twila", 23 | }, 24 | ], 25 | }, 26 | ], 27 | }, 28 | }; 29 | -------------------------------------------------------------------------------- /tutorials/tutorial08-todo-api-aurora-relational-db/my_todo_api/mock_lambda_layer/mockData/deleteToDos/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { 2 | ToDo, 3 | MutationCreateToDoArgs, 4 | MutationUpdateToDoArgs, 5 | MutationDeleteToDoArgs, 6 | QueryGetToDoArgs, 7 | } from "../types"; 8 | 9 | export type TestCollection = { 10 | fields: { deleteToDos: { arguments: {}; response: ToDo[] }[] }; 11 | }; 12 | -------------------------------------------------------------------------------- /tutorials/tutorial08-todo-api-aurora-relational-db/my_todo_api/mock_lambda_layer/mockData/getToDo/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | getToDo: [ 6 | { 7 | arguments: { 8 | toDoId: "01", 9 | }, 10 | response: { 11 | id: "01", 12 | title: "Nanice", 13 | description: "Phillie", 14 | }, 15 | }, 16 | ], 17 | }, 18 | }; 19 | -------------------------------------------------------------------------------- /tutorials/tutorial08-todo-api-aurora-relational-db/my_todo_api/mock_lambda_layer/mockData/getToDo/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { 2 | ToDo, 3 | MutationCreateToDoArgs, 4 | MutationUpdateToDoArgs, 5 | MutationDeleteToDoArgs, 6 | QueryGetToDoArgs, 7 | } from "../types"; 8 | 9 | export type TestCollection = { 10 | fields: { getToDo: { arguments: QueryGetToDoArgs; response: ToDo }[] }; 11 | }; 12 | -------------------------------------------------------------------------------- /tutorials/tutorial08-todo-api-aurora-relational-db/my_todo_api/mock_lambda_layer/mockData/getToDos/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | getToDos: [ 6 | { 7 | arguments: {}, 8 | response: [ 9 | { 10 | id: "01", 11 | title: "Nana", 12 | description: "Natalee", 13 | }, 14 | { 15 | id: "01", 16 | title: "Maryellen", 17 | description: "Krissy", 18 | }, 19 | { 20 | id: "01", 21 | title: "Rebecca", 22 | description: "Storm", 23 | }, 24 | ], 25 | }, 26 | ], 27 | }, 28 | }; 29 | -------------------------------------------------------------------------------- /tutorials/tutorial08-todo-api-aurora-relational-db/my_todo_api/mock_lambda_layer/mockData/getToDos/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { 2 | ToDo, 3 | MutationCreateToDoArgs, 4 | MutationUpdateToDoArgs, 5 | MutationDeleteToDoArgs, 6 | QueryGetToDoArgs, 7 | } from "../types"; 8 | 9 | export type TestCollection = { 10 | fields: { getToDos: { arguments: {}; response: ToDo[] }[] }; 11 | }; 12 | -------------------------------------------------------------------------------- /tutorials/tutorial08-todo-api-aurora-relational-db/my_todo_api/mock_lambda_layer/mockData/updateToDo/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | updateToDo: [ 6 | { 7 | arguments: { 8 | toDoId: "01", 9 | toDoInput: { 10 | title: "Holli", 11 | description: "Danyette", 12 | }, 13 | }, 14 | response: { 15 | id: "01", 16 | title: "Rozanne", 17 | description: "Charil", 18 | }, 19 | }, 20 | ], 21 | }, 22 | }; 23 | -------------------------------------------------------------------------------- /tutorials/tutorial08-todo-api-aurora-relational-db/my_todo_api/mock_lambda_layer/mockData/updateToDo/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { 2 | ToDo, 3 | MutationCreateToDoArgs, 4 | MutationUpdateToDoArgs, 5 | MutationDeleteToDoArgs, 6 | QueryGetToDoArgs, 7 | } from "../types"; 8 | 9 | export type TestCollection = { 10 | fields: { 11 | updateToDo: { arguments: MutationUpdateToDoArgs; response: ToDo }[]; 12 | }; 13 | }; 14 | -------------------------------------------------------------------------------- /tutorials/tutorial08-todo-api-aurora-relational-db/my_todo_api/mock_lambda_layer/nodejs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lambda-layer", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "axios": "^0.21.1", 13 | "lodash.isequal": "^4.5.0" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /tutorials/tutorial08-todo-api-aurora-relational-db/my_todo_api/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "esModuleInterop": true, 4 | "resolveJsonModule": true, 5 | "target": "ES2018", 6 | "module": "commonjs", 7 | "lib": ["es2018"], 8 | "declaration": true, 9 | "strict": true, 10 | "noImplicitAny": true, 11 | "strictNullChecks": true, 12 | "noImplicitThis": true, 13 | "alwaysStrict": true, 14 | "noUnusedLocals": false, 15 | "noUnusedParameters": false, 16 | "noImplicitReturns": true, 17 | "noFallthroughCasesInSwitch": false, 18 | "inlineSourceMap": true, 19 | "inlineSources": true, 20 | "experimentalDecorators": true, 21 | "strictPropertyInitialization": false, 22 | "typeRoots": ["./node_modules/@types"] 23 | }, 24 | "exclude": ["cdk.out", "tests/apiTests"] 25 | } 26 | -------------------------------------------------------------------------------- /tutorials/tutorial08-todo-api-aurora-relational-db/todo.graphql: -------------------------------------------------------------------------------- 1 | type ToDo { 2 | id: ID! 3 | title: String! 4 | description: String! 5 | } 6 | 7 | input ToDoInput { 8 | title: String! 9 | description: String! 10 | } 11 | type Query { 12 | getToDo(toDoId: ID!): ToDo! 13 | getToDos: [ToDo!]! 14 | } 15 | 16 | type Mutation { 17 | createToDo(toDoInput: ToDoInput): ToDo 18 | updateToDo(toDoId: ID!, toDoInput: ToDoInput): ToDo 19 | deleteToDo(toDoId: ID!): ToDo 20 | deleteToDos: [ToDo!]! 21 | } -------------------------------------------------------------------------------- /tutorials/tutorial09-todo-api-dynamo-db/my_todo_api/.gitignore: -------------------------------------------------------------------------------- 1 | *.js 2 | !jest.config.js 3 | *.d.ts 4 | node_modules 5 | 6 | # CDK asset staging directory 7 | .cdk.staging 8 | cdk.out 9 | tests/apiTests/appsyncCredentials.json -------------------------------------------------------------------------------- /tutorials/tutorial09-todo-api-dynamo-db/my_todo_api/.npmignore: -------------------------------------------------------------------------------- 1 | *.ts 2 | !*.d.ts 3 | 4 | # CDK asset staging directory 5 | .cdk.staging 6 | cdk.out 7 | -------------------------------------------------------------------------------- /tutorials/tutorial09-todo-api-dynamo-db/my_todo_api/.panacloud/editable_src/graphql/schema/schema.graphql: -------------------------------------------------------------------------------- 1 | scalar AWSDate 2 | scalar AWSTime 3 | scalar AWSDateTime 4 | scalar AWSTimestamp 5 | scalar AWSEmail 6 | scalar AWSJSON 7 | scalar AWSURL 8 | scalar AWSPhone 9 | scalar AWSIPAddress 10 | 11 | type ToDo { 12 | id: ID! 13 | title: String! 14 | description: String! 15 | } 16 | 17 | input ToDoInput { 18 | title: String! 19 | description: String! 20 | } 21 | type Query { 22 | getToDos: [ToDo!]! 23 | } 24 | 25 | type Mutation { 26 | createToDo(toDoInput: ToDoInput): ToDo 27 | deleteToDo(toDoId: ID!): String 28 | } -------------------------------------------------------------------------------- /tutorials/tutorial09-todo-api-dynamo-db/my_todo_api/.panacloud/editable_src/panacloudconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "lambdas": { 3 | "getToDos": { "is_mock": false, "memory_size": 128, "timeout": 6 }, 4 | "createToDo": { "is_mock": false, "memory_size": 128, "timeout": 6 }, 5 | "deleteToDo": { "is_mock": false, "memory_size": 128, "timeout": 6 } 6 | }, 7 | "mockData": { "is_custom": false }, 8 | "stages": ["prd", "dev"] 9 | } 10 | -------------------------------------------------------------------------------- /tutorials/tutorial09-todo-api-dynamo-db/my_todo_api/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | {"files.exclude":{".panacloud":true}} -------------------------------------------------------------------------------- /tutorials/tutorial09-todo-api-dynamo-db/my_todo_api/bin/my_todo_api.ts: -------------------------------------------------------------------------------- 1 | import * as cdk from "aws-cdk-lib"; 2 | import { MyTodoApiStack } from "../lib/my_todo_api-stack"; 3 | const app: cdk.App = new cdk.App(); 4 | const deployEnv = process.env.STAGE; 5 | const stack = new MyTodoApiStack( 6 | app, 7 | deployEnv ? deployEnv + "-MyTodoApiStack" : "MyTodoApiStack", 8 | { prod: deployEnv } 9 | ); 10 | -------------------------------------------------------------------------------- /tutorials/tutorial09-todo-api-dynamo-db/my_todo_api/cdk.json: -------------------------------------------------------------------------------- 1 | { 2 | "app": "npx ts-node --prefer-ts-exts bin/my_todo_api.ts", 3 | "context": { 4 | "@aws-cdk/aws-apigateway:usagePlanKeyOrderInsensitiveId": true, 5 | "@aws-cdk/core:stackRelativeExports": "true", 6 | "@aws-cdk/aws-rds:lowercaseDbIdentifier": true, 7 | "@aws-cdk/aws-lambda:recognizeVersionProps": true, 8 | "@aws-cdk/aws-cloudfront:defaultSecurityPolicyTLSv1.2_2021": true 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /tutorials/tutorial09-todo-api-dynamo-db/my_todo_api/editable_src/aspects/AspectController.ts: -------------------------------------------------------------------------------- 1 | import { Aspects } from "aws-cdk-lib"; 2 | import { Stack } from "aws-cdk-lib"; 3 | import { DefaultVisitor } from "./DefaultVisitor"; 4 | export class AspectController { 5 | constructor(scope: Stack, prod?: string) { 6 | Aspects.of(scope).add(new DefaultVisitor()); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /tutorials/tutorial09-todo-api-dynamo-db/my_todo_api/editable_src/aspects/DefaultVisitor.ts: -------------------------------------------------------------------------------- 1 | import { IConstruct } from "constructs/lib/construct"; 2 | import { IAspect } from "aws-cdk-lib"; 3 | import { aws_lambda as lambda, Duration } from "aws-cdk-lib"; 4 | export class DefaultVisitor implements IAspect { 5 | constructor() {} 6 | public visit(node: IConstruct): void { 7 | if (node instanceof lambda.Function) { 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /tutorials/tutorial09-todo-api-dynamo-db/my_todo_api/editable_src/customMockLambdaLayer/mockData/createToDo/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | createToDo: [ 6 | { 7 | arguments: { 8 | toDoInput: { 9 | title: "Chantalle", 10 | description: "Leelah", 11 | }, 12 | }, 13 | response: { 14 | id: "01", 15 | title: "Edee", 16 | description: "Penelope", 17 | }, 18 | }, 19 | ], 20 | }, 21 | }; 22 | -------------------------------------------------------------------------------- /tutorials/tutorial09-todo-api-dynamo-db/my_todo_api/editable_src/customMockLambdaLayer/mockData/createToDo/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { 2 | ToDo, 3 | MutationCreateToDoArgs, 4 | MutationUpdateToDoArgs, 5 | MutationDeleteToDoArgs, 6 | QueryGetToDoArgs, 7 | } from "../types"; 8 | 9 | export type TestCollection = { 10 | fields: { 11 | createToDo: { arguments: MutationCreateToDoArgs; response: ToDo }[]; 12 | }; 13 | }; 14 | -------------------------------------------------------------------------------- /tutorials/tutorial09-todo-api-dynamo-db/my_todo_api/editable_src/customMockLambdaLayer/mockData/deleteToDo/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | deleteToDo: [ 6 | { 7 | arguments: { 8 | toDoId: "01", 9 | }, 10 | response: { 11 | id: "01", 12 | title: "Jany", 13 | description: "Denys", 14 | }, 15 | }, 16 | ], 17 | }, 18 | }; 19 | -------------------------------------------------------------------------------- /tutorials/tutorial09-todo-api-dynamo-db/my_todo_api/editable_src/customMockLambdaLayer/mockData/deleteToDo/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { 2 | ToDo, 3 | MutationCreateToDoArgs, 4 | MutationUpdateToDoArgs, 5 | MutationDeleteToDoArgs, 6 | QueryGetToDoArgs, 7 | } from "../types"; 8 | 9 | export type TestCollection = { 10 | fields: { 11 | deleteToDo: { arguments: MutationDeleteToDoArgs; response: ToDo }[]; 12 | }; 13 | }; 14 | -------------------------------------------------------------------------------- /tutorials/tutorial09-todo-api-dynamo-db/my_todo_api/editable_src/customMockLambdaLayer/mockData/deleteToDos/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | deleteToDos: [ 6 | { 7 | arguments: {}, 8 | response: [ 9 | { 10 | id: "01", 11 | title: "Crista", 12 | description: "Amabel", 13 | }, 14 | { 15 | id: "01", 16 | title: "Dniren", 17 | description: "Trescha", 18 | }, 19 | { 20 | id: "01", 21 | title: "Evelyn", 22 | description: "Paulie", 23 | }, 24 | ], 25 | }, 26 | ], 27 | }, 28 | }; 29 | -------------------------------------------------------------------------------- /tutorials/tutorial09-todo-api-dynamo-db/my_todo_api/editable_src/customMockLambdaLayer/mockData/deleteToDos/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { 2 | ToDo, 3 | MutationCreateToDoArgs, 4 | MutationUpdateToDoArgs, 5 | MutationDeleteToDoArgs, 6 | QueryGetToDoArgs, 7 | } from "../types"; 8 | 9 | export type TestCollection = { 10 | fields: { deleteToDos: { arguments: {}; response: ToDo[] }[] }; 11 | }; 12 | -------------------------------------------------------------------------------- /tutorials/tutorial09-todo-api-dynamo-db/my_todo_api/editable_src/customMockLambdaLayer/mockData/getToDo/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | getToDo: [ 6 | { 7 | arguments: { 8 | toDoId: "01", 9 | }, 10 | response: { 11 | id: "01", 12 | title: "Maryrose", 13 | description: "Mira", 14 | }, 15 | }, 16 | ], 17 | }, 18 | }; 19 | -------------------------------------------------------------------------------- /tutorials/tutorial09-todo-api-dynamo-db/my_todo_api/editable_src/customMockLambdaLayer/mockData/getToDo/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { 2 | ToDo, 3 | MutationCreateToDoArgs, 4 | MutationUpdateToDoArgs, 5 | MutationDeleteToDoArgs, 6 | QueryGetToDoArgs, 7 | } from "../types"; 8 | 9 | export type TestCollection = { 10 | fields: { getToDo: { arguments: QueryGetToDoArgs; response: ToDo }[] }; 11 | }; 12 | -------------------------------------------------------------------------------- /tutorials/tutorial09-todo-api-dynamo-db/my_todo_api/editable_src/customMockLambdaLayer/mockData/getToDos/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | getToDos: [ 6 | { 7 | arguments: {}, 8 | response: [ 9 | { 10 | id: "01", 11 | title: "Ilise", 12 | description: "Merola", 13 | }, 14 | { 15 | id: "01", 16 | title: "Reggie", 17 | description: "Minette", 18 | }, 19 | { 20 | id: "01", 21 | title: "Simonette", 22 | description: "Ted", 23 | }, 24 | ], 25 | }, 26 | ], 27 | }, 28 | }; 29 | -------------------------------------------------------------------------------- /tutorials/tutorial09-todo-api-dynamo-db/my_todo_api/editable_src/customMockLambdaLayer/mockData/getToDos/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { 2 | ToDo, 3 | MutationCreateToDoArgs, 4 | MutationUpdateToDoArgs, 5 | MutationDeleteToDoArgs, 6 | QueryGetToDoArgs, 7 | } from "../types"; 8 | 9 | export type TestCollection = { 10 | fields: { getToDos: { arguments: {}; response: ToDo[] }[] }; 11 | }; 12 | -------------------------------------------------------------------------------- /tutorials/tutorial09-todo-api-dynamo-db/my_todo_api/editable_src/customMockLambdaLayer/mockData/updateToDo/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | updateToDo: [ 6 | { 7 | arguments: { 8 | toDoId: "01", 9 | toDoInput: { 10 | title: "Junina", 11 | description: "Shalne", 12 | }, 13 | }, 14 | response: { 15 | id: "01", 16 | title: "Martita", 17 | description: "Philly", 18 | }, 19 | }, 20 | ], 21 | }, 22 | }; 23 | -------------------------------------------------------------------------------- /tutorials/tutorial09-todo-api-dynamo-db/my_todo_api/editable_src/customMockLambdaLayer/mockData/updateToDo/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { 2 | ToDo, 3 | MutationCreateToDoArgs, 4 | MutationUpdateToDoArgs, 5 | MutationDeleteToDoArgs, 6 | QueryGetToDoArgs, 7 | } from "../types"; 8 | 9 | export type TestCollection = { 10 | fields: { 11 | updateToDo: { arguments: MutationUpdateToDoArgs; response: ToDo }[]; 12 | }; 13 | }; 14 | -------------------------------------------------------------------------------- /tutorials/tutorial09-todo-api-dynamo-db/my_todo_api/editable_src/customMockLambdaLayer/nodejs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lambda-layer", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "axios": "^0.21.1", 13 | "lodash.isequal": "^4.5.0" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /tutorials/tutorial09-todo-api-dynamo-db/my_todo_api/editable_src/graphql/schema/schema.graphql: -------------------------------------------------------------------------------- 1 | scalar AWSDate 2 | scalar AWSTime 3 | scalar AWSDateTime 4 | scalar AWSTimestamp 5 | scalar AWSEmail 6 | scalar AWSJSON 7 | scalar AWSURL 8 | scalar AWSPhone 9 | scalar AWSIPAddress 10 | 11 | type ToDo { 12 | id: ID! 13 | title: String! 14 | description: String! 15 | } 16 | 17 | input ToDoInput { 18 | title: String! 19 | description: String! 20 | } 21 | type Query { 22 | getToDos: [ToDo!]! 23 | } 24 | 25 | type Mutation { 26 | createToDo(toDoInput: ToDoInput): ToDo 27 | deleteToDo(toDoId: ID!): String 28 | } -------------------------------------------------------------------------------- /tutorials/tutorial09-todo-api-dynamo-db/my_todo_api/editable_src/lambdaLayer/nodejs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lambda-layer", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "axios": "^0.21.1", 13 | "lodash.isequal": "^4.5.0" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /tutorials/tutorial09-todo-api-dynamo-db/my_todo_api/editable_src/lambda_stubs/createToDo/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "createtodo", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC" 12 | } 13 | -------------------------------------------------------------------------------- /tutorials/tutorial09-todo-api-dynamo-db/my_todo_api/editable_src/lambda_stubs/deleteToDo/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "deletetodo", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC" 12 | } 13 | -------------------------------------------------------------------------------- /tutorials/tutorial09-todo-api-dynamo-db/my_todo_api/editable_src/lambda_stubs/getToDos/index.ts: -------------------------------------------------------------------------------- 1 | var axios = require("axios"); 2 | import * as AWS from "aws-sdk"; 3 | import { AppSyncResolverEvent } from "aws-lambda"; 4 | const docClient = new AWS.DynamoDB.DocumentClient(); 5 | declare var process: { 6 | env: { 7 | TableName: string; 8 | }; 9 | }; 10 | 11 | exports.handler = async (event: AppSyncResolverEvent) => { 12 | const result = await getToDos(); 13 | return result; 14 | }; 15 | 16 | async function getToDos() { 17 | const params = { TableName: process.env.TableName }; 18 | const data = await docClient.scan(params).promise(); 19 | return data.Items; 20 | } 21 | -------------------------------------------------------------------------------- /tutorials/tutorial09-todo-api-dynamo-db/my_todo_api/editable_src/lambda_stubs/getToDos/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gettodos", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC" 12 | } 13 | -------------------------------------------------------------------------------- /tutorials/tutorial09-todo-api-dynamo-db/my_todo_api/editable_src/panacloudconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "lambdas": { 3 | "getToDos": { "is_mock": false, "memory_size": 128, "timeout": 6 }, 4 | "createToDo": { "is_mock": false, "memory_size": 128, "timeout": 6 }, 5 | "deleteToDo": { "is_mock": false, "memory_size": 128, "timeout": 6 } 6 | }, 7 | "mockData": { "is_custom": false }, 8 | "stages": ["prd", "dev"] 9 | } 10 | -------------------------------------------------------------------------------- /tutorials/tutorial09-todo-api-dynamo-db/my_todo_api/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | testEnvironment: "node", 3 | roots: ["/test"], 4 | testMatch: ["**/*.test.ts"], 5 | transform: { 6 | "^.+\\.tsx?$": "ts-jest", 7 | }, 8 | }; 9 | -------------------------------------------------------------------------------- /tutorials/tutorial09-todo-api-dynamo-db/my_todo_api/mock_lambda/createToDo/index.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "../../mock_lambda_layer/mockData/createToDo/testCollectionsTypes"; 2 | var data = require("/opt/mockData/createToDo/testCollections") as { 3 | testCollections: TestCollection; 4 | }; 5 | 6 | import * as AWS from "aws-sdk"; 7 | import { AppSyncResolverEvent } from "aws-lambda"; 8 | var isEqual = require("lodash.isequal"); 9 | 10 | exports.handler = async (event: AppSyncResolverEvent) => { 11 | let response = {}; 12 | data.testCollections.fields.createToDo.forEach((v: any) => { 13 | if (v.arguments) { 14 | let equal = isEqual(v.arguments, event.arguments); 15 | if (equal) { 16 | response = v.response; 17 | } 18 | } else { 19 | response = v.response; 20 | } 21 | }); 22 | 23 | return response; 24 | }; 25 | -------------------------------------------------------------------------------- /tutorials/tutorial09-todo-api-dynamo-db/my_todo_api/mock_lambda/getToDos/index.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "../../mock_lambda_layer/mockData/getToDos/testCollectionsTypes"; 2 | var data = require("/opt/mockData/getToDos/testCollections") as { 3 | testCollections: TestCollection; 4 | }; 5 | 6 | import * as AWS from "aws-sdk"; 7 | import { AppSyncResolverEvent } from "aws-lambda"; 8 | var isEqual = require("lodash.isequal"); 9 | 10 | exports.handler = async (event: AppSyncResolverEvent) => { 11 | let response = {}; 12 | data.testCollections.fields.getToDos.forEach((v: any) => { 13 | if (v.arguments) { 14 | let equal = isEqual(v.arguments, event.arguments); 15 | if (equal) { 16 | response = v.response; 17 | } 18 | } else { 19 | response = v.response; 20 | } 21 | }); 22 | 23 | return response; 24 | }; 25 | -------------------------------------------------------------------------------- /tutorials/tutorial09-todo-api-dynamo-db/my_todo_api/mock_lambda_layer/mockData/createToDo/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | createToDo: [ 6 | { 7 | arguments: { 8 | toDoInput: { 9 | title: "Janaye", 10 | description: "Katrine", 11 | }, 12 | }, 13 | response: { 14 | id: "01", 15 | title: "Marylynne", 16 | description: "Olimpia", 17 | }, 18 | }, 19 | ], 20 | }, 21 | }; 22 | -------------------------------------------------------------------------------- /tutorials/tutorial09-todo-api-dynamo-db/my_todo_api/mock_lambda_layer/mockData/createToDo/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { ToDo, MutationCreateToDoArgs, MutationDeleteToDoArgs } from "../types"; 2 | 3 | export type TestCollection = { 4 | fields: { 5 | createToDo: { arguments: MutationCreateToDoArgs; response: ToDo }[]; 6 | }; 7 | }; 8 | -------------------------------------------------------------------------------- /tutorials/tutorial09-todo-api-dynamo-db/my_todo_api/mock_lambda_layer/mockData/deleteToDo/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | deleteToDo: [ 6 | { 7 | arguments: { 8 | toDoId: "01", 9 | }, 10 | response: "Allx", 11 | }, 12 | ], 13 | }, 14 | }; 15 | -------------------------------------------------------------------------------- /tutorials/tutorial09-todo-api-dynamo-db/my_todo_api/mock_lambda_layer/mockData/deleteToDo/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { ToDo, MutationCreateToDoArgs, MutationDeleteToDoArgs } from "../types"; 2 | 3 | export type TestCollection = { 4 | fields: { 5 | deleteToDo: { arguments: MutationDeleteToDoArgs; response: String }[]; 6 | }; 7 | }; 8 | -------------------------------------------------------------------------------- /tutorials/tutorial09-todo-api-dynamo-db/my_todo_api/mock_lambda_layer/mockData/getToDos/testCollections.ts: -------------------------------------------------------------------------------- 1 | import { TestCollection } from "./testCollectionsTypes"; 2 | 3 | export const testCollections: TestCollection = { 4 | fields: { 5 | getToDos: [ 6 | { 7 | arguments: {}, 8 | response: [ 9 | { 10 | id: "01", 11 | title: "Meghan", 12 | description: "Sophey", 13 | }, 14 | { 15 | id: "01", 16 | title: "Josselyn", 17 | description: "Domeniga", 18 | }, 19 | { 20 | id: "01", 21 | title: "Melodee", 22 | description: "Lynna", 23 | }, 24 | ], 25 | }, 26 | ], 27 | }, 28 | }; 29 | -------------------------------------------------------------------------------- /tutorials/tutorial09-todo-api-dynamo-db/my_todo_api/mock_lambda_layer/mockData/getToDos/testCollectionsTypes.ts: -------------------------------------------------------------------------------- 1 | import { ToDo, MutationCreateToDoArgs, MutationDeleteToDoArgs } from "../types"; 2 | 3 | export type TestCollection = { 4 | fields: { getToDos: { arguments: {}; response: ToDo[] }[] }; 5 | }; 6 | -------------------------------------------------------------------------------- /tutorials/tutorial09-todo-api-dynamo-db/my_todo_api/mock_lambda_layer/nodejs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lambda-layer", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "axios": "^0.21.1", 13 | "lodash.isequal": "^4.5.0" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /tutorials/tutorial09-todo-api-dynamo-db/my_todo_api/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "esModuleInterop": true, 4 | "resolveJsonModule": true, 5 | "target": "ES2018", 6 | "module": "commonjs", 7 | "lib": ["es2018"], 8 | "declaration": true, 9 | "strict": true, 10 | "noImplicitAny": true, 11 | "strictNullChecks": true, 12 | "noImplicitThis": true, 13 | "alwaysStrict": true, 14 | "noUnusedLocals": false, 15 | "noUnusedParameters": false, 16 | "noImplicitReturns": true, 17 | "noFallthroughCasesInSwitch": false, 18 | "inlineSourceMap": true, 19 | "inlineSources": true, 20 | "experimentalDecorators": true, 21 | "strictPropertyInitialization": false, 22 | "typeRoots": ["./node_modules/@types"] 23 | }, 24 | "exclude": ["cdk.out", "tests/apiTests"] 25 | } 26 | -------------------------------------------------------------------------------- /tutorials/tutorial09-todo-api-dynamo-db/todo.graphql: -------------------------------------------------------------------------------- 1 | type ToDo { 2 | id: ID! 3 | title: String! 4 | description: String! 5 | } 6 | 7 | input ToDoInput { 8 | title: String! 9 | description: String! 10 | } 11 | type Query { 12 | getToDo(toDoId: ID!): ToDo! 13 | getToDos: [ToDo!]! 14 | } 15 | 16 | type Mutation { 17 | createToDo(toDoInput: ToDoInput): ToDo 18 | updateToDo(toDoId: ID!, toDoInput: ToDoInput): ToDo 19 | deleteToDo(toDoId: ID!): ToDo 20 | deleteToDos: [ToDo!]! 21 | } --------------------------------------------------------------------------------