@boostd/boost 0.0.2 → 0.0.4

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/README.md CHANGED
@@ -1,9 +1,13 @@
1
1
  # @boostd/boost
2
2
 
3
+ ![Tests](https://github.com/arrno/boost/actions/workflows/tests.yml/badge.svg)
4
+
3
5
  `@boostd/boost` is a small placeholder CLI published ahead of the full Boost toolchain.
4
6
 
5
- Right now it does one simple thing:
6
- it boots, runs, and **reports “ok.”**
7
+ Right now it does two small things:
8
+
9
+ - `boost up` boots, runs, and **reports “ok.”**
10
+ - `boost haiku` prints a randomly generated observability haiku.
7
11
 
8
12
  ## Installation
9
13
 
@@ -15,6 +19,8 @@ npm install -g @boostd/boost
15
19
 
16
20
  - `boost up`
17
21
  Starts the CLI and reports ok.
22
+ - `boost haiku`
23
+ Generates and prints an original haiku.
18
24
 
19
25
  ## Why this exists
20
26
 
@@ -34,3 +40,11 @@ npm install # install dependencies
34
40
  npm run build # emit compiled files into dist/
35
41
  npm run test # build + sanity-check the CLI output
36
42
  ```
43
+
44
+ ## Releasing
45
+
46
+ ```bash
47
+ npm run release:patch # test -> npm version patch -> npm publish
48
+ npm run release:minor
49
+ npm run release:major
50
+ ```
@@ -0,0 +1,9 @@
1
+ export type Fragment = {
2
+ syllables: number;
3
+ text: string;
4
+ };
5
+ export type Lexicon = {
6
+ starters: Array<Fragment>;
7
+ enders: Array<Fragment>;
8
+ };
9
+ export declare const haikuLexicon: Lexicon;
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.haikuLexicon = void 0;
4
+ exports.haikuLexicon = {
5
+ starters: [
6
+ // 5 syllables (good for 5-line by itself, or 7-line +2 end)
7
+ { syllables: 5, text: "service mesh stays calm" },
8
+ { syllables: 5, text: "event streams stay bright" },
9
+ { syllables: 5, text: "cold starts fade to hush" },
10
+ { syllables: 5, text: "hot paths learn to wait" },
11
+ { syllables: 5, text: "load balancers breathe" },
12
+ { syllables: 5, text: "the cache remembers" },
13
+ { syllables: 5, text: "packets find their home" },
14
+ { syllables: 5, text: "threads untie their knots" },
15
+ { syllables: 5, text: "deploys land like snow" },
16
+ { syllables: 5, text: "shards drift into place" },
17
+ // 4 syllables (pairs nicely with 3 or with 2)
18
+ { syllables: 4, text: "database breathes" },
19
+ { syllables: 4, text: "feature flags glow" },
20
+ { syllables: 4, text: "runtime hums soft" },
21
+ { syllables: 4, text: "packet storms pass" },
22
+ { syllables: 4, text: "cloud edges breathe" },
23
+ { syllables: 4, text: "metrics read clean" },
24
+ { syllables: 4, text: "logs fall like rain" },
25
+ { syllables: 4, text: "traces weave slow" },
26
+ { syllables: 4, text: "workers drift back" },
27
+ { syllables: 4, text: "timeouts loosen" },
28
+ { syllables: 4, text: "backoffs settle" },
29
+ { syllables: 4, text: "shadows in prod" },
30
+ // 3 syllables (must pair cleanly with BOTH 2-syllable and 5-syllable ends)
31
+ { syllables: 3, text: "backend winds" },
32
+ { syllables: 3, text: "release trains" },
33
+ { syllables: 3, text: "debug lights" },
34
+ { syllables: 3, text: "version clocks" },
35
+ { syllables: 3, text: "caching tides" },
36
+ { syllables: 3, text: "queue echoes" },
37
+ { syllables: 3, text: "trace lanterns" },
38
+ { syllables: 3, text: "retry songs" },
39
+ { syllables: 3, text: "pagers blare" },
40
+ { syllables: 3, text: "docker dreams" },
41
+ // 2 syllables (these should be very “attachable”)
42
+ { syllables: 2, text: "ops dawn" },
43
+ { syllables: 2, text: "stack trace" },
44
+ { syllables: 2, text: "queues hum" },
45
+ { syllables: 2, text: "logs drift" },
46
+ { syllables: 2, text: "heaps churn" },
47
+ { syllables: 2, text: "builds pass" },
48
+ { syllables: 2, text: "nodes blink" },
49
+ { syllables: 2, text: "bits fall" },
50
+ { syllables: 2, text: "fans whir" },
51
+ ],
52
+ enders: [
53
+ // 5 syllables (works after 0/2/3 starters for 5 or 7 lines depending)
54
+ { syllables: 5, text: "where metrics paint night" },
55
+ { syllables: 5, text: "till pagers learn rest" },
56
+ { syllables: 5, text: "when clusters bloom slow" },
57
+ { syllables: 5, text: "while errors turn shy" },
58
+ { syllables: 5, text: "as dashboards breathe out" },
59
+ { syllables: 5, text: "where traces hum low" },
60
+ { syllables: 5, text: "when rollbacks feel kind" },
61
+ { syllables: 5, text: "as latency falls" },
62
+ { syllables: 5, text: "beneath status lights" },
63
+ { syllables: 5, text: "where uptime holds true" },
64
+ // 4 syllables (often best as a prepositional phrase / adverbial tail)
65
+ { syllables: 4, text: "through neon rain" },
66
+ { syllables: 4, text: "with new builds queued" },
67
+ { syllables: 4, text: "shapes steady time" },
68
+ { syllables: 4, text: "beyond paged dreams" },
69
+ { syllables: 4, text: "by quiet graphs" },
70
+ { syllables: 4, text: "in release light" },
71
+ { syllables: 4, text: "past red alerts" },
72
+ { syllables: 4, text: "with soft edges" },
73
+ { syllables: 4, text: "into warm logs" },
74
+ { syllables: 4, text: "over cool racks" },
75
+ // 3 syllables (short attachable tails)
76
+ { syllables: 3, text: "running hot" },
77
+ { syllables: 3, text: "guarding dawn" },
78
+ { syllables: 3, text: "mapping stars" },
79
+ { syllables: 3, text: "learning still" },
80
+ { syllables: 3, text: "drinking calm" },
81
+ { syllables: 3, text: "under load" },
82
+ { syllables: 3, text: "without fear" },
83
+ { syllables: 3, text: "in the mist" },
84
+ { syllables: 3, text: "past the noise" },
85
+ { syllables: 3, text: "with clear eyes" },
86
+ // 2 syllables (must work after almost anything)
87
+ { syllables: 2, text: "stay warm" },
88
+ { syllables: 2, text: "burn slow" },
89
+ { syllables: 2, text: "keep watch" },
90
+ { syllables: 2, text: "dream light" },
91
+ { syllables: 2, text: "hold still" },
92
+ { syllables: 2, text: "ease up" },
93
+ { syllables: 2, text: "drift on" },
94
+ { syllables: 2, text: "sleep soon" },
95
+ ],
96
+ };
97
+ //# sourceMappingURL=haiku-lexicon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"haiku-lexicon.js","sourceRoot":"","sources":["../src/haiku-lexicon.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { type Lexicon } from "./haiku-lexicon";
2
+ export declare class HaikuMaker {
3
+ private readonly lexicon;
4
+ private readonly starters;
5
+ private readonly endersByCount;
6
+ constructor(lexicon?: Lexicon);
7
+ private pickStarter;
8
+ private pickEnding;
9
+ private makeLine;
10
+ write(): string;
11
+ }
package/dist/haiku.js ADDED
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HaikuMaker = void 0;
4
+ const haiku_lexicon_1 = require("./haiku-lexicon");
5
+ const HAIKU_FORM = [5, 7, 5];
6
+ const rand = (arr) => arr[Math.floor(Math.random() * arr.length)];
7
+ const groupBySyllables = (fragments) => {
8
+ var _a;
9
+ const map = new Map();
10
+ for (const fragment of fragments) {
11
+ const bucket = (_a = map.get(fragment.syllables)) !== null && _a !== void 0 ? _a : [];
12
+ bucket.push(fragment);
13
+ map.set(fragment.syllables, bucket);
14
+ }
15
+ return map;
16
+ };
17
+ class HaikuMaker {
18
+ constructor(lexicon = haiku_lexicon_1.haikuLexicon) {
19
+ this.lexicon = lexicon;
20
+ this.starters = lexicon.starters;
21
+ this.endersByCount = groupBySyllables(lexicon.enders);
22
+ }
23
+ pickStarter(total, usedFragments) {
24
+ const options = this.starters.filter((starter) => {
25
+ if (usedFragments.has(starter))
26
+ return false;
27
+ const remaining = total - starter.syllables;
28
+ if (remaining <= 0)
29
+ return false;
30
+ const endings = this.endersByCount.get(remaining);
31
+ if (!endings)
32
+ return false;
33
+ return endings.some((ending) => !usedFragments.has(ending));
34
+ });
35
+ if (options.length === 0) {
36
+ throw new Error(`No haiku starter available for ${total} syllables.`);
37
+ }
38
+ return rand(options);
39
+ }
40
+ pickEnding(remaining, usedFragments) {
41
+ var _a;
42
+ const endings = (_a = this.endersByCount
43
+ .get(remaining)) === null || _a === void 0 ? void 0 : _a.filter((ending) => !usedFragments.has(ending));
44
+ if (!endings || endings.length === 0) {
45
+ throw new Error(`No haiku ending available for ${remaining} syllables.`);
46
+ }
47
+ return rand(endings);
48
+ }
49
+ makeLine(total, usedFragments) {
50
+ const start = this.pickStarter(total, usedFragments);
51
+ usedFragments.add(start);
52
+ const remaining = total - start.syllables;
53
+ const end = this.pickEnding(remaining, usedFragments);
54
+ usedFragments.add(end);
55
+ return `${start.text} ${end.text}`;
56
+ }
57
+ write() {
58
+ const usedFragments = new Set();
59
+ return HAIKU_FORM.map((count) => this.makeLine(count, usedFragments)).join("\n");
60
+ }
61
+ }
62
+ exports.HaikuMaker = HaikuMaker;
63
+ if (require.main === module) {
64
+ const writer = new HaikuMaker();
65
+ console.log(writer.write());
66
+ }
67
+ //# sourceMappingURL=haiku.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"haiku.js","sourceRoot":"","sources":["../src/haiku.ts"],"names":[],"mappings":";;;AAAA,mDAA4E;AAE5E,MAAM,UAAU,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAU,CAAC;AAGtC,MAAM,IAAI,GAAG,CAAI,GAAa,EAAK,EAAE,CACjC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AAEhD,MAAM,gBAAgB,GAAG,CACrB,SAA0B,EACE,EAAE;;IAC9B,MAAM,GAAG,GAAG,IAAI,GAAG,EAA2B,CAAC;IAC/C,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,MAAA,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,mCAAI,EAAE,CAAC;QACjD,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtB,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC,CAAC;AAEF,MAAa,UAAU;IAInB,YAA6B,UAAmB,4BAAY;QAA/B,YAAO,GAAP,OAAO,CAAwB;QACxD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,aAAa,GAAG,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1D,CAAC;IAEO,WAAW,CACf,KAAoB,EACpB,aAA4B;QAE5B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7C,IAAI,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC;gBAAE,OAAO,KAAK,CAAC;YAE7C,MAAM,SAAS,GAAG,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC;YAC5C,IAAI,SAAS,IAAI,CAAC;gBAAE,OAAO,KAAK,CAAC;YAEjC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAClD,IAAI,CAAC,OAAO;gBAAE,OAAO,KAAK,CAAC;YAE3B,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;QAEH,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CACX,kCAAkC,KAAK,aAAa,CACvD,CAAC;QACN,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC;IAEO,UAAU,CACd,SAAiB,EACjB,aAA4B;;QAE5B,MAAM,OAAO,GAAG,MAAA,IAAI,CAAC,aAAa;aAC7B,GAAG,CAAC,SAAS,CAAC,0CACb,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QACrD,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CACX,iCAAiC,SAAS,aAAa,CAC1D,CAAC;QACN,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC;IAEO,QAAQ,CACZ,KAAoB,EACpB,aAA4B;QAE5B,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QACrD,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACzB,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC;QAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QACtD,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvB,OAAO,GAAG,KAAK,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;IACvC,CAAC;IAEM,KAAK;QACR,MAAM,aAAa,GAAG,IAAI,GAAG,EAAY,CAAC;QAE1C,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAC5B,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,CACtC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC;CACJ;AApED,gCAoEC;AAED,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;IAC1B,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;IAChC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AAChC,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,2 @@
1
- declare const args: string[];
2
- declare const cmd: string;
3
- declare function banner(): void;
4
- declare function help(): void;
1
+ #!/usr/bin/env node
2
+ export {};
package/dist/index.js CHANGED
@@ -1,4 +1,7 @@
1
+ #!/usr/bin/env node
1
2
  "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const haiku_1 = require("./haiku");
2
5
  const args = process.argv.slice(2);
3
6
  const cmd = args[0];
4
7
  function banner() {
@@ -16,12 +19,18 @@ function help() {
16
19
  console.log(`boost
17
20
 
18
21
  Commands:
19
- boost up reports back ok
22
+ boost up reports back ok
23
+ boost haiku prints a random observability haiku
20
24
 
21
25
  Examples:
22
26
  boost up
27
+ boost haiku
23
28
  `);
24
29
  }
30
+ function doHaiku() {
31
+ const maker = new haiku_1.HaikuMaker();
32
+ console.log(maker.write());
33
+ }
25
34
  if (!cmd || cmd === "help" || cmd === "-h" || cmd === "--help") {
26
35
  help();
27
36
  process.exit(0);
@@ -30,6 +39,10 @@ if (cmd === "up") {
30
39
  banner();
31
40
  process.exit(0);
32
41
  }
42
+ if (cmd === "haiku") {
43
+ doHaiku();
44
+ process.exit(0);
45
+ }
33
46
  console.error(`Unknown command: ${cmd}\n`);
34
47
  help();
35
48
  process.exit(1);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAEpB,SAAS,MAAM;IACX,OAAO,CAAC,GAAG,CAAC;;;;;;;;qBAQK,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,IAAI;IACT,OAAO,CAAC,GAAG,CAAC;;;;;;;CAOf,CAAC,CAAC;AACH,CAAC;AAED,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;IAC7D,IAAI,EAAE,CAAC;IACP,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AAED,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;IACf,MAAM,EAAE,CAAC;IACT,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AAED,OAAO,CAAC,KAAK,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAAC;AAC3C,IAAI,EAAE,CAAC;AACP,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,mCAAqC;AAErC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAEpB,SAAS,MAAM;IACX,OAAO,CAAC,GAAG,CAAC;;;;;;;;qBAQK,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,IAAI;IACT,OAAO,CAAC,GAAG,CAAC;;;;;;;;;CASf,CAAC,CAAC;AACH,CAAC;AAED,SAAS,OAAO;IACZ,MAAM,KAAK,GAAG,IAAI,kBAAU,EAAE,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;AAC/B,CAAC;AAED,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;IAC7D,IAAI,EAAE,CAAC;IACP,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AAED,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;IACf,MAAM,EAAE,CAAC;IACT,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AAED,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;IAClB,OAAO,EAAE,CAAC;IACV,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AAED,OAAO,CAAC,KAAK,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAAC;AAC3C,IAAI,EAAE,CAAC;AACP,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@boostd/boost",
3
- "version": "0.0.2",
3
+ "version": "0.0.4",
4
4
  "description": "Placeholder CLI for boost",
5
5
  "engines": {
6
6
  "node": ">=18"
@@ -16,7 +16,12 @@
16
16
  "scripts": {
17
17
  "build": "tsc",
18
18
  "prepublishOnly": "npm run build",
19
- "test": "npm run build && node dist/index.js up"
19
+ "test": "npm run build && npm run test:cli && npm run test:haiku",
20
+ "test:cli": "node dist/index.js up",
21
+ "test:haiku": "jest",
22
+ "release:patch": "npm run test && npm version patch && npm publish",
23
+ "release:minor": "npm run test && npm version minor && npm publish",
24
+ "release:major": "npm run test && npm version major && npm publish"
20
25
  },
21
26
  "keywords": [
22
27
  "boost",
@@ -25,7 +30,17 @@
25
30
  "author": "",
26
31
  "license": "ISC",
27
32
  "devDependencies": {
33
+ "@types/jest": "^29.5.14",
28
34
  "@types/node": "^25.1.0",
35
+ "jest": "^29.7.0",
36
+ "ts-jest": "^29.2.5",
29
37
  "typescript": "^5.9.3"
38
+ },
39
+ "jest": {
40
+ "preset": "ts-jest",
41
+ "testEnvironment": "node",
42
+ "testMatch": [
43
+ "**/__tests__/**/*.test.ts"
44
+ ]
30
45
  }
31
46
  }