occam-entities 1.0.1

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.
Files changed (62) hide show
  1. package/.swcrc +5 -0
  2. package/README.md +78 -0
  3. package/lib/constants.js +26 -0
  4. package/lib/dependencies.js +114 -0
  5. package/lib/dependency.js +68 -0
  6. package/lib/directory.js +107 -0
  7. package/lib/entries.js +251 -0
  8. package/lib/file.js +155 -0
  9. package/lib/fileNames.js +59 -0
  10. package/lib/files.js +121 -0
  11. package/lib/index.js +79 -0
  12. package/lib/mixins/bnf.js +47 -0
  13. package/lib/mixins/entries.js +103 -0
  14. package/lib/mixins/files.js +41 -0
  15. package/lib/mixins/metaJSON.js +36 -0
  16. package/lib/mixins/pattern.js +47 -0
  17. package/lib/multiplers.js +26 -0
  18. package/lib/project.js +98 -0
  19. package/lib/projects.js +112 -0
  20. package/lib/release.js +148 -0
  21. package/lib/releases.js +112 -0
  22. package/lib/shortenedVersion.js +105 -0
  23. package/lib/types.js +22 -0
  24. package/lib/utilities/content.js +34 -0
  25. package/lib/utilities/filePath.js +63 -0
  26. package/lib/utilities/files.js +85 -0
  27. package/lib/utilities/metaJSON.js +127 -0
  28. package/lib/utilities/name.js +18 -0
  29. package/lib/utilities/query.js +41 -0
  30. package/lib/utilities/version.js +71 -0
  31. package/lib/version.js +160 -0
  32. package/license.txt +48 -0
  33. package/package.json +34 -0
  34. package/src/constants.js +5 -0
  35. package/src/dependencies.js +75 -0
  36. package/src/dependency.js +29 -0
  37. package/src/directory.js +60 -0
  38. package/src/entries.js +217 -0
  39. package/src/file.js +107 -0
  40. package/src/fileNames.js +22 -0
  41. package/src/files.js +78 -0
  42. package/src/index.js +17 -0
  43. package/src/mixins/bnf.js +59 -0
  44. package/src/mixins/entries.js +73 -0
  45. package/src/mixins/files.js +52 -0
  46. package/src/mixins/metaJSON.js +48 -0
  47. package/src/mixins/pattern.js +59 -0
  48. package/src/multiplers.js +5 -0
  49. package/src/project.js +63 -0
  50. package/src/projects.js +66 -0
  51. package/src/release.js +145 -0
  52. package/src/releases.js +66 -0
  53. package/src/shortenedVersion.js +71 -0
  54. package/src/types.js +4 -0
  55. package/src/utilities/content.js +12 -0
  56. package/src/utilities/filePath.js +36 -0
  57. package/src/utilities/files.js +95 -0
  58. package/src/utilities/metaJSON.js +149 -0
  59. package/src/utilities/name.js +13 -0
  60. package/src/utilities/query.js +31 -0
  61. package/src/utilities/version.js +70 -0
  62. package/src/version.js +123 -0
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+
3
+ import { MetaJSONLexer, MetaJSONParser } from "occam-grammars";
4
+
5
+ import Version from "../version";
6
+ import Dependency from "../dependency";
7
+ import Dependencies from "../dependencies";
8
+ import ShortenedVersion from "../shortenedVersion";
9
+
10
+ import { DOUBLE_SPACE } from "../constants";
11
+ import { trimDoubleQuotes } from "../utilities/content";
12
+ import { nodeQuery, nodesQuery } from "../utilities/query";
13
+
14
+ const metaJSONLexer = MetaJSONLexer.fromNothing(),
15
+ metaJSONParser = MetaJSONParser.fromNothing(),
16
+ errorNodesQuery = nodesQuery("//error"),
17
+ dependencyNodesQuery = nodesQuery("//dependencies/dependency"),
18
+ repositoryTerminalNodeQuery = nodeQuery("//repository!/@*!"),
19
+ versionNumberTerminalNodeQuery = nodeQuery("//version!/versionNumber!/@*!"),
20
+ dependencyNameTerminalNodeQuery = nodeQuery("/dependency/name!/@*!"),
21
+ shortenedVersionNumberTerminalNodeQuery = nodeQuery("//dependency/shortenedVersionNumber/@*!");
22
+
23
+ export function versionFromNode(node) {
24
+ let version = null;
25
+
26
+ if (node !== null) {
27
+ const versionNumberTerminalNode = versionNumberTerminalNodeQuery(node),
28
+ versionNumberTerminalNodeContent = versionNumberTerminalNode.getContent(),
29
+ string = trimDoubleQuotes(versionNumberTerminalNodeContent); //
30
+
31
+ version = Version.fromString(string);
32
+ }
33
+
34
+ return version;
35
+ }
36
+
37
+ export function repositoryFromNode(node) {
38
+ let repository = null;
39
+
40
+ if (node !== null) {
41
+ const repositoryTerminalNode = repositoryTerminalNodeQuery(node),
42
+ repositoryTerminalNodeContent = repositoryTerminalNode.getContent();
43
+
44
+ repository = trimDoubleQuotes(repositoryTerminalNodeContent); //
45
+ }
46
+
47
+ return repository;
48
+ }
49
+
50
+ export function isMetaJSONFileValid(metaJSONFile) {
51
+ let metaJSONFileValid = false;
52
+
53
+ const metaJSONNode = metaJSONNodeFromMetaJSONFile(metaJSONFile);
54
+
55
+ if (metaJSONNode !== null) {
56
+ const node = metaJSONNode, ///
57
+ errorNodes = errorNodesQuery(node),
58
+ errorNodesLength = errorNodes.length;
59
+
60
+ if (errorNodesLength === 0) {
61
+ metaJSONFileValid = true;
62
+ }
63
+ }
64
+
65
+ return metaJSONFileValid;
66
+ }
67
+
68
+ export function dependenciesFromNode(node) {
69
+ const dependencies = Dependencies.fromNothing();
70
+
71
+ if (node !== null) {
72
+ const dependencyNodes = dependencyNodesQuery(node);
73
+
74
+ dependencyNodes.forEach((dependencyNode) => {
75
+ const dependencyNameTerminalNode = dependencyNameTerminalNodeQuery(dependencyNode),
76
+ shortenedVersionNumberTerminalNode = shortenedVersionNumberTerminalNodeQuery(dependencyNode),
77
+ dependencyNameTerminalNodeContent = dependencyNameTerminalNode.getContent(),
78
+ shortenedVersionNumberTerminalNodeContent = shortenedVersionNumberTerminalNode.getContent(),
79
+ string = trimDoubleQuotes(shortenedVersionNumberTerminalNodeContent), ///
80
+ name = trimDoubleQuotes(dependencyNameTerminalNodeContent),///
81
+ shortenedVersion = ShortenedVersion.fromString(string),
82
+ dependency = Dependency.fromNameAndShortenedVersion(name, shortenedVersion);
83
+
84
+ dependencies.addDependency(dependency);
85
+ });
86
+ }
87
+
88
+ return dependencies;
89
+ }
90
+
91
+ export function dependencyNamesFromNode(node) {
92
+ const dependencies = dependenciesFromNode(node),
93
+ dependencyNames = dependencies.mapDependency((dependency) => {
94
+ const dependencyName = dependency.getName();
95
+
96
+ return dependencyName;
97
+ });
98
+
99
+ return dependencyNames;
100
+ }
101
+
102
+ export function updateMetaJSONFileVersion(metaJSONFile, version) {
103
+ const metaJSONNode = metaJSONNodeFromMetaJSONFile(metaJSONFile),
104
+ node = metaJSONNode, ///
105
+ repository = repositoryFromNode(node);
106
+
107
+ let dependencies = dependenciesFromNode(node);
108
+
109
+ const string = version.toString(),
110
+ dependenciesJSON = dependencies.toJSON();
111
+
112
+ version = string; ///
113
+
114
+ dependencies = dependenciesJSON; ///
115
+
116
+ const metaJSON = {
117
+ version,
118
+ repository,
119
+ dependencies
120
+ },
121
+ metaJSONString = JSON.stringify(metaJSON, null, DOUBLE_SPACE),
122
+ metaJSONFileContent = metaJSONString; ///
123
+
124
+ metaJSONFile.setContent(metaJSONFileContent);
125
+ }
126
+
127
+ export function metaJSONNodeFromMetaJSONFile(metaJSONFile) {
128
+ let metaJSONNode = null;
129
+
130
+ if (metaJSONFile !== null) {
131
+ const content = metaJSONFile.getContent(),
132
+ tokens = metaJSONLexer.tokenise(content),
133
+ node = metaJSONParser.parse(tokens);
134
+
135
+ metaJSONNode = node; ///
136
+ }
137
+
138
+ return metaJSONNode;
139
+ }
140
+
141
+ export default {
142
+ versionFromNode,
143
+ repositoryFromNode,
144
+ isMetaJSONFileValid,
145
+ dependenciesFromNode,
146
+ dependencyNamesFromNode,
147
+ updateMetaJSONFileVersion,
148
+ metaJSONNodeFromMetaJSONFile
149
+ };
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ import { pathUtilities } from "necessary";
4
+
5
+ const { bottommostNameFromPath } = pathUtilities;
6
+
7
+ export function fileNameFromFilePath(filePath) {
8
+ const path = filePath, ///
9
+ bottommostName = bottommostNameFromPath(path),
10
+ fileName = bottommostName; //
11
+
12
+ return fileName;
13
+ }
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+
3
+ import { Query } from "occam-dom";
4
+
5
+ export function nodeQuery(expression) {
6
+ const query = Query.fromExpression(expression);
7
+
8
+ return function(node) {
9
+ if (node !== null) {
10
+ const nodes = query.execute(node);
11
+
12
+ node = nodes.shift() || null; ///
13
+ }
14
+
15
+ return node;
16
+ };
17
+ }
18
+
19
+ export function nodesQuery(expression) {
20
+ const query = Query.fromExpression(expression);
21
+
22
+ return function(node) {
23
+ let nodes = null;
24
+
25
+ if (node !== null) {
26
+ nodes = query.execute(node);
27
+ }
28
+
29
+ return nodes;
30
+ };
31
+ }
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+
3
+ import { arrayUtilities } from "necessary";
4
+
5
+ import { MAJOR_NUMBER_MULTIPLIER, MINOR_NUMBER_MULTIPLIER, PATCH_NUMBER_MULTIPLIER } from "../multiplers";
6
+
7
+ const { second } = arrayUtilities;
8
+
9
+ export function majorNumberFromNumber(number) {
10
+ const majorNumber = (number !== null) ?
11
+ Math.floor(number / MAJOR_NUMBER_MULTIPLIER) :
12
+ 0; ///
13
+
14
+ return majorNumber;
15
+ }
16
+
17
+ export function minorNumberFromNumber(number) {
18
+ const minorNumber = (number !== null) ?
19
+ Math.floor((number % MAJOR_NUMBER_MULTIPLIER) / MINOR_NUMBER_MULTIPLIER) :
20
+ 0; ///
21
+
22
+ return minorNumber;
23
+ }
24
+
25
+ export function patchNumberFromNumber(number) {
26
+ const patchNumber = (number !== null) ?
27
+ Math.floor((number % MINOR_NUMBER_MULTIPLIER) / PATCH_NUMBER_MULTIPLIER) :
28
+ 0; ///
29
+
30
+ return patchNumber;
31
+ }
32
+
33
+ export function majorNumberFromString(string) {
34
+ let majorNumber = 0;
35
+
36
+ if (string) {
37
+ const matches = string.match(/^(\d+)/),
38
+ secondMatch = second(matches);
39
+
40
+ majorNumber = Number(secondMatch); ///
41
+ }
42
+
43
+ return majorNumber;
44
+ }
45
+
46
+ export function minorNumberFromString(string) {
47
+ let minorNumber = 0;
48
+
49
+ if (string) {
50
+ const matches = string.match(/^\d+\.(\d+)/),
51
+ secondMatch = second(matches);
52
+
53
+ minorNumber = Number(secondMatch); ///
54
+ }
55
+
56
+ return minorNumber;
57
+ }
58
+
59
+ export function patchNumberFromString(string) {
60
+ let patchNumber = 0;
61
+
62
+ if (string) {
63
+ const matches = string.match(/^\d+\.\d+\.(\d+)/),
64
+ secondMatch = second(matches);
65
+
66
+ patchNumber = Number(secondMatch); ///
67
+ }
68
+
69
+ return patchNumber;
70
+ }
package/src/version.js ADDED
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+
3
+ import { MAJOR_NUMBER_MULTIPLIER, MINOR_NUMBER_MULTIPLIER, PATCH_NUMBER_MULTIPLIER } from "./multiplers";
4
+ import { majorNumberFromNumber,
5
+ minorNumberFromNumber,
6
+ patchNumberFromNumber,
7
+ majorNumberFromString,
8
+ minorNumberFromString,
9
+ patchNumberFromString } from "./utilities/version";
10
+
11
+ export default class Version {
12
+ constructor(majorNumber, minorNumber, patchNumber) {
13
+ this.majorNumber = majorNumber;
14
+ this.minorNumber = minorNumber;
15
+ this.patchNumber = patchNumber;
16
+ }
17
+
18
+ getMajorNumber() {
19
+ return this.majorNumber;
20
+ }
21
+
22
+ getMinorNumber() {
23
+ return this.minorNumber;
24
+ }
25
+
26
+ getPatchNumber() {
27
+ return this.patchNumber;
28
+ }
29
+
30
+ bumpMajorNumber() {
31
+ this.majorNumber += 1;
32
+ }
33
+
34
+ bumpMinorNumber() {
35
+ this.minorNumber += 1;
36
+ }
37
+
38
+ bumpPatchNumber() {
39
+ this.patchNumber += 1;
40
+ }
41
+
42
+ resetMajorNumber() {
43
+ this.majorNumber = 0;
44
+ }
45
+
46
+ resetMinorNumber() {
47
+ this.minorNumber = 0;
48
+ }
49
+
50
+ resetPatchNumber() {
51
+ this.patchNumber = 0;
52
+ }
53
+
54
+ matchShortenedVersion(shortenedVersion) {
55
+ let matchesShortenedVersion = false;
56
+
57
+ if (shortenedVersion === null) {
58
+ matchesShortenedVersion = true;
59
+ } else {
60
+ const majorNumber = shortenedVersion.getMajorNumber();
61
+
62
+ if (this.majorNumber === majorNumber) {
63
+ const minorNumber = shortenedVersion.getMinorNumber();
64
+
65
+ if (this.minorNumber >= minorNumber) {
66
+ matchesShortenedVersion = true;
67
+ }
68
+ }
69
+ }
70
+
71
+ return matchesShortenedVersion;
72
+ }
73
+
74
+ toString() {
75
+ const string = `${this.majorNumber}.${this.minorNumber}.${this.patchNumber}`;
76
+
77
+ return string;
78
+ }
79
+
80
+ toVersionNumber() {
81
+ const versionNumber = this.majorNumber * MAJOR_NUMBER_MULTIPLIER + this.minorNumber * MINOR_NUMBER_MULTIPLIER + this.patchNumber * PATCH_NUMBER_MULTIPLIER;
82
+
83
+ return versionNumber;
84
+ }
85
+
86
+ static fromString(string) {
87
+ const majorNumber = majorNumberFromString(string),
88
+ minorNumber = minorNumberFromString(string),
89
+ patchNumber = patchNumberFromString(string),
90
+ version = new Version(majorNumber, minorNumber, patchNumber);
91
+
92
+ return version;
93
+ }
94
+
95
+ static fromNothing() {
96
+ const majorNumber = 0,
97
+ minorNumber = 0,
98
+ patchNumber = 0,
99
+ version = new Version(majorNumber, minorNumber, patchNumber);
100
+
101
+ return version;
102
+ }
103
+
104
+ static fromVersion(version) {
105
+ const majorNumber = version.getMajorNumber(),
106
+ minorNumber = version.getMinorNumber(),
107
+ patchNumber = version.getPatchNumber();
108
+
109
+ version = new Version(majorNumber, minorNumber, patchNumber); ///
110
+
111
+ return version;
112
+ }
113
+
114
+ static fromVersionNumber(versionNumber) {
115
+ const number = versionNumber, ///
116
+ majorNumber = majorNumberFromNumber(number),
117
+ minorNumber = minorNumberFromNumber(number),
118
+ patchNumber = patchNumberFromNumber(number),
119
+ version = new Version(majorNumber, minorNumber, patchNumber);
120
+
121
+ return version;
122
+ }
123
+ }