port schemas over

This commit is contained in:
dholms 2022-09-12 12:46:07 -05:00
parent efe3f622b7
commit 1815bbe07d
30 changed files with 1693 additions and 5 deletions

@ -3,6 +3,11 @@
"version": "0.0.1",
"main": "src/index.ts",
"scripts": {
"schemas-compile": "node ./scripts/compile.js src",
"schemas-docs": "node ./scripts/docs.js",
"schemas-validate": "node ./scripts/validate.js",
"schemas-ifaces": "node ./scripts/ifaces.js src/types",
"schemas-build": "yarn schemas-compile && yarn schemas-ifaces",
"prettier": "prettier --check src/",
"prettier:fix": "prettier --write src/",
"lint": "eslint . --ext .ts,.tsx",
@ -14,5 +19,10 @@
},
"dependencies": {
"@adxp/schemas": "*"
},
"devDependencies": {
"ajv": "^8.11.0",
"ajv-formats": "^2.1.1",
"json-schema-to-typescript": "^11.0.2"
}
}

@ -0,0 +1,23 @@
const fs = require('node:fs')
const path = require('node:path')
exports.listAllNames = () => {
return fs.readdirSync(path.join(__dirname, '..', 'src', 'schemas'))
}
exports.readAll = () => {
const objs = []
for (const name of exports.listAllNames()) {
try {
const file = fs.readFileSync(
path.join(__dirname, '..', 'src', 'schemas', name),
'utf8'
)
objs.push(JSON.parse(file))
} catch (e) {
console.error(`Failed to read ${name}`)
throw e
}
}
return objs
}

@ -0,0 +1,17 @@
const path = require('path')
const fs = require('fs')
const { readAll } = require('./_util')
const schemas = readAll()
const result = `export const schemas = [${schemas.map(
(s) => `${JSON.stringify(s, null, 2)}`
)}]`
const dirPath = process.argv[2]
if(dirPath) {
const p = path.join(path.resolve(dirPath), 'defs.ts')
fs.writeFileSync(p, result)
}else {
console.log(result)
}

@ -0,0 +1,91 @@
const { readAll } = require('./_util')
const toTs = require('json-schema-to-typescript')
;(async () => {
const schemas = readAll()
schemas.sort((a, b) => {
if (a.$type === 'adxs-collection' && b.$type !== 'adxs-collection') {
return -1
}
if (a.$type !== 'adxs-collection' && b.$type === 'adxs-collection') {
return 1
}
if (a.$type === 'adxs-record' && b.$type !== 'adxs-record') {
return -1
}
if (a.$type !== 'adxs-record' && b.$type === 'adxs-record') {
return 1
}
return a.name.localeCompare(b.name)
})
const out = []
for (const s of schemas) {
out.push(`## ${getType(s)}: ${s.name}`)
out.push('')
out.push(outJson(s, 'Full Definition'))
out.push('')
out.push(s.$comment ? `${s.$comment + '\n'}` : '')
out.push('')
if (s.$type === 'adxs-collection') {
continue
}
out.push('**Interface**')
if (s.parameters) out.push(await outTs(s.parameters, 'Params'))
if (s.response) out.push(await outTs(s.response, 'Response'))
if (s.schema) out.push(await outTs(s.schema, 'Record'))
if (s.$ext?.['adxs-doc']?.examples) {
out.push('**Examples**')
for (const ex of s.$ext?.['adxs-doc']?.examples) {
out.push('')
out.push('```json')
out.push(JSON.stringify(ex, null, 2))
out.push('```')
out.push('')
}
}
out.push('')
}
console.log(out.join('\n'))
})()
function getType(schema) {
if (schema.$type === 'adxs-record') {
return 'Record'
}
if (schema.$type === 'adxs-collection') {
return 'Collection'
}
if (schema.$type === 'adxs-view') {
return 'View'
}
}
function outJson(v, title) {
if (v) {
return `<details><summary>${title}</summary><pre><code>${JSON.stringify(
v,
null,
2
)}</code></pre></details>\n`
}
return ''
}
async function outTs(v, title) {
if (v) {
if (v['$ref']) {
// HACK to workaround an issue with cyclic refs
Object.assign(v, v['$defs']['post'])
delete v['$ref']
}
return `\`\`\`typescript\n${await toTs.compile(
Object.assign({ title }, v),
undefined,
{
bannerComment: '',
}
)}\`\`\``
}
return ''
}

@ -0,0 +1,54 @@
const path = require('path')
const fs = require('fs')
const { readAll } = require('./_util')
const toTs = require('json-schema-to-typescript')
let dirPath = process.argv[2]
if (!dirPath) {
throw new Error('Please specify the output folder')
}
dirPath = path.resolve(dirPath)
const files = []
;(async () => {
const schemas = readAll()
schemas.sort((a, b) => {
return a.name.localeCompare(b.name)
})
const indexJs = []
for (const s of schemas) {
if (s.$type === 'adxs-collection') {
continue
}
const out = []
if (s.parameters) out.push(await outTs(s.parameters, 'Params'))
if (s.response) out.push(await outTs(s.response, 'Response'))
if (s.schema) out.push(await outTs(s.schema, 'Record'))
files.push({ name: `${s.name}.ts`, content: out.join('\n') })
indexJs.push(`export * as ${s.name} from './${s.name}'`)
}
console.log('writing', path.join(dirPath, 'index.ts'))
fs.writeFileSync(path.join(dirPath, 'index.ts'), indexJs.join('\n'))
for (const f of files) {
console.log('writing', path.join(dirPath, f.name))
fs.writeFileSync(path.join(dirPath, f.name), f.content)
}
})()
async function outTs(v, title) {
if (v) {
if (v['$ref']) {
// HACK to workaround an issue with cyclic refs
Object.assign(v, v['$defs']['post'])
delete v['$ref']
}
return await toTs.compile(Object.assign({ title }, v), undefined, {
bannerComment: '',
additionalProperties: false,
})
}
return ''
}

@ -0,0 +1,46 @@
const Ajv = require('ajv')
const ajvAddFormats = require('ajv-formats')
const { readAll } = require('./_util')
const ajv = new Ajv()
ajvAddFormats(ajv)
const schemas = readAll()
for (const schema of schemas) {
// TODO use schemas package for this
if (schema.params) {
try {
ajv.compile(schema.params)
} catch (e) {
console.error(`${schema.name} has an invalid .params`)
throw e
}
}
if (schema.response) {
try {
testExamples(ajv.compile(schema.response), schema)
} catch (e) {
console.error(`${schema.name} has an invalid .response`)
throw e
}
}
if (schema.schema) {
try {
testExamples(ajv.compile(schema.schema), schema)
} catch (e) {
console.error(`${schema.name} has an invalid .schema`)
throw e
}
}
}
function testExamples(validate, schema) {
const examples = schema.$ext?.['adxs-doc']?.examples || []
for (const example of examples) {
if (!validate(example)) {
console.error(`Example failed validation`, example)
console.error(validate.errors)
process.exit(1)
}
}
}

@ -15,7 +15,7 @@ import {
UserFollowersView,
UserFollowsView,
} from '@adxp/microblog'
import { schemas } from './schemas/defs'
import { schemas } from './defs'
export class MicroblogClient {
public client: AdxClient

@ -1,3 +1,3 @@
export * from './schemas/defs'
export * from './defs'
export * from './types'
export * from './client'

@ -0,0 +1,95 @@
{
"$type": "adxs-record",
"author": "blueskyweb.xyz",
"name": "Badge",
"$comment": "An assertion about the subject by this user.",
"locale": {
"en-US": {
"nameSingular": "Badge",
"namePlural": "Badges"
}
},
"schema": {
"type": "object",
"required": ["assertion", "subject", "createdAt"],
"properties": {
"assertion": {
"oneOf": [
{"$ref": "#/$defs/inviteAssertion"},
{"$ref": "#/$defs/employeeAssertion"},
{"$ref": "#/$defs/tagAssertion"},
{"$ref": "#/$defs/unknownAssertion"}
]
},
"subject": { "type": "string" },
"createdAt": {"type": "string", "format": "date-time"}
},
"$defs": {
"inviteAssertion": {
"type": "object",
"required": ["type"],
"properties": {
"type": {"const": "invite"}
}
},
"employeeAssertion": {
"type": "object",
"required": ["type"],
"properties": {
"type": {"const": "employee"}
}
},
"tagAssertion": {
"type": "object",
"required": ["type", "tag"],
"properties": {
"type": {"const": "tag"},
"tag": {"type": "string", "maxLength": 64}
}
},
"unknownAssertion": {
"type": "object",
"required": ["type"],
"properties": {
"type": {
"type": "string",
"not": {"enum": ["invite", "employee", "tag"]}
}
}
}
}
},
"$ext": {
"adxs-doc": {
"examples": [
{
"$type": "blueskyweb.xyz:Badge",
"assertion": {"type": "employee"},
"subject": {
"did": "did:example:1234",
"name": "alice.com"
},
"createdAt": "2010-01-01T19:23:24Z"
},
{
"$type": "blueskyweb.xyz:Badge",
"assertion": {"type": "tag", "tag": "tech"},
"subject": {
"did": "did:example:1234",
"name": "alice.com"
},
"createdAt": "2010-01-01T19:23:24Z"
},
{
"$type": "blueskyweb.xyz:Badge",
"assertion": {"type": "something-else", "param": "allowed"},
"subject": {
"did": "did:example:1234",
"name": "alice.com"
},
"createdAt": "2010-01-01T19:23:24Z"
}
]
}
}
}

@ -0,0 +1,12 @@
{
"$type": "adxs-collection",
"author": "blueskyweb.xyz",
"name": "Badges",
"$comment": "Where you put badges.",
"locale": {
"en-US": {
"nameSingular": "Badges",
"namePlural": "Badges Collections"
}
}
}

@ -0,0 +1,54 @@
{
"$type": "adxs-record",
"author": "blueskyweb.xyz",
"name": "EmbeddedMedia",
"$comment": "A list of media embedded in a post or document.",
"locale": {
"en-US": {
"nameSingular": "Embedded Media",
"namePlural": "Embedded Media"
}
},
"schema": {
"type": "object",
"required": ["media"],
"properties": {
"media": {"type": "array", "items": {"$ref": "#/$defs/mediaEmbed"}}
},
"$defs": {
"mediaEmbed": {
"type": "object",
"required": ["original"],
"properties": {
"alt": {"type": "string"},
"thumb": {"$ref": "#/$defs/mediaEmbedBlob"},
"original": {"$ref": "#/$defs/mediaEmbedBlob"}
}
},
"mediaEmbedBlob": {
"type": "object",
"required": ["mimeType", "blobId"],
"properties": {
"mimeType": {"type": "string"},
"blobId": {"type": "string"}
}
}
}
},
"$ext": {
"adxs-doc": {
"examples": [
{
"$type": "blueskyweb.xyz:EmbeddedMedia",
"media": [
{
"alt": "Me at the beach",
"thumb": {"mimeType": "image/png", "blobId": "1234"},
"original": {"mimeType": "image/png", "blobId": "1235"}
}
]
}
]
}
}
}

@ -0,0 +1,184 @@
{
"$type": "adxs-view",
"author": "blueskyweb.xyz",
"name": "FeedView",
"$comment": "A computed view of the home feed or a user's feed",
"reads": [
"blueskyweb.xyz:Feed",
"blueskyweb.xyz:SocialGraph"
],
"parameters": {
"type": "object",
"properties": {
"author": {"type": "string"},
"limit": {"type": "number", "maximum": 100},
"before": {"type": "string", "format": "date-time"}
}
},
"response": {
"type": "object",
"required": ["feed"],
"properties": {
"feed": {
"type": "array",
"items": {"$ref": "#/$defs/feedItem"}
}
},
"$defs": {
"feedItem": {
"type": "object",
"required": ["uri", "author", "record", "replyCount", "repostCount", "likeCount", "indexedAt"],
"properties": {
"uri": {"type": "string"},
"author": {"$ref": "#/$defs/user"},
"repostedBy": {"$ref": "#/$defs/user"},
"record": {"type": "object"},
"embed": {
"oneOf": [
{"$ref": "#/$defs/recordEmbed"},
{"$ref": "#/$defs/externalEmbed"},
{"$ref": "#/$defs/unknownEmbed"}
]
},
"replyCount": {"type": "number"},
"repostCount": {"type": "number"},
"likeCount": {"type": "number"},
"indexedAt": {"type": "string", "format": "date-time"},
"myState": {
"type": "object",
"properties": {
"repost": {"type": "string"},
"like": {"type": "string"}
}
}
}
},
"user": {
"type": "object",
"required": ["did", "name"],
"properties": {
"did": {"type": "string"},
"name": {"type": "string"},
"displayName": {
"type": "string",
"maxLength": 64
}
}
},
"recordEmbed": {
"type": "object",
"required": ["type", "author", "record"],
"properties": {
"type": {"const": "record"},
"author": {"$ref": "#/$defs/user"},
"record": {"type": "object"}
}
},
"externalEmbed": {
"type": "object",
"required": ["type", "uri", "title", "description", "imageUri"],
"properties": {
"type": {"const": "external"},
"uri": {"type": "string"},
"title": {"type": "string"},
"description": {"type": "string"},
"imageUri": {"type": "string"}
}
},
"unknownEmbed": {
"type": "object",
"required": ["type"],
"properties": {
"type": {
"type": "string",
"not": {"enum": ["record", "external"]}
}
}
}
}
},
"$ext": {
"adxs-doc": {
"examples": [
{
"feed": [{
"uri": "adx://alice.com/blueskyweb.xyz:Feed/1",
"author": {"did": "did:example:1234", "name": "alice.com", "displayName": "Alice"},
"repostedBy": {"did": "did:example:1235", "name": "bob.com", "displayName": "Bob"},
"record": {
"$type": "blueskyweb.xyz:Post",
"text": "Hello, world!",
"createdAt": "2022-07-11T21:55:36.553Z"
},
"replyCount": 0,
"repostCount": 0,
"likeCount": 0,
"indexedAt": "2022-07-11T21:55:36.553Z"
}, {
"uri": "adx://alice.com/blueskyweb.xyz:Feed/1",
"author": {"did": "did:example:1234", "name": "alice.com", "displayName": "Alice"},
"record": {
"$type": "blueskyweb.xyz:Post",
"text": "This is a link to a post adx://bob.com/blueskyweb.xyz:Feed/1",
"createdAt": "2022-07-11T21:55:36.553Z"
},
"embed": {
"type": "record",
"author": {"did": "did:example:1235", "name": "bob.com", "displayName": "Bob"},
"record": {
"$type": "blueskyweb.xyz:Post",
"text": "Hello, world!",
"createdAt": "2022-07-11T21:55:36.553Z"
}
},
"replyCount": 0,
"repostCount": 0,
"likeCount": 0,
"indexedAt": "2022-07-11T21:55:36.553Z"
}, {
"uri": "adx://alice.com/blueskyweb.xyz:Feed/1",
"author": {"did": "did:example:1234", "name": "alice.com", "displayName": "Alice"},
"record": {
"$type": "blueskyweb.xyz:Post",
"text": "Check out my website alice.com",
"entities": [
{
"index": [21, 30],
"type": "link",
"value": "https://alice.com"
}
],
"createdAt": "2022-07-11T21:55:36.553Z"
},
"embed": {
"type": "external",
"uri": "https://alice.com",
"title": "Alice's personal website",
"description": "Just a collection of my thoughts and feelings",
"imageUri": "/cdn/cache/web/https-alice-com.jpeg"
},
"replyCount": 0,
"repostCount": 0,
"likeCount": 0,
"indexedAt": "2022-07-11T21:55:36.553Z"
}, {
"uri": "adx://alice.com/blueskyweb.xyz:Feed/1",
"author": {"did": "did:example:1234", "name": "alice.com", "displayName": "Alice"},
"record": {
"$type": "blueskyweb.xyz:Post",
"text": "Another test"
},
"embed": {
"type": "somethingelse",
"embedIsFutureProof": true
},
"replyCount": 0,
"repostCount": 0,
"likeCount": 0,
"indexedAt": "2022-07-11T21:55:36.553Z"
}]
}
]
}
}
}

@ -0,0 +1,34 @@
{
"$type": "adxs-record",
"author": "blueskyweb.xyz",
"name": "Follow",
"$comment": "A social follow",
"locale": {
"en-US": {
"nameSingular": "Follow",
"namePlural": "Follows"
}
},
"schema": {
"type": "object",
"required": ["subject", "createdAt"],
"properties": {
"subject": { "type": "string" },
"createdAt": {"type": "string", "format": "date-time"}
}
},
"$ext": {
"adxs-doc": {
"examples": [
{
"$type": "blueskyweb.xyz:Follow",
"subject": {
"did": "did:example:1234",
"name": "alice.com"
},
"createdAt": "2022-07-11T21:55:36.553Z"
}
]
}
}
}

@ -0,0 +1,12 @@
{
"$type": "adxs-collection",
"author": "blueskyweb.xyz",
"name": "Follows",
"$comment": "Where you put follows.",
"locale": {
"en-US": {
"nameSingular": "Follows",
"namePlural": "Follows Collections"
}
}
}

@ -0,0 +1,30 @@
{
"$type": "adxs-record",
"author": "blueskyweb.xyz",
"name": "Like",
"locale": {
"en-US": {
"nameSingular": "Like",
"namePlural": "Likes"
}
},
"schema": {
"type": "object",
"required": ["subject", "createdAt"],
"properties": {
"subject": {"type": "string"},
"createdAt": {"type": "string", "format": "date-time"}
}
},
"$ext": {
"adxs-doc": {
"examples": [
{
"$type": "blueskyweb.xyz:Like",
"subject": "adx://alice.com/blueskyweb.xyz:Feed/1234",
"createdAt": "2022-07-11T21:55:36.553Z"
}
]
}
}
}

@ -0,0 +1,60 @@
{
"$type": "adxs-view",
"author": "blueskyweb.xyz",
"name": "LikedByView",
"reads": [
"blueskyweb.xyz:Feed",
"blueskyweb.xyz:SocialGraph"
],
"parameters": {
"type": "object",
"required": ["uri"],
"properties": {
"uri": {"type": "string"},
"limit": {"type": "number", "maximum": 100},
"before": {"type": "string", "format": "date-time"}
}
},
"response": {
"type": "object",
"required": ["uri", "likedBy"],
"properties": {
"uri": {"type": "string"},
"likedBy": {
"type": "array",
"items": {
"type": "object",
"required": ["did", "name", "indexedAt"],
"properties": {
"did": {"type": "string"},
"name": {"type": "string"},
"displayName": {
"type": "string",
"maxLength": 64
},
"createdAt": {"type": "string", "format": "date-time"},
"indexedAt": {"type": "string", "format": "date-time"}
}
}
}
}
},
"$ext": {
"adxs-doc": {
"examples": [
{
"uri": "adx://alice.com/blueskyweb.xyz:Feed/1234",
"likedBy": [
{
"did": "did:example:1234",
"name": "bob.com",
"displayName": "Bob",
"createdAt": "2022-07-11T21:55:36.553Z",
"indexedAt": "2022-07-11T21:55:36.553Z"
}
]
}
]
}
}
}

@ -0,0 +1,12 @@
{
"$type": "adxs-collection",
"author": "blueskyweb.xyz",
"name": "Likes",
"$comment": "Where you put likes.",
"locale": {
"en-US": {
"nameSingular": "Likes",
"namePlural": "Likes Collections"
}
}
}

@ -0,0 +1,50 @@
{
"$type": "adxs-view",
"author": "blueskyweb.xyz",
"name": "NotificationsView",
"reads": [
"blueskyweb.xyz:Feed",
"blueskyweb.xyz:SocialGraph"
],
"parameters": {
"type": "object",
"properties": {
"limit": {"type": "number", "maximum": 100},
"before": {"type": "string", "format": "date-time"}
}
},
"response": {
"type": "object",
"required": ["notifications"],
"properties": {
"notifications": {
"type": "array",
"items": {"$ref": "#/$defs/notification"}
}
},
"$defs": {
"notification": {
"type": "object",
"required": ["uri", "author", "record", "isRead", "indexedAt"],
"properties": {
"uri": {"type": "string", "format": "uri"},
"author": {
"type": "object",
"required": ["did", "name", "displayName"],
"properties": {
"did": {"type": "string"},
"name": {"type": "string"},
"displayName": {
"type": "string",
"maxLength": 64
}
}
},
"record": {"type": "object"},
"isRead": {"type": "boolean"},
"indexedAt": {"type": "string", "format": "date-time"}
}
}
}
}
}

@ -0,0 +1,109 @@
{
"$type": "adxs-record",
"author": "blueskyweb.xyz",
"name": "Post",
"locale": {
"en-US": {
"nameSingular": "Post",
"namePlural": "Posts"
}
},
"schema": {
"type": "object",
"required": ["text", "createdAt"],
"properties": {
"text": {"type": "string", "maxLength": 256},
"entities": {"$ref": "#/$defs/entity"},
"reply": {
"type": "object",
"required": ["root"],
"properties": {
"root": {"type": "string"},
"parent": {"type": "string"}
}
},
"createdAt": {"type": "string", "format": "date-time"}
},
"$defs": {
"entity": {
"type": "array",
"items": {
"type": "object",
"required": ["index", "type", "value"],
"properties": {
"index": {"$ref": "#/$defs/textSlice"},
"type": {
"type": "string",
"$comment": "Expected values are 'mention', 'hashtag', and 'link'."
},
"value": {"type": "string"}
}
}
},
"textSlice": {
"type": "array",
"items": [{"type": "number"}, {"type": "number"}],
"minItems": 2,
"maxItems": 2
}
}
},
"$ext": {
"adxs-doc": {
"examples": [
{
"$type": "blueskyweb.xyz:Post",
"text": "Hello, world!",
"createdAt": "2022-07-11T21:55:36.553Z"
},
{
"$type": "blueskyweb.xyz:Post",
"text": "This is a reply to a post",
"reply": {
"root": "adx://alice.com/blueskyweb.xyz:Feed/1",
"parent": "adx://bob.com/blueskyweb.xyz:Feed/9"
},
"createdAt": "2022-07-11T21:55:36.553Z"
},
{
"$type": "blueskyweb.xyz:Post",
"text": "Hey @bob.com, are we #CrushingIt or what? Check out my website alice.com",
"entities": [
{
"index": [4, 12],
"type": "mention",
"value": "did:example:1234"
},
{
"index": [21, 32],
"type": "hashtag",
"value": "CrushingIt"
},
{
"index": [63, 72],
"type": "link",
"value": "https://alice.com"
}
],
"createdAt": "2022-07-11T21:55:36.553Z"
},
{
"$type": "blueskyweb.xyz:Post",
"text": "This post embeds an image!",
"$ext": {
"blueskyweb.xyz:EmbeddedMedia": {
"media": [
{
"alt": "Me at the beach",
"thumb": {"mimeType": "image/png", "blobId": "1234"},
"original": {"mimeType": "image/png", "blobId": "1235"}
}
]
}
},
"createdAt": "2022-07-11T21:55:36.553Z"
}
]
}
}
}

@ -0,0 +1,189 @@
{
"$type": "adxs-view",
"author": "blueskyweb.xyz",
"name": "PostThreadView",
"reads": [
"blueskyweb.xyz:Feed",
"blueskyweb.xyz:SocialGraph"
],
"parameters": {
"type": "object",
"required": ["uri"],
"properties": {
"uri": {"type": "string"},
"depth": {"type": "number"}
}
},
"response": {
"type": "object",
"required": ["thread"],
"properties": {
"thread": {"$ref": "#/$defs/post"}
},
"$defs": {
"post": {
"type": "object",
"required": ["uri", "author", "record", "replyCount", "likeCount", "repostCount", "indexedAt"],
"properties": {
"uri": {"type": "string"},
"author": {"$ref": "#/$defs/user"},
"record": {"type": "object"},
"embed": {
"oneOf": [
{"$ref": "#/$defs/recordEmbed"},
{"$ref": "#/$defs/externalEmbed"},
{"$ref": "#/$defs/unknownEmbed"}
]
},
"parent": {"$ref": "#/$defs/post"},
"replyCount": {"type": "number"},
"replies": {
"type": "array",
"items": {"$ref": "#/$defs/post"}
},
"likeCount": {"type": "number"},
"repostCount": {"type": "number"},
"indexedAt": {"type": "string", "format": "date-time"},
"myState": {
"type": "object",
"properties": {
"repost": {"type": "string"},
"like": {"type": "string"}
}
}
}
},
"user": {
"type": "object",
"required": ["did", "name"],
"properties": {
"did": {"type": "string"},
"name": {"type": "string"},
"displayName": {
"type": "string",
"maxLength": 64
}
}
},
"recordEmbed": {
"type": "object",
"required": ["type", "author", "record"],
"properties": {
"type": {"const": "record"},
"author": {"$ref": "#/$defs/user"},
"record": {"type": "object"}
}
},
"externalEmbed": {
"type": "object",
"required": ["type", "uri", "title", "description", "imageUri"],
"properties": {
"type": {"const": "external"},
"uri": {"type": "string"},
"title": {"type": "string"},
"description": {"type": "string"},
"imageUri": {"type": "string"}
}
},
"unknownEmbed": {
"type": "object",
"required": ["type"],
"properties": {
"type": {
"type": "string",
"not": {"enum": ["record", "external"]}
}
}
}
}
},
"$ext": {
"adxs-doc": {
"examples": [{
"thread": {
"uri": "adx://alice.com/blueskyweb.xyz:Feed/1",
"author": {"did": "did:example:1234", "name": "alice.com", "displayName": "Alice"},
"repostedBy": {"did": "did:example:1235", "name": "bob.com", "displayName": "Bob"},
"record": {
"$type": "blueskyweb.xyz:Post",
"text": "Hello, world!",
"createdAt": "2022-07-11T21:55:36.553Z"
},
"replyCount": 3,
"repostCount": 0,
"likeCount": 0,
"indexedAt": "2022-07-11T21:55:36.553Z",
"replies": [
{
"uri": "adx://alice.com/blueskyweb.xyz:Feed/2",
"author": {"did": "did:example:1234", "name": "alice.com", "displayName": "Alice"},
"record": {
"$type": "blueskyweb.xyz:Post",
"text": "This is a link to a post adx://bob.com/blueskyweb.xyz:Feed/1",
"createdAt": "2022-07-11T21:55:36.553Z"
},
"embed": {
"type": "record",
"author": {"did": "did:example:1235", "name": "bob.com", "displayName": "Bob"},
"record": {
"$type": "blueskyweb.xyz:Post",
"text": "Hello, world!",
"createdAt": "2022-07-11T21:55:36.553Z"
}
},
"replyCount": 1,
"repostCount": 0,
"likeCount": 0,
"indexedAt": "2022-07-11T21:55:36.553Z",
"replies": [
{
"uri": "adx://alice.com/blueskyweb.xyz:Feed/3",
"author": {"did": "did:example:1234", "name": "alice.com", "displayName": "Alice"},
"record": {
"$type": "blueskyweb.xyz:Post",
"text": "Another test"
},
"embed": {
"type": "somethingelse",
"embedIsFutureProof": true
},
"replyCount": 0,
"repostCount": 0,
"likeCount": 0,
"indexedAt": "2022-07-11T21:55:36.553Z"
}
]
},
{
"uri": "adx://alice.com/blueskyweb.xyz:Feed/4",
"author": {"did": "did:example:1234", "name": "alice.com", "displayName": "Alice"},
"record": {
"$type": "blueskyweb.xyz:Post",
"text": "Check out my website alice.com",
"entities": [
{
"index": [21, 30],
"type": "link",
"value": "https://alice.com"
}
],
"createdAt": "2022-07-11T21:55:36.553Z"
},
"embed": {
"type": "external",
"uri": "https://alice.com",
"title": "Alice's personal website",
"description": "Just a collection of my thoughts and feelings",
"imageUri": "/cdn/cache/web/https-alice-com.jpeg"
},
"replyCount": 0,
"repostCount": 0,
"likeCount": 0,
"indexedAt": "2022-07-11T21:55:36.553Z"
}
]
}
}]
}
}
}

@ -0,0 +1,12 @@
{
"$type": "adxs-collection",
"author": "blueskyweb.xyz",
"name": "Posts",
"$comment": "Where you put posts and reposts.",
"locale": {
"en-US": {
"nameSingular": "Posts",
"namePlural": "Posts Collections"
}
}
}

@ -0,0 +1,49 @@
{
"$type": "adxs-record",
"author": "blueskyweb.xyz",
"name": "Profile",
"locale": {
"en-US": {
"nameSingular": "Profile",
"namePlural": "Profiles"
}
},
"schema": {
"type": "object",
"required": ["displayName"],
"properties": {
"displayName": {
"type": "string",
"maxLength": 64
},
"description": {
"type": "string",
"maxLength": 256
},
"badges": {"type": "array", "items": {"$ref": "#/$defs/badgeRef"}}
},
"$defs": {
"badgeRef": {
"type": "object",
"required": ["uri"],
"properties": {
"uri": {"type": "string"}
}
}
}
},
"$ext": {
"adxs-doc": {
"examples": [
{
"$type": "blueskyweb.xyz:Profile",
"displayName": "Alice",
"description": "A cool hacker chick",
"badges": [{
"uri": "adx://bob.com/blueskyweb.xyz:Social/1234"
}]
}
]
}
}
}

@ -0,0 +1,109 @@
{
"$type": "adxs-view",
"author": "blueskyweb.xyz",
"name": "ProfileView",
"reads": [
"blueskyweb.xyz:Feed",
"blueskyweb.xyz:SocialGraph"
],
"parameters": {
"type": "object",
"required": ["user"],
"properties": {
"user": {"type": "string"}
}
},
"response": {
"type": "object",
"required": ["did", "name", "followersCount", "followsCount", "postsCount", "badges"],
"properties": {
"did": {"type": "string"},
"name": {"type": "string"},
"displayName": {
"type": "string",
"maxLength": 64
},
"description": {
"type": "string",
"maxLength": 256
},
"followersCount": {"type": "number"},
"followsCount": {"type": "number"},
"postsCount": {"type": "number"},
"badges": {"type": "array", "items": {"$ref":"#/$defs/badge"}},
"myState": {
"type": "object",
"properties": {
"follow": {"type": "string"}
}
}
},
"$defs": {
"badge": {
"type": "object",
"required": ["uri"],
"properties": {
"uri": {"type": "string"},
"error": {"type": "string"},
"issuer": {
"type": "object",
"required": ["did", "name", "displayName"],
"properties": {
"did": {"type": "string"},
"name": {"type": "string"},
"displayName": {
"type": "string",
"maxLength": 64
}
}
},
"assertion": {
"type": "object",
"required": ["type"],
"properties": {
"type": {"type": "string"}
}
},
"createdAt": {"type": "string", "format": "date-time"}
}
}
}
},
"$ext": {
"adxs-doc": {
"examples": [
{
"did": "did:example:1234",
"name": "alice.com",
"displayName": "Alice",
"description": "A cool hacker chick",
"followersCount": 1000,
"followsCount": 100,
"postsCount": 250,
"badges": [
{
"uri": "adx://work.com/blueskyweb.xyz:Social/1234",
"issuer": {
"did": "did:example:4321",
"name": "work.com",
"displayName": "Work"
},
"assertion": {"type": "employee"},
"createdAt": "2010-01-01T19:23:24Z"
},
{
"uri": "adx://bob.com/blueskyweb.xyz:Social/2222",
"issuer": {
"did": "did:example:5555",
"name": "bob.com",
"displayName": "Bob"
},
"assertion": {"type": "tag", "tag": "tech"},
"createdAt": "2010-01-01T19:23:24Z"
}
]
}
]
}
}
}

@ -0,0 +1,12 @@
{
"$type": "adxs-collection",
"author": "blueskyweb.xyz",
"name": "Profiles",
"$comment": "Where you put your profile.",
"locale": {
"en-US": {
"nameSingular": "Profiles",
"namePlural": "Profiles Collections"
}
}
}

@ -0,0 +1,30 @@
{
"$type": "adxs-record",
"author": "blueskyweb.xyz",
"name": "Repost",
"locale": {
"en-US": {
"nameSingular": "Repost",
"namePlural": "Reposts"
}
},
"schema": {
"type": "object",
"required": ["subject", "createdAt"],
"properties": {
"subject": {"type": "string"},
"createdAt": {"type": "string", "format": "date-time"}
}
},
"$ext": {
"adxs-doc": {
"examples": [
{
"$type": "blueskyweb.xyz:Repost",
"subject": "adx://alice.com/blueskyweb.xyz:Feed/1234",
"createdAt": "2022-07-11T21:55:36.553Z"
}
]
}
}
}

@ -0,0 +1,60 @@
{
"$type": "adxs-view",
"author": "blueskyweb.xyz",
"name": "RepostedByView",
"reads": [
"blueskyweb.xyz:Feed",
"blueskyweb.xyz:SocialGraph"
],
"parameters": {
"type": "object",
"required": ["uri"],
"properties": {
"uri": {"type": "string"},
"limit": {"type": "number", "maximum": 100},
"before": {"type": "string", "format": "date-time"}
}
},
"response": {
"type": "object",
"required": ["uri", "repostedBy"],
"properties": {
"uri": {"type": "string"},
"repostedBy": {
"type": "array",
"items": {
"type": "object",
"required": ["did", "name", "indexedAt"],
"properties": {
"did": {"type": "string"},
"name": {"type": "string"},
"displayName": {
"type": "string",
"maxLength": 64
},
"createdAt": {"type": "string", "format": "date-time"},
"indexedAt": {"type": "string", "format": "date-time"}
}
}
}
}
},
"$ext": {
"adxs-doc": {
"examples": [
{
"uri": "adx://alice.com/blueskyweb.xyz:Feed/1234",
"repostedBy": [
{
"did": "did:example:1234",
"name": "bob.com",
"displayName": "Bob",
"createdAt": "2022-07-11T21:55:36.553Z",
"indexedAt": "2022-07-11T21:55:36.553Z"
}
]
}
]
}
}
}

@ -0,0 +1,75 @@
{
"$type": "adxs-view",
"author": "blueskyweb.xyz",
"name": "UserFollowersView",
"$comment": "Who is following a user?",
"reads": [
"blueskyweb.xyz:SocialGraph"
],
"parameters": {
"type": "object",
"required": ["user"],
"properties": {
"user": {"type": "string"},
"limit": {"type": "number", "maximum": 100},
"before": {"type": "string", "format": "date-time"}
}
},
"response": {
"type": "object",
"required": ["subject", "followers"],
"properties": {
"subject": {
"type": "object",
"required": ["did", "name"],
"properties": {
"did": {"type": "string"},
"name": {"type": "string"},
"displayName": {
"type": "string",
"maxLength": 64
}
}
},
"followers": {
"type": "array",
"items": {
"type": "object",
"required": ["did", "name", "indexedAt"],
"properties": {
"did": {"type": "string"},
"name": {"type": "string"},
"displayName": {
"type": "string",
"maxLength": 64
},
"createdAt": {"type": "string", "format": "date-time"},
"indexedAt": {"type": "string", "format": "date-time"}
}
}
}
}
},
"$ext": {
"adxs-doc": {
"examples": [
{
"subject": {
"did": "did:example:1235",
"name": "alice.com",
"displayName": "Alice"
},
"followers": [
{
"did": "did:example:1234",
"name": "bob.com",
"displayName": "Bob",
"createdAt": "2022-07-11T21:55:36.553Z",
"indexedAt": "2022-07-11T21:55:36.553Z"
}
]
}
]
}
}
}

@ -0,0 +1,75 @@
{
"$type": "adxs-view",
"author": "blueskyweb.xyz",
"name": "UserFollowsView",
"$comment": "Who is a user following?",
"reads": [
"blueskyweb.xyz:SocialGraph"
],
"parameters": {
"type": "object",
"required": ["user"],
"properties": {
"user": {"type": "string"},
"limit": {"type": "number", "maximum": 100},
"before": {"type": "string", "format": "date-time"}
}
},
"response": {
"type": "object",
"required": ["subject", "follows"],
"properties": {
"subject": {
"type": "object",
"required": ["did", "name"],
"properties": {
"did": {"type": "string"},
"name": {"type": "string"},
"displayName": {
"type": "string",
"maxLength": 64
}
}
},
"follows": {
"type": "array",
"items": {
"type": "object",
"required": ["did", "name", "indexedAt"],
"properties": {
"did": {"type": "string"},
"name": {"type": "string"},
"displayName": {
"type": "string",
"maxLength": 64
},
"createdAt": {"type": "string", "format": "date-time"},
"indexedAt": {"type": "string", "format": "date-time"}
}
}
}
}
},
"$ext": {
"adxs-doc": {
"examples": [
{
"subject": {
"did": "did:example:1235",
"name": "alice.com",
"displayName": "Alice"
},
"follows": [
{
"did": "did:example:1234",
"name": "bob.com",
"displayName": "Bob",
"createdAt": "2022-07-11T21:55:36.553Z",
"indexedAt": "2022-07-11T21:55:36.553Z"
}
]
}
]
}
}
}

190
yarn.lock

@ -965,6 +965,16 @@
"@babel/helper-validator-identifier" "^7.18.6"
to-fast-properties "^2.0.0"
"@bcherny/json-schema-ref-parser@9.0.9":
version "9.0.9"
resolved "https://registry.yarnpkg.com/@bcherny/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz#09899d405bc708c0acac0066ae8db5b94d465ca4"
integrity sha512-vmEmnJCfpkLdas++9OYg6riIezTYqTHpqUTODJzHLzs5UnXujbOJW9VwcVCnyo1mVRt32FRr23iXBx/sX8YbeQ==
dependencies:
"@jsdevtools/ono" "^7.1.3"
"@types/json-schema" "^7.0.6"
call-me-maybe "^1.0.1"
js-yaml "^4.1.0"
"@bcoe/v8-coverage@^0.2.3":
version "0.2.3"
resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
@ -1360,6 +1370,11 @@
"@jridgewell/resolve-uri" "^3.0.3"
"@jridgewell/sourcemap-codec" "^1.4.10"
"@jsdevtools/ono@^7.1.3":
version "7.1.3"
resolved "https://registry.yarnpkg.com/@jsdevtools/ono/-/ono-7.1.3.tgz#9df03bbd7c696a5c58885c34aa06da41c8543796"
integrity sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==
"@lerna/add@4.0.0":
version "4.0.0"
resolved "https://registry.yarnpkg.com/@lerna/add/-/add-4.0.0.tgz#c36f57d132502a57b9e7058d1548b7a565ef183f"
@ -2712,6 +2727,14 @@
"@types/minimatch" "*"
"@types/node" "*"
"@types/glob@^7.1.3":
version "7.2.0"
resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb"
integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==
dependencies:
"@types/minimatch" "*"
"@types/node" "*"
"@types/graceful-fs@^4.1.3":
version "4.1.5"
resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15"
@ -2754,11 +2777,16 @@
jest-matcher-utils "^28.0.0"
pretty-format "^28.0.0"
"@types/json-schema@^7.0.7":
"@types/json-schema@^7.0.11", "@types/json-schema@^7.0.6", "@types/json-schema@^7.0.7":
version "7.0.11"
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3"
integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==
"@types/lodash@^4.14.182":
version "4.14.185"
resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.185.tgz#c9843f5a40703a8f5edfd53358a58ae729816908"
integrity sha512-evMDG1bC4rgQg4ku9tKpuMh5iBNEwNa3tf9zRHdP1qlv+1WUg44xat4IxCE14gIpZRGUUWAx2VhItCZc25NfMA==
"@types/mime@^1":
version "1.3.2"
resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a"
@ -2817,6 +2845,11 @@
resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.6.3.tgz#68ada76827b0010d0db071f739314fa429943d0a"
integrity sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg==
"@types/prettier@^2.6.1":
version "2.7.0"
resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.0.tgz#ea03e9f0376a4446f44797ca19d9c46c36e352dc"
integrity sha512-RI1L7N4JnW5gQw2spvL7Sllfuf1SaHdrZpCHiBlCXjIlufi1SMNnbu2teze3/QE67Fg2tBlH7W+mi4hVNk4p0A==
"@types/prompt@^1.1.2":
version "1.1.2"
resolved "https://registry.yarnpkg.com/@types/prompt/-/prompt-1.1.2.tgz#e9191350fe2c0035c22fef1235b1b09f26e5645a"
@ -3850,6 +3883,11 @@ call-bind@^1.0.0, call-bind@^1.0.2:
function-bind "^1.1.1"
get-intrinsic "^1.0.2"
call-me-maybe@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b"
integrity sha512-wCyFsDQkKPwwF8BDwOiWNx/9K45L/hvggQiDbve+viMNMQnWhrlYIuBk09offfwCRtCO9P6XwUttufzU11WCVw==
callsites@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
@ -4037,6 +4075,17 @@ clean-stack@^2.0.0:
resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==
cli-color@^2.0.2:
version "2.0.3"
resolved "https://registry.yarnpkg.com/cli-color/-/cli-color-2.0.3.tgz#73769ba969080629670f3f2ef69a4bf4e7cc1879"
integrity sha512-OkoZnxyC4ERN3zLzZaY9Emb7f/MhBOIpePv0Ycok0fJYT+Ouo00UBEIwsVsr0yoow++n5YWlSUgST9GKhNHiRQ==
dependencies:
d "^1.0.1"
es5-ext "^0.10.61"
es6-iterator "^2.0.3"
memoizee "^0.4.15"
timers-ext "^0.1.7"
cli-cursor@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
@ -4471,6 +4520,14 @@ cycle@1.0.x:
resolved "https://registry.yarnpkg.com/cycle/-/cycle-1.0.3.tgz#21e80b2be8580f98b468f379430662b046c34ad2"
integrity sha512-TVF6svNzeQCOpjCqsy0/CSy8VgObG3wXusJ73xW2GbG5rGx7lC8zxDSURicsXI2UsGdi2L0QNRCi745/wUDvsA==
d@1, d@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a"
integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==
dependencies:
es5-ext "^0.10.50"
type "^1.0.1"
dargs@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc"
@ -4916,6 +4973,42 @@ es-to-primitive@^1.2.1:
is-date-object "^1.0.1"
is-symbol "^1.0.2"
es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@^0.10.53, es5-ext@^0.10.61, es5-ext@~0.10.14, es5-ext@~0.10.2, es5-ext@~0.10.46:
version "0.10.62"
resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.62.tgz#5e6adc19a6da524bf3d1e02bbc8960e5eb49a9a5"
integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==
dependencies:
es6-iterator "^2.0.3"
es6-symbol "^3.1.3"
next-tick "^1.1.0"
es6-iterator@^2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7"
integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==
dependencies:
d "1"
es5-ext "^0.10.35"
es6-symbol "^3.1.1"
es6-symbol@^3.1.1, es6-symbol@^3.1.3:
version "3.1.3"
resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18"
integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==
dependencies:
d "^1.0.1"
ext "^1.1.2"
es6-weak-map@^2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53"
integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==
dependencies:
d "1"
es5-ext "^0.10.46"
es6-iterator "^2.0.3"
es6-symbol "^3.1.1"
esbuild-android-64@0.14.48:
version "0.14.48"
resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.48.tgz#7e6394a0e517f738641385aaf553c7e4fb6d1ae3"
@ -5203,6 +5296,14 @@ etag@~1.8.1:
resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==
event-emitter@^0.3.5:
version "0.3.5"
resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39"
integrity sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==
dependencies:
d "1"
es5-ext "~0.10.14"
eventemitter3@^4.0.4:
version "4.0.7"
resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f"
@ -5281,6 +5382,13 @@ express@^4.17.2, express@^4.18.1:
utils-merge "1.0.1"
vary "~1.1.2"
ext@^1.1.2:
version "1.7.0"
resolved "https://registry.yarnpkg.com/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f"
integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==
dependencies:
type "^2.7.2"
extend@~3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
@ -5784,6 +5892,13 @@ glob-parent@^6.0.2:
dependencies:
is-glob "^4.0.3"
glob-promise@^4.2.2:
version "4.2.2"
resolved "https://registry.yarnpkg.com/glob-promise/-/glob-promise-4.2.2.tgz#15f44bcba0e14219cd93af36da6bb905ff007877"
integrity sha512-xcUzJ8NWN5bktoTIX7eOclO1Npxd/dyVqUJxlLIDasT4C7KZyqlPIwkdJ0Ypiy3p2ZKahTjK4M9uC3sNSfNMzw==
dependencies:
"@types/glob" "^7.1.3"
glob@^6.0.4:
version "6.0.4"
resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22"
@ -6425,6 +6540,11 @@ is-plain-object@^5.0.0:
resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344"
integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==
is-promise@^2.2.2:
version "2.2.2"
resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1"
integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==
is-regex@^1.1.4:
version "1.1.4"
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958"
@ -6989,6 +7109,26 @@ json-parse-even-better-errors@^2.3.0:
resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
json-schema-to-typescript@^11.0.2:
version "11.0.2"
resolved "https://registry.yarnpkg.com/json-schema-to-typescript/-/json-schema-to-typescript-11.0.2.tgz#80348391abb4ffb75daf312380c2f01c552ffba8"
integrity sha512-XRyeXBJeo/IH4eTP5D1ptX78vCvH86nMDt2k3AxO28C3uYWEDmy4mgPyMpb8bLJ/pJMElOGuQbnKR5Y6NSh3QQ==
dependencies:
"@bcherny/json-schema-ref-parser" "9.0.9"
"@types/json-schema" "^7.0.11"
"@types/lodash" "^4.14.182"
"@types/prettier" "^2.6.1"
cli-color "^2.0.2"
get-stdin "^8.0.0"
glob "^7.1.6"
glob-promise "^4.2.2"
is-glob "^4.0.3"
lodash "^4.17.21"
minimist "^1.2.6"
mkdirp "^1.0.4"
mz "^2.7.0"
prettier "^2.6.2"
json-schema-traverse@^0.4.1:
version "0.4.1"
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
@ -7294,6 +7434,13 @@ lru-cache@^6.0.0:
dependencies:
yallist "^4.0.0"
lru-queue@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/lru-queue/-/lru-queue-0.1.0.tgz#2738bd9f0d3cf4f84490c5736c48699ac632cda3"
integrity sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==
dependencies:
es5-ext "~0.10.2"
lunr@^2.3.9:
version "2.3.9"
resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1"
@ -7389,6 +7536,20 @@ media-typer@0.3.0:
resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==
memoizee@^0.4.15:
version "0.4.15"
resolved "https://registry.yarnpkg.com/memoizee/-/memoizee-0.4.15.tgz#e6f3d2da863f318d02225391829a6c5956555b72"
integrity sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==
dependencies:
d "^1.0.1"
es5-ext "^0.10.53"
es6-weak-map "^2.0.3"
event-emitter "^0.3.5"
is-promise "^2.2.2"
lru-queue "^0.1.0"
next-tick "^1.1.0"
timers-ext "^0.1.7"
memory-pager@^1.0.2:
version "1.5.0"
resolved "https://registry.yarnpkg.com/memory-pager/-/memory-pager-1.5.0.tgz#d8751655d22d384682741c972f2c3d6dfa3e66b5"
@ -7733,7 +7894,7 @@ mute-stream@0.0.8, mute-stream@~0.0.4:
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
mz@^2.4.0:
mz@^2.4.0, mz@^2.7.0:
version "2.7.0"
resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32"
integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==
@ -7798,6 +7959,11 @@ neon-cli@0.4.0:
validate-npm-package-license "^3.0.1"
validate-npm-package-name "^3.0.0"
next-tick@1, next-tick@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb"
integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==
nice-try@^1.0.4:
version "1.0.5"
resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
@ -8634,7 +8800,7 @@ prettier-config-standard@^4.0.0:
resolved "https://registry.yarnpkg.com/prettier-config-standard/-/prettier-config-standard-4.1.0.tgz#2e37187b68e31fd35aae559d48e8793854ddfd9f"
integrity sha512-ZTIjjxurdZfrRHlWPLVXwutC+28zLbdoUQ58V2XcsqBUYFQZFwlt6quKY7aOVRYuV4F2wDqRNFlcS7MlkVkmwg==
prettier@^2.3.0:
prettier@^2.3.0, prettier@^2.6.2:
version "2.7.1"
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64"
integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==
@ -10129,6 +10295,14 @@ time-span@3.1.0:
dependencies:
convert-hrtime "^2.0.0"
timers-ext@^0.1.7:
version "0.1.7"
resolved "https://registry.yarnpkg.com/timers-ext/-/timers-ext-0.1.7.tgz#6f57ad8578e07a3fb9f91d9387d65647555e25c6"
integrity sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==
dependencies:
es5-ext "~0.10.46"
next-tick "1"
tmp@^0.0.33:
version "0.0.33"
resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
@ -10324,6 +10498,16 @@ type-is@~1.6.18:
media-typer "0.3.0"
mime-types "~2.1.24"
type@^1.0.1:
version "1.2.0"
resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0"
integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==
type@^2.7.2:
version "2.7.2"
resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0"
integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==
typedarray-to-buffer@^3.1.5:
version "3.1.5"
resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"