@based/schema 2.0.0 → 2.2.0

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 (107) hide show
  1. package/dist/display/dateString copy.d.ts +3 -0
  2. package/dist/display/dateString copy.js +127 -0
  3. package/dist/display/dateString copy.js.map +1 -0
  4. package/dist/display/dateString.d.ts +3 -0
  5. package/dist/display/dateString.js +127 -0
  6. package/dist/display/dateString.js.map +1 -0
  7. package/dist/display/display.d.ts +1 -0
  8. package/dist/display/display.js +8 -0
  9. package/dist/display/display.js.map +1 -0
  10. package/dist/display/index.d.ts +2 -0
  11. package/dist/display/index.js +26 -0
  12. package/dist/display/index.js.map +1 -0
  13. package/dist/display/number copy.d.ts +3 -0
  14. package/dist/display/number copy.js +81 -0
  15. package/dist/display/number copy.js.map +1 -0
  16. package/dist/display/number.d.ts +3 -0
  17. package/dist/display/number.js +89 -0
  18. package/dist/display/number.js.map +1 -0
  19. package/dist/display/string.d.ts +3 -0
  20. package/dist/display/string.js +23 -0
  21. package/dist/display/string.js.map +1 -0
  22. package/dist/display/timestamp.d.ts +3 -0
  23. package/dist/display/timestamp.js +127 -0
  24. package/dist/display/timestamp.js.map +1 -0
  25. package/dist/display.d.ts +2 -0
  26. package/dist/display.js +8 -0
  27. package/dist/display.js.map +1 -0
  28. package/dist/error.d.ts +0 -1
  29. package/dist/error.js +1 -1
  30. package/dist/error.js.map +1 -1
  31. package/dist/index.d.ts +1 -1
  32. package/dist/index.js +1 -0
  33. package/dist/index.js.map +1 -1
  34. package/dist/languages.d.ts +0 -1
  35. package/dist/set/fields/array.d.ts +0 -1
  36. package/dist/set/fields/index.d.ts +0 -1
  37. package/dist/set/fields/number.d.ts +0 -1
  38. package/dist/set/fields/object.d.ts +0 -1
  39. package/dist/set/fields/references.d.ts +0 -1
  40. package/dist/set/fields/set.d.ts +0 -1
  41. package/dist/set/fields/string.d.ts +0 -1
  42. package/dist/set/index.d.ts +0 -1
  43. package/dist/set/isValidId.d.ts +0 -1
  44. package/dist/set/types.d.ts +0 -1
  45. package/dist/types.d.ts +15 -5
  46. package/dist/types.js +19 -1
  47. package/dist/types.js.map +1 -1
  48. package/dist/updateSchema.d.ts +0 -1
  49. package/dist/validateSchema.d.ts +0 -1
  50. package/dist/walker/args.d.ts +0 -1
  51. package/dist/walker/index.d.ts +0 -1
  52. package/dist/walker/parse.d.ts +0 -1
  53. package/dist/walker/types.d.ts +0 -1
  54. package/dist/walker/types.js +1 -1
  55. package/dist/walker/types.js.map +1 -1
  56. package/package.json +4 -3
  57. package/dist/error.d.ts.map +0 -1
  58. package/dist/index.d.ts.map +0 -1
  59. package/dist/languages.d.ts.map +0 -1
  60. package/dist/set/fields/array.d.ts.map +0 -1
  61. package/dist/set/fields/index.d.ts.map +0 -1
  62. package/dist/set/fields/number.d.ts.map +0 -1
  63. package/dist/set/fields/object.d.ts.map +0 -1
  64. package/dist/set/fields/references.d.ts.map +0 -1
  65. package/dist/set/fields/set.d.ts.map +0 -1
  66. package/dist/set/fields/string.d.ts.map +0 -1
  67. package/dist/set/index.d.ts.map +0 -1
  68. package/dist/set/isValidId.d.ts.map +0 -1
  69. package/dist/set/types.d.ts.map +0 -1
  70. package/dist/types.d.ts.map +0 -1
  71. package/dist/updateSchema.d.ts.map +0 -1
  72. package/dist/validateSchema.d.ts.map +0 -1
  73. package/dist/walker/args.d.ts.map +0 -1
  74. package/dist/walker/index.d.ts.map +0 -1
  75. package/dist/walker/parse.d.ts.map +0 -1
  76. package/dist/walker/types.d.ts.map +0 -1
  77. package/src/error.ts +0 -19
  78. package/src/index.ts +0 -7
  79. package/src/languages.ts +0 -188
  80. package/src/set/fields/array.ts +0 -155
  81. package/src/set/fields/index.ts +0 -70
  82. package/src/set/fields/number.ts +0 -144
  83. package/src/set/fields/object.ts +0 -31
  84. package/src/set/fields/references.ts +0 -140
  85. package/src/set/fields/set.ts +0 -63
  86. package/src/set/fields/string.ts +0 -291
  87. package/src/set/index.ts +0 -186
  88. package/src/set/isValidId.ts +0 -23
  89. package/src/set/types.ts +0 -0
  90. package/src/types.ts +0 -365
  91. package/src/updateSchema.ts +0 -18
  92. package/src/validateSchema.ts +0 -64
  93. package/src/walker/args.ts +0 -209
  94. package/src/walker/index.ts +0 -48
  95. package/src/walker/parse.ts +0 -233
  96. package/src/walker/types.ts +0 -81
  97. package/test/array.ts +0 -388
  98. package/test/number.ts +0 -435
  99. package/test/reference.ts +0 -219
  100. package/test/rest.ts +0 -185
  101. package/test/set.ts +0 -104
  102. package/test/string.ts +0 -118
  103. package/test/text.ts +0 -348
  104. package/test/utils/index.ts +0 -23
  105. package/test/validateSchema.ts +0 -41
  106. package/test/walker.ts +0 -319
  107. package/tsconfig.json +0 -9
@@ -1,233 +0,0 @@
1
- import { deepEqual } from '@saulx/utils'
2
- import {
3
- BasedSchemaField,
4
- BasedSchemaFieldObject,
5
- BasedSchemaFieldRecord,
6
- BasedSchemaFields,
7
- } from '../types'
8
- import { ArgsClass } from './args'
9
- import { ArgsOpts, FieldParser, KeyParser, Stopped } from './types'
10
-
11
- export type ParseResult<T> = ArgsClass<T> | void
12
-
13
- // TODO needs cleaning
14
- function createOrUseArgs<T>(
15
- from: ArgsClass<T>,
16
- newArgs: ArgsClass<T> | ArgsOpts<T> | void
17
- ): ParseResult<T> {
18
- if (!newArgs) {
19
- return
20
- }
21
- if (newArgs instanceof ArgsClass) {
22
- return newArgs
23
- }
24
-
25
- const x = from.create(newArgs)
26
-
27
- // x.collectedCommands = from.collectedCommands
28
- // x.fromBackTrack = from.fromBackTrack
29
-
30
- return x
31
- }
32
-
33
- async function parseKey<T>(
34
- from: ArgsClass<T>,
35
- key: string | number,
36
- parser: KeyParser<T>
37
- ): Promise<ParseResult<T>> {
38
- const keyArgs = new ArgsClass(
39
- {
40
- key,
41
- value: from.value[key],
42
- fieldSchema: from.fieldSchema,
43
- },
44
- from
45
- )
46
-
47
- // if same
48
-
49
- const newArgs = createOrUseArgs(keyArgs, await parser(keyArgs))
50
-
51
- if (newArgs) {
52
- return newArgs.parse()
53
- }
54
- }
55
-
56
- function createFieldArgs<T>(
57
- from: ArgsClass<T>,
58
- key: string | number,
59
- fieldSchema: BasedSchemaField
60
- ): ArgsClass<T> {
61
- return new ArgsClass(
62
- {
63
- key,
64
- value: from.value[key],
65
- // @ts-ignore needs key
66
- fieldSchema,
67
- },
68
- from
69
- )
70
- }
71
-
72
- function getFieldParser<T>(
73
- args: ArgsClass<T>
74
- ): void | FieldParser<keyof BasedSchemaFields> {
75
- const fieldParser =
76
- 'enum' in args.fieldSchema
77
- ? args.root._opts.parsers.fields.enum
78
- : args.root._opts.parsers.fields[args.fieldSchema.type]
79
- return fieldParser
80
- }
81
-
82
- export async function parse<T>(
83
- args: ArgsClass<T>
84
- ): Promise<ArgsClass<T> | void> {
85
- const opts = args.root._opts
86
-
87
- if (args.parseTopLevel) {
88
- const parser = opts.parsers.any
89
- if (parser) {
90
- const nArgs = await parser(args)
91
-
92
- if (nArgs) {
93
- // @ts-ignore
94
- return parse(createOrUseArgs(args, nArgs))
95
- }
96
- }
97
- }
98
-
99
- if (typeof args.value === 'object' && args.value !== null) {
100
- const keyQ: Promise<ParseResult<T>>[] = []
101
- const keysHandled: Set<string | number> = new Set()
102
- let allKeysHandled = false
103
-
104
- for (const key in opts.parsers.keys) {
105
- if (key in args.value) {
106
- keysHandled.add(key)
107
- keyQ.push(parseKey(args, key, opts.parsers.keys[key]))
108
- }
109
- }
110
- await Promise.all(keyQ)
111
-
112
- if (typeof args.value !== 'object' || args.value === null) {
113
- return
114
- }
115
-
116
- // schema
117
- if (args.stopped === undefined) {
118
- const fieldQ: Promise<ParseResult<T>>[] = []
119
- if (args.typeSchema && !args.fieldSchema) {
120
- for (const key in args.typeSchema.fields) {
121
- const fieldSchema = args.typeSchema.fields[key]
122
- if (key in args.value) {
123
- keysHandled.add(key)
124
- fieldQ.push(createFieldArgs(args, key, fieldSchema).parse())
125
- }
126
- }
127
- } else if (args.fieldSchema && !args.stopped) {
128
- if (args.fieldSchema.type === 'object') {
129
- // @ts-ignore should detect from line above
130
- const objFieldSchema: BasedSchemaFieldObject = args.fieldSchema
131
- for (const key in objFieldSchema.properties) {
132
- const fieldSchema = objFieldSchema.properties[key]
133
- if (key in args.value) {
134
- keysHandled.add(key)
135
- fieldQ.push(createFieldArgs(args, key, fieldSchema).parse())
136
- }
137
- }
138
- } else if (args.fieldSchema.type === 'record') {
139
- // @ts-ignore should detect from line above
140
- const objFieldSchema: BasedSchemaFieldRecord = args.fieldSchema
141
- for (const key in args.value) {
142
- const fieldSchema = objFieldSchema.values
143
- keysHandled.add(key)
144
- fieldQ.push(createFieldArgs(args, key, fieldSchema).parse())
145
- }
146
- } else if (args.fieldSchema) {
147
- const fieldParser = getFieldParser(args)
148
- if (fieldParser) {
149
- const newArgs = createOrUseArgs(args, await fieldParser(args))
150
- if (newArgs) {
151
- return newArgs.parse()
152
- }
153
- }
154
- }
155
- }
156
- await Promise.all(fieldQ)
157
- if (
158
- args.fieldSchema &&
159
- fieldQ.length > 0 &&
160
- (args.fieldSchema.type === 'object' ||
161
- args.fieldSchema.type === 'record')
162
- ) {
163
- const fieldParser = getFieldParser(args)
164
- if (fieldParser) {
165
- fieldParser(args)
166
- }
167
- }
168
- }
169
-
170
- if (typeof args.value !== 'object' || args.value === null) {
171
- return
172
- }
173
-
174
- // any
175
- if (args.stopped !== Stopped.stopAll) {
176
- const parser = opts.parsers.any || opts.parsers.catch
177
- if (parser) {
178
- const q: Promise<ParseResult<T>>[] = []
179
- if (Array.isArray(args.value)) {
180
- for (let i = 0; i < args.value.length; i++) {
181
- if ((!opts.parsers.any && keysHandled.has(i)) || allKeysHandled) {
182
- continue
183
- }
184
- q.push(parseKey(args, i, parser))
185
- }
186
- } else {
187
- for (const key in args.value) {
188
- if ((!opts.parsers.any && keysHandled.has(key)) || allKeysHandled) {
189
- continue
190
- }
191
- q.push(parseKey(args, key, parser))
192
- }
193
- }
194
- await Promise.all(q)
195
- }
196
- }
197
-
198
- if (
199
- opts.backtrack &&
200
- !args.skipCollection &&
201
- (args.fromBackTrack.length || args.collectedCommands.length)
202
- ) {
203
- const backtracked = opts.backtrack(
204
- args,
205
- args.fromBackTrack ?? [],
206
- args.collectedCommands ?? []
207
- )
208
- if (backtracked) {
209
- const target = args.getBackTrackTarget()
210
- if (!target.fromBackTrack) {
211
- target.fromBackTrack = []
212
- }
213
- target.fromBackTrack.push(backtracked)
214
- }
215
- }
216
- } else {
217
- // more
218
- if (args.fieldSchema) {
219
- const fieldParser = getFieldParser(args)
220
- if (fieldParser) {
221
- const newArgs = createOrUseArgs(args, await fieldParser(args))
222
- if (newArgs) {
223
- return newArgs.parse()
224
- }
225
- } else {
226
- console.warn('fieldSchema type not implemented yet!', args.fieldSchema)
227
- const anyParser = opts.parsers.any || opts.parsers.catch
228
- anyParser(args)
229
- }
230
- } else {
231
- }
232
- }
233
- }
@@ -1,81 +0,0 @@
1
- import { ParseError } from '../error'
2
- import {
3
- BasedSchemaType,
4
- BasedSchemaFields,
5
- BasedSchemaField,
6
- BasedSchema,
7
- } from '../types'
8
- import { ArgsClass } from './args'
9
-
10
- export type Path = (string | number)[]
11
-
12
- export type ErrorHandler<T> = (
13
- code: ParseError,
14
- args: ArgsClass<T> | ArgsOpts<T>
15
- ) => void
16
-
17
- export type Collect<T> = (args: ArgsClass<T>) => any
18
-
19
- export type FieldParser<K extends keyof BasedSchemaFields, T = any> = (
20
- args: ArgsClass<T, K>
21
- ) => Promise<ArgsClass<T> | ArgsOpts<T> | void>
22
-
23
- export type KeyParser<T = any> = (
24
- args: ArgsClass<T, keyof BasedSchemaFields>
25
- ) => Promise<ArgsOpts<T> | ArgsClass<T> | void>
26
-
27
- export type FieldParsers<T = any> = {
28
- [Key in keyof BasedSchemaFields]: FieldParser<Key, T>
29
- }
30
-
31
- export type AsyncOperation<T> = (
32
- args: ArgsClass<T>,
33
- type?: string
34
- ) => Promise<any>
35
-
36
- export type Opts<T> = {
37
- init: (
38
- value: any,
39
- schema: BasedSchema,
40
- error: ErrorHandler<T>
41
- ) => Promise<ArgsOpts<T>>
42
- parsers: {
43
- fields: Partial<{
44
- [Key in keyof BasedSchemaFields]: FieldParser<Key, T>
45
- }>
46
- keys: { [key: string]: KeyParser<T> }
47
- any?: KeyParser<T>
48
- catch?: KeyParser<T>
49
- }
50
- collect?: (args: ArgsClass<T>) => any
51
- error?: ErrorHandler<T>
52
- backtrack?: (
53
- args: ArgsClass<T>,
54
- fromBackTrack: any[],
55
- collectedCommands: any[]
56
- ) => any
57
- asyncOperationHandler?: AsyncOperation<T>
58
- }
59
-
60
- export enum Stopped {
61
- onlyStopFieldParser,
62
- stopAll,
63
- }
64
-
65
- export type ArgsOpts<
66
- T,
67
- K extends keyof BasedSchemaFields = keyof BasedSchemaFields
68
- > = {
69
- parseTopLevel?: boolean
70
- target?: T
71
- key?: string | number
72
- path?: Path
73
- value?: any
74
- prev?: ArgsClass<T, K>
75
- fieldSchema?: BasedSchemaField
76
- typeSchema?: BasedSchemaType
77
- skipCollection?: boolean
78
- collect?: (args: ArgsClass<T, K>, value?: any) => any
79
- }
80
-
81
- // Add asyncOperations // requiresAsyncValidation -> asyncOperation: () => {}
package/test/array.ts DELETED
@@ -1,388 +0,0 @@
1
- import test from 'ava'
2
- import { BasedSchema, setWalker } from '../src/index'
3
- import { errorCollect, resultCollect } from './utils'
4
-
5
- const schema: BasedSchema = {
6
- types: {
7
- bla: {
8
- prefix: 'bl',
9
- fields: {
10
- arrNum: {
11
- type: 'array',
12
- values: {
13
- type: 'number',
14
- },
15
- },
16
- objArray: {
17
- type: 'array',
18
- values: {
19
- type: 'object',
20
- properties: {
21
- snurp: {
22
- type: 'string',
23
- },
24
- },
25
- },
26
- },
27
- arrStr: {
28
- type: 'array',
29
- values: {
30
- type: 'string',
31
- },
32
- },
33
- intarray: {
34
- type: 'array',
35
- values: {
36
- type: 'integer',
37
- },
38
- },
39
- },
40
- },
41
- },
42
- $defs: {},
43
- language: 'en',
44
- root: {
45
- fields: {},
46
- },
47
- prefixToTypeMapping: {
48
- bl: 'bla',
49
- },
50
- }
51
-
52
- test('arrayNum', async (t) => {
53
- const err = await setWalker(schema, {
54
- $id: 'bl1',
55
- arrNum: ['1', '2'],
56
- })
57
- const err1 = await setWalker(schema, {
58
- $id: 'bla',
59
- ref: 1,
60
- })
61
-
62
- const res = await setWalker(schema, {
63
- $id: 'bla',
64
- arrNum: [1, 2],
65
- })
66
-
67
- t.true(errorCollect(err, err1).length > 0)
68
-
69
- t.deepEqual(resultCollect(res), [
70
- { path: ['arrNum'], value: { $delete: true } },
71
- { path: ['arrNum', 0], value: 1 },
72
- { path: ['arrNum', 1], value: 2 },
73
- ])
74
- })
75
-
76
- test('value arr', async (t) => {
77
- const err = await setWalker(schema, {
78
- $id: 'bl1',
79
- arrNum: { $value: ['1', '2'] },
80
- })
81
-
82
- t.true(err.errors.length > 1)
83
-
84
- const res = await setWalker(schema, {
85
- $id: 'bla',
86
- arrNum: [{ $value: 1 }, { $value: 2 }],
87
- })
88
- const res1 = await setWalker(schema, {
89
- $id: 'bla',
90
- arrNum: { $value: [1, 2] },
91
- })
92
-
93
- t.deepEqual(resultCollect(res, res1), [
94
- { path: ['arrNum'], value: { $delete: true } },
95
- { path: ['arrNum', 0], value: 1 },
96
- { path: ['arrNum', 1], value: 2 },
97
- { path: ['arrNum'], value: { $delete: true } },
98
- { path: ['arrNum', 0], value: 1 },
99
- { path: ['arrNum', 1], value: 2 },
100
- ])
101
- })
102
-
103
- test.only('default arr', async (t) => {
104
- const err = await setWalker(schema, {
105
- $id: 'bl1',
106
- arrNum: ['1', '2'],
107
- })
108
- const err1 = await setWalker(schema, {
109
- $id: 'bla',
110
- ref: 1,
111
- })
112
-
113
- const res = await setWalker(schema, {
114
- $id: 'bla',
115
- arrNum: [{ $default: 1 }, { $default: 2 }],
116
- })
117
- const res1 = await setWalker(schema, {
118
- $id: 'bla',
119
- arrNum: { $default: [1, 2] },
120
- })
121
-
122
- t.true(errorCollect(err, err1).length > 0)
123
-
124
- t.deepEqual(resultCollect(res, res1), [
125
- { path: ['arrNum'], value: { $delete: true } },
126
- { path: ['arrNum', 0], value: { $default: 1 } },
127
- { path: ['arrNum', 1], value: { $default: 2 } },
128
- // TODO bit sketchy needs some work
129
- { path: ['arrNum'], value: { $default: [1, 2] } },
130
- ])
131
- })
132
-
133
- let r
134
-
135
- test('assign idx value', async (t) => {
136
- r = await setWalker(schema, {
137
- $id: 'bl120',
138
- intarray: {
139
- $assign: {
140
- $idx: 0,
141
- $value: 6,
142
- },
143
- },
144
- })
145
-
146
- t.deepEqual(resultCollect(r), [{ path: ['intarray', 0], value: 6 }])
147
- })
148
-
149
- test('push ints', async (t) => {
150
- r = await setWalker(schema, {
151
- $id: 'bl120',
152
- intarray: {
153
- $push: [1, 2, 3, 4, 5],
154
- },
155
- })
156
-
157
- t.deepEqual(resultCollect(r), [
158
- { path: ['intarray'], value: { $push: [1, 2, 3, 4, 5] } },
159
- ])
160
- })
161
-
162
- test('push objs', async (t) => {
163
- r = await setWalker(schema, {
164
- $id: 'bl120',
165
- objArray: {
166
- $push: [{ snurp: 'a' }, { snurp: 'b' }, { snurp: 'c' }],
167
- },
168
- })
169
-
170
- t.deepEqual(resultCollect(r), [
171
- {
172
- path: ['objArray'],
173
- value: {
174
- $push: [{ snurp: 'a' }, { snurp: 'b' }, { snurp: 'c' }],
175
- },
176
- },
177
- { path: ['objArray', -3, 'snurp'], value: 'a' },
178
- { path: ['objArray', -2, 'snurp'], value: 'b' },
179
- { path: ['objArray', -1, 'snurp'], value: 'c' },
180
- { path: ['objArray', -3], value: { snurp: 'a' } },
181
- { path: ['objArray', -2], value: { snurp: 'b' } },
182
- { path: ['objArray', -1], value: { snurp: 'c' } },
183
- ])
184
- })
185
-
186
- test('unshift ints', async (t) => {
187
- r = await setWalker(schema, {
188
- $id: 'bl120',
189
- intarray: {
190
- $unshift: [1, 2, 3, 4, 5],
191
- },
192
- })
193
-
194
- t.deepEqual(resultCollect(r), [
195
- { path: ['intarray'], value: { $unshift: [1, 2, 3, 4, 5] } },
196
- ])
197
- t.true(true)
198
- })
199
-
200
- test('nested default unshift', async (t) => {
201
- r = await setWalker(schema, {
202
- $id: 'bl120',
203
- intarray: {
204
- $unshift: [{ $value: 1 }, { $default: 2 }, 3, 4, 5],
205
- },
206
- })
207
-
208
- t.is(r.errors.length, 0)
209
-
210
- t.deepEqual(resultCollect(r), [
211
- {
212
- path: ['intarray'],
213
- value: { $unshift: [1, { $default: 2 }, 3, 4, 5] },
214
- },
215
- ])
216
- })
217
-
218
- test('nested default in push', async (t) => {
219
- r = await setWalker(schema, {
220
- $id: 'bl120',
221
- intarray: {
222
- $push: [{ $value: 1 }, { $default: 2 }, 3, 4, 5],
223
- },
224
- })
225
-
226
- t.is(r.errors.length, 0)
227
-
228
- t.deepEqual(resultCollect(r), [
229
- {
230
- path: ['intarray'],
231
- value: { $push: [1, { $default: 2 }, 3, 4, 5] },
232
- },
233
- ])
234
- })
235
-
236
- test('assign idx default value error', async (t) => {
237
- r = await setWalker(schema, {
238
- $id: 'bl120',
239
- intarray: {
240
- $assign: {
241
- $idx: { $default: 0 },
242
- $value: 6,
243
- },
244
- },
245
- })
246
- t.true(r.errors.length > 0)
247
- })
248
-
249
- test('assign idx no value', async (t) => {
250
- r = await setWalker(schema, {
251
- $id: 'bl120',
252
- intarray: {
253
- $assign: {
254
- $idx: { $default: 0 },
255
- },
256
- },
257
- })
258
- t.true(r.errors.length > 0)
259
- })
260
-
261
- test('assign idx value spelled wrong', async (t) => {
262
- r = await setWalker(schema, {
263
- $id: 'bl120',
264
- intarray: {
265
- $assign: {
266
- $idx: 0,
267
- value: 5,
268
- },
269
- },
270
- })
271
-
272
- t.true(r.errors.length > 0)
273
- })
274
-
275
- test('assign idx value wrong type', async (t) => {
276
- r = await setWalker(schema, {
277
- $id: 'bl120',
278
- intarray: {
279
- $assign: {
280
- $idx: 0,
281
- $value: 5.6,
282
- },
283
- },
284
- })
285
-
286
- t.true(r.errors.length > 0)
287
- })
288
-
289
- test('assign idx value value wrong type', async (t) => {
290
- r = await setWalker(schema, {
291
- $id: 'bl120',
292
- intarray: {
293
- $assign: {
294
- $idx: 0,
295
- $value: { $value: 5.6 },
296
- },
297
- },
298
- })
299
-
300
- t.true(r.errors.length > 0)
301
- })
302
-
303
- test('assign idx default value', async (t) => {
304
- r = await setWalker(schema, {
305
- $id: 'bl120',
306
- intarray: {
307
- $assign: {
308
- $idx: 0,
309
- $value: { $default: 5 },
310
- },
311
- },
312
- })
313
-
314
- t.deepEqual(resultCollect(r), [
315
- { path: ['intarray', 0], value: { $default: 5 } },
316
- ])
317
- })
318
-
319
- test('assign idx value value error', async (t) => {
320
- r = await setWalker(schema, {
321
- $id: 'bl120',
322
- intarray: {
323
- $assign: {
324
- $idx: { $value: 0 },
325
- $value: 6,
326
- },
327
- },
328
- })
329
-
330
- t.true(r.errors.length > 0)
331
- })
332
-
333
- test('insert idx intarray', async (t) => {
334
- r = await setWalker(schema, {
335
- $id: 'bl120',
336
- intarray: {
337
- $insert: {
338
- $idx: 10,
339
- $value: 1212,
340
- },
341
- },
342
- })
343
-
344
- t.true(r.errors.length === 0)
345
- t.deepEqual(resultCollect(r), [
346
- {
347
- path: ['intarray'],
348
- value: { $insert: { $idx: 10, $value: [1212] } },
349
- },
350
- ])
351
- })
352
-
353
- test('unshift array', async (t) => {
354
- r = await setWalker(schema, {
355
- $id: 'bl120',
356
- intarray: {
357
- $unshift: { $value: [-10, -20, -30] },
358
- },
359
- })
360
-
361
- t.true(r.errors.length === 0)
362
- t.deepEqual(resultCollect(r), [
363
- { path: ['intarray'], value: { $unshift: [-10, -20, -30] } },
364
- ])
365
- })
366
-
367
- test('assign + $delete', async (t) => {
368
- r = await setWalker(schema, {
369
- $id: 'bl120',
370
- objArray: {
371
- $assign: {
372
- $idx: 3,
373
- $value: {
374
- snurp: {
375
- $delete: true,
376
- },
377
- },
378
- },
379
- },
380
- })
381
-
382
- t.is(r.errors.length, 0)
383
-
384
- t.deepEqual(resultCollect(r), [
385
- { path: ['objArray', 3, 'snurp'], value: { $delete: true } },
386
- { path: ['objArray', 3], value: { snurp: { $delete: true } } },
387
- ])
388
- })