Skip to content

Instantly share code, notes, and snippets.

View jgcmarins's full-sized avatar

João Marins jgcmarins

View GitHub Profile
import { createServer, proxy } from 'aws-serverless-express';
import connectDatabase from './database';
import app from './app';
export const handler = (event, ctx) => {
// This will re-use `cachedMongoConn` between function calls.
// See https://www.mongodb.com/blog/post/serverless-development-with-nodejs-aws-lambda-mongodb-atlas
// See https://docs.atlas.mongodb.com/best-practices-connecting-to-aws-lambda/
@jgcmarins
jgcmarins / app.ts
Created June 13, 2020 21:55
Node.js Serverless AWS Lambda Function: How to cache MongoDB connection and reuse it between function calls?
import 'isomorphic-fetch';
import Koa from 'koa';
import bodyParser from 'koa-bodyparser';
import convert from 'koa-convert';
import cors from 'koa-cors';
import koaLogger from 'koa-logger';
import Router from '@koa/router';
const app = new Koa();
CREATE OR REPLACE FUNCTION notify_rows_changes()
RETURNS trigger AS $$
DECLARE
record JSON;
BEGIN
record := row_to_json(CASE TG_OP
WHEN 'INSERT' THEN NEW
WHEN 'UPDATE' THEN NEW
ELSE OLD
END);
@jgcmarins
jgcmarins / RazzleStack.ts
Last active January 20, 2021 19:21
Deploy Razzle Apps to AWS Lambda using AWS CDK (https://aws.amazon.com/cdk/)
import * as CDK from '@aws-cdk/core';
import * as S3 from '@aws-cdk/aws-s3';
import * as S3Deployment from '@aws-cdk/aws-s3-deployment';
import * as Lambda from '@aws-cdk/aws-lambda';
import * as APIGateway from '@aws-cdk/aws-apigateway';
import * as SSM from '@aws-cdk/aws-ssm';
import * as SecretsManager from '@aws-cdk/aws-secretsmanager';
import { ConfigProps, getParam, ModeStack } from './helpers';
@jgcmarins
jgcmarins / useSWReg.tsx
Created May 26, 2020 12:32 — forked from sibelius/useSWReg.tsx
use Service Worker Registration hook
import firebase from 'firebase/app';
import 'firebase/messaging';
import { useEffect, useRef } from 'react';
import config from '../config';
import firebaseConfig from './firebaseConfig';
import { PushTokenAddMutation } from './__generated__/PushTokenAddMutation.graphql';
import { PushTokenAdd, USER_PUSHENDPOINT_TYPE } from './PushTokenAddMutation';
- name: Restore yarn workspaces
id: yarn-cache
uses: actions/cache@master
with:
path: |
node_modules
*/*/node_modules
key: ${{ runner.os }}-${{ hashFiles('**/yarn.lock') }}
- name: Install dependencies
if: steps.yarn-cache.outputs.cache-hit != 'true'
import rules from "../rbac-rules";
const check = (rules, role, action, data) => {
const permissions = rules[role];
if (!permissions) {
// role is not present in the rules
return false;
}
const staticPermissions = permissions.static;
@jgcmarins
jgcmarins / FeatureFlag.tsx
Created May 6, 2020 14:36 — forked from sibelius/FeatureFlag.tsx
Basic Feature Flag implementation using React.Context
import React, { useContext, useCallback } from 'react';
export const FeatureFlagContext = React.createContext<string[]>([]);
export const useFeatureFlag = () => {
const features = useContext<string[]>(FeatureFlagContext);
const hasFeature = useCallback(
(feature: string) => {
return features.includes(feature);
@jgcmarins
jgcmarins / webpack.config.js
Created April 28, 2020 13:20 — forked from sibelius/webpack.config.js
run node files using webpack
const path = require('path');
const nodeExternals = require('webpack-node-externals');
const cwd = process.cwd();
export const outputPath = path.join(cwd, '.webpack');
export const outputFilename = 'bundle.js';
export default {
@jgcmarins
jgcmarins / babel.config.js
Created April 24, 2020 23:37
Webpack configs for Node.js backends to run both locally and on AWS Lambda
module.exports = {
presets: [
'@babel/preset-react',
[
'@babel/preset-env',
{
targets: {
node: 'current',
},
},