-
Notifications
You must be signed in to change notification settings - Fork 14
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
251 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,251 @@ | ||
import path from "node:path"; | ||
import os from "node:os"; | ||
|
||
/** | ||
* | ||
* | ||
* @public | ||
* @class | ||
* @alias @ui5/project/config/Configuration | ||
*/ | ||
class Configuration { | ||
#cwd; | ||
#source; | ||
#version; | ||
#cacheMode; | ||
#ui5HomeDir; | ||
#snapshotEndpointUrl; | ||
#frameworkDir; | ||
#buildCacheDir; | ||
#artifactsDir; | ||
#packagesDir; | ||
#metadataDir; | ||
#stagingDir; | ||
#lockDir; | ||
#cacheDir; | ||
|
||
/** | ||
* @param {object} configuration | ||
* @param {string} [configuration.cwd=""] | ||
* @param {string} [configuration.version=""] | ||
* @param {string} [configuration.sources=""] | ||
* @param {string} [configuration.ui5HomeDir="~/.ui5/"] | ||
* @param {string} [configuration.snapshotEndpointUrl=""] | ||
* @param {string} [configuration.cacheMode="default"] | ||
* @param {string} [configuration.frameworkDir="~/${ui5HomeDir}/framework"] | ||
* Directory to store framework artifacts and metadata in. | ||
* @param {string} [configuration.cacheDir="~/${ui5HomeDir}/cacache"] | ||
* @param {string} [configuration.buildCacheDir="~/${ui5HomeDir}/build-cache"] | ||
* Directory to store build-cache in. | ||
* @param {string} [configuration.artifactsDir="~/${ui5HomeDir}/artifacts"] | ||
* @param {string} [configuration.packagesDir="~/${ui5HomeDir}/packages"] | ||
* @param {string} [configuration.metadataDir="~/${ui5HomeDir}/metadata"] | ||
* @param {string} [configuration.stagingDir="~/${ui5HomeDir}/staging"] | ||
* @param {string} [configuration.lockDir="~/${ui5HomeDir}/locks"] | ||
*/ | ||
constructor({ | ||
cwd, | ||
version, | ||
sources, | ||
ui5HomeDir, | ||
snapshotEndpointUrl, | ||
cacheMode = "default", | ||
frameworkDir, | ||
cacheDir, | ||
buildCacheDir, | ||
artifactsDir, | ||
packagesDir, | ||
metadataDir, | ||
stagingDir, | ||
lockDir | ||
}) { | ||
this.cwd = cwd; | ||
this.sources = sources; | ||
this.version = version; | ||
this.cacheMode = cacheMode; | ||
this.ui5HomeDir = ui5HomeDir ? path.resolve(ui5HomeDir) : path.join(os.homedir(), ".ui5"); | ||
|
||
this.snapshotEndpointUrl = process.env.UI5_MAVEN_SNAPSHOT_ENDPOINT || snapshotEndpointUrl; | ||
this.frameworkDir = frameworkDir ? path.resolve(frameworkDir) : path.join(this.ui5HomeDir, "framework"); | ||
this.buildCacheDir = buildCacheDir ? path.resolve(buildCacheDir) : path.join(this.ui5HomeDir, "build-cache"); | ||
this.artifactsDir = artifactsDir ? | ||
path.resolve(artifactsDir) : path.join(this.ui5HomeDir, "framework", "artifacts"); | ||
this.packagesDir = packagesDir ? | ||
path.resolve(packagesDir) : path.join(this.ui5HomeDir, "framework", "packages"); | ||
this.metadataDir = metadataDir ? | ||
path.resolve(metadataDir) : path.join(this.ui5HomeDir, "framework", "metadata"); | ||
this.stagingDir = stagingDir ? path.resolve(stagingDir) : path.join(this.ui5HomeDir, "framework", "staging"); | ||
this.lockDir = lockDir ? path.resolve(lockDir) : path.join(this.ui5HomeDir, "framework", "locks"); | ||
this.cacheDir = cacheDir ? path.resolve(cacheDir) : path.join(this.ui5HomeDir, "framework", "cacache"); | ||
} | ||
|
||
/** | ||
* CWD path | ||
* | ||
* @public | ||
* @returns {string} | ||
*/ | ||
getCwd() { | ||
return this.cwd; | ||
} | ||
|
||
/** | ||
* CWD path | ||
* | ||
* @public | ||
* @returns {string} | ||
*/ | ||
getSources() { | ||
return this.sources; | ||
} | ||
|
||
/** | ||
* UI5 Version | ||
* | ||
* @public | ||
* @returns {string} | ||
*/ | ||
getVersion() { | ||
return this.version; | ||
} | ||
|
||
/** | ||
* Cache mode | ||
* | ||
* @public | ||
* @returns {string} | ||
*/ | ||
getCacheMode() { | ||
return this.cacheMode; | ||
} | ||
|
||
/** | ||
* .ui5 home direcotry | ||
* | ||
* @public | ||
* @returns {string} | ||
*/ | ||
getUi5HomeDir() { | ||
return this.ui5HomeDir; | ||
} | ||
|
||
/** | ||
* SNAPSHOTs URL | ||
* | ||
* @public | ||
* @returns {string} | ||
*/ | ||
getSnapshotEndpointUrl() { | ||
return this.snapshotEndpointUrl; | ||
} | ||
|
||
/** | ||
* Directory to store framework artifacts and metadata in. | ||
* | ||
* @public | ||
* @returns {string} | ||
*/ | ||
getFrameworkDir() { | ||
return this.frameworkDir; | ||
} | ||
|
||
/** | ||
* Directory to store build-cache in. | ||
* | ||
* @public | ||
* @returns {string} | ||
*/ | ||
getBuildCacheDir() { | ||
return this.buildCacheDir; | ||
} | ||
|
||
/** | ||
* Directory to store artifacts in. | ||
* | ||
* @public | ||
* @returns {string} | ||
*/ | ||
getArtifactsDir() { | ||
return this.artifactsDir; | ||
} | ||
|
||
/** | ||
* Directory to packages in | ||
* | ||
* @public | ||
* @returns {string} | ||
*/ | ||
getPackagesDir() { | ||
return this.packagesDir; | ||
} | ||
|
||
/** | ||
* Directory to store metadata in | ||
* | ||
* @public | ||
* @returns {string} | ||
*/ | ||
getMetadataDir() { | ||
return this.metadataDir; | ||
} | ||
|
||
/** | ||
* Directory to store staging artifacts in | ||
* | ||
* @public | ||
* @returns {string} | ||
*/ | ||
getStagingDir() { | ||
return this.stagingDir; | ||
} | ||
|
||
/** | ||
* Lockfiles directory | ||
* | ||
* @public | ||
* @returns {string} | ||
*/ | ||
getLockDir() { | ||
return this.lockDir; | ||
} | ||
|
||
/** | ||
* Cache directory | ||
* | ||
* @public | ||
* @returns {string} | ||
*/ | ||
getCacheDir() { | ||
return this.cacheDir; | ||
} | ||
} | ||
|
||
export default Configuration; | ||
|
||
/** | ||
* Create Configuration from JSON file | ||
* | ||
* @public | ||
* @static | ||
* @param {string} [filePath="~/.ui5rc"] Path to configuration JSON file | ||
* @returns {@ui5/project/config/Configuration} Configuration instance | ||
*/ | ||
export async function fromFile(filePath) { | ||
filePath = filePath || path.join(os.homedir(), ".ui5rc"); | ||
|
||
const {default: fs} = await import("graceful-fs"); | ||
const {promisify} = await import("node:util"); | ||
const readFile = promisify(fs.readFile); | ||
let config; | ||
try { | ||
const fileContent = await readFile(filePath); | ||
config = JSON.parse(fileContent); | ||
} catch (err) { | ||
if (err.code === "ENOENT") { // "File or directory does not exist" | ||
config = {}; | ||
} else { | ||
throw err; | ||
} | ||
} | ||
return new Configuration(config); | ||
} |