Skip to content

Commit

Permalink
♻️ refactor(tests): fix testing, fix some bugs in the new pkgs
Browse files Browse the repository at this point in the history
Signed-off-by: Pauline <[email protected]>
  • Loading branch information
pauliesnug committed Feb 13, 2025
1 parent e458fc7 commit 551b1c9
Show file tree
Hide file tree
Showing 191 changed files with 3,533 additions and 3,163 deletions.
2 changes: 2 additions & 0 deletions .github/labels.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@
color: fbca04
- name: packages:crypto
color: fbca04
- name: packages:crypto
color: fbca04
- name: packages:eslint
color: fbca04
- name: packages:eslint-plugin
Expand Down
1 change: 1 addition & 0 deletions .npmrc
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
registry=https://registry.npmjs.org
@jsr:registry=https://npm.jsr.io
strict-dep-builds=true
2 changes: 1 addition & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -48,5 +48,5 @@
"postcss"
],

"npm.packageManager": "pnpm",
"npm.packageManager": "pnpm"
}
13 changes: 0 additions & 13 deletions bump.config.ts
Original file line number Diff line number Diff line change
@@ -1,19 +1,6 @@
import process from 'node:process';
import { defineConfig } from 'bumpp';

export default defineConfig({
all: false,
commit: true,
confirm: true,
cwd: process.cwd(),
ignoreScripts: false,
interface: true,
noGitCheck: true,
noVerify: false,
preid: 'beta',
push: true,
recursive: true,
release: 'prompt',
sign: true,
tag: true,
});
4 changes: 0 additions & 4 deletions eslint.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,4 @@ export default defineConfig({
},
tsconfigPath: 'tsconfig.json',
},
}, {
files: ['packages/eslint-plugin/src/rules/**/*.test.ts'],
name: 'userland/test/indent',
rules: { 'petal/indent-unindent': 'error' },
});
31 changes: 15 additions & 16 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@
"start:affected": "pnpm turbo run start --filter=...[origin/main] --concurrency=4",
"docs": "pnpm turbo run docs --concurrency=4",
"docs:affected": "pnpm turbo run docs --filter=...[origin/main] --concurrency=4",
"lint": "eslint --cache . --flag unstable_ts_config",
"lint": "eslint --cache .",
"lint:fix": "pnpm lint --fix",
"test": "vitest run",
"test:update": "vitest --update",
Expand All @@ -52,28 +52,28 @@
"devDependencies": {
"@arethetypeswrong/cli": "^0.17.3",
"@flowr/eslint": "workspace:^",
"@turbo/gen": "^2.3.3",
"@turbo/gen": "^2.4.2",
"@types/jsdom": "^21.1.7",
"@types/node": "^22.10.7",
"@vitest/coverage-v8": "^3.0.2",
"@vitest/ui": "^3.0.2",
"bumpp": "^9.10.1",
"@types/node": "^22.13.1",
"@vitest/coverage-v8": "^3.0.5",
"@vitest/ui": "^3.0.5",
"bumpp": "^10.0.3",
"colorette": "^2.0.20",
"destr": "^2.0.3",
"esbuild": "^0.24.2",
"esbuild": "^0.25.0",
"esbuild-plugin-file-path-extensions": "^2.1.4",
"eslint": "^9.18.0",
"eslint": "^9.20.1",
"jiti": "^2.4.2",
"jsdom": "^26.0.0",
"jsr": "^0.13.2",
"msw": "^2.7.0",
"pathe": "^2.0.2",
"tsup": "^8.3.5",
"pathe": "^2.0.3",
"tsup": "^8.3.6",
"tsx": "^4.19.2",
"turbo": "^2.3.3",
"turbo": "^2.4.2",
"typescript": "^5.7.3",
"vite": "^6.0.10",
"vitest": "^3.0.2"
"vite": "^6.1.0",
"vitest": "^3.0.5"
},
"pnpm": {
"patchedDependencies": {
Expand All @@ -87,9 +87,8 @@
},
"resolutions": {
"@eslint-community/eslint-utils": "^4.4.1",
"@typescript-eslint/utils": "^8.21.0",
"esbuild": "^0.24.2",
"eslint": "^9.18.0",
"@typescript-eslint/utils": "^8.24.0",
"eslint": "^9.20.1",
"tsx": "^4.19.2"
}
}
4 changes: 2 additions & 2 deletions packages/create-petal/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -55,15 +55,15 @@
"dist/**/*.mjs"
],
"engines": {
"node": ">=20"
"node": ">=22"
},
"scripts": {
"build": "tsup",
"start": "tsup --watch"
},
"dependencies": {
"@astrojs/cli-kit": "^0.4.1",
"giget": "^1.2.3"
"giget": "^1.2.4"
},
"devDependencies": {
"@flowr/utilities": "workspace:^",
Expand Down
13 changes: 13 additions & 0 deletions packages/crypto/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# @flowr/crypto

**A simple, type-safe cryptography utility library.**

## Installation

You can use the following command to install this package, or replace `pnpm add` with your package manager of choice.

```sh
pnpm add @flowr/crypto
```

## Usage
76 changes: 75 additions & 1 deletion packages/crypto/package.json
Original file line number Diff line number Diff line change
@@ -1 +1,75 @@
{}
{
"$schema": "https://json.schemastore.org/package.json",
"name": "@flowr/crypto",
"type": "module",
"version": "5.2.0",
"description": "A simple, type-safe cryptography utility library.",
"author": "@flowr",
"contributors": ["Pauline <[email protected]>"],
"license": "(LicenseRef-OQL-1.2 OR MIT OR Apache-2.0)",
"funding": "https://ko-fi.com/pauliesnug",
"homepage": "https://petal.dyn.gay",
"repository": {
"type": "git",
"url": "https://github.com/pulseflow/petal.git",
"directory": "packages/result"
},
"bugs": "https://github.com/pulseflow/petal/issues",
"keywords": [
"@flowr/crypto",
"petal",
"flowr",
"typescript",
"ts",
"standalone"
],
"sideEffects": false,
"exports": {
".": {
"import": {
"types": "./dist/esm/index.d.ts",
"default": "./dist/esm/index.js"
},
"require": {
"types": "./dist/cjs/index.d.cts",
"default": "./dist/cjs/index.cjs"
},
"browser": "./dist/iife/index.global.js"
},
"./package.json": "./package.json"
},
"main": "./dist/cjs/index.cjs",
"module": "./dist/esm/index.js",
"browser": "./dist/iife/index.global.js",
"unpkg": "./dist/iife/index.global.js",
"types": "./dist/esm/index.d.ts",
"files": [
"LICENSE*",
"README.md",
"dist/**/*.cjs",
"dist/**/*.d.cts",
"dist/**/*.d.mts",
"dist/**/*.d.ts",
"dist/**/*.js",
"dist/**/*.mjs"
],
"engines": {
"node": ">=22"
},
"scripts": {
"build": "pnpm gen && tsup && pnpm build:cjs",
"start": "pnpm gen && tsup --watch",
"build:cjs": "tsx ../scripts/src/cjs.ts",
"gen": "tsx ../scripts/src/gen.ts crypto --write"
},
"devDependencies": {
"@std/crypto": "npm:@jsr/std__crypto@^1.0.3",
"@std/encoding": "npm:@jsr/std__encoding@^1.0.3",
"scule": "^1.3.0",
"tweetnacl": "^1.0.3"
},
"publishConfig": {
"access": "public",
"provenance": true
}
}
2 changes: 2 additions & 0 deletions packages/crypto/src/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export * from './lib/advanced.ts';
export * from './lib/base.ts';
77 changes: 77 additions & 0 deletions packages/crypto/src/lib/advanced.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
import type { Base, Variation } from './base.ts';
import nacl from 'tweetnacl';
import b from './base.ts';

export type Bit = 0 | 1;
export type BufferLike = Uint8Array | ArrayBuffer | string;
export const rand: (n: number) => Uint8Array = n => nacl.randomBytes(n);
export const x25519: (n: Uint8Array) => Uint8Array = n => nacl.scalarMult.base(n);
export const sha512: (msg: BufferLike) => Uint8Array = msg => nacl.hash(toUint8Array(msg));
export const sha256: (msg: BufferLike) => Promise<Uint8Array> = async msg => crypto.subtle.digest('SHA-256', toUint8Array(msg)).then(toUint8Array);
export function pair(priv?: Uint8Array): readonly [Uint8Array, Uint8Array] {
priv = priv ?? rand(32);
return [priv, x25519(priv)] as const;
}

export function toUint8Array(buf: BufferLike): Uint8Array;
export function toUint8Array<B extends Base>(buf: string, base: B, variation?: Variation<B>): Uint8Array;
export function toUint8Array<B extends Base | undefined>(buf: BufferLike, base?: B, variation?: Variation<NonNullable<B>>): Uint8Array {
if (typeof buf === 'string') {
if (base)
return b(base, variation!).decode(buf);

return new TextEncoder().encode(buf);
}

return new Uint8Array(buf);
}

export function verify(msg: Uint8Array, sig: Uint8Array, publicKey: Uint8Array): boolean {
try {
return nacl.sign.detached.verify(msg, sig, publicKey);
}
catch (error) {
console.error(error);
return false;
}
}

export function uint8ArrayToBits(array: Uint8Array): Bit[] {
const result: number[] = Array.from({ length: array.length * 8 });
for (const [i, byte] of array.entries())
for (let j = 0; j < 8; j++)
result[i * 8 + j] = (byte >> j) & 1;

return result as Bit[];
}

export function bitGenerator(): () => Bit {
const context = {
consumed: 0,
random: uint8ArrayToBits(rand(1)),
};

const next = (): Bit => {
if (context.consumed === 8) {
context.random = uint8ArrayToBits(rand(1));
context.consumed = 0;
}

return context.random[context.consumed++];
};

return next;
}

export const bit = bitGenerator();

export function po2(num: bigint): bigint {
num |= num >> 1n;
num |= num >> 2n;
num |= num >> 4n;
num |= num >> 8n;
num |= num >> 16n;
num |= num >> 32n;
num |= num >> 64n;
return num + 1n;
}
58 changes: 58 additions & 0 deletions packages/crypto/src/lib/base.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import type { Ascii85Standard } from '@std/encoding/ascii85';
import { decodeAscii85, encodeAscii85 } from '@std/encoding/ascii85';
import { decodeBase32, encodeBase32 } from '@std/encoding/base32';
import { decodeBase58, encodeBase58 } from '@std/encoding/base58';
import { decodeBase64, encodeBase64 } from '@std/encoding/base64';
import { decodeBase64Url, encodeBase64Url } from '@std/encoding/base64url';
import { decodeHex, encodeHex } from '@std/encoding/hex';
// import { decodeVarint, encodeVarint } from '@std/encoding/varint';

export type Encodable = ArrayBuffer | Uint8Array | string;
export type Encoder = (data: Encodable) => string;
export type Decoder = (source: string) => Uint8Array;
export type StringDecoder = (source: string) => string;
export type Base64Standard = 'btoa' | 'url' | 'url_padded';

const textDecoder = new TextDecoder();
const $pad_encodeBase64Url: Encoder = data => encodeBase64(data).replace(/\+/g, '-').replace(/\//g, '_');
const $pad_decodeBase64Url: Decoder = source => decodeBase64(source.replace(/-/g, '+').replace(/_/g, '/'));
const $petal_encodeBase64 = (data: Encodable, standard: Base64Standard = 'btoa'): string => ({ btoa: encodeBase64, url: encodeBase64Url, url_padded: $pad_encodeBase64Url })[standard](data);
const $petal_encodeAscii85 = (data: Encodable, standard?: Ascii85Standard): string => encodeAscii85(data, { standard });
const $petal_decodeBase64 = (source: string, standard: Base64Standard = 'btoa'): Uint8Array => ({ btoa: decodeBase64, url: decodeBase64Url, url_padded: $pad_decodeBase64Url })[standard](source);
const $petal_decodeAscii85 = (source: string, standard?: Ascii85Standard): Uint8Array => decodeAscii85(source, { standard });

const encoders = {
16: encodeHex,
32: encodeBase32,
58: encodeBase58,
64: $petal_encodeBase64,
85: $petal_encodeAscii85,
};

const decoders = {
16: decodeHex,
32: decodeBase32,
58: decodeBase58,
64: $petal_decodeBase64,
85: $petal_decodeAscii85,
};

export type Base = Extract<keyof typeof encoders, number>;
export type Variation<B extends Base> = NonNullable<Parameters<(typeof encoders)[B]>[1]>;
export interface BaseProvider { encode: Encoder; decode: Decoder; decodeString: StringDecoder }

export function base(base: Base): BaseProvider;
export function base<B extends Base>(base: B, variation: Variation<B>): BaseProvider;
export function base<B extends Base>(base: B, variation?: Variation<B>): BaseProvider {
const encoder = encoders[base] as (data: Encodable, variation?: string) => string;
const decoder = decoders[base] as (source: string, variation?: string) => Uint8Array;

return {
encode: data => encoder(data, variation),
decode: source => decoder(source, variation),
decodeString: source => textDecoder.decode(decoder(source, variation)),
};
}

export { base as b };
export default base;
File renamed without changes.
2 changes: 1 addition & 1 deletion packages/crypto/tsup.config.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
import { createTsupConfig } from '../scripts/tsup.config.ts';

export default createTsupConfig('crypto', {});
export default createTsupConfig('crypto', { iife: { disabled: true } });
3 changes: 3 additions & 0 deletions packages/crypto/vitest.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { createVitestConfig } from '../scripts/vitest.config.ts';

export default createVitestConfig`crypto`;
Loading

0 comments on commit 551b1c9

Please sign in to comment.