Skip to content

Commit d5d1b7c

Browse files
committed
refactor: fixed name for JSON string in JTD serialize
1 parent af534f4 commit d5d1b7c

File tree

2 files changed

+39
-38
lines changed

2 files changed

+39
-38
lines changed

lib/compile/names.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ const names = {
1717
// "globals"
1818
self: new Name("self"),
1919
scope: new Name("scope"),
20+
// JTD serialize/parse name for JSON string
21+
json: new Name("json")
2022
}
2123

2224
export default names

lib/compile/serialize.ts

Lines changed: 37 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ interface SerializeCxt {
3939
readonly self: Ajv // current Ajv instance
4040
readonly schemaEnv: SchemaEnv
4141
readonly definitions: SchemaObjectMap
42-
readonly jsonStr: Name
4342
schema: SchemaObject
4443
data: Code
4544
}
@@ -55,14 +54,12 @@ export function compileSerializer(
5554
const {ownProperties} = this.opts
5655
const gen = new CodeGen(this.scope, {es5, lines, ownProperties})
5756
const serializeName = gen.scopeName("serialize")
58-
const jsonStr = gen.name("json")
5957
const cxt = {
6058
self: this,
6159
gen,
6260
schema: sch.schema as SchemaObject,
6361
schemaEnv: sch,
6462
definitions,
65-
jsonStr,
6663
data: N.data,
6764
}
6865

@@ -71,9 +68,9 @@ export function compileSerializer(
7168
this._compilations.add(sch)
7269
sch.serializeName = serializeName
7370
gen.func(serializeName, N.data, false, () => {
74-
gen.let(jsonStr, str``)
71+
gen.let(N.json, str``)
7572
serializeCode(cxt)
76-
gen.return(jsonStr)
73+
gen.return(N.json)
7774
})
7875
gen.optimize(this.opts.code.optimize)
7976
const serializeFuncCode = gen.toString()
@@ -105,47 +102,49 @@ function serializeCode(cxt: SerializeCxt): void {
105102
}
106103

107104
function serializeNullable(cxt: SerializeCxt, serializeForm: (_cxt: SerializeCxt) => void): void {
108-
const {gen, schema, jsonStr, data} = cxt
105+
const {gen, schema, data} = cxt
109106
if (!schema.nullable) return serializeForm(cxt)
110107
gen.if(
111108
_`${data} === undefined || ${data} === null`,
112-
() => gen.add(jsonStr, _`"null"`),
109+
() => gen.add(N.json, _`"null"`),
113110
() => serializeForm(cxt)
114111
)
115112
}
116113

117114
function serializeElements(cxt: SerializeCxt): void {
118-
const {gen, schema, jsonStr, data} = cxt
119-
gen.add(jsonStr, str`[`)
115+
const {gen, schema, data} = cxt
116+
gen.add(N.json, str`[`)
120117
const first = gen.let("first", true)
121118
gen.forOf("el", data, (el) => {
122119
addComma(cxt, first)
123120
serializeCode({...cxt, schema: schema.elements, data: el})
124121
})
125-
gen.add(jsonStr, str`]`)
122+
gen.add(N.json, str`]`)
126123
}
127124

128125
function serializeValues(cxt: SerializeCxt): void {
129-
const {gen, schema, jsonStr, data} = cxt
130-
gen.add(jsonStr, str`{`)
126+
const {gen, schema, data} = cxt
127+
gen.add(N.json, str`{`)
131128
const first = gen.let("first", true)
132-
gen.forIn("key", data, (key) => serializeKeyValue(cxt, key, schema.values, first))
133-
gen.add(jsonStr, str`}`)
129+
gen.forIn("key", data, (key) =>
130+
serializeKeyValue(cxt, key, schema.values, first)
131+
)
132+
gen.add(N.json, str`}`)
134133
}
135134

136135
function serializeKeyValue(cxt: SerializeCxt, key: Name, schema: SchemaObject, first: Name): void {
137-
const {gen, jsonStr, data} = cxt
136+
const {gen, data} = cxt
138137
addComma(cxt, first)
139138
serializeString({...cxt, data: key})
140-
gen.add(jsonStr, str`:`)
139+
gen.add(N.json, str`:`)
141140
const value = gen.const("value", _`${data}${getProperty(key)}`)
142141
serializeCode({...cxt, schema, data: value})
143142
}
144143

145144
function serializeDiscriminator(cxt: SerializeCxt): void {
146-
const {gen, schema, jsonStr, data} = cxt
145+
const {gen, schema, data} = cxt
147146
const {discriminator} = schema
148-
gen.add(jsonStr, str`{${JSON.stringify(discriminator)}:`)
147+
gen.add(N.json, str`{${JSON.stringify(discriminator)}:`)
149148
const tag = gen.const("tag", _`${data}${getProperty(discriminator)}`)
150149
serializeString({...cxt, data: tag})
151150
gen.if(false)
@@ -155,18 +154,18 @@ function serializeDiscriminator(cxt: SerializeCxt): void {
155154
serializeSchemaProperties({...cxt, schema: sch}, discriminator)
156155
}
157156
gen.endIf()
158-
gen.add(jsonStr, str`}`)
157+
gen.add(N.json, str`}`)
159158
}
160159

161160
function serializeProperties(cxt: SerializeCxt): void {
162-
const {gen, jsonStr} = cxt
163-
gen.add(jsonStr, str`{`)
161+
const {gen} = cxt
162+
gen.add(N.json, str`{`)
164163
serializeSchemaProperties(cxt)
165-
gen.add(jsonStr, str`}`)
164+
gen.add(N.json, str`}`)
166165
}
167166

168167
function serializeSchemaProperties(cxt: SerializeCxt, discriminator?: string): void {
169-
const {gen, schema, jsonStr, data} = cxt
168+
const {gen, schema, data} = cxt
170169
const {properties, optionalProperties} = schema
171170
const props = keys(properties)
172171
const optProps = keys(optionalProperties)
@@ -207,8 +206,8 @@ function serializeSchemaProperties(cxt: SerializeCxt, discriminator?: string): v
207206

208207
function serializeProperty(key: string, propSchema: SchemaObject, value: Name): void {
209208
if (first) first = false
210-
else gen.add(jsonStr, str`,`)
211-
gen.add(jsonStr, str`${JSON.stringify(key)}:`)
209+
else gen.add(N.json, str`,`)
210+
gen.add(N.json, str`${JSON.stringify(key)}:`)
212211
serializeCode({...cxt, schema: propSchema, data: value})
213212
}
214213

@@ -218,18 +217,18 @@ function serializeSchemaProperties(cxt: SerializeCxt, discriminator?: string): v
218217
}
219218

220219
function serializeType(cxt: SerializeCxt): void {
221-
const {gen, schema, jsonStr, data} = cxt
220+
const {gen, schema, data} = cxt
222221
switch (schema.type) {
223222
case "boolean":
224-
gen.add(jsonStr, _`${data} ? "true" : "false"`)
223+
gen.add(N.json, _`${data} ? "true" : "false"`)
225224
break
226225
case "string":
227226
serializeString(cxt)
228227
break
229228
case "timestamp":
230229
gen.if(
231230
_`${data} instanceof Date`,
232-
() => gen.add(jsonStr, _`${data}.toISOString()`),
231+
() => gen.add(N.json, _`${data}.toISOString()`),
233232
() => serializeString(cxt)
234233
)
235234
break
@@ -238,23 +237,23 @@ function serializeType(cxt: SerializeCxt): void {
238237
}
239238
}
240239

241-
function serializeString({gen, jsonStr, data}: SerializeCxt): void {
242-
gen.add(jsonStr, _`${quoteFunc(gen)}(${data})`)
240+
function serializeString({gen, data}: SerializeCxt): void {
241+
gen.add(N.json, _`${quoteFunc(gen)}(${data})`)
243242
}
244243

245-
function serializeNumber({gen, jsonStr, data}: SerializeCxt): void {
246-
gen.add(jsonStr, _`"" + ${data}`)
244+
function serializeNumber({gen, data}: SerializeCxt): void {
245+
gen.add(N.json, _`"" + ${data}`)
247246
}
248247

249248
function serializeRef(cxt: SerializeCxt): void {
250-
const {gen, self, jsonStr, data, definitions, schema, schemaEnv} = cxt
249+
const {gen, self, data, definitions, schema, schemaEnv} = cxt
251250
const {ref} = schema
252251
const refSchema = definitions[ref]
253252
if (!refSchema) throw new MissingRefError("", ref, `No definition ${ref}`)
254253
if (!hasRef(refSchema)) return serializeCode({...cxt, schema: refSchema})
255254
const {root} = schemaEnv
256255
const sch = compileSerializer.call(self, new SchemaEnv({schema: refSchema, root}), definitions)
257-
gen.add(jsonStr, _`${getSerialize(gen, sch)}(${data})`)
256+
gen.add(N.json, _`${getSerialize(gen, sch)}(${data})`)
258257
}
259258

260259
function getSerialize(gen: CodeGen, sch: SchemaEnv): Code {
@@ -263,15 +262,15 @@ function getSerialize(gen: CodeGen, sch: SchemaEnv): Code {
263262
: _`${gen.scopeValue("wrapper", {ref: sch})}.serialize`
264263
}
265264

266-
function serializeEmpty({gen, jsonStr, data}: SerializeCxt): void {
267-
gen.add(jsonStr, _`JSON.stringify(${data})`)
265+
function serializeEmpty({gen, data}: SerializeCxt): void {
266+
gen.add(N.json, _`JSON.stringify(${data})`)
268267
}
269268

270-
function addComma({gen, jsonStr}: SerializeCxt, first: Name): void {
269+
function addComma({gen}: SerializeCxt, first: Name): void {
271270
gen.if(
272271
first,
273272
() => gen.assign(first, false),
274-
() => gen.add(jsonStr, str`,`)
273+
() => gen.add(N.json, str`,`)
275274
)
276275
}
277276

0 commit comments

Comments
 (0)