File tree Expand file tree Collapse file tree 3 files changed +43
-0
lines changed
Expand file tree Collapse file tree 3 files changed +43
-0
lines changed Original file line number Diff line number Diff line change @@ -221,6 +221,40 @@ export class $Object extends $Schema {
221221 */
222222export const object = def => new $Object ( def )
223223
224+ /**
225+ * @template {$Schema<string|number|symbol>} Keys
226+ * @template {$Schema<any>} Values
227+ * @extends {$Schema<Record<Keys extends $Schema<infer K> ? K : never,Values extends $Schema<infer T> ? T : never>> }
228+ */
229+ export class $Record extends $Schema {
230+ /**
231+ * @param {Keys } keys
232+ * @param {Values } values
233+ */
234+ constructor ( keys , values ) {
235+ super ( )
236+ this . keys = keys
237+ this . values = values
238+ }
239+
240+ /**
241+ * @param {any } o
242+ * @return {o is Record<Keys extends $Schema<infer K> ? K : never,Values extends $Schema<infer T> ? T : never> }
243+ */
244+ check ( o ) {
245+ return o != null && obj . every ( o , ( vv , vk ) => this . keys . check ( vk ) && this . values . check ( vv ) )
246+ }
247+ }
248+
249+ /**
250+ * @template {$Schema<string|number|symbol>} Keys
251+ * @template {$Schema<any>} Values
252+ * @param {Keys } keys
253+ * @param {Values } values
254+ * @return {CastToSchema<$Record<Keys,Values>> }
255+ */
256+ export const record = ( keys , values ) => new $Record ( keys , values )
257+
224258/**
225259 * @template {$Schema<any>[]} S
226260 * @extends {$Schema<{ [Key in keyof S]: S[Key] extends $Schema<infer Type> ? Type : never }> }
Original file line number Diff line number Diff line change @@ -59,6 +59,14 @@ export const testSchemas = _tc => {
5959 // @ts -expect-error
6060 t . assert ( ! myobject . validate ( new Date ( ) ) )
6161 } )
62+ t . group ( 'record' , ( ) => {
63+ const myrecord = s . record ( s . number , s . string )
64+ // @ts -expect-error
65+ t . assert ( ! myrecord . validate ( { a : 'a' } ) )
66+ const myrecord2 = s . record ( s . string , s . number )
67+ const o = { a : 42 }
68+ t . assert ( myrecord2 . validate ( o ) )
69+ } )
6270 t . group ( 'tuple' , ( ) => {
6371 const mytuple = s . tuple ( s . number , s . string )
6472 t . assert ( mytuple . validate ( [ 4 , '5' ] ) )
Original file line number Diff line number Diff line change 154154 "lib0/performance.js" : "./performance.js" ,
155155 "lib0/dist/performance.cjs" : "./dist/performance.node.cjs" ,
156156 "lib0/performance" : "./performance.js" ,
157+ "lib0/schema" : "./schema.js" ,
157158 "isomorphic.js" : "./node_modules/isomorphic.js/browser.mjs" ,
158159 "isomorphic.js/package.json" : "./node_modules/isomorphic.js/package.json"
159160} ,
You can’t perform that action at this time.
0 commit comments