@ceramicnetwork/codecs
Version:
Ceramic Codecs
51 lines • 1.77 kB
JavaScript
import { CommitID, StreamID } from '@ceramicnetwork/streamid';
import { EventType } from '@ceramicnetwork/common';
import { Type, refinement, string, sparse, array, optional, boolean } from 'codeco';
import { enumCodec } from './enum.js';
export function isStreamIdString(input) {
try {
StreamID.fromString(input);
return true;
}
catch (err) {
return false;
}
}
export const streamIdString = refinement(string, isStreamIdString, 'StreamID-string');
export const streamIdAsString = new Type('StreamID-as-string', (input) => StreamID.isInstance(input), (input, context) => {
try {
return context.success(StreamID.fromString(input));
}
catch {
return context.failure();
}
}, (streamId) => {
return streamId.toString();
});
export const streamIdAsBytes = new Type('StreamID-as-bytes', (input) => StreamID.isInstance(input), (input, context) => {
try {
return context.success(StreamID.fromBytes(input));
}
catch {
return context.failure();
}
}, (streamId) => streamId.bytes);
export const commitIdAsString = new Type('CommitID-as-string', (input) => CommitID.isInstance(input), (input, context) => {
try {
return context.success(CommitID.fromString(input));
}
catch {
return context.failure();
}
}, (commitId) => commitId.toString());
export const StreamMetadata = sparse({
controllers: array(string),
model: optional(streamIdAsString),
context: optional(streamIdAsString),
family: optional(string),
schema: optional(string),
tags: optional(array(string)),
forbidControllerChange: optional(boolean),
});
export const EventTypeAsNumber = enumCodec('EventType', EventType);
//# sourceMappingURL=stream.js.map