@certik/skynet 0.25.4 → 0.25.5

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/dist/cli.js CHANGED
@@ -33,11 +33,7 @@ function detectBin() {
33
33
  const wd = detectDirectory(process.argv[1], "package.json");
34
34
  return process.argv[1].slice(wd.length + path.sep.length).replace(path.sep, "/");
35
35
  }
36
- function getDeployBin(bin) {
37
- return bin.endsWith(".ts") ? `bun ${bin}` : bin;
38
- }
39
36
  export {
40
- getDeployBin,
41
37
  getBinaryName,
42
38
  detectWorkingDirectory,
43
39
  detectSkynetDirectory,
package/dist/deploy.js CHANGED
@@ -1,22 +1,3 @@
1
- // src/env.ts
2
- function ensureAndGet(envName, defaultValue) {
3
- return process.env[envName] || defaultValue;
4
- }
5
- function getEnvironment() {
6
- return ensureAndGet("SKYNET_ENVIRONMENT", "dev");
7
- }
8
- function getEnvOrThrow(envName) {
9
- if (!process.env[envName]) {
10
- throw new Error(`Must set environment variable ${envName}`);
11
- }
12
- return process.env[envName];
13
- }
14
- function isProduction() {
15
- return getEnvironment() === "prd";
16
- }
17
- function isDev() {
18
- return getEnvironment() === "dev";
19
- }
20
1
  // src/selector.ts
21
2
  function getSelectorDesc(selector) {
22
3
  return Object.keys(selector).map((name) => {
@@ -55,6 +36,25 @@ function getJobName(name, selectorFlags, mode) {
55
36
  }
56
37
  return jobName;
57
38
  }
39
+ // src/env.ts
40
+ function ensureAndGet(envName, defaultValue) {
41
+ return process.env[envName] || defaultValue;
42
+ }
43
+ function getEnvironment() {
44
+ return ensureAndGet("SKYNET_ENVIRONMENT", "dev");
45
+ }
46
+ function getEnvOrThrow(envName) {
47
+ if (!process.env[envName]) {
48
+ throw new Error(`Must set environment variable ${envName}`);
49
+ }
50
+ return process.env[envName];
51
+ }
52
+ function isProduction() {
53
+ return getEnvironment() === "prd";
54
+ }
55
+ function isDev() {
56
+ return getEnvironment() === "dev";
57
+ }
58
58
  // src/cli.ts
59
59
  import path from "path";
60
60
  import fs from "fs";
@@ -90,9 +90,6 @@ function detectBin() {
90
90
  const wd = detectDirectory(process.argv[1], "package.json");
91
91
  return process.argv[1].slice(wd.length + path.sep.length).replace(path.sep, "/");
92
92
  }
93
- function getDeployBin(bin) {
94
- return bin.endsWith(".ts") ? `bun ${bin}` : bin;
95
- }
96
93
  // src/deploy.ts
97
94
  import fs2 from "fs/promises";
98
95
  import fso from "fs";
package/dist/dynamodb.js CHANGED
@@ -1,25 +1,3 @@
1
- // src/util.ts
2
- function range(startAt, endAt, step) {
3
- const arr = [];
4
- for (let i = startAt;i <= endAt; i += step) {
5
- arr.push([i, Math.min(endAt, i + step - 1)]);
6
- }
7
- return arr;
8
- }
9
- function arrayGroup(array, groupSize) {
10
- const groups = [];
11
- for (let i = 0;i < array.length; i += groupSize) {
12
- groups.push(array.slice(i, i + groupSize));
13
- }
14
- return groups;
15
- }
16
- function fillRange(start, end) {
17
- const result = [];
18
- for (let i = start;i <= end; i++) {
19
- result.push(i);
20
- }
21
- return result;
22
- }
23
1
  // src/object-hash.ts
24
2
  import xh from "@node-rs/xxhash";
25
3
  function getHash(obj) {
@@ -146,6 +124,28 @@ function memoize(func, options) {
146
124
  }
147
125
  return pMemoize(func, options);
148
126
  }
127
+ // src/util.ts
128
+ function range(startAt, endAt, step) {
129
+ const arr = [];
130
+ for (let i = startAt;i <= endAt; i += step) {
131
+ arr.push([i, Math.min(endAt, i + step - 1)]);
132
+ }
133
+ return arr;
134
+ }
135
+ function arrayGroup(array, groupSize) {
136
+ const groups = [];
137
+ for (let i = 0;i < array.length; i += groupSize) {
138
+ groups.push(array.slice(i, i + groupSize));
139
+ }
140
+ return groups;
141
+ }
142
+ function fillRange(start, end) {
143
+ const result = [];
144
+ for (let i = start;i <= end; i++) {
145
+ result.push(i);
146
+ }
147
+ return result;
148
+ }
149
149
  // src/dynamodb.ts
150
150
  import {
151
151
  DynamoDBDocumentClient,
package/dist/indexer.js CHANGED
@@ -1,3 +1,41 @@
1
+ // src/selector.ts
2
+ function getSelectorDesc(selector) {
3
+ return Object.keys(selector).map((name) => {
4
+ return ` --${name.padEnd(14)}${selector[name].desc || selector[name].description || ""}`;
5
+ }).join(`
6
+ `);
7
+ }
8
+ function getSelectorFlags(selector) {
9
+ return Object.keys(selector).reduce((acc, name) => {
10
+ const flag = {
11
+ type: selector[name].type || "string",
12
+ ...selector[name]
13
+ };
14
+ if (!selector[name].optional && selector[name].isRequired !== false) {
15
+ flag.isRequired = true;
16
+ }
17
+ return { ...acc, [name]: flag };
18
+ }, {});
19
+ }
20
+ function toSelectorString(selectorFlags, delim = ",") {
21
+ return Object.keys(selectorFlags).sort().map((flag) => {
22
+ return `${flag}=${selectorFlags[flag]}`;
23
+ }).join(delim);
24
+ }
25
+ function normalizeSelectorValue(v) {
26
+ return v.replace(/[^A-Za-z0-9]+/g, "-");
27
+ }
28
+ function getJobName(name, selectorFlags, mode) {
29
+ const selectorNamePart = Object.keys(selectorFlags).sort().map((name2) => selectorFlags[name2]).join("-");
30
+ let jobName = name;
31
+ if (mode) {
32
+ jobName += `-${mode}`;
33
+ }
34
+ if (selectorNamePart.length > 0) {
35
+ jobName += `-${normalizeSelectorValue(selectorNamePart)}`;
36
+ }
37
+ return jobName;
38
+ }
1
39
  // src/env.ts
2
40
  function ensureAndGet(envName, defaultValue) {
3
41
  return process.env[envName] || defaultValue;
@@ -17,56 +55,63 @@ function isProduction() {
17
55
  function isDev() {
18
56
  return getEnvironment() === "dev";
19
57
  }
20
- // src/util.ts
21
- function range(startAt, endAt, step) {
22
- const arr = [];
23
- for (let i = startAt;i <= endAt; i += step) {
24
- arr.push([i, Math.min(endAt, i + step - 1)]);
25
- }
26
- return arr;
58
+ // src/log.ts
59
+ function isObject(a) {
60
+ return !!a && a.constructor === Object;
27
61
  }
28
- function arrayGroup(array, groupSize) {
29
- const groups = [];
30
- for (let i = 0;i < array.length; i += groupSize) {
31
- groups.push(array.slice(i, i + groupSize));
62
+ function print(o) {
63
+ if (Array.isArray(o)) {
64
+ return `[${o.map(print).join(", ")}]`;
32
65
  }
33
- return groups;
34
- }
35
- function fillRange(start, end) {
36
- const result = [];
37
- for (let i = start;i <= end; i++) {
38
- result.push(i);
66
+ if (isObject(o)) {
67
+ return `{${Object.keys(o).map((k) => `${k}: ${o[k]}`).join(", ")}}`;
39
68
  }
40
- return result;
69
+ return `${o}`;
41
70
  }
42
- // src/date.ts
43
- var MS_IN_A_DAY = 3600 * 24 * 1000;
44
- function getDateOnly(date) {
45
- return new Date(date).toISOString().split("T")[0];
71
+ function getLine(params) {
72
+ let line = "";
73
+ for (let i = 0, l = params.length;i < l; i++) {
74
+ line += `${print(params[i])} `.replace(/\n/gm, "\t");
75
+ }
76
+ return line.trim();
46
77
  }
47
- function findDateAfter(date, n) {
48
- const d = new Date(date);
49
- const after = new Date(d.getTime() + MS_IN_A_DAY * n);
50
- return getDateOnly(after);
78
+ function timestamp() {
79
+ return new Date().toISOString();
51
80
  }
52
- function daysInRange(from, to) {
53
- const fromTime = new Date(from).getTime();
54
- const toTime = new Date(to).getTime();
55
- if (fromTime > toTime) {
56
- throw new Error(`range to date couldn't be earlier than range from date`);
81
+ var inline = {
82
+ debug: function(...args) {
83
+ if (true) {
84
+ console.log(`${timestamp()} ${getLine(args)}`);
85
+ }
86
+ },
87
+ log: function(...args) {
88
+ if (true) {
89
+ console.log(`${timestamp()} ${getLine(args)}`);
90
+ }
91
+ },
92
+ error: function(...args) {
93
+ if (true) {
94
+ console.error(`${timestamp()} ${getLine(args)}`);
95
+ }
57
96
  }
58
- const daysBetween = Math.floor((toTime - fromTime) / MS_IN_A_DAY);
59
- const dates = [getDateOnly(new Date(fromTime))];
60
- for (let i = 1;i <= daysBetween; i += 1) {
61
- dates.push(getDateOnly(new Date(fromTime + i * MS_IN_A_DAY)));
97
+ };
98
+ var logger = {
99
+ debug: function(...args) {
100
+ if (true) {
101
+ console.log(`[${timestamp()}]`, ...args);
102
+ }
103
+ },
104
+ log: function(...args) {
105
+ if (true) {
106
+ console.log(`[${timestamp()}]`, ...args);
107
+ }
108
+ },
109
+ error: function(...args) {
110
+ if (true) {
111
+ console.error(`[${timestamp()}]`, ...args);
112
+ }
62
113
  }
63
- return dates;
64
- }
65
- function dateRange(from, to, step) {
66
- const days = daysInRange(from, to);
67
- const windows = arrayGroup(days, step);
68
- return windows.map((w) => [w[0], w[w.length - 1]]);
69
- }
114
+ };
70
115
  // src/object-hash.ts
71
116
  import xh from "@node-rs/xxhash";
72
117
  function getHash(obj) {
@@ -193,63 +238,28 @@ function memoize(func, options) {
193
238
  }
194
239
  return pMemoize(func, options);
195
240
  }
196
- // src/log.ts
197
- function isObject(a) {
198
- return !!a && a.constructor === Object;
199
- }
200
- function print(o) {
201
- if (Array.isArray(o)) {
202
- return `[${o.map(print).join(", ")}]`;
203
- }
204
- if (isObject(o)) {
205
- return `{${Object.keys(o).map((k) => `${k}: ${o[k]}`).join(", ")}}`;
241
+ // src/util.ts
242
+ function range(startAt, endAt, step) {
243
+ const arr = [];
244
+ for (let i = startAt;i <= endAt; i += step) {
245
+ arr.push([i, Math.min(endAt, i + step - 1)]);
206
246
  }
207
- return `${o}`;
247
+ return arr;
208
248
  }
209
- function getLine(params) {
210
- let line = "";
211
- for (let i = 0, l = params.length;i < l; i++) {
212
- line += `${print(params[i])} `.replace(/\n/gm, "\t");
249
+ function arrayGroup(array, groupSize) {
250
+ const groups = [];
251
+ for (let i = 0;i < array.length; i += groupSize) {
252
+ groups.push(array.slice(i, i + groupSize));
213
253
  }
214
- return line.trim();
215
- }
216
- function timestamp() {
217
- return new Date().toISOString();
254
+ return groups;
218
255
  }
219
- var inline = {
220
- debug: function(...args) {
221
- if (true) {
222
- console.log(`${timestamp()} ${getLine(args)}`);
223
- }
224
- },
225
- log: function(...args) {
226
- if (true) {
227
- console.log(`${timestamp()} ${getLine(args)}`);
228
- }
229
- },
230
- error: function(...args) {
231
- if (true) {
232
- console.error(`${timestamp()} ${getLine(args)}`);
233
- }
234
- }
235
- };
236
- var logger = {
237
- debug: function(...args) {
238
- if (true) {
239
- console.log(`[${timestamp()}]`, ...args);
240
- }
241
- },
242
- log: function(...args) {
243
- if (true) {
244
- console.log(`[${timestamp()}]`, ...args);
245
- }
246
- },
247
- error: function(...args) {
248
- if (true) {
249
- console.error(`[${timestamp()}]`, ...args);
250
- }
256
+ function fillRange(start, end) {
257
+ const result = [];
258
+ for (let i = start;i <= end; i++) {
259
+ result.push(i);
251
260
  }
252
- };
261
+ return result;
262
+ }
253
263
  // src/dynamodb.ts
254
264
  import {
255
265
  DynamoDBDocumentClient,
@@ -564,44 +574,6 @@ async function deleteRecordsByHashKey(tableName, indexName, hashKeyValue, verbos
564
574
  }
565
575
  return totalDeleted;
566
576
  }
567
- // src/selector.ts
568
- function getSelectorDesc(selector) {
569
- return Object.keys(selector).map((name) => {
570
- return ` --${name.padEnd(14)}${selector[name].desc || selector[name].description || ""}`;
571
- }).join(`
572
- `);
573
- }
574
- function getSelectorFlags(selector) {
575
- return Object.keys(selector).reduce((acc, name) => {
576
- const flag = {
577
- type: selector[name].type || "string",
578
- ...selector[name]
579
- };
580
- if (!selector[name].optional && selector[name].isRequired !== false) {
581
- flag.isRequired = true;
582
- }
583
- return { ...acc, [name]: flag };
584
- }, {});
585
- }
586
- function toSelectorString(selectorFlags, delim = ",") {
587
- return Object.keys(selectorFlags).sort().map((flag) => {
588
- return `${flag}=${selectorFlags[flag]}`;
589
- }).join(delim);
590
- }
591
- function normalizeSelectorValue(v) {
592
- return v.replace(/[^A-Za-z0-9]+/g, "-");
593
- }
594
- function getJobName(name, selectorFlags, mode) {
595
- const selectorNamePart = Object.keys(selectorFlags).sort().map((name2) => selectorFlags[name2]).join("-");
596
- let jobName = name;
597
- if (mode) {
598
- jobName += `-${mode}`;
599
- }
600
- if (selectorNamePart.length > 0) {
601
- jobName += `-${normalizeSelectorValue(selectorNamePart)}`;
602
- }
603
- return jobName;
604
- }
605
577
  // src/cli.ts
606
578
  import path from "path";
607
579
  import fs from "fs";
@@ -637,8 +609,33 @@ function detectBin() {
637
609
  const wd = detectDirectory(process.argv[1], "package.json");
638
610
  return process.argv[1].slice(wd.length + path.sep.length).replace(path.sep, "/");
639
611
  }
640
- function getDeployBin(bin) {
641
- return bin.endsWith(".ts") ? `bun ${bin}` : bin;
612
+ // src/date.ts
613
+ var MS_IN_A_DAY = 3600 * 24 * 1000;
614
+ function getDateOnly(date) {
615
+ return new Date(date).toISOString().split("T")[0];
616
+ }
617
+ function findDateAfter(date, n) {
618
+ const d = new Date(date);
619
+ const after = new Date(d.getTime() + MS_IN_A_DAY * n);
620
+ return getDateOnly(after);
621
+ }
622
+ function daysInRange(from, to) {
623
+ const fromTime = new Date(from).getTime();
624
+ const toTime = new Date(to).getTime();
625
+ if (fromTime > toTime) {
626
+ throw new Error(`range to date couldn't be earlier than range from date`);
627
+ }
628
+ const daysBetween = Math.floor((toTime - fromTime) / MS_IN_A_DAY);
629
+ const dates = [getDateOnly(new Date(fromTime))];
630
+ for (let i = 1;i <= daysBetween; i += 1) {
631
+ dates.push(getDateOnly(new Date(fromTime + i * MS_IN_A_DAY)));
632
+ }
633
+ return dates;
634
+ }
635
+ function dateRange(from, to, step) {
636
+ const days = daysInRange(from, to);
637
+ const windows = arrayGroup(days, step);
638
+ return windows.map((w) => [w[0], w[w.length - 1]]);
642
639
  }
643
640
  // src/indexer.ts
644
641
  import meow from "meow";
package/examples/api.ts CHANGED
File without changes
File without changes
File without changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@certik/skynet",
3
- "version": "0.25.4",
3
+ "version": "0.25.5",
4
4
  "description": "Skynet Shared JS library",
5
5
  "type": "module",
6
6
  "exports": {
package/src/dynamodb.ts CHANGED
@@ -475,8 +475,15 @@ async function deleteRecordsByHashKey(
475
475
  return totalDeleted;
476
476
  }
477
477
 
478
+ function destroyDynamoDB() {
479
+ if (_dynamoDB) {
480
+ _dynamoDB.destroy();
481
+ }
482
+ }
483
+
478
484
  export {
479
485
  getDocClient,
486
+ destroyDynamoDB,
480
487
  // export common dynamodb commands to make it easier to use
481
488
  ScanCommand,
482
489
  BatchWriteCommand,
package/src/indexer.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import meow from "meow";
2
- import { createRecord, getRecordByKey } from "./dynamodb";
2
+ import { createRecord, getRecordByKey, destroyDynamoDB } from "./dynamodb";
3
3
  import { getEnvironment } from "./env";
4
4
  import { exponentialRetry } from "./availability";
5
5
  import { range as numberRange, fillRange as fillNumberRange } from "./util";
@@ -213,6 +213,7 @@ function createModeIndexerApp<T extends IndexerStateValue, TSelector extends Sel
213
213
 
214
214
  if (mode === "reset") {
215
215
  await runReset(selectorFlags);
216
+ process.exit(0);
216
217
  } else if (mode === "rebuild") {
217
218
  const rebuildFrom = from || (await finalState.getMinId(selectorFlags));
218
219
  const rebuildTo = to || (await finalState.getMaxId(selectorFlags));
@@ -389,6 +390,8 @@ function createModeIndexerApp<T extends IndexerStateValue, TSelector extends Sel
389
390
  inline.log(
390
391
  `[MODE INDEXER] validated ${offsetRange(from, to)} ${finalState.type} successfully in ${Date.now() - startTime}ms`,
391
392
  );
393
+
394
+ process.exit(0);
392
395
  }
393
396
 
394
397
  async function execBuild(
@@ -521,7 +524,7 @@ function createModeIndexerApp<T extends IndexerStateValue, TSelector extends Sel
521
524
  )}`,
522
525
  );
523
526
 
524
- return;
527
+ process.exit(0);
525
528
  }
526
529
 
527
530
  inline.log(
@@ -646,6 +649,8 @@ ${selector ? getSelectorDesc(selector) : ""}
646
649
  } catch (err) {
647
650
  inline.error(err);
648
651
  process.exit(1);
652
+ } finally {
653
+ destroyDynamoDB();
649
654
  }
650
655
  }
651
656
 
@@ -731,6 +736,8 @@ ${selector ? getSelectorDesc(selector) : ""}
731
736
  }
732
737
 
733
738
  inline.log(`[INDEXER] build successfully in ${Date.now() - startTime}ms`);
739
+
740
+ process.exit(0);
734
741
  }
735
742
 
736
743
  return runBuild(cli.flags as ModeIndexerFlags<TSelector>).catch((err) => {
package/dist/email.d.ts DELETED
@@ -1,9 +0,0 @@
1
- interface SendEmailOptions {
2
- to: string | string[];
3
- subject: string;
4
- html: string;
5
- from: string;
6
- text?: string;
7
- }
8
- export declare function sendEmail({ to, subject, html, from, text }: SendEmailOptions): Promise<void>;
9
- export {};
package/dist/email.js DELETED
@@ -1,31 +0,0 @@
1
- // src/email.ts
2
- import Mailgun from "mailgun.js";
3
- import formData from "form-data";
4
- async function sendEmail({ to, subject, html, from, text }) {
5
- const apiKey = process.env.MAILGUN_API_KEY;
6
- if (!apiKey) {
7
- throw new Error("missing MAILGUN_API_KEY");
8
- }
9
- const domain = process.env.MAILGUN_DOMAIN;
10
- if (!domain) {
11
- throw new Error("missing MAILGUN_DOMAIN");
12
- }
13
- const mailgun = new Mailgun(formData);
14
- const mg = mailgun.client({ username: "api", key: apiKey });
15
- const recipients = Array.isArray(to) ? to : [to];
16
- try {
17
- await mg.messages.create(domain, {
18
- from,
19
- to: recipients,
20
- subject,
21
- ...text ? { text } : {},
22
- html
23
- });
24
- } catch (error) {
25
- console.error("failed to send email", error);
26
- throw error;
27
- }
28
- }
29
- export {
30
- sendEmail
31
- };