From cffc5614eee6eb5850fd897df7f5000d8ef8ab90 Mon Sep 17 00:00:00 2001 From: Kasra Bigdeli Date: Mon, 19 Nov 2018 21:37:12 -0800 Subject: [PATCH] Template Helper moved --- app-backend/built/user/TemplateHelper.js | 109 +++++++------- app-backend/built/user/TemplateHelper.js.map | 2 +- .../{TemplateHelper.js => TemplateHelper.ts} | 142 ++++++++++-------- 3 files changed, 135 insertions(+), 118 deletions(-) rename app-backend/src/user/{TemplateHelper.js => TemplateHelper.ts} (53%) diff --git a/app-backend/built/user/TemplateHelper.js b/app-backend/built/user/TemplateHelper.js index a5c6721..635c976 100644 --- a/app-backend/built/user/TemplateHelper.js +++ b/app-backend/built/user/TemplateHelper.js @@ -1,11 +1,12 @@ -const request = require('request'); -const fs = require('fs-extra'); -const ApiStatusCodes = require('../api/ApiStatusCodes'); -const Logger = require('../utils/Logger'); -const CaptainConstants = require('../utils/CaptainConstants'); +"use strict"; +const request = require("request"); +const fs = require("fs-extra"); +const ApiStatusCodes = require("../api/ApiStatusCodes"); +const Logger = require("../utils/Logger"); +const CaptainConstants = require("../utils/CaptainConstants"); function getTagsForImage(imageBaseName, url, allTags) { if (!url) { - url = 'https://hub.docker.com/v2/repositories/' + imageBaseName + '/tags'; + url = "https://hub.docker.com/v2/repositories/" + imageBaseName + "/tags"; } return new Promise(function (resolve, reject) { request(url, function (error, response, body) { @@ -21,13 +22,13 @@ function getTagsForImage(imageBaseName, url, allTags) { catch (e) { Logger.e(e); } - let results = null; + let results; if (body) { results = body.results; } if (!results) { - Logger.e('NO RESULT'); - reject(new Error('NO RESULT')); + Logger.e("NO RESULT"); + reject(new Error("NO RESULT")); return; } if (!allTags) { @@ -46,13 +47,13 @@ function getTagsForImage(imageBaseName, url, allTags) { } function firstEndsWithSecond(str1, str2) { if (!str1 || !str2) { - throw new Error('Str1 or Str2 are null ' + !str1 + ' ' + !str2); + throw new Error("Str1 or Str2 are null " + !str1 + " " + !str2); } - let idx = str1.indexOf(str2); + const idx = str1.indexOf(str2); return idx >= 0 && (idx + str2.length) === str1.length; } function isEmpty(obj) { - for (let key in obj) { + for (const key in obj) { if (obj.hasOwnProperty(key)) { return false; } @@ -62,37 +63,37 @@ function isEmpty(obj) { class TemplateHelper { constructor() { const templates = [{ - templateName: 'node', - dockerHubImageName: 'library/node', - dockerFileFromName: 'node', - displayName: 'NodeJS', - tagSuffix: '-alpine' + templateName: "node", + dockerHubImageName: "library/node", + dockerFileFromName: "node", + displayName: "NodeJS", + tagSuffix: "-alpine" }, { - templateName: 'php', - dockerHubImageName: 'library/php', - dockerFileFromName: 'php', - displayName: 'PHP', - tagSuffix: '-apache' + templateName: "php", + dockerHubImageName: "library/php", + dockerFileFromName: "php", + displayName: "PHP", + tagSuffix: "-apache" }, { - templateName: 'python-django', - dockerHubImageName: 'library/python', - dockerFileFromName: 'python-django', - displayName: 'Python Django', - tagSuffix: '-alpine3.6' + templateName: "python-django", + dockerHubImageName: "library/python", + dockerFileFromName: "python-django", + displayName: "Python Django", + tagSuffix: "-alpine3.6" }, { - templateName: 'ruby-rack', - dockerHubImageName: 'library/ruby', - dockerFileFromName: 'ruby-rack', - displayName: 'Ruby Rack', - tagSuffix: '-alpine3.7' + templateName: "ruby-rack", + dockerHubImageName: "library/ruby", + dockerFileFromName: "ruby-rack", + displayName: "Ruby Rack", + tagSuffix: "-alpine3.7" } ]; - const dockerfilesRoot = __dirname + '/../../dockerfiles/'; + const dockerfilesRoot = __dirname + "/../../dockerfiles/"; for (let i = 0; i < templates.length; i++) { - templates[i].postFromLines = fs.readFileSync(dockerfilesRoot + templates[i].templateName, 'utf8'); + templates[i].postFromLines = fs.readFileSync(dockerfilesRoot + templates[i].templateName, "utf8"); } this.templates = templates; this.cachedImageTags = {}; @@ -102,14 +103,14 @@ class TemplateHelper { } getDockerVersionsForTemplateName(templateName) { const self = this; - let templateObj = self.getTemplateFromTemplateName(templateName); + const templateObj = self.getTemplateFromTemplateName(templateName); if (isEmpty(this.cachedImageTags)) { - throw ApiStatusCodes.createError(ApiStatusCodes.STATUS_ERROR_GENERIC, 'Please wait about 30 seconds, then try again.'); + throw ApiStatusCodes.createError(ApiStatusCodes.STATUS_ERROR_GENERIC, "Please wait about 30 seconds, then try again."); } - let tags = self.cachedImageTags[templateObj.dockerHubImageName]; - let dockerVersions = []; + const tags = self.cachedImageTags[templateObj.dockerHubImageName]; + const dockerVersions = []; for (let i = 0; i < tags.length; i++) { - let t = tags[i]; + const t = tags[i]; if (firstEndsWithSecond(t, templateObj.tagSuffix)) { dockerVersions.push(t.substring(0, t.length - templateObj.tagSuffix.length)); } @@ -119,28 +120,28 @@ class TemplateHelper { printAvailableImageTagsForReadme() { const self = this; self.cachedImageTags = {}; - let tempCache = {}; + const tempCache = {}; for (let i = 0; i < self.templates.length; i++) { const currentImageName = self.templates[i].dockerHubImageName; - getTagsForImage(currentImageName) + getTagsForImage(currentImageName, undefined, undefined) .then(function (tags) { tempCache[currentImageName] = tags; let isAllDone = true; for (let j = 0; j < self.templates.length; j++) { - let imageName = self.templates[j].dockerHubImageName; + const imageName = self.templates[j].dockerHubImageName; if (!tempCache[imageName]) { isAllDone = false; } } if (isAllDone) { - Logger.d('Template Cache Updated!'); + Logger.d("Template Cache Updated!"); self.cachedImageTags = tempCache; // Used for README for (let tempIdx = 0; tempIdx < self.templates.length; tempIdx++) { - Logger.d(' '); - Logger.d(self.templates[tempIdx].templateName + '/'); - Logger.d(self.getDockerVersionsForTemplateName(self.templates[tempIdx].templateName).join(', ')); - Logger.d(' '); + Logger.d(" "); + Logger.d(self.templates[tempIdx].templateName + "/"); + Logger.d(self.getDockerVersionsForTemplateName(self.templates[tempIdx].templateName).join(", ")); + Logger.d(" "); } } }) @@ -155,18 +156,18 @@ class TemplateHelper { return this.templates[i]; } } - throw ApiStatusCodes.createError(ApiStatusCodes.STATUS_ERROR_GENERIC, 'TEMPLATE NAME NOT FOUND: ' + templateName); + throw ApiStatusCodes.createError(ApiStatusCodes.STATUS_ERROR_GENERIC, "TEMPLATE NAME NOT FOUND: " + templateName); } getDockerfileContentFromTemplateTag(templateAndVersion) { const self = this; - let templateName = templateAndVersion.split('/')[0]; - let templateVersion = templateAndVersion.split('/')[1]; + const templateName = templateAndVersion.split("/")[0]; + const templateVersion = templateAndVersion.split("/")[1]; if (!templateVersion) { - throw ApiStatusCodes.createError(ApiStatusCodes.STATUS_ERROR_GENERIC, 'Template version field is empty!'); + throw ApiStatusCodes.createError(ApiStatusCodes.STATUS_ERROR_GENERIC, "Template version field is empty!"); } - let templateObj = self.getTemplateFromTemplateName(templateName); - const fromLine = templateObj.dockerHubImageName + ':' + templateVersion + templateObj.tagSuffix; - return 'FROM ' + fromLine + '\n' + templateObj.postFromLines; + const templateObj = self.getTemplateFromTemplateName(templateName); + const fromLine = templateObj.dockerHubImageName + ":" + templateVersion + templateObj.tagSuffix; + return "FROM " + fromLine + "\n" + templateObj.postFromLines; } } const templateHelperInstance = new TemplateHelper(); diff --git a/app-backend/built/user/TemplateHelper.js.map b/app-backend/built/user/TemplateHelper.js.map index 61e714f..c6c28a1 100644 --- a/app-backend/built/user/TemplateHelper.js.map +++ b/app-backend/built/user/TemplateHelper.js.map @@ -1 +1 @@ -{"version":3,"file":"TemplateHelper.js","sourceRoot":"","sources":["../../src/user/TemplateHelper.js"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"TemplateHelper.js","sourceRoot":"","sources":["../../src/user/TemplateHelper.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/app-backend/src/user/TemplateHelper.js b/app-backend/src/user/TemplateHelper.ts similarity index 53% rename from app-backend/src/user/TemplateHelper.js rename to app-backend/src/user/TemplateHelper.ts index 1c75e78..c6c5e0d 100644 --- a/app-backend/src/user/TemplateHelper.js +++ b/app-backend/src/user/TemplateHelper.ts @@ -1,18 +1,18 @@ -const request = require('request'); -const fs = require('fs-extra'); -const ApiStatusCodes = require('../api/ApiStatusCodes'); -const Logger = require('../utils/Logger'); -const CaptainConstants = require('../utils/CaptainConstants'); +import request = require("request"); +import fs = require("fs-extra"); +import ApiStatusCodes = require("../api/ApiStatusCodes"); +import Logger = require("../utils/Logger"); +import CaptainConstants = require("../utils/CaptainConstants"); -function getTagsForImage(imageBaseName, url, allTags) { +function getTagsForImage(imageBaseName: string, url: string|undefined, allTags: string[]|undefined): Promise { if (!url) { - url = 'https://hub.docker.com/v2/repositories/' + imageBaseName + '/tags'; + url = "https://hub.docker.com/v2/repositories/" + imageBaseName + "/tags"; } return new Promise(function (resolve, reject) { - request(url, + request(url!, function (error, response, body) { @@ -29,15 +29,15 @@ function getTagsForImage(imageBaseName, url, allTags) { Logger.e(e); } - let results = null; + let results: any; if (body) { results = body.results; } if (!results) { - Logger.e('NO RESULT'); - reject(new Error('NO RESULT')); + Logger.e("NO RESULT"); + reject(new Error("NO RESULT")); return; } @@ -59,16 +59,16 @@ function getTagsForImage(imageBaseName, url, allTags) { }); } -function firstEndsWithSecond(str1, str2) { +function firstEndsWithSecond(str1: string, str2: string) { if (!str1 || !str2) { - throw new Error('Str1 or Str2 are null ' + !str1 + ' ' + !str2) + throw new Error("Str1 or Str2 are null " + !str1 + " " + !str2); } - let idx = str1.indexOf(str2); + const idx = str1.indexOf(str2); return idx >= 0 && (idx + str2.length) === str1.length; } -function isEmpty(obj) { - for (let key in obj) { +function isEmpty(obj: any) { + for (const key in obj) { if (obj.hasOwnProperty(key)) { return false; } @@ -76,44 +76,60 @@ function isEmpty(obj) { return true; } +interface ITemplate { + templateName: string; + dockerHubImageName: string; + dockerFileFromName: string; + displayName: string; + tagSuffix: string; + postFromLines?: string; +} + + +interface ICache { + [id: string]: any[]; +} + class TemplateHelper { + private templates: ITemplate[]; + private cachedImageTags: ICache; constructor() { - const templates = [{ - templateName: 'node', - dockerHubImageName: 'library/node', - dockerFileFromName: 'node', - displayName: 'NodeJS', - tagSuffix: '-alpine' + const templates: ITemplate[] = [{ + templateName: "node", + dockerHubImageName: "library/node", + dockerFileFromName: "node", + displayName: "NodeJS", + tagSuffix: "-alpine" }, { - templateName: 'php', - dockerHubImageName: 'library/php', - dockerFileFromName: 'php', - displayName: 'PHP', - tagSuffix: '-apache' + templateName: "php", + dockerHubImageName: "library/php", + dockerFileFromName: "php", + displayName: "PHP", + tagSuffix: "-apache" }, { - templateName: 'python-django', - dockerHubImageName: 'library/python', - dockerFileFromName: 'python-django', - displayName: 'Python Django', - tagSuffix: '-alpine3.6' + templateName: "python-django", + dockerHubImageName: "library/python", + dockerFileFromName: "python-django", + displayName: "Python Django", + tagSuffix: "-alpine3.6" }, { - templateName: 'ruby-rack', - dockerHubImageName: 'library/ruby', - dockerFileFromName: 'ruby-rack', - displayName: 'Ruby Rack', - tagSuffix: '-alpine3.7' + templateName: "ruby-rack", + dockerHubImageName: "library/ruby", + dockerFileFromName: "ruby-rack", + displayName: "Ruby Rack", + tagSuffix: "-alpine3.7" } ]; - const dockerfilesRoot = __dirname + '/../../dockerfiles/'; + const dockerfilesRoot = __dirname + "/../../dockerfiles/"; for (let i = 0; i < templates.length; i++) { - templates[i].postFromLines = fs.readFileSync(dockerfilesRoot + templates[i].templateName, 'utf8'); + templates[i].postFromLines = fs.readFileSync(dockerfilesRoot + templates[i].templateName, "utf8"); } this.templates = templates; @@ -124,21 +140,21 @@ class TemplateHelper { } } - getDockerVersionsForTemplateName(templateName) { + getDockerVersionsForTemplateName(templateName: string) { const self = this; - let templateObj = self.getTemplateFromTemplateName(templateName); + const templateObj = self.getTemplateFromTemplateName(templateName); if (isEmpty(this.cachedImageTags)) { - throw ApiStatusCodes.createError(ApiStatusCodes.STATUS_ERROR_GENERIC, 'Please wait about 30 seconds, then try again.'); + throw ApiStatusCodes.createError(ApiStatusCodes.STATUS_ERROR_GENERIC, "Please wait about 30 seconds, then try again."); } - let tags = self.cachedImageTags[templateObj.dockerHubImageName]; + const tags = self.cachedImageTags[templateObj.dockerHubImageName]; - let dockerVersions = []; + const dockerVersions = []; for (let i = 0; i < tags.length; i++) { - let t = tags[i]; + const t = tags[i]; if (firstEndsWithSecond(t, templateObj.tagSuffix)) { dockerVersions.push(t.substring(0, t.length - templateObj.tagSuffix.length)); } @@ -152,12 +168,12 @@ class TemplateHelper { const self = this; self.cachedImageTags = {}; - let tempCache = {}; + const tempCache: ICache = {}; for (let i = 0; i < self.templates.length; i++) { const currentImageName = self.templates[i].dockerHubImageName; - getTagsForImage(currentImageName) + getTagsForImage(currentImageName, undefined, undefined) .then(function (tags) { tempCache[currentImageName] = tags; @@ -165,7 +181,7 @@ class TemplateHelper { let isAllDone = true; for (let j = 0; j < self.templates.length; j++) { - let imageName = self.templates[j].dockerHubImageName; + const imageName = self.templates[j].dockerHubImageName; if (!tempCache[imageName]) { isAllDone = false; } @@ -173,16 +189,16 @@ class TemplateHelper { if (isAllDone) { - Logger.d('Template Cache Updated!'); + Logger.d("Template Cache Updated!"); self.cachedImageTags = tempCache; // Used for README for (let tempIdx = 0; tempIdx < self.templates.length; tempIdx++) { - Logger.d(' '); - Logger.d(self.templates[tempIdx].templateName + '/'); - Logger.d(self.getDockerVersionsForTemplateName(self.templates[tempIdx].templateName).join(', ')); - Logger.d(' '); + Logger.d(" "); + Logger.d(self.templates[tempIdx].templateName + "/"); + Logger.d(self.getDockerVersionsForTemplateName(self.templates[tempIdx].templateName).join(", ")); + Logger.d(" "); } } @@ -195,35 +211,35 @@ class TemplateHelper { } } - getTemplateFromTemplateName(templateName) { + getTemplateFromTemplateName(templateName: string) { for (let i = 0; i < this.templates.length; i++) { if (this.templates[i].templateName === templateName) { return this.templates[i]; } } - throw ApiStatusCodes.createError(ApiStatusCodes.STATUS_ERROR_GENERIC, 'TEMPLATE NAME NOT FOUND: ' + templateName); + throw ApiStatusCodes.createError(ApiStatusCodes.STATUS_ERROR_GENERIC, "TEMPLATE NAME NOT FOUND: " + templateName); } - getDockerfileContentFromTemplateTag(templateAndVersion) { + getDockerfileContentFromTemplateTag(templateAndVersion: string) { const self = this; - let templateName = templateAndVersion.split('/')[0]; - let templateVersion = templateAndVersion.split('/')[1]; + const templateName = templateAndVersion.split("/")[0]; + const templateVersion = templateAndVersion.split("/")[1]; if (!templateVersion) { throw ApiStatusCodes.createError(ApiStatusCodes.STATUS_ERROR_GENERIC, - 'Template version field is empty!'); + "Template version field is empty!"); } - let templateObj = self.getTemplateFromTemplateName(templateName); + const templateObj = self.getTemplateFromTemplateName(templateName); - const fromLine = templateObj.dockerHubImageName + ':' + templateVersion + templateObj.tagSuffix; + const fromLine = templateObj.dockerHubImageName + ":" + templateVersion + templateObj.tagSuffix; - return 'FROM ' + fromLine + '\n' + templateObj.postFromLines; + return "FROM " + fromLine + "\n" + templateObj.postFromLines; } } const templateHelperInstance = new TemplateHelper(); -module.exports = { +export = { get: function () { return templateHelperInstance; }