max-api-or-nah
Version:
Taking an extremely overengineered approach to wrapping the max-api object
82 lines (72 loc) • 2.87 kB
TypeScript
/*
* JSON Helper Types - Not exported
*/
type JSONPrimitive = string | number | boolean | null;
interface JSONArray extends Array<JSONValue> {}
interface JSONObject {
[key: string]: JSONValue | undefined;
}
type JSONValue = JSONPrimitive | JSONArray | JSONObject;
declare namespace MaxAPIStatic {
/** Enum options for the value Node For Max will set on process.env.MAX_ENV */
enum MAX_ENV {
/** node.script running from within Max */
MAX = "max",
/** node.script running from within Max For Live */
MAX_FOR_LIVE = "maxforlive",
/** node.script running from within a standalone application */
STANDALONE = "max:standalone",
}
/** Predefined generic MaxFunctionSelector types */
enum MESSAGE_TYPES {
/** Generic Type for *all* kinds of messages */
ALL = "all",
/** Bang message type */
BANG = "bang",
/** Dictionary message type */
DICT = "dict",
/** Number message type */
NUMBER = "number",
/** List message type */
LIST = "list",
}
/** Log Levels used in maxAPI.post */
enum POST_LEVELS {
/** error level messages */
ERROR = "error",
/** info level messages */
INFO = "info",
/** warn level messages */
WARN = "warn",
}
type MaxFunctionSelector = MESSAGE_TYPES | string;
type MaxFunctionHandler = (...args: any[]) => any;
type Anything = string | number | Array<string | number> | JSONObject | JSONArray;
// Handlers
/** Register a single handler */
function addHandler(selector: MaxFunctionSelector, handler: MaxFunctionHandler): void;
/** Register handlers */
function addHandlers(handlers: Record<MaxFunctionSelector, MaxFunctionHandler>): void;
/** Remove a single handler */
function removeHandler(selector: MaxFunctionSelector, handler: MaxFunctionHandler): void;
/** Remove handlers */
function removeHandlers(selector: MaxFunctionSelector): void;
// Outlet
/** Outlet any values */
function outlet(...args: JSONValue[]): Promise<void>;
/** Outlet a Bang */
function outletBang(): Promise<void>;
/**
* Post to the Max console. Setting the last argument to a value of maxAPI.POST_LEVELS allows control of the log level
*/
function post(...args: Array<Anything | POST_LEVELS>): Promise<void>;
// Dictionaries
/** Get the value of a dict object */
function getDict(id: string): Promise<JSONObject>;
/** Set the value of a dict object */
function setDict(id: string, dict: JSONObject): Promise<JSONObject>;
/** Partially update the value of a dict object at a given path */
function updateDict(id: string, updatePath: string, updateValue: JSONValue): Promise<JSONObject>;
}
export default MaxAPIStatic;
export = MaxAPIStatic