UNPKG

@amplitude/ampli

Version:

Amplitude CLI

172 lines (171 loc) 8.33 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getPackageName = exports.ITLY_DIRS = void 0; const path = require("path"); const chalk_1 = require("chalk"); const fs = require("../util/fs"); const settings_1 = require("../settings"); const stdout_1 = require("../stdout"); const types_1 = require("../types"); const javaKotlin_1 = require("./javaKotlin"); const icons_1 = require("../ui/icons"); const { bold: b, } = chalk_1.default; const ITLY_JAVA_PACKAGE_PATH_V3 = 'ly/iterative/itly'; const ITLY_JAVA_PACKAGE_PATH_V1 = 'io/itly'; const AMPLI_JAVA_PACKAGE_PATH_V1 = 'com/amplitude/ampli'; const JVM_V3_RUNTIMES = [ types_1.RuntimeId.AndroidJavaV3, types_1.RuntimeId.AndroidKotlinV3, types_1.RuntimeId.JreJavaV3, types_1.RuntimeId.JreKotlinV3, ]; exports.ITLY_DIRS = { [types_1.RuntimeId.BrowserJavaScript]: './src/itly', [types_1.RuntimeId.BrowserJavaScriptV2]: './src/itly', [types_1.RuntimeId.BrowserJavaScriptV3]: './src/itly', [types_1.RuntimeId.BrowserJavaScriptAmpli]: './src/ampli', [types_1.RuntimeId.BrowserJavaScriptAmpliV2]: './src/ampli', [types_1.RuntimeId.BrowserTypeScript]: './src/itly', [types_1.RuntimeId.BrowserTypeScriptV2]: './src/itly', [types_1.RuntimeId.BrowserTypeScriptV3]: './src/itly', [types_1.RuntimeId.BrowserTypeScriptAmpli]: './src/ampli', [types_1.RuntimeId.BrowserTypeScriptAmpliV2]: './src/ampli', [types_1.RuntimeId.NodeJsJavaScript]: './src/itly', [types_1.RuntimeId.NodeJsJavaScriptV2]: './src/itly', [types_1.RuntimeId.NodeJsJavaScriptV3]: './src/itly', [types_1.RuntimeId.NodeJsJavaScriptAmpli]: './src/ampli', [types_1.RuntimeId.NodeJsJavaScriptAmpliV2]: './src/ampli', [types_1.RuntimeId.NodeJsTypeScript]: './src/itly', [types_1.RuntimeId.NodeJsTypeScriptV2]: './src/itly', [types_1.RuntimeId.NodeJsTypeScriptV3]: './src/itly', [types_1.RuntimeId.NodeJsTypeScriptAmpli]: './src/ampli', [types_1.RuntimeId.NodeJsTypeScriptAmpliV2]: './src/ampli', [types_1.RuntimeId.IOSObjC]: './Itly', [types_1.RuntimeId.IOSObjCV2]: './Itly', [types_1.RuntimeId.IOSObjCAmpli]: './Ampli', [types_1.RuntimeId.IOSObjCAmpliV2]: './Ampli', [types_1.RuntimeId.IOSSwift]: './Itly', [types_1.RuntimeId.IOSSwiftV2]: './Itly', [types_1.RuntimeId.IOSSwiftAmpli]: './Ampli', [types_1.RuntimeId.IOSSwiftAmpliV2]: './Ampli', [types_1.RuntimeId.AndroidJava]: './app/src/main/java/io/itly', [types_1.RuntimeId.AndroidJavaV3]: `./app/src/main/java/${ITLY_JAVA_PACKAGE_PATH_V3}`, [types_1.RuntimeId.AndroidJavaV4]: `./app/src/main/java/${ITLY_JAVA_PACKAGE_PATH_V3}`, [types_1.RuntimeId.AndroidJavaAmpli]: `./app/src/main/java/${AMPLI_JAVA_PACKAGE_PATH_V1}`, [types_1.RuntimeId.AndroidJavaAmpliV2]: `./app/src/main/java/${AMPLI_JAVA_PACKAGE_PATH_V1}`, [types_1.RuntimeId.AndroidKotlin]: './app/src/main/java/io/itly', [types_1.RuntimeId.AndroidKotlinV2]: './app/src/main/java/io/itly', [types_1.RuntimeId.AndroidKotlinV3]: `./app/src/main/java/${ITLY_JAVA_PACKAGE_PATH_V3}`, [types_1.RuntimeId.AndroidKotlinV4]: `./app/src/main/java/${ITLY_JAVA_PACKAGE_PATH_V3}`, [types_1.RuntimeId.AndroidKotlinAmpli]: `./app/src/main/java/${AMPLI_JAVA_PACKAGE_PATH_V1}`, [types_1.RuntimeId.AndroidKotlinAmpliV2]: `./app/src/main/java/${AMPLI_JAVA_PACKAGE_PATH_V1}`, [types_1.RuntimeId.JreJava]: './src/main/java/io/itly', [types_1.RuntimeId.JreJavaV3]: `./src/main/java/${ITLY_JAVA_PACKAGE_PATH_V3}`, [types_1.RuntimeId.JreJavaV4]: `./src/main/java/${ITLY_JAVA_PACKAGE_PATH_V3}`, [types_1.RuntimeId.JreJavaAmpli]: `./src/main/java/${AMPLI_JAVA_PACKAGE_PATH_V1}`, [types_1.RuntimeId.JreKotlinV3]: `./src/main/kotlin/${ITLY_JAVA_PACKAGE_PATH_V3}`, [types_1.RuntimeId.JreKotlinV4]: `./src/main/kotlin/${ITLY_JAVA_PACKAGE_PATH_V3}`, [types_1.RuntimeId.JreKotlinAmpli]: `./src/main/kotlin/${AMPLI_JAVA_PACKAGE_PATH_V1}`, [types_1.RuntimeId.StarPython]: './itly', [types_1.RuntimeId.StarPythonV2]: './itly', [types_1.RuntimeId.StarPythonAmpli]: './ampli', [types_1.RuntimeId.StarRuby]: './itly', [types_1.RuntimeId.StarRubyV2]: './itly', [types_1.RuntimeId.DotNetCSharp]: './Itly', [types_1.RuntimeId.ReactNativeJavaScriptV3]: './src/itly', [types_1.RuntimeId.ReactNativeTypeScriptV3]: './src/itly', [types_1.RuntimeId.ReactNativeJavaScriptAmpli]: './src/ampli', [types_1.RuntimeId.ReactNativeTypeScriptAmpli]: './src/ampli', [types_1.RuntimeId.ReactNativeJavaScriptAmpliV2]: './src/ampli', [types_1.RuntimeId.ReactNativeTypeScriptAmpliV2]: './src/ampli', [types_1.RuntimeId.StarGoAmpli]: './ampli', }; function getMandatoryPathPostfix(runtimeId) { switch (runtimeId) { case types_1.RuntimeId.AndroidJavaV3: case types_1.RuntimeId.AndroidKotlinV3: case types_1.RuntimeId.JreJavaV3: return ITLY_JAVA_PACKAGE_PATH_V3; case types_1.RuntimeId.AndroidJavaAmpli: case types_1.RuntimeId.AndroidJavaAmpliV2: case types_1.RuntimeId.AndroidKotlinAmpli: case types_1.RuntimeId.AndroidKotlinAmpliV2: case types_1.RuntimeId.JreJavaAmpli: case types_1.RuntimeId.JreKotlinAmpli: return 'ampli'; default: return undefined; } } class Generator { setPath(runtimeId, userPath, projectDir) { const warnings = []; const settings = settings_1.getSettings(); const cachedPath = settings.getPath(); let effectivePath = exports.ITLY_DIRS[runtimeId]; if (userPath) { effectivePath = userPath; } else if (cachedPath) { effectivePath = cachedPath; } const mandatoryPath = getMandatoryPathPostfix(runtimeId); if (mandatoryPath && !effectivePath.endsWith(mandatoryPath)) { warnings.push(`${icons_1.ICON_WARNING_W_TEXT} Path should end with '${mandatoryPath}'.`); if (JVM_V3_RUNTIMES.includes(runtimeId) && effectivePath.endsWith(ITLY_JAVA_PACKAGE_PATH_V1)) { effectivePath = effectivePath.replace(ITLY_JAVA_PACKAGE_PATH_V1, ITLY_JAVA_PACKAGE_PATH_V3); warnings.push(`${icons_1.ICON_WARNING_W_TEXT} Path updated automatically to '${effectivePath}'.`); } } if (!cachedPath || cachedPath !== effectivePath) { settings.setPath(effectivePath); if (cachedPath) { warnings.push(`${icons_1.ICON_WARNING_W_TEXT} Path has changed, please delete your old generated tracking library at ${b(cachedPath)}.`); } } if (warnings.length > 0) { stdout_1.default.writeLine(); warnings.forEach(message => stdout_1.default.writeLine(message)); } this.codegenDir = path.resolve(projectDir, effectivePath); return effectivePath; } async prepDir() { if (!(await fs.exists(this.codegenDir))) { await fs.mkdir(this.codegenDir, { recursive: true }); } } async saveCode(sdk) { await this.prepDir(); if (await fs.exists(this.codegenDir)) { await fs.rimraf(this.codegenDir); } if (sdk.code) { await Promise.all(sdk.code.map(async (file) => { if (file != null) { const dirPath = path.join(this.codegenDir, path.dirname(file.path)); if (!(await fs.exists(dirPath))) { await fs.mkdir(dirPath, { recursive: true }); } await fs.writeFile(path.join(this.codegenDir, file.path), file.content); } })); } } } function getPackageName(runtimeId, codegenDir) { switch (runtimeId) { case types_1.RuntimeId.AndroidJavaAmpli: case types_1.RuntimeId.AndroidJavaAmpliV2: case types_1.RuntimeId.JreJavaAmpli: return javaKotlin_1.default(codegenDir, 'java'); case types_1.RuntimeId.AndroidKotlinAmpli: case types_1.RuntimeId.AndroidKotlinAmpliV2: case types_1.RuntimeId.JreKotlinAmpli: return javaKotlin_1.default(codegenDir, 'kotlin'); default: } return undefined; } exports.getPackageName = getPackageName; exports.default = new Generator();