Skip to content

Commit f7a71cc

Browse files
authored
feat: add setup method to change default options (#22)
1 parent fffa6d7 commit f7a71cc

File tree

3 files changed

+88
-2
lines changed

3 files changed

+88
-2
lines changed

README.md

+19
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,25 @@ b("element", { a: true, b: true });
7373
//=> "pre---block__element--a pre---block__element--b"
7474
```
7575

76+
### `setup()`
77+
78+
Change default options.
79+
80+
```ts
81+
import block, { setup } from "bem-ts";
82+
83+
setup({
84+
elementDelimiter: "_",
85+
modifierDelimiter: "-",
86+
prefix: "pre---",
87+
});
88+
89+
const b = block("block");
90+
91+
b("element", { a: true });
92+
//=> "pre---block_element-a"
93+
```
94+
7695
## Install
7796

7897
```sh

index.ts

+23-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,30 @@
11
type Modifiers = { [key: string]: boolean; };
22

3+
const defaults = {
4+
elementDelimiter: "__",
5+
modifierDelimiter: "--",
6+
prefix: "",
7+
};
8+
9+
export function setup(options: { elementDelimiter?: string, modifierDelimiter?: string, prefix?: string }) {
10+
if (options.elementDelimiter) {
11+
defaults.elementDelimiter = options.elementDelimiter;
12+
}
13+
if (options.modifierDelimiter) {
14+
defaults.modifierDelimiter = options.modifierDelimiter;
15+
}
16+
if (options.prefix) {
17+
defaults.prefix = options.prefix;
18+
}
19+
}
20+
321
export default function bem(
422
block: string,
5-
{ elementDelimiter = "__", modifierDelimiter = "--", prefix = "" } = {},
23+
{
24+
elementDelimiter = defaults.elementDelimiter,
25+
modifierDelimiter = defaults.modifierDelimiter,
26+
prefix = defaults.prefix,
27+
} = {},
628
) {
729
return (elementOrModifiers?: string | Modifiers, modifiers?: Modifiers) => {
830
let base = `${prefix}${block}`;

test.ts

+46-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import block from ".";
1+
import block, { setup } from ".";
22

33
describe("default", () => {
44
const b = block("block");
@@ -115,3 +115,48 @@ describe("`prefix` option", () => {
115115
.toBe("pre---block__element--a pre---block__element--c");
116116
});
117117
});
118+
119+
describe("`setup()`", () => {
120+
setup({
121+
elementDelimiter: "_",
122+
modifierDelimiter: "-",
123+
prefix: "pre---",
124+
});
125+
126+
const b = block("block");
127+
128+
it("returns block", () => {
129+
expect(b()).toBe("pre---block");
130+
});
131+
132+
it("returns block with modifier", () => {
133+
expect(b({ a: true, b: false })).toBe("pre---block-a");
134+
});
135+
136+
it("returns block with multiple modifiers", () => {
137+
expect(b({ a: true, b: false, c: true })).toBe("pre---block-a pre---block-c");
138+
});
139+
140+
it("returns block with element", () => {
141+
expect(b("element")).toBe("pre---block_element");
142+
});
143+
144+
it("returns block with element and modifier", () => {
145+
expect(b("element", { a: true, b: false })).toBe("pre---block_element-a");
146+
});
147+
148+
it("returns block with element and multiple modifiers", () => {
149+
expect(b("element", { a: true, b: false, c: true }))
150+
.toBe("pre---block_element-a pre---block_element-c");
151+
});
152+
153+
it("overrides options which was setup", () => {
154+
const bl = block("block", { elementDelimiter: ":", modifierDelimiter: "/", prefix: "p-" });
155+
expect(bl("element", { a: true })).toBe("p-block:element/a");
156+
});
157+
158+
it("has no effect when empty options are passed", () => {
159+
setup({});
160+
expect(block("block")("element", { a: true })).toBe("pre---block_element-a");
161+
});
162+
});

0 commit comments

Comments
 (0)