@dvukovic/style-guide 0.14.1 → 0.14.2

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,164 +0,0 @@
1
- import { ESLint } from "eslint"
2
- import jsoncParser from "jsonc-eslint-parser"
3
-
4
- import { requireProperties } from "./require-properties.js"
5
-
6
- const createEslint = (properties) => {
7
- return new ESLint({
8
- overrideConfig: [
9
- {
10
- files: ["**/package.json"],
11
- languageOptions: {
12
- parser: jsoncParser,
13
- },
14
- plugins: {
15
- custom: {
16
- rules: {
17
- "require-properties": requireProperties,
18
- },
19
- },
20
- },
21
- rules: {
22
- "custom/require-properties": ["error", { properties }],
23
- },
24
- },
25
- ],
26
- overrideConfigFile: true,
27
- })
28
- }
29
-
30
- describe("require-properties", () => {
31
- test("passes when all required properties exist", async () => {
32
- const eslint = createEslint(["name", "version"])
33
- const packageJson = JSON.stringify(
34
- {
35
- name: "test",
36
- version: "1.0.0",
37
- },
38
- null,
39
- 4,
40
- )
41
-
42
- const results = await eslint.lintText(packageJson, { filePath: "package.json" })
43
- const errors = results[0]?.messages.filter((message) => {
44
- return message.ruleId === "custom/require-properties"
45
- })
46
-
47
- expect(errors?.length).toBe(0)
48
- })
49
-
50
- test("fails when a required property is missing", async () => {
51
- const eslint = createEslint(["name", "version"])
52
- const packageJson = JSON.stringify(
53
- {
54
- name: "test",
55
- },
56
- null,
57
- 4,
58
- )
59
-
60
- const results = await eslint.lintText(packageJson, { filePath: "package.json" })
61
- const errors = results[0]?.messages.filter((message) => {
62
- return message.ruleId === "custom/require-properties"
63
- })
64
-
65
- expect(errors?.length).toBe(1)
66
- expect(errors?.[0]?.message).toContain("version")
67
- })
68
-
69
- test("fails with multiple missing properties", async () => {
70
- const eslint = createEslint(["name", "version", "description"])
71
- const packageJson = JSON.stringify(
72
- {
73
- name: "test",
74
- },
75
- null,
76
- 4,
77
- )
78
-
79
- const results = await eslint.lintText(packageJson, { filePath: "package.json" })
80
- const errors = results[0]?.messages.filter((message) => {
81
- return message.ruleId === "custom/require-properties"
82
- })
83
-
84
- expect(errors?.length).toBe(2)
85
- })
86
-
87
- test("passes with empty properties config", async () => {
88
- const eslint = createEslint([])
89
- const packageJson = JSON.stringify(
90
- {
91
- name: "test",
92
- },
93
- null,
94
- 4,
95
- )
96
-
97
- const results = await eslint.lintText(packageJson, { filePath: "package.json" })
98
- const errors = results[0]?.messages.filter((message) => {
99
- return message.ruleId === "custom/require-properties"
100
- })
101
-
102
- expect(errors?.length).toBe(0)
103
- })
104
-
105
- test("supports dot notation for nested properties", async () => {
106
- const eslint = createEslint(["volta.node"])
107
- const packageJson = JSON.stringify(
108
- {
109
- name: "test",
110
- volta: {
111
- node: "24.0.0",
112
- },
113
- },
114
- null,
115
- 4,
116
- )
117
-
118
- const results = await eslint.lintText(packageJson, { filePath: "package.json" })
119
- const errors = results[0]?.messages.filter((message) => {
120
- return message.ruleId === "custom/require-properties"
121
- })
122
-
123
- expect(errors?.length).toBe(0)
124
- })
125
-
126
- test("fails when nested property is missing", async () => {
127
- const eslint = createEslint(["volta.node"])
128
- const packageJson = JSON.stringify(
129
- {
130
- name: "test",
131
- volta: {},
132
- },
133
- null,
134
- 4,
135
- )
136
-
137
- const results = await eslint.lintText(packageJson, { filePath: "package.json" })
138
- const errors = results[0]?.messages.filter((message) => {
139
- return message.ruleId === "custom/require-properties"
140
- })
141
-
142
- expect(errors?.length).toBe(1)
143
- expect(errors?.[0]?.message).toContain("volta.node")
144
- })
145
-
146
- test("fails when parent of nested property is missing", async () => {
147
- const eslint = createEslint(["volta.node"])
148
- const packageJson = JSON.stringify(
149
- {
150
- name: "test",
151
- },
152
- null,
153
- 4,
154
- )
155
-
156
- const results = await eslint.lintText(packageJson, { filePath: "package.json" })
157
- const errors = results[0]?.messages.filter((message) => {
158
- return message.ruleId === "custom/require-properties"
159
- })
160
-
161
- expect(errors?.length).toBe(1)
162
- expect(errors?.[0]?.message).toContain("volta.node")
163
- })
164
- })
@@ -1,154 +0,0 @@
1
- import { ESLint } from "eslint"
2
- import jsoncParser from "jsonc-eslint-parser"
3
-
4
- import { validEnginesNode } from "./valid-engines-node.js"
5
-
6
- const createEslint = (versions) => {
7
- return new ESLint({
8
- overrideConfig: [
9
- {
10
- files: ["**/package.json"],
11
- languageOptions: {
12
- parser: jsoncParser,
13
- },
14
- plugins: {
15
- custom: {
16
- rules: {
17
- "valid-engines-node": validEnginesNode,
18
- },
19
- },
20
- },
21
- rules: {
22
- "custom/valid-engines-node": ["error", { versions }],
23
- },
24
- },
25
- ],
26
- overrideConfigFile: true,
27
- })
28
- }
29
-
30
- describe("valid-engines-node", () => {
31
- test("allows valid LTS version", async () => {
32
- const eslint = createEslint(["24"])
33
- const packageJson = JSON.stringify(
34
- {
35
- engines: {
36
- node: ">=24.0.0",
37
- },
38
- name: "test",
39
- },
40
- null,
41
- 4,
42
- )
43
-
44
- const results = await eslint.lintText(packageJson, { filePath: "package.json" })
45
- const errors = results[0]?.messages.filter((message) => {
46
- return message.ruleId === "custom/valid-engines-node"
47
- })
48
-
49
- expect(errors?.length).toBe(0)
50
- })
51
-
52
- test("allows version with just major number", async () => {
53
- const eslint = createEslint(["24"])
54
- const packageJson = JSON.stringify(
55
- {
56
- engines: {
57
- node: ">=24",
58
- },
59
- name: "test",
60
- },
61
- null,
62
- 4,
63
- )
64
-
65
- const results = await eslint.lintText(packageJson, { filePath: "package.json" })
66
- const errors = results[0]?.messages.filter((message) => {
67
- return message.ruleId === "custom/valid-engines-node"
68
- })
69
-
70
- expect(errors?.length).toBe(0)
71
- })
72
-
73
- test("rejects non-LTS version", async () => {
74
- const eslint = createEslint(["24"])
75
- const packageJson = JSON.stringify(
76
- {
77
- engines: {
78
- node: ">=18.0.0",
79
- },
80
- name: "test",
81
- },
82
- null,
83
- 4,
84
- )
85
-
86
- const results = await eslint.lintText(packageJson, { filePath: "package.json" })
87
- const errors = results[0]?.messages.filter((message) => {
88
- return message.ruleId === "custom/valid-engines-node"
89
- })
90
-
91
- expect(errors?.length).toBe(1)
92
- expect(errors?.[0]?.message).toContain("18.0.0")
93
- })
94
-
95
- test("rejects odd version numbers", async () => {
96
- const eslint = createEslint(["24"])
97
- const packageJson = JSON.stringify(
98
- {
99
- engines: {
100
- node: ">=21.0.0",
101
- },
102
- name: "test",
103
- },
104
- null,
105
- 4,
106
- )
107
-
108
- const results = await eslint.lintText(packageJson, { filePath: "package.json" })
109
- const errors = results[0]?.messages.filter((message) => {
110
- return message.ruleId === "custom/valid-engines-node"
111
- })
112
-
113
- expect(errors?.length).toBe(1)
114
- })
115
-
116
- test("handles missing engines field", async () => {
117
- const eslint = createEslint(["24"])
118
- const packageJson = JSON.stringify(
119
- {
120
- name: "test",
121
- },
122
- null,
123
- 4,
124
- )
125
-
126
- const results = await eslint.lintText(packageJson, { filePath: "package.json" })
127
- const errors = results[0]?.messages.filter((message) => {
128
- return message.ruleId === "custom/valid-engines-node"
129
- })
130
-
131
- expect(errors?.length).toBe(0)
132
- })
133
-
134
- test("handles missing node in engines", async () => {
135
- const eslint = createEslint(["24"])
136
- const packageJson = JSON.stringify(
137
- {
138
- engines: {
139
- npm: ">=9",
140
- },
141
- name: "test",
142
- },
143
- null,
144
- 4,
145
- )
146
-
147
- const results = await eslint.lintText(packageJson, { filePath: "package.json" })
148
- const errors = results[0]?.messages.filter((message) => {
149
- return message.ruleId === "custom/valid-engines-node"
150
- })
151
-
152
- expect(errors?.length).toBe(0)
153
- })
154
- })
@@ -1,24 +0,0 @@
1
- import { format } from "prettier"
2
-
3
- import config from "./core.js"
4
-
5
- describe("prettier core", () => {
6
- test("loads without errors", async () => {
7
- const result = await format("const x = 1", {
8
- ...config,
9
- parser: "babel",
10
- })
11
-
12
- expect(result).toBeDefined()
13
- expect(typeof result).toBe("string")
14
- })
15
-
16
- test("formats code correctly", async () => {
17
- const result = await format("const x=1", {
18
- ...config,
19
- parser: "babel",
20
- })
21
-
22
- expect(result).toContain("const x = 1")
23
- })
24
- })
@@ -1,24 +0,0 @@
1
- import stylelint from "stylelint"
2
-
3
- import config from "./core.js"
4
-
5
- describe("stylelint core", () => {
6
- test("loads without errors", async () => {
7
- const result = await stylelint.lint({
8
- code: "a { padding: 10px; }",
9
- config,
10
- })
11
-
12
- expect(result).toBeDefined()
13
- expect(result.errored).toBe(false)
14
- })
15
-
16
- test("detects violations", async () => {
17
- const result = await stylelint.lint({
18
- code: "a { color: red;; }",
19
- config,
20
- })
21
-
22
- expect(result.errored).toBe(true)
23
- })
24
- })