@atproto/syntax 0.4.1 → 0.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/LICENSE.txt +1 -1
  3. package/dist/at-identifier.d.ts +6 -0
  4. package/dist/at-identifier.d.ts.map +1 -0
  5. package/dist/at-identifier.js +28 -0
  6. package/dist/at-identifier.js.map +1 -0
  7. package/dist/aturi.d.ts +8 -6
  8. package/dist/aturi.d.ts.map +1 -1
  9. package/dist/aturi.js +41 -83
  10. package/dist/aturi.js.map +1 -1
  11. package/dist/aturi_validation.d.ts +6 -2
  12. package/dist/aturi_validation.d.ts.map +1 -1
  13. package/dist/aturi_validation.js +66 -60
  14. package/dist/aturi_validation.js.map +1 -1
  15. package/dist/datetime.d.ts +11 -4
  16. package/dist/datetime.d.ts.map +1 -1
  17. package/dist/datetime.js +22 -25
  18. package/dist/datetime.js.map +1 -1
  19. package/dist/did.d.ts +4 -2
  20. package/dist/did.d.ts.map +1 -1
  21. package/dist/did.js +24 -19
  22. package/dist/did.js.map +1 -1
  23. package/dist/handle.d.ts +7 -6
  24. package/dist/handle.d.ts.map +1 -1
  25. package/dist/handle.js +32 -35
  26. package/dist/handle.js.map +1 -1
  27. package/dist/index.d.ts +10 -7
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +11 -21
  30. package/dist/index.js.map +1 -1
  31. package/dist/language.d.ts +18 -0
  32. package/dist/language.d.ts.map +1 -0
  33. package/dist/language.js +30 -0
  34. package/dist/language.js.map +1 -0
  35. package/dist/nsid.d.ts +6 -5
  36. package/dist/nsid.d.ts.map +1 -1
  37. package/dist/nsid.js +6 -11
  38. package/dist/nsid.js.map +1 -1
  39. package/dist/recordkey.d.ts +3 -2
  40. package/dist/recordkey.d.ts.map +1 -1
  41. package/dist/recordkey.js +33 -22
  42. package/dist/recordkey.js.map +1 -1
  43. package/dist/tid.d.ts +3 -2
  44. package/dist/tid.d.ts.map +1 -1
  45. package/dist/tid.js +10 -10
  46. package/dist/tid.js.map +1 -1
  47. package/dist/uri.d.ts +3 -0
  48. package/dist/uri.d.ts.map +1 -0
  49. package/dist/uri.js +7 -0
  50. package/dist/uri.js.map +1 -0
  51. package/package.json +7 -4
  52. package/src/at-identifier.ts +33 -0
  53. package/src/aturi.ts +59 -46
  54. package/src/aturi_validation.ts +78 -51
  55. package/src/datetime.ts +26 -14
  56. package/src/did.ts +28 -15
  57. package/src/handle.ts +29 -26
  58. package/src/index.ts +10 -7
  59. package/src/language.ts +39 -0
  60. package/src/nsid.ts +14 -8
  61. package/src/recordkey.ts +42 -17
  62. package/src/tid.ts +9 -5
  63. package/src/uri.ts +5 -0
  64. package/tests/aturi.test.ts +3 -2
  65. package/tests/datetime.test.ts +1 -0
  66. package/tests/did.test.ts +1 -0
  67. package/tests/handle.test.ts +1 -0
  68. package/tests/language.test.ts +88 -0
  69. package/tests/nsid.test.ts +1 -0
  70. package/tests/recordkey.test.ts +1 -0
  71. package/tests/tid.test.ts +1 -0
  72. package/tsconfig.build.json +6 -2
  73. package/tsconfig.build.tsbuildinfo +1 -1
  74. package/tsconfig.tests.json +6 -4
  75. package/vitest.config.ts +5 -0
  76. package/jest.config.js +0 -7
  77. package/tsconfig.tests.tsbuildinfo +0 -1
package/src/uri.ts ADDED
@@ -0,0 +1,5 @@
1
+ export type UriString = `${string}:${string}`
2
+
3
+ export function isValidUri<I extends string>(input: I): input is I & UriString {
4
+ return /^\w+:(?:\/\/)?[^\s/][^\s]*$/.test(input)
5
+ }
@@ -1,8 +1,9 @@
1
1
  import * as fs from 'node:fs'
2
2
  import * as readline from 'node:readline'
3
- import { AtUri, ensureValidAtUri, ensureValidAtUriRegex } from '../src/index'
3
+ import { describe, expect, it } from 'vitest'
4
+ import { AtUri, ensureValidAtUri, ensureValidAtUriRegex } from '../src'
4
5
 
5
- describe('At Uris', () => {
6
+ describe(AtUri, () => {
6
7
  it('parses valid at uris', () => {
7
8
  // input host path query hash
8
9
  type AtUriTest = [string, string, string, string, string]
@@ -1,5 +1,6 @@
1
1
  import * as fs from 'node:fs'
2
2
  import * as readline from 'node:readline'
3
+ import { describe, expect, it } from 'vitest'
3
4
  import {
4
5
  InvalidDatetimeError,
5
6
  ensureValidDatetime,
package/tests/did.test.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import * as fs from 'node:fs'
2
2
  import * as readline from 'node:readline'
3
+ import { describe, expect, it } from 'vitest'
3
4
  import { InvalidDidError, ensureValidDid, ensureValidDidRegex } from '../src'
4
5
 
5
6
  describe('DID permissive validation', () => {
@@ -1,5 +1,6 @@
1
1
  import * as fs from 'node:fs'
2
2
  import * as readline from 'node:readline'
3
+ import { describe, expect, it } from 'vitest'
3
4
  import {
4
5
  InvalidHandleError,
5
6
  ensureValidHandle,
@@ -0,0 +1,88 @@
1
+ import { describe, expect, it } from 'vitest'
2
+ import { isValidLanguage, parseLanguageString } from '../src'
3
+
4
+ describe(isValidLanguage, () => {
5
+ it('validates BCP 47', () => {
6
+ // valid
7
+ expect(isValidLanguage('de')).toEqual(true)
8
+ expect(isValidLanguage('de-CH')).toEqual(true)
9
+ expect(isValidLanguage('de-DE-1901')).toEqual(true)
10
+ expect(isValidLanguage('es-419')).toEqual(true)
11
+ expect(isValidLanguage('sl-IT-nedis')).toEqual(true)
12
+ expect(isValidLanguage('mn-Cyrl-MN')).toEqual(true)
13
+ expect(isValidLanguage('x-fr-CH')).toEqual(true)
14
+ expect(
15
+ isValidLanguage('en-GB-boont-r-extended-sequence-x-private'),
16
+ ).toEqual(true)
17
+ expect(isValidLanguage('sr-Cyrl')).toEqual(true)
18
+ expect(isValidLanguage('hy-Latn-IT-arevela')).toEqual(true)
19
+ expect(isValidLanguage('i-klingon')).toEqual(true)
20
+ // invalid
21
+ expect(isValidLanguage('')).toEqual(false)
22
+ expect(isValidLanguage('x')).toEqual(false)
23
+ expect(isValidLanguage('de-CH-')).toEqual(false)
24
+ expect(isValidLanguage('i-bad-grandfathered')).toEqual(false)
25
+ })
26
+ })
27
+
28
+ describe(parseLanguageString, () => {
29
+ it('parses BCP 47', () => {
30
+ // valid
31
+ expect(parseLanguageString('de')).toEqual({
32
+ language: 'de',
33
+ })
34
+ expect(parseLanguageString('de-CH')).toEqual({
35
+ language: 'de',
36
+ region: 'CH',
37
+ })
38
+ expect(parseLanguageString('de-DE-1901')).toEqual({
39
+ language: 'de',
40
+ region: 'DE',
41
+ variant: '1901',
42
+ })
43
+ expect(parseLanguageString('es-419')).toEqual({
44
+ language: 'es',
45
+ region: '419',
46
+ })
47
+ expect(parseLanguageString('sl-IT-nedis')).toEqual({
48
+ language: 'sl',
49
+ region: 'IT',
50
+ variant: 'nedis',
51
+ })
52
+ expect(parseLanguageString('mn-Cyrl-MN')).toEqual({
53
+ language: 'mn',
54
+ script: 'Cyrl',
55
+ region: 'MN',
56
+ })
57
+ expect(parseLanguageString('x-fr-CH')).toEqual({
58
+ privateUse: 'x-fr-CH',
59
+ })
60
+ expect(
61
+ parseLanguageString('en-GB-boont-r-extended-sequence-x-private'),
62
+ ).toEqual({
63
+ language: 'en',
64
+ region: 'GB',
65
+ variant: 'boont',
66
+ extension: 'r-extended-sequence',
67
+ privateUse: 'x-private',
68
+ })
69
+ expect(parseLanguageString('sr-Cyrl')).toEqual({
70
+ language: 'sr',
71
+ script: 'Cyrl',
72
+ })
73
+ expect(parseLanguageString('hy-Latn-IT-arevela')).toEqual({
74
+ language: 'hy',
75
+ script: 'Latn',
76
+ region: 'IT',
77
+ variant: 'arevela',
78
+ })
79
+ expect(parseLanguageString('i-klingon')).toEqual({
80
+ grandfathered: 'i-klingon',
81
+ })
82
+ // invalid
83
+ expect(parseLanguageString('')).toEqual(null)
84
+ expect(parseLanguageString('x')).toEqual(null)
85
+ expect(parseLanguageString('de-CH-')).toEqual(null)
86
+ expect(parseLanguageString('i-bad-grandfathered')).toEqual(null)
87
+ })
88
+ })
@@ -1,4 +1,5 @@
1
1
  import * as fs from 'node:fs'
2
+ import { describe, expect, it } from 'vitest'
2
3
  import {
3
4
  InvalidNsidError,
4
5
  NSID,
@@ -1,5 +1,6 @@
1
1
  import * as fs from 'node:fs'
2
2
  import * as readline from 'node:readline'
3
+ import { describe, expect, it } from 'vitest'
3
4
  import { InvalidRecordKeyError, ensureValidRecordKey } from '../src'
4
5
 
5
6
  describe('recordkey validation', () => {
package/tests/tid.test.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import * as fs from 'node:fs'
2
2
  import * as readline from 'node:readline'
3
+ import { describe, expect, it } from 'vitest'
3
4
  import { InvalidTidError, ensureValidTid } from '../src'
4
5
 
5
6
  describe('tid validation', () => {
@@ -1,8 +1,12 @@
1
1
  {
2
2
  "extends": "../../tsconfig/isomorphic.json",
3
+ "include": ["./src"],
4
+ "exclude": ["**/*.test.ts"],
3
5
  "compilerOptions": {
6
+ "noImplicitAny": true,
7
+ "importHelpers": true,
8
+ "target": "ES2023",
4
9
  "rootDir": "./src",
5
10
  "outDir": "./dist"
6
- },
7
- "include": ["./src"]
11
+ }
8
12
  }
@@ -1 +1 @@
1
- {"root":["./src/aturi.ts","./src/aturi_validation.ts","./src/datetime.ts","./src/did.ts","./src/handle.ts","./src/index.ts","./src/nsid.ts","./src/recordkey.ts","./src/tid.ts"],"version":"5.8.2"}
1
+ {"root":["./src/at-identifier.ts","./src/aturi.ts","./src/aturi_validation.ts","./src/datetime.ts","./src/did.ts","./src/handle.ts","./src/index.ts","./src/language.ts","./src/nsid.ts","./src/recordkey.ts","./src/tid.ts","./src/uri.ts"],"version":"5.8.2"}
@@ -1,7 +1,9 @@
1
1
  {
2
- "extends": "../../tsconfig/tests.json",
2
+ "extends": "../../tsconfig/vitest.json",
3
+ "include": ["./tests", "./src/**/*.test.ts"],
3
4
  "compilerOptions": {
4
- "rootDir": "."
5
- },
6
- "include": ["./tests"]
5
+ "noImplicitAny": true,
6
+ "rootDir": "./",
7
+ "baseUrl": "./"
8
+ }
7
9
  }
@@ -0,0 +1,5 @@
1
+ import { defineProject } from 'vitest/config'
2
+
3
+ export default defineProject({
4
+ test: {},
5
+ })
package/jest.config.js DELETED
@@ -1,7 +0,0 @@
1
- /** @type {import('jest').Config} */
2
- module.exports = {
3
- displayName: 'Syntax',
4
- transform: { '^.+\\.(t|j)s$': '@swc/jest' },
5
- setupFiles: ['<rootDir>/../../jest.setup.ts'],
6
- moduleNameMapper: { '^(\\.\\.?\\/.+)\\.js$': ['$1.ts', '$1.js'] },
7
- }
@@ -1 +0,0 @@
1
- {"root":["./tests/aturi.test.ts","./tests/datetime.test.ts","./tests/did.test.ts","./tests/handle.test.ts","./tests/nsid.test.ts","./tests/recordkey.test.ts","./tests/tid.test.ts"],"version":"5.8.3"}