summaryrefslogtreecommitdiff
path: root/@linaria/packages/babel/src/utils/loadOptions.ts
diff options
context:
space:
mode:
Diffstat (limited to '@linaria/packages/babel/src/utils/loadOptions.ts')
-rw-r--r--@linaria/packages/babel/src/utils/loadOptions.ts38
1 files changed, 38 insertions, 0 deletions
diff --git a/@linaria/packages/babel/src/utils/loadOptions.ts b/@linaria/packages/babel/src/utils/loadOptions.ts
new file mode 100644
index 0000000..8c0f0b8
--- /dev/null
+++ b/@linaria/packages/babel/src/utils/loadOptions.ts
@@ -0,0 +1,38 @@
+import cosmiconfig from 'cosmiconfig';
+import type { StrictOptions } from '../types';
+
+export type PluginOptions = StrictOptions & {
+ configFile?: string;
+};
+
+const explorer = cosmiconfig('linaria');
+
+export default function loadOptions(
+ overrides: Partial<PluginOptions> = {}
+): Partial<StrictOptions> {
+ const { configFile, ignore, ...rest } = overrides;
+
+ const result =
+ configFile !== undefined
+ ? explorer.loadSync(configFile)
+ : explorer.searchSync();
+
+ return {
+ displayName: false,
+ evaluate: true,
+ rules: [
+ {
+ // FIXME: if `rule` is not specified in a config, `@linaria/shaker` should be added as a dependency
+ // eslint-disable-next-line import/no-extraneous-dependencies
+ action: require('@linaria/shaker').default,
+ },
+ {
+ // The old `ignore` option is used as a default value for `ignore` rule.
+ test: ignore ?? /[\\/]node_modules[\\/]/,
+ action: 'ignore',
+ },
+ ],
+ ...(result ? result.config : null),
+ ...rest,
+ };
+}