config/Options/common/boost.ts

/**
 * Copyright (c) 2017 ~ present NAVER Corp.
 * billboard.js project is licensed under the MIT license
 */
/**
 * boost config options
 */
export default {
	/**
	 * Set boost options
	 * @name boost
	 * @memberof Options
	 * @type {object}
	 * @property {object} boost boost object
	 * @property {boolean} [boost.useCssRule=false] Avoid setting inline styles for each shape elements.
	 * - **NOTE:**
	 *   - Will append <style> to the head tag and will add shpes' CSS rules dynamically.
	 *   - For now, covers colors related properties (fill, stroke, etc.) only.
	 * @property {boolean|string} [boost.useWorker=false] Use Web Worker as possible for processing.
	 * - **Available values:**
	 *   - `false`: never offload.
	 *   - `true`: always offload when a Worker can be created.
	 *   - `"auto"`: offload only when the given data exceeds ~5,000 cells, since smaller
	 *     payloads lose more to structured cloning than they gain.
	 * - **NOTE:**
	 *   - For now, only applies for data conversion at the initial time.
	 *   - As of Web Worker's async nature, handling chart instance synchronously is not recommended.
	 *   - When Worker isn't available, fails or times out, data conversion falls back to main thread.
	 *   - When given data is empty, useWorker will be ignored.
	 * @property {string} [boost.workerUrl=undefined] Use a custom static worker script URL instead of an inline Blob worker.
	 * - **NOTE:**
	 *   - **Requires `boost.useWorker` to be enabled** — this option only selects where the
	 *     worker source comes from, it does not turn offloading on by itself.
	 *   - Useful for strict CSP environments that disallow `blob:` workers. Without it under
	 *     such a policy, worker creation throws and each conversion waits out the 5s timeout
	 *     before falling back, so the chart still renders but the initial draw is delayed.
	 *   - Point it at `dist/billboard.worker.js`, shipped in the package, or any script
	 *     implementing the same protocol: receive `{id, op, args}` and post back
	 *     `{id, result}` or `{id, error}`. No `eval()` is involved.
	 *   - With a bundler, make sure the file is emitted as a **real asset**, not inlined:
	 *     it is ~1.5KB, and inlining turns it into a `data:` URI, which a strict CSP
	 *     blocks exactly like `blob:`. Copying it into the static/public directory is the
	 *     option that works everywhere.
	 *   - Any failure (load error, unknown op, timeout, result mismatch) falls back to the main thread.
	 * @example
	 * // offload data conversion on a Worker, using the inline Blob worker
	 *  boost: {
	 *      useCssRule: true,
	 *      useWorker: true
	 *  }
	 * @example
	 * // offload only past ~5,000 cells
	 *  boost: {
	 *      useWorker: "auto"
	 *  }
	 * @example
	 * // strict CSP: serve the shipped script and point at it.
	 * // 'useWorker' still has to be on - 'workerUrl' alone offloads nothing.
	 *  boost: {
	 *      useWorker: true,
	 *      workerUrl: "$YOUR_PATH/dist/billboard.worker.js"
	 *  }
	 * @example
	 * // ESM: the file is reachable as a package subpath.
	 * // Vite - '?url' resolves it, but assets under 4KB are inlined as a 'data:' URI,
	 * // which a strict CSP rejects. Opt that one file out of inlining:
	 * //
	 * //   // vite.config.js
	 * //   export default {
	 * //     build: {
	 * //       assetsInlineLimit: path => /billboard\.worker\.js$/.test(path) ? false : undefined
	 * //     }
	 * //   };
	 * import bb, {bar} from "billboard.js";
	 * import workerUrl from "billboard.js/dist/billboard.worker.js?url";
	 *
	 * bb.generate({
	 *     boost: {useWorker: true, workerUrl},
	 *     data: {columns: [["data1", 30, 200, 100]], type: bar()}
	 * });
	 * @example
	 * // ESM, bundler-agnostic: copy the file into the served static directory
	 * //   cp node_modules/billboard.js/dist/billboard.worker.js public/
	 * bb.generate({
	 *     boost: {useWorker: true, workerUrl: "/billboard.worker.js"},
	 *     data: {columns: [["data1", 30, 200, 100]]}
	 * });
	 */
	boost_useCssRule: false,
	boost_useWorker: false,
	boost_workerUrl: undefined
};