2026-05-30 00:39:39 +01:00
|
|
|
{
|
Publish the non-Rust packages and make the licensing uniform
Rust consumers pin a CultLib revision through cargo git dependencies, which is
how Ghostlight, Epiphany, CodexConnector and Odin already consume the core
stack. npm and pip cannot take a package from a subdirectory of a git repo at
all, which is why the TypeScript and Python consumers vendored forks instead:
there was nothing else to depend on. This gives them a versioned artifact.
Tagging cultcache-ts-v* or cultcache-py-v* builds, tests and publishes. The tag
version must match the manifest version or the workflow refuses rather than
shipping a mislabelled artifact. PyPI uses trusted publishing, so no long-lived
token is stored; npm needs an NPM_TOKEN secret.
cultcache-ts is now @gamecult/cultcache-ts. The scope is not cosmetic: it makes
the package unambiguously org-owned on a public registry, and it is what lets
CultLib hold the name rather than racing for an unscoped one. CultLib's own
cultmesh-ts and cultnet-ts and their imports move with it; all three packages
typecheck and cultcache-ts passes 12 of 13 tests, the exception being the
cross-runtime store test that shells out to Python, which cannot run on this
machine because its Python has no msgpack.
Licensing was inconsistent with the repo. cultcache-py declared itself "Private
GameCult infrastructure" and cultcache-rs and cultmesh-rs declared nothing,
inside a repo whose LICENSE is MIT and whose every other package says MIT. All
three now say MIT. That was load-bearing here: a package that calls itself
private is not one to push to a public registry.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-04 04:41:44 +02:00
|
|
|
"name": "@gamecult/cultcache-ts",
|
2026-10-20 14:54:14 +02:00
|
|
|
"version": "0.14.2",
|
2026-05-30 00:39:39 +01:00
|
|
|
"description": "CultCache-style typed persistence for TypeScript with schema-backed polymorphic MessagePack storage.",
|
|
|
|
|
"main": "dist/index.js",
|
|
|
|
|
"types": "dist/index.d.ts",
|
2026-06-05 12:23:58 +01:00
|
|
|
"exports": {
|
|
|
|
|
".": {
|
|
|
|
|
"types": "./dist/index.d.ts",
|
|
|
|
|
"require": "./dist/index.js",
|
|
|
|
|
"default": "./dist/index.js"
|
|
|
|
|
},
|
One typed owner of document-payload reads and writes: DocumentPayload is opaque, the definition is required
DocumentPayload is an opaque object type over the same runtime Uint8Array, keyed by a string
property, and types CultCacheEnvelope.payload, CultNetRawDocumentRecord.payload and
CultMeshRealtimeFrame.payload. decodeDocumentPayload(definition, payload) and
encodeDocumentPayload(definition, value) are the only reader and writer; documentPayloadFromBytes
and documentPayloadBytes are the two named escapes at the edges where bytes enter and leave.
resolveDocumentFormatter leaves the package index. The cache, cultnet replication, the mesh read
paths, the provider command (now a CultCache document), and the browser's decodeCultNetPayload
(definition required, cultcache-ts/document entry) all go through the owner.
Compile-fail fixtures per payload-carrying package pin the type with expect-error lines.
check-typescript-tests-wired.mjs fails when a test file is run by no script; cultcache-ts now
runs dist-test/test/*.test.js, and the portability workflow runs the check and the cache suite.
Builds in every package (tsc, src and tests); the suites run once, at the end of the pass.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-11 19:33:42 +02:00
|
|
|
"./document": {
|
|
|
|
|
"types": "./dist/document.d.ts",
|
|
|
|
|
"require": "./dist/document.js",
|
|
|
|
|
"default": "./dist/document.js"
|
|
|
|
|
},
|
2026-06-05 12:23:58 +01:00
|
|
|
"./inspection": {
|
|
|
|
|
"types": "./dist/cult-cache-inspector.d.ts",
|
|
|
|
|
"require": "./dist/cult-cache-inspector.js",
|
|
|
|
|
"default": "./dist/cult-cache-inspector.js"
|
|
|
|
|
}
|
|
|
|
|
},
|
One typed owner of document-payload reads and writes: DocumentPayload is opaque, the definition is required
DocumentPayload is an opaque object type over the same runtime Uint8Array, keyed by a string
property, and types CultCacheEnvelope.payload, CultNetRawDocumentRecord.payload and
CultMeshRealtimeFrame.payload. decodeDocumentPayload(definition, payload) and
encodeDocumentPayload(definition, value) are the only reader and writer; documentPayloadFromBytes
and documentPayloadBytes are the two named escapes at the edges where bytes enter and leave.
resolveDocumentFormatter leaves the package index. The cache, cultnet replication, the mesh read
paths, the provider command (now a CultCache document), and the browser's decodeCultNetPayload
(definition required, cultcache-ts/document entry) all go through the owner.
Compile-fail fixtures per payload-carrying package pin the type with expect-error lines.
check-typescript-tests-wired.mjs fails when a test file is run by no script; cultcache-ts now
runs dist-test/test/*.test.js, and the portability workflow runs the check and the cache suite.
Builds in every package (tsc, src and tests); the suites run once, at the end of the pass.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-11 19:33:42 +02:00
|
|
|
"typesVersions": {
|
|
|
|
|
"*": {
|
|
|
|
|
"document": [
|
|
|
|
|
"dist/document.d.ts"
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
},
|
2026-05-30 00:39:39 +01:00
|
|
|
"files": [
|
|
|
|
|
"dist"
|
|
|
|
|
],
|
|
|
|
|
"scripts": {
|
2026-07-13 23:47:38 +01:00
|
|
|
"build": "node ../../node_modules/typescript/bin/tsc -p tsconfig.json",
|
|
|
|
|
"prepack": "node ../../node_modules/typescript/bin/tsc -p tsconfig.json",
|
|
|
|
|
"typecheck": "node ../../node_modules/typescript/bin/tsc -p tsconfig.json --pretty false",
|
One typed owner of document-payload reads and writes: DocumentPayload is opaque, the definition is required
DocumentPayload is an opaque object type over the same runtime Uint8Array, keyed by a string
property, and types CultCacheEnvelope.payload, CultNetRawDocumentRecord.payload and
CultMeshRealtimeFrame.payload. decodeDocumentPayload(definition, payload) and
encodeDocumentPayload(definition, value) are the only reader and writer; documentPayloadFromBytes
and documentPayloadBytes are the two named escapes at the edges where bytes enter and leave.
resolveDocumentFormatter leaves the package index. The cache, cultnet replication, the mesh read
paths, the provider command (now a CultCache document), and the browser's decodeCultNetPayload
(definition required, cultcache-ts/document entry) all go through the owner.
Compile-fail fixtures per payload-carrying package pin the type with expect-error lines.
check-typescript-tests-wired.mjs fails when a test file is run by no script; cultcache-ts now
runs dist-test/test/*.test.js, and the portability workflow runs the check and the cache suite.
Builds in every package (tsc, src and tests); the suites run once, at the end of the pass.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-11 19:33:42 +02:00
|
|
|
"test": "node ../../node_modules/typescript/bin/tsc -p tsconfig.json && node ../../node_modules/typescript/bin/tsc -p tsconfig.test.json && node --test dist-test/test/*.test.js"
|
2026-05-30 00:39:39 +01:00
|
|
|
},
|
|
|
|
|
"keywords": [
|
|
|
|
|
"messagepack",
|
|
|
|
|
"schema",
|
|
|
|
|
"cache",
|
|
|
|
|
"persistence",
|
|
|
|
|
"zod",
|
|
|
|
|
"typescript"
|
|
|
|
|
],
|
|
|
|
|
"author": "metacratic",
|
|
|
|
|
"license": "MIT",
|
2026-07-13 23:47:38 +01:00
|
|
|
"repository": {
|
|
|
|
|
"type": "git",
|
|
|
|
|
"url": "git+https://github.com/GameCult/CultLib.git",
|
|
|
|
|
"directory": "packages/cultcache-ts"
|
|
|
|
|
},
|
|
|
|
|
"bugs": {
|
|
|
|
|
"url": "https://github.com/GameCult/CultLib/issues"
|
|
|
|
|
},
|
|
|
|
|
"homepage": "https://github.com/GameCult/CultLib/tree/main/packages/cultcache-ts#readme",
|
|
|
|
|
"engines": {
|
2026-09-29 01:21:18 +02:00
|
|
|
"node": ">=20"
|
2026-07-13 23:47:38 +01:00
|
|
|
},
|
2026-05-30 00:39:39 +01:00
|
|
|
"dependencies": {
|
|
|
|
|
"@msgpack/msgpack": "^3.1.3",
|
2026-10-20 14:47:19 +02:00
|
|
|
"koffi": "3.3.0",
|
2026-05-30 00:39:39 +01:00
|
|
|
"zod": "^3.25.76"
|
|
|
|
|
},
|
|
|
|
|
"devDependencies": {
|
|
|
|
|
"@types/node": "^24.0.0",
|
2026-06-05 12:23:58 +01:00
|
|
|
"typescript": "^5.9.0"
|
2026-05-30 00:39:39 +01:00
|
|
|
}
|
|
|
|
|
}
|