Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Release/0.1.0 alpha.6 #7

Merged
merged 2 commits into from
Aug 31, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .changeset/pre.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
"light-ligers-exist",
"quick-pets-itch",
"shy-falcons-sip",
"three-lamps-develop",
"two-pigs-do"
]
}
5 changes: 5 additions & 0 deletions .changeset/three-lamps-develop.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@lens-protocol/metadata': patch
---

**Added** support for legacy Publication Metadata v1 and v2
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
# @lens-protocol/metadata

## 0.1.0-alpha.6

### Patch Changes

- cf7bfaa: **Added** support for legacy Publication Metadata v1 and v2

## 0.1.0-alpha.5

### Patch Changes
Expand Down
65 changes: 63 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,25 @@ PublicationMetadataSchema.safeParse(invalid);
// => { success: false, error: ZodError }
```

You can also parse legacy Publication Metadata v2 and v1 via:

```typescript
import { legacy } from '@lens-protocol/metadata';

legacy.PublicationMetadataSchema.parse(valid); // => legacy.PublicationMetadata
legacy.PublicationMetadataSchema.parse(invalid); // => throws ZodError

// OR

legacy.PublicationMetadataSchema.safeParse(valid);
// => { success: true, data: legacy.PublicationMetadata }
legacy.PublicationMetadataSchema.safeParse(invalid);
// => { success: false, error: ZodError }
```

> [!WARNING]
> When working with the `legacy` namespace make sure to use enums from tha same namespace, e.g. `legacy.PublicationMainFocus` instead of `PublicationMainFocus` to avoid confusion.

### Profile metadata

```typescript
Expand Down Expand Up @@ -87,7 +106,7 @@ if (!result.success) {

Every time you have a discriminated union, you can use the discriminant to narrow the type. See few examples below.

**PublicationMetadata**
**`PublicationMetadata`**

```typescript
import {
Expand Down Expand Up @@ -116,7 +135,49 @@ switch (publicationMetadata.$schema) {
}
```

**MetadataAttribute**
**`legacy.PublicationMetadata`**

`legacy.PublicationMetadata` is a discriminated union of `legacy.PublicationMetadataV1` and `legacy.PublicationMetadataV2` where the `version` property is the discriminant.

In turn `legacy.PublicationMetadataV2` is a discriminated union of:

- `legacy.PublicationMetadataV2Article`
- `legacy.PublicationMetadataV2Audio`
- `legacy.PublicationMetadataV2Embed`
- `legacy.PublicationMetadataV2Image`
- `legacy.PublicationMetadataV2Link`
- `legacy.PublicationMetadataV2TextOnly`
- `legacy.PublicationMetadataV2Video`

where the `mainContentFocus` property is the discriminant.

```typescript
import { legacy } from '@lens-protocol/metadata';

const publicationMetadata = legacy.PublicationMetadataSchema.parse(valid);

switch (publicationMetadata.version) {
case legacy.PublicationMetadataVersion.V1:
// publicationMetadata is legacy.PublicationMetadataV1
break;
case legacy.PublicationMetadataVersion.V2:
// publicationMetadata is legacy.PublicationMetadataV2

switch (publicationMetadata.mainContentFocus) {
case legacy.PublicationMainFocus.ARTICLE:
// publicationMetadata is legacy.PublicationMetadataV2Article
break;
case legacy.PublicationMainFocus.VIDEO:
// publicationMetadata is legacy.PublicationMetadataV2Video
break;

// ...
}
break;
}
```

**`MetadataAttribute`**

```typescript
import { MetadataAttribute, MetadataAttributeType } from '@lens-protocol/metadata';
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@lens-protocol/metadata",
"version": "0.1.0-alpha.5",
"version": "0.1.0-alpha.6",
"description": "Lens Protocol Metadata Standards",
"type": "module",
"main": "./dist/index.cjs",
Expand Down
2 changes: 2 additions & 0 deletions scripts/build.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ import {
AccessConditionSchema,
PublicationIdSchema,
AmountSchema,
TagSchema,
} from '../src';

const outputDir = 'jsonschemas';
Expand Down Expand Up @@ -97,6 +98,7 @@ for (const [path, Schema] of schemas) {
ProfileOwnershipCondition: ProfileOwnershipConditionSchema,
PublicationEncryptionStrategy: PublicationEncryptionStrategySchema,
PublicationId: PublicationIdSchema,
Tag: TagSchema,
},
});

Expand Down
11 changes: 11 additions & 0 deletions src/primitives.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,17 @@ export const LocaleSchema: z.Schema<Locale, z.ZodTypeDef, string> = z
.max(5)
.transform((value) => value as Locale);

/**
* An arbitrary tag.
*/
export type Tag = Brand<string, 'Tag'>;
/**
* @internal
*/
export const TagSchema: z.Schema<Tag, z.ZodTypeDef, string> = notEmptyString('An arbitrary tag.')
.max(50)
.transform((tag) => tag.toLowerCase() as Tag);

/**
* A Lens App identifier.
*/
Expand Down
Loading