@player-ui/common-expressions-plugin 0.15.3-next.1 → 0.15.3-next.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/index.ts","../../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/expressions/index.ts","../../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/expressions/toNum.ts"],"sourcesContent":["import type { ExtendedPlayerPlugin, Player } from \"@player-ui/player\";\nimport { ExpressionPlugin } from \"@player-ui/expression-plugin\";\nimport * as Expressions from \"./expressions\";\nimport type {\n size,\n length,\n isEmpty,\n isNotEmpty,\n concat,\n trim,\n upperCase,\n lowerCase,\n replace,\n titleCase,\n sentenceCase,\n split,\n substr,\n number,\n round,\n floor,\n ceil,\n sum,\n findPropertyIndex,\n findProperty,\n containsAny,\n} from \"./expressions\";\n\nexport { Expressions };\n\n/**\n * Exposes a lot of expressions to Player.\n */\nexport class CommonExpressionsPlugin\n implements\n ExtendedPlayerPlugin<\n [],\n [],\n [\n typeof size,\n typeof length,\n typeof isEmpty,\n typeof isNotEmpty,\n typeof concat,\n typeof trim,\n typeof upperCase,\n typeof lowerCase,\n typeof replace,\n typeof titleCase,\n typeof sentenceCase,\n typeof split,\n typeof substr,\n typeof number,\n typeof round,\n typeof floor,\n typeof ceil,\n typeof sum,\n typeof findPropertyIndex,\n typeof findProperty,\n typeof containsAny,\n ]\n >\n{\n name = \"CommonExpressions\";\n\n apply(player: Player): void {\n player.registerPlugin(\n new ExpressionPlugin(new Map(Object.entries(Expressions))),\n );\n }\n}\n","import type {\n ExpressionHandler,\n ExpressionContext,\n Binding,\n} from \"@player-ui/player\";\nimport { withoutContext } from \"@player-ui/player\";\nimport { toNum } from \"./toNum\";\n\n/** Returns a function that executes the given function only if the first argument is a string */\nfunction ifString(fn: (arg: string) => unknown) {\n return (arg: unknown) => {\n if (typeof arg === \"string\") {\n return fn(arg);\n }\n\n return arg;\n };\n}\n\n/** Generic Types */\n\nexport const size = withoutContext((val: unknown): number => {\n if (typeof val === \"string\") {\n return val.length;\n }\n\n if (typeof val === \"object\" && val !== null) {\n return Object.keys(val).length;\n }\n\n return 0;\n});\n\nexport const length = size;\n\n/** Checks to see if the given value is empty */\nexport const isEmpty: ExpressionHandler<[unknown], boolean> = (ctx, val) => {\n if (val === undefined || val === null) {\n return true;\n }\n\n if (typeof val === \"object\" || typeof val === \"string\") {\n return size(ctx, val) === 0;\n }\n\n return false;\n};\n\n/** Checks to see if the given value is not empty */\nexport const isNotEmpty: ExpressionHandler<[unknown], boolean> = (ctx, val) => {\n return !isEmpty(ctx, val);\n};\n\nexport const concat = withoutContext((...args: Array<unknown>) => {\n if (args.every((v) => Array.isArray(v))) {\n const merged: Array<unknown> = [];\n\n args.forEach((next) => {\n merged.push(...next);\n });\n\n return merged;\n }\n\n return args.reduce((merged: any, next) => merged + (next ?? \"\"), \"\");\n});\n\n/** String Types */\n\nexport const trim = withoutContext(ifString((str) => str.trim()));\nexport const upperCase = withoutContext(ifString((str) => str.toUpperCase()));\nexport const lowerCase = withoutContext(ifString((str) => str.toLowerCase()));\nexport const replace = withoutContext(\n (str: unknown, pattern: unknown, replacement: unknown = \"\") => {\n if (\n typeof str === \"string\" &&\n typeof pattern === \"string\" &&\n typeof replacement === \"string\"\n ) {\n const replacementRegex = new RegExp(pattern, \"g\");\n\n return str.replace(replacementRegex, replacement);\n }\n\n return str;\n },\n);\nexport const titleCase = withoutContext(\n ifString((str) =>\n str\n .split(\" \")\n .map((word) => word[0].toUpperCase() + word.slice(1))\n .join(\" \"),\n ),\n);\n\nexport const sentenceCase = withoutContext(\n ifString((str) => str.replace(/\\b[a-zA-Z]/, (word) => word.toUpperCase())),\n);\n\n// split: Splits a string into an array of substrings based on a separator.\n// Deviations from JS:\n// - If separator is undefined or null, returns the original string (JS would throw TypeError)\n// - If separator is an empty string, splits at every character (matches JS)\nexport const split = withoutContext(\n (str: string, separator: string, limit?: number) => {\n // If separator is undefined or null, return the original string (custom: JS throws an error)\n if (separator === undefined || separator === null) {\n return str;\n }\n\n const separatorStr = String(separator);\n\n // JS behavior: empty string separator splits at every character\n if (separatorStr === \"\") {\n const result = str.split(\"\");\n if (limit !== undefined && limit !== null && limit > 0) {\n return result.slice(0, limit);\n }\n return result;\n }\n\n // Standard JS split behavior for non-empty separator\n const result = str.split(separatorStr);\n\n if (limit !== undefined && limit !== null && limit > 0) {\n return result.slice(0, limit);\n }\n\n return result;\n },\n);\n\n// substr: Extracts a substring from a string.\n// Deviations from JS:\n// - Negative start index counts from the end (JS substring does not support negative indices)\n// - Uses substring logic, not deprecated substr\nexport const substr = withoutContext(\n (str: string, start: number, length?: number) => {\n // Custom: Negative start index counts from the end (matches array behavior, not JS substring)\n const actualStartIndex = start < 0 ? str.length + start : start;\n\n if (length !== undefined) {\n return str.substring(actualStartIndex, actualStartIndex + length);\n }\n\n return str.substring(actualStartIndex);\n },\n);\n\n/** Math Types */\n\nexport const number = withoutContext(toNum);\n\nexport const round = withoutContext<[number | string], number>((num) =>\n Math.round(toNum(num, true) ?? 0),\n);\n\nexport const floor = withoutContext<[number | string], number>((num) =>\n Math.floor(toNum(num, true) ?? 0),\n);\n\nexport const ceil = withoutContext<[number | string], number>((num) =>\n Math.ceil(toNum(num, true) ?? 0),\n);\n\nexport const sum = withoutContext<Array<number | string>, number>((...args) => {\n return args.reduce<number>((s, next) => s + (toNum(next) ?? 0), 0);\n});\n\n/** Array Operations */\n\n/** Finds the property in an array of objects */\nexport const findPropertyIndex: ExpressionHandler<\n [Array<any> | Binding | undefined, string | undefined, any],\n number\n> = <T = unknown>(\n context: ExpressionContext,\n bindingOrModel: Binding | Array<Record<string, T>> | undefined,\n propToCheck: string | undefined,\n valueToCheck: T,\n) => {\n if (bindingOrModel === undefined) {\n return -1;\n }\n\n const searchArray: Array<Record<string, T>> = Array.isArray(bindingOrModel)\n ? bindingOrModel\n : context.model.get(bindingOrModel);\n\n if (!Array.isArray(searchArray)) {\n return -1;\n }\n\n return searchArray.findIndex((value) => {\n const propVal =\n typeof value === \"object\" && propToCheck !== undefined\n ? value[propToCheck]\n : value;\n\n return valueToCheck === propVal;\n });\n};\n\n/** Searches an array for an object matching the criteria. Returns the target prop from that object */\nexport const findProperty: ExpressionHandler<\n [Array<any> | Binding, string | undefined, any, string | undefined, any],\n any\n> = <T = unknown>(\n context: ExpressionContext,\n bindingOrModel: Binding | Array<Record<string, T>>,\n propToCheck: string | undefined,\n valueToCheck: T,\n propToReturn?: string,\n defaultValue?: T,\n) => {\n const searchArray: Array<Record<string, T>> = Array.isArray(bindingOrModel)\n ? bindingOrModel\n : context.model.get(bindingOrModel);\n\n if (!Array.isArray(searchArray)) {\n return defaultValue;\n }\n\n const foundValue = searchArray.find((value) => {\n const propVal =\n typeof value === \"object\" && propToCheck !== undefined\n ? value[propToCheck]\n : value;\n\n return valueToCheck === propVal;\n });\n\n if (foundValue === undefined) {\n return defaultValue;\n }\n\n if (typeof foundValue === \"object\" && propToReturn) {\n return foundValue[propToReturn] ?? defaultValue;\n }\n\n return foundValue;\n};\n\n/*\n * Checks if a given string contains any keywords present in the given array\n * @param str: The string to search in\n * @param searchStrs: A keyword(s) to search for\n # @returns boolean: Return true if any of the keywords exist in the given string\n */\nexport const containsAny = withoutContext<[string, string[] | string], boolean>(\n (str, keywords) => {\n if (\n !(typeof str === \"string\") ||\n !(typeof keywords === \"string\" || Array.isArray(keywords))\n ) {\n return false;\n }\n\n if (Array.isArray(keywords)) {\n return keywords.some((keyword) => str.indexOf(keyword) > -1);\n }\n\n return str.indexOf(keywords) > -1;\n },\n);\n","/**\n * Convert a string that might contain formatting (such as commas and a currency symbol) to a number\n */\nexport function toNum(val: unknown, coerceTo0?: boolean): number | undefined {\n if (typeof val === \"number\") {\n return val;\n }\n\n if (typeof val === \"string\" && val.length > 0) {\n // Trim whitespace\n let newVal = val.trim();\n // Remove all commas\n newVal = newVal.replace(/,/g, \"\");\n // Remove up to 1 commonly-used currency symbol\n newVal = newVal.replace(/[¥£$€]/, \"\");\n const nVal = Number(newVal);\n\n // ignore hex, binary, octal, and values that don't parse\n return newVal.match(/^0[xbo]/i) || isNaN(nVal) ? undefined : nVal;\n }\n\n return coerceTo0 ? 0 : undefined;\n}\n"],"mappings":"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","names":["result","length"]}
1
+ {"version":3,"sources":["../../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/index.ts","../../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/expressions/index.ts","../../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/expressions/toNum.ts"],"sourcesContent":["import type { ExtendedPlayerPlugin, Player } from \"@player-ui/player\";\nimport { ExpressionPlugin } from \"@player-ui/expression-plugin\";\nimport * as Expressions from \"./expressions\";\nimport type {\n size,\n length,\n isEmpty,\n isNotEmpty,\n concat,\n trim,\n upperCase,\n lowerCase,\n replace,\n titleCase,\n sentenceCase,\n split,\n substr,\n number,\n round,\n floor,\n ceil,\n sum,\n findPropertyIndex,\n findProperty,\n containsAny,\n} from \"./expressions\";\n\nexport { Expressions };\n\n/**\n * Exposes a lot of expressions to Player.\n */\nexport class CommonExpressionsPlugin implements ExtendedPlayerPlugin<\n [],\n [],\n [\n typeof size,\n typeof length,\n typeof isEmpty,\n typeof isNotEmpty,\n typeof concat,\n typeof trim,\n typeof upperCase,\n typeof lowerCase,\n typeof replace,\n typeof titleCase,\n typeof sentenceCase,\n typeof split,\n typeof substr,\n typeof number,\n typeof round,\n typeof floor,\n typeof ceil,\n typeof sum,\n typeof findPropertyIndex,\n typeof findProperty,\n typeof containsAny,\n ]\n> {\n name = \"CommonExpressions\";\n\n apply(player: Player): void {\n player.registerPlugin(\n new ExpressionPlugin(new Map(Object.entries(Expressions))),\n );\n }\n}\n","import type {\n ExpressionHandler,\n ExpressionContext,\n Binding,\n} from \"@player-ui/player\";\nimport { withoutContext } from \"@player-ui/player\";\nimport { toNum } from \"./toNum\";\n\n/** Returns a function that executes the given function only if the first argument is a string */\nfunction ifString(fn: (arg: string) => unknown) {\n return (arg: unknown) => {\n if (typeof arg === \"string\") {\n return fn(arg);\n }\n\n return arg;\n };\n}\n\n/** Generic Types */\n\nexport const size = withoutContext((val: unknown): number => {\n if (typeof val === \"string\") {\n return val.length;\n }\n\n if (typeof val === \"object\" && val !== null) {\n return Object.keys(val).length;\n }\n\n return 0;\n});\n\nexport const length = size;\n\n/** Checks to see if the given value is empty */\nexport const isEmpty: ExpressionHandler<[unknown], boolean> = (ctx, val) => {\n if (val === undefined || val === null) {\n return true;\n }\n\n if (typeof val === \"object\" || typeof val === \"string\") {\n return size(ctx, val) === 0;\n }\n\n return false;\n};\n\n/** Checks to see if the given value is not empty */\nexport const isNotEmpty: ExpressionHandler<[unknown], boolean> = (ctx, val) => {\n return !isEmpty(ctx, val);\n};\n\nexport const concat = withoutContext((...args: Array<unknown>) => {\n if (args.every((v) => Array.isArray(v))) {\n const merged: Array<unknown> = [];\n\n args.forEach((next) => {\n merged.push(...next);\n });\n\n return merged;\n }\n\n return args.reduce((merged: any, next) => merged + (next ?? \"\"), \"\");\n});\n\n/** String Types */\n\nexport const trim = withoutContext(ifString((str) => str.trim()));\nexport const upperCase = withoutContext(ifString((str) => str.toUpperCase()));\nexport const lowerCase = withoutContext(ifString((str) => str.toLowerCase()));\nexport const replace = withoutContext(\n (str: unknown, pattern: unknown, replacement: unknown = \"\") => {\n if (\n typeof str === \"string\" &&\n typeof pattern === \"string\" &&\n typeof replacement === \"string\"\n ) {\n const replacementRegex = new RegExp(pattern, \"g\");\n\n return str.replace(replacementRegex, replacement);\n }\n\n return str;\n },\n);\nexport const titleCase = withoutContext(\n ifString((str) =>\n str\n .split(\" \")\n .map((word) => word[0].toUpperCase() + word.slice(1))\n .join(\" \"),\n ),\n);\n\nexport const sentenceCase = withoutContext(\n ifString((str) => str.replace(/\\b[a-zA-Z]/, (word) => word.toUpperCase())),\n);\n\n// split: Splits a string into an array of substrings based on a separator.\n// Deviations from JS:\n// - If separator is undefined or null, returns the original string (JS would throw TypeError)\n// - If separator is an empty string, splits at every character (matches JS)\nexport const split = withoutContext(\n (str: string, separator: string, limit?: number) => {\n // If separator is undefined or null, return the original string (custom: JS throws an error)\n if (separator === undefined || separator === null) {\n return str;\n }\n\n const separatorStr = String(separator);\n\n // JS behavior: empty string separator splits at every character\n if (separatorStr === \"\") {\n const result = str.split(\"\");\n if (limit !== undefined && limit !== null && limit > 0) {\n return result.slice(0, limit);\n }\n return result;\n }\n\n // Standard JS split behavior for non-empty separator\n const result = str.split(separatorStr);\n\n if (limit !== undefined && limit !== null && limit > 0) {\n return result.slice(0, limit);\n }\n\n return result;\n },\n);\n\n// substr: Extracts a substring from a string.\n// Deviations from JS:\n// - Negative start index counts from the end (JS substring does not support negative indices)\n// - Uses substring logic, not deprecated substr\nexport const substr = withoutContext(\n (str: string, start: number, length?: number) => {\n // Custom: Negative start index counts from the end (matches array behavior, not JS substring)\n const actualStartIndex = start < 0 ? str.length + start : start;\n\n if (length !== undefined) {\n return str.substring(actualStartIndex, actualStartIndex + length);\n }\n\n return str.substring(actualStartIndex);\n },\n);\n\n/** Math Types */\n\nexport const number = withoutContext(toNum);\n\nexport const round = withoutContext<[number | string], number>((num) =>\n Math.round(toNum(num, true) ?? 0),\n);\n\nexport const floor = withoutContext<[number | string], number>((num) =>\n Math.floor(toNum(num, true) ?? 0),\n);\n\nexport const ceil = withoutContext<[number | string], number>((num) =>\n Math.ceil(toNum(num, true) ?? 0),\n);\n\nexport const sum = withoutContext<Array<number | string>, number>((...args) => {\n return args.reduce<number>((s, next) => s + (toNum(next) ?? 0), 0);\n});\n\n/** Array Operations */\n\n/** Finds the property in an array of objects */\nexport const findPropertyIndex: ExpressionHandler<\n [Array<any> | Binding | undefined, string | undefined, any],\n number\n> = <T = unknown>(\n context: ExpressionContext,\n bindingOrModel: Binding | Array<Record<string, T>> | undefined,\n propToCheck: string | undefined,\n valueToCheck: T,\n) => {\n if (bindingOrModel === undefined) {\n return -1;\n }\n\n const searchArray: Array<Record<string, T>> = Array.isArray(bindingOrModel)\n ? bindingOrModel\n : context.model.get(bindingOrModel);\n\n if (!Array.isArray(searchArray)) {\n return -1;\n }\n\n return searchArray.findIndex((value) => {\n const propVal =\n typeof value === \"object\" && propToCheck !== undefined\n ? value[propToCheck]\n : value;\n\n return valueToCheck === propVal;\n });\n};\n\n/** Searches an array for an object matching the criteria. Returns the target prop from that object */\nexport const findProperty: ExpressionHandler<\n [Array<any> | Binding, string | undefined, any, string | undefined, any],\n any\n> = <T = unknown>(\n context: ExpressionContext,\n bindingOrModel: Binding | Array<Record<string, T>>,\n propToCheck: string | undefined,\n valueToCheck: T,\n propToReturn?: string,\n defaultValue?: T,\n) => {\n const searchArray: Array<Record<string, T>> = Array.isArray(bindingOrModel)\n ? bindingOrModel\n : context.model.get(bindingOrModel);\n\n if (!Array.isArray(searchArray)) {\n return defaultValue;\n }\n\n const foundValue = searchArray.find((value) => {\n const propVal =\n typeof value === \"object\" && propToCheck !== undefined\n ? value[propToCheck]\n : value;\n\n return valueToCheck === propVal;\n });\n\n if (foundValue === undefined) {\n return defaultValue;\n }\n\n if (typeof foundValue === \"object\" && propToReturn) {\n return foundValue[propToReturn] ?? defaultValue;\n }\n\n return foundValue;\n};\n\n/*\n * Checks if a given string contains any keywords present in the given array\n * @param str: The string to search in\n * @param searchStrs: A keyword(s) to search for\n # @returns boolean: Return true if any of the keywords exist in the given string\n */\nexport const containsAny = withoutContext<[string, string[] | string], boolean>(\n (str, keywords) => {\n if (\n !(typeof str === \"string\") ||\n !(typeof keywords === \"string\" || Array.isArray(keywords))\n ) {\n return false;\n }\n\n if (Array.isArray(keywords)) {\n return keywords.some((keyword) => str.indexOf(keyword) > -1);\n }\n\n return str.indexOf(keywords) > -1;\n },\n);\n","/**\n * Convert a string that might contain formatting (such as commas and a currency symbol) to a number\n */\nexport function toNum(val: unknown, coerceTo0?: boolean): number | undefined {\n if (typeof val === \"number\") {\n return val;\n }\n\n if (typeof val === \"string\" && val.length > 0) {\n // Trim whitespace\n let newVal = val.trim();\n // Remove all commas\n newVal = newVal.replace(/,/g, \"\");\n // Remove up to 1 commonly-used currency symbol\n newVal = newVal.replace(/[¥£$€]/, \"\");\n const nVal = Number(newVal);\n\n // ignore hex, binary, octal, and values that don't parse\n return newVal.match(/^0[xbo]/i) || isNaN(nVal) ? undefined : nVal;\n }\n\n return coerceTo0 ? 0 : undefined;\n}\n"],"mappings":"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","names":["result","length"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/index.ts","../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/expressions/index.ts","../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/expressions/toNum.ts"],"sourcesContent":["import type { ExtendedPlayerPlugin, Player } from \"@player-ui/player\";\nimport { ExpressionPlugin } from \"@player-ui/expression-plugin\";\nimport * as Expressions from \"./expressions\";\nimport type {\n size,\n length,\n isEmpty,\n isNotEmpty,\n concat,\n trim,\n upperCase,\n lowerCase,\n replace,\n titleCase,\n sentenceCase,\n split,\n substr,\n number,\n round,\n floor,\n ceil,\n sum,\n findPropertyIndex,\n findProperty,\n containsAny,\n} from \"./expressions\";\n\nexport { Expressions };\n\n/**\n * Exposes a lot of expressions to Player.\n */\nexport class CommonExpressionsPlugin\n implements\n ExtendedPlayerPlugin<\n [],\n [],\n [\n typeof size,\n typeof length,\n typeof isEmpty,\n typeof isNotEmpty,\n typeof concat,\n typeof trim,\n typeof upperCase,\n typeof lowerCase,\n typeof replace,\n typeof titleCase,\n typeof sentenceCase,\n typeof split,\n typeof substr,\n typeof number,\n typeof round,\n typeof floor,\n typeof ceil,\n typeof sum,\n typeof findPropertyIndex,\n typeof findProperty,\n typeof containsAny,\n ]\n >\n{\n name = \"CommonExpressions\";\n\n apply(player: Player): void {\n player.registerPlugin(\n new ExpressionPlugin(new Map(Object.entries(Expressions))),\n );\n }\n}\n","import type {\n ExpressionHandler,\n ExpressionContext,\n Binding,\n} from \"@player-ui/player\";\nimport { withoutContext } from \"@player-ui/player\";\nimport { toNum } from \"./toNum\";\n\n/** Returns a function that executes the given function only if the first argument is a string */\nfunction ifString(fn: (arg: string) => unknown) {\n return (arg: unknown) => {\n if (typeof arg === \"string\") {\n return fn(arg);\n }\n\n return arg;\n };\n}\n\n/** Generic Types */\n\nexport const size = withoutContext((val: unknown): number => {\n if (typeof val === \"string\") {\n return val.length;\n }\n\n if (typeof val === \"object\" && val !== null) {\n return Object.keys(val).length;\n }\n\n return 0;\n});\n\nexport const length = size;\n\n/** Checks to see if the given value is empty */\nexport const isEmpty: ExpressionHandler<[unknown], boolean> = (ctx, val) => {\n if (val === undefined || val === null) {\n return true;\n }\n\n if (typeof val === \"object\" || typeof val === \"string\") {\n return size(ctx, val) === 0;\n }\n\n return false;\n};\n\n/** Checks to see if the given value is not empty */\nexport const isNotEmpty: ExpressionHandler<[unknown], boolean> = (ctx, val) => {\n return !isEmpty(ctx, val);\n};\n\nexport const concat = withoutContext((...args: Array<unknown>) => {\n if (args.every((v) => Array.isArray(v))) {\n const merged: Array<unknown> = [];\n\n args.forEach((next) => {\n merged.push(...next);\n });\n\n return merged;\n }\n\n return args.reduce((merged: any, next) => merged + (next ?? \"\"), \"\");\n});\n\n/** String Types */\n\nexport const trim = withoutContext(ifString((str) => str.trim()));\nexport const upperCase = withoutContext(ifString((str) => str.toUpperCase()));\nexport const lowerCase = withoutContext(ifString((str) => str.toLowerCase()));\nexport const replace = withoutContext(\n (str: unknown, pattern: unknown, replacement: unknown = \"\") => {\n if (\n typeof str === \"string\" &&\n typeof pattern === \"string\" &&\n typeof replacement === \"string\"\n ) {\n const replacementRegex = new RegExp(pattern, \"g\");\n\n return str.replace(replacementRegex, replacement);\n }\n\n return str;\n },\n);\nexport const titleCase = withoutContext(\n ifString((str) =>\n str\n .split(\" \")\n .map((word) => word[0].toUpperCase() + word.slice(1))\n .join(\" \"),\n ),\n);\n\nexport const sentenceCase = withoutContext(\n ifString((str) => str.replace(/\\b[a-zA-Z]/, (word) => word.toUpperCase())),\n);\n\n// split: Splits a string into an array of substrings based on a separator.\n// Deviations from JS:\n// - If separator is undefined or null, returns the original string (JS would throw TypeError)\n// - If separator is an empty string, splits at every character (matches JS)\nexport const split = withoutContext(\n (str: string, separator: string, limit?: number) => {\n // If separator is undefined or null, return the original string (custom: JS throws an error)\n if (separator === undefined || separator === null) {\n return str;\n }\n\n const separatorStr = String(separator);\n\n // JS behavior: empty string separator splits at every character\n if (separatorStr === \"\") {\n const result = str.split(\"\");\n if (limit !== undefined && limit !== null && limit > 0) {\n return result.slice(0, limit);\n }\n return result;\n }\n\n // Standard JS split behavior for non-empty separator\n const result = str.split(separatorStr);\n\n if (limit !== undefined && limit !== null && limit > 0) {\n return result.slice(0, limit);\n }\n\n return result;\n },\n);\n\n// substr: Extracts a substring from a string.\n// Deviations from JS:\n// - Negative start index counts from the end (JS substring does not support negative indices)\n// - Uses substring logic, not deprecated substr\nexport const substr = withoutContext(\n (str: string, start: number, length?: number) => {\n // Custom: Negative start index counts from the end (matches array behavior, not JS substring)\n const actualStartIndex = start < 0 ? str.length + start : start;\n\n if (length !== undefined) {\n return str.substring(actualStartIndex, actualStartIndex + length);\n }\n\n return str.substring(actualStartIndex);\n },\n);\n\n/** Math Types */\n\nexport const number = withoutContext(toNum);\n\nexport const round = withoutContext<[number | string], number>((num) =>\n Math.round(toNum(num, true) ?? 0),\n);\n\nexport const floor = withoutContext<[number | string], number>((num) =>\n Math.floor(toNum(num, true) ?? 0),\n);\n\nexport const ceil = withoutContext<[number | string], number>((num) =>\n Math.ceil(toNum(num, true) ?? 0),\n);\n\nexport const sum = withoutContext<Array<number | string>, number>((...args) => {\n return args.reduce<number>((s, next) => s + (toNum(next) ?? 0), 0);\n});\n\n/** Array Operations */\n\n/** Finds the property in an array of objects */\nexport const findPropertyIndex: ExpressionHandler<\n [Array<any> | Binding | undefined, string | undefined, any],\n number\n> = <T = unknown>(\n context: ExpressionContext,\n bindingOrModel: Binding | Array<Record<string, T>> | undefined,\n propToCheck: string | undefined,\n valueToCheck: T,\n) => {\n if (bindingOrModel === undefined) {\n return -1;\n }\n\n const searchArray: Array<Record<string, T>> = Array.isArray(bindingOrModel)\n ? bindingOrModel\n : context.model.get(bindingOrModel);\n\n if (!Array.isArray(searchArray)) {\n return -1;\n }\n\n return searchArray.findIndex((value) => {\n const propVal =\n typeof value === \"object\" && propToCheck !== undefined\n ? value[propToCheck]\n : value;\n\n return valueToCheck === propVal;\n });\n};\n\n/** Searches an array for an object matching the criteria. Returns the target prop from that object */\nexport const findProperty: ExpressionHandler<\n [Array<any> | Binding, string | undefined, any, string | undefined, any],\n any\n> = <T = unknown>(\n context: ExpressionContext,\n bindingOrModel: Binding | Array<Record<string, T>>,\n propToCheck: string | undefined,\n valueToCheck: T,\n propToReturn?: string,\n defaultValue?: T,\n) => {\n const searchArray: Array<Record<string, T>> = Array.isArray(bindingOrModel)\n ? bindingOrModel\n : context.model.get(bindingOrModel);\n\n if (!Array.isArray(searchArray)) {\n return defaultValue;\n }\n\n const foundValue = searchArray.find((value) => {\n const propVal =\n typeof value === \"object\" && propToCheck !== undefined\n ? value[propToCheck]\n : value;\n\n return valueToCheck === propVal;\n });\n\n if (foundValue === undefined) {\n return defaultValue;\n }\n\n if (typeof foundValue === \"object\" && propToReturn) {\n return foundValue[propToReturn] ?? defaultValue;\n }\n\n return foundValue;\n};\n\n/*\n * Checks if a given string contains any keywords present in the given array\n * @param str: The string to search in\n * @param searchStrs: A keyword(s) to search for\n # @returns boolean: Return true if any of the keywords exist in the given string\n */\nexport const containsAny = withoutContext<[string, string[] | string], boolean>(\n (str, keywords) => {\n if (\n !(typeof str === \"string\") ||\n !(typeof keywords === \"string\" || Array.isArray(keywords))\n ) {\n return false;\n }\n\n if (Array.isArray(keywords)) {\n return keywords.some((keyword) => str.indexOf(keyword) > -1);\n }\n\n return str.indexOf(keywords) > -1;\n },\n);\n","/**\n * Convert a string that might contain formatting (such as commas and a currency symbol) to a number\n */\nexport function toNum(val: unknown, coerceTo0?: boolean): number | undefined {\n if (typeof val === \"number\") {\n return val;\n }\n\n if (typeof val === \"string\" && val.length > 0) {\n // Trim whitespace\n let newVal = val.trim();\n // Remove all commas\n newVal = newVal.replace(/,/g, \"\");\n // Remove up to 1 commonly-used currency symbol\n newVal = newVal.replace(/[¥£$€]/, \"\");\n const nVal = Number(newVal);\n\n // ignore hex, binary, octal, and values that don't parse\n return newVal.match(/^0[xbo]/i) || isNaN(nVal) ? undefined : nVal;\n }\n\n return coerceTo0 ? 0 : undefined;\n}\n"],"mappings":"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","names":["result","length"]}
1
+ {"version":3,"sources":["../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/index.ts","../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/expressions/index.ts","../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/expressions/toNum.ts"],"sourcesContent":["import type { ExtendedPlayerPlugin, Player } from \"@player-ui/player\";\nimport { ExpressionPlugin } from \"@player-ui/expression-plugin\";\nimport * as Expressions from \"./expressions\";\nimport type {\n size,\n length,\n isEmpty,\n isNotEmpty,\n concat,\n trim,\n upperCase,\n lowerCase,\n replace,\n titleCase,\n sentenceCase,\n split,\n substr,\n number,\n round,\n floor,\n ceil,\n sum,\n findPropertyIndex,\n findProperty,\n containsAny,\n} from \"./expressions\";\n\nexport { Expressions };\n\n/**\n * Exposes a lot of expressions to Player.\n */\nexport class CommonExpressionsPlugin implements ExtendedPlayerPlugin<\n [],\n [],\n [\n typeof size,\n typeof length,\n typeof isEmpty,\n typeof isNotEmpty,\n typeof concat,\n typeof trim,\n typeof upperCase,\n typeof lowerCase,\n typeof replace,\n typeof titleCase,\n typeof sentenceCase,\n typeof split,\n typeof substr,\n typeof number,\n typeof round,\n typeof floor,\n typeof ceil,\n typeof sum,\n typeof findPropertyIndex,\n typeof findProperty,\n typeof containsAny,\n ]\n> {\n name = \"CommonExpressions\";\n\n apply(player: Player): void {\n player.registerPlugin(\n new ExpressionPlugin(new Map(Object.entries(Expressions))),\n );\n }\n}\n","import type {\n ExpressionHandler,\n ExpressionContext,\n Binding,\n} from \"@player-ui/player\";\nimport { withoutContext } from \"@player-ui/player\";\nimport { toNum } from \"./toNum\";\n\n/** Returns a function that executes the given function only if the first argument is a string */\nfunction ifString(fn: (arg: string) => unknown) {\n return (arg: unknown) => {\n if (typeof arg === \"string\") {\n return fn(arg);\n }\n\n return arg;\n };\n}\n\n/** Generic Types */\n\nexport const size = withoutContext((val: unknown): number => {\n if (typeof val === \"string\") {\n return val.length;\n }\n\n if (typeof val === \"object\" && val !== null) {\n return Object.keys(val).length;\n }\n\n return 0;\n});\n\nexport const length = size;\n\n/** Checks to see if the given value is empty */\nexport const isEmpty: ExpressionHandler<[unknown], boolean> = (ctx, val) => {\n if (val === undefined || val === null) {\n return true;\n }\n\n if (typeof val === \"object\" || typeof val === \"string\") {\n return size(ctx, val) === 0;\n }\n\n return false;\n};\n\n/** Checks to see if the given value is not empty */\nexport const isNotEmpty: ExpressionHandler<[unknown], boolean> = (ctx, val) => {\n return !isEmpty(ctx, val);\n};\n\nexport const concat = withoutContext((...args: Array<unknown>) => {\n if (args.every((v) => Array.isArray(v))) {\n const merged: Array<unknown> = [];\n\n args.forEach((next) => {\n merged.push(...next);\n });\n\n return merged;\n }\n\n return args.reduce((merged: any, next) => merged + (next ?? \"\"), \"\");\n});\n\n/** String Types */\n\nexport const trim = withoutContext(ifString((str) => str.trim()));\nexport const upperCase = withoutContext(ifString((str) => str.toUpperCase()));\nexport const lowerCase = withoutContext(ifString((str) => str.toLowerCase()));\nexport const replace = withoutContext(\n (str: unknown, pattern: unknown, replacement: unknown = \"\") => {\n if (\n typeof str === \"string\" &&\n typeof pattern === \"string\" &&\n typeof replacement === \"string\"\n ) {\n const replacementRegex = new RegExp(pattern, \"g\");\n\n return str.replace(replacementRegex, replacement);\n }\n\n return str;\n },\n);\nexport const titleCase = withoutContext(\n ifString((str) =>\n str\n .split(\" \")\n .map((word) => word[0].toUpperCase() + word.slice(1))\n .join(\" \"),\n ),\n);\n\nexport const sentenceCase = withoutContext(\n ifString((str) => str.replace(/\\b[a-zA-Z]/, (word) => word.toUpperCase())),\n);\n\n// split: Splits a string into an array of substrings based on a separator.\n// Deviations from JS:\n// - If separator is undefined or null, returns the original string (JS would throw TypeError)\n// - If separator is an empty string, splits at every character (matches JS)\nexport const split = withoutContext(\n (str: string, separator: string, limit?: number) => {\n // If separator is undefined or null, return the original string (custom: JS throws an error)\n if (separator === undefined || separator === null) {\n return str;\n }\n\n const separatorStr = String(separator);\n\n // JS behavior: empty string separator splits at every character\n if (separatorStr === \"\") {\n const result = str.split(\"\");\n if (limit !== undefined && limit !== null && limit > 0) {\n return result.slice(0, limit);\n }\n return result;\n }\n\n // Standard JS split behavior for non-empty separator\n const result = str.split(separatorStr);\n\n if (limit !== undefined && limit !== null && limit > 0) {\n return result.slice(0, limit);\n }\n\n return result;\n },\n);\n\n// substr: Extracts a substring from a string.\n// Deviations from JS:\n// - Negative start index counts from the end (JS substring does not support negative indices)\n// - Uses substring logic, not deprecated substr\nexport const substr = withoutContext(\n (str: string, start: number, length?: number) => {\n // Custom: Negative start index counts from the end (matches array behavior, not JS substring)\n const actualStartIndex = start < 0 ? str.length + start : start;\n\n if (length !== undefined) {\n return str.substring(actualStartIndex, actualStartIndex + length);\n }\n\n return str.substring(actualStartIndex);\n },\n);\n\n/** Math Types */\n\nexport const number = withoutContext(toNum);\n\nexport const round = withoutContext<[number | string], number>((num) =>\n Math.round(toNum(num, true) ?? 0),\n);\n\nexport const floor = withoutContext<[number | string], number>((num) =>\n Math.floor(toNum(num, true) ?? 0),\n);\n\nexport const ceil = withoutContext<[number | string], number>((num) =>\n Math.ceil(toNum(num, true) ?? 0),\n);\n\nexport const sum = withoutContext<Array<number | string>, number>((...args) => {\n return args.reduce<number>((s, next) => s + (toNum(next) ?? 0), 0);\n});\n\n/** Array Operations */\n\n/** Finds the property in an array of objects */\nexport const findPropertyIndex: ExpressionHandler<\n [Array<any> | Binding | undefined, string | undefined, any],\n number\n> = <T = unknown>(\n context: ExpressionContext,\n bindingOrModel: Binding | Array<Record<string, T>> | undefined,\n propToCheck: string | undefined,\n valueToCheck: T,\n) => {\n if (bindingOrModel === undefined) {\n return -1;\n }\n\n const searchArray: Array<Record<string, T>> = Array.isArray(bindingOrModel)\n ? bindingOrModel\n : context.model.get(bindingOrModel);\n\n if (!Array.isArray(searchArray)) {\n return -1;\n }\n\n return searchArray.findIndex((value) => {\n const propVal =\n typeof value === \"object\" && propToCheck !== undefined\n ? value[propToCheck]\n : value;\n\n return valueToCheck === propVal;\n });\n};\n\n/** Searches an array for an object matching the criteria. Returns the target prop from that object */\nexport const findProperty: ExpressionHandler<\n [Array<any> | Binding, string | undefined, any, string | undefined, any],\n any\n> = <T = unknown>(\n context: ExpressionContext,\n bindingOrModel: Binding | Array<Record<string, T>>,\n propToCheck: string | undefined,\n valueToCheck: T,\n propToReturn?: string,\n defaultValue?: T,\n) => {\n const searchArray: Array<Record<string, T>> = Array.isArray(bindingOrModel)\n ? bindingOrModel\n : context.model.get(bindingOrModel);\n\n if (!Array.isArray(searchArray)) {\n return defaultValue;\n }\n\n const foundValue = searchArray.find((value) => {\n const propVal =\n typeof value === \"object\" && propToCheck !== undefined\n ? value[propToCheck]\n : value;\n\n return valueToCheck === propVal;\n });\n\n if (foundValue === undefined) {\n return defaultValue;\n }\n\n if (typeof foundValue === \"object\" && propToReturn) {\n return foundValue[propToReturn] ?? defaultValue;\n }\n\n return foundValue;\n};\n\n/*\n * Checks if a given string contains any keywords present in the given array\n * @param str: The string to search in\n * @param searchStrs: A keyword(s) to search for\n # @returns boolean: Return true if any of the keywords exist in the given string\n */\nexport const containsAny = withoutContext<[string, string[] | string], boolean>(\n (str, keywords) => {\n if (\n !(typeof str === \"string\") ||\n !(typeof keywords === \"string\" || Array.isArray(keywords))\n ) {\n return false;\n }\n\n if (Array.isArray(keywords)) {\n return keywords.some((keyword) => str.indexOf(keyword) > -1);\n }\n\n return str.indexOf(keywords) > -1;\n },\n);\n","/**\n * Convert a string that might contain formatting (such as commas and a currency symbol) to a number\n */\nexport function toNum(val: unknown, coerceTo0?: boolean): number | undefined {\n if (typeof val === \"number\") {\n return val;\n }\n\n if (typeof val === \"string\" && val.length > 0) {\n // Trim whitespace\n let newVal = val.trim();\n // Remove all commas\n newVal = newVal.replace(/,/g, \"\");\n // Remove up to 1 commonly-used currency symbol\n newVal = newVal.replace(/[¥£$€]/, \"\");\n const nVal = Number(newVal);\n\n // ignore hex, binary, octal, and values that don't parse\n return newVal.match(/^0[xbo]/i) || isNaN(nVal) ? undefined : nVal;\n }\n\n return coerceTo0 ? 0 : undefined;\n}\n"],"mappings":"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","names":["result","length"]}
@@ -1,5 +1,5 @@
1
1
  {
2
- "source": "/home/circleci/.cache/bazel/_bazel_circleci/e8362d362e14c7d23506d1dfa3aea8b8/sandbox/processwrapper-sandbox/2535/execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/expressions/index.ts",
2
+ "source": "/home/circleci/.cache/bazel/_bazel_circleci/e8362d362e14c7d23506d1dfa3aea8b8/sandbox/processwrapper-sandbox/2594/execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/expressions/index.ts",
3
3
  "name": "ceil",
4
4
  "type": "ref",
5
5
  "ref": "ExpressionHandler",
@@ -1,5 +1,5 @@
1
1
  {
2
- "source": "/home/circleci/.cache/bazel/_bazel_circleci/e8362d362e14c7d23506d1dfa3aea8b8/sandbox/processwrapper-sandbox/2535/execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/expressions/index.ts",
2
+ "source": "/home/circleci/.cache/bazel/_bazel_circleci/e8362d362e14c7d23506d1dfa3aea8b8/sandbox/processwrapper-sandbox/2594/execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/expressions/index.ts",
3
3
  "name": "concat",
4
4
  "type": "ref",
5
5
  "ref": "ExpressionHandler",
@@ -1,5 +1,5 @@
1
1
  {
2
- "source": "/home/circleci/.cache/bazel/_bazel_circleci/e8362d362e14c7d23506d1dfa3aea8b8/sandbox/processwrapper-sandbox/2535/execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/expressions/index.ts",
2
+ "source": "/home/circleci/.cache/bazel/_bazel_circleci/e8362d362e14c7d23506d1dfa3aea8b8/sandbox/processwrapper-sandbox/2594/execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/expressions/index.ts",
3
3
  "name": "containsAny",
4
4
  "type": "ref",
5
5
  "ref": "ExpressionHandler",
@@ -1,5 +1,5 @@
1
1
  {
2
- "source": "/home/circleci/.cache/bazel/_bazel_circleci/e8362d362e14c7d23506d1dfa3aea8b8/sandbox/processwrapper-sandbox/2535/execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/expressions/index.ts",
2
+ "source": "/home/circleci/.cache/bazel/_bazel_circleci/e8362d362e14c7d23506d1dfa3aea8b8/sandbox/processwrapper-sandbox/2594/execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/expressions/index.ts",
3
3
  "name": "findProperty",
4
4
  "type": "ref",
5
5
  "ref": "ExpressionHandler<\n [Array<any> | Binding, string | undefined, any, string | undefined, any],\n any\n>",
@@ -1,5 +1,5 @@
1
1
  {
2
- "source": "/home/circleci/.cache/bazel/_bazel_circleci/e8362d362e14c7d23506d1dfa3aea8b8/sandbox/processwrapper-sandbox/2535/execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/expressions/index.ts",
2
+ "source": "/home/circleci/.cache/bazel/_bazel_circleci/e8362d362e14c7d23506d1dfa3aea8b8/sandbox/processwrapper-sandbox/2594/execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/expressions/index.ts",
3
3
  "name": "findPropertyIndex",
4
4
  "type": "ref",
5
5
  "ref": "ExpressionHandler<\n [Array<any> | Binding | undefined, string | undefined, any],\n number\n>",
@@ -1,5 +1,5 @@
1
1
  {
2
- "source": "/home/circleci/.cache/bazel/_bazel_circleci/e8362d362e14c7d23506d1dfa3aea8b8/sandbox/processwrapper-sandbox/2535/execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/expressions/index.ts",
2
+ "source": "/home/circleci/.cache/bazel/_bazel_circleci/e8362d362e14c7d23506d1dfa3aea8b8/sandbox/processwrapper-sandbox/2594/execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/expressions/index.ts",
3
3
  "name": "floor",
4
4
  "type": "ref",
5
5
  "ref": "ExpressionHandler",
@@ -1,5 +1,5 @@
1
1
  {
2
- "source": "/home/circleci/.cache/bazel/_bazel_circleci/e8362d362e14c7d23506d1dfa3aea8b8/sandbox/processwrapper-sandbox/2535/execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/expressions/index.ts",
2
+ "source": "/home/circleci/.cache/bazel/_bazel_circleci/e8362d362e14c7d23506d1dfa3aea8b8/sandbox/processwrapper-sandbox/2594/execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/expressions/index.ts",
3
3
  "name": "isEmpty",
4
4
  "type": "ref",
5
5
  "ref": "ExpressionHandler<[unknown], boolean>",
@@ -1,5 +1,5 @@
1
1
  {
2
- "source": "/home/circleci/.cache/bazel/_bazel_circleci/e8362d362e14c7d23506d1dfa3aea8b8/sandbox/processwrapper-sandbox/2535/execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/expressions/index.ts",
2
+ "source": "/home/circleci/.cache/bazel/_bazel_circleci/e8362d362e14c7d23506d1dfa3aea8b8/sandbox/processwrapper-sandbox/2594/execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/expressions/index.ts",
3
3
  "name": "isNotEmpty",
4
4
  "type": "ref",
5
5
  "ref": "ExpressionHandler<[unknown], boolean>",
@@ -1,5 +1,5 @@
1
1
  {
2
- "source": "/home/circleci/.cache/bazel/_bazel_circleci/e8362d362e14c7d23506d1dfa3aea8b8/sandbox/processwrapper-sandbox/2535/execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/expressions/index.ts",
2
+ "source": "/home/circleci/.cache/bazel/_bazel_circleci/e8362d362e14c7d23506d1dfa3aea8b8/sandbox/processwrapper-sandbox/2594/execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/expressions/index.ts",
3
3
  "name": "length",
4
4
  "type": "ref",
5
5
  "ref": "ExpressionHandler",
@@ -1,5 +1,5 @@
1
1
  {
2
- "source": "/home/circleci/.cache/bazel/_bazel_circleci/e8362d362e14c7d23506d1dfa3aea8b8/sandbox/processwrapper-sandbox/2535/execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/expressions/index.ts",
2
+ "source": "/home/circleci/.cache/bazel/_bazel_circleci/e8362d362e14c7d23506d1dfa3aea8b8/sandbox/processwrapper-sandbox/2594/execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/expressions/index.ts",
3
3
  "name": "lowerCase",
4
4
  "type": "ref",
5
5
  "ref": "ExpressionHandler",
@@ -1,5 +1,5 @@
1
1
  {
2
- "source": "/home/circleci/.cache/bazel/_bazel_circleci/e8362d362e14c7d23506d1dfa3aea8b8/sandbox/processwrapper-sandbox/2535/execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/expressions/index.ts",
2
+ "source": "/home/circleci/.cache/bazel/_bazel_circleci/e8362d362e14c7d23506d1dfa3aea8b8/sandbox/processwrapper-sandbox/2594/execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/expressions/index.ts",
3
3
  "name": "number",
4
4
  "type": "ref",
5
5
  "ref": "ExpressionHandler",
@@ -1,5 +1,5 @@
1
1
  {
2
- "source": "/home/circleci/.cache/bazel/_bazel_circleci/e8362d362e14c7d23506d1dfa3aea8b8/sandbox/processwrapper-sandbox/2535/execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/expressions/index.ts",
2
+ "source": "/home/circleci/.cache/bazel/_bazel_circleci/e8362d362e14c7d23506d1dfa3aea8b8/sandbox/processwrapper-sandbox/2594/execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/expressions/index.ts",
3
3
  "name": "replace",
4
4
  "type": "ref",
5
5
  "ref": "ExpressionHandler",
@@ -1,5 +1,5 @@
1
1
  {
2
- "source": "/home/circleci/.cache/bazel/_bazel_circleci/e8362d362e14c7d23506d1dfa3aea8b8/sandbox/processwrapper-sandbox/2535/execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/expressions/index.ts",
2
+ "source": "/home/circleci/.cache/bazel/_bazel_circleci/e8362d362e14c7d23506d1dfa3aea8b8/sandbox/processwrapper-sandbox/2594/execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/expressions/index.ts",
3
3
  "name": "round",
4
4
  "type": "ref",
5
5
  "ref": "ExpressionHandler",
@@ -1,5 +1,5 @@
1
1
  {
2
- "source": "/home/circleci/.cache/bazel/_bazel_circleci/e8362d362e14c7d23506d1dfa3aea8b8/sandbox/processwrapper-sandbox/2535/execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/expressions/index.ts",
2
+ "source": "/home/circleci/.cache/bazel/_bazel_circleci/e8362d362e14c7d23506d1dfa3aea8b8/sandbox/processwrapper-sandbox/2594/execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/expressions/index.ts",
3
3
  "name": "sentenceCase",
4
4
  "type": "ref",
5
5
  "ref": "ExpressionHandler",
@@ -1,5 +1,5 @@
1
1
  {
2
- "source": "/home/circleci/.cache/bazel/_bazel_circleci/e8362d362e14c7d23506d1dfa3aea8b8/sandbox/processwrapper-sandbox/2535/execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/expressions/index.ts",
2
+ "source": "/home/circleci/.cache/bazel/_bazel_circleci/e8362d362e14c7d23506d1dfa3aea8b8/sandbox/processwrapper-sandbox/2594/execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/expressions/index.ts",
3
3
  "name": "size",
4
4
  "type": "ref",
5
5
  "ref": "ExpressionHandler",
@@ -1,5 +1,5 @@
1
1
  {
2
- "source": "/home/circleci/.cache/bazel/_bazel_circleci/e8362d362e14c7d23506d1dfa3aea8b8/sandbox/processwrapper-sandbox/2535/execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/expressions/index.ts",
2
+ "source": "/home/circleci/.cache/bazel/_bazel_circleci/e8362d362e14c7d23506d1dfa3aea8b8/sandbox/processwrapper-sandbox/2594/execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/expressions/index.ts",
3
3
  "name": "split",
4
4
  "type": "ref",
5
5
  "ref": "ExpressionHandler",
@@ -1,5 +1,5 @@
1
1
  {
2
- "source": "/home/circleci/.cache/bazel/_bazel_circleci/e8362d362e14c7d23506d1dfa3aea8b8/sandbox/processwrapper-sandbox/2535/execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/expressions/index.ts",
2
+ "source": "/home/circleci/.cache/bazel/_bazel_circleci/e8362d362e14c7d23506d1dfa3aea8b8/sandbox/processwrapper-sandbox/2594/execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/expressions/index.ts",
3
3
  "name": "substr",
4
4
  "type": "ref",
5
5
  "ref": "ExpressionHandler",
@@ -1,5 +1,5 @@
1
1
  {
2
- "source": "/home/circleci/.cache/bazel/_bazel_circleci/e8362d362e14c7d23506d1dfa3aea8b8/sandbox/processwrapper-sandbox/2535/execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/expressions/index.ts",
2
+ "source": "/home/circleci/.cache/bazel/_bazel_circleci/e8362d362e14c7d23506d1dfa3aea8b8/sandbox/processwrapper-sandbox/2594/execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/expressions/index.ts",
3
3
  "name": "sum",
4
4
  "type": "ref",
5
5
  "ref": "ExpressionHandler",
@@ -1,5 +1,5 @@
1
1
  {
2
- "source": "/home/circleci/.cache/bazel/_bazel_circleci/e8362d362e14c7d23506d1dfa3aea8b8/sandbox/processwrapper-sandbox/2535/execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/expressions/index.ts",
2
+ "source": "/home/circleci/.cache/bazel/_bazel_circleci/e8362d362e14c7d23506d1dfa3aea8b8/sandbox/processwrapper-sandbox/2594/execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/expressions/index.ts",
3
3
  "name": "titleCase",
4
4
  "type": "ref",
5
5
  "ref": "ExpressionHandler",
@@ -1,5 +1,5 @@
1
1
  {
2
- "source": "/home/circleci/.cache/bazel/_bazel_circleci/e8362d362e14c7d23506d1dfa3aea8b8/sandbox/processwrapper-sandbox/2535/execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/expressions/index.ts",
2
+ "source": "/home/circleci/.cache/bazel/_bazel_circleci/e8362d362e14c7d23506d1dfa3aea8b8/sandbox/processwrapper-sandbox/2594/execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/expressions/index.ts",
3
3
  "name": "trim",
4
4
  "type": "ref",
5
5
  "ref": "ExpressionHandler",
@@ -1,5 +1,5 @@
1
1
  {
2
- "source": "/home/circleci/.cache/bazel/_bazel_circleci/e8362d362e14c7d23506d1dfa3aea8b8/sandbox/processwrapper-sandbox/2535/execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/expressions/index.ts",
2
+ "source": "/home/circleci/.cache/bazel/_bazel_circleci/e8362d362e14c7d23506d1dfa3aea8b8/sandbox/processwrapper-sandbox/2594/execroot/_main/bazel-out/k8-fastbuild/bin/plugins/common-expressions/core/src/expressions/index.ts",
3
3
  "name": "upperCase",
4
4
  "type": "ref",
5
5
  "ref": "ExpressionHandler",
package/package.json CHANGED
@@ -6,16 +6,16 @@
6
6
  "types"
7
7
  ],
8
8
  "name": "@player-ui/common-expressions-plugin",
9
- "version": "0.15.3-next.1",
9
+ "version": "0.15.3-next.3",
10
10
  "main": "dist/cjs/index.cjs",
11
11
  "peerDependencies": {
12
- "@player-ui/player": "0.15.3-next.1"
12
+ "@player-ui/player": "0.15.3-next.3"
13
13
  },
14
14
  "devDependencies": {
15
15
  "@player-ui/make-flow": "workspace:^"
16
16
  },
17
17
  "dependencies": {
18
- "@player-ui/expression-plugin": "0.15.3-next.1",
18
+ "@player-ui/expression-plugin": "0.15.3-next.3",
19
19
  "tslib": "^2.6.2"
20
20
  },
21
21
  "module": "dist/index.legacy-esm.js",
package/src/index.ts CHANGED
@@ -30,36 +30,33 @@ export { Expressions };
30
30
  /**
31
31
  * Exposes a lot of expressions to Player.
32
32
  */
33
- export class CommonExpressionsPlugin
34
- implements
35
- ExtendedPlayerPlugin<
36
- [],
37
- [],
38
- [
39
- typeof size,
40
- typeof length,
41
- typeof isEmpty,
42
- typeof isNotEmpty,
43
- typeof concat,
44
- typeof trim,
45
- typeof upperCase,
46
- typeof lowerCase,
47
- typeof replace,
48
- typeof titleCase,
49
- typeof sentenceCase,
50
- typeof split,
51
- typeof substr,
52
- typeof number,
53
- typeof round,
54
- typeof floor,
55
- typeof ceil,
56
- typeof sum,
57
- typeof findPropertyIndex,
58
- typeof findProperty,
59
- typeof containsAny,
60
- ]
61
- >
62
- {
33
+ export class CommonExpressionsPlugin implements ExtendedPlayerPlugin<
34
+ [],
35
+ [],
36
+ [
37
+ typeof size,
38
+ typeof length,
39
+ typeof isEmpty,
40
+ typeof isNotEmpty,
41
+ typeof concat,
42
+ typeof trim,
43
+ typeof upperCase,
44
+ typeof lowerCase,
45
+ typeof replace,
46
+ typeof titleCase,
47
+ typeof sentenceCase,
48
+ typeof split,
49
+ typeof substr,
50
+ typeof number,
51
+ typeof round,
52
+ typeof floor,
53
+ typeof ceil,
54
+ typeof sum,
55
+ typeof findPropertyIndex,
56
+ typeof findProperty,
57
+ typeof containsAny,
58
+ ]
59
+ > {
63
60
  name = "CommonExpressions";
64
61
 
65
62
  apply(player: Player): void {