@sellout/models 0.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 (113) hide show
  1. package/.dist/interfaces/IAddress.d.ts +13 -0
  2. package/.dist/interfaces/IAddress.js +3 -0
  3. package/.dist/interfaces/IAddress.js.map +1 -0
  4. package/.dist/interfaces/IMetrics.d.ts +29 -0
  5. package/.dist/interfaces/IMetrics.js +3 -0
  6. package/.dist/interfaces/IMetrics.js.map +1 -0
  7. package/.dist/interfaces/IPagination.d.ts +4 -0
  8. package/.dist/interfaces/IPagination.js +3 -0
  9. package/.dist/interfaces/IPagination.js.map +1 -0
  10. package/.dist/interfaces/IQuery.d.ts +15 -0
  11. package/.dist/interfaces/IQuery.js +20 -0
  12. package/.dist/interfaces/IQuery.js.map +1 -0
  13. package/.dist/mongo/Address.d.ts +58 -0
  14. package/.dist/mongo/Address.js +60 -0
  15. package/.dist/mongo/Address.js.map +1 -0
  16. package/.dist/mongo/Metrics.d.ts +131 -0
  17. package/.dist/mongo/Metrics.js +137 -0
  18. package/.dist/mongo/Metrics.js.map +1 -0
  19. package/.dist/schemas/Address.d.ts +58 -0
  20. package/.dist/schemas/Address.js +60 -0
  21. package/.dist/schemas/Address.js.map +1 -0
  22. package/.dist/schemas/Metrics.d.ts +131 -0
  23. package/.dist/schemas/Metrics.js +137 -0
  24. package/.dist/schemas/Metrics.js.map +1 -0
  25. package/.dist/sellout-proto.js +92266 -0
  26. package/.dist/utils/EventUtil.d.ts +38 -0
  27. package/.dist/utils/EventUtil.js +188 -0
  28. package/.dist/utils/EventUtil.js.map +1 -0
  29. package/.dist/utils/FeeUtil.d.ts +7 -0
  30. package/.dist/utils/FeeUtil.js +37 -0
  31. package/.dist/utils/FeeUtil.js.map +1 -0
  32. package/.dist/utils/OrderUtil.d.ts +29 -0
  33. package/.dist/utils/OrderUtil.js +216 -0
  34. package/.dist/utils/OrderUtil.js.map +1 -0
  35. package/.dist/utils/WebFlowUtil.d.ts +7 -0
  36. package/.dist/utils/WebFlowUtil.js +10 -0
  37. package/.dist/utils/WebFlowUtil.js.map +1 -0
  38. package/package.json +29 -0
  39. package/src/interfaces/IAddress.ts +13 -0
  40. package/src/interfaces/IArtist.ts +14 -0
  41. package/src/interfaces/IArtistContact.ts +8 -0
  42. package/src/interfaces/IArtistPressKit.ts +8 -0
  43. package/src/interfaces/IEvent.ts +62 -0
  44. package/src/interfaces/IEventCustomField.ts +16 -0
  45. package/src/interfaces/IEventPromotion.ts +15 -0
  46. package/src/interfaces/IEventSchedule.ts +7 -0
  47. package/src/interfaces/IEventUpgrade.ts +13 -0
  48. package/src/interfaces/IFee.ts +46 -0
  49. package/src/interfaces/IFile.ts +7 -0
  50. package/src/interfaces/IMetrics.ts +33 -0
  51. package/src/interfaces/IOrder.ts +32 -0
  52. package/src/interfaces/IOrderCustomField.ts +7 -0
  53. package/src/interfaces/IOrderState.ts +19 -0
  54. package/src/interfaces/IOrderSummary.ts +37 -0
  55. package/src/interfaces/IOrderTicket.ts +15 -0
  56. package/src/interfaces/IOrderType.ts +5 -0
  57. package/src/interfaces/IOrderUpgrade.ts +14 -0
  58. package/src/interfaces/IOrganization.ts +19 -0
  59. package/src/interfaces/IPagination.ts +4 -0
  60. package/src/interfaces/IPerformance.ts +18 -0
  61. package/src/interfaces/IQuery.ts +30 -0
  62. package/src/interfaces/IRefund.ts +6 -0
  63. package/src/interfaces/IRole.ts +17 -0
  64. package/src/interfaces/IScan.ts +5 -0
  65. package/src/interfaces/ISeating.ts +9 -0
  66. package/src/interfaces/ISocialAccountLink.ts +14 -0
  67. package/src/interfaces/ITask.ts +22 -0
  68. package/src/interfaces/ITicketExchange.ts +11 -0
  69. package/src/interfaces/ITicketHold.ts +6 -0
  70. package/src/interfaces/ITicketTier.ts +9 -0
  71. package/src/interfaces/ITicketType.ts +12 -0
  72. package/src/interfaces/IUser.ts +26 -0
  73. package/src/interfaces/IUserProfile.ts +20 -0
  74. package/src/interfaces/IVenue.ts +17 -0
  75. package/src/interfaces/IWebFlow.ts +55 -0
  76. package/src/proto/artist.proto +156 -0
  77. package/src/proto/broadcast.proto +157 -0
  78. package/src/proto/common.proto +59 -0
  79. package/src/proto/email.proto +179 -0
  80. package/src/proto/error.proto +31 -0
  81. package/src/proto/event.proto +270 -0
  82. package/src/proto/fee.proto +196 -0
  83. package/src/proto/file-upload.proto +27 -0
  84. package/src/proto/order.proto +272 -0
  85. package/src/proto/organization.proto +107 -0
  86. package/src/proto/role.proto +136 -0
  87. package/src/proto/seating.proto +64 -0
  88. package/src/proto/stripe.proto +181 -0
  89. package/src/proto/task.proto +39 -0
  90. package/src/proto/twilio.proto +43 -0
  91. package/src/proto/user-profile.proto +124 -0
  92. package/src/proto/user.proto +284 -0
  93. package/src/proto/venue.proto +120 -0
  94. package/src/proto/web-flow.proto +315 -0
  95. package/src/schemas/Address.ts +57 -0
  96. package/src/schemas/Artist.ts +104 -0
  97. package/src/schemas/Event.ts +400 -0
  98. package/src/schemas/Fee.ts +74 -0
  99. package/src/schemas/Metrics.ts +134 -0
  100. package/src/schemas/Order.ts +200 -0
  101. package/src/schemas/Organization.ts +108 -0
  102. package/src/schemas/Role.ts +37 -0
  103. package/src/schemas/Seating.ts +34 -0
  104. package/src/schemas/User.ts +95 -0
  105. package/src/schemas/UserProfile.ts +67 -0
  106. package/src/schemas/Venue.ts +58 -0
  107. package/src/schemas/WebFlow.ts +132 -0
  108. package/src/utils/EventUtil.ts +186 -0
  109. package/src/utils/FeeUtil.ts +34 -0
  110. package/src/utils/OrderUtil.ts +226 -0
  111. package/src/utils/WebFlowUtil.ts +8 -0
  112. package/tsconfig.json +27 -0
  113. package/tslint.json +21 -0
@@ -0,0 +1,186 @@
1
+ import * as Time from '@sellout/utils/.dist/time';
2
+
3
+ export default {
4
+ hasBeenAnnouced(event): boolean {
5
+ const { schedule: { announceAt } } = event;
6
+ const now = Time.now();
7
+ return announceAt < now;
8
+ },
9
+ isAnnounced(event): boolean {
10
+ const { schedule: { announceAt, ticketsAt } } = event;
11
+ const now = Time.now();
12
+ return announceAt < now && now < ticketsAt;
13
+ },
14
+ isOnSale(event): boolean {
15
+ const { schedule: { ticketsAt, ticketsEndAt } } = event;
16
+ const now = Time.now();
17
+ return ticketsAt < now && now < ticketsEndAt;
18
+ },
19
+ isInProgress(event): boolean {
20
+ const { schedule: { startsAt, endsAt } } = event;
21
+ const now = Time.now();
22
+ return startsAt < now && now < endsAt;
23
+ },
24
+ saleHasEnded(event): boolean {
25
+ const { schedule: { ticketsEndAt } } = event;
26
+ const now = Time.now();
27
+ return ticketsEndAt < now;
28
+ },
29
+ hasEnded(event): boolean {
30
+ const { schedule: { endsAt } } = event;
31
+ const now = Time.now();
32
+ return endsAt < now;
33
+ },
34
+ hasActivePreSalePromotions(event): boolean{
35
+ return event.promotions
36
+ .filter(promotion => promotion.type === 'Pre-Sale Code')
37
+ .filter(promotion => promotion.active)
38
+ .length > 0;
39
+ },
40
+ qrCodeEmailAt(event): number {
41
+ const { performances: [performance] } = event;
42
+ const { schedule: { doorsAt, startsAt } } = performance;
43
+
44
+ if(event.sendQRCode === 'Upon Order') {
45
+ return Time.now();
46
+ }
47
+
48
+ if(event.sendQRCode === 'Two Weeks Before Show') {
49
+ const TWO_WEEKS = 14 * 24 * 60 * 60;
50
+ return startsAt - TWO_WEEKS;
51
+ }
52
+
53
+ return doorsAt - (600);
54
+ },
55
+ shouldSendOrderReceipt(event): boolean {
56
+ const now = Time.now();
57
+ const qrCodeEmailAt = this.qrCodeEmailAt(event);
58
+
59
+ // Never send a receipt if we are
60
+ // send a qr code upon order
61
+ if (event.sendQRCode === 'Upon Order') {
62
+ return false;
63
+ }
64
+
65
+ // Only send a receipt if QR codes for
66
+ // the event haven't already gone out
67
+ if(qrCodeEmailAt > now) {
68
+ return true;
69
+ }
70
+
71
+ return false;
72
+ },
73
+ /****************************************************************************************
74
+ Venue
75
+ ****************************************************************************************/
76
+ venueIds(event): string[] {
77
+ let venueIds = [event.venueId];
78
+ event.performances.forEach(performance => {
79
+ venueIds = venueIds.concat(performance.venueStageId)
80
+ });
81
+ venueIds = [...new Set(venueIds)];
82
+ venueIds = venueIds.filter(v => !!v);
83
+ return venueIds;
84
+ },
85
+ seatingId(event): string {
86
+ return event._id.replace('_', 'SAMH');
87
+ },
88
+ /****************************************************************************************
89
+ Artist
90
+ ****************************************************************************************/
91
+ artistIds(event): string[] {
92
+ let artistIds = [];
93
+ event.performances.forEach(performance => {
94
+ artistIds = artistIds
95
+ .concat(performance.headliningArtistIds)
96
+ .concat(performance.openingArtistIds);
97
+ });
98
+ artistIds = [...new Set(artistIds)];
99
+ artistIds = artistIds.filter(a => !!a);
100
+ return artistIds;
101
+ },
102
+ headliningArtistIds(event): string[] {
103
+ let artistIds = [];
104
+ event.performances.forEach(performance => {
105
+ artistIds = artistIds
106
+ .concat(performance.headliningArtistIds)
107
+ });
108
+ artistIds = [...new Set(artistIds)];
109
+ artistIds = artistIds.filter(a => !!a);
110
+ return artistIds;
111
+ },
112
+ openingArtistIds(event): string[] {
113
+ let artistIds = [];
114
+ event.performances.forEach(performance => {
115
+ artistIds = artistIds
116
+ .concat(performance.openingArtistIds);
117
+ });
118
+ artistIds = [...new Set(artistIds)];
119
+ artistIds = artistIds.filter(a => !!a);
120
+ return artistIds;
121
+ },
122
+ /****************************************************************************************
123
+ Tickets
124
+ ****************************************************************************************/
125
+ ticketType(event, ticketTypeId): any {
126
+ return event.ticketTypes.find(ticketType => ticketType._id === ticketTypeId);
127
+ },
128
+ remainingTicketQty(event, ticketTypeId: string | null = null): number {
129
+ if (ticketTypeId) {
130
+ let ticketType = event.ticketTypes.find(ticketType => ticketType._id === ticketTypeId);
131
+ if (!ticketType) return 0;
132
+ else return ticketType.remainingQty;
133
+ } else {
134
+ return event.ticketTypes.reduce((cur, next) => {
135
+ return cur + next.remainingQty;
136
+ }, 0);
137
+ }
138
+ },
139
+ remainingQtyByTicketTypes(event): object {
140
+ return event.ticketTypes.reduce((cur, ticketType) => {
141
+ cur[ticketType._id] = this.remainingTicketQty(event, ticketType._id);
142
+ return cur;
143
+ }, {});
144
+ },
145
+ purchaseLimitByTicketTypes(event): object {
146
+ return event.ticketTypes.reduce((cur, ticketType) => {
147
+ cur[ticketType._id] = ticketType.purchaseLimit;
148
+ return cur;
149
+ }, {});
150
+ },
151
+ getCurrentTierId(event, ticketTypeId: string): string {
152
+ const ticketType = event.ticketTypes.find(t => t._id.toString() === ticketTypeId);
153
+ const now = Time.now();
154
+ const tier = ticketType.tiers.find(tier => tier.startsAt < now && now < tier.endsAt);
155
+ return tier._id;
156
+ },
157
+ /****************************************************************************************
158
+ Upgrades
159
+ ****************************************************************************************/
160
+ upgrade(event, upgradeId): any {
161
+ return event.upgrades.find(upgrades => upgrades._id === upgradeId);
162
+ },
163
+ remainingUpgradeQty(event, upgradeId: string | null = null): number {
164
+ if (upgradeId) {
165
+ let upgrade = event.upgrades.find(upgrade => upgrade._id === upgradeId);
166
+ if (!upgrade) return 0;
167
+ else return upgrade.remainingQty;
168
+ } else {
169
+ return event.upgrades.reduce((cur, next) => {
170
+ return cur + next.remainingQty;
171
+ }, 0);
172
+ }
173
+ },
174
+ remainingQtyByUpgrades(event): object {
175
+ return event.upgrades.reduce((cur, upgrade) => {
176
+ cur[upgrade._id] = this.remainingUpgradeQty(event, upgrade._id);
177
+ return cur;
178
+ }, {});
179
+ },
180
+ purchaseLimitByUpgrades(event): object {
181
+ return event.upgrades.reduce((cur, upgrade) => {
182
+ cur[upgrade._id] = upgrade.purchaseLimit;
183
+ return cur;
184
+ }, {});
185
+ },
186
+ }
@@ -0,0 +1,34 @@
1
+ export default {
2
+ processingFees(fees) {
3
+ return fees.filter((fee) => {
4
+ if (fee.appliedBy === 'Sellout' || fee.appliedBy === 'Stripe') {
5
+ return true;
6
+ }
7
+ return false;
8
+ });
9
+ },
10
+ selloutFees(fees) {
11
+ return fees.filter((fee) => {
12
+ if (fee.appliedBy === 'Sellout') {
13
+ return true;
14
+ }
15
+ return false;
16
+ });
17
+ },
18
+ stripeFees(fees) {
19
+ return fees.filter((fee) => {
20
+ if (fee.appliedBy === 'Stripe') {
21
+ return false;
22
+ }
23
+ return true;
24
+ });
25
+ },
26
+ promoterFees(fees) {
27
+ return fees.filter((fee) => {
28
+ if (fee.appliedBy === 'Sellout' || fee.appliedBy === 'Stripe') {
29
+ return false;
30
+ }
31
+ return true;
32
+ });
33
+ },
34
+ };
@@ -0,0 +1,226 @@
1
+ import FeeUtil from "./FeeUtil";
2
+
3
+ export default {
4
+ /** **************************************************************************************
5
+ Order
6
+ *************************************************************************************** */
7
+ orderTotal(order, fees) {
8
+ // if (order.type === this.types.Complimentary) return 0;
9
+ // if (order.type === this.types.RSVP) fees = [];
10
+
11
+ if (
12
+ (!order.tickets || !order.tickets.length) &&
13
+ (!order.upgrades || !order.upgrades.length)
14
+ )
15
+ return 0;
16
+
17
+ if (!order.tickets) order.tickets = [];
18
+ if (!order.upgrades) order.upgrades = [];
19
+
20
+ const ticketFees = fees.filter(f => f.appliedTo === "Ticket");
21
+ const upgradeFees = fees.filter(f => f.appliedTo === "Upgrade");
22
+ let orderFees = fees.filter(f => f.appliedTo === "Order");
23
+
24
+ function applyTicketFee(ticket, fee) {
25
+ if (fee.filters.includes("Seated") && !ticket.seat) return 0;
26
+ const noMax = fee.maxAppliedToPrice === 0;
27
+ if (
28
+ (fee.minAppliedToPrice <= ticket.price &&
29
+ ticket.price <= fee.maxAppliedToPrice) ||
30
+ noMax
31
+ ) {
32
+ if (fee.type === "Flat") {
33
+ return fee.value;
34
+ }
35
+ if (fee.type === "Percent") {
36
+ return (ticket.price * fee.value) / 100;
37
+ }
38
+ } else {
39
+ return 0;
40
+ }
41
+ }
42
+
43
+ function applyUpgradeFee(upgrade, fee) {
44
+ const noMax = fee.maxAppliedToPrice === 0;
45
+ if (
46
+ (fee.minAppliedToPrice <= upgrade.price &&
47
+ upgrade.price <= fee.minAppliedToPrice) ||
48
+ noMax
49
+ ) {
50
+ if (fee.type === "Flat") {
51
+ return fee.value;
52
+ }
53
+ if (fee.type === "Percent") {
54
+ return (upgrade.price * fee.value) / 100;
55
+ }
56
+ } else {
57
+ return 0;
58
+ }
59
+ }
60
+
61
+ function applyOrderFee(orderSubtotal, fee) {
62
+ if (fee.type === "Flat") {
63
+ return orderSubtotal + fee.value;
64
+ }
65
+ if (fee.type === "Percent") {
66
+ return orderSubtotal / (1 - fee.value / 100);
67
+ }
68
+ }
69
+
70
+ const ticketTotal = order.tickets.reduce(
71
+ (cur, ticket) => cur + ticket.price,
72
+ 0
73
+ );
74
+
75
+ const ticketFeeTotal = order.tickets.reduce((cur, ticket) => {
76
+ return (
77
+ cur +
78
+ ticketFees.reduce((cur, fee) => cur + applyTicketFee(ticket, fee), 0)
79
+ );
80
+ }, 0);
81
+
82
+ const upgradeTotal = order.upgrades.reduce(
83
+ (cur, upgrade) => cur + upgrade.price,
84
+ 0
85
+ );
86
+
87
+ const upgradeFeeTotal = order.upgrades.reduce((cur, upgrade) => {
88
+ return (
89
+ cur +
90
+ upgradeFees.reduce((cur, fee) => cur + applyUpgradeFee(upgrade, fee), 0)
91
+ );
92
+ }, 0);
93
+
94
+ const orderSubtotal =
95
+ ticketTotal + ticketFeeTotal + upgradeTotal + upgradeFeeTotal;
96
+
97
+ // Order matters here. Flat type fees must be
98
+ // applied before Percent type fees
99
+ orderFees = orderFees.sort(({ type }) => {
100
+ if (type === "Flat") return -1;
101
+ return 1;
102
+ });
103
+
104
+ const orderTotal = orderFees.reduce((cur, fee) => {
105
+ return applyOrderFee(cur, fee);
106
+ }, orderSubtotal);
107
+
108
+ return Math.round(orderTotal);
109
+ },
110
+ orderTotalWithRefund(order, fees) {
111
+ return this.orderTotal(order, fees) - (order.refundedAmount || 0);
112
+ },
113
+ orderSubtotal(order) {
114
+ if (!order.tickets) order.tickets = [];
115
+ if (!order.upgrades) order.upgrades = [];
116
+
117
+ const ticketTotal = order.tickets.reduce(
118
+ (cur, ticket) => cur + ticket.price,
119
+ 0
120
+ );
121
+ const upgradeTotal = order.upgrades.reduce(
122
+ (cur, upgrade) => cur + upgrade.price,
123
+ 0
124
+ );
125
+ return ticketTotal + upgradeTotal;
126
+ },
127
+ orderFee(order, fees) {
128
+ if (!order.tickets) order.tickets = [];
129
+ if (!order.upgrades) order.upgrades = [];
130
+ return this.orderTotal(order, fees) - this.orderSubtotal(order);
131
+ },
132
+ // This one is special because stripe fees
133
+ // can be applied as a percentage
134
+ processingFees(order, fees) {
135
+ if (!order.tickets) order.tickets = [];
136
+ if (!order.upgrades) order.upgrades = [];
137
+ const total = this.orderTotal(order, fees);
138
+ const subtotal = this.orderSubtotal(order);
139
+ const promoterFees = this.promoterFees(order, fees);
140
+ return total - subtotal - promoterFees;
141
+ },
142
+ selloutFees(order, fees) {
143
+ if (!order.tickets) order.tickets = [];
144
+ if (!order.upgrades) order.upgrades = [];
145
+ fees = FeeUtil.selloutFees(fees);
146
+ return this.orderTotal(order, fees) - this.orderSubtotal(order);
147
+ },
148
+ // This one is special because stripe fees
149
+ // can be applied as a percentage
150
+ stripeFees(order, fees) {
151
+ if (!order.tickets) order.tickets = [];
152
+ if (!order.upgrades) order.upgrades = [];
153
+ const total = this.orderTotal(order, fees);
154
+ const subtotal = this.orderSubtotal(order);
155
+ const selloutFees = this.selloutFees(order, fees);
156
+ const promoterFees = this.promoterFees(order, fees);
157
+ return total - subtotal - selloutFees - promoterFees;
158
+ },
159
+ promoterFees(order, fees) {
160
+ if (!order.tickets) order.tickets = [];
161
+ if (!order.upgrades) order.upgrades = [];
162
+ fees = FeeUtil.promoterFees(fees);
163
+ return this.orderFee(order, fees);
164
+ },
165
+ /** **************************************************************************************
166
+ Ticket
167
+ *************************************************************************************** */
168
+ ticketTypeTotal(order, ticketTypeId) {
169
+ return order.tickets
170
+ .filter(t => t.ticketTypeId === ticketTypeId)
171
+ .reduce((cur, next) => cur + next.price, 0);
172
+ },
173
+ ticketCountsByTicketTypeId(order) {
174
+ return order.tickets.reduce((cur, ticket) => {
175
+ if (cur[ticket.ticketTypeId]) cur[ticket.ticketTypeId]++;
176
+ else cur[ticket.ticketTypeId] = 1;
177
+ return cur;
178
+ }, {});
179
+ },
180
+ ticketIsScannable(orderTicket) {
181
+ if (!orderTicket) return false;
182
+ let { scan = {}, refund = {} } = orderTicket;
183
+
184
+ if (scan.scanned && scan.scannedAt > 0) return false;
185
+ if (refund.refunded && refund.refundedAt > 0) return false;
186
+ return true;
187
+ },
188
+ seatIsSelected(order, seat) {
189
+ const allSeats = this.allSeats(order);
190
+ return allSeats.includes(seat);
191
+ },
192
+ allSeats(order) {
193
+ return order.tickets
194
+ .filter(ticket => Boolean(ticket.seat))
195
+ .map(ticket => ticket.seat);
196
+ },
197
+ ticketTypeSeats(order, ticketTypeId) {
198
+ return order.tickets
199
+ .filter(ticket => ticket.ticketTypeId === ticketTypeId)
200
+ .filter(ticket => Boolean(ticket.seat))
201
+ .map(ticket => ticket.seat);
202
+ },
203
+ /** **************************************************************************************
204
+ Upgrade
205
+ *************************************************************************************** */
206
+ upgradeTypeTotal(order, upgradeId) {
207
+ return order.upgrades
208
+ .filter(t => t.upgradeId === upgradeId)
209
+ .reduce((cur, next) => cur + next.price, 0);
210
+ },
211
+ upgradeCountsByUpgradeId(order) {
212
+ return order.upgrades.reduce((cur, upgrades) => {
213
+ if (cur[upgrades.upgradeId]) cur[upgrades.upgradeId]++;
214
+ else cur[upgrades.upgradeId] = 1;
215
+ return cur;
216
+ }, {});
217
+ },
218
+ upgradeIsScannable(orderUpgrade) {
219
+ if (!orderUpgrade) return false;
220
+ let { scan = {}, refund = {} } = orderUpgrade;
221
+
222
+ if (scan.scanned && scan.scannedAt > 0) return false;
223
+ if (refund.refunded && refund.refundedAt > 0) return false;
224
+ return true;
225
+ }
226
+ };
@@ -0,0 +1,8 @@
1
+ export default {
2
+ /****************************************************************************************
3
+ WebFlow Entity
4
+ ****************************************************************************************/
5
+ getSiteEntityId(entity, siteId) {
6
+
7
+ }
8
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,27 @@
1
+ {
2
+ "compileOnSave": true,
3
+ "compilerOptions": {
4
+ "baseUrl": ".",
5
+ "moduleResolution": "node",
6
+ "target": "es6",
7
+ "module": "commonjs",
8
+ "outDir": "./.dist/",
9
+ "declaration": true,
10
+ "sourceMap": true,
11
+ "strictNullChecks": true,
12
+ "noUnusedLocals": true,
13
+ "paths": {},
14
+ "types": [
15
+ "node",
16
+ ]
17
+ },
18
+ "typeRoots": [
19
+ "node_modules/@types"
20
+ ],
21
+ "include": [
22
+ "./src/**/*.ts"
23
+ ],
24
+ "exclude": [
25
+ "node_modules"
26
+ ]
27
+ }
package/tslint.json ADDED
@@ -0,0 +1,21 @@
1
+ {
2
+ "extends": "tslint-config-airbnb",
3
+ "rules": {
4
+ "max-line-length": {
5
+ "options": [120]
6
+ },
7
+ "no-console": false,
8
+ "ban": [
9
+ true,
10
+ {
11
+ "name": ["Math", "random"],
12
+ "message": "Use a better RNG, perhaps UUID?"
13
+ }
14
+ ]
15
+ },
16
+ "jsRules": {
17
+ "max-line-length": {
18
+ "options": [120]
19
+ }
20
+ }
21
+ }