@swrpg-online/dice 0.5.0 → 0.9.0
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.
- package/.github/workflows/publish.yml +31 -0
- package/.husky/.skip-tests +0 -0
- package/.husky/pre-commit +32 -0
- package/.replit +8 -0
- package/coverage/clover.xml +2 -2
- package/coverage/lcov-report/dice.ts.html +1 -1
- package/coverage/lcov-report/index.html +1 -1
- package/coverage/lcov-report/index.ts.html +1 -1
- package/coverage/lcov-report/pools.ts.html +1 -1
- package/jest.config.js +2 -1
- package/package.json +9 -5
- package/src/dice.js +0 -229
- package/src/types.js +0 -2
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
name: Publish Package
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main # Change this to your default branch if necessary
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
publish:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
|
|
12
|
+
steps:
|
|
13
|
+
- name: Checkout code
|
|
14
|
+
uses: actions/checkout@v2
|
|
15
|
+
|
|
16
|
+
- name: Set up Node.js
|
|
17
|
+
uses: actions/setup-node@v2
|
|
18
|
+
with:
|
|
19
|
+
node-version: '16' # Change to the appropriate Node.js version
|
|
20
|
+
registry-url: 'https://registry.npmjs.org/'
|
|
21
|
+
|
|
22
|
+
- name: Install dependencies
|
|
23
|
+
run: npm install
|
|
24
|
+
|
|
25
|
+
- name: Build the project
|
|
26
|
+
run: npm run build
|
|
27
|
+
|
|
28
|
+
- name: Publish package
|
|
29
|
+
run: npm publish
|
|
30
|
+
env:
|
|
31
|
+
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
File without changes
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
. "$(dirname "$0")/_/husky.sh"
|
|
3
|
+
|
|
4
|
+
# Check for an existing environment variable to prevent infinite loop
|
|
5
|
+
if [ "$SKIP_HOOK" != "true" ]; then
|
|
6
|
+
export SKIP_HOOK=true
|
|
7
|
+
# Run tests
|
|
8
|
+
npm run test
|
|
9
|
+
|
|
10
|
+
# Check if coverage files have been modified
|
|
11
|
+
if ! git diff --quiet coverage/; then
|
|
12
|
+
# Set an environment variable to prevent re-triggering the hook
|
|
13
|
+
# export SKIP_HOOK=true
|
|
14
|
+
|
|
15
|
+
# Stage coverage files
|
|
16
|
+
git add coverage/
|
|
17
|
+
|
|
18
|
+
# Commit the coverage files
|
|
19
|
+
git commit -m "Add latest coverage files" --allow-empty --no-verify
|
|
20
|
+
|
|
21
|
+
# Unset the environment variable
|
|
22
|
+
unset SKIP_HOOK
|
|
23
|
+
fi
|
|
24
|
+
fi
|
|
25
|
+
|
|
26
|
+
# Build the project
|
|
27
|
+
npm run build
|
|
28
|
+
|
|
29
|
+
# Check for changes in package.json
|
|
30
|
+
if git diff --cached --name-only | grep package.json; then
|
|
31
|
+
npm version patch # Use 'minor'/'major' as needed
|
|
32
|
+
fi
|
package/.replit
ADDED
package/coverage/clover.xml
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<coverage generated="
|
|
3
|
-
<project timestamp="
|
|
2
|
+
<coverage generated="1733155876718" clover="3.2.0">
|
|
3
|
+
<project timestamp="1733155876718" name="All files">
|
|
4
4
|
<metrics statements="98" coveredstatements="92" conditionals="81" coveredconditionals="81" methods="20" coveredmethods="15" elements="199" coveredelements="188" complexity="0" loc="98" ncloc="98" packages="1" files="3" classes="3"/>
|
|
5
5
|
<file name="dice.ts" path="/Users/joshuaziggas/swrpg-online/dice/src/dice.ts">
|
|
6
6
|
<metrics statements="87" coveredstatements="87" conditionals="78" coveredconditionals="78" methods="11" coveredmethods="11"/>
|
|
@@ -802,7 +802,7 @@ export const roll = (pool: DicePool): RollResult => {
|
|
|
802
802
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
803
803
|
Code coverage generated by
|
|
804
804
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
805
|
-
at 2024-
|
|
805
|
+
at 2024-12-02T16:11:16.711Z
|
|
806
806
|
</div>
|
|
807
807
|
<script src="prettify.js"></script>
|
|
808
808
|
<script>
|
|
@@ -131,7 +131,7 @@
|
|
|
131
131
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
132
132
|
Code coverage generated by
|
|
133
133
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
134
|
-
at 2024-
|
|
134
|
+
at 2024-12-02T16:11:16.711Z
|
|
135
135
|
</div>
|
|
136
136
|
<script src="prettify.js"></script>
|
|
137
137
|
<script>
|
|
@@ -94,7 +94,7 @@ export type { DicePool, RollResult } from './types';
|
|
|
94
94
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
95
95
|
Code coverage generated by
|
|
96
96
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
97
|
-
at 2024-
|
|
97
|
+
at 2024-12-02T16:11:16.711Z
|
|
98
98
|
</div>
|
|
99
99
|
<script src="prettify.js"></script>
|
|
100
100
|
<script>
|
|
@@ -238,7 +238,7 @@ export const createDifficultyPool = (difficulty: number, challenge: number = 0):
|
|
|
238
238
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
239
239
|
Code coverage generated by
|
|
240
240
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
241
|
-
at 2024-
|
|
241
|
+
at 2024-12-02T16:11:16.711Z
|
|
242
242
|
</div>
|
|
243
243
|
<script src="prettify.js"></script>
|
|
244
244
|
<script>
|
package/jest.config.js
CHANGED
package/package.json
CHANGED
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@swrpg-online/dice",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"description": "A TypeScript library for simulating Star Wars RPG narrative dice rolls.",
|
|
5
|
-
"main": "
|
|
5
|
+
"main": "dist/index.js",
|
|
6
6
|
"directories": {
|
|
7
7
|
"test": "tests"
|
|
8
8
|
},
|
|
9
9
|
"scripts": {
|
|
10
|
-
"test": "npx jest --verbose"
|
|
10
|
+
"test": "npx jest --verbose",
|
|
11
|
+
"build": "tsc",
|
|
12
|
+
"prepare": "npm run build && husky install"
|
|
11
13
|
},
|
|
12
14
|
"keywords": [],
|
|
13
|
-
"author": "
|
|
15
|
+
"author": "@swrpg-online",
|
|
14
16
|
"license": "MIT",
|
|
15
17
|
"dependencies": {
|
|
16
18
|
"@types/jest": "^29.5.14",
|
|
@@ -19,7 +21,9 @@
|
|
|
19
21
|
"ts-jest": "^29.2.5",
|
|
20
22
|
"typescript": "^5.7.2"
|
|
21
23
|
},
|
|
22
|
-
"devDependencies": {
|
|
24
|
+
"devDependencies": {
|
|
25
|
+
"husky": "^8.0.0"
|
|
26
|
+
},
|
|
23
27
|
"repository": {
|
|
24
28
|
"type": "git",
|
|
25
29
|
"url": "https://github.com/swrpg-online/dice"
|
package/src/dice.js
DELETED
|
@@ -1,229 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.roll = void 0;
|
|
4
|
-
var rollDie = function (sides) { return Math.floor(Math.random() * sides) + 1; };
|
|
5
|
-
var boostDieResult = function (roll) {
|
|
6
|
-
switch (roll) {
|
|
7
|
-
case 3:
|
|
8
|
-
return { successes: 1, failures: 0, advantages: 0, threats: 0, triumphs: 0, despair: 0 };
|
|
9
|
-
case 4:
|
|
10
|
-
return { successes: 1, failures: 0, advantages: 1, threats: 0, triumphs: 0, despair: 0 };
|
|
11
|
-
case 5:
|
|
12
|
-
return { successes: 0, failures: 0, advantages: 2, threats: 0, triumphs: 0, despair: 0 };
|
|
13
|
-
case 6:
|
|
14
|
-
return { successes: 0, failures: 0, advantages: 1, threats: 0, triumphs: 0, despair: 0 };
|
|
15
|
-
default:
|
|
16
|
-
return { successes: 0, failures: 0, advantages: 0, threats: 0, triumphs: 0, despair: 0 };
|
|
17
|
-
}
|
|
18
|
-
};
|
|
19
|
-
var setBackDieResult = function (roll) {
|
|
20
|
-
switch (roll) {
|
|
21
|
-
case 3:
|
|
22
|
-
case 4:
|
|
23
|
-
return { successes: 0, failures: 1, advantages: 0, threats: 0, triumphs: 0, despair: 0 };
|
|
24
|
-
case 5:
|
|
25
|
-
case 6:
|
|
26
|
-
return { successes: 0, failures: 0, advantages: 0, threats: 1, triumphs: 0, despair: 0 };
|
|
27
|
-
default:
|
|
28
|
-
return { successes: 0, failures: 0, advantages: 0, threats: 0, triumphs: 0, despair: 0 };
|
|
29
|
-
}
|
|
30
|
-
};
|
|
31
|
-
var abilityDieResult = function (roll) {
|
|
32
|
-
switch (roll) {
|
|
33
|
-
case 2:
|
|
34
|
-
case 3:
|
|
35
|
-
return { successes: 1, failures: 0, advantages: 0, threats: 0, triumphs: 0, despair: 0 };
|
|
36
|
-
case 4:
|
|
37
|
-
return { successes: 2, failures: 0, advantages: 0, threats: 0, triumphs: 0, despair: 0 };
|
|
38
|
-
case 5:
|
|
39
|
-
case 6:
|
|
40
|
-
return { successes: 0, failures: 0, advantages: 1, threats: 0, triumphs: 0, despair: 0 };
|
|
41
|
-
case 7:
|
|
42
|
-
return { successes: 1, failures: 0, advantages: 1, threats: 0, triumphs: 0, despair: 0 };
|
|
43
|
-
case 8:
|
|
44
|
-
return { successes: 0, failures: 0, advantages: 2, threats: 0, triumphs: 0, despair: 0 };
|
|
45
|
-
default:
|
|
46
|
-
return { successes: 0, failures: 0, advantages: 0, threats: 0, triumphs: 0, despair: 0 };
|
|
47
|
-
}
|
|
48
|
-
};
|
|
49
|
-
var difficultyDieResult = function (roll) {
|
|
50
|
-
switch (roll) {
|
|
51
|
-
case 2:
|
|
52
|
-
return { successes: 0, failures: 1, advantages: 0, threats: 0, triumphs: 0, despair: 0 };
|
|
53
|
-
case 3:
|
|
54
|
-
return { successes: 0, failures: 2, advantages: 0, threats: 0, triumphs: 0, despair: 0 };
|
|
55
|
-
case 4:
|
|
56
|
-
case 5:
|
|
57
|
-
case 6:
|
|
58
|
-
return { successes: 0, failures: 0, advantages: 0, threats: 1, triumphs: 0, despair: 0 };
|
|
59
|
-
case 7:
|
|
60
|
-
return { successes: 0, failures: 0, advantages: 0, threats: 2, triumphs: 0, despair: 0 };
|
|
61
|
-
case 8:
|
|
62
|
-
return { successes: 0, failures: 1, advantages: 0, threats: 1, triumphs: 0, despair: 0 };
|
|
63
|
-
default:
|
|
64
|
-
return { successes: 0, failures: 0, advantages: 0, threats: 0, triumphs: 0, despair: 0 };
|
|
65
|
-
}
|
|
66
|
-
};
|
|
67
|
-
var proficiencyDieResult = function (roll) {
|
|
68
|
-
switch (roll) {
|
|
69
|
-
case 2:
|
|
70
|
-
case 3:
|
|
71
|
-
return { successes: 1, failures: 0, advantages: 0, threats: 0, triumphs: 0, despair: 0 };
|
|
72
|
-
case 4:
|
|
73
|
-
case 5:
|
|
74
|
-
return { successes: 2, failures: 0, advantages: 0, threats: 0, triumphs: 0, despair: 0 };
|
|
75
|
-
case 6:
|
|
76
|
-
return { successes: 0, failures: 0, advantages: 1, threats: 0, triumphs: 0, despair: 0 };
|
|
77
|
-
case 7:
|
|
78
|
-
case 8:
|
|
79
|
-
case 9:
|
|
80
|
-
return { successes: 1, failures: 0, advantages: 1, threats: 0, triumphs: 0, despair: 0 };
|
|
81
|
-
case 10:
|
|
82
|
-
case 11:
|
|
83
|
-
return { successes: 0, failures: 0, advantages: 2, threats: 0, triumphs: 0, despair: 0 };
|
|
84
|
-
case 12:
|
|
85
|
-
return { successes: 0, failures: 0, advantages: 0, threats: 0, triumphs: 1, despair: 0 };
|
|
86
|
-
default:
|
|
87
|
-
return { successes: 0, failures: 0, advantages: 0, threats: 0, triumphs: 0, despair: 0 };
|
|
88
|
-
}
|
|
89
|
-
};
|
|
90
|
-
var challengeDieResult = function (roll) {
|
|
91
|
-
switch (roll) {
|
|
92
|
-
case 2:
|
|
93
|
-
case 3:
|
|
94
|
-
return { successes: 0, failures: 1, advantages: 0, threats: 0, triumphs: 0, despair: 0 };
|
|
95
|
-
case 4:
|
|
96
|
-
case 5:
|
|
97
|
-
return { successes: 0, failures: 2, advantages: 0, threats: 0, triumphs: 0, despair: 0 };
|
|
98
|
-
case 6:
|
|
99
|
-
case 7:
|
|
100
|
-
return { successes: 0, failures: 0, advantages: 0, threats: 1, triumphs: 0, despair: 0 };
|
|
101
|
-
case 8:
|
|
102
|
-
case 9:
|
|
103
|
-
return { successes: 0, failures: 1, advantages: 0, threats: 1, triumphs: 0, despair: 0 };
|
|
104
|
-
case 10:
|
|
105
|
-
case 11:
|
|
106
|
-
return { successes: 0, failures: 0, advantages: 0, threats: 2, triumphs: 0, despair: 0 };
|
|
107
|
-
case 12:
|
|
108
|
-
return { successes: 0, failures: 0, advantages: 0, threats: 0, triumphs: 0, despair: 1 };
|
|
109
|
-
default:
|
|
110
|
-
return { successes: 0, failures: 0, advantages: 0, threats: 0, triumphs: 0, despair: 0 };
|
|
111
|
-
}
|
|
112
|
-
};
|
|
113
|
-
var sumResults = function (results) {
|
|
114
|
-
var sums = results.reduce(function (acc, curr) { return ({
|
|
115
|
-
successes: acc.successes + curr.successes,
|
|
116
|
-
failures: acc.failures + curr.failures,
|
|
117
|
-
advantages: acc.advantages + curr.advantages,
|
|
118
|
-
threats: acc.threats + curr.threats,
|
|
119
|
-
triumphs: acc.triumphs + curr.triumphs,
|
|
120
|
-
despair: acc.despair + curr.despair
|
|
121
|
-
}); }, {
|
|
122
|
-
successes: 0,
|
|
123
|
-
failures: 0,
|
|
124
|
-
advantages: 0,
|
|
125
|
-
threats: 0,
|
|
126
|
-
triumphs: 0,
|
|
127
|
-
despair: 0
|
|
128
|
-
});
|
|
129
|
-
// Calculate net successes/failures
|
|
130
|
-
var netSuccesses = 0;
|
|
131
|
-
var netFailures = 0;
|
|
132
|
-
if (sums.successes === sums.failures) {
|
|
133
|
-
netSuccesses = 0;
|
|
134
|
-
netFailures = 0;
|
|
135
|
-
}
|
|
136
|
-
else if (sums.successes > sums.failures) {
|
|
137
|
-
netSuccesses = sums.successes - sums.failures;
|
|
138
|
-
}
|
|
139
|
-
else {
|
|
140
|
-
netFailures = sums.failures - sums.successes;
|
|
141
|
-
}
|
|
142
|
-
return {
|
|
143
|
-
successes: netSuccesses,
|
|
144
|
-
failures: netFailures,
|
|
145
|
-
advantages: sums.advantages,
|
|
146
|
-
threats: sums.threats,
|
|
147
|
-
triumphs: sums.triumphs,
|
|
148
|
-
despair: sums.despair
|
|
149
|
-
};
|
|
150
|
-
};
|
|
151
|
-
var roll = function (pool) {
|
|
152
|
-
var _a, _b, _c, _d, _e, _f;
|
|
153
|
-
// Initialize all dice counts to 0 if undefined
|
|
154
|
-
var boostCount = (_a = pool.boostDice) !== null && _a !== void 0 ? _a : 0;
|
|
155
|
-
var abilityCount = (_b = pool.abilityDice) !== null && _b !== void 0 ? _b : 0;
|
|
156
|
-
var proficiencyCount = (_c = pool.proficiencyDice) !== null && _c !== void 0 ? _c : 0;
|
|
157
|
-
var setBackCount = (_d = pool.setBackDice) !== null && _d !== void 0 ? _d : 0;
|
|
158
|
-
var difficultyCount = (_e = pool.difficultyDice) !== null && _e !== void 0 ? _e : 0;
|
|
159
|
-
var challengeCount = (_f = pool.challengeDice) !== null && _f !== void 0 ? _f : 0;
|
|
160
|
-
// Ensure all dice counts are non-negative
|
|
161
|
-
var sanitizedPool = {
|
|
162
|
-
boostDice: Math.max(0, boostCount),
|
|
163
|
-
abilityDice: Math.max(0, abilityCount),
|
|
164
|
-
proficiencyDice: Math.max(0, proficiencyCount),
|
|
165
|
-
setBackDice: Math.max(0, setBackCount),
|
|
166
|
-
difficultyDice: Math.max(0, difficultyCount),
|
|
167
|
-
challengeDice: Math.max(0, challengeCount)
|
|
168
|
-
};
|
|
169
|
-
var detailedResults = [];
|
|
170
|
-
// Roll boost dice
|
|
171
|
-
for (var i = 0; i < sanitizedPool.boostDice; i++) {
|
|
172
|
-
var roll_1 = rollDie(6);
|
|
173
|
-
detailedResults.push({
|
|
174
|
-
type: 'boost',
|
|
175
|
-
roll: roll_1,
|
|
176
|
-
result: boostDieResult(roll_1)
|
|
177
|
-
});
|
|
178
|
-
}
|
|
179
|
-
// Roll ability dice
|
|
180
|
-
for (var i = 0; i < sanitizedPool.abilityDice; i++) {
|
|
181
|
-
var roll_2 = rollDie(8);
|
|
182
|
-
detailedResults.push({
|
|
183
|
-
type: 'ability',
|
|
184
|
-
roll: roll_2,
|
|
185
|
-
result: abilityDieResult(roll_2)
|
|
186
|
-
});
|
|
187
|
-
}
|
|
188
|
-
// Roll proficiency dice
|
|
189
|
-
for (var i = 0; i < sanitizedPool.proficiencyDice; i++) {
|
|
190
|
-
var roll_3 = rollDie(12);
|
|
191
|
-
detailedResults.push({
|
|
192
|
-
type: 'proficiency',
|
|
193
|
-
roll: roll_3,
|
|
194
|
-
result: proficiencyDieResult(roll_3)
|
|
195
|
-
});
|
|
196
|
-
}
|
|
197
|
-
// Roll setback dice
|
|
198
|
-
for (var i = 0; i < sanitizedPool.setBackDice; i++) {
|
|
199
|
-
var roll_4 = rollDie(6);
|
|
200
|
-
detailedResults.push({
|
|
201
|
-
type: 'setback',
|
|
202
|
-
roll: roll_4,
|
|
203
|
-
result: setBackDieResult(roll_4)
|
|
204
|
-
});
|
|
205
|
-
}
|
|
206
|
-
// Roll difficulty dice
|
|
207
|
-
for (var i = 0; i < sanitizedPool.difficultyDice; i++) {
|
|
208
|
-
var roll_5 = rollDie(8);
|
|
209
|
-
detailedResults.push({
|
|
210
|
-
type: 'difficulty',
|
|
211
|
-
roll: roll_5,
|
|
212
|
-
result: difficultyDieResult(roll_5)
|
|
213
|
-
});
|
|
214
|
-
}
|
|
215
|
-
// Roll challenge dice
|
|
216
|
-
for (var i = 0; i < sanitizedPool.challengeDice; i++) {
|
|
217
|
-
var roll_6 = rollDie(12);
|
|
218
|
-
detailedResults.push({
|
|
219
|
-
type: 'challenge',
|
|
220
|
-
roll: roll_6,
|
|
221
|
-
result: challengeDieResult(roll_6)
|
|
222
|
-
});
|
|
223
|
-
}
|
|
224
|
-
return {
|
|
225
|
-
results: detailedResults,
|
|
226
|
-
summary: sumResults(detailedResults.map(function (r) { return r.result; }))
|
|
227
|
-
};
|
|
228
|
-
};
|
|
229
|
-
exports.roll = roll;
|
package/src/types.js
DELETED