{"version":3,"file":"takeLastWhile.cjs","names":["purry"],"sources":["../src/takeLastWhile.ts"],"sourcesContent":["import type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport type { NarrowedArray } from \"./internal/types/NarrowedArray\";\nimport type { NonRefinedFilteredArray } from \"./internal/types/NonRefinedFilteredArray\";\nimport { purry } from \"./purry\";\n\n/**\n * Returns elements from the end of the array until the predicate returns false.\n * The returned elements will be in the same order as in the original array.\n *\n * @param data - The array.\n * @param predicate - A function to execute for each element in the array,\n * starting from the end. It should return `true` to keep taking elements, and\n * `false` to stop. A type-predicate can also be used to narrow the result.\n * @signature\n *    takeLastWhile(data, predicate)\n * @example\n *    takeLastWhile([1, 2, 10, 3, 4, 5], x => x < 10) // => [3, 4, 5]\n * @dataFirst\n * @category Array\n */\nexport function takeLastWhile<T extends IterableContainer, Condition>(\n  data: T,\n  predicate: (item: T[number], index: number, data: T) => item is Condition,\n): NarrowedArray<T, Condition>;\n\nexport function takeLastWhile<\n  T extends IterableContainer,\n  IsItemIncluded extends boolean,\n>(\n  data: T,\n  predicate: (item: T[number], index: number, data: T) => IsItemIncluded,\n): NonRefinedFilteredArray<T, IsItemIncluded>;\n\n/**\n * Returns elements from the end of the array until the predicate returns false.\n * The returned elements will be in the same order as in the original array.\n *\n * @param predicate - A function to execute for each element in the array,\n * starting from the end. It should return `true` to keep taking elements, and\n * `false` to stop. A type-predicate can also be used to narrow the result.\n * @signature\n *    takeLastWhile(predicate)(data)\n * @example\n *    pipe([1, 2, 10, 3, 4, 5], takeLastWhile(x => x < 10))  // => [3, 4, 5]\n * @dataLast\n * @category Array\n */\nexport function takeLastWhile<T extends IterableContainer, Condition>(\n  predicate: (item: T[number], index: number, data: T) => item is Condition,\n): (data: T) => NarrowedArray<T, Condition>;\n\nexport function takeLastWhile<\n  T extends IterableContainer,\n  IsItemIncluded extends boolean,\n>(\n  predicate: (item: T[number], index: number, data: T) => IsItemIncluded,\n): (data: T) => NonRefinedFilteredArray<T, IsItemIncluded>;\n\nexport function takeLastWhile(...args: readonly unknown[]): unknown {\n  return purry(takeLastWhileImplementation, args);\n}\n\nfunction takeLastWhileImplementation<T extends IterableContainer>(\n  data: T,\n  predicate: (item: T[number], index: number, data: T) => boolean,\n): T[number][] {\n  for (let i = data.length - 1; i >= 0; i--) {\n    if (!predicate(data[i], i, data)) {\n      return data.slice(i + 1);\n    }\n  }\n  return [...data];\n}\n"],"mappings":"kGA0DA,SAAgB,EAAc,GAAG,EAAmC,CAClE,OAAOA,EAAAA,MAAM,EAA6B,CAAI,CAChD,CAEA,SAAS,EACP,EACA,EACa,CACb,IAAK,IAAI,EAAI,EAAK,OAAS,EAAG,GAAK,EAAG,IACpC,GAAI,CAAC,EAAU,EAAK,GAAI,EAAG,CAAI,EAC7B,OAAO,EAAK,MAAM,EAAI,CAAC,EAG3B,MAAO,CAAC,GAAG,CAAI,CACjB"}