@fulmenhq/tsfulmen 0.1.13 → 0.2.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/CHANGELOG.md +73 -512
- package/README.md +111 -28
- package/config/crucible-ts/agentic/roles/README.md +76 -0
- package/config/crucible-ts/agentic/roles/cicd.yaml +82 -0
- package/config/crucible-ts/agentic/roles/dataeng.yaml +104 -0
- package/config/crucible-ts/agentic/roles/devlead.yaml +84 -0
- package/config/crucible-ts/agentic/roles/devrev.yaml +105 -0
- package/config/crucible-ts/agentic/roles/entarch.yaml +101 -0
- package/config/crucible-ts/agentic/roles/infoarch.yaml +95 -0
- package/config/crucible-ts/agentic/roles/prodmktg.yaml +92 -0
- package/config/crucible-ts/agentic/roles/qa.yaml +148 -0
- package/config/crucible-ts/agentic/roles/secrev.yaml +101 -0
- package/config/crucible-ts/agentic/roles/uxdev.yaml +168 -0
- package/config/crucible-ts/branding/ecosystem.yaml +26 -0
- package/config/crucible-ts/library/foundry/exit-codes.snapshot.json +26 -0
- package/config/crucible-ts/library/foundry/exit-codes.yaml +28 -3
- package/config/crucible-ts/library/foundry/patterns.yaml +2 -2
- package/config/crucible-ts/library/foundry/signal-resolution-fixtures.yaml +207 -0
- package/config/crucible-ts/library/foundry/signals.yaml +21 -0
- package/config/crucible-ts/library/foundry/simplified-modes.snapshot.json +9 -1
- package/config/crucible-ts/library/{foundry/similarity-fixtures.yaml → similarity/fixtures.yaml} +1 -1
- package/config/crucible-ts/library/v1.0.0/module-manifest.yaml +1 -2
- package/config/crucible-ts/taxonomy/fixture-catalog.yaml +145 -0
- package/config/crucible-ts/taxonomy/languages.yaml +2 -2
- package/config/crucible-ts/taxonomy/library/foundry-catalogs/v1.1.0/catalogs.yaml +77 -0
- package/config/crucible-ts/taxonomy/library/platform-modules/v1.1.0/modules.yaml +722 -0
- package/config/crucible-ts/taxonomy/metrics.yaml +1 -1
- package/config/crucible-ts/taxonomy/repository-categories.yaml +134 -1
- package/dist/appidentity/index.d.ts +117 -35
- package/dist/appidentity/index.js +752 -592
- package/dist/appidentity/index.js.map +1 -1
- package/dist/config/index.js +118 -6
- package/dist/config/index.js.map +1 -1
- package/dist/crucible/index.js +118 -6
- package/dist/crucible/index.js.map +1 -1
- package/dist/errors/index.js +118 -6
- package/dist/errors/index.js.map +1 -1
- package/dist/foundry/index.d.ts +13 -676
- package/dist/foundry/index.js +118 -6
- package/dist/foundry/index.js.map +1 -1
- package/dist/foundry/similarity/index.d.ts +2 -2
- package/dist/fulhash/index.d.ts +64 -12
- package/dist/fulhash/index.js +292 -53
- package/dist/fulhash/index.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +753 -593
- package/dist/index.js.map +1 -1
- package/dist/{manager-D27vrdaS.d.ts → manager-CH3fX7zO.d.ts} +1 -1
- package/dist/pathfinder/index.js +368 -59
- package/dist/pathfinder/index.js.map +1 -1
- package/dist/reports/license-inventory.csv +302 -0
- package/dist/schema/index.js +118 -6
- package/dist/schema/index.js.map +1 -1
- package/dist/signals/index.d.ts +675 -0
- package/dist/signals/index.js +5790 -0
- package/dist/signals/index.js.map +1 -0
- package/dist/similarity/index.d.ts +2 -0
- package/dist/similarity/index.js +136 -0
- package/dist/similarity/index.js.map +1 -0
- package/dist/{suggest-Cv7SVQRu.d.ts → suggest-D8LbwtPV.d.ts} +1 -1
- package/dist/telemetry/http/index.js +704 -591
- package/dist/telemetry/http/index.js.map +1 -1
- package/dist/telemetry/index.js +118 -6
- package/dist/telemetry/index.js.map +1 -1
- package/dist/telemetry/prometheus/index.d.ts +1 -1
- package/dist/telemetry/prometheus/index.js +175 -11
- package/dist/telemetry/prometheus/index.js.map +1 -1
- package/package.json +15 -6
- package/schemas/crucible-ts/assessment/v1.0.0/severity-definitions.schema.json +1 -1
- package/schemas/crucible-ts/config/fulmen-ecosystem/v1.0.0/fulmen-config-paths.schema.json +1 -1
- package/schemas/crucible-ts/config/repository/app-identity/v1.0.0/app-identity.schema.json +3 -3
- package/schemas/crucible-ts/config/repository/v1.0.0/lifecycle-phase.json +1 -1
- package/schemas/crucible-ts/config/repository-category/codex/v1.0.0/codex-config.schema.json +1 -1
- package/schemas/crucible-ts/config/standards/v1.0.0/adr-adoption-status.json +1 -1
- package/schemas/crucible-ts/config/standards/v1.0.0/adr-frontmatter.schema.json +3 -3
- package/schemas/crucible-ts/config/standards/v1.0.0/adr-lifecycle-status.json +1 -1
- package/schemas/crucible-ts/config/sync-keys.schema.yaml +14 -0
- package/schemas/crucible-ts/content/ssot-provenance/v1.0.0/ssot-provenance.schema.json +1 -1
- package/schemas/crucible-ts/design/README.md +159 -0
- package/schemas/crucible-ts/design/core/v1.0.0/component-states.schema.json +204 -0
- package/schemas/crucible-ts/design/core/v1.0.0/semantic-colors.schema.json +179 -0
- package/schemas/crucible-ts/design/core/v1.0.0/spacing-scale.schema.json +165 -0
- package/schemas/crucible-ts/design/core/v1.0.0/typography-roles.schema.json +195 -0
- package/schemas/crucible-ts/design/tui/v1.0.0/color-palette.schema.json +303 -0
- package/schemas/crucible-ts/design/tui/v1.0.0/component.schema.json +374 -0
- package/schemas/crucible-ts/design/tui/v1.0.0/layout.schema.json +272 -0
- package/schemas/crucible-ts/design/tui/v1.0.0/theme.schema.json +205 -0
- package/schemas/crucible-ts/design/tui/v1.0.0/typography.schema.json +316 -0
- package/schemas/crucible-ts/devsecops/lorage-central/activity/v1.0.0/activity.schema.json +1 -1
- package/schemas/crucible-ts/devsecops/lorage-central/credentials/v1.0.0/credentials.schema.json +1 -1
- package/schemas/crucible-ts/devsecops/lorage-central/policy/v1.0.0/policy.schema.json +1 -1
- package/schemas/crucible-ts/devsecops/lorage-central/recipe/v1.0.0/recipe.schema.json +1 -1
- package/schemas/crucible-ts/devsecops/lorage-central/runbooks/v1.0.0/runbook.schema.json +1 -1
- package/schemas/crucible-ts/devsecops/lorage-central/tenant/v1.0.0/tenant.schema.json +1 -1
- package/schemas/crucible-ts/devsecops/secrets/v1.0.0/secrets.schema.json +1 -1
- package/schemas/crucible-ts/error-handling/v1.0.0/error-response.schema.json +1 -1
- package/schemas/crucible-ts/library/foundry/v1.0.0/country-codes.schema.json +1 -1
- package/schemas/crucible-ts/library/foundry/v1.0.0/exit-codes.schema.json +1 -1
- package/schemas/crucible-ts/library/foundry/v1.0.0/http-status-groups.schema.json +1 -1
- package/schemas/crucible-ts/library/foundry/v1.0.0/mime-types.schema.json +1 -1
- package/schemas/crucible-ts/library/foundry/v1.0.0/patterns.schema.json +1 -1
- package/schemas/crucible-ts/library/foundry/v1.0.0/signal-resolution-fixtures.schema.json +140 -0
- package/schemas/crucible-ts/library/foundry/v1.0.0/signals.schema.json +6 -1
- package/schemas/crucible-ts/library/fulencode/v1.0.0/fulencode-config.schema.json +1 -1
- package/schemas/crucible-ts/library/fulhash/v1.0.0/checksum-string.schema.json +2 -2
- package/schemas/crucible-ts/library/fulhash/v1.0.0/digest.schema.json +61 -1
- package/schemas/crucible-ts/library/fulhash/v1.0.0/fixtures.schema.json +1 -1
- package/schemas/crucible-ts/library/fulpack/v1.0.0/archive-entry.schema.json +1 -1
- package/schemas/crucible-ts/library/fulpack/v1.0.0/archive-info.schema.json +1 -1
- package/schemas/crucible-ts/library/fulpack/v1.0.0/archive-manifest.schema.json +2 -2
- package/schemas/crucible-ts/library/fulpack/v1.0.0/create-options.schema.json +1 -1
- package/schemas/crucible-ts/library/fulpack/v1.0.0/extract-options.schema.json +1 -1
- package/schemas/crucible-ts/library/fulpack/v1.0.0/extract-result.schema.json +1 -1
- package/schemas/crucible-ts/library/fulpack/v1.0.0/scan-options.schema.json +1 -1
- package/schemas/crucible-ts/library/fulpack/v1.0.0/validation-result.schema.json +1 -1
- package/schemas/crucible-ts/library/module-manifest/v1.0.0/module-manifest.schema.json +1 -1
- package/schemas/crucible-ts/library/{foundry → similarity}/v1.0.0/similarity.schema.json +2 -2
- package/schemas/crucible-ts/library/{foundry → similarity}/v2.0.0/similarity.schema.json +2 -2
- package/schemas/crucible-ts/observability/metrics/v1.0.0/metrics-event.schema.json +1 -1
- package/schemas/crucible-ts/pathfinder/v1.0.0/find-query.schema.json +1 -1
- package/schemas/crucible-ts/pathfinder/v1.0.0/finder-config.schema.json +1 -1
- package/schemas/crucible-ts/pathfinder/v1.0.0/path-result.schema.json +1 -1
- package/schemas/crucible-ts/protocol/http/v1.0.0/error-response.schema.json +1 -1
- package/schemas/crucible-ts/protocol/http/v1.0.0/health-response.schema.json +1 -1
- package/schemas/crucible-ts/protocol/http/v1.0.0/success-response.schema.json +1 -1
- package/schemas/crucible-ts/protocol/http/v1.0.0/version-response.schema.json +1 -1
- package/schemas/crucible-ts/server/management/v1.0.0/server-management.schema.json +1 -1
- package/schemas/crucible-ts/standards/publishing/v1.0.0/spec-catalog.schema.json +134 -0
- package/schemas/crucible-ts/taxonomy/devsecops/auth-methods/v1.0.0/auth-methods-key.schema.json +1 -1
- package/schemas/crucible-ts/taxonomy/devsecops/auth-methods/v1.0.0/auth-methods-metadata.schema.json +1 -1
- package/schemas/crucible-ts/taxonomy/devsecops/geo/v1.0.0/geo-key.schema.json +1 -1
- package/schemas/crucible-ts/taxonomy/devsecops/geo/v1.0.0/geo-metadata.schema.json +1 -1
- package/schemas/crucible-ts/taxonomy/devsecops/infra-phases/v1.0.0/infra-phases-key.schema.json +1 -1
- package/schemas/crucible-ts/taxonomy/devsecops/infra-phases/v1.0.0/infra-phases-metadata.schema.json +1 -1
- package/schemas/crucible-ts/taxonomy/devsecops/infra-providers/v1.0.0/infra-providers-key.schema.json +1 -1
- package/schemas/crucible-ts/taxonomy/devsecops/infra-providers/v1.0.0/infra-providers-metadata.schema.json +1 -1
- package/schemas/crucible-ts/taxonomy/devsecops/modules/v1.0.0/devsecops-module-entry.schema.json +1 -1
- package/schemas/crucible-ts/taxonomy/fixture/v1.0.0/fixture-catalog.schema.json +166 -0
- package/schemas/crucible-ts/taxonomy/language/v1.0.0/language-key.schema.json +1 -1
- package/schemas/crucible-ts/taxonomy/language/v1.0.0/language-metadata.schema.json +1 -1
- package/schemas/crucible-ts/taxonomy/library/foundry-catalogs/v1.1.0/catalog-entry.schema.json +98 -0
- package/schemas/crucible-ts/taxonomy/library/fulencode/detection-confidence/v1.0.0/levels.schema.json +1 -1
- package/schemas/crucible-ts/taxonomy/library/fulencode/encoding-families/v1.0.0/families.schema.json +1 -1
- package/schemas/crucible-ts/taxonomy/library/fulencode/normalization-profiles/v1.0.0/profiles.schema.json +1 -1
- package/schemas/crucible-ts/taxonomy/library/fulhash/algorithms/v1.0.0/algorithms.yaml +16 -0
- package/schemas/crucible-ts/taxonomy/library/modules/v1.0.0/module-entry.schema.json +1 -1
- package/schemas/crucible-ts/taxonomy/library/modules/v1.1.0/module-entry.schema.json +436 -0
- package/schemas/crucible-ts/taxonomy/repository-category/v1.0.0/category-key.schema.json +16 -8
- package/schemas/crucible-ts/taxonomy/repository-category/v1.0.0/category-metadata.schema.json +1 -1
- package/schemas/crucible-ts/upstream/3leaps/PROVENANCE.md +43 -0
- package/schemas/crucible-ts/upstream/3leaps/agentic/v0/role-prompt.schema.json +183 -0
- package/schemas/crucible-ts/upstream/3leaps/ailink/v0/prompt.schema.json +204 -0
- package/schemas/crucible-ts/upstream/3leaps/ailink/v0/search-response.schema.json +152 -0
- package/schemas/crucible-ts/upstream/README.md +50 -0
- package/schemas/crucible-ts/web/branding/v1.0.0/site-branding.schema.json +1 -1
- package/schemas/crucible-ts/web/styling/v1.0.0/site-styling.schema.json +1 -1
- package/schemas/crucible-ts/config/goneat/README.md +0 -60
- package/schemas/crucible-ts/config/goneat/v1.0.0/dates.yaml +0 -234
- package/schemas/crucible-ts/config/goneat/v1.0.0/goneat-config.yaml +0 -344
- package/schemas/crucible-ts/config/goneat/v1.0.0/lifecycle-phase.json +0 -20
- package/schemas/crucible-ts/config/goneat/v1.0.0/release-phase.json +0 -17
- package/schemas/crucible-ts/config/goneat/v1.0.0/security-policy.yaml +0 -178
- package/schemas/crucible-ts/config/goneat/v1.0.0/version-policy.schema.yaml +0 -205
- package/schemas/crucible-ts/tooling/goneat-tools/v1.0.0/README.md +0 -177
- package/schemas/crucible-ts/tooling/goneat-tools/v1.0.0/goneat-tools-config.schema.yaml +0 -146
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/fulhash/errors.ts","../../src/fulhash/types.ts","../../src/fulhash/algorithms/sha256.ts","../../src/fulhash/algorithms/xxh3.ts","../../src/fulhash/hash.ts","../../src/fulhash/digest.ts","../../src/fulhash/index.ts","../../src/fulhash/stream.ts","../../src/fulhash/wasm-loader.ts"],"names":["Algorithm","hash","hashBytes","hashString","createHash"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Error classes for FulHash module\n */\n\nexport class FulHashError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"FulHashError\";\n Object.setPrototypeOf(this, FulHashError.prototype);\n }\n}\n\nexport class UnsupportedAlgorithmError extends FulHashError {\n constructor(algorithm: string, supportedAlgorithms: string[]) {\n super(\n `Unsupported algorithm \"${algorithm}\". Supported algorithms: ${supportedAlgorithms.join(\", \")}`,\n );\n this.name = \"UnsupportedAlgorithmError\";\n Object.setPrototypeOf(this, UnsupportedAlgorithmError.prototype);\n }\n}\n\nexport class InvalidChecksumError extends FulHashError {\n constructor(checksum: string, reason: string) {\n super(`Invalid checksum \"${checksum}\": ${reason}. Expected format: algorithm:hex`);\n this.name = \"InvalidChecksumError\";\n Object.setPrototypeOf(this, InvalidChecksumError.prototype);\n }\n}\n\nexport class InvalidChecksumFormatError extends InvalidChecksumError {\n constructor(checksum: string, reason: string) {\n super(checksum, reason);\n this.name = \"InvalidChecksumFormatError\";\n Object.setPrototypeOf(this, InvalidChecksumFormatError.prototype);\n }\n}\n\nexport class DigestStateError extends FulHashError {\n constructor(operation: string) {\n super(`Cannot ${operation}: digest already finalized. Call reset() to reuse hasher.`);\n this.name = \"DigestStateError\";\n Object.setPrototypeOf(this, DigestStateError.prototype);\n }\n}\n","/**\n * Type definitions for FulHash hashing module\n */\n\nexport enum Algorithm {\n XXH3_128 = \"xxh3-128\",\n SHA256 = \"sha256\",\n}\n\nexport interface HashOptions {\n algorithm?: Algorithm;\n encoding?: BufferEncoding;\n}\n\nexport interface Digest {\n algorithm: Algorithm;\n hex: string;\n bytes: Uint8Array;\n formatted: string;\n}\n\nexport interface StreamHasherOptions {\n algorithm?: Algorithm;\n}\n\nexport interface StreamHasher {\n update(data: string | Uint8Array): StreamHasher;\n digest(): Digest;\n reset(): StreamHasher;\n}\n\nexport interface Fixture {\n name: string;\n description?: string;\n input?: string;\n input_bytes?: number[];\n encoding: string;\n xxh3_128: string;\n sha256: string;\n notes?: string;\n}\n\nexport interface StreamingFixture {\n name: string;\n description?: string;\n chunks: Array<{\n value?: string;\n encoding?: string;\n size?: number;\n pattern?: string;\n }>;\n expected_xxh3_128: string;\n expected_sha256: string;\n notes?: string;\n}\n\nexport interface ErrorFixture {\n name: string;\n input?: string;\n algorithm?: string;\n checksum?: string;\n expected_error: string;\n error_message_contains: string[];\n}\n\nexport interface FormatFixture {\n name: string;\n algorithm?: string;\n hex?: string;\n formatted?: string;\n expected_formatted?: string;\n expected_algorithm?: string;\n expected_hex?: string;\n}\n\nexport interface FixturesFile {\n version: string;\n description: string;\n fixtures: Fixture[];\n streaming_fixtures?: StreamingFixture[];\n error_fixtures?: ErrorFixture[];\n format_fixtures?: FormatFixture[];\n notes?: string;\n}\n","/**\n * SHA-256 algorithm adapter using Node.js crypto module\n */\n\nimport { createHash } from \"node:crypto\";\n\nexport function hashBytes(data: Uint8Array): Uint8Array {\n const hash = createHash(\"sha256\");\n hash.update(data);\n return new Uint8Array(hash.digest());\n}\n\nexport function hashString(str: string, encoding: BufferEncoding = \"utf8\"): Uint8Array {\n const hash = createHash(\"sha256\");\n hash.update(str, encoding);\n return new Uint8Array(hash.digest());\n}\n","import { xxhash128 } from \"hash-wasm\";\nimport { FulHashError } from \"../errors.js\";\n\n/**\n * Convert hex string to Uint8Array\n * @internal\n */\nfunction hexToBytes(hex: string): Uint8Array {\n const bytes = new Uint8Array(16);\n for (let i = 0; i < 16; i++) {\n bytes[i] = Number.parseInt(hex.substr(i * 2, 2), 16);\n }\n return bytes;\n}\n\n/**\n * Hash bytes using XXH3-128 algorithm\n *\n * Uses the cached hash-wasm xxhash128() helper for optimal performance.\n * The WASM module is initialized once and reused across all calls.\n *\n * @param data - Input data as Uint8Array\n * @returns Hash digest as Uint8Array (16 bytes)\n */\nexport async function hashBytes(data: Uint8Array): Promise<Uint8Array> {\n // Use cached xxhash128 helper - returns hex string\n const hex = await xxhash128(data);\n return hexToBytes(hex);\n}\n\n/**\n * Hash string using XXH3-128 algorithm\n *\n * Uses the cached hash-wasm xxhash128() helper for optimal performance.\n * The WASM module is initialized once and reused across all calls.\n *\n * @param str - Input string\n * @param encoding - Character encoding (only 'utf8' supported)\n * @returns Hash digest as Uint8Array (16 bytes)\n */\nexport async function hashString(\n str: string,\n encoding: \"utf8\" | \"utf16le\" = \"utf8\",\n): Promise<Uint8Array> {\n if (encoding !== \"utf8\") {\n throw new FulHashError(\n \"XXH3-128 only supports UTF-8 encoding. Use utf8 encoding or convert data to Uint8Array.\",\n );\n }\n\n // Use cached xxhash128 helper directly on string\n const hex = await xxhash128(str);\n return hexToBytes(hex);\n}\n","/**\n * Block hashing helpers for one-shot hashing operations\n */\n\nimport * as sha256 from \"./algorithms/sha256.js\";\nimport * as xxh3 from \"./algorithms/xxh3.js\";\nimport { Digest } from \"./digest.js\";\nimport { UnsupportedAlgorithmError } from \"./errors.js\";\nimport { Algorithm, type HashOptions } from \"./types.js\";\n\nexport async function hash(input: string | Uint8Array, options?: HashOptions): Promise<Digest> {\n const algorithm = options?.algorithm ?? Algorithm.XXH3_128;\n const encoding = options?.encoding ?? \"utf8\";\n\n let bytes: Uint8Array;\n\n if (algorithm === Algorithm.SHA256) {\n if (typeof input === \"string\") {\n bytes = sha256.hashString(input, encoding);\n } else {\n bytes = sha256.hashBytes(input);\n }\n } else if (algorithm === Algorithm.XXH3_128) {\n if (typeof input === \"string\") {\n bytes = await xxh3.hashString(input, \"utf8\");\n } else {\n bytes = await xxh3.hashBytes(input);\n }\n } else {\n throw new UnsupportedAlgorithmError(algorithm, [Algorithm.SHA256, Algorithm.XXH3_128]);\n }\n\n return new Digest(algorithm, bytes);\n}\n\nexport async function hashString(str: string, options?: HashOptions): Promise<Digest> {\n return hash(str, options);\n}\n\nexport async function hashBytes(data: Uint8Array, options?: HashOptions): Promise<Digest> {\n return hash(data, options);\n}\n","/**\n * Digest implementation - immutable hash result container\n */\n\nimport {\n InvalidChecksumError,\n InvalidChecksumFormatError,\n UnsupportedAlgorithmError,\n} from \"./errors.js\";\nimport { Algorithm, type Digest as DigestInterface } from \"./types.js\";\n\nexport class Digest implements DigestInterface {\n readonly algorithm: Algorithm;\n private readonly _bytes: Uint8Array;\n readonly hex: string;\n readonly formatted: string;\n\n constructor(algorithm: Algorithm, bytes: Uint8Array) {\n this.algorithm = algorithm;\n this._bytes = new Uint8Array(bytes);\n this.hex = Array.from(this._bytes)\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\n this.formatted = `${this.algorithm}:${this.hex}`;\n Object.freeze(this);\n }\n\n get bytes(): Uint8Array {\n return new Uint8Array(this._bytes);\n }\n\n toJSON(): object {\n return {\n algorithm: this.algorithm,\n hex: this.hex,\n formatted: this.formatted,\n };\n }\n\n toString(): string {\n return this.formatted;\n }\n\n static parse(formatted: string): Digest {\n if (!formatted.includes(\":\")) {\n throw new InvalidChecksumFormatError(formatted, \"missing separator\");\n }\n\n const [algorithmStr, hex] = formatted.split(\":\", 2);\n\n if (!algorithmStr || !hex) {\n throw new InvalidChecksumFormatError(formatted, \"invalid format\");\n }\n\n const algorithm = algorithmStr as Algorithm;\n if (!Object.values(Algorithm).includes(algorithm)) {\n throw new UnsupportedAlgorithmError(algorithm, Object.values(Algorithm));\n }\n\n if (!/^[0-9a-f]+$/.test(hex)) {\n throw new InvalidChecksumError(\n formatted,\n \"hex must contain only lowercase hexadecimal characters\",\n );\n }\n\n const expectedLength = algorithm === Algorithm.XXH3_128 ? 32 : 64;\n if (hex.length !== expectedLength) {\n throw new InvalidChecksumError(\n formatted,\n `invalid hex length for ${algorithm}: expected ${expectedLength}, got ${hex.length}`,\n );\n }\n\n const bytes = new Uint8Array(hex.length / 2);\n for (let i = 0; i < hex.length; i += 2) {\n bytes[i / 2] = Number.parseInt(hex.slice(i, i + 2), 16);\n }\n\n return new Digest(algorithm, bytes);\n }\n\n equals(other: Digest): boolean {\n if (this.algorithm !== other.algorithm) {\n return false;\n }\n if (this.hex !== other.hex) {\n return false;\n }\n return true;\n }\n\n static async verify(data: string | Uint8Array, checksum: string): Promise<boolean> {\n const expected = Digest.parse(checksum);\n const { hash } = await import(\"./hash.js\");\n const actual = await hash(data, { algorithm: expected.algorithm });\n return actual.equals(expected);\n }\n}\n","/**\n * FulHash - Consistent hashing API for Fulmen ecosystem\n *\n * Provides block and streaming hashing with xxh3-128 and sha256 algorithms.\n * Cross-language compatible with gofulmen and pyfulmen.\n */\n\nexport const VERSION = \"1.0.0\";\n\nexport { Digest } from \"./digest.js\";\nexport {\n DigestStateError,\n FulHashError,\n InvalidChecksumError,\n InvalidChecksumFormatError,\n UnsupportedAlgorithmError,\n} from \"./errors.js\";\nexport { hash, hashBytes, hashString } from \"./hash.js\";\nexport { createStreamHasher } from \"./stream.js\";\nexport {\n Algorithm,\n type HashOptions,\n type StreamHasher,\n type StreamHasherOptions,\n} from \"./types.js\";\n","import { createHash } from \"node:crypto\";\nimport type { IHasher } from \"hash-wasm\";\nimport { Digest } from \"./digest.js\";\nimport { DigestStateError, UnsupportedAlgorithmError } from \"./errors.js\";\nimport { Algorithm, type StreamHasher, type StreamHasherOptions } from \"./types.js\";\nimport { createHasher as createXXH3Hasher, initializeWasm } from \"./wasm-loader.js\";\n\nenum State {\n INITIAL = \"initial\",\n UPDATING = \"updating\",\n FINALIZED = \"finalized\",\n}\n\nabstract class BaseStreamHasher implements StreamHasher {\n protected state: State = State.INITIAL;\n protected readonly algorithm: Algorithm;\n\n constructor(algorithm: Algorithm) {\n this.algorithm = algorithm;\n }\n\n abstract update(data: string | Uint8Array): StreamHasher;\n abstract digest(): Digest;\n abstract reset(): StreamHasher;\n\n protected ensureNotFinalized(): void {\n if (this.state === State.FINALIZED) {\n throw new DigestStateError(\"Cannot update after digest(). Call reset() to reuse hasher.\");\n }\n }\n\n protected ensureUpdating(): void {\n if (this.state !== State.UPDATING && this.state !== State.INITIAL) {\n throw new DigestStateError(\"Invalid state for digest(). Hasher may have been finalized.\");\n }\n }\n\n protected markUpdating(): void {\n this.state = State.UPDATING;\n }\n\n protected markFinalized(): void {\n this.state = State.FINALIZED;\n }\n\n protected markInitial(): void {\n this.state = State.INITIAL;\n }\n}\n\nclass SHA256StreamHasher extends BaseStreamHasher {\n private hasher: ReturnType<typeof createHash>;\n\n constructor() {\n super(Algorithm.SHA256);\n this.hasher = createHash(\"sha256\");\n }\n\n update(data: string | Uint8Array): StreamHasher {\n this.ensureNotFinalized();\n this.markUpdating();\n\n if (typeof data === \"string\") {\n this.hasher.update(data, \"utf8\");\n } else {\n this.hasher.update(data);\n }\n\n return this;\n }\n\n digest(): Digest {\n this.ensureUpdating();\n this.markFinalized();\n\n const bytes = new Uint8Array(this.hasher.digest());\n return new Digest(this.algorithm, bytes);\n }\n\n reset(): StreamHasher {\n this.hasher = createHash(\"sha256\");\n this.markInitial();\n return this;\n }\n}\n\nclass XXH3StreamHasher extends BaseStreamHasher {\n private hasher: IHasher;\n\n constructor(hasher: IHasher) {\n super(Algorithm.XXH3_128);\n this.hasher = hasher;\n this.hasher.init();\n }\n\n update(data: string | Uint8Array): StreamHasher {\n this.ensureNotFinalized();\n this.markUpdating();\n\n if (typeof data === \"string\") {\n const encoder = new TextEncoder();\n this.hasher.update(encoder.encode(data));\n } else {\n this.hasher.update(data);\n }\n\n return this;\n }\n\n digest(): Digest {\n this.ensureUpdating();\n this.markFinalized();\n\n const bytes = this.hasher.digest(\"binary\");\n return new Digest(this.algorithm, bytes);\n }\n\n reset(): StreamHasher {\n this.hasher.init();\n this.markInitial();\n return this;\n }\n}\n\nexport async function createStreamHasher(options: StreamHasherOptions = {}): Promise<StreamHasher> {\n const algorithm = options.algorithm ?? Algorithm.XXH3_128;\n\n if (algorithm === Algorithm.SHA256) {\n return new SHA256StreamHasher();\n }\n\n if (algorithm === Algorithm.XXH3_128) {\n await initializeWasm();\n const wasmHasher = await createXXH3Hasher();\n return new XXH3StreamHasher(wasmHasher);\n }\n\n throw new UnsupportedAlgorithmError(algorithm, [Algorithm.SHA256, Algorithm.XXH3_128]);\n}\n","import type { IHasher } from \"hash-wasm\";\nimport { createXXHash128 } from \"hash-wasm\";\nimport { FulHashError } from \"./errors.js\";\n\nlet isWasmReady = false;\nlet initPromise: Promise<void> | null = null;\n\nexport async function initializeWasm(): Promise<void> {\n if (isWasmReady) {\n return;\n }\n\n if (initPromise) {\n return initPromise;\n }\n\n initPromise = createXXHash128()\n .then(() => {\n isWasmReady = true;\n })\n .catch((error) => {\n initPromise = null;\n throw new FulHashError(`Failed to initialize hash-wasm XXH3-128 module: ${error.message}`);\n });\n\n return initPromise;\n}\n\nexport function isInitialized(): boolean {\n return isWasmReady;\n}\n\nexport async function createHasher(): Promise<IHasher> {\n if (!isWasmReady) {\n throw new FulHashError(\"WASM not initialized. Call initializeWasm() first.\");\n }\n return createXXHash128();\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/crucible/fulhash/types.ts","../../src/fulhash/errors.ts","../../src/fulhash/algorithms/crc32.ts","../../src/fulhash/algorithms/crc32c.ts","../../src/fulhash/algorithms/sha256.ts","../../src/fulhash/algorithms/xxh3.ts","../../src/fulhash/hash.ts","../../src/fulhash/digest.ts","../../src/fulhash/index.ts","../../src/fulhash/convenience.ts","../../src/fulhash/stream.ts","../../src/fulhash/wasm-loader.ts"],"names":["Algorithm","hex","hexToBytes","hashBytes","crc32","hashString","createHasher","createCRC32","hash","createHash"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * FulHash Types\n * Code generated by scripts/codegen/generate-fulhash-types.ts; DO NOT EDIT.\n */\n\n/**\n * Supported hashing algorithms for FulHash\n */\nexport enum Algorithm {\n /**\n * XXH3 (128-bit)\n * Fast non-cryptographic hash (default). Excellent collision resistance, extremely high throughput (50GB/s+).\n */\n XXH3_128 = \"xxh3-128\",\n\n /**\n * SHA-256\n * Cryptographic security standard. Resistant to intentional collisions. Use for security verification.\n */\n SHA256 = \"sha256\",\n\n /**\n * CRC-32 (IEEE)\n * 32-bit Cyclic Redundancy Check. Standard for GZIP/ZIP/PNG legacy format interoperability.\n */\n CRC32 = \"crc32\",\n\n /**\n * CRC-32C (Castagnoli)\n * 32-bit CRC (Castagnoli). HW accelerated (SSE4.2/ARMv8). Use for cloud storage (GCS, AWS) and networking.\n */\n CRC32C = \"crc32c\",\n}\n\n/**\n * Standard digest payload returned by FulHash helpers\n */\nexport interface Digest {\n /**\n * Hash algorithm identifier\n */\n algorithm: \"xxh3-128\" | \"crc32\" | \"crc32c\" | \"sha256\";\n\n /**\n * Lowercase hexadecimal representation of the digest\n */\n hex: string;\n\n /**\n * Canonical string representation '<algorithm>:<hex>'\n */\n formatted: string;\n\n /**\n * Raw digest bytes (optional)\n */\n bytes?: number[];\n}\n","/**\n * Error classes for FulHash module\n */\n\nexport class FulHashError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"FulHashError\";\n Object.setPrototypeOf(this, FulHashError.prototype);\n }\n}\n\nexport class UnsupportedAlgorithmError extends FulHashError {\n constructor(algorithm: string, supportedAlgorithms: string[]) {\n super(\n `Unsupported algorithm \"${algorithm}\". Supported algorithms: ${supportedAlgorithms.join(\", \")}`,\n );\n this.name = \"UnsupportedAlgorithmError\";\n Object.setPrototypeOf(this, UnsupportedAlgorithmError.prototype);\n }\n}\n\nexport class InvalidChecksumError extends FulHashError {\n constructor(checksum: string, reason: string) {\n super(`Invalid checksum \"${checksum}\": ${reason}. Expected format: algorithm:hex`);\n this.name = \"InvalidChecksumError\";\n Object.setPrototypeOf(this, InvalidChecksumError.prototype);\n }\n}\n\nexport class InvalidChecksumFormatError extends InvalidChecksumError {\n constructor(checksum: string, reason: string) {\n super(checksum, reason);\n this.name = \"InvalidChecksumFormatError\";\n Object.setPrototypeOf(this, InvalidChecksumFormatError.prototype);\n }\n}\n\nexport class DigestStateError extends FulHashError {\n constructor(operation: string) {\n super(`Cannot ${operation}: digest already finalized. Call reset() to reuse hasher.`);\n this.name = \"DigestStateError\";\n Object.setPrototypeOf(this, DigestStateError.prototype);\n }\n}\n","import type { IHasher } from \"hash-wasm\";\nimport { crc32, createCRC32 } from \"hash-wasm\";\n\n// Local definition to avoid importing from hash-wasm/dist/lib/util which is not a public export\ntype IDataType =\n | string\n | Uint8Array\n | Uint16Array\n | Uint32Array\n | Int8Array\n | Int16Array\n | Int32Array\n | Float32Array\n | Float64Array\n | DataView\n | ArrayBuffer\n | SharedArrayBuffer;\n\n/**\n * Convert hex string to Uint8Array\n * @internal\n */\nfunction hexToBytes(hex: string): Uint8Array {\n const bytes = new Uint8Array(4);\n for (let i = 0; i < 4; i++) {\n bytes[i] = Number.parseInt(hex.substr(i * 2, 2), 16);\n }\n return bytes;\n}\n\nexport async function hashBytes(data: Uint8Array): Promise<Uint8Array> {\n const hex = await crc32(data);\n return hexToBytes(hex);\n}\n\nexport async function hashString(\n str: string,\n encoding: BufferEncoding = \"utf8\",\n): Promise<Uint8Array> {\n if (encoding !== \"utf8\") {\n // hash-wasm only supports string input as UTF-8\n // For other encodings, convert to Buffer first\n const buf = Buffer.from(str, encoding);\n const hex = await crc32(buf);\n return hexToBytes(hex);\n }\n const hex = await crc32(str);\n return hexToBytes(hex);\n}\n\n// Ensure the hasher we return respects the IHasher interface correctly\ninterface CRC32Hasher extends IHasher {\n update(data: IDataType): IHasher;\n}\n\nexport async function createHasher(): Promise<CRC32Hasher> {\n const hasher = await createCRC32();\n return hasher as unknown as CRC32Hasher;\n}\n","import type { IHasher } from \"hash-wasm\";\nimport { crc32, createCRC32 } from \"hash-wasm\";\n\n// Local definition to avoid importing from hash-wasm/dist/lib/util\ntype IDataType =\n | string\n | Uint8Array\n | Uint16Array\n | Uint32Array\n | Int8Array\n | Int16Array\n | Int32Array\n | Float32Array\n | Float64Array\n | DataView\n | ArrayBuffer\n | SharedArrayBuffer;\n\nconst CRC32C_POLYNOMIAL = 0x82f63b78;\n\n/**\n * Convert hex string to Uint8Array\n * @internal\n */\nfunction hexToBytes(hex: string): Uint8Array {\n const bytes = new Uint8Array(4);\n for (let i = 0; i < 4; i++) {\n bytes[i] = Number.parseInt(hex.substr(i * 2, 2), 16);\n }\n return bytes;\n}\n\nexport async function hashBytes(data: Uint8Array): Promise<Uint8Array> {\n const hex = await crc32(data, CRC32C_POLYNOMIAL);\n return hexToBytes(hex);\n}\n\nexport async function hashString(\n str: string,\n encoding: BufferEncoding = \"utf8\",\n): Promise<Uint8Array> {\n if (encoding !== \"utf8\") {\n const buf = Buffer.from(str, encoding);\n const hex = await crc32(buf, CRC32C_POLYNOMIAL);\n return hexToBytes(hex);\n }\n const hex = await crc32(str, CRC32C_POLYNOMIAL);\n return hexToBytes(hex);\n}\n\ninterface CRC32Hasher extends IHasher {\n update(data: IDataType): IHasher;\n}\n\nexport async function createHasher(): Promise<CRC32Hasher> {\n const hasher = await createCRC32(CRC32C_POLYNOMIAL);\n return hasher as unknown as CRC32Hasher;\n}\n","/**\n * SHA-256 algorithm adapter using Node.js crypto module\n */\n\nimport { createHash } from \"node:crypto\";\n\nexport function hashBytes(data: Uint8Array): Uint8Array {\n const hash = createHash(\"sha256\");\n hash.update(data);\n return new Uint8Array(hash.digest());\n}\n\nexport function hashString(str: string, encoding: BufferEncoding = \"utf8\"): Uint8Array {\n const hash = createHash(\"sha256\");\n hash.update(str, encoding);\n return new Uint8Array(hash.digest());\n}\n","import { xxhash128 } from \"hash-wasm\";\nimport { FulHashError } from \"../errors.js\";\n\n/**\n * Convert hex string to Uint8Array\n * @internal\n */\nfunction hexToBytes(hex: string): Uint8Array {\n const bytes = new Uint8Array(16);\n for (let i = 0; i < 16; i++) {\n bytes[i] = Number.parseInt(hex.substr(i * 2, 2), 16);\n }\n return bytes;\n}\n\n/**\n * Hash bytes using XXH3-128 algorithm\n *\n * Uses the cached hash-wasm xxhash128() helper for optimal performance.\n * The WASM module is initialized once and reused across all calls.\n *\n * @param data - Input data as Uint8Array\n * @returns Hash digest as Uint8Array (16 bytes)\n */\nexport async function hashBytes(data: Uint8Array): Promise<Uint8Array> {\n // Use cached xxhash128 helper - returns hex string\n const hex = await xxhash128(data);\n return hexToBytes(hex);\n}\n\n/**\n * Hash string using XXH3-128 algorithm\n *\n * Uses the cached hash-wasm xxhash128() helper for optimal performance.\n * The WASM module is initialized once and reused across all calls.\n *\n * @param str - Input string\n * @param encoding - Character encoding (only 'utf8' supported)\n * @returns Hash digest as Uint8Array (16 bytes)\n */\nexport async function hashString(\n str: string,\n encoding: \"utf8\" | \"utf16le\" = \"utf8\",\n): Promise<Uint8Array> {\n if (encoding !== \"utf8\") {\n throw new FulHashError(\n \"XXH3-128 only supports UTF-8 encoding. Use utf8 encoding or convert data to Uint8Array.\",\n );\n }\n\n // Use cached xxhash128 helper directly on string\n const hex = await xxhash128(str);\n return hexToBytes(hex);\n}\n","/**\n * Block hashing helpers for one-shot hashing operations\n */\n\nimport { Algorithm } from \"../crucible/fulhash/types.js\";\nimport * as crc32 from \"./algorithms/crc32.js\";\nimport * as crc32c from \"./algorithms/crc32c.js\";\nimport * as sha256 from \"./algorithms/sha256.js\";\nimport * as xxh3 from \"./algorithms/xxh3.js\";\nimport type { HashOptions } from \"./definitions.js\";\nimport { Digest } from \"./digest.js\";\nimport { UnsupportedAlgorithmError } from \"./errors.js\";\n\nexport async function hash(input: string | Uint8Array, options?: HashOptions): Promise<Digest> {\n const algorithm = options?.algorithm ?? Algorithm.XXH3_128;\n const encoding = options?.encoding ?? \"utf8\";\n\n let bytes: Uint8Array;\n\n switch (algorithm) {\n case Algorithm.SHA256:\n if (typeof input === \"string\") {\n bytes = sha256.hashString(input, encoding);\n } else {\n bytes = sha256.hashBytes(input);\n }\n break;\n case Algorithm.XXH3_128:\n if (typeof input === \"string\") {\n if (encoding !== \"utf8\") {\n // Fallback via buffer if non-utf8 is requested, as xxh3-wasm is utf8 only\n bytes = await xxh3.hashBytes(Buffer.from(input, encoding));\n } else {\n bytes = await xxh3.hashString(input, \"utf8\");\n }\n } else {\n bytes = await xxh3.hashBytes(input);\n }\n break;\n case Algorithm.CRC32:\n if (typeof input === \"string\") {\n bytes = await crc32.hashString(input, encoding);\n } else {\n bytes = await crc32.hashBytes(input);\n }\n break;\n case Algorithm.CRC32C:\n if (typeof input === \"string\") {\n bytes = await crc32c.hashString(input, encoding);\n } else {\n bytes = await crc32c.hashBytes(input);\n }\n break;\n default:\n throw new UnsupportedAlgorithmError(algorithm, Object.values(Algorithm));\n }\n\n return new Digest(algorithm, bytes);\n}\n\nexport async function hashString(str: string, options?: HashOptions): Promise<Digest> {\n return hash(str, options);\n}\n\nexport async function hashBytes(data: Uint8Array, options?: HashOptions): Promise<Digest> {\n return hash(data, options);\n}\n","/**\n * Digest implementation - immutable hash result container\n */\n\nimport { Algorithm, type Digest as DigestInterface } from \"../crucible/fulhash/types.js\";\nimport {\n InvalidChecksumError,\n InvalidChecksumFormatError,\n UnsupportedAlgorithmError,\n} from \"./errors.js\";\n\nexport class Digest implements DigestInterface {\n readonly algorithm: Algorithm;\n private readonly _bytes: Uint8Array;\n readonly hex: string;\n readonly formatted: string;\n\n constructor(algorithm: Algorithm, bytes: Uint8Array) {\n this.algorithm = algorithm;\n this._bytes = new Uint8Array(bytes);\n this.hex = Array.from(this._bytes)\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\n this.formatted = `${this.algorithm}:${this.hex}`;\n Object.freeze(this);\n }\n\n get bytes(): number[] {\n return Array.from(this._bytes);\n }\n\n toJSON(): object {\n return {\n algorithm: this.algorithm,\n hex: this.hex,\n formatted: this.formatted,\n };\n }\n\n toString(): string {\n return this.formatted;\n }\n\n static parse(formatted: string): Digest {\n if (!formatted.includes(\":\")) {\n throw new InvalidChecksumFormatError(formatted, \"missing separator\");\n }\n\n const [algorithmStr, hex] = formatted.split(\":\", 2);\n\n if (!algorithmStr || !hex) {\n throw new InvalidChecksumFormatError(formatted, \"invalid format\");\n }\n\n const algorithm = algorithmStr as Algorithm;\n if (!Object.values(Algorithm).includes(algorithm)) {\n throw new UnsupportedAlgorithmError(algorithm, Object.values(Algorithm));\n }\n\n if (!/^[0-9a-f]+$/.test(hex)) {\n throw new InvalidChecksumError(\n formatted,\n \"hex must contain only lowercase hexadecimal characters\",\n );\n }\n\n let expectedLength: number;\n switch (algorithm) {\n case Algorithm.XXH3_128:\n expectedLength = 32;\n break;\n case Algorithm.SHA256:\n expectedLength = 64;\n break;\n case Algorithm.CRC32:\n case Algorithm.CRC32C:\n expectedLength = 8;\n break;\n default:\n // Should have been caught by Object.values check, but TS safety\n throw new UnsupportedAlgorithmError(algorithm, Object.values(Algorithm));\n }\n\n if (hex.length !== expectedLength) {\n throw new InvalidChecksumError(\n formatted,\n `invalid hex length for ${algorithm}: expected ${expectedLength}, got ${hex.length}`,\n );\n }\n\n const bytes = new Uint8Array(hex.length / 2);\n for (let i = 0; i < hex.length; i += 2) {\n bytes[i / 2] = Number.parseInt(hex.slice(i, i + 2), 16);\n }\n\n return new Digest(algorithm, bytes);\n }\n\n equals(other: Digest): boolean {\n if (this.algorithm !== other.algorithm) {\n return false;\n }\n if (this.hex !== other.hex) {\n return false;\n }\n return true;\n }\n\n static async verify(data: string | Uint8Array, checksum: string): Promise<boolean> {\n const expected = Digest.parse(checksum);\n const { hash } = await import(\"./hash.js\");\n const actual = await hash(data, { algorithm: expected.algorithm });\n return actual.equals(expected);\n }\n}\n","/**\n * FulHash - Consistent hashing API for Fulmen ecosystem\n *\n * Provides block and streaming hashing with XXH3-128, SHA-256, CRC32, and CRC32C algorithms.\n * Cross-language compatible with gofulmen and pyfulmen.\n */\n\nexport const VERSION = \"1.0.0\";\n\nexport * from \"../crucible/fulhash/types.js\";\nexport { type HashInput, multiHash, verify } from \"./convenience.js\";\nexport type {\n HashOptions,\n StreamHasher,\n StreamHasherOptions,\n} from \"./definitions.js\";\nexport { Digest } from \"./digest.js\";\nexport {\n DigestStateError,\n FulHashError,\n InvalidChecksumError,\n InvalidChecksumFormatError,\n UnsupportedAlgorithmError,\n} from \"./errors.js\";\nexport { hash, hashBytes, hashString } from \"./hash.js\";\nexport { createStreamHasher } from \"./stream.js\";\n","import type { Algorithm } from \"../crucible/fulhash/types.js\";\nimport type { MultiHashResult, StreamHasher } from \"./definitions.js\";\nimport { Digest } from \"./digest.js\";\nimport { createStreamHasher } from \"./stream.js\";\n\nexport type HashInput = string | Uint8Array | AsyncIterable<string | Uint8Array>;\n\n/**\n * Compute multiple hashes in a single pass over the data.\n * Useful for generating checksums for multiple algorithms (e.g. SHA256 + XXH3)\n * without reading the stream multiple times.\n */\nexport async function multiHash(\n input: HashInput,\n algorithms: Algorithm[],\n encoding: BufferEncoding = \"utf8\",\n): Promise<MultiHashResult> {\n const uniqueAlgorithms = [...new Set(algorithms)];\n const hashers: StreamHasher[] = await Promise.all(\n uniqueAlgorithms.map((algo) => createStreamHasher({ algorithm: algo })),\n );\n\n if (typeof input === \"string\") {\n if (encoding !== \"utf8\") {\n // Manual buffer conversion for non-utf8 encodings, as some stream hashers\n // (like XXH3) might default to UTF-8 for string inputs.\n const buf = Buffer.from(input, encoding);\n for (const hasher of hashers) {\n hasher.update(buf);\n }\n } else {\n for (const hasher of hashers) {\n hasher.update(input);\n }\n }\n } else if (input instanceof Uint8Array) {\n for (const hasher of hashers) {\n hasher.update(input);\n }\n } else {\n // AsyncIterable (Stream)\n for await (const chunk of input) {\n // If chunk is string and encoding is non-utf8, we might have an issue here\n // as the stream chunk doesn't carry encoding info.\n // Standard Node streams yield Buffers or strings (usually utf8).\n // If the user passes an async iterable of strings, we assume they are safe to pass to update().\n // If strict encoding control is needed for streams, the stream should yield Buffers.\n for (const hasher of hashers) {\n hasher.update(chunk);\n }\n }\n }\n\n const result: MultiHashResult = {};\n for (let i = 0; i < uniqueAlgorithms.length; i++) {\n result[uniqueAlgorithms[i]] = hashers[i].digest();\n }\n\n return result;\n}\n\n/**\n * Verify data against a formatted checksum (e.g. \"sha256:abc...\").\n * Automatically selects the algorithm from the checksum prefix.\n */\nexport async function verify(\n input: HashInput,\n checksum: string,\n encoding: BufferEncoding = \"utf8\",\n): Promise<boolean> {\n const expected = Digest.parse(checksum);\n const result = await multiHash(input, [expected.algorithm], encoding);\n const actual = result[expected.algorithm];\n\n if (!actual) return false;\n return actual.algorithm === expected.algorithm && actual.hex === expected.hex;\n}\n","import { createHash } from \"node:crypto\";\nimport type { IHasher } from \"hash-wasm\";\nimport { Algorithm } from \"../crucible/fulhash/types.js\";\nimport * as crc32 from \"./algorithms/crc32.js\";\nimport * as crc32c from \"./algorithms/crc32c.js\";\nimport type { StreamHasher, StreamHasherOptions } from \"./definitions.js\";\nimport { Digest } from \"./digest.js\";\nimport { DigestStateError, UnsupportedAlgorithmError } from \"./errors.js\";\nimport { createHasher as createXXH3Hasher, initializeWasm } from \"./wasm-loader.js\";\n\nenum State {\n INITIAL = \"initial\",\n UPDATING = \"updating\",\n FINALIZED = \"finalized\",\n}\n\nfunction intToBytes(crc: number): Uint8Array {\n const bytes = new Uint8Array(4);\n const unsigned = crc >>> 0;\n bytes[0] = (unsigned >>> 24) & 0xff;\n bytes[1] = (unsigned >>> 16) & 0xff;\n bytes[2] = (unsigned >>> 8) & 0xff;\n bytes[3] = unsigned & 0xff;\n return bytes;\n}\n\ntype IDataType =\n | string\n | Uint8Array\n | Uint16Array\n | Uint32Array\n | Int8Array\n | Int16Array\n | Int32Array\n | Float32Array\n | Float64Array\n | DataView\n | ArrayBuffer\n | SharedArrayBuffer;\n\n// Helper to define local interface for CRC hashers returned by our modules\ninterface CRC32Hasher extends IHasher {\n // We only use the update method with Uint8Array in our wrapper,\n // but we declare it compatible with IHasher to avoid TS complaints if possible,\n // or cast it. hash-wasm's IHasher expects IDataType (string | Buffer | TypedArray).\n update(data: IDataType): IHasher;\n}\n\nabstract class BaseStreamHasher implements StreamHasher {\n protected state: State = State.INITIAL;\n protected readonly algorithm: Algorithm;\n\n constructor(algorithm: Algorithm) {\n this.algorithm = algorithm;\n }\n\n abstract update(data: string | Uint8Array): StreamHasher;\n abstract digest(): Digest;\n abstract reset(): StreamHasher;\n\n protected ensureNotFinalized(): void {\n if (this.state === State.FINALIZED) {\n throw new DigestStateError(\"Cannot update after digest(). Call reset() to reuse hasher.\");\n }\n }\n\n protected ensureUpdating(): void {\n if (this.state !== State.UPDATING && this.state !== State.INITIAL) {\n throw new DigestStateError(\"Invalid state for digest(). Hasher may have been finalized.\");\n }\n }\n\n protected markUpdating(): void {\n this.state = State.UPDATING;\n }\n\n protected markFinalized(): void {\n this.state = State.FINALIZED;\n }\n\n protected markInitial(): void {\n this.state = State.INITIAL;\n }\n}\n\nclass SHA256StreamHasher extends BaseStreamHasher {\n private hasher: ReturnType<typeof createHash>;\n\n constructor() {\n super(Algorithm.SHA256);\n this.hasher = createHash(\"sha256\");\n }\n\n update(data: string | Uint8Array): StreamHasher {\n this.ensureNotFinalized();\n this.markUpdating();\n\n if (typeof data === \"string\") {\n this.hasher.update(data, \"utf8\");\n } else {\n this.hasher.update(data);\n }\n\n return this;\n }\n\n digest(): Digest {\n this.ensureUpdating();\n this.markFinalized();\n\n const bytes = new Uint8Array(this.hasher.digest());\n return new Digest(this.algorithm, bytes);\n }\n\n reset(): StreamHasher {\n this.hasher = createHash(\"sha256\");\n this.markInitial();\n return this;\n }\n}\n\nclass XXH3StreamHasher extends BaseStreamHasher {\n private hasher: IHasher;\n\n constructor(hasher: IHasher) {\n super(Algorithm.XXH3_128);\n this.hasher = hasher;\n this.hasher.init();\n }\n\n update(data: string | Uint8Array): StreamHasher {\n this.ensureNotFinalized();\n this.markUpdating();\n\n if (typeof data === \"string\") {\n const encoder = new TextEncoder();\n this.hasher.update(encoder.encode(data));\n } else {\n this.hasher.update(data);\n }\n\n return this;\n }\n\n digest(): Digest {\n this.ensureUpdating();\n this.markFinalized();\n\n const bytes = this.hasher.digest(\"binary\");\n return new Digest(this.algorithm, bytes);\n }\n\n reset(): StreamHasher {\n this.hasher.init();\n this.markInitial();\n return this;\n }\n}\n\nclass CRC32StreamHasher extends BaseStreamHasher {\n private hasher: CRC32Hasher | null = null;\n\n constructor() {\n super(Algorithm.CRC32);\n }\n\n async init(): Promise<void> {\n this.hasher = await crc32.createHasher();\n this.hasher.init();\n }\n\n update(data: string | Uint8Array): StreamHasher {\n this.ensureNotFinalized();\n this.markUpdating();\n\n if (!this.hasher) {\n // This shouldn't happen if createStreamHasher calls init, but technically\n // synchronous update() can't await. We might need to buffer or assume initialized.\n // However, the Factory createStreamHasher is async, so we can await init there.\n throw new Error(\"Hasher not initialized\");\n }\n\n if (typeof data === \"string\") {\n const encoder = new TextEncoder();\n this.hasher.update(encoder.encode(data));\n } else {\n this.hasher.update(data);\n }\n return this;\n }\n\n digest(): Digest {\n this.ensureUpdating();\n this.markFinalized();\n if (!this.hasher) throw new Error(\"Hasher not initialized\");\n\n const hex = this.hasher.digest();\n const bytes = intToBytes(parseInt(hex, 16));\n return new Digest(this.algorithm, bytes);\n }\n\n reset(): StreamHasher {\n if (!this.hasher) throw new Error(\"Hasher not initialized\");\n this.hasher.init();\n this.markInitial();\n return this;\n }\n}\n\nclass CRC32CStreamHasher extends BaseStreamHasher {\n private hasher: CRC32Hasher | null = null;\n\n constructor() {\n super(Algorithm.CRC32C);\n }\n\n async init(): Promise<void> {\n this.hasher = await crc32c.createHasher();\n this.hasher.init();\n }\n\n update(data: string | Uint8Array): StreamHasher {\n this.ensureNotFinalized();\n this.markUpdating();\n\n if (!this.hasher) throw new Error(\"Hasher not initialized\");\n\n if (typeof data === \"string\") {\n const encoder = new TextEncoder();\n this.hasher.update(encoder.encode(data));\n } else {\n this.hasher.update(data);\n }\n return this;\n }\n\n digest(): Digest {\n this.ensureUpdating();\n this.markFinalized();\n if (!this.hasher) throw new Error(\"Hasher not initialized\");\n\n const hex = this.hasher.digest();\n const bytes = intToBytes(parseInt(hex, 16));\n return new Digest(this.algorithm, bytes);\n }\n\n reset(): StreamHasher {\n if (!this.hasher) throw new Error(\"Hasher not initialized\");\n this.hasher.init();\n this.markInitial();\n return this;\n }\n}\n\nexport async function createStreamHasher(options: StreamHasherOptions = {}): Promise<StreamHasher> {\n const algorithm = options.algorithm ?? Algorithm.XXH3_128;\n\n switch (algorithm) {\n case Algorithm.SHA256:\n return new SHA256StreamHasher();\n case Algorithm.XXH3_128: {\n await initializeWasm();\n const wasmHasher = await createXXH3Hasher();\n return new XXH3StreamHasher(wasmHasher);\n }\n case Algorithm.CRC32: {\n const hasher = new CRC32StreamHasher();\n await hasher.init();\n return hasher;\n }\n case Algorithm.CRC32C: {\n const hasher = new CRC32CStreamHasher();\n await hasher.init();\n return hasher;\n }\n default:\n throw new UnsupportedAlgorithmError(algorithm, Object.values(Algorithm));\n }\n}\n","import type { IHasher } from \"hash-wasm\";\nimport { createXXHash128 } from \"hash-wasm\";\nimport { FulHashError } from \"./errors.js\";\n\nlet isWasmReady = false;\nlet initPromise: Promise<void> | null = null;\n\nexport async function initializeWasm(): Promise<void> {\n if (isWasmReady) {\n return;\n }\n\n if (initPromise) {\n return initPromise;\n }\n\n initPromise = createXXHash128()\n .then(() => {\n isWasmReady = true;\n })\n .catch((error) => {\n initPromise = null;\n throw new FulHashError(`Failed to initialize hash-wasm XXH3-128 module: ${error.message}`);\n });\n\n return initPromise;\n}\n\nexport function isInitialized(): boolean {\n return isWasmReady;\n}\n\nexport async function createHasher(): Promise<IHasher> {\n if (!isWasmReady) {\n throw new FulHashError(\"WASM not initialized. Call initializeWasm() first.\");\n }\n return createXXHash128();\n}\n"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { APP_IDENTITY_DIR, APP_IDENTITY_ENV_VAR, APP_IDENTITY_FILENAME, APP_IDENTITY_SCHEMA_ID, AppIdentity, AppIdentityError, ConfigIdentifiers, Identity, IdentityMetadata, LoadIdentityOptions, MAX_ANCESTOR_SEARCH_DEPTH, PythonMetadata, RepositoryCategory, buildEnvVar, clearIdentityCache, getBinaryName, getCachedIdentity, getConfigIdentifiers, getConfigName, getEnvPrefix, getEnvVar, getTelemetryNamespace, getVendor, loadIdentity } from './appidentity/index.js';
|
|
1
|
+
export { APP_IDENTITY_DIR, APP_IDENTITY_ENV_VAR, APP_IDENTITY_FILENAME, APP_IDENTITY_SCHEMA_ID, AppIdentity, AppIdentityError, ConfigIdentifiers, Identity, IdentityMetadata, LoadIdentityOptions, MAX_ANCESTOR_SEARCH_DEPTH, PythonMetadata, RepositoryCategory, buildEnvVar, clearEmbeddedIdentity, clearIdentityCache, getBinaryName, getCachedIdentity, getConfigIdentifiers, getConfigName, getEmbeddedIdentity, getEnvPrefix, getEnvVar, getTelemetryNamespace, getVendor, hasEmbeddedIdentity, loadIdentity, registerEmbeddedIdentity } from './appidentity/index.js';
|
|
2
2
|
export { DocScribeError, DocScribeFormat, DocScribeFrontmatterResult, DocScribeHeader, DocScribeInfo, DocScribeMetadata, DocScribeMetadataValue, DocScribeOptions, DocScribeParseError, DocScribePrimitiveValue, DocScribeSplit, DocScribeUnsupportedFormatError, NormalizedInput, __internal, detectFormat, extractHeaders, extractMetadata, inspectDocument, normalizeInput, parseFrontmatter, splitDocuments, stripFrontmatter } from './docscribe/index.js';
|
|
3
3
|
export { ERROR_CODES, FULPACK_VERSION, FulpackOperationError, checkDecompressionBomb, create, createFulpackError, extract, hasPathTraversal, info, isAbsolutePath, scan, validatePath, verify } from './fulpack/index.js';
|
|
4
4
|
export { ArchiveEntry, ArchiveFormat, ArchiveInfo, ArchiveManifest, CreateOptions, EntryType, ExtractOptions, ExtractResult, FulpackError, Operation, ScanOptions, ValidationResult } from './crucible/fulpack/index.js';
|
|
@@ -11,6 +11,6 @@ import './types-BJswWpQC.js';
|
|
|
11
11
|
* Provides ergonomic access to Crucible SSOT assets and core utilities
|
|
12
12
|
* for TypeScript/Node.js applications in the FulmenHQ ecosystem.
|
|
13
13
|
*/
|
|
14
|
-
declare const VERSION = "0.
|
|
14
|
+
declare const VERSION = "0.2.0";
|
|
15
15
|
|
|
16
16
|
export { VERSION };
|