{"version":3,"sources":["jsdelivr-header.js","/npm/@tonaljs/time-signature@4.9.0/index.ts"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,8iBCNA,uBAAA,GAAA,SAAA,uBAAA,CAAA,QAAA,IAAA,uBAAA,IAAA,IAAA,IAAA,MAAA,IAAA,MAAA,MAAA,IAAA,QAAA,OAAA,QAAA,aAAA,wBA0BA,IAAM,KAA6B,CACjC,OAAO,EACP,KAAM,GACN,WAAO,EACP,WAAO,EACP,UAAM,EACN,SAAU,IAGN,MAAQ,CAAC,MAAO,MAAO,MAAO,MAAO,OAAQ,MAAO,MAAO,OAI1D,SAAS,QACd,OAAO,MAAM,OACf,CAEA,IAAM,MAAQ,4BACR,MAAQ,IAAI,IAEX,SAAS,IAAI,GAClB,MAAM,EAAqB,KAAK,UAAU,GACpC,EAAS,MAAM,IAAI,GACzB,GAAI,EACF,OAAO,EAGT,MAAM,EAAK,MAAM,MAAM,IAEvB,OADA,MAAM,IAAI,EAAoB,GACvB,CACT,CAEO,SAAS,MAAM,GACpB,GAAuB,iBAAZ,EAAsB,CAE/B,MAAO,EAAG,EAAI,GAAO,MAAM,KAAK,IAAY,GAC5C,OAAO,MAAM,CAAC,EAAI,GACpB,CAEA,MAAO,EAAI,GAAQ,EACb,GAAe,EACrB,GAAkB,iBAAP,EACT,MAAO,CAAC,EAAI,GAGd,MAAM,EAAO,EAAG,MAAM,KAAK,KAAK,IAAO,IACvC,OAAuB,IAAhB,EAAK,OAAe,CAAC,EAAK,GAAI,GAAe,CAAC,EAAM,EAC7D,CAGA,IAAO,uBAAQ,CAAE,YAAO,YAAO,SAIzB,aAAgB,GAAe,KAAK,IAAI,GAAK,KAAK,IAAI,GAAM,GAAM,EAExE,SAAS,OAAO,EAAI,IAClB,MAAM,EAAQ,MAAM,QAAQ,GAAM,EAAG,QAAO,CAAC,EAAG,IAAM,EAAI,GAAG,GAAK,EAC5D,EAAQ,EACd,GAAc,IAAV,GAAyB,IAAV,EACjB,OAAO,KAGT,MAAM,EAAO,MAAM,QAAQ,GAAM,GAAG,EAAG,KAAK,QAAQ,IAAS,GAAG,KAAM,IAChE,EAAW,MAAM,QAAQ,GAAM,EAAK,GAU1C,MAAO,CACL,OAAO,EACP,OACA,KAXU,IAAV,GAAyB,IAAV,EACX,SACU,IAAV,GAAe,EAAQ,GAAM,EAC3B,WACA,aAAa,GACX,YACA,aAMR,QACA,QACA,WAEJ","file":"/npm/@tonaljs/time-signature@4.9.0/dist/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/@tonaljs/time-signature@4.9.0/dist/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","// TYPES: PARSING\nexport type TimeSignatureLiteral = string | [number, number] | [string, string];\ntype ParsedTimeSignature = [number | number[], number];\n\n// TYPES: PROPERTIES\nexport type ValidTimeSignature = {\n  readonly empty: false;\n  readonly name: string;\n  readonly upper: number | number[];\n  readonly lower: number;\n  readonly type: \"simple\" | \"compound\" | \"irregular\" | \"irrational\";\n  readonly additive: number[];\n};\n\nexport type InvalidTimeSignature = {\n  readonly empty: true;\n  readonly name: \"\";\n  readonly upper: undefined;\n  readonly lower: undefined;\n  readonly type: undefined;\n  readonly additive: [];\n};\n\nexport type TimeSignature = ValidTimeSignature | InvalidTimeSignature;\n\n// CONSTANTS\nconst NONE: InvalidTimeSignature = {\n  empty: true,\n  name: \"\",\n  upper: undefined,\n  lower: undefined,\n  type: undefined,\n  additive: [],\n};\n\nconst NAMES = [\"4/4\", \"3/4\", \"2/4\", \"2/2\", \"12/8\", \"9/8\", \"6/8\", \"3/8\"];\n\n// PUBLIC API\n\nexport function names() {\n  return NAMES.slice();\n}\n\nconst REGEX = /^(\\d*\\d(?:\\+\\d)*)\\/(\\d+)$/;\nconst CACHE = new Map<TimeSignatureLiteral, TimeSignature>();\n\nexport function get(literal: TimeSignatureLiteral): TimeSignature {\n  const stringifiedLiteral = JSON.stringify(literal);\n  const cached = CACHE.get(stringifiedLiteral);\n  if (cached) {\n    return cached;\n  }\n\n  const ts = build(parse(literal));\n  CACHE.set(stringifiedLiteral, ts);\n  return ts;\n}\n\nexport function parse(literal: TimeSignatureLiteral): ParsedTimeSignature {\n  if (typeof literal === \"string\") {\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    const [_, up, low] = REGEX.exec(literal) || [];\n    return parse([up, low]);\n  }\n\n  const [up, down] = literal;\n  const denominator = +down;\n  if (typeof up === \"number\") {\n    return [up, denominator];\n  }\n\n  const list = up.split(\"+\").map((n) => +n);\n  return list.length === 1 ? [list[0], denominator] : [list, denominator];\n}\n\n/** @deprecated */\nexport default { names, parse, get };\n\n// PRIVATE\n\nconst isPowerOfTwo = (x: number) => (Math.log(x) / Math.log(2)) % 1 === 0;\n\nfunction build([up, down]: ParsedTimeSignature): TimeSignature {\n  const upper = Array.isArray(up) ? up.reduce((a, b) => a + b, 0) : up;\n  const lower = down;\n  if (upper === 0 || lower === 0) {\n    return NONE;\n  }\n\n  const name = Array.isArray(up) ? `${up.join(\"+\")}/${down}` : `${up}/${down}`;\n  const additive = Array.isArray(up) ? up : [];\n  const type =\n    lower === 4 || lower === 2\n      ? \"simple\"\n      : lower === 8 && upper % 3 === 0\n        ? \"compound\"\n        : isPowerOfTwo(lower)\n          ? \"irregular\"\n          : \"irrational\";\n\n  return {\n    empty: false,\n    name,\n    type,\n    upper,\n    lower,\n    additive,\n  };\n}\n"]}