@player-ui/asset-transform-plugin
Version:
1 lines • 8.46 kB
Source Map (JSON)
{"version":3,"sources":["../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/plugins/asset-transform/core/src/index.ts","../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/plugins/asset-transform/core/src/utils.ts","../../../../../../../../../../../../execroot/_main/bazel-out/k8-fastbuild/bin/plugins/asset-transform/core/src/propertiesToSkip.ts"],"sourcesContent":["import type {\n Player,\n PlayerPlugin,\n TransformRegistry,\n TransformFunction,\n TransformFunctions,\n} from \"@player-ui/player\";\nimport { Registry } from \"@player-ui/partial-match-registry\";\nimport { compose } from \"./utils\";\n\nexport * from \"./utils\";\nexport * from \"./propertiesToSkip\";\n\nexport type TransformType = TransformFunction<any> | TransformFunctions;\nexport type TransformRegistryEntries = Array<[any, TransformType]>;\nexport type AssetTransformInit =\n | Registry<TransformType>\n | TransformRegistryEntries;\n\n/**\n * Normalize asset transform values so that they are all objects that contains\n * the resolve & beforeResolve functions.\n */\nfunction maybeCompose(maybeFn: any): TransformFunctions {\n if (typeof maybeFn === \"object\") {\n return maybeFn;\n }\n\n return compose(maybeFn);\n}\n\n/**\n * Standardize each variation of Asset Registry input into the same transform\n * registry shape.\n */\nfunction cleanupTransformRegistry(\n maybeRegistry: AssetTransformInit,\n): TransformRegistry {\n if (Array.isArray(maybeRegistry)) {\n const wrappedTransforms = maybeRegistry.map(([key, value]) => {\n return [key, maybeCompose(value)] as [any, TransformFunctions];\n });\n\n return new Registry(wrappedTransforms);\n }\n\n const registry = new Registry<TransformFunctions>();\n\n maybeRegistry.forEach(({ key, value }) => {\n registry.set(key, maybeCompose(value));\n });\n\n return registry;\n}\n\n/**\n * A plugin to register custom transforms on certain asset types\n * This allows users to embed stateful data into transforms.\n */\nexport class AssetTransformPlugin implements PlayerPlugin {\n name = \"asset-transform\";\n public readonly registry: TransformRegistry;\n\n constructor(transforms: AssetTransformInit) {\n this.registry = cleanupTransformRegistry(transforms);\n }\n\n apply(player: Player) {\n player.hooks.viewController.tap(this.name, (vc) => {\n this.registry.forEach(({ key, value }) =>\n vc.transformRegistry.set(key, maybeCompose(value)),\n );\n });\n }\n}\n","import type {\n Resolve,\n Store,\n BeforeTransformFunction,\n TransformFunction,\n TransformFunctions,\n} from \"@player-ui/player\";\n\nfunction composeTransforms(\n ...args: TransformFunction<any>[]\n): TransformFunction<any>;\n\nfunction composeTransforms(\n ...args: BeforeTransformFunction<any>[]\n): BeforeTransformFunction<any>;\n\n/**\n * More closely resembles the `compose` function you may have used. Performs\n * right-to-left function evaluation, but leveraging the common signature for\n * Transform Functions. The `options` and `store` is unchanging for each\n * transform since only `value` is returned, allowing them to safely be passed\n * into each transform.\n */\nfunction composeTransforms(\n ...args: TransformFunction<any>[] | BeforeTransformFunction<any>[]\n): TransformFunction<any> | BeforeTransformFunction<any> {\n const [fn, ...fns] = args.reverse();\n\n return (asset: any, options: Resolve.NodeResolveOptions, store: Store) => {\n const value = fn(asset, options, store);\n\n if (!fns.length) {\n return value;\n }\n\n return fns.reduce((prevValue, current) => {\n return current(prevValue, options, store);\n }, value);\n };\n}\n\n/**\n * Helper function to make it easier to create transforms that need to be ran in\n * the `beforeResolve` hook. Just like `compose`, functions are evaluated from\n * right-to-left.\n */\nexport function composeBefore(\n ...args: BeforeTransformFunction<any>[]\n): TransformFunctions {\n return {\n beforeResolve: composeTransforms(...args),\n };\n}\n\n/**\n * Performs right-to-left function evaluation of each transform function. Unlike\n * other compose functions, this does not require unary arguments for all but the\n * last function. The value returned from each function will be used as the value\n * for the next function.\n */\nexport function compose(\n ...args: Array<TransformFunction<any> | TransformFunctions>\n): TransformFunctions {\n const beforeResolveFns: BeforeTransformFunction<any>[] = [];\n const resolveFns: TransformFunction<any>[] = [];\n\n for (const arg of args) {\n if (typeof arg === \"function\") {\n resolveFns.push(arg);\n } else {\n if (arg?.resolve) {\n resolveFns.push(arg.resolve);\n }\n\n if (arg?.beforeResolve) {\n beforeResolveFns.push(arg.beforeResolve);\n }\n }\n }\n\n return {\n beforeResolve: beforeResolveFns.length\n ? composeTransforms(...beforeResolveFns)\n : undefined,\n resolve: resolveFns.length ? composeTransforms(...resolveFns) : undefined,\n };\n}\n","import type { BeforeTransformFunction } from \"@player-ui/player\";\n\n/**\n * Passes a property to the plugins.stringResolver.propertiesToSkip array or creates it if it doesn't exist\n *\n * @param asset - Asset to apply the transform to\n */\nexport const propertiesToSkipTransform = (\n parameters: string[],\n): BeforeTransformFunction => {\n return (asset) => {\n const skipArray = asset.plugins?.stringResolver?.propertiesToSkip ?? [];\n\n /** makes sure there are no empty strings in the array */\n const parameterArray = parameters.filter((element) => {\n return element !== \"\";\n });\n\n if (parameterArray.length === 0) {\n return asset;\n }\n\n if (\n skipArray.length > 0 &&\n skipArray.every((arr) => parameterArray.includes(arr)) &&\n parameterArray.every((arr) => skipArray.includes(arr))\n ) {\n return asset;\n }\n\n const addParams: Set<string> = new Set([...skipArray, ...parameterArray]);\n\n return {\n ...asset,\n plugins: {\n ...asset.plugins,\n stringResolver: {\n ...asset?.plugins?.stringResolver,\n propertiesToSkip: [...addParams],\n },\n },\n };\n };\n};\n"],"mappings":"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","names":[]}