Link bookmarking tool built on aproto (early alpha)

feat(lexicon): add first lexicon

finxol.io 5a36d14f 01ebd76c

verified
Changed files
+286 -1
src
lexicons
ing
pinboard
pin
typelex
+3
package.json
···
"scripts": {
"dev": "NODE_ENV=development vinxi dev",
"build": "vinxi build",
+
"build:lexicons": "tsp compile ./src/typelex/*.tsp",
"start": "vinxi start"
},
"dependencies": {
···
"@bigmoves/atproto-oauth-client": "jsr:^0.2.0",
"@solidjs/router": "^0.15.0",
"@solidjs/start": "^1.1.0",
+
"@typelex/emitter": "^0.1.6",
+
"@typespec/compiler": "^1.5.0",
"@unocss/reset": "^0.65.1",
"iron-session": "^8.0.4",
"solid-js": "^1.9.5",
+207 -1
pnpm-lock.yaml
···
version: 0.15.3(solid-js@1.9.9)
'@solidjs/start':
specifier: ^1.1.0
-
version: 1.2.0(solid-js@1.9.9)(vinxi@0.5.8(db0@0.3.4)(ioredis@5.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6))(vite@6.3.6(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6))
+
version: 1.2.0(solid-js@1.9.9)(vinxi@0.5.8(db0@0.3.4)(ioredis@5.8.1)(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vite@6.3.6(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))
+
'@typelex/emitter':
+
specifier: ^0.1.6
+
version: 0.1.6(@typespec/compiler@1.5.0)
+
'@typespec/compiler':
+
specifier: ^1.5.0
+
version: 1.5.0
'@unocss/reset':
specifier: ^0.65.1
version: 0.65.4
···
resolution: {integrity: sha512-a05fzK+jBGacsSAc1vE8an7lpBh4H0PyIEcivtEyHLomgSeElAJxm9E2It/0nYRZ5Lh23m0okbhzJNaYWZpAOg==}
engines: {node: '>=12'}
+
'@typelex/emitter@0.1.6':
+
resolution: {integrity: sha512-sC6hbXInFjI028tflS+oIrFt9v4AwoTcTLa+GEExaedOPMeSivj9joIs0k6k6TXW3RpglNJIPFz1n8UBq5ya6Q==}
+
peerDependencies:
+
'@typespec/compiler': ^1.4.0
+
'@types/babel__core@7.20.5':
resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
···
'@types/unist@3.0.3':
resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
+
+
'@typespec/compiler@1.5.0':
+
resolution: {integrity: sha512-REJgZOEZ9g9CC72GGT0+nLbjW+5WVlCfm1d6w18N5RsUo7vLXs8IPXwq7xZJzoqU99Q9B4keqzPuTU4OrDUTrA==}
+
engines: {node: '>=20.0.0'}
+
hasBin: true
'@ungap/structured-clone@1.3.0':
resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
···
resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==}
engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
change-case@5.4.4:
+
resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==}
+
character-entities-html4@2.1.0:
resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==}
character-entities-legacy@3.0.0:
resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==}
+
+
chardet@2.1.0:
+
resolution: {integrity: sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==}
chokidar@3.6.0:
resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
···
resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==}
engines: {node: '>=10'}
+
cli-width@4.1.0:
+
resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==}
+
engines: {node: '>= 12'}
+
clipboardy@4.0.0:
resolution: {integrity: sha512-5mOlNS0mhX0707P2I0aZ2V/cmHUEO/fL7VFLqszkhUsxt7RwnmrInf/eEQKlf5GzvYeHIjT+Ov1HRfNmymlG0w==}
engines: {node: '>=18'}
···
cliui@8.0.1:
resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
engines: {node: '>=12'}
+
+
cliui@9.0.1:
+
resolution: {integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==}
+
engines: {node: '>=20'}
cluster-key-slot@1.1.2:
resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==}
···
resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==}
engines: {node: '>=18'}
+
yaml@2.8.1:
+
resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==}
+
engines: {node: '>= 14.6'}
+
hasBin: true
+
yargs-parser@21.1.1:
resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
engines: {node: '>=12'}
+
+
yargs-parser@22.0.0:
+
resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==}
+
engines: {node: ^20.19.0 || ^22.12.0 || >=23}
yargs@17.7.2:
resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
engines: {node: '>=12'}
+
+
yargs@18.0.0:
+
resolution: {integrity: sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==}
+
engines: {node: ^20.19.0 || ^22.12.0 || >=23}
+
+
yoctocolors-cjs@2.1.3:
+
resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==}
+
engines: {node: '>=18'}
youch-core@0.3.3:
resolution: {integrity: sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA==}
···
transitivePeerDependencies:
- supports-color
+
'@inquirer/ansi@1.0.0': {}
+
+
'@inquirer/checkbox@4.2.4':
+
dependencies:
+
'@inquirer/ansi': 1.0.0
+
'@inquirer/core': 10.2.2
+
'@inquirer/figures': 1.0.13
+
'@inquirer/type': 3.0.8
+
yoctocolors-cjs: 2.1.3
+
+
'@inquirer/confirm@5.1.18':
+
dependencies:
+
'@inquirer/core': 10.2.2
+
'@inquirer/type': 3.0.8
+
+
'@inquirer/core@10.2.2':
+
dependencies:
+
'@inquirer/ansi': 1.0.0
+
'@inquirer/figures': 1.0.13
+
'@inquirer/type': 3.0.8
+
cli-width: 4.1.0
+
mute-stream: 2.0.0
+
signal-exit: 4.1.0
+
wrap-ansi: 6.2.0
+
yoctocolors-cjs: 2.1.3
+
+
'@inquirer/editor@4.2.20':
+
dependencies:
+
'@inquirer/core': 10.2.2
+
'@inquirer/external-editor': 1.0.2
+
'@inquirer/type': 3.0.8
+
+
'@inquirer/expand@4.0.20':
+
dependencies:
+
'@inquirer/core': 10.2.2
+
'@inquirer/type': 3.0.8
+
yoctocolors-cjs: 2.1.3
+
+
'@inquirer/external-editor@1.0.2':
+
dependencies:
+
chardet: 2.1.0
+
iconv-lite: 0.7.0
+
+
'@inquirer/figures@1.0.13': {}
+
+
'@inquirer/input@4.2.4':
+
dependencies:
+
'@inquirer/core': 10.2.2
+
'@inquirer/type': 3.0.8
+
+
'@inquirer/number@3.0.20':
+
dependencies:
+
'@inquirer/core': 10.2.2
+
'@inquirer/type': 3.0.8
+
+
'@inquirer/password@4.0.20':
+
dependencies:
+
'@inquirer/ansi': 1.0.0
+
'@inquirer/core': 10.2.2
+
'@inquirer/type': 3.0.8
+
+
'@inquirer/prompts@7.8.6':
+
dependencies:
+
'@inquirer/checkbox': 4.2.4
+
'@inquirer/confirm': 5.1.18
+
'@inquirer/editor': 4.2.20
+
'@inquirer/expand': 4.0.20
+
'@inquirer/input': 4.2.4
+
'@inquirer/number': 3.0.20
+
'@inquirer/password': 4.0.20
+
'@inquirer/rawlist': 4.1.8
+
'@inquirer/search': 3.1.3
+
'@inquirer/select': 4.3.4
+
+
'@inquirer/rawlist@4.1.8':
+
dependencies:
+
'@inquirer/core': 10.2.2
+
'@inquirer/type': 3.0.8
+
yoctocolors-cjs: 2.1.3
+
+
'@inquirer/search@3.1.3':
+
dependencies:
+
'@inquirer/core': 10.2.2
+
'@inquirer/figures': 1.0.13
+
'@inquirer/type': 3.0.8
+
yoctocolors-cjs: 2.1.3
+
+
'@inquirer/select@4.3.4':
+
dependencies:
+
'@inquirer/ansi': 1.0.0
+
'@inquirer/core': 10.2.2
+
'@inquirer/figures': 1.0.13
+
'@inquirer/type': 3.0.8
+
yoctocolors-cjs: 2.1.3
+
+
'@inquirer/type@3.0.8': {}
+
'@ioredis/commands@1.4.0': {}
'@isaacs/cliui@8.0.2':
···
- supports-color
- vite
+
'@typelex/emitter@0.1.6(@typespec/compiler@1.5.0)':
+
dependencies:
+
'@typespec/compiler': 1.5.0
+
'@types/babel__core@7.20.5':
dependencies:
'@babel/parser': 7.28.4
···
'@types/unist@3.0.3': {}
+
'@typespec/compiler@1.5.0':
+
dependencies:
+
'@babel/code-frame': 7.27.1
+
'@inquirer/prompts': 7.8.6
+
ajv: 8.17.1
+
change-case: 5.4.4
+
env-paths: 3.0.0
+
globby: 14.1.0
+
is-unicode-supported: 2.1.0
+
mustache: 4.2.0
+
picocolors: 1.1.1
+
prettier: 3.6.2
+
semver: 7.7.3
+
tar: 7.5.1
+
temporal-polyfill: 0.3.0
+
vscode-languageserver: 9.0.1
+
vscode-languageserver-textdocument: 1.0.12
+
yaml: 2.8.1
+
yargs: 18.0.0
+
transitivePeerDependencies:
+
- '@types/node'
+
'@ungap/structured-clone@1.3.0': {}
'@unocss/astro@0.65.4(rollup@4.52.4)(vite@6.3.6(jiti@2.6.1)(terser@5.44.0)(tsx@4.20.6))(vue@3.5.22)':
···
agent-base@7.1.4: {}
+
ajv@8.17.1:
+
dependencies:
+
fast-deep-equal: 3.1.3
+
fast-uri: 3.1.0
+
json-schema-traverse: 1.0.0
+
require-from-string: 2.0.2
+
ansi-align@3.0.1:
dependencies:
string-width: 4.2.3
···
chalk@5.6.2: {}
+
change-case@5.4.4: {}
+
character-entities-html4@2.1.0: {}
character-entities-legacy@3.0.0: {}
+
+
chardet@2.1.0: {}
chokidar@3.6.0:
dependencies:
···
consola: 3.4.2
cli-boxes@3.0.0: {}
+
+
cli-width@4.1.0: {}
clipboardy@4.0.0:
dependencies:
···
string-width: 4.2.3
strip-ansi: 6.0.1
wrap-ansi: 7.0.0
+
+
cliui@9.0.1:
+
dependencies:
+
string-width: 7.2.0
+
strip-ansi: 7.1.2
+
wrap-ansi: 9.0.2
cluster-key-slot@1.1.2: {}
···
is-stream@2.0.1: {}
is-stream@3.0.0: {}
+
+
is-unicode-supported@2.1.0: {}
is-what@4.1.16: {}
···
yallist@5.0.0: {}
+
yaml@2.8.1: {}
+
yargs-parser@21.1.1: {}
+
+
yargs-parser@22.0.0: {}
yargs@17.7.2:
dependencies:
···
string-width: 4.2.3
y18n: 5.0.8
yargs-parser: 21.1.1
+
+
yargs@18.0.0:
+
dependencies:
+
cliui: 9.0.1
+
escalade: 3.2.0
+
get-caller-file: 2.0.5
+
string-width: 7.2.0
+
y18n: 5.0.8
+
yargs-parser: 22.0.0
+
+
yoctocolors-cjs@2.1.3: {}
youch-core@0.3.3:
dependencies:
+45
src/lexicons/ing/pinboard/pin/url.json
···
+
{
+
"lexicon": 1,
+
"id": "ing.pinboard.pin.url",
+
"defs": {
+
"main": {
+
"type": "record",
+
"key": "tid",
+
"record": {
+
"type": "object",
+
"properties": {
+
"type": {
+
"type": "string",
+
"const": "url",
+
"description": "type of the pin"
+
},
+
"title": {
+
"type": "string",
+
"description": "title of the pin"
+
},
+
"description": {
+
"type": "string",
+
"maxGraphemes": 140,
+
"minGraphemes": 1,
+
"description": "description of the pin"
+
},
+
"url": {
+
"type": "string",
+
"format": "uri",
+
"description": "url of the pin"
+
},
+
"createdAt": {
+
"type": "string",
+
"format": "datetime"
+
}
+
},
+
"required": [
+
"title",
+
"description",
+
"url",
+
"createdAt"
+
]
+
}
+
}
+
}
+
}
+26
src/typelex/main.tsp
···
+
import "@typelex/emitter";
+
+
namespace ing.pinboard.pin.url {
+
@rec("tid")
+
model Main {
+
@doc("type of the pin")
+
@readOnly type?: string = "url";
+
+
@doc("title of the pin")
+
@required
+
title: string;
+
+
@doc("description of the pin")
+
@minGraphemes(1)
+
@maxGraphemes(140)
+
@required
+
description: string;
+
+
@doc("url of the pin")
+
@required
+
url: uri;
+
+
@required
+
createdAt: datetime;
+
}
+
}
+5
tspconfig.yaml
···
+
emit:
+
- "@typelex/emitter"
+
options:
+
"@typelex/emitter":
+
output-dir: "./src/lexicons"