tstosc
Version:
A transpiler that convert TypeScript to SuperCollider's SCLang.
137 lines (131 loc) • 4.67 kB
JavaScript
;
var path_cjs = require('../util/path.cjs');
var console_cjs = require('./console.cjs');
var sc_cjs = require('../util/sc.cjs');
var path = require('path');
var fs = require('fs');
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
var path__default = /*#__PURE__*/_interopDefault(path);
var fs__default = /*#__PURE__*/_interopDefault(fs);
const priority_of_stop_early_global_option = [
"help",
"h",
"version",
"v"
];
const non_arg_accepting_global_option = [
...priority_of_stop_early_global_option,
"yes-to-all",
"y"
];
function seperateArgs(origin_arg) {
if (origin_arg.length == 0) {
return [[], []];
}
let result = [];
let group = [];
let should_detect_file_arg = false;
for (let current_index = 0; current_index < origin_arg.length; current_index++) {
const current_element = origin_arg[current_index];
const is_current_element_file_arg = !current_element.startsWith("-");
if (should_detect_file_arg && is_current_element_file_arg) {
result.push(group);
group = [];
}
group.push(current_element);
should_detect_file_arg = is_current_element_file_arg || non_arg_accepting_global_option.includes(
current_element.replace(/^--?/, "")
);
}
result.push(group);
if (!(result[0][0] ?? "").startsWith("-")) {
return [[], result];
} else {
return [result[0], result.slice(1)];
}
}
function parseArgs(global_arg, positional_args) {
const global_arg_key = Object.keys(global_arg);
{
const early_stop_index = priority_of_stop_early_global_option.findIndex((a) => global_arg_key.includes(a));
if (early_stop_index >= 0) {
const command = priority_of_stop_early_global_option[early_stop_index];
return {
type: "query_info",
command,
arg: global_arg[command]
};
}
}
if (global_arg_key.length <= 1 && positional_args.length == 0) {
return { type: "no_intention" };
}
{
for (const arg of ["out-dir", "user-extension-dir", "project-name"]) {
if (global_arg[arg] != void 0 && global_arg[arg].length == 0) {
return { type: "unknown_or_error", hint: console_cjs.error(`Error: Please specify a path for "${arg}".`) };
}
}
}
const global__output_dir = path__default.default.resolve(global_arg["out-dir"] ?? process.cwd());
if (!path_cjs.isValidPath(global__output_dir)) {
return {
type: "unknown_or_error",
hint: console_cjs.error(
`Error: Global option "--out-dir" ("-d") is not valid path: "${global__output_dir}".`
)
};
}
const global__user_extension_dir = path__default.default.resolve(global_arg["user-extension-dir"] ?? sc_cjs.getDefaultUserExtensionDir());
if (!path_cjs.isValidPath(global__user_extension_dir)) {
return {
type: "unknown_or_error",
hint: console_cjs.error(
`Error: Global option "--user-extension-dir" ("-u") is not valid path: "${global__user_extension_dir}".`
)
};
}
const global__project_name = global_arg["project-name"] ?? "user_project";
{
const non_exist_files = positional_args.filter((a) => !fs__default.default.existsSync(a["_"]));
if (non_exist_files.length > 0) {
return {
type: "unknown_or_error",
hint: console_cjs.error(`Error: Input file not exist: "${non_exist_files.map((f) => f["_"]).join(", ")}".`)
};
}
}
let result = {
type: "transpile",
global: {
output_dir: global__output_dir,
user_extension_dir: global__user_extension_dir,
project_name: global__project_name,
yes_to_all: global_arg["yes-to-all"] ?? false,
flatten: global_arg["flatten"] ?? false
},
files: positional_args.map(
(a) => {
const input_path = a["_"];
return {
input_path,
output_name: a["out"] ?? `${path__default.default.basename(a["_"], ".ts")}.scd`,
output_dir: global_arg["flatten"] ? path__default.default.resolve(a["out-dir"] ?? global__output_dir) : path__default.default.resolve(
a["out-dir"] ?? path__default.default.join(global__output_dir, path__default.default.relative(process.cwd(), path__default.default.dirname(input_path)))
)
};
}
)
};
if (result.files.length == 0) {
return {
type: "unknown_or_error",
hint: console_cjs.warn("Warn: No files are specified to be transpiled.")
};
}
return result;
}
exports.non_arg_accepting_global_option = non_arg_accepting_global_option;
exports.parseArgs = parseArgs;
exports.priority_of_stop_early_global_option = priority_of_stop_early_global_option;
exports.seperateArgs = seperateArgs;