UNPKG

tstosc

Version:

A transpiler that convert TypeScript to SuperCollider's SCLang.

137 lines (131 loc) 4.67 kB
'use strict'; 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;