@safe-vanity-blockie/core 0.4.0 → 0.5.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/dist/blo.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"blo.d.ts","sourceRoot":"","sources":["../src/blo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAW,MAAM,YAAY,CAAA;AAQxD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAS/D;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAIlD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAOrD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG,CAQnD;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CASlD;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAIhG;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAInD;AAED,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,SAAK,GAAG,MAAM,CA2BzD"}
1
+ {"version":3,"file":"blo.d.ts","sourceRoot":"","sources":["../src/blo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAW,MAAM,YAAY,CAAA;AAQxD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAS/D;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAIlD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAOrD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG,CAQnD;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CASlD;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAIhG;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAInD;AAED,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,SAAK,GAAG,MAAM,CA6BzD"}
package/dist/blo.js CHANGED
@@ -72,11 +72,13 @@ export function bloSvg(address, size = 64) {
72
72
  paths[data[i] - 1] += 'M' + x + square + 'M' + (7 - x) + square;
73
73
  }
74
74
  const path = (color, d) => '<path fill="hsl(' + color[0] + ' ' + color[1] + '% ' + color[2] + '%)" d="' + d + '"/>';
75
+ const numericSize = Number(size);
76
+ const safeSize = Number.isFinite(numericSize) && numericSize >= 0 ? numericSize : 64;
75
77
  return ('<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 8 8" shape-rendering="optimizeSpeed" ' +
76
78
  'width="' +
77
- size +
79
+ safeSize +
78
80
  '" height="' +
79
- size +
81
+ safeSize +
80
82
  '">' +
81
83
  path(b, 'M0,0H8V8H0z') +
82
84
  path(c, paths[0]) +
package/dist/blo.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"blo.js","sourceRoot":"","sources":["../src/blo.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"blo.js","sourceRoot":"","sources":["../src/blo.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -5,6 +5,6 @@ export { createKeccak256, type Keccak256 } from './keccak.js';
5
5
  export { type Candidate, compareCandidates, createMiner, Leaderboard, type MineOptions, type MineResult, } from './miner.js';
6
6
  export { apportion, colorContrast, compileFace, describeMatch, hslToRgb, isTwoColor, makeScorer, } from './scoring.js';
7
7
  export { filterCandidates, formatScore, type SelectReportedResult, scorePercent, selectReported, } from './select.js';
8
- export { BASE_TARGET, BASE_WEIGHTS, faceWithMouths, getTemplate, MOUTH_BG_WEIGHT, MOUTH_BUDGET, MOUTH_INDICES, MOUTH_STROKE_WEIGHT, MOUTHS, parseFaceSpec, TEMPLATES, } from './templates.js';
8
+ export { BASE_TARGET, BASE_WEIGHTS, faceSpecForTarget, faceWithMouths, getTemplate, MOUTH_BG_WEIGHT, MOUTH_BUDGET, MOUTH_INDICES, MOUTH_STROKE_WEIGHT, MOUTHS, mouthNamesForTarget, parseFaceSpec, TEMPLATES, targetNameForMouths, } from './templates.js';
9
9
  export type { BloImage, CompiledFace, FaceRegion, FaceSpec, FixedCell, Hsl, Palette, RegionAlternative, } from './types.js';
10
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,oBAAoB,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAA;AAC5F,OAAO,EACL,OAAO,EACP,WAAW,EACX,QAAQ,EACR,MAAM,EACN,UAAU,EACV,WAAW,EACX,QAAQ,EACR,QAAQ,GACT,MAAM,UAAU,CAAA;AACjB,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAA;AAC7D,OAAO,EACL,KAAK,SAAS,EACd,iBAAiB,EACjB,WAAW,EACX,WAAW,EACX,KAAK,WAAW,EAChB,KAAK,UAAU,GAChB,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,SAAS,EACT,aAAa,EACb,WAAW,EACX,aAAa,EACb,QAAQ,EACR,UAAU,EACV,UAAU,GACX,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,KAAK,oBAAoB,EACzB,YAAY,EACZ,cAAc,GACf,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,WAAW,EACX,YAAY,EACZ,cAAc,EACd,WAAW,EACX,eAAe,EACf,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,MAAM,EACN,aAAa,EACb,SAAS,GACV,MAAM,gBAAgB,CAAA;AACvB,YAAY,EACV,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,SAAS,EACT,GAAG,EACH,OAAO,EACP,iBAAiB,GAClB,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,oBAAoB,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAA;AAC5F,OAAO,EACL,OAAO,EACP,WAAW,EACX,QAAQ,EACR,MAAM,EACN,UAAU,EACV,WAAW,EACX,QAAQ,EACR,QAAQ,GACT,MAAM,UAAU,CAAA;AACjB,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAA;AAC7D,OAAO,EACL,KAAK,SAAS,EACd,iBAAiB,EACjB,WAAW,EACX,WAAW,EACX,KAAK,WAAW,EAChB,KAAK,UAAU,GAChB,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,SAAS,EACT,aAAa,EACb,WAAW,EACX,aAAa,EACb,QAAQ,EACR,UAAU,EACV,UAAU,GACX,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,KAAK,oBAAoB,EACzB,YAAY,EACZ,cAAc,GACf,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,eAAe,EACf,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,MAAM,EACN,mBAAmB,EACnB,aAAa,EACb,SAAS,EACT,mBAAmB,GACpB,MAAM,gBAAgB,CAAA;AACvB,YAAY,EACV,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,SAAS,EACT,GAAG,EACH,OAAO,EACP,iBAAiB,GAClB,MAAM,YAAY,CAAA"}
package/dist/index.js CHANGED
@@ -5,5 +5,5 @@ export { createKeccak256 } from './keccak.js';
5
5
  export { compareCandidates, createMiner, Leaderboard, } from './miner.js';
6
6
  export { apportion, colorContrast, compileFace, describeMatch, hslToRgb, isTwoColor, makeScorer, } from './scoring.js';
7
7
  export { filterCandidates, formatScore, scorePercent, selectReported, } from './select.js';
8
- export { BASE_TARGET, BASE_WEIGHTS, faceWithMouths, getTemplate, MOUTH_BG_WEIGHT, MOUTH_BUDGET, MOUTH_INDICES, MOUTH_STROKE_WEIGHT, MOUTHS, parseFaceSpec, TEMPLATES, } from './templates.js';
8
+ export { BASE_TARGET, BASE_WEIGHTS, faceSpecForTarget, faceWithMouths, getTemplate, MOUTH_BG_WEIGHT, MOUTH_BUDGET, MOUTH_INDICES, MOUTH_STROKE_WEIGHT, MOUTHS, mouthNamesForTarget, parseFaceSpec, TEMPLATES, targetNameForMouths, } from './templates.js';
9
9
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,oBAAoB,EAAsB,MAAM,cAAc,CAAA;AAC5F,OAAO,EACL,OAAO,EACP,WAAW,EACX,QAAQ,EACR,MAAM,EACN,UAAU,EACV,WAAW,EACX,QAAQ,EACR,QAAQ,GACT,MAAM,UAAU,CAAA;AACjB,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AACjD,OAAO,EAAE,eAAe,EAAkB,MAAM,aAAa,CAAA;AAC7D,OAAO,EAEL,iBAAiB,EACjB,WAAW,EACX,WAAW,GAGZ,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,SAAS,EACT,aAAa,EACb,WAAW,EACX,aAAa,EACb,QAAQ,EACR,UAAU,EACV,UAAU,GACX,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,gBAAgB,EAChB,WAAW,EAEX,YAAY,EACZ,cAAc,GACf,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,WAAW,EACX,YAAY,EACZ,cAAc,EACd,WAAW,EACX,eAAe,EACf,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,MAAM,EACN,aAAa,EACb,SAAS,GACV,MAAM,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,oBAAoB,EAAsB,MAAM,cAAc,CAAA;AAC5F,OAAO,EACL,OAAO,EACP,WAAW,EACX,QAAQ,EACR,MAAM,EACN,UAAU,EACV,WAAW,EACX,QAAQ,EACR,QAAQ,GACT,MAAM,UAAU,CAAA;AACjB,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AACjD,OAAO,EAAE,eAAe,EAAkB,MAAM,aAAa,CAAA;AAC7D,OAAO,EAEL,iBAAiB,EACjB,WAAW,EACX,WAAW,GAGZ,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,SAAS,EACT,aAAa,EACb,WAAW,EACX,aAAa,EACb,QAAQ,EACR,UAAU,EACV,UAAU,GACX,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,gBAAgB,EAChB,WAAW,EAEX,YAAY,EACZ,cAAc,GACf,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,eAAe,EACf,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,MAAM,EACN,mBAAmB,EACnB,aAAa,EACb,SAAS,EACT,mBAAmB,GACpB,MAAM,gBAAgB,CAAA"}
@@ -13,6 +13,57 @@ export declare const MOUTHS: readonly RegionAlternative[];
13
13
  export declare function faceWithMouths(name: string, mouthNames: string[]): FaceSpec;
14
14
  export declare const TEMPLATES: Record<string, FaceSpec>;
15
15
  export declare function getTemplate(name: string): FaceSpec;
16
+ /**
17
+ * The name a set of accepted expressions is known by, both as a FaceSpec name and as a `--target`
18
+ * value: the builtin `faces` when it is all of them, otherwise the names joined by commas.
19
+ *
20
+ * Commas because that is the one list separator the CLI already has — `--owners 0x..,0x..` — and a
21
+ * second convention for a second list is one more thing to remember at the prompt for no gain.
22
+ *
23
+ * Lives beside TEMPLATES rather than in the app that needs it, because it is one side of a
24
+ * round-trip whose other two sides are `faceSpecForTarget` (name → spec) and `mouthNamesForTarget`
25
+ * below (name → names) — the app names a selection with this, hands that name to the CLI or a URL,
26
+ * and either resolves it back to the same set of expressions. Split across two packages, the sides
27
+ * would be free to drift apart with nothing failing.
28
+ *
29
+ * Validates nothing: the caller builds the spec from the same names, and `faceWithMouths` is where
30
+ * an unknown one is caught, with the error that lists the expressions.
31
+ */
32
+ export declare function targetNameForMouths(mouthNames: string[]): string;
33
+ /**
34
+ * The expressions a `--target` name accepts.
35
+ *
36
+ * The third side of the round-trip whose other two are `targetNameForMouths` (names → name) and
37
+ * `faceSpecForTarget` (name → spec). It exists because a caller reading a name back needs the
38
+ * NAMES, not a spec: the browser app's state is the accepted expressions, and it builds its own
39
+ * spec from them (see the web package's `faceSpecFromSelection`). Handed a FaceSpec it would have
40
+ * to take that object apart again to find out what is in it, or keep a second parser of its own —
41
+ * and a second parser is how a `--target` at the prompt and a `target=` in a URL come to disagree
42
+ * about what `smile,open` means.
43
+ *
44
+ * Lives here for the reason `targetNameForMouths` gives: split across packages, the halves of a
45
+ * round-trip are free to drift apart with nothing failing.
46
+ *
47
+ * A repeat is deduped rather than rejected — it names the same expression twice, which is not
48
+ * ambiguous, and a second identical alternative is scoring work for no wider target.
49
+ */
50
+ export declare function mouthNamesForTarget(target: string): string[];
51
+ /**
52
+ * A `--target` name: a builtin template, or a comma-separated list of expressions — so
53
+ * `smile,frown` accepts either of those two mouths and nothing else.
54
+ *
55
+ * The list form exists because the builtins name only the two ends of the range, one expression or
56
+ * all five, while the browser app accepts any subset of them. A narrowed selection therefore had no
57
+ * name to be handed to the CLI at all, and the command the app offered for "run this same search
58
+ * natively" quietly searched a wider target than the screen it was copied from.
59
+ *
60
+ * The TEMPLATES lookup stays a fast path rather than being folded into the parse below, and not
61
+ * for speed: it returns the MEMOISED spec for a builtin name, and identity is load-bearing for the
62
+ * browser app, which keys a run's identity on the spec object (see MiningView's `sameRun`).
63
+ * Rebuilding an equal one here would restart a run over nothing. Its `hasOwn` also keeps the
64
+ * null-prototype guard exactly where the TEMPLATES comment explains it.
65
+ */
66
+ export declare function faceSpecForTarget(target: string): FaceSpec;
16
67
  /** Validates untrusted JSON (a `--target file.json`, or a future web designer export). */
17
68
  export declare function parseFaceSpec(input: unknown): FaceSpec;
18
69
  //# sourceMappingURL=templates.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,QAAQ,EAAa,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAEpF,eAAO,MAAM,YAAY,KAAK,CAAA;AAC9B,eAAO,MAAM,mBAAmB,IAAI,CAAA;AACpC,eAAO,MAAM,eAAe,IAAI,CAAA;AAEhC,iGAAiG;AACjG,eAAO,MAAM,WAAW,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,EAEzC,CAAA;AAED,mHAAmH;AACnH,eAAO,MAAM,YAAY,EAAE,SAAS,MAAM,EAEzC,CAAA;AAED,qEAAqE;AACrE,eAAO,MAAM,aAAa,EAAE,SAAS,MAAM,EAAqD,CAAA;AAEhG,eAAO,MAAM,MAAM,EAAE,SAAS,iBAAiB,EAO9C,CAAA;AAiBD,gGAAgG;AAChG,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,QAAQ,CAW3E;AAKD,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAQ7C,CAAA;AAEF,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAKlD;AAkBD,0FAA0F;AAC1F,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,CAoEtD"}
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,QAAQ,EAAa,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAEpF,eAAO,MAAM,YAAY,KAAK,CAAA;AAC9B,eAAO,MAAM,mBAAmB,IAAI,CAAA;AACpC,eAAO,MAAM,eAAe,IAAI,CAAA;AAEhC,iGAAiG;AACjG,eAAO,MAAM,WAAW,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,EAEzC,CAAA;AAED,mHAAmH;AACnH,eAAO,MAAM,YAAY,EAAE,SAAS,MAAM,EAEzC,CAAA;AAED,qEAAqE;AACrE,eAAO,MAAM,aAAa,EAAE,SAAS,MAAM,EAAqD,CAAA;AAEhG,eAAO,MAAM,MAAM,EAAE,SAAS,iBAAiB,EAO9C,CAAA;AAiBD,gGAAgG;AAChG,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,QAAQ,CAW3E;AAKD,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAQ7C,CAAA;AAEF,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAKlD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,CAKhE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAyB5D;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAO1D;AAkBD,0FAA0F;AAC1F,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,CAoEtD"}
package/dist/templates.js CHANGED
@@ -56,6 +56,89 @@ export function getTemplate(name) {
56
56
  }
57
57
  return TEMPLATES[name];
58
58
  }
59
+ /**
60
+ * The name a set of accepted expressions is known by, both as a FaceSpec name and as a `--target`
61
+ * value: the builtin `faces` when it is all of them, otherwise the names joined by commas.
62
+ *
63
+ * Commas because that is the one list separator the CLI already has — `--owners 0x..,0x..` — and a
64
+ * second convention for a second list is one more thing to remember at the prompt for no gain.
65
+ *
66
+ * Lives beside TEMPLATES rather than in the app that needs it, because it is one side of a
67
+ * round-trip whose other two sides are `faceSpecForTarget` (name → spec) and `mouthNamesForTarget`
68
+ * below (name → names) — the app names a selection with this, hands that name to the CLI or a URL,
69
+ * and either resolves it back to the same set of expressions. Split across two packages, the sides
70
+ * would be free to drift apart with nothing failing.
71
+ *
72
+ * Validates nothing: the caller builds the spec from the same names, and `faceWithMouths` is where
73
+ * an unknown one is caught, with the error that lists the expressions.
74
+ */
75
+ export function targetNameForMouths(mouthNames) {
76
+ const unique = [...new Set(mouthNames)];
77
+ const isEveryMouth = unique.length === MOUTHS.length && MOUTHS.every((mouth) => unique.includes(mouth.name));
78
+ return isEveryMouth ? 'faces' : unique.join(',');
79
+ }
80
+ /**
81
+ * The expressions a `--target` name accepts.
82
+ *
83
+ * The third side of the round-trip whose other two are `targetNameForMouths` (names → name) and
84
+ * `faceSpecForTarget` (name → spec). It exists because a caller reading a name back needs the
85
+ * NAMES, not a spec: the browser app's state is the accepted expressions, and it builds its own
86
+ * spec from them (see the web package's `faceSpecFromSelection`). Handed a FaceSpec it would have
87
+ * to take that object apart again to find out what is in it, or keep a second parser of its own —
88
+ * and a second parser is how a `--target` at the prompt and a `target=` in a URL come to disagree
89
+ * about what `smile,open` means.
90
+ *
91
+ * Lives here for the reason `targetNameForMouths` gives: split across packages, the halves of a
92
+ * round-trip are free to drift apart with nothing failing.
93
+ *
94
+ * A repeat is deduped rather than rejected — it names the same expression twice, which is not
95
+ * ambiguous, and a second identical alternative is scoring work for no wider target.
96
+ */
97
+ export function mouthNamesForTarget(target) {
98
+ // The only builtin that is not simply a list of expressions. Every other TEMPLATES key IS a
99
+ // mouth name, which the list branch below already reads, so this is the whole special case.
100
+ if (target === 'faces')
101
+ return MOUTHS.map((mouth) => mouth.name);
102
+ const known = new Set(MOUTHS.map((mouth) => mouth.name));
103
+ const names = [
104
+ ...new Set(target
105
+ .split(',')
106
+ .map((name) => name.trim())
107
+ .filter((name) => name.length > 0)),
108
+ ];
109
+ if (names.length === 0 || names.some((name) => !known.has(name))) {
110
+ // One error for every way of getting this wrong, naming both alphabets: a template is a legal
111
+ // target and an expression is a legal list entry, so a value like "faces,smile" is a plausible
112
+ // confusion of the two and neither list alone would explain it. It is also what a `+` between
113
+ // two otherwise valid expressions lands on, which is the whole message a wrong separator needs.
114
+ throw new Error(`unknown target "${target}"; expected a template (${Object.keys(TEMPLATES).join(', ')}) ` +
115
+ `or a comma-separated list of expressions (${MOUTHS.map((mouth) => mouth.name).join(', ')})`);
116
+ }
117
+ return names;
118
+ }
119
+ /**
120
+ * A `--target` name: a builtin template, or a comma-separated list of expressions — so
121
+ * `smile,frown` accepts either of those two mouths and nothing else.
122
+ *
123
+ * The list form exists because the builtins name only the two ends of the range, one expression or
124
+ * all five, while the browser app accepts any subset of them. A narrowed selection therefore had no
125
+ * name to be handed to the CLI at all, and the command the app offered for "run this same search
126
+ * natively" quietly searched a wider target than the screen it was copied from.
127
+ *
128
+ * The TEMPLATES lookup stays a fast path rather than being folded into the parse below, and not
129
+ * for speed: it returns the MEMOISED spec for a builtin name, and identity is load-bearing for the
130
+ * browser app, which keys a run's identity on the spec object (see MiningView's `sameRun`).
131
+ * Rebuilding an equal one here would restart a run over nothing. Its `hasOwn` also keeps the
132
+ * null-prototype guard exactly where the TEMPLATES comment explains it.
133
+ */
134
+ export function faceSpecForTarget(target) {
135
+ // Same null-prototype reasoning as TEMPLATES: `hasOwn`, so a URL- or argv-supplied
136
+ // "constructor" cannot resolve to an inherited key.
137
+ if (Object.hasOwn(TEMPLATES, target))
138
+ return TEMPLATES[target];
139
+ const names = mouthNamesForTarget(target);
140
+ return faceWithMouths(targetNameForMouths(names), names);
141
+ }
59
142
  /** Guards the `entry as Record<string, unknown>` casts below: a null or primitive entry would
60
143
  * otherwise surface as a raw TypeError from the first property read. */
61
144
  function requireObject(value, label) {
@@ -1 +1 @@
1
- {"version":3,"file":"templates.js","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@safe-vanity-blockie/core",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "description": "Isomorphic blo identicon, CREATE2 address derivation and mining primitives for Safe vanity blockies",
5
5
  "engines": {
6
6
  "node": ">=22"
package/src/blo.ts CHANGED
@@ -85,12 +85,14 @@ export function bloSvg(address: string, size = 64): string {
85
85
  }
86
86
  const path = (color: Hsl, d: string) =>
87
87
  '<path fill="hsl(' + color[0] + ' ' + color[1] + '% ' + color[2] + '%)" d="' + d + '"/>'
88
+ const numericSize = Number(size)
89
+ const safeSize = Number.isFinite(numericSize) && numericSize >= 0 ? numericSize : 64
88
90
  return (
89
91
  '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 8 8" shape-rendering="optimizeSpeed" ' +
90
92
  'width="' +
91
- size +
93
+ safeSize +
92
94
  '" height="' +
93
- size +
95
+ safeSize +
94
96
  '">' +
95
97
  path(b, 'M0,0H8V8H0z') +
96
98
  path(c, paths[0]) +
package/src/index.ts CHANGED
@@ -38,6 +38,7 @@ export {
38
38
  export {
39
39
  BASE_TARGET,
40
40
  BASE_WEIGHTS,
41
+ faceSpecForTarget,
41
42
  faceWithMouths,
42
43
  getTemplate,
43
44
  MOUTH_BG_WEIGHT,
@@ -45,8 +46,10 @@ export {
45
46
  MOUTH_INDICES,
46
47
  MOUTH_STROKE_WEIGHT,
47
48
  MOUTHS,
49
+ mouthNamesForTarget,
48
50
  parseFaceSpec,
49
51
  TEMPLATES,
52
+ targetNameForMouths,
50
53
  } from './templates.js'
51
54
  export type {
52
55
  BloImage,
package/src/templates.ts CHANGED
@@ -75,6 +75,97 @@ export function getTemplate(name: string): FaceSpec {
75
75
  return TEMPLATES[name]
76
76
  }
77
77
 
78
+ /**
79
+ * The name a set of accepted expressions is known by, both as a FaceSpec name and as a `--target`
80
+ * value: the builtin `faces` when it is all of them, otherwise the names joined by commas.
81
+ *
82
+ * Commas because that is the one list separator the CLI already has — `--owners 0x..,0x..` — and a
83
+ * second convention for a second list is one more thing to remember at the prompt for no gain.
84
+ *
85
+ * Lives beside TEMPLATES rather than in the app that needs it, because it is one side of a
86
+ * round-trip whose other two sides are `faceSpecForTarget` (name → spec) and `mouthNamesForTarget`
87
+ * below (name → names) — the app names a selection with this, hands that name to the CLI or a URL,
88
+ * and either resolves it back to the same set of expressions. Split across two packages, the sides
89
+ * would be free to drift apart with nothing failing.
90
+ *
91
+ * Validates nothing: the caller builds the spec from the same names, and `faceWithMouths` is where
92
+ * an unknown one is caught, with the error that lists the expressions.
93
+ */
94
+ export function targetNameForMouths(mouthNames: string[]): string {
95
+ const unique = [...new Set(mouthNames)]
96
+ const isEveryMouth =
97
+ unique.length === MOUTHS.length && MOUTHS.every((mouth) => unique.includes(mouth.name))
98
+ return isEveryMouth ? 'faces' : unique.join(',')
99
+ }
100
+
101
+ /**
102
+ * The expressions a `--target` name accepts.
103
+ *
104
+ * The third side of the round-trip whose other two are `targetNameForMouths` (names → name) and
105
+ * `faceSpecForTarget` (name → spec). It exists because a caller reading a name back needs the
106
+ * NAMES, not a spec: the browser app's state is the accepted expressions, and it builds its own
107
+ * spec from them (see the web package's `faceSpecFromSelection`). Handed a FaceSpec it would have
108
+ * to take that object apart again to find out what is in it, or keep a second parser of its own —
109
+ * and a second parser is how a `--target` at the prompt and a `target=` in a URL come to disagree
110
+ * about what `smile,open` means.
111
+ *
112
+ * Lives here for the reason `targetNameForMouths` gives: split across packages, the halves of a
113
+ * round-trip are free to drift apart with nothing failing.
114
+ *
115
+ * A repeat is deduped rather than rejected — it names the same expression twice, which is not
116
+ * ambiguous, and a second identical alternative is scoring work for no wider target.
117
+ */
118
+ export function mouthNamesForTarget(target: string): string[] {
119
+ // The only builtin that is not simply a list of expressions. Every other TEMPLATES key IS a
120
+ // mouth name, which the list branch below already reads, so this is the whole special case.
121
+ if (target === 'faces') return MOUTHS.map((mouth) => mouth.name)
122
+
123
+ const known = new Set(MOUTHS.map((mouth) => mouth.name))
124
+ const names = [
125
+ ...new Set(
126
+ target
127
+ .split(',')
128
+ .map((name) => name.trim())
129
+ .filter((name) => name.length > 0),
130
+ ),
131
+ ]
132
+ if (names.length === 0 || names.some((name) => !known.has(name))) {
133
+ // One error for every way of getting this wrong, naming both alphabets: a template is a legal
134
+ // target and an expression is a legal list entry, so a value like "faces,smile" is a plausible
135
+ // confusion of the two and neither list alone would explain it. It is also what a `+` between
136
+ // two otherwise valid expressions lands on, which is the whole message a wrong separator needs.
137
+ throw new Error(
138
+ `unknown target "${target}"; expected a template (${Object.keys(TEMPLATES).join(', ')}) ` +
139
+ `or a comma-separated list of expressions (${MOUTHS.map((mouth) => mouth.name).join(', ')})`,
140
+ )
141
+ }
142
+ return names
143
+ }
144
+
145
+ /**
146
+ * A `--target` name: a builtin template, or a comma-separated list of expressions — so
147
+ * `smile,frown` accepts either of those two mouths and nothing else.
148
+ *
149
+ * The list form exists because the builtins name only the two ends of the range, one expression or
150
+ * all five, while the browser app accepts any subset of them. A narrowed selection therefore had no
151
+ * name to be handed to the CLI at all, and the command the app offered for "run this same search
152
+ * natively" quietly searched a wider target than the screen it was copied from.
153
+ *
154
+ * The TEMPLATES lookup stays a fast path rather than being folded into the parse below, and not
155
+ * for speed: it returns the MEMOISED spec for a builtin name, and identity is load-bearing for the
156
+ * browser app, which keys a run's identity on the spec object (see MiningView's `sameRun`).
157
+ * Rebuilding an equal one here would restart a run over nothing. Its `hasOwn` also keeps the
158
+ * null-prototype guard exactly where the TEMPLATES comment explains it.
159
+ */
160
+ export function faceSpecForTarget(target: string): FaceSpec {
161
+ // Same null-prototype reasoning as TEMPLATES: `hasOwn`, so a URL- or argv-supplied
162
+ // "constructor" cannot resolve to an inherited key.
163
+ if (Object.hasOwn(TEMPLATES, target)) return TEMPLATES[target]
164
+
165
+ const names = mouthNamesForTarget(target)
166
+ return faceWithMouths(targetNameForMouths(names), names)
167
+ }
168
+
78
169
  /** Guards the `entry as Record<string, unknown>` casts below: a null or primitive entry would
79
170
  * otherwise surface as a raw TypeError from the first property read. */
80
171
  function requireObject(value: unknown, label: string): Record<string, unknown> {