-
-
Notifications
You must be signed in to change notification settings - Fork 334
Expand file tree
/
Copy pathnpm_provider.py
More file actions
95 lines (80 loc) · 2.96 KB
/
npm_provider.py
File metadata and controls
95 lines (80 loc) · 2.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
from __future__ import annotations
import json
from pathlib import Path
from typing import TYPE_CHECKING, Any, ClassVar
from commitizen.providers.base_provider import JsonProvider
if TYPE_CHECKING:
from collections.abc import Mapping
class NpmProvider(JsonProvider):
"""
npm package.json and package-lock.json version management
"""
indent: ClassVar[int] = 2
package_filename = "package.json"
lock_filename = "package-lock.json"
shrinkwrap_filename = "npm-shrinkwrap.json"
@property
def package_file(self) -> Path:
return Path() / self.package_filename
@property
def lock_file(self) -> Path:
return Path() / self.lock_filename
@property
def shrinkwrap_file(self) -> Path:
return Path() / self.shrinkwrap_filename
def get_version(self) -> str:
"""
Get the current version from package.json
"""
package_document = json.loads(
self.package_file.read_text(encoding=self._get_encoding())
)
return self.get_package_version(package_document)
def set_version(self, version: str) -> None:
package_document = self.set_package_version(
json.loads(self.package_file.read_text(encoding=self._get_encoding())),
version,
)
self.package_file.write_text(
json.dumps(package_document, indent=self.indent) + "\n",
encoding=self._get_encoding(),
)
if self.lock_file.is_file():
lock_document = self.set_lock_version(
json.loads(self.lock_file.read_text(encoding=self._get_encoding())),
version,
)
self.lock_file.write_text(
json.dumps(lock_document, indent=self.indent) + "\n",
encoding=self._get_encoding(),
)
if self.shrinkwrap_file.is_file():
shrinkwrap_document = self.set_shrinkwrap_version(
json.loads(
self.shrinkwrap_file.read_text(encoding=self._get_encoding())
),
version,
)
self.shrinkwrap_file.write_text(
json.dumps(shrinkwrap_document, indent=self.indent) + "\n",
encoding=self._get_encoding(),
)
def get_package_version(self, document: Mapping[str, str]) -> str:
return document["version"]
def set_package_version(
self, document: dict[str, Any], version: str
) -> dict[str, Any]:
document["version"] = version
return document
def set_lock_version(
self, document: dict[str, Any], version: str
) -> dict[str, Any]:
document["version"] = version
document["packages"][""]["version"] = version
return document
def set_shrinkwrap_version(
self, document: dict[str, Any], version: str
) -> dict[str, Any]:
document["version"] = version
document["packages"][""]["version"] = version
return document