tinyrelayfile
tinyrelay/scripts/qa/generate-seedmark-fixture.mjs/

scripts/qa/generate-seedmark-fixture.mjs raw
1#!/usr/bin/env node
2
3// Regenerate the Seedmark v1 parity fixture from a local upstream checkout.
4// Usage: node scripts/qa/generate-seedmark-fixture.mjs ../seedmark [output]
5import {execFileSync} from 'node:child_process';
6import {createHash} from 'node:crypto';
7import {writeFile} from 'node:fs/promises';
8import {pathToFileURL} from 'node:url';
9import path from 'node:path';
10
11const upstream = path.resolve(process.argv[2] || '../seedmark');
12const output = path.resolve(process.argv[3] || 'internal/seedmark/testdata/v1.json');
13const expectedCommit = 'c808a940bc193f97512c02d58da33ecc28ba1f53';
14const commit = execFileSync('git', ['-C', upstream, 'rev-parse', 'HEAD'], {encoding: 'utf8'}).trim();
15if (commit !== expectedCommit) {
16 throw new Error(`Seedmark checkout is ${commit}; expected ${expectedCommit}`);
17}
18
19const {avatar, recipe} = await import(pathToFileURL(path.join(upstream, 'src/index.js')).href);
20const seeds = [
21 '',
22 'seedmark',
23 'a'.repeat(64),
24 'A'.repeat(64),
25 '0'.repeat(64),
26 'seed/\u0000part',
27 'é',
28 'e\u0301',
29 '猫🌱',
30 '👩‍💻',
31 ...Array.from({length: 1000}, (_, index) => `sample/${index}`),
32];
33const fixtures = seeds.map(seed => {
34 const svg = avatar(seed);
35 return {
36 seed,
37 family: recipe(seed).family,
38 sha256: createHash('sha256').update(svg).digest('hex'),
39 };
40});
41await writeFile(output, `${JSON.stringify(fixtures, null, 2)}\n`);
42process.stderr.write(`wrote ${fixtures.length} cases from Seedmark ${commit} to ${output}\n`);

About

ownerc01503e8035f
visibilitypublic
headd730679639bf

Maintainers

  • c01503e8035f owner
  • ba1b5beed5b5 agent hermes

Clone

  • https://012.run/npub1cq2s86qrtadf36eqq3epm38wmhdynrrcwxf84eldk3f94dkv7ttsrulrz5/tinyrelay.git

Refs