diff --git a/.gitignore b/.gitignore index df3a2bf..49d3b55 100644 --- a/.gitignore +++ b/.gitignore @@ -12,7 +12,7 @@ private.* ProserveHireAppCDK/ coverage/ test.* -lib/ +# lib/ package-lock.json .gitlab-ci.yml template.md \ No newline at end of file diff --git a/lib/api/index.js b/lib/api/index.js new file mode 100644 index 0000000..2cd4fc9 --- /dev/null +++ b/lib/api/index.js @@ -0,0 +1,68 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AppSyncStack = void 0; +const schema_1 = require("./schema"); +const util_1 = require("../util"); +const table_1 = require("../db/table"); +const aws_appsync_1 = require("aws-cdk-lib/aws-appsync"); +class AppSyncStack { + constructor(scope, id, props) { + this.scope = scope; + this.id = id; + this.props = props; + this.tables = []; + this.data = []; + this.schema = new schema_1.AppSyncSchema(); + this.tables = props.tables.reduce((acc, table) => { + let inst; + if (table instanceof table_1.DbTable) { + if (this.props.tableProps) + throw new Error(`Cannot pass additional table props when using already-instantiated DbTable instance for table ${table.tableName}`); + inst = table; + } + else { + if (props.tableProps) + table.tableProps = { + ...table.tableProps || {}, + ...props.tableProps + }; + inst = new table_1.DbTable(this.scope, table, table.prefix); + } + const res = this.addTableSchema(inst); + if (res) + acc.push(res); + return acc; + }, []); + this.schema.initTypes(this.props.schemaTypes); + this.api = this.getApi(this.schema, props.config, props.apiProps); + this.tables = this.tables.map(table => this.addTableApi(table)); + } + get config() { + return this.props.config; + } + getApi(schema, authorizationConfig, apiProps) { + const nm = (0, util_1.getName)(this.id, 'GraphQlApi'); + return new aws_appsync_1.GraphqlApi(this.scope, nm, { + name: nm, + schema, + authorizationConfig, + xrayEnabled: true, + ...(apiProps || {}) + }); + } + addTableSchema($table) { + const table = this.schema.addTable($table); + if (table) + this.tables.push(table); + return table; + } + addTableApi(table) { + table.addApi(this.api, this.schema); + return table; + } + validateTable(table) { + return (0, util_1.validateTable)(table); + } +} +exports.AppSyncStack = AppSyncStack; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHFDQUF5QztBQUN6QyxrQ0FBaUQ7QUFDakQsdUNBQXNDO0FBRXRDLHlEQUtpQztBQVVqQyxNQUFhLFlBQVk7SUFNckIsWUFDVyxLQUFnQixFQUNiLEVBQVUsRUFDWixLQUF3QjtRQUZ6QixVQUFLLEdBQUwsS0FBSyxDQUFXO1FBQ2IsT0FBRSxHQUFGLEVBQUUsQ0FBUTtRQUNaLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBTnBDLFdBQU0sR0FBYyxFQUFFLENBQUE7UUFDdEIsU0FBSSxHQUF5QixFQUFFLENBQUM7UUFPNUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLHNCQUFhLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQzdDLElBQUksSUFBWSxDQUFBO1lBQ2hCLElBQUksS0FBSyxZQUFZLGVBQU8sRUFBRTtnQkFDMUIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVU7b0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxpR0FBaUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7Z0JBQy9KLElBQUksR0FBRyxLQUFLLENBQUM7YUFDaEI7aUJBQU07Z0JBQ0gsSUFBSSxLQUFLLENBQUMsVUFBVTtvQkFBRSxLQUFLLENBQUMsVUFBVSxHQUFHO3dCQUNyQyxHQUFHLEtBQUssQ0FBQyxVQUFVLElBQUksRUFBRTt3QkFDekIsR0FBRyxLQUFLLENBQUMsVUFBVTtxQkFDdEIsQ0FBQTtnQkFDRCxJQUFJLEdBQUcsSUFBSSxlQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUcsS0FBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUN4RTtZQUNELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEMsSUFBSSxHQUFHO2dCQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdkIsT0FBTyxHQUFHLENBQUM7UUFDZixDQUFDLEVBQUUsRUFBZSxDQUFDLENBQUM7UUFDcEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNsRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDTixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQzdCLENBQUM7SUFFUyxNQUFNLENBQUMsTUFBZSxFQUFFLG1CQUF3QyxFQUFFLFFBQTBCO1FBQ2xHLE1BQU0sRUFBRSxHQUFHLElBQUEsY0FBTyxFQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDMUMsT0FBTyxJQUFJLHdCQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDbEMsSUFBSSxFQUFFLEVBQUU7WUFDUixNQUFNO1lBQ04sbUJBQW1CO1lBQ25CLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLEdBQUcsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO1NBQ3RCLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxjQUFjLENBQUMsTUFBYztRQUN6QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQyxJQUFJLEtBQUs7WUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQyxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQWM7UUFDdEIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQyxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQWM7UUFDeEIsT0FBTyxJQUFBLG9CQUFhLEVBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQztDQUNKO0FBOURELG9DQThEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgQXBwU3luY1NjaGVtYSB9IGZyb20gJy4vc2NoZW1hJztcbmltcG9ydCB7IGdldE5hbWUsIHZhbGlkYXRlVGFibGUgfSBmcm9tICcuLi91dGlsJztcbmltcG9ydCB7IERiVGFibGUgfSBmcm9tICcuLi9kYi90YWJsZSc7XG5pbXBvcnQgeyBTY2hlbWFUYWJsZSwgR3JhcGhRbFR5cGVMaXN0LCBBcHBzeW5jQXBpUHJvcHMsIER5bmFtb1RhYmxlUHJvcHMgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge1xuICAgIEdyYXBocWxBcGksXG4gICAgSVNjaGVtYSxcbiAgICBEeW5hbW9EYkRhdGFTb3VyY2UsXG4gICAgQXV0aG9yaXphdGlvbkNvbmZpZ1xufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtYXBwc3luYyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwU3luY1N0YWNrUHJvcHMge1xuICAgIGNvbmZpZzogQXV0aG9yaXphdGlvbkNvbmZpZ1xuICAgIHRhYmxlczogKERiVGFibGUgfCBTY2hlbWFUYWJsZSlbXVxuICAgIHNjaGVtYVR5cGVzPzogR3JhcGhRbFR5cGVMaXN0XG4gICAgYXBpUHJvcHM/OiBBcHBzeW5jQXBpUHJvcHNcbiAgICB0YWJsZVByb3BzPzogRHluYW1vVGFibGVQcm9wc1xufVxuXG5leHBvcnQgY2xhc3MgQXBwU3luY1N0YWNrIHtcbiAgICBhcGk6IEdyYXBocWxBcGlcbiAgICBzY2hlbWE6IEFwcFN5bmNTY2hlbWFcbiAgICB0YWJsZXM6IERiVGFibGVbXSA9IFtdXG4gICAgZGF0YTogRHluYW1vRGJEYXRhU291cmNlW10gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgc2NvcGU6IENvbnN0cnVjdCxcbiAgICAgICAgcHJvdGVjdGVkIGlkOiBzdHJpbmcsXG4gICAgICAgIHByaXZhdGUgcHJvcHM6IEFwcFN5bmNTdGFja1Byb3BzXG4gICAgKSB7XG4gICAgICAgIHRoaXMuc2NoZW1hID0gbmV3IEFwcFN5bmNTY2hlbWEoKTtcbiAgICAgICAgdGhpcy50YWJsZXMgPSBwcm9wcy50YWJsZXMucmVkdWNlKChhY2MsIHRhYmxlKSA9PiB7XG4gICAgICAgICAgICBsZXQgaW5zdDpEYlRhYmxlXG4gICAgICAgICAgICBpZiAodGFibGUgaW5zdGFuY2VvZiBEYlRhYmxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucHJvcHMudGFibGVQcm9wcykgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcGFzcyBhZGRpdGlvbmFsIHRhYmxlIHByb3BzIHdoZW4gdXNpbmcgYWxyZWFkeS1pbnN0YW50aWF0ZWQgRGJUYWJsZSBpbnN0YW5jZSBmb3IgdGFibGUgJHt0YWJsZS50YWJsZU5hbWV9YCk7XG4gICAgICAgICAgICAgICAgaW5zdCA9IHRhYmxlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAocHJvcHMudGFibGVQcm9wcykgdGFibGUudGFibGVQcm9wcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4udGFibGUudGFibGVQcm9wcyB8fCB7fSxcbiAgICAgICAgICAgICAgICAgICAgLi4ucHJvcHMudGFibGVQcm9wc1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpbnN0ID0gbmV3IERiVGFibGUodGhpcy5zY29wZSwgdGFibGUsICh0YWJsZSBhcyBTY2hlbWFUYWJsZSkucHJlZml4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IHRoaXMuYWRkVGFibGVTY2hlbWEoaW5zdCk7XG4gICAgICAgICAgICBpZiAocmVzKSBhY2MucHVzaChyZXMpO1xuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSwgW10gYXMgRGJUYWJsZVtdKTtcbiAgICAgICAgdGhpcy5zY2hlbWEuaW5pdFR5cGVzKHRoaXMucHJvcHMuc2NoZW1hVHlwZXMpO1xuICAgICAgICB0aGlzLmFwaSA9IHRoaXMuZ2V0QXBpKHRoaXMuc2NoZW1hLCBwcm9wcy5jb25maWcsIHByb3BzLmFwaVByb3BzKTtcbiAgICAgICAgdGhpcy50YWJsZXMgPSB0aGlzLnRhYmxlcy5tYXAodGFibGUgPT4gdGhpcy5hZGRUYWJsZUFwaSh0YWJsZSkpO1xuICAgIH1cblxuICAgIGdldCBjb25maWcoKTogQXV0aG9yaXphdGlvbkNvbmZpZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLmNvbmZpZztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0QXBpKHNjaGVtYTogSVNjaGVtYSwgYXV0aG9yaXphdGlvbkNvbmZpZzogQXV0aG9yaXphdGlvbkNvbmZpZywgYXBpUHJvcHM/OiBBcHBzeW5jQXBpUHJvcHMpOiBHcmFwaHFsQXBpIHtcbiAgICAgICAgY29uc3Qgbm0gPSBnZXROYW1lKHRoaXMuaWQsICdHcmFwaFFsQXBpJyk7XG4gICAgICAgIHJldHVybiBuZXcgR3JhcGhxbEFwaSh0aGlzLnNjb3BlLCBubSwge1xuICAgICAgICAgICAgbmFtZTogbm0sXG4gICAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgICBhdXRob3JpemF0aW9uQ29uZmlnLFxuICAgICAgICAgICAgeHJheUVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICAuLi4oYXBpUHJvcHMgfHwge30pXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFkZFRhYmxlU2NoZW1hKCR0YWJsZTpEYlRhYmxlKTogRGJUYWJsZSB8IGZhbHNlIHtcbiAgICAgICAgY29uc3QgdGFibGUgPSB0aGlzLnNjaGVtYS5hZGRUYWJsZSgkdGFibGUpO1xuICAgICAgICBpZiAodGFibGUpIHRoaXMudGFibGVzLnB1c2godGFibGUpO1xuICAgICAgICByZXR1cm4gdGFibGU7XG4gICAgfVxuXG4gICAgYWRkVGFibGVBcGkodGFibGU6IERiVGFibGUpOiBEYlRhYmxlIHtcbiAgICAgICAgdGFibGUuYWRkQXBpKHRoaXMuYXBpLCB0aGlzLnNjaGVtYSk7XG4gICAgICAgIHJldHVybiB0YWJsZTtcbiAgICB9XG5cbiAgICB2YWxpZGF0ZVRhYmxlKHRhYmxlOiBEYlRhYmxlKSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZVRhYmxlKHRhYmxlKTtcbiAgICB9XG59XG4iXX0= \ No newline at end of file diff --git a/lib/api/schema-alpha.js b/lib/api/schema-alpha.js new file mode 100644 index 0000000..090b511 --- /dev/null +++ b/lib/api/schema-alpha.js @@ -0,0 +1,99 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SchemaAlpha = void 0; +const aws_appsync_alpha_1 = require("@aws-cdk/aws-appsync-alpha"); +const aws_cdk_lib_1 = require("aws-cdk-lib"); +/** + * Class based on aws-appsync alpha Schema class, + * deprecated in stable version but needed for + * building schema in-progress + */ +class SchemaAlpha { + constructor() { + this.baseTypes = []; + this.def = ''; + } + bind(api) { + return { + apiId: api.apiId, + definition: aws_cdk_lib_1.Lazy.string({ + produce: () => this.baseTypes.reduce((acc, type) => `${acc}${type._bindToGraphqlApi(api).toString()}\n`, `${this.declareSchema()}${this.def}`) + }) + }; + } + getDefinition(api) { + return this.baseTypes.reduce((acc, type) => `${acc}${type._bindToGraphqlApi(api).toString()}\n`, `${this.declareSchema()}${this.def}`); + } + addToSchema(addition, delimiter = '') { + this.def += `${delimiter}${addition}\n`; + } + addQuery(fieldName, field) { + if (!this.query) { + this.query = new aws_appsync_alpha_1.ObjectType('Query', { definition: {} }); + this.addType(this.query); + } + ; + this.query.addField({ fieldName, field }); + return this.query; + } + addMutation(fieldName, field) { + if (!this.mutation) { + this.mutation = new aws_appsync_alpha_1.ObjectType('Mutation', { definition: {} }); + this.addType(this.mutation); + } + ; + this.mutation.addField({ fieldName, field }); + return this.mutation; + } + addSubscription(fieldName, field) { + var _a, _b; + if (!this.subscription) { + this.subscription = new aws_appsync_alpha_1.ObjectType('Subscription', { definition: {} }); + this.addType(this.subscription); + } + const directives = (_b = (_a = field.fieldOptions) === null || _a === void 0 ? void 0 : _a.directives) === null || _b === void 0 ? void 0 : _b.filter((directive) => directive.mutationFields); + if (directives && directives.length > 1) { + throw new Error(`Subscription fields must not have more than one directive. Received: ${directives.length}`); + } + this.subscription.addField({ fieldName, field }); + return this.subscription; + } + addType(type) { + this.baseTypes.push(type); + return type; + } + declareSchema() { + if (!this.query && !this.mutation && !this.subscription) { + return ''; + } + const list = ['query', 'mutation', 'subscription']; + return this.shapeAddition({ + prefix: 'schema', + fields: list.map((key) => { var _a; return this[key] ? `${key}: ${(_a = this[key]) === null || _a === void 0 ? void 0 : _a.name}` : ''; }) + .filter((field) => field != ''), + }) + '\n'; + } + shapeAddition(options) { + const typeName = () => { return options.name ? ` ${options.name}` : ''; }; + const interfaces = this.generateInterfaces(options.interfaceTypes); + const directives = this.generateDirectives({ + directives: options.directives, + modes: options.modes, + }); + return options.fields.reduce((acc, field) => `${acc} ${field}\n`, `${options.prefix}${typeName()}${interfaces}${directives} {\n`) + '}'; + } + generateInterfaces(interfaceTypes) { + if (!interfaceTypes || interfaceTypes.length === 0) + return ''; + return interfaceTypes.reduce((acc, interfaceType) => `${acc} ${interfaceType.name} &`, ' implements').slice(0, -2); + } + generateDirectives(options) { + if (!options.directives || options.directives.length === 0) + return ''; + // reduce over all directives and get string version of the directive + // pass in the auth modes for checks to happen on compile time + return options.directives.reduce((acc, directive) => { var _a; return `${acc}${directive._bindToAuthModes(options.modes).toString()}${(_a = options.delimiter) !== null && _a !== void 0 ? _a : ' '}`; }, ' ').slice(0, -1); + } +} +exports.SchemaAlpha = SchemaAlpha; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLWFscGhhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaS9zY2hlbWEtYWxwaGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0Esa0VBTW9DO0FBQ3BDLDZDQUFtQztBQUVuQzs7OztHQUlHO0FBQ0gsTUFBYSxXQUFXO0lBQXhCO1FBQ1csY0FBUyxHQUF3QixFQUFFLENBQUM7UUFJakMsUUFBRyxHQUFVLEVBQUUsQ0FBQztJQStGOUIsQ0FBQztJQTdGRyxJQUFJLENBQUMsR0FBZTtRQUNoQixPQUFPO1lBQ0gsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLO1lBQ2hCLFVBQVUsRUFBRSxrQkFBSSxDQUFDLE1BQU0sQ0FBQztnQkFDcEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQy9DLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFpQyxDQUFDLENBQUMsUUFBUSxFQUFFLElBQUksRUFDakYsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2FBQzVDLENBQUM7U0FDTCxDQUFDO0lBQ04sQ0FBQztJQUVELGFBQWEsQ0FBQyxHQUFlO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FDbkMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQWlDLENBQUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUNqRixHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsV0FBVyxDQUFDLFFBQWUsRUFBRSxZQUFtQixFQUFFO1FBQzlDLElBQUksQ0FBQyxH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Q0FBQztJQUN2SCxDQUFDO0lBRU8sa0JBQWtCLENBQUMsT0FBTztRQUM5QixJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQ3RELE9BQU8sRUFBRSxDQUFDO1FBQ2QscUVBQXFFO1FBQ3JFLDhEQUE4RDtRQUM5RCxPQUFPLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxFQUFFLFdBQUMsT0FBQSxHQUFHLEdBQUcsR0FBRyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxHQUFHLE1BQUEsT0FBTyxDQUFDLFNBQVMsbUNBQUksR0FBRyxFQUFFLENBQUEsRUFBQSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2SyxDQUFDO0NBQ0o7QUFwR0Qsa0NBb0dDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSUdyYXBocWxBcGksIElTY2hlbWFDb25maWcgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWFwcHN5bmNcIjtcbmltcG9ydCB7IFxuICAgIEdyYXBocWxBcGkgYXMgR3JhcGhxbEFwaUFscGhhLCBcbiAgICBGaWVsZCwgXG4gICAgSUludGVybWVkaWF0ZVR5cGUsIFxuICAgIE9iamVjdFR5cGUsIFxuICAgIFJlc29sdmFibGVGaWVsZCwgXG59IGZyb20gXCJAYXdzLWNkay9hd3MtYXBwc3luYy1hbHBoYVwiO1xuaW1wb3J0IHsgTGF6eSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuXG4vKipcbiAqIENsYXNzIGJhc2VkIG9uIGF3cy1hcHBzeW5jIGFscGhhIFNjaGVtYSBjbGFzcyxcbiAqIGRlcHJlY2F0ZWQgaW4gc3RhYmxlIHZlcnNpb24gYnV0IG5lZWRlZCBmb3JcbiAqIGJ1aWxkaW5nIHNjaGVtYSBpbi1wcm9ncmVzc1xuICovXG5leHBvcnQgY2xhc3MgU2NoZW1hQWxwaGEge1xuICAgIHB1YmxpYyBiYXNlVHlwZXM6IElJbnRlcm1lZGlhdGVUeXBlW10gPSBbXTtcbiAgICBwdWJsaWMgcXVlcnk/OiBPYmplY3RUeXBlO1xuICAgIHB1YmxpYyBtdXRhdGlvbj86IE9iamVjdFR5cGU7XG4gICAgcHVibGljIHN1YnNjcmlwdGlvbj86IE9iamVjdFR5cGU7XG4gICAgcHJvdGVjdGVkIGRlZjpzdHJpbmcgPSAnJztcblxuICAgIGJpbmQoYXBpOklHcmFwaHFsQXBpKTogSVNjaGVtYUNvbmZpZyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhcGlJZDogYXBpLmFwaUlkLFxuICAgICAgICAgICAgZGVmaW5pdGlvbjogTGF6eS5zdHJpbmcoe1xuICAgICAgICAgICAgICAgIHByb2R1Y2U6ICgpID0+IHRoaXMuYmFzZVR5cGVzLnJlZHVjZSgoYWNjLCB0eXBlKSA9PiBcbiAgICAgICAgICAgICAgICAgICAgYCR7YWNjfSR7dHlwZS5fYmluZFRvR3JhcGhxbEFwaShhcGkgYXMgdW5rbm93biBhcyBHcmFwaHFsQXBpQWxwaGEpLnRvU3RyaW5nKCl9XFxuYCxcbiAgICAgICAgICAgICAgICAgICAgYCR7dGhpcy5kZWNsYXJlU2NoZW1hKCl9JHt0aGlzLmRlZn1gKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBnZXREZWZpbml0aW9uKGFwaTpJR3JhcGhxbEFwaSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmJhc2VUeXBlcy5yZWR1Y2UoKGFjYywgdHlwZSkgPT4gXG4gICAgICAgICAgICAgICAgYCR7YWNjfSR7dHlwZS5fYmluZFRvR3JhcGhxbEFwaShhcGkgYXMgdW5rbm93biBhcyBHcmFwaHFsQXBpQWxwaGEpLnRvU3RyaW5nKCl9XFxuYCxcbiAgICAgICAgICAgICAgICBgJHt0aGlzLmRlY2xhcmVTY2hlbWEoKX0ke3RoaXMuZGVmfWApO1xuICAgIH1cblxuICAgIGFkZFRvU2NoZW1hKGFkZGl0aW9uOnN0cmluZywgZGVsaW1pdGVyOnN0cmluZyA9ICcnKSB7XG4gICAgICAgIHRoaXMuZGVmICs9IGAke2RlbGltaXRlcn0ke2FkZGl0aW9ufVxcbmA7XG4gICAgfVxuXG4gICAgYWRkUXVlcnkoZmllbGROYW1lOiBzdHJpbmcsIGZpZWxkOiBSZXNvbHZhYmxlRmllbGQpIHtcbiAgICAgICAgaWYgKCF0aGlzLnF1ZXJ5KSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXJ5ID0gbmV3IE9iamVjdFR5cGUoJ1F1ZXJ5JywgeyBkZWZpbml0aW9uOiB7fSB9KTtcbiAgICAgICAgICAgIHRoaXMuYWRkVHlwZSh0aGlzLnF1ZXJ5KTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5xdWVyeS5hZGRGaWVsZCh7IGZpZWxkTmFtZSwgZmllbGQgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXJ5O1xuICAgIH1cblxuICAgIGFkZE11dGF0aW9uKGZpZWxkTmFtZTogc3RyaW5nLCBmaWVsZDogUmVzb2x2YWJsZUZpZWxkKSB7XG4gICAgICAgIGlmICghdGhpcy5tdXRhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5tdXRhdGlvbiA9IG5ldyBPYmplY3RUeXBlKCdNdXRhdGlvbicsIHsgZGVmaW5pdGlvbjoge30gfSk7XG4gICAgICAgICAgICB0aGlzLmFkZFR5cGUodGhpcy5tdXRhdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgO1xuICAgICAgICB0aGlzLm11dGF0aW9uLmFkZEZpZWxkKHsgZmllbGROYW1lLCBmaWVsZCB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMubXV0YXRpb247XG4gICAgfVxuXG4gICAgYWRkU3Vic2NyaXB0aW9uKGZpZWxkTmFtZTogc3RyaW5nLCBmaWVsZDogRmllbGQpIHtcbiAgICAgICAgaWYgKCF0aGlzLnN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSBuZXcgT2JqZWN0VHlwZSgnU3Vic2NyaXB0aW9uJywgeyBkZWZpbml0aW9uOiB7fSB9KTtcbiAgICAgICAgICAgIHRoaXMuYWRkVHlwZSh0aGlzLnN1YnNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGlyZWN0aXZlcyA9IGZpZWxkLmZpZWxkT3B0aW9ucz8uZGlyZWN0aXZlcz8uZmlsdGVyKChkaXJlY3RpdmUpID0+IGRpcmVjdGl2ZS5tdXRhdGlvbkZpZWxkcyk7XG4gICAgICAgIGlmIChkaXJlY3RpdmVzICYmIGRpcmVjdGl2ZXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTdWJzY3JpcHRpb24gZmllbGRzIG11c3Qgbm90IGhhdmUgbW9yZSB0aGFuIG9uZSBkaXJlY3RpdmUuIFJlY2VpdmVkOiAke2RpcmVjdGl2ZXMubGVuZ3RofWApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZEZpZWxkKHsgZmllbGROYW1lLCBmaWVsZCB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3Vic2NyaXB0aW9uO1xuICAgIH1cblxuICAgIGFkZFR5cGUodHlwZTogSUludGVybWVkaWF0ZVR5cGUpIHtcbiAgICAgICAgdGhpcy5iYXNlVHlwZXMucHVzaCh0eXBlKTtcbiAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfVxuICAgIFxuICAgIGRlY2xhcmVTY2hlbWEoKSB7XG4gICAgICAgIGlmICghdGhpcy5xdWVyeSAmJiAhdGhpcy5tdXRhdGlvbiAmJiAhdGhpcy5zdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsaXN0ID0gWydxdWVyeScsICdtdXRhdGlvbicsICdzdWJzY3JpcHRpb24nXTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2hhcGVBZGRpdGlvbih7XG4gICAgICAgICAgICBwcmVmaXg6ICdzY2hlbWEnLFxuICAgICAgICAgICAgZmllbGRzOiBsaXN0Lm1hcCgoa2V5KSA9PiB0aGlzW2tleV0gPyBgJHtrZXl9OiAke3RoaXNba2V5XT8ubmFtZX1gIDogJycpXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoZmllbGQpID0+IGZpZWxkICE9ICcnKSxcbiAgICAgICAgfSkgKyAnXFxuJztcbiAgICB9XG5cbiAgICBwcml2YXRlIHNoYXBlQWRkaXRpb24ob3B0aW9ucykge1xuICAgICAgICBjb25zdCB0eXBlTmFtZSA9ICgpID0+IHsgcmV0dXJuIG9wdGlvbnMubmFtZSA/IGAgJHtvcHRpb25zLm5hbWV9YCA6ICcnOyB9O1xuICAgICAgICBjb25zdCBpbnRlcmZhY2VzID0gdGhpcy5nZW5lcmF0ZUludGVyZmFjZXMob3B0aW9ucy5pbnRlcmZhY2VUeXBlcyk7XG4gICAgICAgIGNvbnN0IGRpcmVjdGl2ZXMgPSB0aGlzLmdlbmVyYXRlRGlyZWN0aXZlcyh7XG4gICAgICAgICAgICBkaXJlY3RpdmVzOiBvcHRpb25zLmRpcmVjdGl2ZXMsXG4gICAgICAgICAgICBtb2Rlczogb3B0aW9ucy5tb2RlcyxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmZpZWxkcy5yZWR1Y2UoKGFjYywgZmllbGQpID0+IGAke2FjY30gICR7ZmllbGR9XFxuYCwgYCR7b3B0aW9ucy5wcmVmaXh9JHt0eXBlTmFtZSgpfSR7aW50ZXJmYWNlc30ke2RpcmVjdGl2ZXN9IHtcXG5gKSArICd9JztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdlbmVyYXRlSW50ZXJmYWNlcyhpbnRlcmZhY2VUeXBlcykge1xuICAgICAgICBpZiAoIWludGVyZmFjZVR5cGVzIHx8IGludGVyZmFjZVR5cGVzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgcmV0dXJuIGludGVyZmFjZVR5cGVzLnJlZHVjZSgoYWNjLCBpbnRlcmZhY2VUeXBlKSA9PiBgJHthY2N9ICR7aW50ZXJmYWNlVHlwZS5uYW1lfSAmYCwgJyBpbXBsZW1lbnRzJykuc2xpY2UoMCwgLTIpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2VuZXJhdGVEaXJlY3RpdmVzKG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKCFvcHRpb25zLmRpcmVjdGl2ZXMgfHwgb3B0aW9ucy5kaXJlY3RpdmVzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgLy8gcmVkdWNlIG92ZXIgYWxsIGRpcmVjdGl2ZXMgYW5kIGdldCBzdHJpbmcgdmVyc2lvbiBvZiB0aGUgZGlyZWN0aXZlXG4gICAgICAgIC8vIHBhc3MgaW4gdGhlIGF1dGggbW9kZXMgZm9yIGNoZWNrcyB0byBoYXBwZW4gb24gY29tcGlsZSB0aW1lXG4gICAgICAgIHJldHVybiBvcHRpb25zLmRpcmVjdGl2ZXMucmVkdWNlKChhY2MsIGRpcmVjdGl2ZSkgPT4gYCR7YWNjfSR7ZGlyZWN0aXZlLl9iaW5kVG9BdXRoTW9kZXMob3B0aW9ucy5tb2RlcykudG9TdHJpbmcoKX0ke29wdGlvbnMuZGVsaW1pdGVyID8/ICcgJ31gLCAnICcpLnNsaWNlKDAsIC0xKTtcbiAgICB9XG59Il19 \ No newline at end of file diff --git a/lib/api/schema.js b/lib/api/schema.js new file mode 100644 index 0000000..d62e90e --- /dev/null +++ b/lib/api/schema.js @@ -0,0 +1,248 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AppSyncSchema = void 0; +const schema_alpha_1 = require("./schema-alpha"); +const aws_appsync_alpha_1 = require("@aws-cdk/aws-appsync-alpha"); +const util_1 = require("../util"); +class AppSyncSchema { + constructor(types) { + this.root = new schema_alpha_1.SchemaAlpha(); + this.tables = []; + this.graphTypes = ['id', 'string', 'int', 'float', 'boolean', + 'awsDate', 'awsTime', 'awsDateTime', 'awsTimestamp', 'awsEmail', + 'awsJson', 'awsUrl', 'awsPhone', 'awsIpAddress']; + this.customTypes = []; + this.types = {}; + if (types && Object.keys(types).length) + this.initTypes(types); + } + bind(api) { + return this.root.bind(api); + } + addTable(table) { + var _a, _b; + if (this.tables.some(t => t.tableName === table.tableName)) + return false; + (0, util_1.validateTable)(table); + const usedOperations = []; + this.addType(table.baseName, { definition: table.attributes }); + let definition = { ...table.attributes }; + delete definition[table.pName]; + if (table.sName) + delete definition[table.sName]; + let inputName = ''; + if (Object.keys(definition).length) { + inputName = `${table.baseName}Input`; + this.addInput(inputName, { definition }); + } + const inputObject = inputName ? { input: inputName } : undefined; + /** QUERIES */ + if (table.query) { + if (table.scan) { + this.root.addQuery(`scan${table.baseName}`, this.getField(table.baseName, {}, { isList: true })); + } + let getName = `get${table.baseName}By${(0, util_1.capitalize)(table.pName)}`; + if (table.sName) + getName += `And${(0, util_1.capitalize)(table.sName)}`; + if (!usedOperations.includes(getName)) { + this.root.addQuery(getName, this.getField(table.baseName, { + [table.pName]: table.attributes[table.pName] + }, { isList: false })); + usedOperations.push(getName); + } + if (table.sName) { + const partitionKeyName = `list${table.baseName}By${(0, util_1.capitalize)(table.pName)}`; + if (!usedOperations.includes(partitionKeyName)) { + this.root.addQuery(partitionKeyName, this.getField(table.baseName, { + [table.pName]: table.attributes[table.pName] + }, { isList: true })); + usedOperations.push(partitionKeyName); + } + } + // Loop through indexes + if ((_a = table.globalSecondaryIndexes) === null || _a === void 0 ? void 0 : _a.length) { + table.globalSecondaryIndexes.forEach(index => { + const prefix = (index.sortKey || index.list) ? 'list' : 'get'; + const getIndexName = `${prefix}${table.baseName}By${(0, util_1.capitalize)(index.pName)}`; + if (!usedOperations.includes(getIndexName)) { + this.root.addQuery(getIndexName, this.getField(table.baseName, { + [index.pName]: table.attributes[index.pName] + }, { isList: !!(index.sortKey || index.list) })); + usedOperations.push(getIndexName); + } + if (index.sName) { + const sortName = `get${table.baseName}By${(0, util_1.capitalize)(index.partitionKey.name)}And${(0, util_1.capitalize)(index.sName)}`; + if (!usedOperations.includes(sortName)) { + this.root.addQuery(sortName, this.getField(table.baseName, { + [index.pName]: table.attributes[index.pName], + [index.sName]: table.attributes[index.sName] + }, { isList: false })); + usedOperations.push(sortName); + } + } + }); + if ((_b = table.localSecondaryIndexes) === null || _b === void 0 ? void 0 : _b.length) { + table.localSecondaryIndexes.forEach(index => { + const localName = `get${table.baseName}By${(0, util_1.capitalize)(table.pName)}And${(0, util_1.capitalize)(index.sName)}`; + if (!usedOperations.includes(localName)) { + this.root.addQuery(localName, this.getField(table.baseName, { + [table.pName]: table.attributes[table.pName], + [index.sName]: table.attributes[index.sName] + }, { isList: false })); + usedOperations.push(localName); + } + }); + } + } + } + const primaryParams = { + [table.pName]: table.attributes[table.pName], + }; + if (table.sName) + primaryParams[table.sName] = table.attributes[table.sName]; + /** MUTATIONS */ + if (table.mutation) { + if (table.auto) { + this.root.addMutation(`create${table.baseName}`, this.getField(table.baseName, inputObject)); + } + const mutationParams = { + ...primaryParams, + ...(inputObject || {}) + }; + this.root.addMutation(`put${table.baseName}`, this.getField(table.baseName, mutationParams)); + this.root.addMutation(`delete${table.baseName}`, this.getField(table.baseName, primaryParams)); + } + /** SUBSCRIPTIONS */ + if (table.subscription) { + this.root.addSubscription(`on${table.baseName}Change`, this.getField(table.baseName, primaryParams)); + } + this.tables.push(table); + return table; + } + getType($type, $options = {}) { + if (typeof $type !== 'string') + return $type; + const options = this.getBaseOptions($type, $options); + const name = $type.replace(/[^a-z\_]/gi, ''); + const str = this.convertTypeName(name); + if (this.graphTypes.includes(str)) + return aws_appsync_alpha_1.GraphqlType[str](options); + if (!this.isType(str)) + throw new Error(`${name} is not a valid Type`); + return aws_appsync_alpha_1.GraphqlType.intermediate({ + intermediateType: this.types[name], + ...options + }); + } + getTypes(obj = {}) { + const res = {}; + for (let o in obj) { + if (obj.hasOwnProperty(o)) { + res[o] = this.getType(obj[o]); + } + } + return res; + } + getField(returnType, fields, $options = {}, directives) { + const args = fields && Object.keys(fields).length ? this.getTypes(fields) : undefined; + return new aws_appsync_alpha_1.Field({ + returnType: this.getType(returnType, $options), + args, + directives + }); + } + isType(type) { + const name = this.convertTypeName(type); + return this.graphTypes.includes(name) || this.customTypes.includes(name); + } + addType(name, props) { + return this.$addType('type', name, props); + } + addInput(name, props) { + return this.$addType('input', name, props); + } + getBaseOptions(type, $options = {}) { + return { + isList: /^\[[a-z]+[\?\!]?\]/i.test(type), + isRequired: /^\[?[a-z]+\!\]?[\?\!]?$/i.test(type), + isRequiredList: /\]\!$/.test(type), + ...$options + }; + } + initTypes(types = {}) { + for (let intermediateType in types) { + if (types.hasOwnProperty(intermediateType)) { + const keys = Object.keys(types[intermediateType]); + if (keys.length) { + const type = types[intermediateType]; + for (let typeName in type) { + if (type.hasOwnProperty(typeName)) { + const inter = intermediateType.substring(0, intermediateType.length - 1); + this.$addType(inter, typeName, type[typeName]); + } + } + } + } + } + } + $addType(type, $name, props) { + const name = $name.replace(/[^a-z\_]/gi, ''); + const str = this.convertTypeName(name); + if (this.customTypes.some(a => a === str)) + return this.types[name]; + this.customTypes.push(str); + if (Array.isArray(props)) { + if (type === 'union') { + const definition = props.map(prop => { + if (typeof prop === 'string') + return this.types[prop]; + return prop; + }, this); + this.types[name] = new aws_appsync_alpha_1.UnionType(name, { definition }); + } + else if (type === 'enum') { + const definition = props.map(prop => { + if (typeof prop !== 'string') + throw new Error('Enum types must contain strings only.'); + return prop; + }); + this.types[name] = new aws_appsync_alpha_1.EnumType(name, { definition }); + } + else { + throw new Error('Only Union and Enum types can be passed as an array, Type: ' + type); + } + } + else { + const definition = (props.definition && typeof props.definition === 'object') ? + this.getTypes(props.definition) : this.getTypes(props); + const options = { + ...props, + definition + }; + switch (type) { + case 'type': + this.types[name] = new aws_appsync_alpha_1.ObjectType(name, options); + break; + case 'input': + this.types[name] = new aws_appsync_alpha_1.InputType(name, options); + break; + case 'interface': + this.types[name] = new aws_appsync_alpha_1.InterfaceType(name, options); + break; + default: throw new Error(`Type "${type}" is not compatible with props provided`); + } + } + this.root.addType(this.types[name]); + return this.types[name]; + } + convertTypeName(type) { + var _a; + if (!type.length) + return type; + const words = type.split('_'); + const firstWord = ((_a = words.shift()) === null || _a === void 0 ? void 0 : _a.toLowerCase()) || ''; + return firstWord + words.map(w => w.substring(0, 1).toUpperCase() + w.substring(1).toLowerCase()).join(''); + } +} +exports.AppSyncSchema = AppSyncSchema; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaS9zY2hlbWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBTUEsaURBRXdCO0FBU3hCLGtFQWFvQztBQUNwQyxrQ0FBb0Q7QUFFcEQsTUFBYSxhQUFhO0lBVXRCLFlBQVksS0FBc0I7UUFUekIsU0FBSSxHQUFHLElBQUksMEJBQVcsRUFBRSxDQUFDO1FBRXhCLFdBQU0sR0FBYSxFQUFFLENBQUM7UUFDdEIsZUFBVSxHQUFHLENBQUMsSUFBSSxFQUFDLFFBQVEsRUFBQyxLQUFLLEVBQUMsT0FBTyxFQUFDLFNBQVM7WUFDN0QsU0FBUyxFQUFDLFNBQVMsRUFBQyxhQUFhLEVBQUMsY0FBYyxFQUFFLFVBQVU7WUFDNUQsU0FBUyxFQUFDLFFBQVEsRUFBQyxVQUFVLEVBQUMsY0FBYyxDQUFDLENBQUM7UUFDcEMsZ0JBQVcsR0FBWSxFQUFFLENBQUE7UUFDekIsVUFBSyxHQUFxQixFQUFFLENBQUE7UUFHbEMsSUFBSSxLQUFLLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNO1lBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsSUFBSSxDQUFDLEdBQWU7UUFDaEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQWM7O1FBRW5CLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxTQUFTLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUN6RSxJQUFBLG9CQUFhLEVBQUMsS0FBSyxDQUFDLENBQUM7UUFDckIsTUFBTSxjQUFjLEdBQVksRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxPQUFPLENB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QUMsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLElBQUksQ0FBQztRQUM5QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLE1BQU0sU0FBUyxHQUFHLENBQUEsTUFBQSxLQUFLLENBQUMsS0FBSyxFQUFFLDBDQUFFLFdBQVcsRUFBRSxLQUFJLEVBQUUsQ0FBQztRQUNyRCxPQUFPLFNBQVMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQzdCLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQ2hFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2YsQ0FBQztDQUNKO0FBNVBELHNDQTRQQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFxuICAgIElHcmFwaHFsQXBpLCBcbiAgICBJU2NoZW1hLCBcbiAgICBJU2NoZW1hQ29uZmlnIFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtYXBwc3luYyc7XG5pbXBvcnQgeyBEYlRhYmxlIH0gZnJvbSAnLi4vZGIvdGFibGUnO1xuaW1wb3J0IHsgXG4gICAgU2NoZW1hQWxwaGFcbn0gZnJvbSAnLi9zY2hlbWEtYWxwaGEnO1xuaW1wb3J0IHsgXG4gICAgU2NoZW1hT2JqZWN0LFxuICAgIEdyYXBoUWxUeXBlTGlzdCwgXG4gICAgSW50ZXJtZWRpYXRlVHlwZSwgXG4gICAgSW50ZXJtZWRpYXRlVHlwZVByb3BzLCBcbiAgICBJbnRlcm1lZGlhdGVUeXBlcywgXG4gICAgU2NoZW1hRmllbGRzXG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IFxuICAgIEdyYXBocWxUeXBlLCBcbiAgICBCYXNlVHlwZU9wdGlvbnMsIFxuICAgIE9iamVjdFR5cGUsIFxuICAgIElJbnRlcm1lZGlhdGVUeXBlLCBcbiAgICBJbnB1dFR5cGUsIFxuICAgIEludGVyZmFjZVR5cGUsIFxuICAgIFVuaW9uVHlwZSwgXG4gICAgRW51bVR5cGUsIFxuICAgIERpcmVjdGl2ZSwgXG4gICAgRmllbGQsIFxuICAgIEdyYXBocWxUeXBlT3B0aW9ucyxcbiAgICBJbnRlcm1lZGlhdGVUeXBlT3B0aW9ucyBcbn0gZnJvbSAnQGF3cy1jZGsvYXdzLWFwcHN5bmMtYWxwaGEnO1xuaW1wb3J0IHsgY2FwaXRhbGl6ZSwgdmFsaWRhdGVUYWJsZSB9IGZyb20gJy4uL3V0aWwnO1xuXG5leHBvcnQgY2xhc3MgQXBwU3luY1NjaGVtYSBpbXBsZW1lbnRzIElTY2hlbWEge1xuICAgIHJlYWRvbmx5IHJvb3QgPSBuZXcgU2NoZW1hQWxwaGEoKTtcblxuICAgIHByb3RlY3RlZCB0YWJsZXM6RGJUYWJsZVtdID0gW107XG4gICAgcHJvdGVjdGVkIGdyYXBoVHlwZXMgPSBbJ2lkJywnc3RyaW5nJywnaW50JywnZmxvYXQnLCdib29sZWFuJyxcbiAgICAnYXdzRGF0ZScsJ2F3c1RpbWUnLCdhd3NEYXRlVGltZScsJ2F3c1RpbWVzdGFtcCcsICdhd3NFbWFpbCcsXG4gICAgJ2F3c0pzb24nLCdhd3NVcmwnLCdhd3NQaG9uZScsJ2F3c0lwQWRkcmVzcyddO1xuICAgIHByb3RlY3RlZCBjdXN0b21UeXBlczpzdHJpbmdbXSA9IFtdXG4gICAgcHJvdGVjdGVkIHR5cGVzOkludGVybWVkaWF0ZVR5cGVzID0ge31cblxuICAgIGNvbnN0cnVjdG9yKHR5cGVzPzpHcmFwaFFsVHlwZUxpc3QpIHtcbiAgICAgICAgaWYgKHR5cGVzICYmIE9iamVjdC5rZXlzKHR5cGVzKS5sZW5ndGgpIHRoaXMuaW5pdFR5cGVzKHR5cGVzKTtcbiAgICB9XG5cbiAgICBiaW5kKGFwaTpJR3JhcGhxbEFwaSk6IElTY2hlbWFDb25maWcge1xuICAgICAgICByZXR1cm4gdGhpcy5yb290LmJpbmQoYXBpKTtcbiAgICB9XG5cbiAgICBhZGRUYWJsZSh0YWJsZTogRGJUYWJsZSk6IERiVGFibGUgfCBmYWxzZSB7XG5cbiAgICAgICAgaWYgKHRoaXMudGFibGVzLnNvbWUodCA9PiB0LnRhYmxlTmFtZSA9PT0gdGFibGUudGFibGVOYW1lKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB2YWxpZGF0ZVRhYmxlKHRhYmxlKTtcbiAgICAgICAgY29uc3QgdXNlZE9wZXJhdGlvbnM6c3RyaW5nW10gPSBbXTtcbiAgICAgICAgdGhpcy5hZGRUeXBlKHRhYmxlLmJhc2VOYW1lLCB7ZGVmaW5pdGlvbjp0YWJsZS5hdHRyaWJ1dGVzfSk7XG4gICAgICAgIGxldCBkZWZpbml0aW9uID0gey4uLnRhYmxlLmF0dHJpYnV0ZXN9O1xuICAgICAgICBkZWxldGUgZGVmaW5pdGlvblt0YWJsZS5wTmFtZV07XG4gICAgICAgIGlmICh0YWJsZS5zTmFtZSkgZGVsZXRlIGRlZmluaXRpb25bdGFibGUuc05hbWVdO1xuICAgICAgICBsZXQgaW5wdXROYW1lOiBzdHJpbmcgPSAnJ1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMoZGVmaW5pdGlvbikubGVuZ3RoKSB7XG4gICAgICAgICAgICBpbnB1dE5hbWUgPSBgJHt0YWJsZS5iYXNlTmFtZX1JbnB1dGA7XG4gICAgICAgICAgICB0aGlzLmFkZElucHV0KGlucHV0TmFtZSwge2RlZmluaXRpb259KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbnB1dE9iamVjdCA9IGlucHV0TmFtZSA/IHsgaW5wdXQ6IGlucHV0TmFtZSB9IDogdW5kZWZpbmVkO1xuXG4gICAgICAgIC8qKiBRVUVSSUVTICovXG4gICAgICAgIGlmICh0YWJsZS5xdWVyeSkge1xuICAgICAgICAgICAgaWYgKHRhYmxlLnNjYW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJvb3QuYWRkUXVlcnkoYHNjYW4ke3RhYmxlLmJhc2VOYW1lfWAsIHRoaXMuZ2V0RmllbGQodGFibGUuYmFzZU5hbWUsIHt9LCB7aXNMaXN0OnRydWV9KSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBnZXROYW1lID0gYGdldCR7dGFibGUuYmFzZU5hbWV9Qnkke2NhcGl0YWxpemUodGFibGUucE5hbWUpfWA7XG4gICAgICAgICAgICBpZiAodGFibGUuc05hbWUpIGdldE5hbWUgKz0gYEFuZCR7Y2FwaXRhbGl6ZSh0YWJsZS5zTmFtZSl9YDtcbiAgICAgICAgICAgIGlmICghdXNlZE9wZXJhdGlvbnMuaW5jbHVkZXMoZ2V0TmFtZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJvb3QuYWRkUXVlcnkoZ2V0TmFtZSwgdGhpcy5nZXRGaWVsZCh0YWJsZS5iYXNlTmFtZSwge1xuICAgICAgICAgICAgICAgICAgICBbdGFibGUucE5hbWVdOiB0YWJsZS5hdHRyaWJ1dGVzW3RhYmxlLnBOYW1lXVxuICAgICAgICAgICAgICAgIH0sIHtpc0xpc3Q6ZmFsc2V9KSk7XG4gICAgICAgICAgICAgICAgdXNlZE9wZXJhdGlvbnMucHVzaChnZXROYW1lKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRhYmxlLnNOYW1lKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFydGl0aW9uS2V5TmFtZSA9IGBsaXN0JHt0YWJsZS5iYXNlTmFtZX1CeSR7Y2FwaXRhbGl6ZSh0YWJsZS5wTmFtZSl9YDtcbiAgICAgICAgICAgICAgICBpZiAoIXVzZWRPcGVyYXRpb25zLmluY2x1ZGVzKHBhcnRpdGlvbktleU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm9vdC5hZGRRdWVyeShwYXJ0aXRpb25LZXlOYW1lLCB0aGlzLmdldEZpZWxkKHRhYmxlLmJhc2VOYW1lLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBbdGFibGUucE5hbWVdOiB0YWJsZS5hdHRyaWJ1dGVzW3RhYmxlLnBOYW1lXVxuICAgICAgICAgICAgICAgICAgICB9LCB7aXNMaXN0OnRydWV9KSk7XG4gICAgICAgICAgICAgICAgICAgIHVzZWRPcGVyYXRpb25zLnB1c2gocGFydGl0aW9uS2V5TmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBMb29wIHRocm91Z2ggaW5kZXhlc1xuICAgICAgICAgICAgaWYgKHRhYmxlLmdsb2JhbFNlY29uZGFyeUluZGV4ZXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRhYmxlLmdsb2JhbFNlY29uZGFyeUluZGV4ZXMuZm9yRWFjaChpbmRleCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZWZpeCA9IChpbmRleC5zb3J0S2V5IHx8IGluZGV4Lmxpc3QpID8gJ2xpc3QnIDogJ2dldCc7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdldEluZGV4TmFtZSA9IGAke3ByZWZpeH0ke3RhYmxlLmJhc2VOYW1lfUJ5JHtjYXBpdGFsaXplKGluZGV4LnBOYW1lKX1gXG4gICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBpZiAoIXVzZWRPcGVyYXRpb25zLmluY2x1ZGVzKGdldEluZGV4TmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm9vdC5hZGRRdWVyeShnZXRJbmRleE5hbWUsIHRoaXMuZ2V0RmllbGQodGFibGUuYmFzZU5hbWUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5kZXgucE5hbWVdOiB0YWJsZS5hdHRyaWJ1dGVzW2luZGV4LnBOYW1lXVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge2lzTGlzdDohIShpbmRleC5zb3J0S2V5IHx8IGluZGV4Lmxpc3QpfSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdXNlZE9wZXJhdGlvbnMucHVzaChnZXRJbmRleE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXguc05hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNvcnROYW1lID0gYGdldCR7dGFibGUuYmFzZU5hbWV9Qnkke2NhcGl0YWxpemUoaW5kZXgucGFydGl0aW9uS2V5Lm5hbWUpfUFuZCR7Y2FwaXRhbGl6ZShpbmRleC5zTmFtZSl9YFxuICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdXNlZE9wZXJhdGlvbnMuaW5jbHVkZXMoc29ydE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb290LmFkZFF1ZXJ5KHNvcnROYW1lLCB0aGlzLmdldEZpZWxkKHRhYmxlLmJhc2VOYW1lLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmRleC5wTmFtZV06IHRhYmxlLmF0dHJpYnV0ZXNbaW5kZXgucE5hbWVdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5kZXguc05hbWVdOiB0YWJsZS5hdHRyaWJ1dGVzW2luZGV4LnNOYW1lXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtpc0xpc3Q6ZmFsc2V9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZE9wZXJhdGlvbnMucHVzaChzb3J0TmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgaWYgKHRhYmxlLmxvY2FsU2Vjb25kYXJ5SW5kZXhlcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhYmxlLmxvY2FsU2Vjb25kYXJ5SW5kZXhlcy5mb3JFYWNoKGluZGV4ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvY2FsTmFtZSA9IGBnZXQke3RhYmxlLmJhc2VOYW1lfUJ5JHtjYXBpdGFsaXplKHRhYmxlLnBOYW1lKX1BbmQke2NhcGl0YWxpemUoaW5kZXguc05hbWUpfWBcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdXNlZE9wZXJhdGlvbnMuaW5jbHVkZXMobG9jYWxOYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm9vdC5hZGRRdWVyeShsb2NhbE5hbWUsIHRoaXMuZ2V0RmllbGQodGFibGUuYmFzZU5hbWUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RhYmxlLnBOYW1lXTogdGFibGUuYXR0cmlidXRlc1t0YWJsZS5wTmFtZV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmRleC5zTmFtZV06IHRhYmxlLmF0dHJpYnV0ZXNbaW5kZXguc05hbWVdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge2lzTGlzdDpmYWxzZX0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkT3BlcmF0aW9ucy5wdXNoKGxvY2FsTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcHJpbWFyeVBhcmFtcyA9IHsgXG4gICAgICAgICAgICBbdGFibGUucE5hbWVdOiB0YWJsZS5hdHRyaWJ1dGVzW3RhYmxlLnBOYW1lXSxcbiAgICAgICAgfVxuICAgICAgICBpZiAodGFibGUuc05hbWUpIHByaW1hcnlQYXJhbXNbdGFibGUuc05hbWVdID0gdGFibGUuYXR0cmlidXRlc1t0YWJsZS5zTmFtZV07XG4gICAgICAgIC8qKiBNVVRBVElPTlMgKi9cbiAgICAgICAgaWYgKHRhYmxlLm11dGF0aW9uKSB7XG4gICAgICAgICAgICBpZiAodGFibGUuYXV0bykge1xuICAgICAgICAgICAgICAgIHRoaXMucm9vdC5hZGRNdXRhdGlvbihgY3JlYXRlJHt0YWJsZS5iYXNlTmFtZX1gLCB0aGlzLmdldEZpZWxkKHRhYmxlLmJhc2VOYW1lLCBpbnB1dE9iamVjdCkpO1xuICAgICAgICAgICAgfSAgICAgIFxuICAgICAgICAgICAgY29uc3QgbXV0YXRpb25QYXJhbXMgPSB7XG4gICAgICAgICAgICAgICAgLi4ucHJpbWFyeVBhcmFtcyxcbiAgICAgICAgICAgICAgICAuLi4oaW5wdXRPYmplY3QgfHwge30pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJvb3QuYWRkTXV0YXRpb24oYHB1dCR7dGFibGUuYmFzZU5hbWV9YCwgdGhpcy5nZXRGaWVsZCh0YWJsZS5iYXNlTmFtZSwgbXV0YXRpb25QYXJhbXMpKTtcbiAgICAgICAgICAgIHRoaXMucm9vdC5hZGRNdXRhdGlvbihgZGVsZXRlJHt0YWJsZS5iYXNlTmFtZX1gLCB0aGlzLmdldEZpZWxkKHRhYmxlLmJhc2VOYW1lLCBwcmltYXJ5UGFyYW1zKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvKiogU1VCU0NSSVBUSU9OUyAqL1xuICAgICAgICBpZiAodGFibGUuc3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnJvb3QuYWRkU3Vic2NyaXB0aW9uKGBvbiR7dGFibGUuYmFzZU5hbWV9Q2hhbmdlYCwgdGhpcy5nZXRGaWVsZCh0YWJsZS5iYXNlTmFtZSwgcHJpbWFyeVBhcmFtcykpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50YWJsZXMucHVzaCh0YWJsZSk7XG4gICAgICAgIHJldHVybiB0YWJsZTtcbiAgICB9XG5cbiAgICBnZXRUeXBlKCR0eXBlOnN0cmluZyB8IEdyYXBocWxUeXBlLCAkb3B0aW9uczogR3JhcGhxbFR5cGVPcHRpb25zID0ge30pOiBHcmFwaHFsVHlwZSB7XG4gICAgICAgIGlmICh0eXBlb2YgJHR5cGUgIT09ICdzdHJpbmcnKSByZXR1cm4gJHR5cGU7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmdldEJhc2VPcHRpb25zKCR0eXBlLCAkb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IG5hbWUgPSAkdHlwZS5yZXBsYWNlKC9bXmEtelxcX10vZ2ksICcnKTtcbiAgICAgICAgY29uc3Qgc3RyID0gdGhpcy5jb252ZXJ0VHlwZU5hbWUobmFtZSk7XG4gICAgICAgIGlmICh0aGlzLmdyYXBoVHlwZXMuaW5jbHVkZXMoc3RyKSkgcmV0dXJuIEdyYXBocWxUeXBlW3N0cl0ob3B0aW9ucyk7XG4gICAgICAgIGlmICghdGhpcy5pc1R5cGUoc3RyKSkgdGhyb3cgbmV3IEVycm9yKGAke25hbWV9IGlzIG5vdCBhIHZhbGlkIFR5cGVgKTtcbiAgICAgICAgcmV0dXJuIEdyYXBocWxUeXBlLmludGVybWVkaWF0ZSh7XG4gICAgICAgICAgICBpbnRlcm1lZGlhdGVUeXBlOnRoaXMudHlwZXNbbmFtZV0sXG4gICAgICAgICAgICAuLi5vcHRpb25zXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldFR5cGVzKG9iajpTY2hlbWFPYmplY3QgPSB7fSk6IFNjaGVtYUZpZWxkcyB7XG4gICAgICAgIGNvbnN0IHJlczpTY2hlbWFGaWVsZHMgPSB7fVxuICAgICAgICBmb3IgKGxldCBvIGluIG9iaikge1xuICAgICAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShvKSkge1xuICAgICAgICAgICAgICAgIHJlc1tvXSA9IHRoaXMuZ2V0VHlwZShvYmpbb10pXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBnZXRGaWVsZChyZXR1cm5UeXBlOiBzdHJpbmcsIGZpZWxkcz86IFNjaGVtYU9iamVjdCwgJG9wdGlvbnM6IEdyYXBocWxUeXBlT3B0aW9ucyA9IHt9LCBkaXJlY3RpdmVzPzpEaXJlY3RpdmVbXSk6IEZpZWxkIHtcbiAgICAgICAgY29uc3QgYXJncyA9IGZpZWxkcyAmJiBPYmplY3Qua2V5cyhmaWVsZHMpLmxlbmd0aCA/IHRoaXMuZ2V0VHlwZXMoZmllbGRzKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIG5ldyBGaWVsZCh7XG4gICAgICAgICAgICByZXR1cm5UeXBlOiB0aGlzLmdldFR5cGUocmV0dXJuVHlwZSwgJG9wdGlvbnMpLFxuICAgICAgICAgICAgYXJncyxcbiAgICAgICAgICAgIGRpcmVjdGl2ZXNcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBpc1R5cGUodHlwZTpzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuY29udmVydFR5cGVOYW1lKHR5cGUpO1xuICAgICAgICByZXR1cm4gdGhpcy5ncmFwaFR5cGVzLmluY2x1ZGVzKG5hbWUpIHx8IHRoaXMuY3VzdG9tVHlwZXMuaW5jbHVkZXMobmFtZSk7XG4gICAgfVxuXG4gICAgYWRkVHlwZShuYW1lOnN0cmluZywgcHJvcHM6IEludGVybWVkaWF0ZVR5cGVQcm9wcyk6SUludGVybWVkaWF0ZVR5cGUge1xuICAgICAgICByZXR1cm4gdGhpcy4kYWRkVHlwZSgndHlwZScsIG5hbWUsIHByb3BzKTtcbiAgICB9XG5cbiAgICBhZGRJbnB1dChuYW1lOnN0cmluZywgcHJvcHM6IEludGVybWVkaWF0ZVR5cGVQcm9wcyk6SUludGVybWVkaWF0ZVR5cGUge1xuICAgICAgICByZXR1cm4gdGhpcy4kYWRkVHlwZSgnaW5wdXQnLCBuYW1lLCBwcm9wcyk7XG4gICAgfVxuICAgIFxuICAgIGdldEJhc2VPcHRpb25zKHR5cGU6c3RyaW5nLCAkb3B0aW9uczogR3JhcGhxbFR5cGVPcHRpb25zID0ge30pOiBCYXNlVHlwZU9wdGlvbnMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXNMaXN0Oi9eXFxbW2Etel0rW1xcP1xcIV0/XFxdL2kudGVzdCh0eXBlKSxcbiAgICAgICAgICAgIGlzUmVxdWlyZWQ6L15cXFs/W2Etel0rXFwhXFxdP1tcXD9cXCFdPyQvaS50ZXN0KHR5cGUpLFxuICAgICAgICAgICAgaXNSZXF1aXJlZExpc3Q6L1xcXVxcISQvLnRlc3QodHlwZSksXG4gICAgICAgICAgICAuLi4kb3B0aW9uc1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdFR5cGVzKHR5cGVzOkdyYXBoUWxUeXBlTGlzdCA9IHt9KSB7XG4gICAgICAgIGZvciAobGV0IGludGVybWVkaWF0ZVR5cGUgaW4gdHlwZXMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlcy5oYXNPd25Qcm9wZXJ0eShpbnRlcm1lZGlhdGVUeXBlKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0eXBlc1tpbnRlcm1lZGlhdGVUeXBlXSk7XG4gICAgICAgICAgICAgICAgaWYgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSB0eXBlc1tpbnRlcm1lZGlhdGVUeXBlXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgdHlwZU5hbWUgaW4gdHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUuaGFzT3duUHJvcGVydHkodHlwZU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50ZXIgPSBpbnRlcm1lZGlhdGVUeXBlLnN1YnN0cmluZygwLCBpbnRlcm1lZGlhdGVUeXBlLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGFkZFR5cGUoaW50ZXIgYXMgSW50ZXJtZWRpYXRlVHlwZSwgdHlwZU5hbWUsIHR5cGVbdHlwZU5hbWVdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCAkYWRkVHlwZShcbiAgICAgICAgdHlwZTpJbnRlcm1lZGlhdGVUeXBlLCBcbiAgICAgICAgJG5hbWU6c3RyaW5nLCBcbiAgICAgICAgcHJvcHM6IFNjaGVtYU9iamVjdCB8IEludGVybWVkaWF0ZVR5cGVQcm9wcyB8IChzdHJpbmcgfCBJSW50ZXJtZWRpYXRlVHlwZSlbXVxuICAgICk6IElJbnRlcm1lZGlhdGVUeXBlIHtcbiAgICAgICAgY29uc3QgbmFtZSA9ICRuYW1lLnJlcGxhY2UoL1teYS16XFxfXS9naSwgJycpO1xuICAgICAgICBjb25zdCBzdHIgPSB0aGlzLmNvbnZlcnRUeXBlTmFtZShuYW1lKTtcbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tVHlwZXMuc29tZShhID0+IGEgPT09IHN0cikpIHJldHVybiB0aGlzLnR5cGVzW25hbWVdOyAgICAgICAgXG4gICAgICAgIHRoaXMuY3VzdG9tVHlwZXMucHVzaChzdHIpO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wcykpIHtcbiAgICAgICAgICAgIGlmICh0eXBlID09PSAndW5pb24nKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVmaW5pdGlvbjpJSW50ZXJtZWRpYXRlVHlwZVtdID0gcHJvcHMubWFwKHByb3AgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHByb3AgPT09ICdzdHJpbmcnKSByZXR1cm4gdGhpcy50eXBlc1twcm9wXTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb3A7XG4gICAgICAgICAgICAgICAgfSx0aGlzKTtcbiAgICAgICAgICAgICAgICB0aGlzLnR5cGVzW25hbWVdID0gbmV3IFVuaW9uVHlwZShuYW1lLHtkZWZpbml0aW9ufSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdlbnVtJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb246c3RyaW5nW10gPSBwcm9wcy5tYXAocHJvcCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvcCAhPT0gJ3N0cmluZycpIHRocm93IG5ldyBFcnJvcignRW51bSB0eXBlcyBtdXN0IGNvbnRhaW4gc3RyaW5ncyBvbmx5LicpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvcDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnR5cGVzW25hbWVdID0gbmV3IEVudW1UeXBlKG5hbWUse2RlZmluaXRpb259KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdPbmx5IFVuaW9uIGFuZCBFbnVtIHR5cGVzIGNhbiBiZSBwYXNzZWQgYXMgYW4gYXJyYXksIFR5cGU6ICcgKyB0eXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmluaXRpb24gPSAocHJvcHMuZGVmaW5pdGlvbiAmJiB0eXBlb2YgcHJvcHMuZGVmaW5pdGlvbiA9PT0gJ29iamVjdCcpID8gXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRUeXBlcyhwcm9wcy5kZWZpbml0aW9uKSA6IHRoaXMuZ2V0VHlwZXMocHJvcHMgYXMgU2NoZW1hT2JqZWN0KVxuICAgICAgICAgICAgY29uc3Qgb3B0aW9uczpJbnRlcm1lZGlhdGVUeXBlT3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgICAgICAgICBkZWZpbml0aW9uXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN3aXRjaCh0eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAndHlwZSc6IHRoaXMudHlwZXNbbmFtZV0gPSBuZXcgT2JqZWN0VHlwZShuYW1lLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdpbnB1dCc6IHRoaXMudHlwZXNbbmFtZV0gPSBuZXcgSW5wdXRUeXBlKG5hbWUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2ludGVyZmFjZSc6IHRoaXMudHlwZXNbbmFtZV0gPSBuZXcgSW50ZXJmYWNlVHlwZShuYW1lLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoYFR5cGUgXCIke3R5cGV9XCIgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBwcm9wcyBwcm92aWRlZGApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucm9vdC5hZGRUeXBlKHRoaXMudHlwZXNbbmFtZV0pO1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlc1tuYW1lXVxuICAgIH1cblxuICAgIHByaXZhdGUgY29udmVydFR5cGVOYW1lKHR5cGU6c3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCF0eXBlLmxlbmd0aCkgcmV0dXJuIHR5cGU7XG4gICAgICAgIGNvbnN0IHdvcmRzID0gdHlwZS5zcGxpdCgnXycpO1xuICAgICAgICBjb25zdCBmaXJzdFdvcmQgPSB3b3Jkcy5zaGlmdCgpPy50b0xvd2VyQ2FzZSgpIHx8ICcnO1xuICAgICAgICByZXR1cm4gZmlyc3RXb3JkICsgd29yZHMubWFwKHcgPT4gXG4gICAgICAgICAgICB3LnN1YnN0cmluZygwLDEpLnRvVXBwZXJDYXNlKCkgKyB3LnN1YnN0cmluZygxKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICkuam9pbignJyk7XG4gICAgfVxufSJdfQ== \ No newline at end of file diff --git a/lib/db/db-api.js b/lib/db/db-api.js new file mode 100644 index 0000000..20d99cf --- /dev/null +++ b/lib/db/db-api.js @@ -0,0 +1,172 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.DbApi = void 0; +const aws_appsync_1 = require("aws-cdk-lib/aws-appsync"); +const util_1 = require("../util"); +class DbApi { + constructor(scope, id, api, schema, table) { + var _a, _b; + this.scope = scope; + this.id = id; + this.api = api; + this.schema = schema; + this.table = table; + (0, util_1.validateTable)(table); + this.dataSource = new aws_appsync_1.DynamoDbDataSource(scope, `${id}-${this.table.tableName}DataSource`, { + api, + name: `${this.table.tableName}DataSource`, + table: table.construct + }); + const usedOperations = []; + const dataSource = this.dataSource; + /** QUERIES */ + if (table.query) { + if (table.scan) { + // Get Whole Table + this.api.createResolver(`scan${table.baseName}`, { + fieldName: `scan${table.baseName}`, + typeName: 'Query', + dataSource, + responseMappingTemplate: aws_appsync_1.MappingTemplate.dynamoDbResultList(), + requestMappingTemplate: aws_appsync_1.MappingTemplate.dynamoDbScanTable() + }); + } + let getName = `get${table.baseName}By${(0, util_1.capitalize)(table.pName)}`; + if (table.sName) + getName += `And${(0, util_1.capitalize)(table.sName)}`; + if (!usedOperations.includes(getName)) { + this.api.createResolver(getName, { + fieldName: getName, + typeName: 'Query', + dataSource, + responseMappingTemplate: aws_appsync_1.MappingTemplate.dynamoDbResultItem(), + requestMappingTemplate: table.sName ? + this.primaryTemplate(this.getPrimaryKey(table.pName, table.sName)) + : aws_appsync_1.MappingTemplate.dynamoDbGetItem(table.pName, table.pName) + }); + usedOperations.push(getName); + } + if (table.sName) { + const partitionKeyName = `list${table.baseName}By${(0, util_1.capitalize)(table.pName)}`; + if (!usedOperations.includes(partitionKeyName)) { + this.api.createResolver(partitionKeyName, { + fieldName: partitionKeyName, + typeName: 'Query', + dataSource, + responseMappingTemplate: aws_appsync_1.MappingTemplate.dynamoDbResultList(), + requestMappingTemplate: aws_appsync_1.MappingTemplate.dynamoDbQuery(aws_appsync_1.KeyCondition.eq(table.pName, table.pName)) + }); + usedOperations.push(partitionKeyName); + } + } + // Loop through indexes + if ((_a = table.globalSecondaryIndexes) === null || _a === void 0 ? void 0 : _a.length) { + table.globalSecondaryIndexes.forEach(index => { + const prefix = (index.sortKey || index.list) ? 'list' : 'get'; + const getIndexName = `${prefix}${table.baseName}By${(0, util_1.capitalize)(index.pName)}`; + if (!usedOperations.includes(getIndexName)) { + let index_name = ''; + if (index.indexName) { + index_name = index.indexName; + } + else { + index_name = `global${table.baseName}${(0, util_1.capitalize)(index.pName)}${(0, util_1.capitalize)(index.sName || '')}`; + } + this.api.createResolver(getIndexName, { + fieldName: getIndexName, + typeName: 'Query', + dataSource, + responseMappingTemplate: (index.sortKey || index.list) ? + aws_appsync_1.MappingTemplate.dynamoDbResultList() : + aws_appsync_1.MappingTemplate.dynamoDbResultItem(), + requestMappingTemplate: aws_appsync_1.MappingTemplate.dynamoDbQuery(aws_appsync_1.KeyCondition.eq(index.pName, index.pName), index_name) + }); + usedOperations.push(getIndexName); + } + if (index.sName) { + const sortName = `get${table.baseName}By${(0, util_1.capitalize)(index.pName)}And${(0, util_1.capitalize)(index.sName)}`; + if (!usedOperations.includes(sortName)) { + this.api.createResolver(sortName, { + fieldName: sortName, + typeName: 'Query', + dataSource, + responseMappingTemplate: aws_appsync_1.MappingTemplate.dynamoDbResultItem(), + requestMappingTemplate: aws_appsync_1.MappingTemplate.dynamoDbQuery(aws_appsync_1.KeyCondition.eq(index.pName, index.pName) + .and(aws_appsync_1.KeyCondition.eq(index.sName, index.sName)), index.indexName) + }); + usedOperations.push(sortName); + } + } + }); + if ((_b = table.localSecondaryIndexes) === null || _b === void 0 ? void 0 : _b.length) { + table.localSecondaryIndexes.forEach(index => { + const localName = `get${table.baseName}By${(0, util_1.capitalize)(table.pName)}And${(0, util_1.capitalize)(index.sName)}`; + if (!usedOperations.includes(localName)) { + this.api.createResolver(localName, { + fieldName: localName, + typeName: 'Query', + dataSource, + responseMappingTemplate: aws_appsync_1.MappingTemplate.dynamoDbResultItem(), + requestMappingTemplate: aws_appsync_1.MappingTemplate.dynamoDbQuery(aws_appsync_1.KeyCondition.eq(table.pName, table.pName) + .and(aws_appsync_1.KeyCondition.eq(index.sName, index.sName)), index.indexName) + }); + usedOperations.push(localName); + } + }); + } + } + } + /** MUTATIONS */ + if (table.mutation) { + if (table.auto) { + // Create item + this.api.createResolver(`create${table.baseName}`, { + fieldName: `create${table.baseName}`, + typeName: 'Mutation', + dataSource, + responseMappingTemplate: aws_appsync_1.MappingTemplate.dynamoDbResultItem(), + requestMappingTemplate: aws_appsync_1.MappingTemplate.dynamoDbPutItem(aws_appsync_1.PrimaryKey.partition(table.pName).auto(), aws_appsync_1.Values.projecting('input')), + }); + } + // Put item + this.api.createResolver(`put${table.baseName}`, { + fieldName: `put${table.baseName}`, + typeName: 'Mutation', + dataSource, + responseMappingTemplate: aws_appsync_1.MappingTemplate.dynamoDbResultItem(), + requestMappingTemplate: aws_appsync_1.MappingTemplate.dynamoDbPutItem(this.getPrimaryKey(table.pName, table.sName), aws_appsync_1.Values.projecting('input')), + }); + // Delete item + this.api.createResolver(`delete${table.baseName}`, { + fieldName: `delete${table.baseName}`, + typeName: 'Mutation', + dataSource, + responseMappingTemplate: aws_appsync_1.MappingTemplate.dynamoDbResultItem(), + requestMappingTemplate: this.primaryTemplate(this.getPrimaryKey(table.pName, table.sName), "DeleteItem"), + }); + } + /** SUBSCRIPTIONS */ + if (table.subscription) { + this.api.createResolver(`on${table.baseName}Change`, { + fieldName: `on${table.baseName}Change`, + typeName: 'Subscription', + dataSource, + responseMappingTemplate: aws_appsync_1.MappingTemplate.dynamoDbResultItem(), + requestMappingTemplate: aws_appsync_1.MappingTemplate.dynamoDbPutItem(this.getPrimaryKey(table.pName, table.sName), aws_appsync_1.Values.projecting('input')), + }); + } + } + primaryTemplate(primaryKey, operation = "GetItem") { + return aws_appsync_1.MappingTemplate.fromString(`{"version": "2017-02-28", "operation": "${operation}", ${primaryKey.renderTemplate()}}`); + } + getPrimaryKey(partition, sort, auto) { + const sortKey = sort ? this.assign(sort, auto === "sort") : undefined; + return new aws_appsync_1.PrimaryKey(this.assign(partition, auto === "partition"), sortKey); + } + assign(name, auto = false) { + const arg = auto ? "$util.autoId()" : `$ctx.args.${name}`; + return new aws_appsync_1.Assign(name, arg); + } +} +exports.DbApi = DbApi; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGItYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RiL2RiLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5REFRaUM7QUFJakMsa0NBQW9EO0FBQ3BELE1BQWEsS0FBSztJQUdkLFlBQ1csS0FBZ0IsRUFDaEIsRUFBVSxFQUNWLEdBQWUsRUFDZixNQUFxQixFQUNyQixLQUFjOztRQUpkLFVBQUssR0FBTCxLQUFLLENBQVc7UUFDaEIsT0FBRSxHQUFGLEVBQUUsQ0FBUTtRQUNWLFFBQUcsR0FBSCxHQUFHLENBQVk7UUFDZixXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3JCLFVBQUssR0FBTCxLQUFLLENBQVM7UUFFckIsSUFBQSxvQkFBYSxFQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxnQ0FBa0IsQ0FBQyxLQUFLLEVBQzFDLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxZQUFZLEVBQUU7WUFDM0MsR0FBRztZQUNILElBQUksRUFBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxZQUFZO1lBQ3hDLEtBQUssRUFBRSxLQUFLLENBQUMsU0FBUztTQUN6QixDQUFDLENBQUM7UUFFSCxNQUFNLGNBQWMsR0FBWSxFQUFFLENBQUM7UUFDbkMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUVuQyxjQUFjO1FBQ2QsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFO1lBQ2IsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFO2dCQUNaLGtCQUFrQjtnQkFDbEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsT0FBTyxLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUU7b0JBQzdDLFNBQVMsRUFBRSxPQUFPLEtBQUssQ0FBQyxRQUFRLEVBQUU7b0JBQ2xDLFFBQVEsRUFBRSxPQUFPO29CQUNqQixVQUFVO29CQUNWLHVCQUF1QixF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QWEsRUFDYixJQUEyQjtRQUUzQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ3RFLE9BQU8sSUFBSSx3QkFBVSxDQUNuQixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxJQUFJLEtBQUssV0FBVyxDQUFDLEVBQzVDLE9BQU8sQ0FDUixDQUFDO0lBQ04sQ0FBQztJQUVELE1BQU0sQ0FBQyxJQUFZLEVBQUUsT0FBZ0IsS0FBSztRQUN0QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxhQUFhLElBQUksRUFBRSxDQUFDO1FBQzFELE9BQU8sSUFBSSxvQkFBTSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNqQyxDQUFDO0NBQ0o7QUF6TkQsc0JBeU5DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgXG4gICAgQXNzaWduLCBcbiAgICBEeW5hbW9EYkRhdGFTb3VyY2UsIFxuICAgIEdyYXBocWxBcGksIFxuICAgIEtleUNvbmRpdGlvbiwgXG4gICAgTWFwcGluZ1RlbXBsYXRlLCBcbiAgICBQcmltYXJ5S2V5LCBcbiAgICBWYWx1ZXMgXG59IGZyb20gJ2F3cy1jZGstbGliL2F3cy1hcHBzeW5jJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBEYlRhYmxlIH0gZnJvbSBcIi4vdGFibGVcIjtcbmltcG9ydCB7IEFwcFN5bmNTY2hlbWEgfSBmcm9tICcuLi9hcGkvc2NoZW1hJztcbmltcG9ydCB7IGNhcGl0YWxpemUsIHZhbGlkYXRlVGFibGUgfSBmcm9tICcuLi91dGlsJztcbmV4cG9ydCBjbGFzcyBEYkFwaSB7XG4gICAgZGF0YVNvdXJjZTogRHluYW1vRGJEYXRhU291cmNlXG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgICAgIHB1YmxpYyBpZDogc3RyaW5nLFxuICAgICAgICBwdWJsaWMgYXBpOiBHcmFwaHFsQXBpLFxuICAgICAgICBwdWJsaWMgc2NoZW1hOiBBcHBTeW5jU2NoZW1hLFxuICAgICAgICBwdWJsaWMgdGFibGU6IERiVGFibGUsXG4gICAgKSB7XG4gICAgICAgIHZhbGlkYXRlVGFibGUodGFibGUpO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgRHluYW1vRGJEYXRhU291cmNlKHNjb3BlLCBcbiAgICAgICAgICAgIGAke2lkfS0ke3RoaXMudGFibGUudGFibGVOYW1lfURhdGFTb3VyY2VgLCB7XG4gICAgICAgICAgICBhcGksIFxuICAgICAgICAgICAgbmFtZTpgJHt0aGlzLnRhYmxlLnRhYmxlTmFtZX1EYXRhU291cmNlYCxcbiAgICAgICAgICAgIHRhYmxlOiB0YWJsZS5jb25zdHJ1Y3RcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdXNlZE9wZXJhdGlvbnM6c3RyaW5nW10gPSBbXTtcbiAgICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IHRoaXMuZGF0YVNvdXJjZTtcblxuICAgICAgICAvKiogUVVFUklFUyAqL1xuICAgICAgICBpZiAodGFibGUucXVlcnkpIHtcbiAgICAgICAgICAgIGlmICh0YWJsZS5zY2FuKSB7XG4gICAgICAgICAgICAgICAgLy8gR2V0IFdob2xlIFRhYmxlXG4gICAgICAgICAgICAgICAgdGhpcy5hcGkuY3JlYXRlUmVzb2x2ZXIoYHNjYW4ke3RhYmxlLmJhc2VOYW1lfWAsIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lOiBgc2NhbiR7dGFibGUuYmFzZU5hbWV9YCxcbiAgICAgICAgICAgICAgICAgICAgdHlwZU5hbWU6ICdRdWVyeScsXG4gICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlTWFwcGluZ1RlbXBsYXRlOiBNYXBwaW5nVGVtcGxhdGUuZHluYW1vRGJSZXN1bHRMaXN0KCksXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RNYXBwaW5nVGVtcGxhdGU6IE1hcHBpbmdUZW1wbGF0ZS5keW5hbW9EYlNjYW5UYWJsZSgpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBnZXROYW1lID0gYGdldCR7dGFibGUuYmFzZU5hbWV9Qnkke2NhcGl0YWxpemUodGFibGUucE5hbWUpfWA7XG4gICAgICAgICAgICBpZiAodGFibGUuc05hbWUpIGdldE5hbWUgKz0gYEFuZCR7Y2FwaXRhbGl6ZSh0YWJsZS5zTmFtZSl9YDtcbiAgICAgICAgICAgIGlmICghdXNlZE9wZXJhdGlvbnMuaW5jbHVkZXMoZ2V0TmFtZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwaS5jcmVhdGVSZXNvbHZlcihnZXROYW1lLCB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkTmFtZTogZ2V0TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZU5hbWU6ICdRdWVyeScsXG4gICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlTWFwcGluZ1RlbXBsYXRlOiBNYXBwaW5nVGVtcGxhdGUuZHluYW1vRGJSZXN1bHRJdGVtKCksXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RNYXBwaW5nVGVtcGxhdGU6IHRhYmxlLnNOYW1lID8gXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByaW1hcnlUZW1wbGF0ZSh0aGlzLmdldFByaW1hcnlLZXkodGFibGUucE5hbWUsIHRhYmxlLnNOYW1lKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogTWFwcGluZ1RlbXBsYXRlLmR5bmFtb0RiR2V0SXRlbSh0YWJsZS5wTmFtZSwgdGFibGUucE5hbWUpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdXNlZE9wZXJhdGlvbnMucHVzaChnZXROYW1lKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRhYmxlLnNOYW1lKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFydGl0aW9uS2V5TmFtZSA9IGBsaXN0JHt0YWJsZS5iYXNlTmFtZX1CeSR7Y2FwaXRhbGl6ZSh0YWJsZS5wTmFtZSl9YDtcbiAgICAgICAgICAgICAgICBpZiAoIXVzZWRPcGVyYXRpb25zLmluY2x1ZGVzKHBhcnRpdGlvbktleU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXBpLmNyZWF0ZVJlc29sdmVyKHBhcnRpdGlvbktleU5hbWUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkTmFtZTogcGFydGl0aW9uS2V5TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVOYW1lOiAnUXVlcnknLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlTWFwcGluZ1RlbXBsYXRlOiBNYXBwaW5nVGVtcGxhdGUuZHluYW1vRGJSZXN1bHRMaXN0KCksXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0TWFwcGluZ1RlbXBsYXRlOiBNYXBwaW5nVGVtcGxhdGUuZHluYW1vRGJRdWVyeShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBLZXlDb25kaXRpb24uZXEodGFibGUucE5hbWUsIHRhYmxlLnBOYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB1c2VkT3BlcmF0aW9ucy5wdXNoKHBhcnRpdGlvbktleU5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gTG9vcCB0aHJvdWdoIGluZGV4ZXNcbiAgICAgICAgICAgIGlmICh0YWJsZS5nbG9iYWxTZWNvbmRhcnlJbmRleGVzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0YWJsZS5nbG9iYWxTZWNvbmRhcnlJbmRleGVzLmZvckVhY2goaW5kZXggPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmVmaXggPSAoaW5kZXguc29ydEtleSB8fCBpbmRleC5saXN0KSA/ICdsaXN0JyA6ICdnZXQnO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBnZXRJbmRleE5hbWUgPSBgJHtwcmVmaXh9JHt0YWJsZS5iYXNlTmFtZX1CeSR7Y2FwaXRhbGl6ZShpbmRleC5wTmFtZSl9YFxuICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF1c2VkT3BlcmF0aW9ucy5pbmNsdWRlcyhnZXRJbmRleE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW5kZXhfbmFtZTogc3RyaW5nID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXguaW5kZXhOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhfbmFtZSA9IGluZGV4LmluZGV4TmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4X25hbWUgPSBgZ2xvYmFsJHt0YWJsZS5iYXNlTmFtZX0ke2NhcGl0YWxpemUoaW5kZXgucE5hbWUpfSR7Y2FwaXRhbGl6ZShpbmRleC5zTmFtZSB8fCAnJyl9YFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFwaS5jcmVhdGVSZXNvbHZlcihnZXRJbmRleE5hbWUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZE5hbWU6IGdldEluZGV4TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlTmFtZTogJ1F1ZXJ5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlTWFwcGluZ1RlbXBsYXRlOiAoaW5kZXguc29ydEtleSB8fCBpbmRleC5saXN0KSA/IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXBwaW5nVGVtcGxhdGUuZHluYW1vRGJSZXN1bHRMaXN0KCkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXBwaW5nVGVtcGxhdGUuZHluYW1vRGJSZXN1bHRJdGVtKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdE1hcHBpbmdUZW1wbGF0ZTogTWFwcGluZ1RlbXBsYXRlLmR5bmFtb0RiUXVlcnkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtleUNvbmRpdGlvbi5lcShpbmRleC5wTmFtZSwgaW5kZXgucE5hbWUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleF9uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRPcGVyYXRpb25zLnB1c2goZ2V0SW5kZXhOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4LnNOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzb3J0TmFtZSA9IGBnZXQke3RhYmxlLmJhc2VOYW1lfUJ5JHtjYXBpdGFsaXplKGluZGV4LnBOYW1lKX1BbmQke2NhcGl0YWxpemUoaW5kZXguc05hbWUpfWBcbiAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXVzZWRPcGVyYXRpb25zLmluY2x1ZGVzKHNvcnROYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBpLmNyZWF0ZVJlc29sdmVyKHNvcnROYW1lLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkTmFtZTpzb3J0TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZU5hbWU6ICdRdWVyeScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlTWFwcGluZ1RlbXBsYXRlOiBNYXBwaW5nVGVtcGxhdGUuZHluYW1vRGJSZXN1bHRJdGVtKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RNYXBwaW5nVGVtcGxhdGU6IE1hcHBpbmdUZW1wbGF0ZS5keW5hbW9EYlF1ZXJ5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS2V5Q29uZGl0aW9uLmVxKGluZGV4LnBOYW1lLCBpbmRleC5wTmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYW5kKEtleUNvbmRpdGlvbi5lcShpbmRleC5zTmFtZSwgaW5kZXguc05hbWUpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LmluZGV4TmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkT3BlcmF0aW9ucy5wdXNoKHNvcnROYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICBpZiAodGFibGUubG9jYWxTZWNvbmRhcnlJbmRleGVzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFibGUubG9jYWxTZWNvbmRhcnlJbmRleGVzLmZvckVhY2goaW5kZXggPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbG9jYWxOYW1lID0gYGdldCR7dGFibGUuYmFzZU5hbWV9Qnkke2NhcGl0YWxpemUodGFibGUucE5hbWUpfUFuZCR7Y2FwaXRhbGl6ZShpbmRleC5zTmFtZSl9YFxuICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdXNlZE9wZXJhdGlvbnMuaW5jbHVkZXMobG9jYWxOYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBpLmNyZWF0ZVJlc29sdmVyKGxvY2FsTmFtZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZE5hbWU6bG9jYWxOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlTmFtZTogJ1F1ZXJ5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VNYXBwaW5nVGVtcGxhdGU6IE1hcHBpbmdUZW1wbGF0ZS5keW5hbW9EYlJlc3VsdEl0ZW0oKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdE1hcHBpbmdUZW1wbGF0ZTogTWFwcGluZ1RlbXBsYXRlLmR5bmFtb0RiUXVlcnkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLZXlDb25kaXRpb24uZXEodGFibGUucE5hbWUsIHRhYmxlLnBOYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hbmQoS2V5Q29uZGl0aW9uLmVxKGluZGV4LnNOYW1lLCBpbmRleC5zTmFtZSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXguaW5kZXhOYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRPcGVyYXRpb25zLnB1c2gobG9jYWxOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvKiogTVVUQVRJT05TICovXG4gICAgICAgIGlmICh0YWJsZS5tdXRhdGlvbikge1xuICAgICAgICAgICAgaWYgKHRhYmxlLmF1dG8pIHtcbiAgICAgICAgICAgICAgICAvLyBDcmVhdGUgaXRlbVxuICAgICAgICAgICAgICAgIHRoaXMuYXBpLmNyZWF0ZVJlc29sdmVyKGBjcmVhdGUke3RhYmxlLmJhc2VOYW1lfWAsIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lOiBgY3JlYXRlJHt0YWJsZS5iYXNlTmFtZX1gLFxuICAgICAgICAgICAgICAgICAgICB0eXBlTmFtZTogJ011dGF0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VNYXBwaW5nVGVtcGxhdGU6IE1hcHBpbmdUZW1wbGF0ZS5keW5hbW9EYlJlc3VsdEl0ZW0oKSxcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdE1hcHBpbmdUZW1wbGF0ZTogTWFwcGluZ1RlbXBsYXRlLmR5bmFtb0RiUHV0SXRlbShcbiAgICAgICAgICAgICAgICAgICAgICAgIFByaW1hcnlLZXkucGFydGl0aW9uKHRhYmxlLnBOYW1lKS5hdXRvKCksXG4gICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZXMucHJvamVjdGluZygnaW5wdXQnKVxuICAgICAgICAgICAgICAgICAgICApLCAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFB1dCBpdGVtXG4gICAgICAgICAgICB0aGlzLmFwaS5jcmVhdGVSZXNvbHZlcihgcHV0JHt0YWJsZS5iYXNlTmFtZX1gLCB7XG4gICAgICAgICAgICAgICAgZmllbGROYW1lOiBgcHV0JHt0YWJsZS5iYXNlTmFtZX1gLFxuICAgICAgICAgICAgICAgIHR5cGVOYW1lOiAnTXV0YXRpb24nLFxuICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VNYXBwaW5nVGVtcGxhdGU6IE1hcHBpbmdUZW1wbGF0ZS5keW5hbW9EYlJlc3VsdEl0ZW0oKSxcbiAgICAgICAgICAgICAgICByZXF1ZXN0TWFwcGluZ1RlbXBsYXRlOiBNYXBwaW5nVGVtcGxhdGUuZHluYW1vRGJQdXRJdGVtKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFByaW1hcnlLZXkodGFibGUucE5hbWUsIHRhYmxlLnNOYW1lKSxcbiAgICAgICAgICAgICAgICAgICAgVmFsdWVzLnByb2plY3RpbmcoJ2lucHV0JylcbiAgICAgICAgICAgICAgICApLCAgICAgICAgICAgIFxuICAgICAgICAgICAgfSkgIFxuXG4gICAgICAgICAgICAvLyBEZWxldGUgaXRlbVxuICAgICAgICAgICAgdGhpcy5hcGkuY3JlYXRlUmVzb2x2ZXIoYGRlbGV0ZSR7dGFibGUuYmFzZU5hbWV9YCwge1xuICAgICAgICAgICAgICAgIGZpZWxkTmFtZTogYGRlbGV0ZSR7dGFibGUuYmFzZU5hbWV9YCxcbiAgICAgICAgICAgICAgICB0eXBlTmFtZTogJ011dGF0aW9uJyxcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlTWFwcGluZ1RlbXBsYXRlOiBNYXBwaW5nVGVtcGxhdGUuZHluYW1vRGJSZXN1bHRJdGVtKCksXG4gICAgICAgICAgICAgICAgcmVxdWVzdE1hcHBpbmdUZW1wbGF0ZTogdGhpcy5wcmltYXJ5VGVtcGxhdGUoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0UHJpbWFyeUtleSh0YWJsZS5wTmFtZSwgdGFibGUuc05hbWUpLFxuICAgICAgICAgICAgICAgICAgICBcIkRlbGV0ZUl0ZW1cIlxuICAgICAgICAgICAgICAgICksICAgICAgICAgICAgXG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgLyoqIFNVQlNDUklQVElPTlMgKi9cbiAgICAgICAgaWYgKHRhYmxlLnN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5hcGkuY3JlYXRlUmVzb2x2ZXIoYG9uJHt0YWJsZS5iYXNlTmFtZX1DaGFuZ2VgLCB7XG4gICAgICAgICAgICAgICAgZmllbGROYW1lOiBgb24ke3RhYmxlLmJhc2VOYW1lfUNoYW5nZWAsXG4gICAgICAgICAgICAgICAgdHlwZU5hbWU6ICdTdWJzY3JpcHRpb24nLFxuICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VNYXBwaW5nVGVtcGxhdGU6IE1hcHBpbmdUZW1wbGF0ZS5keW5hbW9EYlJlc3VsdEl0ZW0oKSxcbiAgICAgICAgICAgICAgICByZXF1ZXN0TWFwcGluZ1RlbXBsYXRlOiBNYXBwaW5nVGVtcGxhdGUuZHluYW1vRGJQdXRJdGVtKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFByaW1hcnlLZXkodGFibGUucE5hbWUsIHRhYmxlLnNOYW1lKSxcbiAgICAgICAgICAgICAgICAgICAgVmFsdWVzLnByb2plY3RpbmcoJ2lucHV0JylcbiAgICAgICAgICAgICAgICApLCAgICAgICAgICAgIFxuICAgICAgICAgICAgfSkgIFxuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICBwcmltYXJ5VGVtcGxhdGUocHJpbWFyeUtleTogUHJpbWFyeUtleSwgb3BlcmF0aW9uOiBzdHJpbmcgPSBcIkdldEl0ZW1cIik6IE1hcHBpbmdUZW1wbGF0ZSB7XG4gICAgICAgIHJldHVybiBNYXBwaW5nVGVtcGxhdGUuZnJvbVN0cmluZyhcbiAgICAgICAgICBge1widmVyc2lvblwiOiBcIjIwMTctMDItMjhcIiwgXCJvcGVyYXRpb25cIjogXCIke29wZXJhdGlvbn1cIiwgJHtwcmltYXJ5S2V5LnJlbmRlclRlbXBsYXRlKCl9fWBcbiAgICAgICAgKTtcbiAgICB9XG5cblxuICAgIGdldFByaW1hcnlLZXkoXG4gICAgICAgIHBhcnRpdGlvbjogc3RyaW5nLFxuICAgICAgICBzb3J0Pzogc3RyaW5nLFxuICAgICAgICBhdXRvPzogXCJwYXJ0aXRpb25cIiB8IFwic29ydFwiXG4gICAgICApOiBQcmltYXJ5S2V5IHtcbiAgICAgICAgY29uc3Qgc29ydEtleSA9IHNvcnQgPyB0aGlzLmFzc2lnbihzb3J0LCBhdXRvID09PSBcInNvcnRcIikgOiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBuZXcgUHJpbWFyeUtleShcbiAgICAgICAgICB0aGlzLmFzc2lnbihwYXJ0aXRpb24sIGF1dG8gPT09IFwicGFydGl0aW9uXCIpLFxuICAgICAgICAgIHNvcnRLZXlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBhc3NpZ24obmFtZTogc3RyaW5nLCBhdXRvOiBib29sZWFuID0gZmFsc2UpOiBBc3NpZ24ge1xuICAgICAgICBjb25zdCBhcmcgPSBhdXRvID8gXCIkdXRpbC5hdXRvSWQoKVwiIDogYCRjdHguYXJncy4ke25hbWV9YDtcbiAgICAgICAgcmV0dXJuIG5ldyBBc3NpZ24obmFtZSwgYXJnKTtcbiAgICB9XG59Il19 \ No newline at end of file diff --git a/lib/db/table.js b/lib/db/table.js new file mode 100644 index 0000000..857b46e --- /dev/null +++ b/lib/db/table.js @@ -0,0 +1,107 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.DbTable = void 0; +const aws_dynamodb_1 = require("aws-cdk-lib/aws-dynamodb"); +const primary_1 = require("../key/primary"); +const local_1 = require("../key/local"); +const global_1 = require("../key/global"); +const util_1 = require("../util"); +const instance_1 = require("../key/instance"); +const db_api_1 = require("./db-api"); +class DbTable { + constructor(scope, schemaTable, label) { + this.scope = scope; + this.schemaTable = schemaTable; + this.label = label; + this.baseName = this.schemaTable.tableName; + this.tableName = this.label ? `${this.label}\.${this.schemaTable.tableName}` : this.schemaTable.tableName; + this.props = { + pointInTimeRecovery: true, + ...(this.schemaTable.tableProps || {}), + }; + this.localSecondaryIndexes = this.setLocalKeys(this.schemaTable.localSecondaryIndexes); + this.globalSecondaryIndexes = this.setGlobalKeys(this.schemaTable.globalSecondaryIndexes); + this.primaryKey = new primary_1.SchemaPrimaryKey(this.schemaTable.partitionKey, this.schemaTable.sortKey); + this.attributes = this.setGraphAttributes(this.schemaTable.attributes || {}); + this.auto = this.schemaTable.auto || false; + this.scan = this.schemaTable.scan || false; + this.subscription = this.schemaTable.subscription || false; + this.query = this.scan ? true : (this.schemaTable.hasOwnProperty('query') ? !!this.schemaTable.query : true); + this.mutation = this.auto ? true : (this.schemaTable.hasOwnProperty('mutation') ? !!this.schemaTable.mutation : true); + this.construct = new aws_dynamodb_1.Table(scope, this.tableName, { + ...this.props, + ...this.primaryKey.keySchema, + tableName: this.tableName, + }); + if (this.globalSecondaryIndexes) + this.globalSecondaryIndexes.forEach(ind => this.construct.addGlobalSecondaryIndex(ind.props), this); + if (this.localSecondaryIndexes) + this.localSecondaryIndexes.forEach(ind => this.construct.addLocalSecondaryIndex(ind.props), this); + } + get pName() { + return this.primaryKey.partitionKey.name; + } + get sName() { + var _a; + return (_a = this.primaryKey.sortKey) === null || _a === void 0 ? void 0 : _a.name; + } + addApi(api, schema) { + this.api = new db_api_1.DbApi(this.scope, `${this.tableName}Api`, api, schema, this); + return this.api; + } + setLocalKeys(keys) { + if (!(keys === null || keys === void 0 ? void 0 : keys.length)) + return []; + return keys.map($key => { + if ($key instanceof local_1.SchemaLocalIndex) + return $key; + const key = typeof $key === 'string' ? { + sortKey: new instance_1.KeyInstance($key, undefined, 'sort') + } : $key; + const name = key.indexName || `local${(0, util_1.capitalize)(this.tableName) + (0, util_1.capitalize)(typeof key.sortKey === 'string' ? key.sortKey : key.sortKey.name)}`; + return new local_1.SchemaLocalIndex(name, key.sortKey, key.include); + }); + } + setGlobalKeys(keys) { + if (!(keys === null || keys === void 0 ? void 0 : keys.length)) + return []; + return keys.map($key => { + if ($key instanceof global_1.SchemaGlobalIndex) + return $key; + const key = typeof $key === 'string' ? { + partitionKey: new instance_1.KeyInstance($key, undefined, 'partition') + } : $key; + let name = ''; + if (key.indexName) { + name = key.indexName; + } + else { + const partitionKeyName = typeof key.partitionKey === 'string' + ? key.partitionKey + : key.partitionKey.name; + const sortKeyName = key.sortKey + ? typeof key.sortKey === 'string' + ? key.sortKey + : key.sortKey.name + : ''; + name = `global${(0, util_1.capitalize)(this.tableName)}${(0, util_1.capitalize)(partitionKeyName)}${(0, util_1.capitalize)(sortKeyName)}`; + } + return new global_1.SchemaGlobalIndex(name, key.partitionKey, key.sortKey, key.list, key.include, key.capacity); + }); + } + setGraphAttributes(attrs) { + if (typeof attrs === 'string') + attrs = [attrs]; + let $attr = {}; + if (Array.isArray(attrs)) { + attrs.forEach(at => { + $attr[at] = 'string'; + }); + } + else if (attrs && typeof attrs === 'object') + $attr = attrs; + return $attr; + } +} +exports.DbTable = DbTable; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGIvdGFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkRBS2tDO0FBU2xDLDRDQUFrRDtBQUNsRCx3Q0FBZ0Q7QUFDaEQsMENBQWtEO0FBQ2xELGtDQUFxQztBQUNyQyw4Q0FBOEM7QUFDOUMscUNBQWlDO0FBS2pDLE1BQWEsT0FBTztJQW1CaEIsWUFDVyxLQUFnQixFQUNQLFdBQXdCLEVBQ3hCLEtBQWE7UUFGdEIsVUFBSyxHQUFMLEtBQUssQ0FBVztRQUNQLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLFVBQUssR0FBTCxLQUFLLENBQVE7UUFyQnhCLGFBQVEsR0FBVSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQztRQUM3QyxjQUFTLEdBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDO1FBR3ZILFVBQUssR0FBcUI7WUFDdEIsbUJBQW1CLEVBQUUsSUFBSTtZQUN6QixHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDO1NBQ3pDLENBQUE7UUFDRCwwQkFBcUIsR0FBdUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLHFCQUFxQixDQUFDLENBQUE7UUFDckcsMkJBQXNCLEdBQXdCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFBO1FBQ3pHLGVBQVUsR0FBRyxJQUFJLDBCQUFnQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0YsZUFBVSxHQUEwQixJ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QUssQ0FBQztJQUNqQixDQUFDO0NBQ0o7QUFqSEQsMEJBaUhDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgXG4gICAgQmlsbGluZ01vZGUsIFxuICAgIFRhYmxlLCBcbiAgICBTdHJlYW1WaWV3VHlwZSwgXG4gICAgVGFibGVQcm9wc1xufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZHluYW1vZGInO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBcbiAgICBEeW5hbW9UYWJsZVByb3BzLCBcbiAgICBTY2hlbWFHbG9iYWwsIFxuICAgIFNjaGVtYUxvY2FsLCBcbiAgICBTY2hlbWFUYWJsZSwgXG4gICAgU2NoZW1hVGFibGVJbnN0YW5jZSBcbn0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgU2NoZW1hUHJpbWFyeUtleSB9IGZyb20gJy4uL2tleS9wcmltYXJ5JztcbmltcG9ydCB7IFNjaGVtYUxvY2FsSW5kZXggfSBmcm9tICcuLi9rZXkvbG9jYWwnO1xuaW1wb3J0IHsgU2NoZW1hR2xvYmFsSW5kZXggfSBmcm9tICcuLi9rZXkvZ2xvYmFsJztcbmltcG9ydCB7IGNhcGl0YWxpemUgfSBmcm9tICcuLi91dGlsJztcbmltcG9ydCB7IEtleUluc3RhbmNlIH0gZnJvbSAnLi4va2V5L2luc3RhbmNlJztcbmltcG9ydCB7IERiQXBpIH0gZnJvbSAnLi9kYi1hcGknO1xuaW1wb3J0IHsgR3JhcGhxbEFwaSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1hcHBzeW5jJztcbmltcG9ydCB7IEFwcFN5bmNTY2hlbWEgfSBmcm9tICcuLi9hcGkvc2NoZW1hJztcblxuXG5leHBvcnQgY2xhc3MgRGJUYWJsZSBpbXBsZW1lbnRzIFNjaGVtYVRhYmxlSW5zdGFuY2Uge1xuICAgIHJlYWRvbmx5IGJhc2VOYW1lOnN0cmluZyA9IHRoaXMuc2NoZW1hVGFibGUudGFibGVOYW1lO1xuICAgIHJlYWRvbmx5IHRhYmxlTmFtZTogc3RyaW5nID0gIHRoaXMubGFiZWwgPyBgJHt0aGlzLmxhYmVsfVxcLiR7dGhpcy5zY2hlbWFUYWJsZS50YWJsZU5hbWV9YCA6IHRoaXMuc2NoZW1hVGFibGUudGFibGVOYW1lO1xuICAgIGNvbnN0cnVjdDogVGFibGVcbiAgICBhcGk/OiBEYkFwaVxuICAgIHByb3BzOiBEeW5hbW9UYWJsZVByb3BzID0ge1xuICAgICAgICBwb2ludEluVGltZVJlY292ZXJ5OiB0cnVlLFxuICAgICAgICAuLi4odGhpcy5zY2hlbWFUYWJsZS50YWJsZVByb3BzIHx8IHt9KSxcbiAgICB9XG4gICAgbG9jYWxTZWNvbmRhcnlJbmRleGVzOiBTY2hlbWFMb2NhbEluZGV4W10gPSB0aGlzLnNldExvY2FsS2V5cyh0aGlzLnNjaGVtYVRhYmxlLmxvY2FsU2Vjb25kYXJ5SW5kZXhlcylcbiAgICBnbG9iYWxTZWNvbmRhcnlJbmRleGVzOiBTY2hlbWFHbG9iYWxJbmRleFtdID0gdGhpcy5zZXRHbG9iYWxLZXlzKHRoaXMuc2NoZW1hVGFibGUuZ2xvYmFsU2Vjb25kYXJ5SW5kZXhlcylcbiAgICBwcmltYXJ5S2V5ID0gbmV3IFNjaGVtYVByaW1hcnlLZXkodGhpcy5zY2hlbWFUYWJsZS5wYXJ0aXRpb25LZXksIHRoaXMuc2NoZW1hVGFibGUuc29ydEtleSk7XG4gICAgYXR0cmlidXRlczogUmVjb3JkPHN0cmluZyxzdHJpbmc+ID0gdGhpcy5zZXRHcmFwaEF0dHJpYnV0ZXModGhpcy5zY2hlbWFUYWJsZS5hdHRyaWJ1dGVzIHx8IHt9KVxuICAgIHJlYWRvbmx5IGF1dG8gPSB0aGlzLnNjaGVtYVRhYmxlLmF1dG8gfHwgZmFsc2VcbiAgICByZWFkb25seSBzY2FuID0gdGhpcy5zY2hlbWFUYWJsZS5zY2FuIHx8IGZhbHNlIFxuICAgIHJlYWRvbmx5IHN1YnNjcmlwdGlvbiA9IHRoaXMuc2NoZW1hVGFibGUuc3Vic2NyaXB0aW9uIHx8IGZhbHNlXG4gICAgcmVhZG9ubHkgcXVlcnkgPSB0aGlzLnNjYW4gPyB0cnVlIDogKHRoaXMuc2NoZW1hVGFibGUuaGFzT3duUHJvcGVydHkoJ3F1ZXJ5JykgPyAhIXRoaXMuc2NoZW1hVGFibGUucXVlcnkgOiB0cnVlKVxuICAgIHJlYWRvbmx5IG11dGF0aW9uID0gdGhpcy5hdXRvID8gdHJ1ZSA6ICh0aGlzLnNjaGVtYVRhYmxlLmhhc093blByb3BlcnR5KCdtdXRhdGlvbicpID8gISF0aGlzLnNjaGVtYVRhYmxlLm11dGF0aW9uIDogdHJ1ZSlcbiAgICBcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBzY2hlbWFUYWJsZTogU2NoZW1hVGFibGUsIFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgbGFiZWw/OnN0cmluZ1xuICAgICkge1xuXG4gICAgICAgIHRoaXMuY29uc3RydWN0ID0gbmV3IFRhYmxlKHNjb3BlLCB0aGlzLnRhYmxlTmFtZSwge1xuICAgICAgICAgICAgLi4udGhpcy5wcm9wcyxcbiAgICAgICAgICAgIC4uLnRoaXMucHJpbWFyeUtleS5rZXlTY2hlbWEsXG4gICAgICAgICAgICB0YWJsZU5hbWU6IHRoaXMudGFibGVOYW1lLFxuICAgICAgICB9KTsgXG4gICAgICAgIGlmICh0aGlzLmdsb2JhbFNlY29uZGFyeUluZGV4ZXMpXG4gICAgICAgICAgICB0aGlzLmdsb2JhbFNlY29uZGFyeUluZGV4ZXMuZm9yRWFjaChpbmQgPT4gdGhpcy5jb25zdHJ1Y3QuYWRkR2xvYmFsU2Vjb25kYXJ5SW5kZXgoaW5kLnByb3BzKSx0aGlzKTtcbiAgICAgICAgaWYgKHRoaXMubG9jYWxTZWNvbmRhcnlJbmRleGVzKVxuICAgICAgICAgICAgdGhpcy5sb2NhbFNlY29uZGFyeUluZGV4ZXMuZm9yRWFjaChpbmQgPT4gdGhpcy5jb25zdHJ1Y3QuYWRkTG9jYWxTZWNvbmRhcnlJbmRleChpbmQucHJvcHMpLHRoaXMpOyAgICAgICAgIFxuICAgIH1cblxuICAgIGdldCBwTmFtZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5wcmltYXJ5S2V5LnBhcnRpdGlvbktleS5uYW1lXG4gICAgfVxuXG4gICAgZ2V0IHNOYW1lKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLnByaW1hcnlLZXkuc29ydEtleT8ubmFtZVxuICAgIH1cblxuICAgIGFkZEFwaShhcGk6R3JhcGhxbEFwaSwgc2NoZW1hOkFwcFN5bmNTY2hlbWEpOiBEYkFwaSB7XG4gICAgICAgIHRoaXMuYXBpID0gbmV3IERiQXBpKHRoaXMuc2NvcGUsIGAke3RoaXMudGFibGVOYW1lfUFwaWAsIGFwaSwgc2NoZW1hLCB0aGlzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpO1xuICAgIH1cblxuICAgICBwcm90ZWN0ZWQgc2V0TG9jYWxLZXlzKGtleXM/OiAoc3RyaW5nIHwgU2NoZW1hTG9jYWwgfCBTY2hlbWFMb2NhbEluZGV4KVtdKTogU2NoZW1hTG9jYWxJbmRleFtdIHtcbiAgICAgICAgaWYgKCFrZXlzPy5sZW5ndGgpIHJldHVybiBbXTtcbiAgICAgICAgcmV0dXJuIGtleXMubWFwKCRrZXkgPT4ge1xuICAgICAgICAgICAgaWYgKCRrZXkgaW5zdGFuY2VvZiBTY2hlbWFMb2NhbEluZGV4KSByZXR1cm4gJGtleTtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHR5cGVvZiAka2V5ID09PSAnc3RyaW5nJyA/IHtcbiAgICAgICAgICAgICAgICBzb3J0S2V5OiBuZXcgS2V5SW5zdGFuY2UoJGtleSwgdW5kZWZpbmVkLCAnc29ydCcpXG4gICAgICAgICAgICB9IDogJGtleTtcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBrZXkuaW5kZXhOYW1lIHx8IGBsb2NhbCR7Y2FwaXRhbGl6ZSh0aGlzLnRhYmxlTmFtZSkgKyBjYXBpdGFsaXplKFxuICAgICAgICAgICAgICAgIHR5cGVvZiBrZXkuc29ydEtleSA9PT0gJ3N0cmluZycgPyBrZXkuc29ydEtleSA6IGtleS5zb3J0S2V5Lm5hbWVcbiAgICAgICAgICAgICl9YFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBTY2hlbWFMb2NhbEluZGV4KFxuICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICBrZXkuc29ydEtleSxcbiAgICAgICAgICAgICAgICAgICAga2V5LmluY2x1ZGVcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBzZXRHbG9iYWxLZXlzKGtleXM/OiAoc3RyaW5nIHwgU2NoZW1hR2xvYmFsIHwgU2NoZW1hR2xvYmFsSW5kZXgpW10pOiBTY2hlbWFHbG9iYWxJbmRleFtdIHtcbiAgICAgICAgaWYgKCFrZXlzPy5sZW5ndGgpIHJldHVybiBbXTtcbiAgICAgICAgcmV0dXJuIGtleXMubWFwKCRrZXkgPT4ge1xuICAgICAgICAgICAgaWYgKCRrZXkgaW5zdGFuY2VvZiBTY2hlbWFHbG9iYWxJbmRleCkgcmV0dXJuICRrZXk7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSB0eXBlb2YgJGtleSA9PT0gJ3N0cmluZycgPyB7XG4gICAgICAgICAgICAgICAgcGFydGl0aW9uS2V5OiBuZXcgS2V5SW5zdGFuY2UoJGtleSwgdW5kZWZpbmVkLCAncGFydGl0aW9uJylcbiAgICAgICAgICAgIH0gOiAka2V5O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBsZXQgbmFtZTogc3RyaW5nID0gJyc7XG4gICAgICAgICAgICBpZiAoa2V5LmluZGV4TmFtZSkge1xuICAgICAgICAgICAgICAgIG5hbWUgPSBrZXkuaW5kZXhOYW1lO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJ0aXRpb25LZXlOYW1lID0gdHlwZW9mIGtleS5wYXJ0aXRpb25LZXkgPT09ICdzdHJpbmcnIFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBrZXkucGFydGl0aW9uS2V5IFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBrZXkucGFydGl0aW9uS2V5Lm5hbWU7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc29ydEtleU5hbWUgPSBrZXkuc29ydEtleVxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0eXBlb2Yga2V5LnNvcnRLZXkgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBrZXkuc29ydEtleVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoga2V5LnNvcnRLZXkubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAnJztcblxuICAgICAgICAgICAgICAgICAgICBuYW1lID0gYGdsb2JhbCR7Y2FwaXRhbGl6ZSh0aGlzLnRhYmxlTmFtZSl9JHtjYXBpdGFsaXplKHBhcnRpdGlvbktleU5hbWUpfSR7Y2FwaXRhbGl6ZShzb3J0S2V5TmFtZSl9YDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBTY2hlbWFHbG9iYWxJbmRleChcbiAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAga2V5LnBhcnRpdGlvbktleSxcbiAgICAgICAgICAgICAgICAgICAga2V5LnNvcnRLZXksXG4gICAgICAgICAgICAgICAgICAgIGtleS5saXN0LFxuICAgICAgICAgICAgICAgICAgICBrZXkuaW5jbHVkZSxcbiAgICAgICAgICAgICAgICAgICAga2V5LmNhcGFjaXR5XG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgc2V0R3JhcGhBdHRyaWJ1dGVzKGF0dHJzPzpzdHJpbmcgfCBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsc3RyaW5nPik6IFJlY29yZDxzdHJpbmcsc3RyaW5nPiB7XG4gICAgICAgIGlmICh0eXBlb2YgYXR0cnMgPT09ICdzdHJpbmcnKSBhdHRycyA9IFthdHRyc107XG4gICAgICAgIGxldCAkYXR0cjpSZWNvcmQ8c3RyaW5nLHN0cmluZz4gPSB7fVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhdHRycykpIHtcbiAgICAgICAgICAgIGF0dHJzLmZvckVhY2goYXQgPT4ge1xuICAgICAgICAgICAgICAgICRhdHRyW2F0XSA9ICdzdHJpbmcnXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChhdHRycyAmJiB0eXBlb2YgYXR0cnMgPT09ICdvYmplY3QnKSAkYXR0ciA9IGF0dHJzO1xuICAgICAgICByZXR1cm4gJGF0dHI7XG4gICAgfVxufSJdfQ== \ No newline at end of file diff --git a/lib/export.js b/lib/export.js new file mode 100644 index 0000000..75becac --- /dev/null +++ b/lib/export.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.types = exports.Dynasync = void 0; +var _1 = require("."); +Object.defineProperty(exports, "Dynasync", { enumerable: true, get: function () { return _1.Dynasync; } }); +exports.types = require("./types"); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2V4cG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxzQkFBNkI7QUFBcEIsNEZBQUEsUUFBUSxPQUFBO0FBQ2pCLG1DQUFpQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IER5bmFzeW5jIH0gZnJvbSBcIi5cIjtcbmV4cG9ydCAqIGFzIHR5cGVzIGZyb20gXCIuL3R5cGVzXCI7XG4iXX0= \ No newline at end of file diff --git a/lib/index.js b/lib/index.js new file mode 100644 index 0000000..19c43c5 --- /dev/null +++ b/lib/index.js @@ -0,0 +1,128 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Dynasync = void 0; +const aws_cdk_lib_1 = require("aws-cdk-lib"); +const fs_1 = require("fs"); +const path_1 = require("path"); +const api_1 = require("./api"); +const aws_appsync_1 = require("aws-cdk-lib/aws-appsync"); +const aws_cognito_1 = require("aws-cdk-lib/aws-cognito"); +class Dynasync extends aws_cdk_lib_1.Resource { + static init(scope, id, props) { + return new Dynasync(scope, id, props); + } + /** + * {@link GraphqlApi} created by Dynasync + */ + get api() { + return this.appsync.api; + } + constructor(scope, id, $props = { + tables: [], + types: {} + }) { + var _a, _b, _c; + super(scope, id, $props); + this.scope = scope; + this.id = id; + this.$props = $props; + this.$config = { + tables: [], + types: {} + }; + if ($props.configFile) { + if (!(0, fs_1.existsSync)($props.configFile)) + throw new Error(`Config file ${$props.configFile} does not exist`); + if (!/json/.test((0, path_1.extname)($props.configFile))) + throw new Error(`File at ${$props.configFile} is not JSON file`); + } + const configFilePath = $props.configFile || (0, path_1.join)(process.cwd(), 'dynasync.json'); + if ((0, fs_1.existsSync)(configFilePath)) { + this.$config = JSON.parse((0, fs_1.readFileSync)(configFilePath).toString()); + } + const properties = this.props; + if (!((_a = properties.tables) === null || _a === void 0 ? void 0 : _a.length)) { + throw new Error("No tables provided. Cannot build API and Database without tables. Please configure parameters or provide 'dynasync.json' config file"); + } + let defaultAuthorization; + if (properties.userPool || !((_b = properties.auth) === null || _b === void 0 ? void 0 : _b.length)) { + defaultAuthorization = this.getUserPoolAuthMode(properties); + } + else { + defaultAuthorization = (properties.auth || []).shift(); + } + let additionalAuthorizationModes = ((_c = properties.auth) === null || _c === void 0 ? void 0 : _c.length) ? + properties.auth : undefined; + const config = { + defaultAuthorization, + additionalAuthorizationModes + }; + if (properties.deleteTablesWithStack) { + if (!properties.tableProps) + properties.tableProps = {}; + properties.tableProps.removalPolicy = aws_cdk_lib_1.RemovalPolicy.DESTROY; + } + this.appsync = new api_1.AppSyncStack(scope, `${id}AppSyncStack`, { + config, + tables: properties.tables || [], + schemaTypes: properties.types || {}, + apiProps: properties.apiProps, + tableProps: properties.tableProps + }); + this.tables = this.appsync.tables; + } + get props() { + return this.mergeProps(this.$config, this.$props); + } + addToSchema(str) { + if (!this.appsync) + throw new Error('Cannot add to schema until after Schema is created'); + this.appsync.schema.root.addToSchema(str); + return this.appsync.schema.root.getDefinition(this.appsync.api); + } + mergeProps(config, props) { + var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k; + return { + ...config, + ...props, + tables: [ + ...(config.tables || []), + ...(props.tables || []), + ], + types: { + enums: { + ...(((_a = config.types) === null || _a === void 0 ? void 0 : _a.enums) || {}), + ...(((_b = props.types) === null || _b === void 0 ? void 0 : _b.enums) || {}) + }, + unions: { + ...(((_c = config.types) === null || _c === void 0 ? void 0 : _c.unions) || {}), + ...(((_d = props.types) === null || _d === void 0 ? void 0 : _d.unions) || {}) + }, + types: { + ...(((_e = config.types) === null || _e === void 0 ? void 0 : _e.types) || {}), + ...(((_f = props.types) === null || _f === void 0 ? void 0 : _f.types) || {}) + }, + interfaces: { + ...(((_g = config.types) === null || _g === void 0 ? void 0 : _g.interfaces) || {}), + ...(((_h = props.types) === null || _h === void 0 ? void 0 : _h.interfaces) || {}) + }, + inputs: { + ...(((_j = config.types) === null || _j === void 0 ? void 0 : _j.inputs) || {}), + ...(((_k = props.types) === null || _k === void 0 ? void 0 : _k.inputs) || {}) + } + } + }; + } + getUserPoolAuthMode(properties) { + return { + authorizationType: aws_appsync_1.AuthorizationType.USER_POOL, + userPoolConfig: { + userPool: properties.userPool || new aws_cognito_1.UserPool(this.scope, `${this.id}UserPool`), + appIdClientRegex: properties.userPoolRegex, + defaultAction: properties.userPoolDeny ? aws_appsync_1.UserPoolDefaultAction.DENY : aws_appsync_1.UserPoolDefaultAction.ALLOW + } + }; + } +} +exports.Dynasync = Dynasync; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQXNEO0FBR3RELDJCQUErQztBQUMvQywrQkFBcUM7QUFFckMsK0JBQXFDO0FBQ3JDLHlEQUF1STtBQUN2SSx5REFBbUQ7QUFFbkQsTUFBYSxRQUFTLFNBQVEsc0JBQVE7SUFRM0IsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFlLEVBQUUsRUFBVSxFQUFFLEtBQW9CO1FBQ2hFLE9BQU8sSUFBSSxRQUFRLENBQUMsS0FBSyxFQUFDLEVBQUUsRUFBQyxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLEdBQUc7UUFDSCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO0lBQzVCLENBQUM7SUFFRCxZQUNjLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixTQUF3QjtRQUM5QixNQUFNLEVBQUMsRUFBRTtRQUNULEtBQUssRUFBRSxFQUFFO0tBQ1o7O1FBRUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFQZixVQUFLLEdBQUwsS0FBSyxDQUFXO1FBQ2hCLE9BQUUsR0FBRixFQUFFLENBQVE7UUFDVixXQUFNLEdBQU4sTUFBTSxDQUdmO1FBdEJLLFlBQU8sR0FBa0I7WUFDL0IsTUFBTSxFQUFDLEVBQUU7WUFDVCxLQUFLLEVBQUUsRUFBRTtTQUNaLENBQUE7UUFzQkcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFO1lBQ25CLElBQUksQ0FBQyxJQUFBLGVBQVUsRUFBQyxNQUFNLENBQUMsVUFBVSxDQUFDO2dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsZUFBZSxNQUFNLENBQUMsVUFBVSxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3ZHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUEsY0FBTyxFQUFDLE1BQU0sQ0FBQyxVQUFVLENB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LEtBQUksRUFBRSxDQUFDO2lCQUNqQzthQUNKO1NBQ0osQ0FBQTtJQUNMLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxVQUF5QjtRQUNqRCxPQUFPO1lBQ0gsaUJBQWlCLEVBQUUsK0JBQWlCLENBQUMsU0FBUztZQUM5QyxjQUFjLEVBQUU7Z0JBQ1osUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRLElBQUksSUFBSSxzQkFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxVQUFVLENBQUM7Z0JBQy9FLGdCQUFnQixFQUFFLFVBQVUsQ0FBQyxhQUFhO2dCQUMxQyxhQUFhLEVBQUUsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsbUNBQXFCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxtQ0FBcUIsQ0FBQyxLQUFLO2FBQ3BHO1NBQ0osQ0FBQTtJQUNMLENBQUM7Q0FDSjtBQXZIRCw0QkF1SEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZW1vdmFsUG9saWN5LCBSZXNvdXJjZSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IER5bmFzeW5jUHJvcHMgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgcmVhZEZpbGVTeW5jLCBleGlzdHNTeW5jICB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IGV4dG5hbWUsIGpvaW4gfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgRGJUYWJsZSB9IGZyb20gXCIuL2RiL3RhYmxlXCI7XG5pbXBvcnQgeyBBcHBTeW5jU3RhY2sgfSBmcm9tIFwiLi9hcGlcIjtcbmltcG9ydCB7IEF1dGhvcml6YXRpb25Db25maWcsIEF1dGhvcml6YXRpb25Nb2RlLCBBdXRob3JpemF0aW9uVHlwZSwgR3JhcGhxbEFwaSwgVXNlclBvb2xEZWZhdWx0QWN0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1hcHBzeW5jXCI7XG5pbXBvcnQgeyBVc2VyUG9vbCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY29nbml0b1wiO1xuXG5leHBvcnQgY2xhc3MgRHluYXN5bmMgZXh0ZW5kcyBSZXNvdXJjZSB7XG4gICAgcHVibGljIHJlYWRvbmx5IHRhYmxlczogRGJUYWJsZVtdO1xuICAgIHB1YmxpYyByZWFkb25seSBhcHBzeW5jOiBBcHBTeW5jU3RhY2s7XG4gICAgcHJvdGVjdGVkICRjb25maWc6IER5bmFzeW5jUHJvcHMgPSB7XG4gICAgICAgIHRhYmxlczpbXSxcbiAgICAgICAgdHlwZXM6IHt9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBpbml0KHNjb3BlOkNvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM/OkR5bmFzeW5jUHJvcHMpOiBEeW5hc3luYyB7XG4gICAgICAgIHJldHVybiBuZXcgRHluYXN5bmMoc2NvcGUsaWQscHJvcHMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHtAbGluayBHcmFwaHFsQXBpfSBjcmVhdGVkIGJ5IER5bmFzeW5jXG4gICAgICovXG4gICAgZ2V0IGFwaSgpOiBHcmFwaHFsQXBpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwc3luYy5hcGk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBzY29wZTogQ29uc3RydWN0LFxuICAgICAgICBwcm90ZWN0ZWQgaWQ6IHN0cmluZyxcbiAgICAgICAgcHJvdGVjdGVkICRwcm9wczogRHluYXN5bmNQcm9wcyA9IHtcbiAgICAgICAgICAgIHRhYmxlczpbXSxcbiAgICAgICAgICAgIHR5cGVzOiB7fVxuICAgICAgICB9XG4gICAgKSB7XG4gICAgICAgIHN1cGVyKHNjb3BlLCBpZCwgJHByb3BzKTtcbiAgICAgICAgaWYgKCRwcm9wcy5jb25maWdGaWxlKSB7XG4gICAgICAgICAgICBpZiAoIWV4aXN0c1N5bmMoJHByb3BzLmNvbmZpZ0ZpbGUpKSB0aHJvdyBuZXcgRXJyb3IoYENvbmZpZyBmaWxlICR7JHByb3BzLmNvbmZpZ0ZpbGV9IGRvZXMgbm90IGV4aXN0YCk7XG4gICAgICAgICAgICBpZiAoIS9qc29uLy50ZXN0KGV4dG5hbWUoJHByb3BzLmNvbmZpZ0ZpbGUpKSkgIHRocm93IG5ldyBFcnJvcihgRmlsZSBhdCAkeyRwcm9wcy5jb25maWdGaWxlfSBpcyBub3QgSlNPTiBmaWxlYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29uZmlnRmlsZVBhdGggPSAkcHJvcHMuY29uZmlnRmlsZSB8fCBqb2luKHByb2Nlc3MuY3dkKCksICdkeW5hc3luYy5qc29uJyk7XG4gICAgICAgIGlmIChleGlzdHNTeW5jKGNvbmZpZ0ZpbGVQYXRoKSkge1xuICAgICAgICAgICAgdGhpcy4kY29uZmlnID0gSlNPTi5wYXJzZShyZWFkRmlsZVN5bmMoY29uZmlnRmlsZVBhdGgpLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSB0aGlzLnByb3BzO1xuICAgICAgICBpZiAoIXByb3BlcnRpZXMudGFibGVzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHRhYmxlcyBwcm92aWRlZC4gQ2Fubm90IGJ1aWxkIEFQSSBhbmQgRGF0YWJhc2Ugd2l0aG91dCB0YWJsZXMuIFBsZWFzZSBjb25maWd1cmUgcGFyYW1ldGVycyBvciBwcm92aWRlICdkeW5hc3luYy5qc29uJyBjb25maWcgZmlsZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZGVmYXVsdEF1dGhvcml6YXRpb246IEF1dGhvcml6YXRpb25Nb2RlIHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAocHJvcGVydGllcy51c2VyUG9vbCB8fCAhcHJvcGVydGllcy5hdXRoPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGRlZmF1bHRBdXRob3JpemF0aW9uID0gdGhpcy5nZXRVc2VyUG9vbEF1dGhNb2RlKHByb3BlcnRpZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVmYXVsdEF1dGhvcml6YXRpb24gPSAocHJvcGVydGllcy5hdXRoIHx8IFtdKS5zaGlmdCgpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBhZGRpdGlvbmFsQXV0aG9yaXphdGlvbk1vZGVzOiBBdXRob3JpemF0aW9uTW9kZVtdIHwgdW5kZWZpbmVkID0gcHJvcGVydGllcy5hdXRoPy5sZW5ndGggP1xuICAgICAgICAgICAgcHJvcGVydGllcy5hdXRoIDogdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBjb25maWc6IEF1dGhvcml6YXRpb25Db25maWcgPSB7XG4gICAgICAgICAgICBkZWZhdWx0QXV0aG9yaXphdGlvbixcbiAgICAgICAgICAgIGFkZGl0aW9uYWxBdXRob3JpemF0aW9uTW9kZXNcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcGVydGllcy5kZWxldGVUYWJsZXNXaXRoU3RhY2spIHtcbiAgICAgICAgICAgIGlmICghcHJvcGVydGllcy50YWJsZVByb3BzKSBwcm9wZXJ0aWVzLnRhYmxlUHJvcHMgPSB7fTtcbiAgICAgICAgICAgIHByb3BlcnRpZXMudGFibGVQcm9wcy5yZW1vdmFsUG9saWN5ID0gUmVtb3ZhbFBvbGljeS5ERVNUUk9ZO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwc3luYyA9IG5ldyBBcHBTeW5jU3RhY2soc2NvcGUsIGAke2lkfUFwcFN5bmNTdGFja2AsIHtcbiAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgIHRhYmxlczogcHJvcGVydGllcy50YWJsZXMgfHwgW10sXG4gICAgICAgICAgICBzY2hlbWFUeXBlczogcHJvcGVydGllcy50eXBlcyB8fCB7fSxcbiAgICAgICAgICAgIGFwaVByb3BzOiBwcm9wZXJ0aWVzLmFwaVByb3BzLFxuICAgICAgICAgICAgdGFibGVQcm9wczogcHJvcGVydGllcy50YWJsZVByb3BzXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnRhYmxlcyA9IHRoaXMuYXBwc3luYy50YWJsZXM7XG4gICAgfVxuXG4gICAgZ2V0IHByb3BzKCk6IER5bmFzeW5jUHJvcHMge1xuICAgICAgICByZXR1cm4gdGhpcy5tZXJnZVByb3BzKHRoaXMuJGNvbmZpZywgdGhpcy4kcHJvcHMpO1xuICAgIH1cblxuICAgIGFkZFRvU2NoZW1hKHN0cjpzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIXRoaXMuYXBwc3luYykgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgYWRkIHRvIHNjaGVtYSB1bnRpbCBhZnRlciBTY2hlbWEgaXMgY3JlYXRlZCcpO1xuICAgICAgICB0aGlzLmFwcHN5bmMuc2NoZW1hLnJvb3QuYWRkVG9TY2hlbWEoc3RyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwc3luYy5zY2hlbWEucm9vdC5nZXREZWZpbml0aW9uKHRoaXMuYXBwc3luYy5hcGkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWVyZ2VQcm9wcyhjb25maWc6IER5bmFzeW5jUHJvcHMsIHByb3BzOiBEeW5hc3luY1Byb3BzKTogRHluYXN5bmNQcm9wcyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5jb25maWcsXG4gICAgICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgICAgIHRhYmxlczogW1xuICAgICAgICAgICAgICAgIC4uLihjb25maWcudGFibGVzIHx8IFtdKSxcbiAgICAgICAgICAgICAgICAuLi4ocHJvcHMudGFibGVzIHx8IFtdKSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB0eXBlczoge1xuICAgICAgICAgICAgICAgIGVudW1zOiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLihjb25maWcudHlwZXM/LmVudW1zIHx8IHt9KSxcbiAgICAgICAgICAgICAgICAgICAgLi4uKHByb3BzLnR5cGVzPy5lbnVtcyB8fCB7fSlcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHVuaW9uczoge1xuICAgICAgICAgICAgICAgICAgICAuLi4oY29uZmlnLnR5cGVzPy51bmlvbnMgfHwge30pLFxuICAgICAgICAgICAgICAgICAgICAuLi4ocHJvcHMudHlwZXM/LnVuaW9ucyB8fCB7fSlcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHR5cGVzOiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLihjb25maWcudHlwZXM/LnR5cGVzIHx8IHt9KSxcbiAgICAgICAgICAgICAgICAgICAgLi4uKHByb3BzLnR5cGVzPy50eXBlcyB8fCB7fSlcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGludGVyZmFjZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uKGNvbmZpZy50eXBlcz8uaW50ZXJmYWNlcyB8fCB7fSksXG4gICAgICAgICAgICAgICAgICAgIC4uLihwcm9wcy50eXBlcz8uaW50ZXJmYWNlcyB8fCB7fSlcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGlucHV0czoge1xuICAgICAgICAgICAgICAgICAgICAuLi4oY29uZmlnLnR5cGVzPy5pbnB1dHMgfHwge30pLFxuICAgICAgICAgICAgICAgICAgICAuLi4ocHJvcHMudHlwZXM/LmlucHV0cyB8fCB7fSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFVzZXJQb29sQXV0aE1vZGUocHJvcGVydGllczogRHluYXN5bmNQcm9wcyk6IEF1dGhvcml6YXRpb25Nb2RlIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGF1dGhvcml6YXRpb25UeXBlOiBBdXRob3JpemF0aW9uVHlwZS5VU0VSX1BPT0wsXG4gICAgICAgICAgICB1c2VyUG9vbENvbmZpZzoge1xuICAgICAgICAgICAgICAgIHVzZXJQb29sOiBwcm9wZXJ0aWVzLnVzZXJQb29sIHx8IG5ldyBVc2VyUG9vbCh0aGlzLnNjb3BlLCBgJHt0aGlzLmlkfVVzZXJQb29sYCksXG4gICAgICAgICAgICAgICAgYXBwSWRDbGllbnRSZWdleDogcHJvcGVydGllcy51c2VyUG9vbFJlZ2V4LFxuICAgICAgICAgICAgICAgIGRlZmF1bHRBY3Rpb246IHByb3BlcnRpZXMudXNlclBvb2xEZW55ID8gVXNlclBvb2xEZWZhdWx0QWN0aW9uLkRFTlkgOiBVc2VyUG9vbERlZmF1bHRBY3Rpb24uQUxMT1dcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ== \ No newline at end of file diff --git a/lib/key/base.js b/lib/key/base.js new file mode 100644 index 0000000..fa8948e --- /dev/null +++ b/lib/key/base.js @@ -0,0 +1,11 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.BaseKey = void 0; +const instance_1 = require("./instance"); +class BaseKey { + getKey(key) { + return (key instanceof instance_1.KeyInstance) ? key : new instance_1.KeyInstance(key); + } +} +exports.BaseKey = BaseKey; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9rZXkvYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5Q0FBeUM7QUFFekMsTUFBYSxPQUFPO0lBRU4sTUFBTSxDQUFDLEdBQXdCO1FBQ3JDLE9BQU8sQ0FBQyxHQUFHLFlBQVksc0JBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksc0JBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyRSxDQUFDO0NBQ0o7QUFMRCwwQkFLQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEtleUluc3RhbmNlIH0gZnJvbSBcIi4vaW5zdGFuY2VcIjtcblxuZXhwb3J0IGNsYXNzIEJhc2VLZXkge1xuXG4gICAgcHJvdGVjdGVkIGdldEtleShrZXk6c3RyaW5nIHwgS2V5SW5zdGFuY2UpIHtcbiAgICAgICAgcmV0dXJuIChrZXkgaW5zdGFuY2VvZiBLZXlJbnN0YW5jZSkgPyBrZXkgOiBuZXcgS2V5SW5zdGFuY2Uoa2V5KTtcbiAgICB9XG59Il19 \ No newline at end of file diff --git a/lib/key/global.js b/lib/key/global.js new file mode 100644 index 0000000..d64319b --- /dev/null +++ b/lib/key/global.js @@ -0,0 +1,36 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SchemaGlobalIndex = void 0; +const index_base_1 = require("./index-base"); +class SchemaGlobalIndex extends index_base_1.BaseIndexKey { + constructor(indexName, partitionKey, sortKey, serialize, include, capacity) { + super(indexName, include, capacity); + this.serialize = serialize; + this.include = include; + this.partitionKey = this.getKey(partitionKey); + this.sortKey = sortKey ? this.getKey(sortKey) : undefined; + } + get pName() { + return this.partitionKey.name; + } + get sName() { + var _a; + return (_a = this.sortKey) === null || _a === void 0 ? void 0 : _a.name; + } + isList() { + return this.serialize || !this.sortKey; + } + get props() { + return { + indexName: this.indexName, + partitionKey: this.partitionKey.attribute, + sortKey: this.sortKey ? this.sortKey.attribute : undefined, + projectionType: this.projectionType, + nonKeyAttributes: this.nonKeyAttributes, + readCapacity: this.readCapacity, + writeCapacity: this.writeCapacity + }; + } +} +exports.SchemaGlobalIndex = SchemaGlobalIndex; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2tleS9nbG9iYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsNkNBQTRDO0FBSTVDLE1BQWEsaUJBQWtCLFNBQVEseUJBQVk7SUFHL0MsWUFDSSxTQUFpQixFQUNqQixZQUFrQyxFQUNsQyxPQUE4QixFQUNwQixTQUFtQixFQUNuQixPQUFrQixFQUM1QixRQUFtQjtRQUduQixLQUFLLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUwxQixjQUFTLEdBQVQsU0FBUyxDQUFVO1FBQ25CLFlBQU8sR0FBUCxPQUFPLENBQVc7UUFLNUIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDOUQsQ0FBQztJQUVELElBQUksS0FBSztRQUNMLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUE7SUFDakMsQ0FBQztJQUVELElBQUksS0FBSzs7UUFDTCxPQUFPLE1BQUEsSUFBSSxDQUFDLE9BQU8sMENBQUUsSUFBSSxDQUFBO0lBQzdCLENBQUM7SUFFRCxNQUFNO1FBQ0YsT0FBTyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUMzQyxDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ0wsT0FBTztZQUNILFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN6QixZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTO1lBQ3pDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUztZQUMxRCxjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWM7WUFDbkMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtZQUN2QyxZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7WUFDL0IsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhO1NBQ3BDLENBQUE7SUFDTCxDQUFDO0NBQ0o7QUF4Q0QsOENBd0NDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgS2V5SW5zdGFuY2UgfSBmcm9tIFwiLi9pbnN0YW5jZVwiO1xuaW1wb3J0IHsgQmFzZUluZGV4S2V5IH0gZnJvbSBcIi4vaW5kZXgtYmFzZVwiO1xuaW1wb3J0IHsgR2xvYmFsU2Vjb25kYXJ5SW5kZXhQcm9wcyB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZHluYW1vZGJcIjtcbmltcG9ydCB7IENhcGFjaXR5IH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5cbmV4cG9ydCBjbGFzcyBTY2hlbWFHbG9iYWxJbmRleCBleHRlbmRzIEJhc2VJbmRleEtleSB7XG4gICAgcGFydGl0aW9uS2V5OiBLZXlJbnN0YW5jZVxuICAgIHNvcnRLZXk/OiBLZXlJbnN0YW5jZVxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBpbmRleE5hbWU6IHN0cmluZyxcbiAgICAgICAgcGFydGl0aW9uS2V5OiBzdHJpbmcgfCBLZXlJbnN0YW5jZSxcbiAgICAgICAgc29ydEtleT86IHN0cmluZyB8IEtleUluc3RhbmNlLFxuICAgICAgICBwcm90ZWN0ZWQgc2VyaWFsaXplPzogYm9vbGVhbixcbiAgICAgICAgcHJvdGVjdGVkIGluY2x1ZGU/OiBzdHJpbmdbXSxcbiAgICAgICAgY2FwYWNpdHk/OiBDYXBhY2l0eVxuXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluZGV4TmFtZSwgaW5jbHVkZSwgY2FwYWNpdHkpO1xuICAgICAgICB0aGlzLnBhcnRpdGlvbktleSA9IHRoaXMuZ2V0S2V5KHBhcnRpdGlvbktleSk7XG4gICAgICAgIHRoaXMuc29ydEtleSA9IHNvcnRLZXkgPyB0aGlzLmdldEtleShzb3J0S2V5KSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBnZXQgcE5hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFydGl0aW9uS2V5Lm5hbWVcbiAgICB9XG5cbiAgICBnZXQgc05hbWUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc29ydEtleT8ubmFtZVxuICAgIH1cblxuICAgIGlzTGlzdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VyaWFsaXplIHx8ICF0aGlzLnNvcnRLZXk7XG4gICAgfVxuXG4gICAgZ2V0IHByb3BzKCk6IEdsb2JhbFNlY29uZGFyeUluZGV4UHJvcHMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaW5kZXhOYW1lOiB0aGlzLmluZGV4TmFtZSxcbiAgICAgICAgICAgIHBhcnRpdGlvbktleTogdGhpcy5wYXJ0aXRpb25LZXkuYXR0cmlidXRlLFxuICAgICAgICAgICAgc29ydEtleTogdGhpcy5zb3J0S2V5ID8gdGhpcy5zb3J0S2V5LmF0dHJpYnV0ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHByb2plY3Rpb25UeXBlOiB0aGlzLnByb2plY3Rpb25UeXBlLFxuICAgICAgICAgICAgbm9uS2V5QXR0cmlidXRlczogdGhpcy5ub25LZXlBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgcmVhZENhcGFjaXR5OiB0aGlzLnJlYWRDYXBhY2l0eSxcbiAgICAgICAgICAgIHdyaXRlQ2FwYWNpdHk6IHRoaXMud3JpdGVDYXBhY2l0eVxuICAgICAgICB9XG4gICAgfVxufSJdfQ== \ No newline at end of file diff --git a/lib/key/index-base.js b/lib/key/index-base.js new file mode 100644 index 0000000..f020093 --- /dev/null +++ b/lib/key/index-base.js @@ -0,0 +1,40 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.BaseIndexKey = void 0; +const aws_dynamodb_1 = require("aws-cdk-lib/aws-dynamodb"); +const base_1 = require("./base"); +class BaseIndexKey extends base_1.BaseKey { + constructor(indexName, include, capacity) { + super(); + this.indexName = indexName; + this.include = include; + const props = (include === null || include === void 0 ? void 0 : include.length) ? this.handleProjection(include) : undefined; + this.projectionType = props === null || props === void 0 ? void 0 : props.projectionType; + this.nonKeyAttributes = props === null || props === void 0 ? void 0 : props.nonKeyAttributes; + this.list = this.isList(); + this.readCapacity = capacity === null || capacity === void 0 ? void 0 : capacity.read; + this.writeCapacity = capacity === null || capacity === void 0 ? void 0 : capacity.write; + } + isList() { + return false; + } + handleProjection($include = []) { + const include = Array.isArray($include) ? $include : [$include]; + if (include && include.length) { + if (include.some(a => /keys?.?only/i.test(a))) { + return { + projectionType: aws_dynamodb_1.ProjectionType.KEYS_ONLY, + }; + } + return { + projectionType: aws_dynamodb_1.ProjectionType.INCLUDE, + nonKeyAttributes: include + }; + } + return { + projectionType: aws_dynamodb_1.ProjectionType.ALL + }; + } +} +exports.BaseIndexKey = BaseIndexKey; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgtYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9rZXkvaW5kZXgtYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyREFBMEQ7QUFDMUQsaUNBQWlDO0FBR2pDLE1BQWEsWUFBYSxTQUFRLGNBQU87SUFPckMsWUFDb0IsU0FBaUIsRUFDdkIsT0FBa0IsRUFDNUIsUUFBbUI7UUFHbkIsS0FBSyxFQUFFLENBQUM7UUFMUSxjQUFTLEdBQVQsU0FBUyxDQUFRO1FBQ3ZCLFlBQU8sR0FBUCxPQUFPLENBQVc7UUFLNUIsTUFBTSxLQUFLLEdBQUcsQ0FBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUMzRSxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxjQUFjLENBQUM7UUFDNUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxnQkFBZ0IsQ0FBQztRQUNoRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRSxJQUFJLENBQUM7UUFDbkMsSUFBSSxDQUFDLGFBQWEsR0FBRyxRQUFRLGFBQVIsUUFBUSx1QkFBUixRQUFRLENBQUUsS0FBSyxDQUFDO0lBQ3pDLENBQUM7SUFFUyxNQUFNO1FBQ1osT0FBTyxLQUFLLENBQUE7SUFDaEIsQ0FBQztJQUVTLGdCQUFnQixDQUFDLFdBQTZCLEVBQUU7UUFJdEQsTUFBTSxPQUFPLEdBQWEsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzFFLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUU7WUFDM0IsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUMzQyxPQUFPO29CQUNILGNBQWMsRUFBRSw2QkFBYyxDQUFDLFNBQVM7aUJBQzNDLENBQUE7YUFDSjtZQUNELE9BQU87Z0JBQ0gsY0FBYyxFQUFFLDZCQUFjLENBQUMsT0FBTztnQkFDdEMsZ0JBQWdCLEVBQUMsT0FBTzthQUMzQixDQUFBO1NBQ0o7UUFDRCxPQUFPO1lBQ0gsY0FBYyxFQUFFLDZCQUFjLENBQUMsR0FBRztTQUNyQyxDQUFBO0lBQ0wsQ0FBQztDQUNKO0FBOUNELG9DQThDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb2plY3Rpb25UeXBlIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1keW5hbW9kYlwiO1xuaW1wb3J0IHsgQmFzZUtleSB9IGZyb20gXCIuL2Jhc2VcIjtcbmltcG9ydCB7IENhcGFjaXR5IH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5cbmV4cG9ydCBjbGFzcyBCYXNlSW5kZXhLZXkgZXh0ZW5kcyBCYXNlS2V5IHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgbGlzdDpib29sZWFuXG4gICAgcHVibGljIHJlYWRvbmx5IHByb2plY3Rpb25UeXBlPzogUHJvamVjdGlvblR5cGVcbiAgICBwdWJsaWMgcmVhZG9ubHkgbm9uS2V5QXR0cmlidXRlcz86IHN0cmluZ1tdXG4gICAgcHVibGljIHJlYWRvbmx5IHJlYWRDYXBhY2l0eT86IG51bWJlclxuICAgIHB1YmxpYyByZWFkb25seSB3cml0ZUNhcGFjaXR5PzogbnVtYmVyXG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IGluZGV4TmFtZTogc3RyaW5nLFxuICAgICAgICBwcm90ZWN0ZWQgaW5jbHVkZT86IHN0cmluZ1tdLFxuICAgICAgICBjYXBhY2l0eT86IENhcGFjaXR5XG5cbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgY29uc3QgcHJvcHMgPSBpbmNsdWRlPy5sZW5ndGggPyB0aGlzLmhhbmRsZVByb2plY3Rpb24oaW5jbHVkZSkgOiB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMucHJvamVjdGlvblR5cGUgPSBwcm9wcz8ucHJvamVjdGlvblR5cGU7XG4gICAgICAgIHRoaXMubm9uS2V5QXR0cmlidXRlcyA9IHByb3BzPy5ub25LZXlBdHRyaWJ1dGVzO1xuICAgICAgICB0aGlzLmxpc3QgPSB0aGlzLmlzTGlzdCgpO1xuICAgICAgICB0aGlzLnJlYWRDYXBhY2l0eSA9IGNhcGFjaXR5Py5yZWFkO1xuICAgICAgICB0aGlzLndyaXRlQ2FwYWNpdHkgPSBjYXBhY2l0eT8ud3JpdGU7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGlzTGlzdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGhhbmRsZVByb2plY3Rpb24oJGluY2x1ZGU6c3RyaW5nIHwgc3RyaW5nW10gPSBbXSk6IHtcbiAgICAgICAgcHJvamVjdGlvblR5cGU6UHJvamVjdGlvblR5cGVcbiAgICAgICAgbm9uS2V5QXR0cmlidXRlcz86c3RyaW5nW11cbiAgICB9IHtcbiAgICAgICAgY29uc3QgaW5jbHVkZTogc3RyaW5nW10gPSBBcnJheS5pc0FycmF5KCRpbmNsdWRlKSA/ICRpbmNsdWRlIDogWyRpbmNsdWRlXTsgXG4gICAgICAgIGlmIChpbmNsdWRlICYmIGluY2x1ZGUubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoaW5jbHVkZS5zb21lKGEgPT4gL2tleXM/Lj9vbmx5L2kudGVzdChhKSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBcbiAgICAgICAgICAgICAgICAgICAgcHJvamVjdGlvblR5cGU6IFByb2plY3Rpb25UeXBlLktFWVNfT05MWSxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHByb2plY3Rpb25UeXBlOiBQcm9qZWN0aW9uVHlwZS5JTkNMVURFLFxuICAgICAgICAgICAgICAgIG5vbktleUF0dHJpYnV0ZXM6aW5jbHVkZVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcm9qZWN0aW9uVHlwZTogUHJvamVjdGlvblR5cGUuQUxMXG4gICAgICAgIH1cbiAgICB9XG59Il19 \ No newline at end of file diff --git a/lib/key/instance.js b/lib/key/instance.js new file mode 100644 index 0000000..120b719 --- /dev/null +++ b/lib/key/instance.js @@ -0,0 +1,53 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.KeyInstance = void 0; +const aws_dynamodb_1 = require("aws-cdk-lib/aws-dynamodb"); +const sync_type_1 = require("./sync-type"); +class KeyInstance { + constructor(fieldName, $type, keyType) { + if (fieldName instanceof KeyInstance) { + this.name = fieldName.name; + this.$type = $type ? + typeof $type === 'string' ? $type : + $type.graphqlType : + fieldName.type.graphqlType; + this.keyType = keyType || fieldName.keyType; + } + else { + this.name = fieldName; + this.$type = $type ? + typeof $type === 'string' ? $type : + $type.graphqlType : + 'String'; + this.keyType = keyType || 'partition'; + } + } + get templateType() { + return { + [this.name]: this.type.templateType + }; + } + get objectType() { + return { + [this.name]: this.type.graphqlType + }; + } + get attribute() { + return { + name: this.name, + type: this.convertAttributeName(this.type.toDynamoAttribute()) + }; + } + get type() { + return new sync_type_1.SyncType(this.name, this.$type); + } + convertAttributeName(attr) { + if (/^b/i.test(attr)) + return aws_dynamodb_1.AttributeType.BINARY; + if (/^n/i.test(attr)) + return aws_dynamodb_1.AttributeType.NUMBER; + return aws_dynamodb_1.AttributeType.STRING; + } +} +exports.KeyInstance = KeyInstance; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMva2V5L2luc3RhbmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJEQUFvRTtBQUNwRSwyQ0FBdUM7QUFFdkMsTUFBYSxXQUFXO0lBTXBCLFlBQ0ksU0FBK0IsRUFDL0IsS0FBeUIsRUFDekIsT0FBOEI7UUFFOUIsSUFBSSxTQUFTLFlBQVksV0FBVyxFQUFFO1lBQ2xDLElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztZQUMzQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDO2dCQUNoQixPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNuQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ25CLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQy9CLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUM7U0FDL0M7YUFBTTtZQUNILElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUM7Z0JBQ2hCLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ25DLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDbkIsUUFBUSxDQUFDO1lBQ2IsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLElBQUksV0FBVyxDQUFDO1NBQ3pDO0lBQ0wsQ0FBQztJQUVELElBQUksWUFBWTtRQUNaLE9BQU87WUFDSCxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVk7U0FDdEMsQ0FBQTtJQUNMLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDVixPQUFPO1lBQ0gsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXO1NBQ3JDLENBQUE7SUFDTCxDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1QsT0FBTztZQUNILElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLElBQUksRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1NBQ2pFLENBQUE7SUFDTCxDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ0osT0FBTyxJQUFJLG9CQUFRLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDOUMsQ0FBQztJQUVELG9CQUFvQixDQUFDLElBQVc7UUFDNUIsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUFFLE9BQU8sNEJBQWEsQ0FBQyxNQUFNLENBQUM7UUFDbEQsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUFFLE9BQU8sNEJBQWEsQ0FBQyxNQUFNLENBQUM7UUFDbEQsT0FBTyw0QkFBYSxDQUFDLE1BQU0sQ0FBQztJQUNoQyxDQUFDO0NBSUo7QUEzREQsa0NBMkRDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXR0cmlidXRlLCBBdHRyaWJ1dGVUeXBlIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1keW5hbW9kYlwiO1xuaW1wb3J0IHsgU3luY1R5cGUgfSBmcm9tIFwiLi9zeW5jLXR5cGVcIjtcblxuZXhwb3J0IGNsYXNzIEtleUluc3RhbmNlIHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nXG4gICAgcHVibGljIHJlYWRvbmx5IGtleVR5cGU6ICdwYXJ0aXRpb24nIHwgJ3NvcnQnXG5cbiAgICBwcml2YXRlICR0eXBlOiBzdHJpbmdcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBmaWVsZE5hbWU6IHN0cmluZyB8IEtleUluc3RhbmNlLFxuICAgICAgICAkdHlwZT86IHN0cmluZyB8IFN5bmNUeXBlLFxuICAgICAgICBrZXlUeXBlPzogJ3BhcnRpdGlvbicgfCAnc29ydCcsXG4gICAgKSB7XG4gICAgICAgIGlmIChmaWVsZE5hbWUgaW5zdGFuY2VvZiBLZXlJbnN0YW5jZSkge1xuICAgICAgICAgICAgdGhpcy5uYW1lID0gZmllbGROYW1lLm5hbWU7XG4gICAgICAgICAgICB0aGlzLiR0eXBlID0gJHR5cGUgPyBcbiAgICAgICAgICAgICAgICB0eXBlb2YgJHR5cGUgPT09ICdzdHJpbmcnID8gJHR5cGUgOlxuICAgICAgICAgICAgICAgICR0eXBlLmdyYXBocWxUeXBlIDpcbiAgICAgICAgICAgICAgICBmaWVsZE5hbWUudHlwZS5ncmFwaHFsVHlwZTtcbiAgICAgICAgICAgIHRoaXMua2V5VHlwZSA9IGtleVR5cGUgfHwgZmllbGROYW1lLmtleVR5cGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm5hbWUgPSBmaWVsZE5hbWU7XG4gICAgICAgICAgICB0aGlzLiR0eXBlID0gJHR5cGUgPyBcbiAgICAgICAgICAgICAgICB0eXBlb2YgJHR5cGUgPT09ICdzdHJpbmcnID8gJHR5cGUgOlxuICAgICAgICAgICAgICAgICR0eXBlLmdyYXBocWxUeXBlIDpcbiAgICAgICAgICAgICAgICAnU3RyaW5nJztcbiAgICAgICAgICAgIHRoaXMua2V5VHlwZSA9IGtleVR5cGUgfHwgJ3BhcnRpdGlvbic7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgdGVtcGxhdGVUeXBlKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgW3RoaXMubmFtZV06IHRoaXMudHlwZS50ZW1wbGF0ZVR5cGVcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBvYmplY3RUeXBlKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgW3RoaXMubmFtZV06IHRoaXMudHlwZS5ncmFwaHFsVHlwZVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IGF0dHJpYnV0ZSgpOiBBdHRyaWJ1dGUge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgdHlwZTogdGhpcy5jb252ZXJ0QXR0cmlidXRlTmFtZSh0aGlzLnR5cGUudG9EeW5hbW9BdHRyaWJ1dGUoKSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCB0eXBlKCk6IFN5bmNUeXBlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTeW5jVHlwZSh0aGlzLm5hbWUsIHRoaXMuJHR5cGUpXG4gICAgfVxuXG4gICAgY29udmVydEF0dHJpYnV0ZU5hbWUoYXR0cjpzdHJpbmcpOiBBdHRyaWJ1dGVUeXBlIHtcbiAgICAgICAgaWYgKC9eYi9pLnRlc3QoYXR0cikpIHJldHVybiBBdHRyaWJ1dGVUeXBlLkJJTkFSWTtcbiAgICAgICAgaWYgKC9ebi9pLnRlc3QoYXR0cikpIHJldHVybiBBdHRyaWJ1dGVUeXBlLk5VTUJFUjtcbiAgICAgICAgcmV0dXJuIEF0dHJpYnV0ZVR5cGUuU1RSSU5HO1xuICAgIH1cbiAgICBcblxuXG59Il19 \ No newline at end of file diff --git a/lib/key/local.js b/lib/key/local.js new file mode 100644 index 0000000..889c356 --- /dev/null +++ b/lib/key/local.js @@ -0,0 +1,24 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SchemaLocalIndex = void 0; +const index_base_1 = require("./index-base"); +class SchemaLocalIndex extends index_base_1.BaseIndexKey { + constructor(indexName, sortKey, include) { + super(indexName, include); + this.indexName = indexName; + this.sortKey = this.getKey(sortKey); + } + get sName() { + return this.sortKey.name; + } + get props() { + return { + indexName: this.indexName, + sortKey: this.sortKey.attribute, + projectionType: this.projectionType, + nonKeyAttributes: this.nonKeyAttributes + }; + } +} +exports.SchemaLocalIndex = SchemaLocalIndex; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMva2V5L2xvY2FsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLDZDQUE0QztBQUc1QyxNQUFhLGdCQUFpQixTQUFRLHlCQUFZO0lBRzlDLFlBQ29CLFNBQWlCLEVBQ2pDLE9BQTZCLEVBQzdCLE9BQWtCO1FBRWxCLEtBQUssQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFKVixjQUFTLEdBQVQsU0FBUyxDQUFRO1FBS2pDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ0wsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQTtJQUM1QixDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ0wsT0FBTztZQUNILFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN6QixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTO1lBQy9CLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYztZQUNuQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO1NBQzFDLENBQUE7SUFDTCxDQUFDO0NBQ0o7QUF4QkQsNENBd0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgS2V5SW5zdGFuY2UgfSBmcm9tIFwiLi9pbnN0YW5jZVwiO1xuaW1wb3J0IHsgQmFzZUluZGV4S2V5IH0gZnJvbSBcIi4vaW5kZXgtYmFzZVwiO1xuaW1wb3J0IHsgTG9jYWxTZWNvbmRhcnlJbmRleFByb3BzIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1keW5hbW9kYlwiO1xuXG5leHBvcnQgY2xhc3MgU2NoZW1hTG9jYWxJbmRleCBleHRlbmRzIEJhc2VJbmRleEtleSB7XG4gICAgc29ydEtleTogS2V5SW5zdGFuY2VcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgaW5kZXhOYW1lOiBzdHJpbmcsXG4gICAgICAgIHNvcnRLZXk6IHN0cmluZyB8IEtleUluc3RhbmNlLFxuICAgICAgICBpbmNsdWRlPzogc3RyaW5nW11cbiAgICApIHtcbiAgICAgICAgc3VwZXIoaW5kZXhOYW1lLCBpbmNsdWRlKTtcbiAgICAgICAgdGhpcy5zb3J0S2V5ID0gdGhpcy5nZXRLZXkoc29ydEtleSk7XG4gICAgfVxuXG4gICAgZ2V0IHNOYW1lKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvcnRLZXkubmFtZVxuICAgIH1cblxuICAgIGdldCBwcm9wcygpOiBMb2NhbFNlY29uZGFyeUluZGV4UHJvcHMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaW5kZXhOYW1lOiB0aGlzLmluZGV4TmFtZSxcbiAgICAgICAgICAgIHNvcnRLZXk6IHRoaXMuc29ydEtleS5hdHRyaWJ1dGUsXG4gICAgICAgICAgICBwcm9qZWN0aW9uVHlwZTogdGhpcy5wcm9qZWN0aW9uVHlwZSxcbiAgICAgICAgICAgIG5vbktleUF0dHJpYnV0ZXM6IHRoaXMubm9uS2V5QXR0cmlidXRlc1xuICAgICAgICB9XG4gICAgfVxufSJdfQ== \ No newline at end of file diff --git a/lib/key/primary.js b/lib/key/primary.js new file mode 100644 index 0000000..d691bc8 --- /dev/null +++ b/lib/key/primary.js @@ -0,0 +1,28 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SchemaPrimaryKey = void 0; +const base_1 = require("./base"); +class SchemaPrimaryKey extends base_1.BaseKey { + constructor(partitionKey, sortKey) { + super(); + this.partitionKey = this.getKey(partitionKey); + this.sortKey = sortKey ? this.getKey(sortKey) : undefined; + } + get pName() { + return this.partitionKey.name; + } + get sName() { + var _a; + return (_a = this.sortKey) === null || _a === void 0 ? void 0 : _a.name; + } + get keySchema() { + const res = { + partitionKey: this.partitionKey.attribute + }; + if (this.sortKey) + res.sortKey = this.sortKey.attribute; + return res; + } +} +exports.SchemaPrimaryKey = SchemaPrimaryKey; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbWFyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9rZXkvcHJpbWFyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxpQ0FBaUM7QUFHakMsTUFBYSxnQkFBaUIsU0FBUSxjQUFPO0lBSXpDLFlBQ0ksWUFBa0MsRUFDbEMsT0FBOEI7UUFFOUIsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ0wsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQTtJQUNqQyxDQUFDO0lBRUQsSUFBSSxLQUFLOztRQUNMLE9BQU8sTUFBQSxJQUFJLENBQUMsT0FBTywwQ0FBRSxJQUFJLENBQUE7SUFDN0IsQ0FBQztJQUVELElBQUksU0FBUztRQUNULE1BQU0sR0FBRyxHQUFrQjtZQUN2QixZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTO1NBQzVDLENBQUE7UUFDRCxJQUFJLElBQUksQ0FBQyxPQUFPO1lBQUUsR0FBRyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztRQUN2RCxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7Q0FDSjtBQTVCRCw0Q0E0QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBLZXlJbnN0YW5jZSB9IGZyb20gXCIuL2luc3RhbmNlXCJcbmltcG9ydCB7IEJhc2VLZXkgfSBmcm9tIFwiLi9iYXNlXCI7XG5pbXBvcnQgeyBLZXlBdHRyaWJ1dGVzIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5cbmV4cG9ydCBjbGFzcyBTY2hlbWFQcmltYXJ5S2V5IGV4dGVuZHMgQmFzZUtleSB7XG4gICAgcGFydGl0aW9uS2V5OiBLZXlJbnN0YW5jZVxuICAgIHNvcnRLZXk/OiBLZXlJbnN0YW5jZVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHBhcnRpdGlvbktleTogc3RyaW5nIHwgS2V5SW5zdGFuY2UsXG4gICAgICAgIHNvcnRLZXk/OiBzdHJpbmcgfCBLZXlJbnN0YW5jZVxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnBhcnRpdGlvbktleSA9IHRoaXMuZ2V0S2V5KHBhcnRpdGlvbktleSk7XG4gICAgICAgIHRoaXMuc29ydEtleSA9IHNvcnRLZXkgPyB0aGlzLmdldEtleShzb3J0S2V5KSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBnZXQgcE5hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFydGl0aW9uS2V5Lm5hbWVcbiAgICB9XG5cbiAgICBnZXQgc05hbWUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc29ydEtleT8ubmFtZVxuICAgIH1cblxuICAgIGdldCBrZXlTY2hlbWEoKTogS2V5QXR0cmlidXRlcyB7XG4gICAgICAgIGNvbnN0IHJlczogS2V5QXR0cmlidXRlcyA9IHtcbiAgICAgICAgICAgIHBhcnRpdGlvbktleTogdGhpcy5wYXJ0aXRpb25LZXkuYXR0cmlidXRlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc29ydEtleSkgcmVzLnNvcnRLZXkgPSB0aGlzLnNvcnRLZXkuYXR0cmlidXRlO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbn0iXX0= \ No newline at end of file diff --git a/lib/key/sync-type.js b/lib/key/sync-type.js new file mode 100644 index 0000000..91722d6 --- /dev/null +++ b/lib/key/sync-type.js @@ -0,0 +1,59 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SyncType = void 0; +class SyncType { + constructor(fieldName, graphqlType = 'String') { + this.fieldName = fieldName; + this.graphqlType = (graphqlType instanceof SyncType) ? graphqlType.graphqlType : graphqlType; + this.typeName = this.graphqlType.replace(/[^a-z\_]/gi, ''); + this.templateType = this.toCfnTemplateType(); + } + get isList() { + return /^\[[a-z]+[\?\!]?\]/i.test(this.graphqlType); + } + get isRequired() { + return /^\[?[a-z]+\!\]?[\?\!]?$/i.test(this.graphqlType); + } + get isRequiredList() { + return /\]\!$/.test(this.graphqlType); + } + getBaseOptions(options = {}) { + return { + isList: /^\[[a-z]+[\?\!]?\]/i.test(this.graphqlType), + isRequired: /^\[?[a-z]+\!\]?[\?\!]?$/i.test(this.graphqlType), + isRequiredList: /\]\!$/.test(this.graphqlType), + ...options + }; + } + toDynamoAttribute() { + if (/(int|float|timestamp)/i.test(this.typeName)) + return 'N'; + if (/boolean/i.test(this.typeName)) + return 'B'; + return 'S'; + } + toTypescriptType() { + let type = this.typeName.toLowerCase(); + if (['int', 'float'].includes(type)) + type = 'number'; + if (type === 'id') + type = 'string'; + if (![ + 'number', + 'string', + 'boolean' + ].includes(type)) + return 'Record'; + if (this.isList) + type += '[]'; + return type; + } + toCfnTemplateType() { + var _a; + const words = this.typeName.split('_'); + const firstWord = ((_a = words.shift()) === null || _a === void 0 ? void 0 : _a.toLowerCase()) || ''; + return firstWord + words.map(w => w.substring(0, 1).toUpperCase() + w.substring(1).toLowerCase()).join(''); + } +} +exports.SyncType = SyncType; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy10eXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2tleS9zeW5jLXR5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBR0EsTUFBYSxRQUFRO0lBTWpCLFlBQ29CLFNBQWlCLEVBQ2pDLGNBQWlDLFFBQVE7UUFEekIsY0FBUyxHQUFULFNBQVMsQ0FBUTtRQUdqQyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsV0FBVyxZQUFZLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7UUFDN0YsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ04sT0FBTyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDVixPQUFPLDBCQUEwQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDNUQsQ0FBQztJQUVELElBQUksY0FBYztRQUNkLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELGNBQWMsQ0FBQyxVQUE4QixFQUFFO1FBQzNDLE9BQU87WUFDSCxNQUFNLEVBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDbkQsVUFBVSxFQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQzVELGNBQWMsRUFBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDN0MsR0FBRyxPQUFPO1NBQ2IsQ0FBQTtJQUNMLENBQUM7SUFFRCxpQkFBaUI7UUFDYixJQUFJLHdCQUF3QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQUUsT0FBTyxHQUFHLENBQUM7UUFDN0QsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFBRSxPQUFPLEdBQUcsQ0FBQztRQUMvQyxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFFRCxnQkFBZ0I7UUFDWixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztZQUFFLElBQUksR0FBRyxRQUFRLENBQUM7UUFDckQsSUFBSSxJQUFJLEtBQUssSUFBSTtZQUFFLElBQUksR0FBRyxRQUFRLENBQUM7UUFDbkMsSUFBSSxDQUFDO1lBQ0QsUUFBUTtZQUNSLFFBQVE7WUFDUixTQUFTO1NBQ1osQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQUUsT0FBTyxvQkFBb0IsQ0FBQztRQUM5QyxJQUFJLElBQUksQ0FBQyxNQUFNO1lBQUUsSUFBSSxJQUFJLElBQUksQ0FBQztRQUM5QixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU8saUJBQWlCOztRQUNyQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QyxNQUFNLFNBQVMsR0FBRyxDQUFBLE1BQUEsS0FBSyxDQUFDLEtBQUssRUFBRSwwQ0FBRSxXQUFXLEVBQUUsS0FBSSxFQUFFLENBQUM7UUFDckQsT0FBTyxTQUFTLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUM3QixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUNoRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNmLENBQUM7Q0FFSjtBQS9ERCw0QkErREMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlVHlwZU9wdGlvbnMsIEdyYXBocWxUeXBlT3B0aW9ucyB9IGZyb20gXCJAYXdzLWNkay9hd3MtYXBwc3luYy1hbHBoYVwiO1xuaW1wb3J0IHsgRHluYW1vQXR0cmlidXRlIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5cbmV4cG9ydCBjbGFzcyBTeW5jVHlwZSBpbXBsZW1lbnRzIEJhc2VUeXBlT3B0aW9ucyB7XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgdHlwZU5hbWU6IHN0cmluZztcbiAgICBwdWJsaWMgcmVhZG9ubHkgdGVtcGxhdGVUeXBlOiBzdHJpbmdcbiAgICBwdWJsaWMgcmVhZG9ubHkgZ3JhcGhxbFR5cGU6IHN0cmluZ1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBmaWVsZE5hbWU6IHN0cmluZyxcbiAgICAgICAgZ3JhcGhxbFR5cGU6IHN0cmluZyB8IFN5bmNUeXBlID0gJ1N0cmluZydcbiAgICApIHtcbiAgICAgICAgdGhpcy5ncmFwaHFsVHlwZSA9IChncmFwaHFsVHlwZSBpbnN0YW5jZW9mIFN5bmNUeXBlKSA/IGdyYXBocWxUeXBlLmdyYXBocWxUeXBlIDogZ3JhcGhxbFR5cGU7XG4gICAgICAgIHRoaXMudHlwZU5hbWUgPSB0aGlzLmdyYXBocWxUeXBlLnJlcGxhY2UoL1teYS16XFxfXS9naSwgJycpO1xuICAgICAgICB0aGlzLnRlbXBsYXRlVHlwZSA9IHRoaXMudG9DZm5UZW1wbGF0ZVR5cGUoKTtcbiAgICB9XG5cbiAgICBnZXQgaXNMaXN0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gL15cXFtbYS16XStbXFw/XFwhXT9cXF0vaS50ZXN0KHRoaXMuZ3JhcGhxbFR5cGUpO1xuICAgIH1cblxuICAgIGdldCBpc1JlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gL15cXFs/W2Etel0rXFwhXFxdP1tcXD9cXCFdPyQvaS50ZXN0KHRoaXMuZ3JhcGhxbFR5cGUpXG4gICAgfVxuXG4gICAgZ2V0IGlzUmVxdWlyZWRMaXN0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gL1xcXVxcISQvLnRlc3QodGhpcy5ncmFwaHFsVHlwZSk7XG4gICAgfVxuXG4gICAgZ2V0QmFzZU9wdGlvbnMob3B0aW9uczogR3JhcGhxbFR5cGVPcHRpb25zID0ge30pOiBCYXNlVHlwZU9wdGlvbnMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXNMaXN0Oi9eXFxbW2Etel0rW1xcP1xcIV0/XFxdL2kudGVzdCh0aGlzLmdyYXBocWxUeXBlKSxcbiAgICAgICAgICAgIGlzUmVxdWlyZWQ6L15cXFs/W2Etel0rXFwhXFxdP1tcXD9cXCFdPyQvaS50ZXN0KHRoaXMuZ3JhcGhxbFR5cGUpLFxuICAgICAgICAgICAgaXNSZXF1aXJlZExpc3Q6L1xcXVxcISQvLnRlc3QodGhpcy5ncmFwaHFsVHlwZSksXG4gICAgICAgICAgICAuLi5vcHRpb25zXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0b0R5bmFtb0F0dHJpYnV0ZSgpOiBEeW5hbW9BdHRyaWJ1dGUge1xuICAgICAgICBpZiAoLyhpbnR8ZmxvYXR8dGltZXN0YW1wKS9pLnRlc3QodGhpcy50eXBlTmFtZSkpIHJldHVybiAnTic7XG4gICAgICAgIGlmICgvYm9vbGVhbi9pLnRlc3QodGhpcy50eXBlTmFtZSkpIHJldHVybiAnQic7XG4gICAgICAgIHJldHVybiAnUyc7IFxuICAgIH1cblxuICAgIHRvVHlwZXNjcmlwdFR5cGUoKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHR5cGUgPSB0aGlzLnR5cGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChbJ2ludCcsICdmbG9hdCddLmluY2x1ZGVzKHR5cGUpKSB0eXBlID0gJ251bWJlcic7XG4gICAgICAgIGlmICh0eXBlID09PSAnaWQnKSB0eXBlID0gJ3N0cmluZyc7XG4gICAgICAgIGlmICghW1xuICAgICAgICAgICAgJ251bWJlcicsXG4gICAgICAgICAgICAnc3RyaW5nJyxcbiAgICAgICAgICAgICdib29sZWFuJ1xuICAgICAgICBdLmluY2x1ZGVzKHR5cGUpKSByZXR1cm4gJ1JlY29yZDxzdHJpbmcsYW55Pic7XG4gICAgICAgIGlmICh0aGlzLmlzTGlzdCkgdHlwZSArPSAnW10nO1xuICAgICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRvQ2ZuVGVtcGxhdGVUeXBlKCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHdvcmRzID0gdGhpcy50eXBlTmFtZS5zcGxpdCgnXycpO1xuICAgICAgICBjb25zdCBmaXJzdFdvcmQgPSB3b3Jkcy5zaGlmdCgpPy50b0xvd2VyQ2FzZSgpIHx8ICcnO1xuICAgICAgICByZXR1cm4gZmlyc3RXb3JkICsgd29yZHMubWFwKHcgPT4gXG4gICAgICAgICAgICB3LnN1YnN0cmluZygwLDEpLnRvVXBwZXJDYXNlKCkgKyB3LnN1YnN0cmluZygxKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICkuam9pbignJyk7XG4gICAgfVxuXG59Il19 \ No newline at end of file diff --git a/lib/types.js b/lib/types.js new file mode 100644 index 0000000..1ed2465 --- /dev/null +++ b/lib/types.js @@ -0,0 +1,3 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF0dHJpYnV0ZSwgQmlsbGluZ01vZGUsIFN0cmVhbVZpZXdUeXBlLCBUYWJsZUNsYXNzLCBUYWJsZUVuY3J5cHRpb24sIFRhYmxlUHJvcHMgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWR5bmFtb2RiXCJcbmltcG9ydCB7IEtleUluc3RhbmNlIH0gZnJvbSBcIi4va2V5L2luc3RhbmNlXCJcbmltcG9ydCB7IFNjaGVtYVByaW1hcnlLZXkgfSBmcm9tIFwiLi9rZXkvcHJpbWFyeVwiXG5pbXBvcnQgeyBTY2hlbWFHbG9iYWxJbmRleCB9IGZyb20gXCIuL2tleS9nbG9iYWxcIlxuaW1wb3J0IHsgU2NoZW1hTG9jYWxJbmRleCB9IGZyb20gXCIuL2tleS9sb2NhbFwiXG5pbXBvcnQgeyBEdXJhdGlvbiwgUmVtb3ZhbFBvbGljeSwgUmVzb3VyY2VQcm9wcyB9IGZyb20gXCJhd3MtY2RrLWxpYlwiXG5pbXBvcnQgeyBJVXNlclBvb2wgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNvZ25pdG9cIlxuaW1wb3J0IHsgRGJUYWJsZSB9IGZyb20gXCIuL2RiL3RhYmxlXCJcbmltcG9ydCB7IERpcmVjdGl2ZSwgSUZpZWxkLCBJSW50ZXJtZWRpYXRlVHlwZSwgSW50ZXJmYWNlVHlwZSB9IGZyb20gXCJAYXdzLWNkay9hd3MtYXBwc3luYy1hbHBoYVwiO1xuaW1wb3J0IHsgQXV0aG9yaXphdGlvbk1vZGUsIERvbWFpbk9wdGlvbnMsIExvZ0NvbmZpZywgUmVzb2x2ZXIgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWFwcHN5bmNcIlxuaW1wb3J0IHsgSUtleSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mta21zXCJcbmltcG9ydCB7IElTdHJlYW0gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWtpbmVzaXNcIlxuXG5leHBvcnQgaW50ZXJmYWNlIER5bmFzeW5jUHJvcHMgZXh0ZW5kcyBSZXNvdXJjZVByb3BzIHtcbiAgICB1c2VyUG9vbD86IElVc2VyUG9vbFxuICAgIHRhYmxlcz86IChEYlRhYmxlIHwgU2NoZW1hVGFibGUpW11cbiAgICBjb25maWdGaWxlPzogc3RyaW5nXG4gICAgdHlwZXM/OiBHcmFwaFFsVHlwZUxpc3RcbiAgICB1c2VyUG9vbFJlZ2V4Pzogc3RyaW5nXG4gICAgdXNlclBvb2xEZW55PzogYm9vbGVhblxuICAgIGFwaVByb3BzPzogQXBwc3luY0FwaVByb3BzXG4gICAgdGFibGVQcm9wcz86IER5bmFtb1RhYmxlUHJvcHNcbiAgICBhdXRoPzogQXV0aG9yaXphdGlvbk1vZGVbXVxuICAgIGRlbGV0ZVRhYmxlc1dpdGhTdGFjaz86Ym9vbGVhblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNjaGVtYVRhYmxlIGV4dGVuZHMgU2NoZW1hVGFibGVCYXNlIHtcbiAgICBwYXJ0aXRpb25LZXk6IHN0cmluZyB8IEtleUluc3RhbmNlXG4gICAgc29ydEtleT86IHN0cmluZyB8IEtleUluc3RhbmNlXG4gICAgYXR0cmlidXRlcz86IFJlY29yZDxzdHJpbmcsc3RyaW5nPlxuICAgIGdsb2JhbFNlY29uZGFyeUluZGV4ZXM/OiAoc3RyaW5nIHwgU2NoZW1hR2xvYmFsIHwgU2NoZW1hR2xvYmFsSW5kZXgpW11cbiAgICBsb2NhbFNlY29uZGFyeUluZGV4ZXM/OiAoc3RyaW5nIHwgU2NoZW1hTG9jYWwgfCBTY2hlbWFMb2NhbEluZGV4KVtdXG4gICAgcHJlZml4Pzogc3RyaW5nXG4gICAgdGFibGVQcm9wcz86IER5bmFtb1RhYmxlUHJvcHNcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTY2hlbWFUYWJsZUluc3RhbmNlIGV4dGVuZHMgUmVxdWlyZWQ8U2NoZW1hVGFibGVCYXNlPiB7XG4gICAgbG9jYWxTZWNvbmRhcnlJbmRleGVzOiBTY2hlbWFMb2NhbEluZGV4W11cbiAgICBnbG9iYWxTZWNvbmRhcnlJbmRleGVzOiBTY2hlbWFHbG9iYWxJbmRleFtdXG4gICAgcHJpbWFyeUtleTogU2NoZW1hUHJpbWFyeUtleVxuICAgIGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsc3RyaW5nPlxufVxuXG5pbnRlcmZhY2UgU2NoZW1hVGFibGVCYXNlIHtcbiAgICByZWFkb25seSB0YWJsZU5hbWU6IHN0cmluZ1xuICAgIHByb3BzPzogRHluYW1vVGFibGVQcm9wc1xuICAgIHNjYW4/OiBib29sZWFuXG4gICAgYXV0bz86IGJvb2xlYW5cbiAgICBzdWJzY3JpcHRpb24/OiBib29sZWFuXG4gICAgcXVlcnk/OiBib29sZWFuXG4gICAgbXV0YXRpb24/OiBib29sZWFuXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FwYWNpdHkge1xuICAgIHJlYWQ/OiBudW1iZXJcbiAgICB3cml0ZT86IG51bWJlclxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEtleUF0dHJpYnV0ZXMge1xuICAgIHBhcnRpdGlvbktleTogQXR0cmlidXRlXG4gICAgc29ydEtleT86IEF0dHJpYnV0ZVxufVxuZXhwb3J0IGludGVyZmFjZSBTY2hlbWFHbG9iYWwge1xuICAgIHBhcnRpdGlvbktleTogc3RyaW5nIHwgS2V5SW5zdGFuY2VcbiAgICBzb3J0S2V5Pzogc3RyaW5nIHwgS2V5SW5zdGFuY2VcbiAgICBpbmNsdWRlPzogc3RyaW5nW11cbiAgICBpbmRleE5hbWU/OiBzdHJpbmdcbiAgICBsaXN0Pzpib29sZWFuXG4gICAgY2FwYWNpdHk/OiBDYXBhY2l0eVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdyYXBoUWxUeXBlTGlzdCB7XG4gICAgdHlwZXM/OiBJbnRlcm1lZGlhdGVUeXBlTGlzdFxuICAgIGludGVyZmFjZXM/OiBJbnRlcm1lZGlhdGVUeXBlTGlzdFxuICAgIGlucHV0cz86IEludGVybWVkaWF0ZVR5cGVMaXN0XG4gICAgdW5pb25zPzogIHtbbmFtZTpzdHJpbmddOiAoc3RyaW5nIHwgSUludGVybWVkaWF0ZVR5cGUpW119XG4gICAgZW51bXM/OiAge1tuYW1lOnN0cmluZ106IHN0cmluZ1tdfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNjaGVtYUxvY2FsIHtcbiAgICBzb3J0S2V5OiBzdHJpbmcgfCBLZXlJbnN0YW5jZVxuICAgIGluY2x1ZGU/OiBzdHJpbmdbXVxuICAgIGluZGV4TmFtZT86IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIER5bmFtb1RhYmxlUHJvcHMge1xuICAgIHJlYWRDYXBhY2l0eT86IG51bWJlclxuICAgIHdyaXRlQ2FwYWNpdHk/OiBudW1iZXJcbiAgICByZXBsaWNhdGlvblRpbWVvdXQ/OiBEdXJhdGlvblxuICAgIHJlcGxpY2F0aW9uUmVnaW9ucz86IHN0cmluZ1tdXG4gICAgYmlsbGluZ01vZGU/OiBCaWxsaW5nTW9kZVxuICAgIHBvaW50SW5UaW1lUmVjb3Zlcnk/OiBib29sZWFuXG4gICAgdGFibGVDbGFzcz86IFRhYmxlQ2xhc3NcbiAgICBlbmNyeXB0aW9uPzogVGFibGVFbmNyeXB0aW9uXG4gICAgZW5jcnlwdGlvbktleT86IElLZXlcbiAgICB0aW1lVG9MaXZlQXR0cmlidXRlPzogc3RyaW5nXG4gICAgc3RyZWFtPzogU3RyZWFtVmlld1R5cGVcbiAgICB3YWl0Rm9yUmVwbGljYXRpb25Ub0ZpbmlzaD86IGJvb2xlYW5cbiAgICBjb250cmlidXRvckluc2lnaHRzRW5hYmxlZD86IGJvb2xlYW5cbiAgICBkZWxldGlvblByb3RlY3Rpb24/OiBib29sZWFuXG4gICAga2luZXNpc1N0cmVhbT86IElTdHJlYW1cbiAgICByZW1vdmFsUG9saWN5PzogUmVtb3ZhbFBvbGljeVxufVxuXG5leHBvcnQgdHlwZSBEeW5hbW9BdHRyaWJ1dGUgPSBcIkJcIiB8IFwiU1wiIHwgXCJOXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHluYW1vQXR0cmlidXRlcyB7XG4gICAgWyBuYW1lOiBzdHJpbmcgXTogRHluYW1vQXR0cmlidXRlXG59XG5cbmV4cG9ydCB0eXBlIFNjaGVtYU9iamVjdCA9IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cblxuXG5leHBvcnQgdHlwZSBHcmFwaFR5cGUgPSAnaWQnIHwgJ3N0cmluZycgfCAnaW50JyB8ICdmbG9hdCcgfCAnYm9vbGVhbicgfFxuJ2F3c0RhdGUnIHwgJ2F3c1RpbWUnIHwgJ2F3c0RhdGVUaW1lJyB8ICdhd3NUaW1lc3RhbXAnIHwgJ2F3c0VtYWlsJyB8XG4nYXdzSnNvbicgfCAnYXdzVXJsJyB8ICdhd3NQaG9uZScgfCAnYXdzSXBBZGRyZXNzJyB8ICdpbnRlcm1lZGlhdGUnXG5cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZXJtZWRpYXRlVHlwZXMge1xuICAgIFtuYW1lOnN0cmluZ106IElJbnRlcm1lZGlhdGVUeXBlXG59XG5cbmV4cG9ydCB0eXBlIEludGVybWVkaWF0ZVR5cGUgPSAndHlwZScgfCAnaW5wdXQnIHwgJ2ludGVyZmFjZScgfCAndW5pb24nIHwgJ2VudW0nO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNjaGVtYUZpZWxkcyB7XG4gICAgW25hbWU6c3RyaW5nXTogSUZpZWxkXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZXJtZWRpYXRlVHlwZUJhc2Uge1xuICAgIGRpcmVjdGl2ZXM/OiBEaXJlY3RpdmVbXVxuICAgIGludGVyZmFjZVR5cGVzPzogSW50ZXJmYWNlVHlwZVtdXG4gICAgaW50ZXJtZWRpYXRlVHlwZT86IElJbnRlcm1lZGlhdGVUeXBlXG4gICAgcmVzb2x2ZXJzPzogUmVzb2x2ZXJbXVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEludGVybWVkaWF0ZVR5cGVQcm9wcyBleHRlbmRzIEludGVybWVkaWF0ZVR5cGVCYXNlIHtcbiAgICBkZWZpbml0aW9uOiBTY2hlbWFPYmplY3Rcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbnRlcm1lZGlhdGVUeXBlT3B0aW9ucyBleHRlbmRzIEludGVybWVkaWF0ZVR5cGVCYXNlIHtcbiAgICBkZWZpbml0aW9uOiBTY2hlbWFGaWVsZHNcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbnRlcm1lZGlhdGVUeXBlTGlzdCB7XG4gICAgW25hbWU6c3RyaW5nXTogSW50ZXJtZWRpYXRlVHlwZVByb3BzIHwgU2NoZW1hT2JqZWN0XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwc3luY0FwaVByb3BzIHtcbiAgICBsb2dDb25maWc/OiBMb2dDb25maWdcbiAgICB4cmF5RW5hYmxlZD86IGJvb2xlYW5cbiAgICBkb21haW5OYW1lPzogRG9tYWluT3B0aW9uc1xufVxuIl19 \ No newline at end of file diff --git a/lib/types/api/index.d.ts b/lib/types/api/index.d.ts new file mode 100644 index 0000000..b3ba793 --- /dev/null +++ b/lib/types/api/index.d.ts @@ -0,0 +1,27 @@ +import { Construct } from 'constructs'; +import { AppSyncSchema } from './schema'; +import { DbTable } from '../db/table'; +import { SchemaTable, GraphQlTypeList, AppsyncApiProps, DynamoTableProps } from '../types'; +import { GraphqlApi, ISchema, DynamoDbDataSource, AuthorizationConfig } from 'aws-cdk-lib/aws-appsync'; +export interface AppSyncStackProps { + config: AuthorizationConfig; + tables: (DbTable | SchemaTable)[]; + schemaTypes?: GraphQlTypeList; + apiProps?: AppsyncApiProps; + tableProps?: DynamoTableProps; +} +export declare class AppSyncStack { + scope: Construct; + protected id: string; + private props; + api: GraphqlApi; + schema: AppSyncSchema; + tables: DbTable[]; + data: DynamoDbDataSource[]; + constructor(scope: Construct, id: string, props: AppSyncStackProps); + get config(): AuthorizationConfig; + protected getApi(schema: ISchema, authorizationConfig: AuthorizationConfig, apiProps?: AppsyncApiProps): GraphqlApi; + addTableSchema($table: DbTable): DbTable | false; + addTableApi(table: DbTable): DbTable; + validateTable(table: DbTable): void; +} diff --git a/lib/types/api/schema-alpha.d.ts b/lib/types/api/schema-alpha.d.ts new file mode 100644 index 0000000..826fcff --- /dev/null +++ b/lib/types/api/schema-alpha.d.ts @@ -0,0 +1,25 @@ +import { IGraphqlApi, ISchemaConfig } from "aws-cdk-lib/aws-appsync"; +import { Field, IIntermediateType, ObjectType, ResolvableField } from "@aws-cdk/aws-appsync-alpha"; +/** + * Class based on aws-appsync alpha Schema class, + * deprecated in stable version but needed for + * building schema in-progress + */ +export declare class SchemaAlpha { + baseTypes: IIntermediateType[]; + query?: ObjectType; + mutation?: ObjectType; + subscription?: ObjectType; + protected def: string; + bind(api: IGraphqlApi): ISchemaConfig; + getDefinition(api: IGraphqlApi): string; + addToSchema(addition: string, delimiter?: string): void; + addQuery(fieldName: string, field: ResolvableField): ObjectType; + addMutation(fieldName: string, field: ResolvableField): ObjectType; + addSubscription(fieldName: string, field: Field): ObjectType; + addType(type: IIntermediateType): IIntermediateType; + declareSchema(): string; + private shapeAddition; + private generateInterfaces; + private generateDirectives; +} diff --git a/lib/types/api/schema.d.ts b/lib/types/api/schema.d.ts new file mode 100644 index 0000000..abadc01 --- /dev/null +++ b/lib/types/api/schema.d.ts @@ -0,0 +1,25 @@ +import { IGraphqlApi, ISchema, ISchemaConfig } from 'aws-cdk-lib/aws-appsync'; +import { DbTable } from '../db/table'; +import { SchemaAlpha } from './schema-alpha'; +import { SchemaObject, GraphQlTypeList, IntermediateType, IntermediateTypeProps, IntermediateTypes, SchemaFields } from '../types'; +import { GraphqlType, BaseTypeOptions, IIntermediateType, Directive, Field, GraphqlTypeOptions } from '@aws-cdk/aws-appsync-alpha'; +export declare class AppSyncSchema implements ISchema { + readonly root: SchemaAlpha; + protected tables: DbTable[]; + protected graphTypes: string[]; + protected customTypes: string[]; + protected types: IntermediateTypes; + constructor(types?: GraphQlTypeList); + bind(api: IGraphqlApi): ISchemaConfig; + addTable(table: DbTable): DbTable | false; + getType($type: string | GraphqlType, $options?: GraphqlTypeOptions): GraphqlType; + getTypes(obj?: SchemaObject): SchemaFields; + getField(returnType: string, fields?: SchemaObject, $options?: GraphqlTypeOptions, directives?: Directive[]): Field; + isType(type: string): boolean; + addType(name: string, props: IntermediateTypeProps): IIntermediateType; + addInput(name: string, props: IntermediateTypeProps): IIntermediateType; + getBaseOptions(type: string, $options?: GraphqlTypeOptions): BaseTypeOptions; + initTypes(types?: GraphQlTypeList): void; + protected $addType(type: IntermediateType, $name: string, props: SchemaObject | IntermediateTypeProps | (string | IIntermediateType)[]): IIntermediateType; + private convertTypeName; +} diff --git a/lib/types/db/db-api.d.ts b/lib/types/db/db-api.d.ts new file mode 100644 index 0000000..a44dd12 --- /dev/null +++ b/lib/types/db/db-api.d.ts @@ -0,0 +1,16 @@ +import { Assign, DynamoDbDataSource, GraphqlApi, MappingTemplate, PrimaryKey } from 'aws-cdk-lib/aws-appsync'; +import { Construct } from "constructs"; +import { DbTable } from "./table"; +import { AppSyncSchema } from '../api/schema'; +export declare class DbApi { + scope: Construct; + id: string; + api: GraphqlApi; + schema: AppSyncSchema; + table: DbTable; + dataSource: DynamoDbDataSource; + constructor(scope: Construct, id: string, api: GraphqlApi, schema: AppSyncSchema, table: DbTable); + primaryTemplate(primaryKey: PrimaryKey, operation?: string): MappingTemplate; + getPrimaryKey(partition: string, sort?: string, auto?: "partition" | "sort"): PrimaryKey; + assign(name: string, auto?: boolean): Assign; +} diff --git a/lib/types/db/table.d.ts b/lib/types/db/table.d.ts new file mode 100644 index 0000000..43d5c34 --- /dev/null +++ b/lib/types/db/table.d.ts @@ -0,0 +1,35 @@ +import { Table } from 'aws-cdk-lib/aws-dynamodb'; +import { Construct } from 'constructs'; +import { DynamoTableProps, SchemaGlobal, SchemaLocal, SchemaTable, SchemaTableInstance } from '../types'; +import { SchemaPrimaryKey } from '../key/primary'; +import { SchemaLocalIndex } from '../key/local'; +import { SchemaGlobalIndex } from '../key/global'; +import { DbApi } from './db-api'; +import { GraphqlApi } from 'aws-cdk-lib/aws-appsync'; +import { AppSyncSchema } from '../api/schema'; +export declare class DbTable implements SchemaTableInstance { + scope: Construct; + readonly schemaTable: SchemaTable; + readonly label?: string | undefined; + readonly baseName: string; + readonly tableName: string; + construct: Table; + api?: DbApi; + props: DynamoTableProps; + localSecondaryIndexes: SchemaLocalIndex[]; + globalSecondaryIndexes: SchemaGlobalIndex[]; + primaryKey: SchemaPrimaryKey; + attributes: Record; + readonly auto: boolean; + readonly scan: boolean; + readonly subscription: boolean; + readonly query: boolean; + readonly mutation: boolean; + constructor(scope: Construct, schemaTable: SchemaTable, label?: string | undefined); + get pName(): string; + get sName(): string | undefined; + addApi(api: GraphqlApi, schema: AppSyncSchema): DbApi; + protected setLocalKeys(keys?: (string | SchemaLocal | SchemaLocalIndex)[]): SchemaLocalIndex[]; + protected setGlobalKeys(keys?: (string | SchemaGlobal | SchemaGlobalIndex)[]): SchemaGlobalIndex[]; + protected setGraphAttributes(attrs?: string | string[] | Record): Record; +} diff --git a/lib/types/export.d.ts b/lib/types/export.d.ts new file mode 100644 index 0000000..b96195c --- /dev/null +++ b/lib/types/export.d.ts @@ -0,0 +1,2 @@ +export { Dynasync } from "."; +export * as types from "./types"; diff --git a/lib/types/index.d.ts b/lib/types/index.d.ts new file mode 100644 index 0000000..4405d09 --- /dev/null +++ b/lib/types/index.d.ts @@ -0,0 +1,24 @@ +import { Resource } from "aws-cdk-lib"; +import { Construct } from "constructs"; +import { DynasyncProps } from "./types"; +import { DbTable } from "./db/table"; +import { AppSyncStack } from "./api"; +import { GraphqlApi } from "aws-cdk-lib/aws-appsync"; +export declare class Dynasync extends Resource { + protected scope: Construct; + protected id: string; + protected $props: DynasyncProps; + readonly tables: DbTable[]; + readonly appsync: AppSyncStack; + protected $config: DynasyncProps; + static init(scope: Construct, id: string, props?: DynasyncProps): Dynasync; + /** + * {@link GraphqlApi} created by Dynasync + */ + get api(): GraphqlApi; + constructor(scope: Construct, id: string, $props?: DynasyncProps); + get props(): DynasyncProps; + addToSchema(str: string): string; + private mergeProps; + private getUserPoolAuthMode; +} diff --git a/lib/types/key/base.d.ts b/lib/types/key/base.d.ts new file mode 100644 index 0000000..f6eb818 --- /dev/null +++ b/lib/types/key/base.d.ts @@ -0,0 +1,4 @@ +import { KeyInstance } from "./instance"; +export declare class BaseKey { + protected getKey(key: string | KeyInstance): KeyInstance; +} diff --git a/lib/types/key/global.d.ts b/lib/types/key/global.d.ts new file mode 100644 index 0000000..d80baf2 --- /dev/null +++ b/lib/types/key/global.d.ts @@ -0,0 +1,15 @@ +import { KeyInstance } from "./instance"; +import { BaseIndexKey } from "./index-base"; +import { GlobalSecondaryIndexProps } from "aws-cdk-lib/aws-dynamodb"; +import { Capacity } from "../types"; +export declare class SchemaGlobalIndex extends BaseIndexKey { + protected serialize?: boolean | undefined; + protected include?: string[] | undefined; + partitionKey: KeyInstance; + sortKey?: KeyInstance; + constructor(indexName: string, partitionKey: string | KeyInstance, sortKey?: string | KeyInstance, serialize?: boolean | undefined, include?: string[] | undefined, capacity?: Capacity); + get pName(): string; + get sName(): string | undefined; + isList(): boolean; + get props(): GlobalSecondaryIndexProps; +} diff --git a/lib/types/key/index-base.d.ts b/lib/types/key/index-base.d.ts new file mode 100644 index 0000000..895e159 --- /dev/null +++ b/lib/types/key/index-base.d.ts @@ -0,0 +1,18 @@ +import { ProjectionType } from "aws-cdk-lib/aws-dynamodb"; +import { BaseKey } from "./base"; +import { Capacity } from "../types"; +export declare class BaseIndexKey extends BaseKey { + readonly indexName: string; + protected include?: string[] | undefined; + readonly list: boolean; + readonly projectionType?: ProjectionType; + readonly nonKeyAttributes?: string[]; + readonly readCapacity?: number; + readonly writeCapacity?: number; + constructor(indexName: string, include?: string[] | undefined, capacity?: Capacity); + protected isList(): boolean; + protected handleProjection($include?: string | string[]): { + projectionType: ProjectionType; + nonKeyAttributes?: string[]; + }; +} diff --git a/lib/types/key/instance.d.ts b/lib/types/key/instance.d.ts new file mode 100644 index 0000000..a65198f --- /dev/null +++ b/lib/types/key/instance.d.ts @@ -0,0 +1,13 @@ +import { Attribute, AttributeType } from "aws-cdk-lib/aws-dynamodb"; +import { SyncType } from "./sync-type"; +export declare class KeyInstance { + readonly name: string; + readonly keyType: 'partition' | 'sort'; + private $type; + constructor(fieldName: string | KeyInstance, $type?: string | SyncType, keyType?: 'partition' | 'sort'); + get templateType(): Record; + get objectType(): Record; + get attribute(): Attribute; + get type(): SyncType; + convertAttributeName(attr: string): AttributeType; +} diff --git a/lib/types/key/local.d.ts b/lib/types/key/local.d.ts new file mode 100644 index 0000000..54734ce --- /dev/null +++ b/lib/types/key/local.d.ts @@ -0,0 +1,10 @@ +import { KeyInstance } from "./instance"; +import { BaseIndexKey } from "./index-base"; +import { LocalSecondaryIndexProps } from "aws-cdk-lib/aws-dynamodb"; +export declare class SchemaLocalIndex extends BaseIndexKey { + readonly indexName: string; + sortKey: KeyInstance; + constructor(indexName: string, sortKey: string | KeyInstance, include?: string[]); + get sName(): string; + get props(): LocalSecondaryIndexProps; +} diff --git a/lib/types/key/primary.d.ts b/lib/types/key/primary.d.ts new file mode 100644 index 0000000..b4a4a64 --- /dev/null +++ b/lib/types/key/primary.d.ts @@ -0,0 +1,11 @@ +import { KeyInstance } from "./instance"; +import { BaseKey } from "./base"; +import { KeyAttributes } from "../types"; +export declare class SchemaPrimaryKey extends BaseKey { + partitionKey: KeyInstance; + sortKey?: KeyInstance; + constructor(partitionKey: string | KeyInstance, sortKey?: string | KeyInstance); + get pName(): string; + get sName(): string | undefined; + get keySchema(): KeyAttributes; +} diff --git a/lib/types/key/sync-type.d.ts b/lib/types/key/sync-type.d.ts new file mode 100644 index 0000000..3d9ed20 --- /dev/null +++ b/lib/types/key/sync-type.d.ts @@ -0,0 +1,16 @@ +import { BaseTypeOptions, GraphqlTypeOptions } from "@aws-cdk/aws-appsync-alpha"; +import { DynamoAttribute } from "../types"; +export declare class SyncType implements BaseTypeOptions { + readonly fieldName: string; + readonly typeName: string; + readonly templateType: string; + readonly graphqlType: string; + constructor(fieldName: string, graphqlType?: string | SyncType); + get isList(): boolean; + get isRequired(): boolean; + get isRequiredList(): boolean; + getBaseOptions(options?: GraphqlTypeOptions): BaseTypeOptions; + toDynamoAttribute(): DynamoAttribute; + toTypescriptType(): string; + private toCfnTemplateType; +} diff --git a/lib/types/types.d.ts b/lib/types/types.d.ts new file mode 100644 index 0000000..b1b86a2 --- /dev/null +++ b/lib/types/types.d.ts @@ -0,0 +1,132 @@ +import { Attribute, BillingMode, StreamViewType, TableClass, TableEncryption } from "aws-cdk-lib/aws-dynamodb"; +import { KeyInstance } from "./key/instance"; +import { SchemaPrimaryKey } from "./key/primary"; +import { SchemaGlobalIndex } from "./key/global"; +import { SchemaLocalIndex } from "./key/local"; +import { Duration, RemovalPolicy, ResourceProps } from "aws-cdk-lib"; +import { IUserPool } from "aws-cdk-lib/aws-cognito"; +import { DbTable } from "./db/table"; +import { Directive, IField, IIntermediateType, InterfaceType } from "@aws-cdk/aws-appsync-alpha"; +import { AuthorizationMode, DomainOptions, LogConfig, Resolver } from "aws-cdk-lib/aws-appsync"; +import { IKey } from "aws-cdk-lib/aws-kms"; +import { IStream } from "aws-cdk-lib/aws-kinesis"; +export interface DynasyncProps extends ResourceProps { + userPool?: IUserPool; + tables?: (DbTable | SchemaTable)[]; + configFile?: string; + types?: GraphQlTypeList; + userPoolRegex?: string; + userPoolDeny?: boolean; + apiProps?: AppsyncApiProps; + tableProps?: DynamoTableProps; + auth?: AuthorizationMode[]; + deleteTablesWithStack?: boolean; +} +export interface SchemaTable extends SchemaTableBase { + partitionKey: string | KeyInstance; + sortKey?: string | KeyInstance; + attributes?: Record; + globalSecondaryIndexes?: (string | SchemaGlobal | SchemaGlobalIndex)[]; + localSecondaryIndexes?: (string | SchemaLocal | SchemaLocalIndex)[]; + prefix?: string; + tableProps?: DynamoTableProps; +} +export interface SchemaTableInstance extends Required { + localSecondaryIndexes: SchemaLocalIndex[]; + globalSecondaryIndexes: SchemaGlobalIndex[]; + primaryKey: SchemaPrimaryKey; + attributes: Record; +} +interface SchemaTableBase { + readonly tableName: string; + props?: DynamoTableProps; + scan?: boolean; + auto?: boolean; + subscription?: boolean; + query?: boolean; + mutation?: boolean; +} +export interface Capacity { + read?: number; + write?: number; +} +export interface KeyAttributes { + partitionKey: Attribute; + sortKey?: Attribute; +} +export interface SchemaGlobal { + partitionKey: string | KeyInstance; + sortKey?: string | KeyInstance; + include?: string[]; + indexName?: string; + list?: boolean; + capacity?: Capacity; +} +export interface GraphQlTypeList { + types?: IntermediateTypeList; + interfaces?: IntermediateTypeList; + inputs?: IntermediateTypeList; + unions?: { + [name: string]: (string | IIntermediateType)[]; + }; + enums?: { + [name: string]: string[]; + }; +} +export interface SchemaLocal { + sortKey: string | KeyInstance; + include?: string[]; + indexName?: string; +} +export interface DynamoTableProps { + readCapacity?: number; + writeCapacity?: number; + replicationTimeout?: Duration; + replicationRegions?: string[]; + billingMode?: BillingMode; + pointInTimeRecovery?: boolean; + tableClass?: TableClass; + encryption?: TableEncryption; + encryptionKey?: IKey; + timeToLiveAttribute?: string; + stream?: StreamViewType; + waitForReplicationToFinish?: boolean; + contributorInsightsEnabled?: boolean; + deletionProtection?: boolean; + kinesisStream?: IStream; + removalPolicy?: RemovalPolicy; +} +export type DynamoAttribute = "B" | "S" | "N"; +export interface DynamoAttributes { + [name: string]: DynamoAttribute; +} +export type SchemaObject = Record; +export type GraphType = 'id' | 'string' | 'int' | 'float' | 'boolean' | 'awsDate' | 'awsTime' | 'awsDateTime' | 'awsTimestamp' | 'awsEmail' | 'awsJson' | 'awsUrl' | 'awsPhone' | 'awsIpAddress' | 'intermediate'; +export interface IntermediateTypes { + [name: string]: IIntermediateType; +} +export type IntermediateType = 'type' | 'input' | 'interface' | 'union' | 'enum'; +export interface SchemaFields { + [name: string]: IField; +} +export interface IntermediateTypeBase { + directives?: Directive[]; + interfaceTypes?: InterfaceType[]; + intermediateType?: IIntermediateType; + resolvers?: Resolver[]; +} +export interface IntermediateTypeProps extends IntermediateTypeBase { + definition: SchemaObject; +} +export interface IntermediateTypeOptions extends IntermediateTypeBase { + definition: SchemaFields; +} +export interface IntermediateTypeList { + [name: string]: IntermediateTypeProps | SchemaObject; +} +export interface AppsyncApiProps { + logConfig?: LogConfig; + xrayEnabled?: boolean; + domainName?: DomainOptions; +} +export {}; diff --git a/lib/types/util.d.ts b/lib/types/util.d.ts new file mode 100644 index 0000000..a80452e --- /dev/null +++ b/lib/types/util.d.ts @@ -0,0 +1,4 @@ +import { DbTable } from "./db/table"; +export declare function getName(...names: string[]): string; +export declare function capitalize(str: string): string; +export declare function validateTable(table: DbTable): void; diff --git a/lib/util.js b/lib/util.js new file mode 100644 index 0000000..2450396 --- /dev/null +++ b/lib/util.js @@ -0,0 +1,21 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.validateTable = exports.capitalize = exports.getName = void 0; +function getName(...names) { + return names.join('-'); +} +exports.getName = getName; +function capitalize(str) { + return str.substring(0, 1).toUpperCase() + (str.length > 1 ? str.substring(1) : ''); +} +exports.capitalize = capitalize; +function validateTable(table) { + if (!table.attributes[table.pName]) { + throw new Error(`Partition Key ${table.pName} must be present in attributes ${JSON.stringify(table.attributes, null, '\t')}`); + } + if (table.sName && !table.attributes[table.sName]) { + throw new Error(`Sort Key ${table.sName} must be present in attributes ${JSON.stringify(table.attributes, null, '\t')}`); + } +} +exports.validateTable = validateTable; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLFNBQWdCLE9BQU8sQ0FBQyxHQUFHLEtBQWU7SUFDdEMsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLENBQUM7QUFGRCwwQkFFQztBQUVELFNBQWdCLFVBQVUsQ0FBQyxHQUFVO0lBQ2pDLE9BQU8sR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkYsQ0FBQztBQUZELGdDQUVDO0FBRUQsU0FBZ0IsYUFBYSxDQUFDLEtBQWM7SUFDeEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQUMsaUJBQWlCLEtBQUssQ0FBQyxLQUFLLGtDQUFrQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUMsSUFBSSxFQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtLQUM5SDtJQUNELElBQUksS0FBSyxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQy9DLE1BQU0sSUFBSSxLQUFLLENBQUMsWUFBWSxLQUFLLENBQUMsS0FBSyxrQ0FBa0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFDLElBQUksRUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7S0FDekg7QUFDTCxDQUFDO0FBUEQsc0NBT0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYlRhYmxlIH0gZnJvbSBcIi4vZGIvdGFibGVcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldE5hbWUoLi4ubmFtZXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmFtZXMuam9pbignLScpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FwaXRhbGl6ZShzdHI6c3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3RyLnN1YnN0cmluZygwLDEpLnRvVXBwZXJDYXNlKCkgKyAoc3RyLmxlbmd0aCA+IDEgPyBzdHIuc3Vic3RyaW5nKDEpIDogJycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVUYWJsZSh0YWJsZTogRGJUYWJsZSkge1xuICAgIGlmICghdGFibGUuYXR0cmlidXRlc1t0YWJsZS5wTmFtZV0pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQYXJ0aXRpb24gS2V5ICR7dGFibGUucE5hbWV9IG11c3QgYmUgcHJlc2VudCBpbiBhdHRyaWJ1dGVzICR7SlNPTi5zdHJpbmdpZnkodGFibGUuYXR0cmlidXRlcyxudWxsLCdcXHQnKX1gKVxuICAgIH1cbiAgICBpZiAodGFibGUuc05hbWUgJiYgIXRhYmxlLmF0dHJpYnV0ZXNbdGFibGUuc05hbWVdKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU29ydCBLZXkgJHt0YWJsZS5zTmFtZX0gbXVzdCBiZSBwcmVzZW50IGluIGF0dHJpYnV0ZXMgJHtKU09OLnN0cmluZ2lmeSh0YWJsZS5hdHRyaWJ1dGVzLG51bGwsJ1xcdCcpfWApXG4gICAgfVxufSJdfQ== \ No newline at end of file diff --git a/package.json b/package.json index 22d7734..cf4659f 100644 --- a/package.json +++ b/package.json @@ -47,5 +47,11 @@ }, "overrides": { "constructs": "$constructs" - } + }, + "files": [ + "lib", + "README.md", + "LICENSE", + "package.json" + ] } diff --git a/src/db/db-api.ts b/src/db/db-api.ts index 23d2d9c..c0895b1 100644 --- a/src/db/db-api.ts +++ b/src/db/db-api.ts @@ -83,6 +83,13 @@ export class DbApi { const getIndexName = `${prefix}${table.baseName}By${capitalize(index.pName)}` if (!usedOperations.includes(getIndexName)) { + let index_name: string = ''; + if (index.indexName) { + index_name = index.indexName; + } else { + index_name = `global${table.baseName}${capitalize(index.pName)}${capitalize(index.sName || '')}` + } + this.api.createResolver(getIndexName, { fieldName: getIndexName, typeName: 'Query', @@ -92,7 +99,7 @@ export class DbApi { MappingTemplate.dynamoDbResultItem(), requestMappingTemplate: MappingTemplate.dynamoDbQuery( KeyCondition.eq(index.pName, index.pName), - `global${table.baseName}${index.pName}${index.sName || ''}` + index_name ) }) usedOperations.push(getIndexName); diff --git a/src/db/table.ts b/src/db/table.ts index d52bc21..355510a 100644 --- a/src/db/table.ts +++ b/src/db/table.ts @@ -96,10 +96,24 @@ export class DbTable implements SchemaTableInstance { const key = typeof $key === 'string' ? { partitionKey: new KeyInstance($key, undefined, 'partition') } : $key; - let name = key.indexName || `global${capitalize(this.tableName) + capitalize( - typeof key.partitionKey === 'string' ? key.partitionKey : key.partitionKey.name - )}`; - if (key.sortKey) name += capitalize(typeof key.sortKey === 'string' ? key.sortKey : key.sortKey.name); + + let name: string = ''; + if (key.indexName) { + name = key.indexName; + } else { + const partitionKeyName = typeof key.partitionKey === 'string' + ? key.partitionKey + : key.partitionKey.name; + + const sortKeyName = key.sortKey + ? typeof key.sortKey === 'string' + ? key.sortKey + : key.sortKey.name + : ''; + + name = `global${capitalize(this.tableName)}${capitalize(partitionKeyName)}${capitalize(sortKeyName)}`; + } + return new SchemaGlobalIndex( name, key.partitionKey,