UNPKG

@cloudcamp/aws-runtime

Version:

CloudCamp - Launch faster by building scalable infrastructure in few lines of code.

164 lines 15.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Language = exports.LanguageCode = void 0; const utils_1 = require("./utils"); /** * (experimental) Language codes supported by CDK. * * @experimental */ var LanguageCode; (function (LanguageCode) { LanguageCode["TYPESCRIPT"] = "typescript"; LanguageCode["JAVASCRIPT"] = "javascript"; LanguageCode["PYTHON"] = "python"; LanguageCode["CSHARP"] = "csharp"; LanguageCode["JAVA"] = "java"; })(LanguageCode = exports.LanguageCode || (exports.LanguageCode = {})); /** * Abstract Language class, serves as a template for subclasses * which implement a specific language. */ class Language { /** * @param code The code of the language */ constructor(code) { this.code = code; } /** * Is a language code valid? */ static isValidCode(code) { return Language.LANGUAGE_CODES.includes(code); } /** * Get the language code by file extension. */ static languageCodeForExtension(ext) { switch (ext) { case ".ts": return LanguageCode.TYPESCRIPT; case ".py": return LanguageCode.PYTHON; case ".js": return LanguageCode.JAVASCRIPT; case ".cs": return LanguageCode.CSHARP; case ".java": return LanguageCode.JAVA; default: throw new Error("Unknown extension."); } } /** * Get the extension for a language code. */ static extensionForLanguageCode(code) { switch (code) { case LanguageCode.TYPESCRIPT: return ".ts"; case LanguageCode.PYTHON: return ".py"; case LanguageCode.JAVASCRIPT: return ".js"; case LanguageCode.CSHARP: return ".cs"; case LanguageCode.JAVA: return ".java"; } } static nameForLanguageCode(code) { switch (code) { case LanguageCode.TYPESCRIPT: return "TypeScript"; case LanguageCode.PYTHON: return "Python"; case LanguageCode.JAVASCRIPT: return "JavaScript"; case LanguageCode.CSHARP: return "C#"; case LanguageCode.JAVA: return "Java"; } } /** * Instantiate new Language based on code. */ static make(code) { switch (code) { case LanguageCode.TYPESCRIPT: return new TypescriptLanguage(code); case LanguageCode.PYTHON: return new PythonLanguage(code); default: throw new Error("Not yet implemented: " + code); } } } exports.Language = Language; /** * A list of valid language codes. */ Language.LANGUAGE_CODES = Object.values(LanguageCode); /** * Typescript */ class TypescriptLanguage extends Language { async generateFiles(generator) { generator.writeFileHome(".gitignore", ["cdk.out", ".DS_Store", "node_modules"].join("\n") + "\n"); generator.writeFileHome("package.json", JSON.stringify({ dependencies: { "@cloudcamp/aws-runtime": utils_1.version(), "ts-node": "10.0.0", }, devDependencies: { typescript: "4.4.4", }, }, null, 2)); } get cdkAppCommand() { return "npx ts-node --prefer-ts-exts src/app.ts"; } get installCommands() { return ["npm i typescript --save-dev", "npm install"]; } get buildCommands() { // When debugging, the aws-runtime directory is copied to the // build dir. Compile it with tsc. return [`[ -d "aws-runtime" ] && cd aws-runtime && npx tsc || true`]; } } /** * TPython */ class PythonLanguage extends Language { async generateFiles(generator) { generator.writeFileHome(".gitignore", ["cdk.out", ".DS_Store", ".venv", "*.py[cod]", "*$py.class"].join("\n") + "\n"); generator.writeFileHome("requirements.txt", "cloudcamp\n"); } get cdkAppCommand() { return "python3 src/camp.py"; } get installCommands() { if (process.platform == "win32") { return [ "python -m venv .venv", ".venv\\Scripts\\activate.bat", "pip install -r requirements.txt", ]; } else { return [ "python -m venv .venv", "source .venv/bin/activate", "pip install -r requirements.txt", ]; } } get buildCommands() { return []; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFuZ3VhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbGFuZ3VhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQWtDOzs7Ozs7QUFHbEMsSUFBWSxZQU1YO0FBTkQsV0FBWSxZQUFZO0lBQ3RCLHlDQUF5QixDQUFBO0lBQ3pCLHlDQUF5QixDQUFBO0lBQ3pCLGlDQUFpQixDQUFBO0lBQ2pCLGlDQUFpQixDQUFBO0lBQ2pCLDZCQUFhLENBQUE7QUFDZixDQUFDLEVBTlcsWUFBWSxHQUFaLG9CQUFZLEtBQVosb0JBQVksUUFNdkI7QUFPRDs7O0dBR0c7QUFDSCxNQUFzQixRQUFRO0lBa0U1Qjs7T0FFRztJQUNILFlBQW1CLElBQWtCO1FBQWxCLFNBQUksR0FBSixJQUFJLENBQWM7SUFBRyxDQUFDO0lBL0R6Qzs7T0FFRztJQUNILE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBWTtRQUM3QixPQUFPLFFBQVEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLElBQW9CLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsd0JBQXdCLENBQUMsR0FBVztRQUN6QyxRQUFRLEdBQUcsRUFBRTtZQUNYLEtBQUssS0FBSztnQkFDUixPQUFPLFlBQVksQ0FBQyxVQUFVLENBQUM7WUFDakMsS0FBSyxLQUFLO2dCQUNSLE9BQU8sWUFBWSxDQUFDLE1BQU0sQ0FBQztZQUM3QixLQUFLLEtBQUs7Z0JBQ1IsT0FBTyxZQUFZLENBQUMsVUFBVSxDQUFDO1lBQ2pDLEtBQUssS0FBSztnQkFDUixPQUFPLFlBQVksQ0FBQyxNQUFNLENBQUM7WUFDN0IsS0FBSyxPQUFPO2dCQUNWLE9BQU8sWUFBWSxDQUFDLElBQUksQ0FBQztZQUMzQjtnQkFDRSxNQUFNLElBQUksS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUM7U0FDekM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsd0JBQXdCLENBQUMs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YSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLE9BQU8scUJBQXFCLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksZUFBZTtRQUNqQixJQUFJLE9BQU8sQ0FBQyxRQUFRLElBQUksT0FBTyxFQUFFO1lBQy9CLE9BQU87Z0JBQ0wsc0JBQXNCO2dCQUN0Qiw4QkFBOEI7Z0JBQzlCLGlDQUFpQzthQUNsQyxDQUFDO1NBQ0g7YUFBTTtZQUNMLE9BQU87Z0JBQ0wsc0JBQXNCO2dCQUN0QiwyQkFBMkI7Z0JBQzNCLGlDQUFpQzthQUNsQyxDQUFDO1NBQ0g7SUFDSCxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB2ZXJzaW9uIH0gZnJvbSBcIi4vdXRpbHNcIjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuZXhwb3J0IGVudW0gTGFuZ3VhZ2VDb2RlIHtcbiAgVFlQRVNDUklQVCA9IFwidHlwZXNjcmlwdFwiLFxuICBKQVZBU0NSSVBUID0gXCJqYXZhc2NyaXB0XCIsXG4gIFBZVEhPTiA9IFwicHl0aG9uXCIsXG4gIENTSEFSUCA9IFwiY3NoYXJwXCIsXG4gIEpBVkEgPSBcImphdmFcIixcbn1cblxuaW50ZXJmYWNlIElHZW5lcmF0b3Ige1xuICBtYWtlRGlySG9tZShkaXJuYW1lOiBzdHJpbmcpOiB2b2lkO1xuICB3cml0ZUZpbGVIb21lKGZpbGVuYW1lOiBzdHJpbmcsIGRhdGE6IHN0cmluZyk6IHZvaWQ7XG59XG5cbi8qKlxuICogQWJzdHJhY3QgTGFuZ3VhZ2UgY2xhc3MsIHNlcnZlcyBhcyBhIHRlbXBsYXRlIGZvciBzdWJjbGFzc2VzXG4gKiB3aGljaCBpbXBsZW1lbnQgYSBzcGVjaWZpYyBsYW5ndWFnZS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIExhbmd1YWdlIHtcbiAgLyoqXG4gICAqIEEgbGlzdCBvZiB2YWxpZCBsYW5ndWFnZSBjb2Rlcy5cbiAgICovXG4gIHN0YXRpYyBMQU5HVUFHRV9DT0RFUyA9IE9iamVjdC52YWx1ZXMoTGFuZ3VhZ2VDb2RlKTtcblxuICAvKipcbiAgICogSXMgYSBsYW5ndWFnZSBjb2RlIHZhbGlkP1xuICAgKi9cbiAgc3RhdGljIGlzVmFsaWRDb2RlKGNvZGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBMYW5ndWFnZS5MQU5HVUFHRV9DT0RFUy5pbmNsdWRlcyhjb2RlIGFzIExhbmd1YWdlQ29kZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBsYW5ndWFnZSBjb2RlIGJ5IGZpbGUgZXh0ZW5zaW9uLlxuICAgKi9cbiAgc3RhdGljIGxhbmd1YWdlQ29kZUZvckV4dGVuc2lvbihleHQ6IHN0cmluZyk6IExhbmd1YWdlQ29kZSB7XG4gICAgc3dpdGNoIChleHQpIHtcbiAgICAgIGNhc2UgXCIudHNcIjpcbiAgICAgICAgcmV0dXJuIExhbmd1YWdlQ29kZS5UWVBFU0NSSVBUO1xuICAgICAgY2FzZSBcIi5weVwiOlxuICAgICAgICByZXR1cm4gTGFuZ3VhZ2VDb2RlLlBZVEhPTjtcbiAgICAgIGNhc2UgXCIuanNcIjpcbiAgICAgICAgcmV0dXJuIExhbmd1YWdlQ29kZS5KQVZBU0NSSVBUO1xuICAgICAgY2FzZSBcIi5jc1wiOlxuICAgICAgICByZXR1cm4gTGFuZ3VhZ2VDb2RlLkNTSEFSUDtcbiAgICAgIGNhc2UgXCIuamF2YVwiOlxuICAgICAgICByZXR1cm4gTGFuZ3VhZ2VDb2RlLkpBVkE7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGV4dGVuc2lvbi5cIik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZXh0ZW5zaW9uIGZvciBhIGxhbmd1YWdlIGNvZGUuXG4gICAqL1xuICBzdGF0aWMgZXh0ZW5zaW9uRm9yTGFuZ3VhZ2VDb2RlKGNvZGU6IExhbmd1YWdlQ29kZSk6IHN0cmluZyB7XG4gICAgc3dpdGNoIChjb2RlKSB7XG4gICAgICBjYXNlIExhbmd1YWdlQ29kZS5UWVBFU0NSSVBUOlxuICAgICAgICByZXR1cm4gXCIudHNcIjtcbiAgICAgIGNhc2UgTGFuZ3VhZ2VDb2RlLlBZVEhPTjpcbiAgICAgICAgcmV0dXJuIFwiLnB5XCI7XG4gICAgICBjYXNlIExhbmd1YWdlQ29kZS5KQVZBU0NSSVBUOlxuICAgICAgICByZXR1cm4gXCIuanNcIjtcbiAgICAgIGNhc2UgTGFuZ3VhZ2VDb2RlLkNTSEFSUDpcbiAgICAgICAgcmV0dXJuIFwiLmNzXCI7XG4gICAgICBjYXNlIExhbmd1YWdlQ29kZS5KQVZBOlxuICAgICAgICByZXR1cm4gXCIuamF2YVwiO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBuYW1lRm9yTGFuZ3VhZ2VDb2RlKGNvZGU6IExhbmd1YWdlQ29kZSk6IHN0cmluZyB7XG4gICAgc3dpdGNoIChjb2RlKSB7XG4gICAgICBjYXNlIExhbmd1YWdlQ29kZS5UWVBFU0NSSVBUOlxuICAgICAgICByZXR1cm4gXCJUeXBlU2NyaXB0XCI7XG4gICAgICBjYXNlIExhbmd1YWdlQ29kZS5QWVRIT046XG4gICAgICAgIHJldHVybiBcIlB5dGhvblwiO1xuICAgICAgY2FzZSBMYW5ndWFnZUNvZGUuSkFWQVNDUklQVDpcbiAgICAgICAgcmV0dXJuIFwiSmF2YVNjcmlwdFwiO1xuICAgICAgY2FzZSBMYW5ndWFnZUNvZGUuQ1NIQVJQOlxuICAgICAgICByZXR1cm4gXCJDI1wiO1xuICAgICAgY2FzZSBMYW5ndWFnZUNvZGUuSkFWQTpcbiAgICAgICAgcmV0dXJuIFwiSmF2YVwiO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gY29kZSBUaGUgY29kZSBvZiB0aGUgbGFuZ3VhZ2VcbiAgICovXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBjb2RlOiBMYW5ndWFnZUNvZGUpIHt9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGZpbGVzIGZvciBhIG5ldyBhcHBcbiAgICovXG5cbiAgYWJzdHJhY3QgZ2VuZXJhdGVGaWxlcyhnZW5lcmF0b3I6IElHZW5lcmF0b3IpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBUaGUgY29tbWFuZCBDREsgdXNlcyB0byBzeW50aGVzaXplLlxuICAgKlxuICAgKiBOb3RlOiBUaGlzIGNvbW1hbmQgaXMgcnVuIGluIHRoZSBwcm9qZWN0IGRpcmVjdG9yeS5cbiAgICovXG4gIGFic3RyYWN0IGdldCBjZGtBcHBDb21tYW5kKCk6IHN0cmluZztcblxuICAvKipcbiAgICogQ29tbWFuZCB0byBpbnN0YWxsIGRlcGVuZGVuY2llc1xuICAgKlxuICAgKiBOb3RlOiBUaGlzIGNvbW1hbmQgaXMgcnVuIGluIHRoZSBwcm9qZWN0IGRpcmVjdG9yeS5cbiAgICovXG4gIGFic3RyYWN0IGdldCBpbnN0YWxsQ29tbWFuZHMoKTogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIENvbW1hbmQgdG8gYnVpbGQgdGhlIENESyBjb2RlXG4gICAqXG4gICAqIE5vdGU6IFRoaXMgY29tbWFuZCBpcyBydW4gaW4gdGhlIHByb2plY3QgZGlyZWN0b3J5LlxuICAgKi9cbiAgYWJzdHJhY3QgZ2V0IGJ1aWxkQ29tbWFuZHMoKTogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEluc3RhbnRpYXRlIG5ldyBMYW5ndWFnZSBiYXNlZCBvbiBjb2RlLlxuICAgKi9cbiAgc3RhdGljIG1ha2UoY29kZTogTGFuZ3VhZ2VDb2RlKTogTGFuZ3VhZ2Uge1xuICAgIHN3aXRjaCAoY29kZSkge1xuICAgICAgY2FzZSBMYW5ndWFnZUNvZGUuVFlQRVNDUklQVDpcbiAgICAgICAgcmV0dXJuIG5ldyBUeXBlc2NyaXB0TGFuZ3VhZ2UoY29kZSk7XG4gICAgICBjYXNlIExhbmd1YWdlQ29kZS5QWVRIT046XG4gICAgICAgIHJldHVybiBuZXcgUHl0aG9uTGFuZ3VhZ2UoY29kZSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJOb3QgeWV0IGltcGxlbWVudGVkOiBcIiArIGNvZGUpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFR5cGVzY3JpcHRcbiAqL1xuY2xhc3MgVHlwZXNjcmlwdExhbmd1YWdlIGV4dGVuZHMgTGFuZ3VhZ2Uge1xuICBhc3luYyBnZW5lcmF0ZUZpbGVzKGdlbmVyYXRvcjogSUdlbmVyYXRvcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGdlbmVyYXRvci53cml0ZUZpbGVIb21lKFxuICAgICAgXCIuZ2l0aWdub3JlXCIsXG4gICAgICBbXCJjZGsub3V0XCIsIFwiLkRTX1N0b3JlXCIsIFwibm9kZV9tb2R1bGVzXCJdLmpvaW4oXCJcXG5cIikgKyBcIlxcblwiXG4gICAgKTtcbiAgICBnZW5lcmF0b3Iud3JpdGVGaWxlSG9tZShcbiAgICAgIFwicGFja2FnZS5qc29uXCIsXG4gICAgICBKU09OLnN0cmluZ2lmeShcbiAgICAgICAge1xuICAgICAgICAgIGRlcGVuZGVuY2llczoge1xuICAgICAgICAgICAgXCJAY2xvdWRjYW1wL2F3cy1ydW50aW1lXCI6IHZlcnNpb24oKSxcbiAgICAgICAgICAgIFwidHMtbm9kZVwiOiBcIjEwLjAuMFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZGV2RGVwZW5kZW5jaWVzOiB7XG4gICAgICAgICAgICB0eXBlc2NyaXB0OiBcIjQuNC40XCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgMlxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBnZXQgY2RrQXBwQ29tbWFuZCgpIHtcbiAgICByZXR1cm4gXCJucHggdHMtbm9kZSAtLXByZWZlci10cy1leHRzIHNyYy9hcHAudHNcIjtcbiAgfVxuXG4gIGdldCBpbnN0YWxsQ29tbWFuZHMoKSB7XG4gICAgcmV0dXJuIFtcIm5wbSBpIHR5cGVzY3JpcHQgLS1zYXZlLWRldlwiLCBcIm5wbSBpbnN0YWxsXCJdO1xuICB9XG5cbiAgZ2V0IGJ1aWxkQ29tbWFuZHMoKSB7XG4gICAgLy8gV2hlbiBkZWJ1Z2dpbmcsIHRoZSBhd3MtcnVudGltZSBkaXJlY3RvcnkgaXMgY29waWVkIHRvIHRoZVxuICAgIC8vIGJ1aWxkIGRpci4gQ29tcGlsZSBpdCB3aXRoIHRzYy5cbiAgICByZXR1cm4gW2BbIC1kIFwiYXdzLXJ1bnRpbWVcIiBdICYmIGNkIGF3cy1ydW50aW1lICYmIG5weCB0c2MgfHwgdHJ1ZWBdO1xuICB9XG59XG5cbi8qKlxuICogVFB5dGhvblxuICovXG5jbGFzcyBQeXRob25MYW5ndWFnZSBleHRlbmRzIExhbmd1YWdlIHtcbiAgYXN5bmMgZ2VuZXJhdGVGaWxlcyhnZW5lcmF0b3I6IElHZW5lcmF0b3IpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBnZW5lcmF0b3Iud3JpdGVGaWxlSG9tZShcbiAgICAgIFwiLmdpdGlnbm9yZVwiLFxuICAgICAgW1wiY2RrLm91dFwiLCBcIi5EU19TdG9yZVwiLCBcIi52ZW52XCIsIFwiKi5weVtjb2RdXCIsIFwiKiRweS5jbGFzc1wiXS5qb2luKFwiXFxuXCIpICtcbiAgICAgICAgXCJcXG5cIlxuICAgICk7XG4gICAgZ2VuZXJhdG9yLndyaXRlRmlsZUhvbWUoXCJyZXF1aXJlbWVudHMudHh0XCIsIFwiY2xvdWRjYW1wXFxuXCIpO1xuICB9XG5cbiAgZ2V0IGNka0FwcENvbW1hbmQoKSB7XG4gICAgcmV0dXJuIFwicHl0aG9uMyBzcmMvY2FtcC5weVwiO1xuICB9XG5cbiAgZ2V0IGluc3RhbGxDb21tYW5kcygpOiBzdHJpbmdbXSB7XG4gICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT0gXCJ3aW4zMlwiKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBcInB5dGhvbiAtbSB2ZW52IC52ZW52XCIsXG4gICAgICAgIFwiLnZlbnZcXFxcU2NyaXB0c1xcXFxhY3RpdmF0ZS5iYXRcIixcbiAgICAgICAgXCJwaXAgaW5zdGFsbCAtciByZXF1aXJlbWVudHMudHh0XCIsXG4gICAgICBdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBcInB5dGhvbiAtbSB2ZW52IC52ZW52XCIsXG4gICAgICAgIFwic291cmNlIC52ZW52L2Jpbi9hY3RpdmF0ZVwiLFxuICAgICAgICBcInBpcCBpbnN0YWxsIC1yIHJlcXVpcmVtZW50cy50eHRcIixcbiAgICAgIF07XG4gICAgfVxuICB9XG5cbiAgZ2V0IGJ1aWxkQ29tbWFuZHMoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59XG4iXX0=