minecraft-utils-shared
Version:
Shared utils for Minecraft Bedrock / Forge development related utilities.
191 lines (177 loc) • 5.45 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _fs = _interopRequireDefault(require("fs"));
var _glob = _interopRequireDefault(require("glob"));
var _path = _interopRequireDefault(require("path"));
var _java_file = _interopRequireDefault(require("../formats/java_file.cjs"));
var _json_file = _interopRequireDefault(require("../formats/json_file.cjs"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* @file Minecraft Utils Shared - File Finder
* @license Apache-2.0
* @author Markus@Bordihn.de (Markus Bordihn)
*/
const workingPath = process.cwd();
const javaSrcPath = _path.default.join(workingPath, 'src', 'main', 'java');
/**
* @param {string} search_path
* @returns {Array<string>}
*/
const getManifestsInSearchPath = (search_path = process.cwd()) => {
const searchPath = _path.default.resolve(search_path);
const result = [];
if (!_fs.default.existsSync(searchPath)) {
console.error('Unable to find search path:', searchPath);
return result;
}
// If we found a manifest.json in root we will use this.
if (_fs.default.existsSync(_path.default.join(searchPath, 'manifest.json'))) {
return [_path.default.join(searchPath, 'manifest.json')];
}
// Search for alternative manifest files.
_glob.default.sync('**/manifest.json', {
cwd: searchPath,
nodir: true
}).map(file => {
result.push(_path.default.resolve(search_path, file));
});
if (result.length > 0) {
return result;
}
};
/**
* @returns {string}
*/
const getManifestsInWorkingPath = () => {
return getManifestsInSearchPath(workingPath);
};
/**
* @param {string} search_path
* @param {Array<string>} manifests
* @returns {string}
*/
const getBehaviorPackInSearchPath = (search_path, manifests) => {
const relevantManifests = manifests || getManifestsInSearchPath(search_path);
for (const file of relevantManifests || []) {
const manifest = _json_file.default.read(file);
if (manifest && manifest.header && manifest.modules) {
for (const module of manifest.modules) {
if (module.type == 'data' || module.type == 'client_data') {
return _path.default.resolve(_path.default.dirname(file));
}
}
}
}
return '';
};
/**
* @param {Array<string>} manifests
* @returns {string}
*/
const getBehaviorPackInWorkingPath = manifests => {
return getBehaviorPackInSearchPath(workingPath, manifests);
};
/**
* @param {string} search_path
* @param {Array<string>} manifests
* @returns {string}
*/
const getResourcePackInSearchPath = (search_path, manifests) => {
const relevantManifests = manifests || getManifestsInSearchPath(search_path);
for (const file of relevantManifests || []) {
const manifest = _json_file.default.read(file);
if (manifest && manifest.header && manifest.modules) {
for (const module of manifest.modules) {
if (module.type == 'resources') {
return _path.default.resolve(_path.default.dirname(file));
}
}
}
}
};
/**
* @param {Array<string>} manifests
* @returns {string}
*/
const getResourcePackInWorkingPath = manifests => {
return getResourcePackInSearchPath(workingPath, manifests);
};
/**
* @param {string} search_path
* @returns {Array<string>}
*/
const getJavaFilesInSearchPath = (search_path = process.cwd()) => {
const searchPath = _path.default.resolve(search_path);
const result = [];
// Search for java files.
_glob.default.sync('**/*.java', {
cwd: searchPath,
nodir: true
}).map(file => {
result.push(_path.default.resolve(search_path, file));
});
if (result.length > 0) {
return result;
}
};
/**
* @returns {string}
*/
const getJavaFilesInWorkingPath = () => {
return getJavaFilesInSearchPath(javaSrcPath);
};
/**
* @param {string} search_path
* @param {Array<string>} java_files
* @returns {string}
*/
const getModInSearchPath = (search_path, java_files) => {
const modMainClass = getModMainClassInSearchPath(search_path, java_files);
return modMainClass ? _path.default.resolve(_path.default.dirname(modMainClass)) : null;
};
/**
* @param {Array<string>} java_files
* @returns {string}
*/
const getModInWorkingPath = java_files => {
return getModInSearchPath(workingPath, java_files);
};
/**
* @param {string} search_path
* @param {Array<string>} java_files
* @returns {string}
*/
const getModMainClassInSearchPath = (search_path, java_files) => {
const relevantJavaFiles = java_files || getJavaFilesInSearchPath(search_path);
for (const file of relevantJavaFiles || []) {
const javaFileContent = _java_file.default.read(file);
if (javaFileContent && javaFileContent.includes('@Mod(Constants.MOD_ID)')) {
return _path.default.resolve(file);
}
}
};
/**
* @param {Array<string>} java_files
* @returns {string}
*/
const getModMainClassInWorkingPath = java_files => {
return getModMainClassInSearchPath(workingPath, java_files);
};
var _default = {
getBehaviorPackInSearchPath,
getBehaviorPackInWorkingPath,
getJavaFilesInSearchPath,
getJavaFilesInWorkingPath,
getManifestsInSearchPath,
getManifestsInWorkingPath,
getModInSearchPath,
getModInWorkingPath,
getModMainClassInSearchPath,
getModMainClassInWorkingPath,
getResourcePackInSearchPath,
getResourcePackInWorkingPath
};
exports.default = _default;