From b0a6b694459f58c7e6daa51ab6f231baa02dc3ad Mon Sep 17 00:00:00 2001 From: Ruby Tunaley Date: Thu, 23 Sep 2021 21:30:27 +1000 Subject: [PATCH 01/12] Readonly types - Functionality and tests. --- src/generator.ts | 28 ++++++++++++---- src/index.ts | 5 +++ src/parser.ts | 11 +++++++ src/types/AST.ts | 3 ++ src/types/JSONSchema.ts | 4 +++ test/e2e/readonlyArray.explicitFalse.ts | 7 ++++ test/e2e/readonlyArray.optionFalse.ts | 11 +++++++ test/e2e/readonlyArray.optionTrue.ts | 11 +++++++ test/e2e/readonlyArray.optionUnspecified.ts | 7 ++++ ...esEmptySchema.explicitFalse.optionFalse.ts | 31 +++++++++++++++++ ...iesEmptySchema.explicitFalse.optionTrue.ts | 31 +++++++++++++++++ ...ySchema.explicitFalse.optionUnspecified.ts | 27 +++++++++++++++ ...tionalPropertiesEmptySchema.optionFalse.ts | 29 ++++++++++++++++ ...itionalPropertiesEmptySchema.optionTrue.ts | 29 ++++++++++++++++ ...PropertiesEmptySchema.optionUnspecified.ts | 25 ++++++++++++++ ...ertiesImplied.explicitFalse.optionFalse.ts | 30 +++++++++++++++++ ...pertiesImplied.explicitFalse.optionTrue.ts | 30 +++++++++++++++++ ...Implied.explicitFalse.optionUnspecified.ts | 26 +++++++++++++++ ...additionalPropertiesImplied.optionFalse.ts | 28 ++++++++++++++++ ....additionalPropertiesImplied.optionTrue.ts | 28 ++++++++++++++++ ...onalPropertiesImplied.optionUnspecified.ts | 24 ++++++++++++++ ...ertiesRoFalse.explicitFalse.optionFalse.ts | 33 +++++++++++++++++++ ...pertiesRoFalse.explicitFalse.optionTrue.ts | 33 +++++++++++++++++++ ...RoFalse.explicitFalse.optionUnspecified.ts | 29 ++++++++++++++++ ...pertiesRoTrue.explicitFalse.optionFalse.ts | 31 +++++++++++++++++ ...opertiesRoTrue.explicitFalse.optionTrue.ts | 31 +++++++++++++++++ ...sRoTrue.explicitFalse.optionUnspecified.ts | 27 +++++++++++++++ ....additionalPropertiesRoTrue.optionFalse.ts | 29 ++++++++++++++++ ...e.additionalPropertiesRoTrue.optionTrue.ts | 29 ++++++++++++++++ ...ionalPropertiesRoTrue.optionUnspecified.ts | 25 ++++++++++++++ ...onlyInterface.explicitFalse.optionFalse.ts | 31 +++++++++++++++++ ...donlyInterface.explicitFalse.optionTrue.ts | 31 +++++++++++++++++ ...terface.explicitFalse.optionUnspecified.ts | 27 +++++++++++++++ test/e2e/readonlyInterface.optionFalse.ts | 28 ++++++++++++++++ test/e2e/readonlyInterface.optionTrue.ts | 28 ++++++++++++++++ .../readonlyInterface.optionUnspecified.ts | 24 ++++++++++++++ ...iesEmptySchema.explicitTrue.optionFalse.ts | 31 +++++++++++++++++ ...tiesEmptySchema.explicitTrue.optionTrue.ts | 31 +++++++++++++++++ ...tySchema.explicitTrue.optionUnspecified.ts | 27 +++++++++++++++ ...tionalPropertiesEmptySchema.optionFalse.ts | 29 ++++++++++++++++ ...itionalPropertiesEmptySchema.optionTrue.ts | 29 ++++++++++++++++ ...PropertiesEmptySchema.optionUnspecified.ts | 25 ++++++++++++++ ...pertiesImplied.explicitTrue.optionFalse.ts | 30 +++++++++++++++++ ...opertiesImplied.explicitTrue.optionTrue.ts | 30 +++++++++++++++++ ...sImplied.explicitTrue.optionUnspecified.ts | 26 +++++++++++++++ ...additionalPropertiesImplied.optionFalse.ts | 28 ++++++++++++++++ ....additionalPropertiesImplied.optionTrue.ts | 28 ++++++++++++++++ ...onalPropertiesImplied.optionUnspecified.ts | 24 ++++++++++++++ ...pertiesRoFalse.explicitTrue.optionFalse.ts | 33 +++++++++++++++++++ ...opertiesRoFalse.explicitTrue.optionTrue.ts | 33 +++++++++++++++++++ ...sRoFalse.explicitTrue.optionUnspecified.ts | 29 ++++++++++++++++ ...additionalPropertiesRoFalse.optionFalse.ts | 31 +++++++++++++++++ ....additionalPropertiesRoFalse.optionTrue.ts | 31 +++++++++++++++++ ...onalPropertiesRoFalse.optionUnspecified.ts | 27 +++++++++++++++ ...opertiesRoTrue.explicitTrue.optionFalse.ts | 33 +++++++++++++++++++ ...ropertiesRoTrue.explicitTrue.optionTrue.ts | 33 +++++++++++++++++++ ...esRoTrue.explicitTrue.optionUnspecified.ts | 29 ++++++++++++++++ ...readonlyObject.explicitTrue.optionFalse.ts | 31 +++++++++++++++++ ....readonlyObject.explicitTrue.optionTrue.ts | 31 +++++++++++++++++ ...lyObject.explicitTrue.optionUnspecified.ts | 27 +++++++++++++++ ...nlyInterface.readonlyObject.optionFalse.ts | 29 ++++++++++++++++ ...onlyInterface.readonlyObject.optionTrue.ts | 29 ++++++++++++++++ ...erface.readonlyObject.optionUnspecified.ts | 25 ++++++++++++++ test/e2e/readonlyTuple.explicitFalse.ts | 8 +++++ test/e2e/readonlyTuple.optionFalse.ts | 12 +++++++ test/e2e/readonlyTuple.optionTrue.ts | 12 +++++++ 66 files changed, 1676 insertions(+), 6 deletions(-) create mode 100644 test/e2e/readonlyArray.explicitFalse.ts create mode 100644 test/e2e/readonlyArray.optionFalse.ts create mode 100644 test/e2e/readonlyArray.optionTrue.ts create mode 100644 test/e2e/readonlyArray.optionUnspecified.ts create mode 100644 test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.optionFalse.ts create mode 100644 test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.optionTrue.ts create mode 100644 test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.optionUnspecified.ts create mode 100644 test/e2e/readonlyInterface.additionalPropertiesEmptySchema.optionFalse.ts create mode 100644 test/e2e/readonlyInterface.additionalPropertiesEmptySchema.optionTrue.ts create mode 100644 test/e2e/readonlyInterface.additionalPropertiesEmptySchema.optionUnspecified.ts create mode 100644 test/e2e/readonlyInterface.additionalPropertiesImplied.explicitFalse.optionFalse.ts create mode 100644 test/e2e/readonlyInterface.additionalPropertiesImplied.explicitFalse.optionTrue.ts create mode 100644 test/e2e/readonlyInterface.additionalPropertiesImplied.explicitFalse.optionUnspecified.ts create mode 100644 test/e2e/readonlyInterface.additionalPropertiesImplied.optionFalse.ts create mode 100644 test/e2e/readonlyInterface.additionalPropertiesImplied.optionTrue.ts create mode 100644 test/e2e/readonlyInterface.additionalPropertiesImplied.optionUnspecified.ts create mode 100644 test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.optionFalse.ts create mode 100644 test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.optionTrue.ts create mode 100644 test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.optionUnspecified.ts create mode 100644 test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.optionFalse.ts create mode 100644 test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.optionTrue.ts create mode 100644 test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.optionUnspecified.ts create mode 100644 test/e2e/readonlyInterface.additionalPropertiesRoTrue.optionFalse.ts create mode 100644 test/e2e/readonlyInterface.additionalPropertiesRoTrue.optionTrue.ts create mode 100644 test/e2e/readonlyInterface.additionalPropertiesRoTrue.optionUnspecified.ts create mode 100644 test/e2e/readonlyInterface.explicitFalse.optionFalse.ts create mode 100644 test/e2e/readonlyInterface.explicitFalse.optionTrue.ts create mode 100644 test/e2e/readonlyInterface.explicitFalse.optionUnspecified.ts create mode 100644 test/e2e/readonlyInterface.optionFalse.ts create mode 100644 test/e2e/readonlyInterface.optionTrue.ts create mode 100644 test/e2e/readonlyInterface.optionUnspecified.ts create mode 100644 test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionFalse.ts create mode 100644 test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionTrue.ts create mode 100644 test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionUnspecified.ts create mode 100644 test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.optionFalse.ts create mode 100644 test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.optionTrue.ts create mode 100644 test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.optionUnspecified.ts create mode 100644 test/e2e/readonlyInterface.readonlyObject.additionalPropertiesImplied.explicitTrue.optionFalse.ts create mode 100644 test/e2e/readonlyInterface.readonlyObject.additionalPropertiesImplied.explicitTrue.optionTrue.ts create mode 100644 test/e2e/readonlyInterface.readonlyObject.additionalPropertiesImplied.explicitTrue.optionUnspecified.ts create mode 100644 test/e2e/readonlyInterface.readonlyObject.additionalPropertiesImplied.optionFalse.ts create mode 100644 test/e2e/readonlyInterface.readonlyObject.additionalPropertiesImplied.optionTrue.ts create mode 100644 test/e2e/readonlyInterface.readonlyObject.additionalPropertiesImplied.optionUnspecified.ts create mode 100644 test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionFalse.ts create mode 100644 test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionTrue.ts create mode 100644 test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionUnspecified.ts create mode 100644 test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.optionFalse.ts create mode 100644 test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.optionTrue.ts create mode 100644 test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.optionUnspecified.ts create mode 100644 test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionFalse.ts create mode 100644 test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionTrue.ts create mode 100644 test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionUnspecified.ts create mode 100644 test/e2e/readonlyInterface.readonlyObject.explicitTrue.optionFalse.ts create mode 100644 test/e2e/readonlyInterface.readonlyObject.explicitTrue.optionTrue.ts create mode 100644 test/e2e/readonlyInterface.readonlyObject.explicitTrue.optionUnspecified.ts create mode 100644 test/e2e/readonlyInterface.readonlyObject.optionFalse.ts create mode 100644 test/e2e/readonlyInterface.readonlyObject.optionTrue.ts create mode 100644 test/e2e/readonlyInterface.readonlyObject.optionUnspecified.ts create mode 100644 test/e2e/readonlyTuple.explicitFalse.ts create mode 100644 test/e2e/readonlyTuple.optionFalse.ts create mode 100644 test/e2e/readonlyTuple.optionTrue.ts diff --git a/src/generator.ts b/src/generator.ts index 077cc5a4..ddf14be7 100644 --- a/src/generator.ts +++ b/src/generator.ts @@ -178,8 +178,16 @@ function generateRawType(ast: AST, options: Options): string { return 'any' case 'ARRAY': return (() => { - const type = generateType(ast.params, options) - return type.endsWith('"') ? '(' + type + ')[]' : type + '[]' + let type = generateType(ast.params, options) + if (ast.isReadonly && !options.readonlyKeyword) { + type = 'Readonly<'+ type + '>' + } else { + type = type.endsWith('"') ? '(' + type + ')[]' : type + '[]' + if (ast.isReadonly) { + type = 'readonly ' + type + } + } + return type })() case 'BOOLEAN': return 'boolean' @@ -275,7 +283,14 @@ function generateRawType(ast: AST, options: Options): string { } // no max items so only need to return one type - return paramsToString(addSpreadParam(paramsList)) + const type = paramsToString(addSpreadParam(paramsList)) + // `Readonly` where T is a tuple type is unsupported in versions of TypeScript prior to the introduction + // of the `readonly` keyword for array/tuple types, so don't bother adding it if options.readonlyKeyword is + // false + // Sources: + // https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-4.html#a-new-syntax-for-readonlyarray + // https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-4.html#readonly-tuples + return ast.isReadonly && options.readonlyKeyword ? 'readonly ' + type : type })() case 'UNION': return generateSetOperation(ast, options) @@ -302,12 +317,13 @@ function generateInterface(ast: TInterface, options: Options): string { ast.params .filter(_ => !_.isPatternProperty && !_.isUnreachableDefinition) .map( - ({isRequired, keyName, ast}) => - [isRequired, keyName, ast, generateType(ast, options)] as [boolean, string, AST, string] + ({isRequired, isReadonly, keyName, ast}) => + [isRequired, isReadonly, keyName, ast, generateType(ast, options)] as [boolean, boolean | undefined, string, AST, string] ) .map( - ([isRequired, keyName, ast, type]) => + ([isRequired, isReadonly, keyName, ast, type]) => (hasComment(ast) && !ast.standaloneName ? generateComment(ast.comment) + '\n' : '') + + (isReadonly ? 'readonly ' : '') + escapeKeyName(keyName) + (isRequired ? '' : '?') + ': ' + diff --git a/src/index.ts b/src/index.ts index cacc4118..e16eafec 100644 --- a/src/index.ts +++ b/src/index.ts @@ -42,6 +42,10 @@ export interface Options { * Ignore maxItems and minItems for `array` types, preventing tuples being generated. */ ignoreMinAndMaxItems: boolean + /** + * Use the `readonly` keyword instead of `Readonly` for array types? + */ + readonlyKeyword: boolean /** * Append all index signatures with `| undefined` so that they are strictly typed. * @@ -79,6 +83,7 @@ export const DEFAULT_OPTIONS: Options = { enableConstEnums: true, format: true, ignoreMinAndMaxItems: false, + readonlyKeyword: true, strictIndexSignatures: false, style: { bracketSpacing: false, diff --git a/src/parser.ts b/src/parser.ts index 6cb6cef3..e9238c82 100644 --- a/src/parser.ts +++ b/src/parser.ts @@ -224,6 +224,7 @@ function parseNonLiteral( minItems, standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames), params: schema.items.map(_ => parse(_, options, undefined, processed, usedNames)), + isReadonly: schema.tsReadonly, type: 'TUPLE' } if (schema.additionalItems === true) { @@ -238,6 +239,7 @@ function parseNonLiteral( keyName, standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames), params: parse(schema.items!, options, undefined, processed, usedNames), + isReadonly: schema.tsReadonly, type: 'ARRAY' } } @@ -278,6 +280,7 @@ function parseNonLiteral( // if there is no maximum, then add a spread item to collect the rest spreadParam: maxItems >= 0 ? undefined : params, standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames), + isReadonly: schema.tsReadonly, type: 'TUPLE' } } @@ -287,6 +290,7 @@ function parseNonLiteral( keyName, params, standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames), + isReadonly: schema.tsReadonly, type: 'ARRAY' } } @@ -355,6 +359,8 @@ function parseSchema( isPatternProperty: false, isRequired: includes(schema.required || [], key), isUnreachableDefinition: false, + // Readonly state specified on property supercedes readonly state specified on the object + isReadonly: value.tsReadonly ?? schema.tsReadonly, keyName: key })) @@ -376,6 +382,7 @@ via the \`patternProperty\` "${key}".` isPatternProperty: !singlePatternProperty, isRequired: singlePatternProperty || includes(schema.required || [], key), isUnreachableDefinition: false, + isReadonly: value.tsReadonly, keyName: singlePatternProperty ? '[k: string]' : key } }) @@ -394,6 +401,7 @@ via the \`definition\` "${key}".` isPatternProperty: false, isRequired: includes(schema.required || [], key), isUnreachableDefinition: true, + isReadonly: value.tsReadonly, keyName: key } }) @@ -412,6 +420,7 @@ via the \`definition\` "${key}".` isPatternProperty: false, isRequired: true, isUnreachableDefinition: false, + isReadonly: schema.tsReadonly, keyName: '[k: string]' }) @@ -426,6 +435,8 @@ via the \`definition\` "${key}".` isPatternProperty: false, isRequired: true, isUnreachableDefinition: false, + // Explicit additionalProperties readonly state supercedes generic readonly state + isReadonly: schema.tsReadonly ?? schema.tsReadonly, keyName: '[k: string]' }) } diff --git a/src/types/AST.ts b/src/types/AST.ts index 0697be60..e44fe093 100644 --- a/src/types/AST.ts +++ b/src/types/AST.ts @@ -49,6 +49,7 @@ export interface TAny extends AbstractAST { export interface TArray extends AbstractAST { type: 'ARRAY' params: AST + isReadonly: boolean | undefined } export interface TBoolean extends AbstractAST { @@ -85,6 +86,7 @@ export interface TInterfaceParam { isRequired: boolean isPatternProperty: boolean isUnreachableDefinition: boolean + isReadonly: boolean | undefined } export interface TIntersection extends AbstractAST { @@ -124,6 +126,7 @@ export interface TTuple extends AbstractAST { spreadParam?: AST minItems: number maxItems?: number + isReadonly: boolean | undefined } export interface TUnion extends AbstractAST { diff --git a/src/types/JSONSchema.ts b/src/types/JSONSchema.ts index d11d099f..edaec77a 100644 --- a/src/types/JSONSchema.ts +++ b/src/types/JSONSchema.ts @@ -33,6 +33,10 @@ export interface JSONSchema extends JSONSchema4 { * schema extension to support custom types */ tsType?: string + /** + * schema extension to support readonly types + */ + tsReadonly?: boolean } export const Parent = Symbol('Parent') diff --git a/test/e2e/readonlyArray.explicitFalse.ts b/test/e2e/readonlyArray.explicitFalse.ts new file mode 100644 index 00000000..b1e08ff1 --- /dev/null +++ b/test/e2e/readonlyArray.explicitFalse.ts @@ -0,0 +1,7 @@ +export const input = { + type: 'array', + items: { + type: 'string' + }, + tsReadonly: false +} diff --git a/test/e2e/readonlyArray.optionFalse.ts b/test/e2e/readonlyArray.optionFalse.ts new file mode 100644 index 00000000..48008d2c --- /dev/null +++ b/test/e2e/readonlyArray.optionFalse.ts @@ -0,0 +1,11 @@ +export const input = { + type: 'array', + items: { + type: 'string' + }, + tsReadonly: true +} + +export const options = { + readonlyKeyword: false +} diff --git a/test/e2e/readonlyArray.optionTrue.ts b/test/e2e/readonlyArray.optionTrue.ts new file mode 100644 index 00000000..05eeec67 --- /dev/null +++ b/test/e2e/readonlyArray.optionTrue.ts @@ -0,0 +1,11 @@ +export const input = { + type: 'array', + items: { + type: 'string' + }, + tsReadonly: true +} + +export const options = { + readonlyKeyword: true +} diff --git a/test/e2e/readonlyArray.optionUnspecified.ts b/test/e2e/readonlyArray.optionUnspecified.ts new file mode 100644 index 00000000..ebd45e87 --- /dev/null +++ b/test/e2e/readonlyArray.optionUnspecified.ts @@ -0,0 +1,7 @@ +export const input = { + type: 'array', + items: { + type: 'string' + }, + tsReadonly: true +} diff --git a/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.optionFalse.ts b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.optionFalse.ts new file mode 100644 index 00000000..1bb3df1d --- /dev/null +++ b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.optionFalse.ts @@ -0,0 +1,31 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: {}, + tsReadonly: false +} + +export const options = { + readonlyKeyword: false +} diff --git a/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.optionTrue.ts b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.optionTrue.ts new file mode 100644 index 00000000..3d9bb467 --- /dev/null +++ b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.optionTrue.ts @@ -0,0 +1,31 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: {}, + tsReadonly: false +} + +export const options = { + readonlyKeyword: true +} diff --git a/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.optionUnspecified.ts b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.optionUnspecified.ts new file mode 100644 index 00000000..5c16bb16 --- /dev/null +++ b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.optionUnspecified.ts @@ -0,0 +1,27 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: {}, + tsReadonly: false +} diff --git a/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.optionFalse.ts b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.optionFalse.ts new file mode 100644 index 00000000..6efcb414 --- /dev/null +++ b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.optionFalse.ts @@ -0,0 +1,29 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string' + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string' + } + }, + additionalProperties: {}, + tsReadonly: false +} + +export const options = { + readonlyKeyword: false +} diff --git a/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.optionTrue.ts b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.optionTrue.ts new file mode 100644 index 00000000..f657595d --- /dev/null +++ b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.optionTrue.ts @@ -0,0 +1,29 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string' + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string' + } + }, + additionalProperties: {}, + tsReadonly: false +} + +export const options = { + readonlyKeyword: true +} diff --git a/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.optionUnspecified.ts b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.optionUnspecified.ts new file mode 100644 index 00000000..0701a47c --- /dev/null +++ b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.optionUnspecified.ts @@ -0,0 +1,25 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string' + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string' + } + }, + additionalProperties: {}, + tsReadonly: false +} diff --git a/test/e2e/readonlyInterface.additionalPropertiesImplied.explicitFalse.optionFalse.ts b/test/e2e/readonlyInterface.additionalPropertiesImplied.explicitFalse.optionFalse.ts new file mode 100644 index 00000000..c02c73e7 --- /dev/null +++ b/test/e2e/readonlyInterface.additionalPropertiesImplied.explicitFalse.optionFalse.ts @@ -0,0 +1,30 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + tsReadonly: false +} + +export const options = { + readonlyKeyword: false +} diff --git a/test/e2e/readonlyInterface.additionalPropertiesImplied.explicitFalse.optionTrue.ts b/test/e2e/readonlyInterface.additionalPropertiesImplied.explicitFalse.optionTrue.ts new file mode 100644 index 00000000..2b55ad0b --- /dev/null +++ b/test/e2e/readonlyInterface.additionalPropertiesImplied.explicitFalse.optionTrue.ts @@ -0,0 +1,30 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + tsReadonly: false +} + +export const options = { + readonlyKeyword: true +} diff --git a/test/e2e/readonlyInterface.additionalPropertiesImplied.explicitFalse.optionUnspecified.ts b/test/e2e/readonlyInterface.additionalPropertiesImplied.explicitFalse.optionUnspecified.ts new file mode 100644 index 00000000..50056510 --- /dev/null +++ b/test/e2e/readonlyInterface.additionalPropertiesImplied.explicitFalse.optionUnspecified.ts @@ -0,0 +1,26 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + tsReadonly: false +} diff --git a/test/e2e/readonlyInterface.additionalPropertiesImplied.optionFalse.ts b/test/e2e/readonlyInterface.additionalPropertiesImplied.optionFalse.ts new file mode 100644 index 00000000..73fdfe12 --- /dev/null +++ b/test/e2e/readonlyInterface.additionalPropertiesImplied.optionFalse.ts @@ -0,0 +1,28 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string' + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string' + } + }, + tsReadonly: false +} + +export const options = { + readonlyKeyword: false +} diff --git a/test/e2e/readonlyInterface.additionalPropertiesImplied.optionTrue.ts b/test/e2e/readonlyInterface.additionalPropertiesImplied.optionTrue.ts new file mode 100644 index 00000000..2bd9eec1 --- /dev/null +++ b/test/e2e/readonlyInterface.additionalPropertiesImplied.optionTrue.ts @@ -0,0 +1,28 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string' + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string' + } + }, + tsReadonly: false +} + +export const options = { + readonlyKeyword: true +} diff --git a/test/e2e/readonlyInterface.additionalPropertiesImplied.optionUnspecified.ts b/test/e2e/readonlyInterface.additionalPropertiesImplied.optionUnspecified.ts new file mode 100644 index 00000000..b1ffebe8 --- /dev/null +++ b/test/e2e/readonlyInterface.additionalPropertiesImplied.optionUnspecified.ts @@ -0,0 +1,24 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string' + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string' + } + }, + tsReadonly: false +} diff --git a/test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.optionFalse.ts b/test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.optionFalse.ts new file mode 100644 index 00000000..f45602bf --- /dev/null +++ b/test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.optionFalse.ts @@ -0,0 +1,33 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: { + tsReadonly: false + }, + tsReadonly: false +} + +export const options = { + readonlyKeyword: false +} diff --git a/test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.optionTrue.ts b/test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.optionTrue.ts new file mode 100644 index 00000000..f4f5691e --- /dev/null +++ b/test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.optionTrue.ts @@ -0,0 +1,33 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: { + tsReadonly: false + }, + tsReadonly: false +} + +export const options = { + readonlyKeyword: true +} diff --git a/test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.optionUnspecified.ts b/test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.optionUnspecified.ts new file mode 100644 index 00000000..61fd8758 --- /dev/null +++ b/test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.optionUnspecified.ts @@ -0,0 +1,29 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: { + tsReadonly: false + }, + tsReadonly: false +} diff --git a/test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.optionFalse.ts b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.optionFalse.ts new file mode 100644 index 00000000..743d6d3a --- /dev/null +++ b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.optionFalse.ts @@ -0,0 +1,31 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: true, + tsReadonly: false +} + +export const options = { + readonlyKeyword: false +} diff --git a/test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.optionTrue.ts b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.optionTrue.ts new file mode 100644 index 00000000..1884ed92 --- /dev/null +++ b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.optionTrue.ts @@ -0,0 +1,31 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: true, + tsReadonly: false +} + +export const options = { + readonlyKeyword: true +} diff --git a/test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.optionUnspecified.ts b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.optionUnspecified.ts new file mode 100644 index 00000000..bebfa6a3 --- /dev/null +++ b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.optionUnspecified.ts @@ -0,0 +1,27 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: true, + tsReadonly: false +} diff --git a/test/e2e/readonlyInterface.additionalPropertiesRoTrue.optionFalse.ts b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.optionFalse.ts new file mode 100644 index 00000000..21eba2de --- /dev/null +++ b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.optionFalse.ts @@ -0,0 +1,29 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string' + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string' + } + }, + additionalProperties: true, + tsReadonly: false +} + +export const options = { + readonlyKeyword: false +} diff --git a/test/e2e/readonlyInterface.additionalPropertiesRoTrue.optionTrue.ts b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.optionTrue.ts new file mode 100644 index 00000000..251975a7 --- /dev/null +++ b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.optionTrue.ts @@ -0,0 +1,29 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string' + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string' + } + }, + additionalProperties: true, + tsReadonly: false +} + +export const options = { + readonlyKeyword: true +} diff --git a/test/e2e/readonlyInterface.additionalPropertiesRoTrue.optionUnspecified.ts b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.optionUnspecified.ts new file mode 100644 index 00000000..5ee8c206 --- /dev/null +++ b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.optionUnspecified.ts @@ -0,0 +1,25 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string' + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string' + } + }, + additionalProperties: true, + tsReadonly: false +} diff --git a/test/e2e/readonlyInterface.explicitFalse.optionFalse.ts b/test/e2e/readonlyInterface.explicitFalse.optionFalse.ts new file mode 100644 index 00000000..a9f45fae --- /dev/null +++ b/test/e2e/readonlyInterface.explicitFalse.optionFalse.ts @@ -0,0 +1,31 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: false, + tsReadonly: false +} + +export const options = { + readonlyKeyword: false +} diff --git a/test/e2e/readonlyInterface.explicitFalse.optionTrue.ts b/test/e2e/readonlyInterface.explicitFalse.optionTrue.ts new file mode 100644 index 00000000..c037d36a --- /dev/null +++ b/test/e2e/readonlyInterface.explicitFalse.optionTrue.ts @@ -0,0 +1,31 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: false, + tsReadonly: false +} + +export const options = { + readonlyKeyword: true +} diff --git a/test/e2e/readonlyInterface.explicitFalse.optionUnspecified.ts b/test/e2e/readonlyInterface.explicitFalse.optionUnspecified.ts new file mode 100644 index 00000000..2fe30ea3 --- /dev/null +++ b/test/e2e/readonlyInterface.explicitFalse.optionUnspecified.ts @@ -0,0 +1,27 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: false, + tsReadonly: false +} diff --git a/test/e2e/readonlyInterface.optionFalse.ts b/test/e2e/readonlyInterface.optionFalse.ts new file mode 100644 index 00000000..4e695cc2 --- /dev/null +++ b/test/e2e/readonlyInterface.optionFalse.ts @@ -0,0 +1,28 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string' + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string' + } + }, + additionalProperties: false +} + +export const options = { + readonlyKeyword: false +} diff --git a/test/e2e/readonlyInterface.optionTrue.ts b/test/e2e/readonlyInterface.optionTrue.ts new file mode 100644 index 00000000..9eefd083 --- /dev/null +++ b/test/e2e/readonlyInterface.optionTrue.ts @@ -0,0 +1,28 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string' + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string' + } + }, + additionalProperties: false +} + +export const options = { + readonlyKeyword: true +} diff --git a/test/e2e/readonlyInterface.optionUnspecified.ts b/test/e2e/readonlyInterface.optionUnspecified.ts new file mode 100644 index 00000000..fc0f8408 --- /dev/null +++ b/test/e2e/readonlyInterface.optionUnspecified.ts @@ -0,0 +1,24 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string' + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string' + } + }, + additionalProperties: false +} diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionFalse.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionFalse.ts new file mode 100644 index 00000000..753e2912 --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionFalse.ts @@ -0,0 +1,31 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: {}, + tsReadonly: true +} + +export const options = { + readonlyKeyword: false +} diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionTrue.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionTrue.ts new file mode 100644 index 00000000..4dcda326 --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionTrue.ts @@ -0,0 +1,31 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: {}, + tsReadonly: true +} + +export const options = { + readonlyKeyword: true +} diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionUnspecified.ts new file mode 100644 index 00000000..9fd5d4db --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionUnspecified.ts @@ -0,0 +1,27 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: {}, + tsReadonly: true +} diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.optionFalse.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.optionFalse.ts new file mode 100644 index 00000000..7785abce --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.optionFalse.ts @@ -0,0 +1,29 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string' + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string' + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: {}, + tsReadonly: true +} + +export const options = { + readonlyKeyword: false +} diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.optionTrue.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.optionTrue.ts new file mode 100644 index 00000000..fb95945a --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.optionTrue.ts @@ -0,0 +1,29 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string' + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string' + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: {}, + tsReadonly: true +} + +export const options = { + readonlyKeyword: true +} diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.optionUnspecified.ts new file mode 100644 index 00000000..eb23ca81 --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.optionUnspecified.ts @@ -0,0 +1,25 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string' + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string' + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: {}, + tsReadonly: true +} diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesImplied.explicitTrue.optionFalse.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesImplied.explicitTrue.optionFalse.ts new file mode 100644 index 00000000..7f1c9f62 --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesImplied.explicitTrue.optionFalse.ts @@ -0,0 +1,30 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + tsReadonly: true +} + +export const options = { + readonlyKeyword: false +} diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesImplied.explicitTrue.optionTrue.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesImplied.explicitTrue.optionTrue.ts new file mode 100644 index 00000000..f1e39f33 --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesImplied.explicitTrue.optionTrue.ts @@ -0,0 +1,30 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + tsReadonly: true +} + +export const options = { + readonlyKeyword: true +} diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesImplied.explicitTrue.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesImplied.explicitTrue.optionUnspecified.ts new file mode 100644 index 00000000..449159f3 --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesImplied.explicitTrue.optionUnspecified.ts @@ -0,0 +1,26 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + tsReadonly: true +} diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesImplied.optionFalse.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesImplied.optionFalse.ts new file mode 100644 index 00000000..83473e3f --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesImplied.optionFalse.ts @@ -0,0 +1,28 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string' + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string' + }, + d: { + type: 'string', + tsReadonly: false + } + }, + tsReadonly: true +} + +export const options = { + readonlyKeyword: false +} diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesImplied.optionTrue.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesImplied.optionTrue.ts new file mode 100644 index 00000000..897d77a1 --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesImplied.optionTrue.ts @@ -0,0 +1,28 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string' + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string' + }, + d: { + type: 'string', + tsReadonly: false + } + }, + tsReadonly: true +} + +export const options = { + readonlyKeyword: true +} diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesImplied.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesImplied.optionUnspecified.ts new file mode 100644 index 00000000..de546a4f --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesImplied.optionUnspecified.ts @@ -0,0 +1,24 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string' + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string' + }, + d: { + type: 'string', + tsReadonly: false + } + }, + tsReadonly: true +} diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionFalse.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionFalse.ts new file mode 100644 index 00000000..f4ac9179 --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionFalse.ts @@ -0,0 +1,33 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: { + tsReadonly: false + }, + tsReadonly: true +} + +export const options = { + readonlyKeyword: false +} diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionTrue.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionTrue.ts new file mode 100644 index 00000000..cb2b9619 --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionTrue.ts @@ -0,0 +1,33 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: { + tsReadonly: false + }, + tsReadonly: true +} + +export const options = { + readonlyKeyword: true +} diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionUnspecified.ts new file mode 100644 index 00000000..97000660 --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionUnspecified.ts @@ -0,0 +1,29 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: { + tsReadonly: false + }, + tsReadonly: true +} diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.optionFalse.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.optionFalse.ts new file mode 100644 index 00000000..2a7f2f32 --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.optionFalse.ts @@ -0,0 +1,31 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string' + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string' + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: { + tsReadonly: false + }, + tsReadonly: true +} + +export const options = { + readonlyKeyword: false +} diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.optionTrue.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.optionTrue.ts new file mode 100644 index 00000000..866e2d23 --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.optionTrue.ts @@ -0,0 +1,31 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string' + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string' + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: { + tsReadonly: false + }, + tsReadonly: true +} + +export const options = { + readonlyKeyword: true +} diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.optionUnspecified.ts new file mode 100644 index 00000000..3c68cf0e --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.optionUnspecified.ts @@ -0,0 +1,27 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string' + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string' + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: { + tsReadonly: false + }, + tsReadonly: true +} diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionFalse.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionFalse.ts new file mode 100644 index 00000000..41cb6a64 --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionFalse.ts @@ -0,0 +1,33 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: { + tsReadonly: true + }, + tsReadonly: true +} + +export const options = { + readonlyKeyword: false +} diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionTrue.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionTrue.ts new file mode 100644 index 00000000..9f81ac20 --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionTrue.ts @@ -0,0 +1,33 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: { + tsReadonly: true + }, + tsReadonly: true +} + +export const options = { + readonlyKeyword: true +} diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionUnspecified.ts new file mode 100644 index 00000000..afc435ac --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionUnspecified.ts @@ -0,0 +1,29 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: { + tsReadonly: true + }, + tsReadonly: true +} diff --git a/test/e2e/readonlyInterface.readonlyObject.explicitTrue.optionFalse.ts b/test/e2e/readonlyInterface.readonlyObject.explicitTrue.optionFalse.ts new file mode 100644 index 00000000..e2918963 --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyObject.explicitTrue.optionFalse.ts @@ -0,0 +1,31 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: false, + tsReadonly: true +} + +export const options = { + readonlyKeyword: false +} diff --git a/test/e2e/readonlyInterface.readonlyObject.explicitTrue.optionTrue.ts b/test/e2e/readonlyInterface.readonlyObject.explicitTrue.optionTrue.ts new file mode 100644 index 00000000..e3d6381c --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyObject.explicitTrue.optionTrue.ts @@ -0,0 +1,31 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: false, + tsReadonly: true +} + +export const options = { + readonlyKeyword: true +} diff --git a/test/e2e/readonlyInterface.readonlyObject.explicitTrue.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyObject.explicitTrue.optionUnspecified.ts new file mode 100644 index 00000000..8284467e --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyObject.explicitTrue.optionUnspecified.ts @@ -0,0 +1,27 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: false, + tsReadonly: true +} diff --git a/test/e2e/readonlyInterface.readonlyObject.optionFalse.ts b/test/e2e/readonlyInterface.readonlyObject.optionFalse.ts new file mode 100644 index 00000000..500cc86c --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyObject.optionFalse.ts @@ -0,0 +1,29 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string' + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string' + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: false, + tsReadonly: true +} + +export const options = { + readonlyKeyword: false +} diff --git a/test/e2e/readonlyInterface.readonlyObject.optionTrue.ts b/test/e2e/readonlyInterface.readonlyObject.optionTrue.ts new file mode 100644 index 00000000..fba1767b --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyObject.optionTrue.ts @@ -0,0 +1,29 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string' + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string' + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: false, + tsReadonly: true +} + +export const options = { + readonlyKeyword: true +} diff --git a/test/e2e/readonlyInterface.readonlyObject.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyObject.optionUnspecified.ts new file mode 100644 index 00000000..a380c3d2 --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyObject.optionUnspecified.ts @@ -0,0 +1,25 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string' + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string' + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: false, + tsReadonly: true +} diff --git a/test/e2e/readonlyTuple.explicitFalse.ts b/test/e2e/readonlyTuple.explicitFalse.ts new file mode 100644 index 00000000..7116f084 --- /dev/null +++ b/test/e2e/readonlyTuple.explicitFalse.ts @@ -0,0 +1,8 @@ +export const input = { + type: 'array', + minItems: 1, + items: { + type: 'string' + }, + tsReadonly: false +} diff --git a/test/e2e/readonlyTuple.optionFalse.ts b/test/e2e/readonlyTuple.optionFalse.ts new file mode 100644 index 00000000..790bbcd9 --- /dev/null +++ b/test/e2e/readonlyTuple.optionFalse.ts @@ -0,0 +1,12 @@ +export const input = { + type: 'array', + minItems: 1, + items: { + type: 'string' + }, + tsReadonly: true +} + +export const options = { + readonlyKeyword: false +} diff --git a/test/e2e/readonlyTuple.optionTrue.ts b/test/e2e/readonlyTuple.optionTrue.ts new file mode 100644 index 00000000..eb4004e6 --- /dev/null +++ b/test/e2e/readonlyTuple.optionTrue.ts @@ -0,0 +1,12 @@ +export const input = { + type: 'array', + minItems: 1, + items: { + type: 'string' + }, + tsReadonly: true +} + +export const options = { + readonlyKeyword: true +} From c19f4112b502856ab02d5dd186eea00443d94345 Mon Sep 17 00:00:00 2001 From: Ruby Tunaley Date: Thu, 23 Sep 2021 21:32:15 +1000 Subject: [PATCH 02/12] Readonly types - Bugfixes. --- src/generator.ts | 2 +- src/parser.ts | 2 +- src/typesOfSchema.ts | 6 +- ...ropertiesEmptyExceptForCustomProperties.ts | 12 ++++ ...readonlyArray.explicitFalse.optionFalse.ts | 12 ++++ .../readonlyArray.explicitFalse.optionTrue.ts | 12 ++++ ...lyArray.explicitFalse.optionUnspecified.ts | 8 +++ test/e2e/readonlyArray.explicitFalse.ts | 7 --- test/e2e/readonlyArray.optionFalse.ts | 13 +++-- test/e2e/readonlyArray.optionTrue.ts | 13 +++-- test/e2e/readonlyArray.optionUnspecified.ts | 11 ++-- ...esEmptySchema.explicitFalse.optionFalse.ts | 52 ++++++++--------- ...iesEmptySchema.explicitFalse.optionTrue.ts | 52 ++++++++--------- ...ySchema.explicitFalse.optionUnspecified.ts | 50 ++++++++--------- ...tionalPropertiesEmptySchema.optionFalse.ts | 48 ++++++++-------- ...itionalPropertiesEmptySchema.optionTrue.ts | 48 ++++++++-------- ...PropertiesEmptySchema.optionUnspecified.ts | 46 +++++++-------- ...ertiesImplied.explicitFalse.optionFalse.ts | 30 ---------- ...pertiesImplied.explicitFalse.optionTrue.ts | 30 ---------- ...Implied.explicitFalse.optionUnspecified.ts | 26 --------- ...additionalPropertiesImplied.optionFalse.ts | 28 ---------- ....additionalPropertiesImplied.optionTrue.ts | 28 ---------- ...onalPropertiesImplied.optionUnspecified.ts | 24 -------- ...ertiesRoFalse.explicitFalse.optionFalse.ts | 56 +++++++++---------- ...pertiesRoFalse.explicitFalse.optionTrue.ts | 56 +++++++++---------- ...RoFalse.explicitFalse.optionUnspecified.ts | 54 +++++++++--------- ...pertiesRoTrue.explicitFalse.optionFalse.ts | 54 +++++++++--------- ...opertiesRoTrue.explicitFalse.optionTrue.ts | 54 +++++++++--------- ...sRoTrue.explicitFalse.optionUnspecified.ts | 52 ++++++++--------- ....additionalPropertiesRoTrue.optionFalse.ts | 50 +++++++++-------- ...e.additionalPropertiesRoTrue.optionTrue.ts | 50 +++++++++-------- ...ionalPropertiesRoTrue.optionUnspecified.ts | 48 ++++++++-------- ...ropertiesTrue.explicitFalse.optionFalse.ts | 31 ++++++++++ ...PropertiesTrue.explicitFalse.optionTrue.ts | 31 ++++++++++ ...iesTrue.explicitFalse.optionUnspecified.ts | 27 +++++++++ ...ce.additionalPropertiesTrue.optionFalse.ts | 29 ++++++++++ ...ace.additionalPropertiesTrue.optionTrue.ts | 29 ++++++++++ ...itionalPropertiesTrue.optionUnspecified.ts | 25 +++++++++ ...onlyInterface.explicitFalse.optionFalse.ts | 52 ++++++++--------- ...donlyInterface.explicitFalse.optionTrue.ts | 52 ++++++++--------- ...terface.explicitFalse.optionUnspecified.ts | 50 ++++++++--------- test/e2e/readonlyInterface.optionFalse.ts | 46 +++++++-------- test/e2e/readonlyInterface.optionTrue.ts | 46 +++++++-------- .../readonlyInterface.optionUnspecified.ts | 44 +++++++-------- ...iesEmptySchema.explicitTrue.optionFalse.ts | 52 ++++++++--------- ...tiesEmptySchema.explicitTrue.optionTrue.ts | 52 ++++++++--------- ...tySchema.explicitTrue.optionUnspecified.ts | 50 ++++++++--------- ...tionalPropertiesEmptySchema.optionFalse.ts | 48 ++++++++-------- ...itionalPropertiesEmptySchema.optionTrue.ts | 48 ++++++++-------- ...PropertiesEmptySchema.optionUnspecified.ts | 46 +++++++-------- ...pertiesImplied.explicitTrue.optionFalse.ts | 30 ---------- ...opertiesImplied.explicitTrue.optionTrue.ts | 30 ---------- ...sImplied.explicitTrue.optionUnspecified.ts | 26 --------- ...additionalPropertiesImplied.optionFalse.ts | 28 ---------- ....additionalPropertiesImplied.optionTrue.ts | 28 ---------- ...onalPropertiesImplied.optionUnspecified.ts | 24 -------- ...pertiesRoFalse.explicitTrue.optionFalse.ts | 56 +++++++++---------- ...opertiesRoFalse.explicitTrue.optionTrue.ts | 56 +++++++++---------- ...sRoFalse.explicitTrue.optionUnspecified.ts | 54 +++++++++--------- ...additionalPropertiesRoFalse.optionFalse.ts | 52 ++++++++--------- ....additionalPropertiesRoFalse.optionTrue.ts | 52 ++++++++--------- ...onalPropertiesRoFalse.optionUnspecified.ts | 50 ++++++++--------- ...opertiesRoTrue.explicitTrue.optionFalse.ts | 56 +++++++++---------- ...ropertiesRoTrue.explicitTrue.optionTrue.ts | 56 +++++++++---------- ...esRoTrue.explicitTrue.optionUnspecified.ts | 54 +++++++++--------- ...PropertiesTrue.explicitTrue.optionFalse.ts | 31 ++++++++++ ...lPropertiesTrue.explicitTrue.optionTrue.ts | 31 ++++++++++ ...tiesTrue.explicitTrue.optionUnspecified.ts | 27 +++++++++ ...ct.additionalPropertiesTrue.optionFalse.ts | 29 ++++++++++ ...ect.additionalPropertiesTrue.optionTrue.ts | 29 ++++++++++ ...itionalPropertiesTrue.optionUnspecified.ts | 25 +++++++++ ...readonlyObject.explicitTrue.optionFalse.ts | 52 ++++++++--------- ....readonlyObject.explicitTrue.optionTrue.ts | 52 ++++++++--------- ...lyObject.explicitTrue.optionUnspecified.ts | 50 ++++++++--------- ...nlyInterface.readonlyObject.optionFalse.ts | 48 ++++++++-------- ...onlyInterface.readonlyObject.optionTrue.ts | 48 ++++++++-------- ...erface.readonlyObject.optionUnspecified.ts | 46 +++++++-------- ...readonlyTuple.explicitFalse.optionFalse.ts | 12 ++++ .../readonlyTuple.explicitFalse.optionTrue.ts | 12 ++++ ...lyTuple.explicitFalse.optionUnspecified.ts | 8 +++ test/e2e/readonlyTuple.explicitFalse.ts | 8 --- test/e2e/readonlyTuple.optionFalse.ts | 14 ++--- test/e2e/readonlyTuple.optionTrue.ts | 14 ++--- test/e2e/readonlyTuple.optionUnspecified.ts | 8 +++ 84 files changed, 1544 insertions(+), 1444 deletions(-) create mode 100644 test/e2e/additionalPropertiesEmptyExceptForCustomProperties.ts create mode 100644 test/e2e/readonlyArray.explicitFalse.optionFalse.ts create mode 100644 test/e2e/readonlyArray.explicitFalse.optionTrue.ts create mode 100644 test/e2e/readonlyArray.explicitFalse.optionUnspecified.ts delete mode 100644 test/e2e/readonlyArray.explicitFalse.ts delete mode 100644 test/e2e/readonlyInterface.additionalPropertiesImplied.explicitFalse.optionFalse.ts delete mode 100644 test/e2e/readonlyInterface.additionalPropertiesImplied.explicitFalse.optionTrue.ts delete mode 100644 test/e2e/readonlyInterface.additionalPropertiesImplied.explicitFalse.optionUnspecified.ts delete mode 100644 test/e2e/readonlyInterface.additionalPropertiesImplied.optionFalse.ts delete mode 100644 test/e2e/readonlyInterface.additionalPropertiesImplied.optionTrue.ts delete mode 100644 test/e2e/readonlyInterface.additionalPropertiesImplied.optionUnspecified.ts create mode 100644 test/e2e/readonlyInterface.additionalPropertiesTrue.explicitFalse.optionFalse.ts create mode 100644 test/e2e/readonlyInterface.additionalPropertiesTrue.explicitFalse.optionTrue.ts create mode 100644 test/e2e/readonlyInterface.additionalPropertiesTrue.explicitFalse.optionUnspecified.ts create mode 100644 test/e2e/readonlyInterface.additionalPropertiesTrue.optionFalse.ts create mode 100644 test/e2e/readonlyInterface.additionalPropertiesTrue.optionTrue.ts create mode 100644 test/e2e/readonlyInterface.additionalPropertiesTrue.optionUnspecified.ts delete mode 100644 test/e2e/readonlyInterface.readonlyObject.additionalPropertiesImplied.explicitTrue.optionFalse.ts delete mode 100644 test/e2e/readonlyInterface.readonlyObject.additionalPropertiesImplied.explicitTrue.optionTrue.ts delete mode 100644 test/e2e/readonlyInterface.readonlyObject.additionalPropertiesImplied.explicitTrue.optionUnspecified.ts delete mode 100644 test/e2e/readonlyInterface.readonlyObject.additionalPropertiesImplied.optionFalse.ts delete mode 100644 test/e2e/readonlyInterface.readonlyObject.additionalPropertiesImplied.optionTrue.ts delete mode 100644 test/e2e/readonlyInterface.readonlyObject.additionalPropertiesImplied.optionUnspecified.ts create mode 100644 test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.optionFalse.ts create mode 100644 test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.optionTrue.ts create mode 100644 test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.optionUnspecified.ts create mode 100644 test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.optionFalse.ts create mode 100644 test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.optionTrue.ts create mode 100644 test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.optionUnspecified.ts create mode 100644 test/e2e/readonlyTuple.explicitFalse.optionFalse.ts create mode 100644 test/e2e/readonlyTuple.explicitFalse.optionTrue.ts create mode 100644 test/e2e/readonlyTuple.explicitFalse.optionUnspecified.ts delete mode 100644 test/e2e/readonlyTuple.explicitFalse.ts create mode 100644 test/e2e/readonlyTuple.optionUnspecified.ts diff --git a/src/generator.ts b/src/generator.ts index ddf14be7..552aa696 100644 --- a/src/generator.ts +++ b/src/generator.ts @@ -180,7 +180,7 @@ function generateRawType(ast: AST, options: Options): string { return (() => { let type = generateType(ast.params, options) if (ast.isReadonly && !options.readonlyKeyword) { - type = 'Readonly<'+ type + '>' + type = 'ReadonlyArray<'+ type + '>' } else { type = type.endsWith('"') ? '(' + type + ')[]' : type + '[]' if (ast.isReadonly) { diff --git a/src/parser.ts b/src/parser.ts index e9238c82..dd564c2b 100644 --- a/src/parser.ts +++ b/src/parser.ts @@ -436,7 +436,7 @@ via the \`definition\` "${key}".` isRequired: true, isUnreachableDefinition: false, // Explicit additionalProperties readonly state supercedes generic readonly state - isReadonly: schema.tsReadonly ?? schema.tsReadonly, + isReadonly: schema.additionalProperties.tsReadonly ?? schema.tsReadonly, keyName: '[k: string]' }) } diff --git a/src/typesOfSchema.ts b/src/typesOfSchema.ts index 130c5665..dd34bfb8 100644 --- a/src/typesOfSchema.ts +++ b/src/typesOfSchema.ts @@ -31,12 +31,16 @@ export function typesOfSchema(schema: JSONSchema): readonly [SchemaType, ...Sche return matchedTypes as [SchemaType, ...SchemaType[]] } +function nonCustonKeys (obj: JSONSchema): string[] { + return Object.keys(obj).filter(key => key !== 'tsEnumNames' && key !== 'tsType' && key !== 'tsReadonly') +} + const matchers: Record boolean> = { ALL_OF(schema) { return 'allOf' in schema }, ANY(schema) { - if (Object.keys(schema).length === 0) { + if (nonCustonKeys(schema).length === 0) { // The empty schema {} validates any value // @see https://json-schema.org/draft-07/json-schema-core.html#rfc.section.4.3.1 return true diff --git a/test/e2e/additionalPropertiesEmptyExceptForCustomProperties.ts b/test/e2e/additionalPropertiesEmptyExceptForCustomProperties.ts new file mode 100644 index 00000000..49d64672 --- /dev/null +++ b/test/e2e/additionalPropertiesEmptyExceptForCustomProperties.ts @@ -0,0 +1,12 @@ +export const input = { + title: 'AdditionalProperties', + type: 'object', + properties: { + foo: { + type: 'string' + } + }, + additionalProperties: { + tsEnumNames: [] + } +} diff --git a/test/e2e/readonlyArray.explicitFalse.optionFalse.ts b/test/e2e/readonlyArray.explicitFalse.optionFalse.ts new file mode 100644 index 00000000..08bea4cc --- /dev/null +++ b/test/e2e/readonlyArray.explicitFalse.optionFalse.ts @@ -0,0 +1,12 @@ +export const input = { + title: 'MyArray', + type: 'array', + items: { + type: 'string' + }, + tsReadonly: false +} + +export const options = { + readonlyKeyword: false +} diff --git a/test/e2e/readonlyArray.explicitFalse.optionTrue.ts b/test/e2e/readonlyArray.explicitFalse.optionTrue.ts new file mode 100644 index 00000000..2b884e24 --- /dev/null +++ b/test/e2e/readonlyArray.explicitFalse.optionTrue.ts @@ -0,0 +1,12 @@ +export const input = { + title: 'MyArray', + type: 'array', + items: { + type: 'string' + }, + tsReadonly: false +} + +export const options = { + readonlyKeyword: true +} diff --git a/test/e2e/readonlyArray.explicitFalse.optionUnspecified.ts b/test/e2e/readonlyArray.explicitFalse.optionUnspecified.ts new file mode 100644 index 00000000..1e310072 --- /dev/null +++ b/test/e2e/readonlyArray.explicitFalse.optionUnspecified.ts @@ -0,0 +1,8 @@ +export const input = { + title: 'MyArray', + type: 'array', + items: { + type: 'string' + }, + tsReadonly: false +} diff --git a/test/e2e/readonlyArray.explicitFalse.ts b/test/e2e/readonlyArray.explicitFalse.ts deleted file mode 100644 index b1e08ff1..00000000 --- a/test/e2e/readonlyArray.explicitFalse.ts +++ /dev/null @@ -1,7 +0,0 @@ -export const input = { - type: 'array', - items: { - type: 'string' - }, - tsReadonly: false -} diff --git a/test/e2e/readonlyArray.optionFalse.ts b/test/e2e/readonlyArray.optionFalse.ts index 48008d2c..934cc34b 100644 --- a/test/e2e/readonlyArray.optionFalse.ts +++ b/test/e2e/readonlyArray.optionFalse.ts @@ -1,11 +1,12 @@ export const input = { - type: 'array', - items: { - type: 'string' - }, - tsReadonly: true + title: 'MyArray', + type: 'array', + items: { + type: 'string' + }, + tsReadonly: true } export const options = { - readonlyKeyword: false + readonlyKeyword: false } diff --git a/test/e2e/readonlyArray.optionTrue.ts b/test/e2e/readonlyArray.optionTrue.ts index 05eeec67..4e75a8bf 100644 --- a/test/e2e/readonlyArray.optionTrue.ts +++ b/test/e2e/readonlyArray.optionTrue.ts @@ -1,11 +1,12 @@ export const input = { - type: 'array', - items: { - type: 'string' - }, - tsReadonly: true + title: 'MyArray', + type: 'array', + items: { + type: 'string' + }, + tsReadonly: true } export const options = { - readonlyKeyword: true + readonlyKeyword: true } diff --git a/test/e2e/readonlyArray.optionUnspecified.ts b/test/e2e/readonlyArray.optionUnspecified.ts index ebd45e87..014bd6d9 100644 --- a/test/e2e/readonlyArray.optionUnspecified.ts +++ b/test/e2e/readonlyArray.optionUnspecified.ts @@ -1,7 +1,8 @@ export const input = { - type: 'array', - items: { - type: 'string' - }, - tsReadonly: true + title: 'MyArray', + type: 'array', + items: { + type: 'string' + }, + tsReadonly: true } diff --git a/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.optionFalse.ts b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.optionFalse.ts index 1bb3df1d..e869d262 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.optionFalse.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.optionFalse.ts @@ -1,31 +1,31 @@ export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string', - tsReadonly: true - }, - b: { - type: 'string', - tsReadonly: false - }, - c: { - type: 'string', - tsReadonly: true - }, - d: { - type: 'string', - tsReadonly: false - } - }, - additionalProperties: {}, - tsReadonly: false + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: {}, + tsReadonly: false } export const options = { - readonlyKeyword: false + readonlyKeyword: false } diff --git a/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.optionTrue.ts b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.optionTrue.ts index 3d9bb467..326f5659 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.optionTrue.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.optionTrue.ts @@ -1,31 +1,31 @@ export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string', - tsReadonly: true - }, - b: { - type: 'string', - tsReadonly: false - }, - c: { - type: 'string', - tsReadonly: true - }, - d: { - type: 'string', - tsReadonly: false - } - }, - additionalProperties: {}, - tsReadonly: false + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: {}, + tsReadonly: false } export const options = { - readonlyKeyword: true + readonlyKeyword: true } diff --git a/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.optionUnspecified.ts b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.optionUnspecified.ts index 5c16bb16..bf71b4e7 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.optionUnspecified.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.optionUnspecified.ts @@ -1,27 +1,27 @@ export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string', - tsReadonly: true - }, - b: { - type: 'string', - tsReadonly: false - }, - c: { - type: 'string', - tsReadonly: true - }, - d: { - type: 'string', - tsReadonly: false - } - }, - additionalProperties: {}, - tsReadonly: false + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: {}, + tsReadonly: false } diff --git a/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.optionFalse.ts b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.optionFalse.ts index 6efcb414..350f20e0 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.optionFalse.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.optionFalse.ts @@ -1,29 +1,29 @@ export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string', - tsReadonly: true - }, - b: { - type: 'string' - }, - c: { - type: 'string', - tsReadonly: true - }, - d: { - type: 'string' - } - }, - additionalProperties: {}, - tsReadonly: false + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string' + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string' + } + }, + additionalProperties: {}, + tsReadonly: false } export const options = { - readonlyKeyword: false + readonlyKeyword: false } diff --git a/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.optionTrue.ts b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.optionTrue.ts index f657595d..b51687a9 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.optionTrue.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.optionTrue.ts @@ -1,29 +1,29 @@ export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string', - tsReadonly: true - }, - b: { - type: 'string' - }, - c: { - type: 'string', - tsReadonly: true - }, - d: { - type: 'string' - } - }, - additionalProperties: {}, - tsReadonly: false + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string' + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string' + } + }, + additionalProperties: {}, + tsReadonly: false } export const options = { - readonlyKeyword: true + readonlyKeyword: true } diff --git a/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.optionUnspecified.ts b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.optionUnspecified.ts index 0701a47c..df0e8ef5 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.optionUnspecified.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.optionUnspecified.ts @@ -1,25 +1,25 @@ export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string', - tsReadonly: true - }, - b: { - type: 'string' - }, - c: { - type: 'string', - tsReadonly: true - }, - d: { - type: 'string' - } - }, - additionalProperties: {}, - tsReadonly: false + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string' + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string' + } + }, + additionalProperties: {}, + tsReadonly: false } diff --git a/test/e2e/readonlyInterface.additionalPropertiesImplied.explicitFalse.optionFalse.ts b/test/e2e/readonlyInterface.additionalPropertiesImplied.explicitFalse.optionFalse.ts deleted file mode 100644 index c02c73e7..00000000 --- a/test/e2e/readonlyInterface.additionalPropertiesImplied.explicitFalse.optionFalse.ts +++ /dev/null @@ -1,30 +0,0 @@ -export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string', - tsReadonly: true - }, - b: { - type: 'string', - tsReadonly: false - }, - c: { - type: 'string', - tsReadonly: true - }, - d: { - type: 'string', - tsReadonly: false - } - }, - tsReadonly: false -} - -export const options = { - readonlyKeyword: false -} diff --git a/test/e2e/readonlyInterface.additionalPropertiesImplied.explicitFalse.optionTrue.ts b/test/e2e/readonlyInterface.additionalPropertiesImplied.explicitFalse.optionTrue.ts deleted file mode 100644 index 2b55ad0b..00000000 --- a/test/e2e/readonlyInterface.additionalPropertiesImplied.explicitFalse.optionTrue.ts +++ /dev/null @@ -1,30 +0,0 @@ -export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string', - tsReadonly: true - }, - b: { - type: 'string', - tsReadonly: false - }, - c: { - type: 'string', - tsReadonly: true - }, - d: { - type: 'string', - tsReadonly: false - } - }, - tsReadonly: false -} - -export const options = { - readonlyKeyword: true -} diff --git a/test/e2e/readonlyInterface.additionalPropertiesImplied.explicitFalse.optionUnspecified.ts b/test/e2e/readonlyInterface.additionalPropertiesImplied.explicitFalse.optionUnspecified.ts deleted file mode 100644 index 50056510..00000000 --- a/test/e2e/readonlyInterface.additionalPropertiesImplied.explicitFalse.optionUnspecified.ts +++ /dev/null @@ -1,26 +0,0 @@ -export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string', - tsReadonly: true - }, - b: { - type: 'string', - tsReadonly: false - }, - c: { - type: 'string', - tsReadonly: true - }, - d: { - type: 'string', - tsReadonly: false - } - }, - tsReadonly: false -} diff --git a/test/e2e/readonlyInterface.additionalPropertiesImplied.optionFalse.ts b/test/e2e/readonlyInterface.additionalPropertiesImplied.optionFalse.ts deleted file mode 100644 index 73fdfe12..00000000 --- a/test/e2e/readonlyInterface.additionalPropertiesImplied.optionFalse.ts +++ /dev/null @@ -1,28 +0,0 @@ -export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string', - tsReadonly: true - }, - b: { - type: 'string' - }, - c: { - type: 'string', - tsReadonly: true - }, - d: { - type: 'string' - } - }, - tsReadonly: false -} - -export const options = { - readonlyKeyword: false -} diff --git a/test/e2e/readonlyInterface.additionalPropertiesImplied.optionTrue.ts b/test/e2e/readonlyInterface.additionalPropertiesImplied.optionTrue.ts deleted file mode 100644 index 2bd9eec1..00000000 --- a/test/e2e/readonlyInterface.additionalPropertiesImplied.optionTrue.ts +++ /dev/null @@ -1,28 +0,0 @@ -export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string', - tsReadonly: true - }, - b: { - type: 'string' - }, - c: { - type: 'string', - tsReadonly: true - }, - d: { - type: 'string' - } - }, - tsReadonly: false -} - -export const options = { - readonlyKeyword: true -} diff --git a/test/e2e/readonlyInterface.additionalPropertiesImplied.optionUnspecified.ts b/test/e2e/readonlyInterface.additionalPropertiesImplied.optionUnspecified.ts deleted file mode 100644 index b1ffebe8..00000000 --- a/test/e2e/readonlyInterface.additionalPropertiesImplied.optionUnspecified.ts +++ /dev/null @@ -1,24 +0,0 @@ -export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string', - tsReadonly: true - }, - b: { - type: 'string' - }, - c: { - type: 'string', - tsReadonly: true - }, - d: { - type: 'string' - } - }, - tsReadonly: false -} diff --git a/test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.optionFalse.ts b/test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.optionFalse.ts index f45602bf..49197695 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.optionFalse.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.optionFalse.ts @@ -1,33 +1,33 @@ export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string', - tsReadonly: true - }, - b: { - type: 'string', - tsReadonly: false - }, - c: { - type: 'string', - tsReadonly: true - }, - d: { - type: 'string', - tsReadonly: false - } - }, - additionalProperties: { - tsReadonly: false - }, - tsReadonly: false + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: { + tsReadonly: false + }, + tsReadonly: false } export const options = { - readonlyKeyword: false + readonlyKeyword: false } diff --git a/test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.optionTrue.ts b/test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.optionTrue.ts index f4f5691e..6f3a7e39 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.optionTrue.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.optionTrue.ts @@ -1,33 +1,33 @@ export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string', - tsReadonly: true - }, - b: { - type: 'string', - tsReadonly: false - }, - c: { - type: 'string', - tsReadonly: true - }, - d: { - type: 'string', - tsReadonly: false - } - }, - additionalProperties: { - tsReadonly: false - }, - tsReadonly: false + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: { + tsReadonly: false + }, + tsReadonly: false } export const options = { - readonlyKeyword: true + readonlyKeyword: true } diff --git a/test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.optionUnspecified.ts b/test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.optionUnspecified.ts index 61fd8758..74d16f53 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.optionUnspecified.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.optionUnspecified.ts @@ -1,29 +1,29 @@ export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string', - tsReadonly: true - }, - b: { - type: 'string', - tsReadonly: false - }, - c: { - type: 'string', - tsReadonly: true - }, - d: { - type: 'string', - tsReadonly: false - } - }, - additionalProperties: { - tsReadonly: false - }, - tsReadonly: false + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: { + tsReadonly: false + }, + tsReadonly: false } diff --git a/test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.optionFalse.ts b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.optionFalse.ts index 743d6d3a..304455d7 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.optionFalse.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.optionFalse.ts @@ -1,31 +1,33 @@ export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string', - tsReadonly: true - }, - b: { - type: 'string', - tsReadonly: false - }, - c: { - type: 'string', - tsReadonly: true - }, - d: { - type: 'string', - tsReadonly: false - } - }, - additionalProperties: true, - tsReadonly: false + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: { + tsReadonly: true + }, + tsReadonly: false } export const options = { - readonlyKeyword: false + readonlyKeyword: false } diff --git a/test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.optionTrue.ts b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.optionTrue.ts index 1884ed92..6c1b6fd4 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.optionTrue.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.optionTrue.ts @@ -1,31 +1,33 @@ export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string', - tsReadonly: true - }, - b: { - type: 'string', - tsReadonly: false - }, - c: { - type: 'string', - tsReadonly: true - }, - d: { - type: 'string', - tsReadonly: false - } - }, - additionalProperties: true, - tsReadonly: false + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: { + tsReadonly: true + }, + tsReadonly: false } export const options = { - readonlyKeyword: true + readonlyKeyword: true } diff --git a/test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.optionUnspecified.ts b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.optionUnspecified.ts index bebfa6a3..dcc9e292 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.optionUnspecified.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.optionUnspecified.ts @@ -1,27 +1,29 @@ export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string', - tsReadonly: true - }, - b: { - type: 'string', - tsReadonly: false - }, - c: { - type: 'string', - tsReadonly: true - }, - d: { - type: 'string', - tsReadonly: false - } - }, - additionalProperties: true, - tsReadonly: false + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: { + tsReadonly: true + }, + tsReadonly: false } diff --git a/test/e2e/readonlyInterface.additionalPropertiesRoTrue.optionFalse.ts b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.optionFalse.ts index 21eba2de..8c5dd006 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesRoTrue.optionFalse.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.optionFalse.ts @@ -1,29 +1,31 @@ export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string', - tsReadonly: true - }, - b: { - type: 'string' - }, - c: { - type: 'string', - tsReadonly: true - }, - d: { - type: 'string' - } - }, - additionalProperties: true, - tsReadonly: false + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string' + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string' + } + }, + additionalProperties: { + tsReadonly: true + }, + tsReadonly: false } export const options = { - readonlyKeyword: false + readonlyKeyword: false } diff --git a/test/e2e/readonlyInterface.additionalPropertiesRoTrue.optionTrue.ts b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.optionTrue.ts index 251975a7..75bd939e 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesRoTrue.optionTrue.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.optionTrue.ts @@ -1,29 +1,31 @@ export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string', - tsReadonly: true - }, - b: { - type: 'string' - }, - c: { - type: 'string', - tsReadonly: true - }, - d: { - type: 'string' - } - }, - additionalProperties: true, - tsReadonly: false + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string' + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string' + } + }, + additionalProperties: { + tsReadonly: true + }, + tsReadonly: false } export const options = { - readonlyKeyword: true + readonlyKeyword: true } diff --git a/test/e2e/readonlyInterface.additionalPropertiesRoTrue.optionUnspecified.ts b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.optionUnspecified.ts index 5ee8c206..6e5a08b4 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesRoTrue.optionUnspecified.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.optionUnspecified.ts @@ -1,25 +1,27 @@ export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string', - tsReadonly: true - }, - b: { - type: 'string' - }, - c: { - type: 'string', - tsReadonly: true - }, - d: { - type: 'string' - } - }, - additionalProperties: true, - tsReadonly: false + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string' + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string' + } + }, + additionalProperties: { + tsReadonly: true + }, + tsReadonly: false } diff --git a/test/e2e/readonlyInterface.additionalPropertiesTrue.explicitFalse.optionFalse.ts b/test/e2e/readonlyInterface.additionalPropertiesTrue.explicitFalse.optionFalse.ts new file mode 100644 index 00000000..65621618 --- /dev/null +++ b/test/e2e/readonlyInterface.additionalPropertiesTrue.explicitFalse.optionFalse.ts @@ -0,0 +1,31 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: true, + tsReadonly: false +} + +export const options = { + readonlyKeyword: false +} diff --git a/test/e2e/readonlyInterface.additionalPropertiesTrue.explicitFalse.optionTrue.ts b/test/e2e/readonlyInterface.additionalPropertiesTrue.explicitFalse.optionTrue.ts new file mode 100644 index 00000000..320c22da --- /dev/null +++ b/test/e2e/readonlyInterface.additionalPropertiesTrue.explicitFalse.optionTrue.ts @@ -0,0 +1,31 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: true, + tsReadonly: false +} + +export const options = { + readonlyKeyword: true +} diff --git a/test/e2e/readonlyInterface.additionalPropertiesTrue.explicitFalse.optionUnspecified.ts b/test/e2e/readonlyInterface.additionalPropertiesTrue.explicitFalse.optionUnspecified.ts new file mode 100644 index 00000000..60206272 --- /dev/null +++ b/test/e2e/readonlyInterface.additionalPropertiesTrue.explicitFalse.optionUnspecified.ts @@ -0,0 +1,27 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: true, + tsReadonly: false +} diff --git a/test/e2e/readonlyInterface.additionalPropertiesTrue.optionFalse.ts b/test/e2e/readonlyInterface.additionalPropertiesTrue.optionFalse.ts new file mode 100644 index 00000000..af00a3f8 --- /dev/null +++ b/test/e2e/readonlyInterface.additionalPropertiesTrue.optionFalse.ts @@ -0,0 +1,29 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string' + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string' + } + }, + additionalProperties: true, + tsReadonly: false +} + +export const options = { + readonlyKeyword: false +} diff --git a/test/e2e/readonlyInterface.additionalPropertiesTrue.optionTrue.ts b/test/e2e/readonlyInterface.additionalPropertiesTrue.optionTrue.ts new file mode 100644 index 00000000..ee13d3b4 --- /dev/null +++ b/test/e2e/readonlyInterface.additionalPropertiesTrue.optionTrue.ts @@ -0,0 +1,29 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string' + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string' + } + }, + additionalProperties: true, + tsReadonly: false +} + +export const options = { + readonlyKeyword: true +} diff --git a/test/e2e/readonlyInterface.additionalPropertiesTrue.optionUnspecified.ts b/test/e2e/readonlyInterface.additionalPropertiesTrue.optionUnspecified.ts new file mode 100644 index 00000000..100738b7 --- /dev/null +++ b/test/e2e/readonlyInterface.additionalPropertiesTrue.optionUnspecified.ts @@ -0,0 +1,25 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string' + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string' + } + }, + additionalProperties: true, + tsReadonly: false +} diff --git a/test/e2e/readonlyInterface.explicitFalse.optionFalse.ts b/test/e2e/readonlyInterface.explicitFalse.optionFalse.ts index a9f45fae..84aaefe3 100644 --- a/test/e2e/readonlyInterface.explicitFalse.optionFalse.ts +++ b/test/e2e/readonlyInterface.explicitFalse.optionFalse.ts @@ -1,31 +1,31 @@ export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string', - tsReadonly: true - }, - b: { - type: 'string', - tsReadonly: false - }, - c: { - type: 'string', - tsReadonly: true - }, - d: { - type: 'string', - tsReadonly: false - } - }, - additionalProperties: false, - tsReadonly: false + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: false, + tsReadonly: false } export const options = { - readonlyKeyword: false + readonlyKeyword: false } diff --git a/test/e2e/readonlyInterface.explicitFalse.optionTrue.ts b/test/e2e/readonlyInterface.explicitFalse.optionTrue.ts index c037d36a..62a0238c 100644 --- a/test/e2e/readonlyInterface.explicitFalse.optionTrue.ts +++ b/test/e2e/readonlyInterface.explicitFalse.optionTrue.ts @@ -1,31 +1,31 @@ export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string', - tsReadonly: true - }, - b: { - type: 'string', - tsReadonly: false - }, - c: { - type: 'string', - tsReadonly: true - }, - d: { - type: 'string', - tsReadonly: false - } - }, - additionalProperties: false, - tsReadonly: false + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: false, + tsReadonly: false } export const options = { - readonlyKeyword: true + readonlyKeyword: true } diff --git a/test/e2e/readonlyInterface.explicitFalse.optionUnspecified.ts b/test/e2e/readonlyInterface.explicitFalse.optionUnspecified.ts index 2fe30ea3..ab708297 100644 --- a/test/e2e/readonlyInterface.explicitFalse.optionUnspecified.ts +++ b/test/e2e/readonlyInterface.explicitFalse.optionUnspecified.ts @@ -1,27 +1,27 @@ export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string', - tsReadonly: true - }, - b: { - type: 'string', - tsReadonly: false - }, - c: { - type: 'string', - tsReadonly: true - }, - d: { - type: 'string', - tsReadonly: false - } - }, - additionalProperties: false, - tsReadonly: false + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: false, + tsReadonly: false } diff --git a/test/e2e/readonlyInterface.optionFalse.ts b/test/e2e/readonlyInterface.optionFalse.ts index 4e695cc2..b8adbf6e 100644 --- a/test/e2e/readonlyInterface.optionFalse.ts +++ b/test/e2e/readonlyInterface.optionFalse.ts @@ -1,28 +1,28 @@ export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string', - tsReadonly: true - }, - b: { - type: 'string' - }, - c: { - type: 'string', - tsReadonly: true - }, - d: { - type: 'string' - } - }, - additionalProperties: false + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string' + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string' + } + }, + additionalProperties: false } export const options = { - readonlyKeyword: false + readonlyKeyword: false } diff --git a/test/e2e/readonlyInterface.optionTrue.ts b/test/e2e/readonlyInterface.optionTrue.ts index 9eefd083..6866817f 100644 --- a/test/e2e/readonlyInterface.optionTrue.ts +++ b/test/e2e/readonlyInterface.optionTrue.ts @@ -1,28 +1,28 @@ export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string', - tsReadonly: true - }, - b: { - type: 'string' - }, - c: { - type: 'string', - tsReadonly: true - }, - d: { - type: 'string' - } - }, - additionalProperties: false + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string' + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string' + } + }, + additionalProperties: false } export const options = { - readonlyKeyword: true + readonlyKeyword: true } diff --git a/test/e2e/readonlyInterface.optionUnspecified.ts b/test/e2e/readonlyInterface.optionUnspecified.ts index fc0f8408..04cf3045 100644 --- a/test/e2e/readonlyInterface.optionUnspecified.ts +++ b/test/e2e/readonlyInterface.optionUnspecified.ts @@ -1,24 +1,24 @@ export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string', - tsReadonly: true - }, - b: { - type: 'string' - }, - c: { - type: 'string', - tsReadonly: true - }, - d: { - type: 'string' - } - }, - additionalProperties: false + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string' + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string' + } + }, + additionalProperties: false } diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionFalse.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionFalse.ts index 753e2912..8e704858 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionFalse.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionFalse.ts @@ -1,31 +1,31 @@ export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string', - tsReadonly: true - }, - b: { - type: 'string', - tsReadonly: false - }, - c: { - type: 'string', - tsReadonly: true - }, - d: { - type: 'string', - tsReadonly: false - } - }, - additionalProperties: {}, - tsReadonly: true + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: {}, + tsReadonly: true } export const options = { - readonlyKeyword: false + readonlyKeyword: false } diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionTrue.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionTrue.ts index 4dcda326..e4274d22 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionTrue.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionTrue.ts @@ -1,31 +1,31 @@ export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string', - tsReadonly: true - }, - b: { - type: 'string', - tsReadonly: false - }, - c: { - type: 'string', - tsReadonly: true - }, - d: { - type: 'string', - tsReadonly: false - } - }, - additionalProperties: {}, - tsReadonly: true + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: {}, + tsReadonly: true } export const options = { - readonlyKeyword: true + readonlyKeyword: true } diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionUnspecified.ts index 9fd5d4db..fa5af424 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionUnspecified.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionUnspecified.ts @@ -1,27 +1,27 @@ export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string', - tsReadonly: true - }, - b: { - type: 'string', - tsReadonly: false - }, - c: { - type: 'string', - tsReadonly: true - }, - d: { - type: 'string', - tsReadonly: false - } - }, - additionalProperties: {}, - tsReadonly: true + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: {}, + tsReadonly: true } diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.optionFalse.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.optionFalse.ts index 7785abce..d848861e 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.optionFalse.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.optionFalse.ts @@ -1,29 +1,29 @@ export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string' - }, - b: { - type: 'string', - tsReadonly: false - }, - c: { - type: 'string' - }, - d: { - type: 'string', - tsReadonly: false - } - }, - additionalProperties: {}, - tsReadonly: true + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string' + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string' + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: {}, + tsReadonly: true } export const options = { - readonlyKeyword: false + readonlyKeyword: false } diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.optionTrue.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.optionTrue.ts index fb95945a..daf08254 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.optionTrue.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.optionTrue.ts @@ -1,29 +1,29 @@ export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string' - }, - b: { - type: 'string', - tsReadonly: false - }, - c: { - type: 'string' - }, - d: { - type: 'string', - tsReadonly: false - } - }, - additionalProperties: {}, - tsReadonly: true + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string' + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string' + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: {}, + tsReadonly: true } export const options = { - readonlyKeyword: true + readonlyKeyword: true } diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.optionUnspecified.ts index eb23ca81..50275360 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.optionUnspecified.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.optionUnspecified.ts @@ -1,25 +1,25 @@ export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string' - }, - b: { - type: 'string', - tsReadonly: false - }, - c: { - type: 'string' - }, - d: { - type: 'string', - tsReadonly: false - } - }, - additionalProperties: {}, - tsReadonly: true + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string' + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string' + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: {}, + tsReadonly: true } diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesImplied.explicitTrue.optionFalse.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesImplied.explicitTrue.optionFalse.ts deleted file mode 100644 index 7f1c9f62..00000000 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesImplied.explicitTrue.optionFalse.ts +++ /dev/null @@ -1,30 +0,0 @@ -export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string', - tsReadonly: true - }, - b: { - type: 'string', - tsReadonly: false - }, - c: { - type: 'string', - tsReadonly: true - }, - d: { - type: 'string', - tsReadonly: false - } - }, - tsReadonly: true -} - -export const options = { - readonlyKeyword: false -} diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesImplied.explicitTrue.optionTrue.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesImplied.explicitTrue.optionTrue.ts deleted file mode 100644 index f1e39f33..00000000 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesImplied.explicitTrue.optionTrue.ts +++ /dev/null @@ -1,30 +0,0 @@ -export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string', - tsReadonly: true - }, - b: { - type: 'string', - tsReadonly: false - }, - c: { - type: 'string', - tsReadonly: true - }, - d: { - type: 'string', - tsReadonly: false - } - }, - tsReadonly: true -} - -export const options = { - readonlyKeyword: true -} diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesImplied.explicitTrue.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesImplied.explicitTrue.optionUnspecified.ts deleted file mode 100644 index 449159f3..00000000 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesImplied.explicitTrue.optionUnspecified.ts +++ /dev/null @@ -1,26 +0,0 @@ -export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string', - tsReadonly: true - }, - b: { - type: 'string', - tsReadonly: false - }, - c: { - type: 'string', - tsReadonly: true - }, - d: { - type: 'string', - tsReadonly: false - } - }, - tsReadonly: true -} diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesImplied.optionFalse.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesImplied.optionFalse.ts deleted file mode 100644 index 83473e3f..00000000 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesImplied.optionFalse.ts +++ /dev/null @@ -1,28 +0,0 @@ -export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string' - }, - b: { - type: 'string', - tsReadonly: false - }, - c: { - type: 'string' - }, - d: { - type: 'string', - tsReadonly: false - } - }, - tsReadonly: true -} - -export const options = { - readonlyKeyword: false -} diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesImplied.optionTrue.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesImplied.optionTrue.ts deleted file mode 100644 index 897d77a1..00000000 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesImplied.optionTrue.ts +++ /dev/null @@ -1,28 +0,0 @@ -export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string' - }, - b: { - type: 'string', - tsReadonly: false - }, - c: { - type: 'string' - }, - d: { - type: 'string', - tsReadonly: false - } - }, - tsReadonly: true -} - -export const options = { - readonlyKeyword: true -} diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesImplied.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesImplied.optionUnspecified.ts deleted file mode 100644 index de546a4f..00000000 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesImplied.optionUnspecified.ts +++ /dev/null @@ -1,24 +0,0 @@ -export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string' - }, - b: { - type: 'string', - tsReadonly: false - }, - c: { - type: 'string' - }, - d: { - type: 'string', - tsReadonly: false - } - }, - tsReadonly: true -} diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionFalse.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionFalse.ts index f4ac9179..37652d4f 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionFalse.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionFalse.ts @@ -1,33 +1,33 @@ export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string', - tsReadonly: true - }, - b: { - type: 'string', - tsReadonly: false - }, - c: { - type: 'string', - tsReadonly: true - }, - d: { - type: 'string', - tsReadonly: false - } - }, - additionalProperties: { - tsReadonly: false - }, - tsReadonly: true + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: { + tsReadonly: false + }, + tsReadonly: true } export const options = { - readonlyKeyword: false + readonlyKeyword: false } diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionTrue.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionTrue.ts index cb2b9619..21939f88 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionTrue.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionTrue.ts @@ -1,33 +1,33 @@ export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string', - tsReadonly: true - }, - b: { - type: 'string', - tsReadonly: false - }, - c: { - type: 'string', - tsReadonly: true - }, - d: { - type: 'string', - tsReadonly: false - } - }, - additionalProperties: { - tsReadonly: false - }, - tsReadonly: true + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: { + tsReadonly: false + }, + tsReadonly: true } export const options = { - readonlyKeyword: true + readonlyKeyword: true } diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionUnspecified.ts index 97000660..7eb3ccff 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionUnspecified.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionUnspecified.ts @@ -1,29 +1,29 @@ export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string', - tsReadonly: true - }, - b: { - type: 'string', - tsReadonly: false - }, - c: { - type: 'string', - tsReadonly: true - }, - d: { - type: 'string', - tsReadonly: false - } - }, - additionalProperties: { - tsReadonly: false - }, - tsReadonly: true + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: { + tsReadonly: false + }, + tsReadonly: true } diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.optionFalse.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.optionFalse.ts index 2a7f2f32..3fb06ac3 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.optionFalse.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.optionFalse.ts @@ -1,31 +1,31 @@ export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string' - }, - b: { - type: 'string', - tsReadonly: false - }, - c: { - type: 'string' - }, - d: { - type: 'string', - tsReadonly: false - } - }, - additionalProperties: { - tsReadonly: false - }, - tsReadonly: true + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string' + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string' + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: { + tsReadonly: false + }, + tsReadonly: true } export const options = { - readonlyKeyword: false + readonlyKeyword: false } diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.optionTrue.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.optionTrue.ts index 866e2d23..bd30d598 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.optionTrue.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.optionTrue.ts @@ -1,31 +1,31 @@ export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string' - }, - b: { - type: 'string', - tsReadonly: false - }, - c: { - type: 'string' - }, - d: { - type: 'string', - tsReadonly: false - } - }, - additionalProperties: { - tsReadonly: false - }, - tsReadonly: true + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string' + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string' + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: { + tsReadonly: false + }, + tsReadonly: true } export const options = { - readonlyKeyword: true + readonlyKeyword: true } diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.optionUnspecified.ts index 3c68cf0e..96cf012d 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.optionUnspecified.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.optionUnspecified.ts @@ -1,27 +1,27 @@ export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string' - }, - b: { - type: 'string', - tsReadonly: false - }, - c: { - type: 'string' - }, - d: { - type: 'string', - tsReadonly: false - } - }, - additionalProperties: { - tsReadonly: false - }, - tsReadonly: true + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string' + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string' + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: { + tsReadonly: false + }, + tsReadonly: true } diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionFalse.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionFalse.ts index 41cb6a64..2f374e20 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionFalse.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionFalse.ts @@ -1,33 +1,33 @@ export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string', - tsReadonly: true - }, - b: { - type: 'string', - tsReadonly: false - }, - c: { - type: 'string', - tsReadonly: true - }, - d: { - type: 'string', - tsReadonly: false - } - }, - additionalProperties: { - tsReadonly: true - }, - tsReadonly: true + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: { + tsReadonly: true + }, + tsReadonly: true } export const options = { - readonlyKeyword: false + readonlyKeyword: false } diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionTrue.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionTrue.ts index 9f81ac20..fe9bed79 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionTrue.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionTrue.ts @@ -1,33 +1,33 @@ export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string', - tsReadonly: true - }, - b: { - type: 'string', - tsReadonly: false - }, - c: { - type: 'string', - tsReadonly: true - }, - d: { - type: 'string', - tsReadonly: false - } - }, - additionalProperties: { - tsReadonly: true - }, - tsReadonly: true + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: { + tsReadonly: true + }, + tsReadonly: true } export const options = { - readonlyKeyword: true + readonlyKeyword: true } diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionUnspecified.ts index afc435ac..1fd73297 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionUnspecified.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionUnspecified.ts @@ -1,29 +1,29 @@ export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string', - tsReadonly: true - }, - b: { - type: 'string', - tsReadonly: false - }, - c: { - type: 'string', - tsReadonly: true - }, - d: { - type: 'string', - tsReadonly: false - } - }, - additionalProperties: { - tsReadonly: true - }, - tsReadonly: true + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: { + tsReadonly: true + }, + tsReadonly: true } diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.optionFalse.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.optionFalse.ts new file mode 100644 index 00000000..76b751be --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.optionFalse.ts @@ -0,0 +1,31 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: true, + tsReadonly: true +} + +export const options = { + readonlyKeyword: false +} diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.optionTrue.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.optionTrue.ts new file mode 100644 index 00000000..176363df --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.optionTrue.ts @@ -0,0 +1,31 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: true, + tsReadonly: true +} + +export const options = { + readonlyKeyword: true +} diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.optionUnspecified.ts new file mode 100644 index 00000000..867a3e1c --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.optionUnspecified.ts @@ -0,0 +1,27 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: true, + tsReadonly: true +} diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.optionFalse.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.optionFalse.ts new file mode 100644 index 00000000..524b07b0 --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.optionFalse.ts @@ -0,0 +1,29 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string' + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string' + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: true, + tsReadonly: true +} + +export const options = { + readonlyKeyword: false +} diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.optionTrue.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.optionTrue.ts new file mode 100644 index 00000000..03c57df2 --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.optionTrue.ts @@ -0,0 +1,29 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string' + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string' + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: true, + tsReadonly: true +} + +export const options = { + readonlyKeyword: true +} diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.optionUnspecified.ts new file mode 100644 index 00000000..b645ddee --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.optionUnspecified.ts @@ -0,0 +1,25 @@ +export const input = { + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string' + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string' + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: true, + tsReadonly: true +} diff --git a/test/e2e/readonlyInterface.readonlyObject.explicitTrue.optionFalse.ts b/test/e2e/readonlyInterface.readonlyObject.explicitTrue.optionFalse.ts index e2918963..0bcd76f7 100644 --- a/test/e2e/readonlyInterface.readonlyObject.explicitTrue.optionFalse.ts +++ b/test/e2e/readonlyInterface.readonlyObject.explicitTrue.optionFalse.ts @@ -1,31 +1,31 @@ export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string', - tsReadonly: true - }, - b: { - type: 'string', - tsReadonly: false - }, - c: { - type: 'string', - tsReadonly: true - }, - d: { - type: 'string', - tsReadonly: false - } - }, - additionalProperties: false, - tsReadonly: true + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: false, + tsReadonly: true } export const options = { - readonlyKeyword: false + readonlyKeyword: false } diff --git a/test/e2e/readonlyInterface.readonlyObject.explicitTrue.optionTrue.ts b/test/e2e/readonlyInterface.readonlyObject.explicitTrue.optionTrue.ts index e3d6381c..2aa10652 100644 --- a/test/e2e/readonlyInterface.readonlyObject.explicitTrue.optionTrue.ts +++ b/test/e2e/readonlyInterface.readonlyObject.explicitTrue.optionTrue.ts @@ -1,31 +1,31 @@ export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string', - tsReadonly: true - }, - b: { - type: 'string', - tsReadonly: false - }, - c: { - type: 'string', - tsReadonly: true - }, - d: { - type: 'string', - tsReadonly: false - } - }, - additionalProperties: false, - tsReadonly: true + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: false, + tsReadonly: true } export const options = { - readonlyKeyword: true + readonlyKeyword: true } diff --git a/test/e2e/readonlyInterface.readonlyObject.explicitTrue.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyObject.explicitTrue.optionUnspecified.ts index 8284467e..84d9dbb0 100644 --- a/test/e2e/readonlyInterface.readonlyObject.explicitTrue.optionUnspecified.ts +++ b/test/e2e/readonlyInterface.readonlyObject.explicitTrue.optionUnspecified.ts @@ -1,27 +1,27 @@ export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string', - tsReadonly: true - }, - b: { - type: 'string', - tsReadonly: false - }, - c: { - type: 'string', - tsReadonly: true - }, - d: { - type: 'string', - tsReadonly: false - } - }, - additionalProperties: false, - tsReadonly: true + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: false, + tsReadonly: true } diff --git a/test/e2e/readonlyInterface.readonlyObject.optionFalse.ts b/test/e2e/readonlyInterface.readonlyObject.optionFalse.ts index 500cc86c..fdb0dd69 100644 --- a/test/e2e/readonlyInterface.readonlyObject.optionFalse.ts +++ b/test/e2e/readonlyInterface.readonlyObject.optionFalse.ts @@ -1,29 +1,29 @@ export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string' - }, - b: { - type: 'string', - tsReadonly: false - }, - c: { - type: 'string' - }, - d: { - type: 'string', - tsReadonly: false - } - }, - additionalProperties: false, - tsReadonly: true + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string' + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string' + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: false, + tsReadonly: true } export const options = { - readonlyKeyword: false + readonlyKeyword: false } diff --git a/test/e2e/readonlyInterface.readonlyObject.optionTrue.ts b/test/e2e/readonlyInterface.readonlyObject.optionTrue.ts index fba1767b..5e77249f 100644 --- a/test/e2e/readonlyInterface.readonlyObject.optionTrue.ts +++ b/test/e2e/readonlyInterface.readonlyObject.optionTrue.ts @@ -1,29 +1,29 @@ export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string' - }, - b: { - type: 'string', - tsReadonly: false - }, - c: { - type: 'string' - }, - d: { - type: 'string', - tsReadonly: false - } - }, - additionalProperties: false, - tsReadonly: true + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string' + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string' + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: false, + tsReadonly: true } export const options = { - readonlyKeyword: true + readonlyKeyword: true } diff --git a/test/e2e/readonlyInterface.readonlyObject.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyObject.optionUnspecified.ts index a380c3d2..901d9ed1 100644 --- a/test/e2e/readonlyInterface.readonlyObject.optionUnspecified.ts +++ b/test/e2e/readonlyInterface.readonlyObject.optionUnspecified.ts @@ -1,25 +1,25 @@ export const input = { - type: 'object', - required: [ - 'a', - 'b' - ], - properties: { - a: { - type: 'string' - }, - b: { - type: 'string', - tsReadonly: false - }, - c: { - type: 'string' - }, - d: { - type: 'string', - tsReadonly: false - } - }, - additionalProperties: false, - tsReadonly: true + type: 'object', + required: [ + 'a', + 'b' + ], + properties: { + a: { + type: 'string' + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string' + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: false, + tsReadonly: true } diff --git a/test/e2e/readonlyTuple.explicitFalse.optionFalse.ts b/test/e2e/readonlyTuple.explicitFalse.optionFalse.ts new file mode 100644 index 00000000..1a44e1c5 --- /dev/null +++ b/test/e2e/readonlyTuple.explicitFalse.optionFalse.ts @@ -0,0 +1,12 @@ +export const input = { + type: 'array', + minItems: 1, + items: { + type: 'string' + }, + tsReadonly: false +} + +export const options = { + readonlyKeyword: false +} diff --git a/test/e2e/readonlyTuple.explicitFalse.optionTrue.ts b/test/e2e/readonlyTuple.explicitFalse.optionTrue.ts new file mode 100644 index 00000000..a14000ea --- /dev/null +++ b/test/e2e/readonlyTuple.explicitFalse.optionTrue.ts @@ -0,0 +1,12 @@ +export const input = { + type: 'array', + minItems: 1, + items: { + type: 'string' + }, + tsReadonly: false +} + +export const options = { + readonlyKeyword: true +} diff --git a/test/e2e/readonlyTuple.explicitFalse.optionUnspecified.ts b/test/e2e/readonlyTuple.explicitFalse.optionUnspecified.ts new file mode 100644 index 00000000..aa53eeb7 --- /dev/null +++ b/test/e2e/readonlyTuple.explicitFalse.optionUnspecified.ts @@ -0,0 +1,8 @@ +export const input = { + type: 'array', + minItems: 1, + items: { + type: 'string' + }, + tsReadonly: false +} diff --git a/test/e2e/readonlyTuple.explicitFalse.ts b/test/e2e/readonlyTuple.explicitFalse.ts deleted file mode 100644 index 7116f084..00000000 --- a/test/e2e/readonlyTuple.explicitFalse.ts +++ /dev/null @@ -1,8 +0,0 @@ -export const input = { - type: 'array', - minItems: 1, - items: { - type: 'string' - }, - tsReadonly: false -} diff --git a/test/e2e/readonlyTuple.optionFalse.ts b/test/e2e/readonlyTuple.optionFalse.ts index 790bbcd9..61130c90 100644 --- a/test/e2e/readonlyTuple.optionFalse.ts +++ b/test/e2e/readonlyTuple.optionFalse.ts @@ -1,12 +1,12 @@ export const input = { - type: 'array', - minItems: 1, - items: { - type: 'string' - }, - tsReadonly: true + type: 'array', + minItems: 1, + items: { + type: 'string' + }, + tsReadonly: true } export const options = { - readonlyKeyword: false + readonlyKeyword: false } diff --git a/test/e2e/readonlyTuple.optionTrue.ts b/test/e2e/readonlyTuple.optionTrue.ts index eb4004e6..8e9b77e7 100644 --- a/test/e2e/readonlyTuple.optionTrue.ts +++ b/test/e2e/readonlyTuple.optionTrue.ts @@ -1,12 +1,12 @@ export const input = { - type: 'array', - minItems: 1, - items: { - type: 'string' - }, - tsReadonly: true + type: 'array', + minItems: 1, + items: { + type: 'string' + }, + tsReadonly: true } export const options = { - readonlyKeyword: true + readonlyKeyword: true } diff --git a/test/e2e/readonlyTuple.optionUnspecified.ts b/test/e2e/readonlyTuple.optionUnspecified.ts new file mode 100644 index 00000000..8ff849e2 --- /dev/null +++ b/test/e2e/readonlyTuple.optionUnspecified.ts @@ -0,0 +1,8 @@ +export const input = { + type: 'array', + minItems: 1, + items: { + type: 'string' + }, + tsReadonly: true +} From 9a4db07f5e7f58f813e0dffc0309c558feaad10c Mon Sep 17 00:00:00 2001 From: Ruby Tunaley Date: Thu, 23 Sep 2021 21:33:26 +1000 Subject: [PATCH 03/12] Fixes to make tests pass on windows. --- src/types/JSONSchema.ts | 8 + src/utils.ts | 9 +- test/__snapshots__/test/test.ts.md | 1253 ++++++++++++++++++++++++++ test/__snapshots__/test/test.ts.snap | Bin 31153 -> 33791 bytes test/testCLI.ts | 31 +- 5 files changed, 1294 insertions(+), 7 deletions(-) diff --git a/src/types/JSONSchema.ts b/src/types/JSONSchema.ts index edaec77a..8ff56255 100644 --- a/src/types/JSONSchema.ts +++ b/src/types/JSONSchema.ts @@ -37,6 +37,14 @@ export interface JSONSchema extends JSONSchema4 { * schema extension to support readonly types */ tsReadonly?: boolean + + // NOTE: When adding a new custom property, you MUST ALSO add that custom property as an exclusion in the + // nonCustomKeys function in src/typesOfSchema.ts + // If you do not do this weird things happen with otherwise empty schemas: + // {"title": "X", "additionalProperties": {"myCustomProperty": null}} + // Outputs: interface X {[k: string]: {[k: string]: unknown}} + // Instead of the expected: interface X {[k: string]: unknown} + // (or [k: string]: any depending on options) } export const Parent = Symbol('Parent') diff --git a/src/utils.ts b/src/utils.ts index 7fbbb177..19de80c5 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -275,6 +275,13 @@ export function escapeBlockComment(schema: JSONSchema) { } } +/** + * Makes Windows paths look like POSIX paths, ignoring drive letter prefixes (if present). + */ +export function forcePosixLikePath (path: string): string { + return path.replace(/\\/gu, '/') +} + /* the following logic determines the out path by comparing the in path to the users specified out path. For example, if input directory MultiSchema looks like: @@ -291,7 +298,7 @@ export function pathTransform(outputPath: string, inputPath: string, filePath: s const filePathList = dirname(normalize(filePath)).split(sep) const filePathRel = filePathList.filter((f, i) => f !== inPathList[i]) - return join(normalize(outputPath), ...filePathRel) + return forcePosixLikePath(join(normalize(outputPath), ...filePathRel)) } /** diff --git a/test/__snapshots__/test/test.ts.md b/test/__snapshots__/test/test.ts.md index 7e03a2c8..5babd566 100644 --- a/test/__snapshots__/test/test.ts.md +++ b/test/__snapshots__/test/test.ts.md @@ -9021,3 +9021,1256 @@ Generated by [AVA](https://avajs.dev). ""␊ ]␊ }` + +## additionalPropertiesEmptyExceptForCustomProperties.js + +> Expected output to match snapshot for e2e test: additionalPropertiesEmptyExceptForCustomProperties.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface AdditionalProperties {␊ + foo?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyArray.explicitFalse.optionFalse.js + +> Expected output to match snapshot for e2e test: readonlyArray.explicitFalse.optionFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export type MyArray = string[];␊ + ` + +## readonlyArray.explicitFalse.optionTrue.js + +> Expected output to match snapshot for e2e test: readonlyArray.explicitFalse.optionTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export type MyArray = string[];␊ + ` + +## readonlyArray.explicitFalse.optionUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyArray.explicitFalse.optionUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export type MyArray = string[];␊ + ` + +## readonlyArray.optionFalse.js + +> Expected output to match snapshot for e2e test: readonlyArray.optionFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export type MyArray = ReadonlyArray;␊ + ` + +## readonlyArray.optionTrue.js + +> Expected output to match snapshot for e2e test: readonlyArray.optionTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export type MyArray = readonly string[];␊ + ` + +## readonlyArray.optionUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyArray.optionUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export type MyArray = readonly string[];␊ + ` + +## readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.optionFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.optionFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceAdditionalPropertiesEmptySchemaExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.optionTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.optionTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceAdditionalPropertiesEmptySchemaExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.optionUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.optionUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceAdditionalPropertiesEmptySchemaExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.additionalPropertiesEmptySchema.optionFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.additionalPropertiesEmptySchema.optionFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceAdditionalPropertiesEmptySchema {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.additionalPropertiesEmptySchema.optionTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.additionalPropertiesEmptySchema.optionTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceAdditionalPropertiesEmptySchema {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.additionalPropertiesEmptySchema.optionUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.additionalPropertiesEmptySchema.optionUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceAdditionalPropertiesEmptySchema {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.additionalPropertiesRoFalse.explicitFalse.optionFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.additionalPropertiesRoFalse.explicitFalse.optionFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceAdditionalPropertiesRoFalseExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.additionalPropertiesRoFalse.explicitFalse.optionTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.additionalPropertiesRoFalse.explicitFalse.optionTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceAdditionalPropertiesRoFalseExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.additionalPropertiesRoFalse.explicitFalse.optionUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.additionalPropertiesRoFalse.explicitFalse.optionUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceAdditionalPropertiesRoFalseExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.additionalPropertiesRoTrue.explicitFalse.optionFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.additionalPropertiesRoTrue.explicitFalse.optionFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceAdditionalPropertiesRoTrueExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.additionalPropertiesRoTrue.explicitFalse.optionTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.additionalPropertiesRoTrue.explicitFalse.optionTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceAdditionalPropertiesRoTrueExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.additionalPropertiesRoTrue.explicitFalse.optionUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.additionalPropertiesRoTrue.explicitFalse.optionUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceAdditionalPropertiesRoTrueExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.additionalPropertiesRoTrue.optionFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.additionalPropertiesRoTrue.optionFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceAdditionalPropertiesRoTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.additionalPropertiesRoTrue.optionTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.additionalPropertiesRoTrue.optionTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceAdditionalPropertiesRoTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.additionalPropertiesRoTrue.optionUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.additionalPropertiesRoTrue.optionUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceAdditionalPropertiesRoTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.additionalPropertiesTrue.explicitFalse.optionFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.additionalPropertiesTrue.explicitFalse.optionFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceAdditionalPropertiesTrueExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.additionalPropertiesTrue.explicitFalse.optionTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.additionalPropertiesTrue.explicitFalse.optionTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceAdditionalPropertiesTrueExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.additionalPropertiesTrue.explicitFalse.optionUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.additionalPropertiesTrue.explicitFalse.optionUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceAdditionalPropertiesTrueExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.additionalPropertiesTrue.optionFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.additionalPropertiesTrue.optionFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceAdditionalPropertiesTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.additionalPropertiesTrue.optionTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.additionalPropertiesTrue.optionTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceAdditionalPropertiesTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.additionalPropertiesTrue.optionUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.additionalPropertiesTrue.optionUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceAdditionalPropertiesTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.explicitFalse.optionFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.explicitFalse.optionFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + }␊ + ` + +## readonlyInterface.explicitFalse.optionTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.explicitFalse.optionTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + }␊ + ` + +## readonlyInterface.explicitFalse.optionUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.explicitFalse.optionUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + }␊ + ` + +## readonlyInterface.optionFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.optionFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterface {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + }␊ + ` + +## readonlyInterface.optionTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.optionTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterface {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + }␊ + ` + +## readonlyInterface.optionUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.optionUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterface {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObjectAdditionalPropertiesEmptySchemaExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObjectAdditionalPropertiesEmptySchemaExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObjectAdditionalPropertiesEmptySchemaExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.optionFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.optionFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObjectAdditionalPropertiesEmptySchema {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.optionTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.optionTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObjectAdditionalPropertiesEmptySchema {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.optionUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.optionUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObjectAdditionalPropertiesEmptySchema {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObjectAdditionalPropertiesRoFalseExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObjectAdditionalPropertiesRoFalseExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObjectAdditionalPropertiesRoFalseExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.additionalPropertiesRoFalse.optionFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.additionalPropertiesRoFalse.optionFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObjectAdditionalPropertiesRoFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.additionalPropertiesRoFalse.optionTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.additionalPropertiesRoFalse.optionTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObjectAdditionalPropertiesRoFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.additionalPropertiesRoFalse.optionUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.additionalPropertiesRoFalse.optionUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObjectAdditionalPropertiesRoFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObjectAdditionalPropertiesRoTrueExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObjectAdditionalPropertiesRoTrueExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObjectAdditionalPropertiesRoTrueExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.optionFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.optionFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObjectAdditionalPropertiesTrueExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.optionTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.optionTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObjectAdditionalPropertiesTrueExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.optionUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.optionUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObjectAdditionalPropertiesTrueExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.additionalPropertiesTrue.optionFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.additionalPropertiesTrue.optionFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObjectAdditionalPropertiesTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.additionalPropertiesTrue.optionTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.additionalPropertiesTrue.optionTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObjectAdditionalPropertiesTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.additionalPropertiesTrue.optionUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.additionalPropertiesTrue.optionUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObjectAdditionalPropertiesTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.explicitTrue.optionFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.explicitTrue.optionFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObjectExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.explicitTrue.optionTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.explicitTrue.optionTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObjectExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.explicitTrue.optionUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.explicitTrue.optionUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObjectExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.optionFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.optionFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObject {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.optionTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.optionTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObject {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.optionUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.optionUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObject {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + }␊ + ` + +## readonlyTuple.explicitFalse.optionFalse.js + +> Expected output to match snapshot for e2e test: readonlyTuple.explicitFalse.optionFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export type ReadonlyTupleExplicitFalse = [string, ...string[]];␊ + ` + +## readonlyTuple.explicitFalse.optionTrue.js + +> Expected output to match snapshot for e2e test: readonlyTuple.explicitFalse.optionTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export type ReadonlyTupleExplicitFalse = [string, ...string[]];␊ + ` + +## readonlyTuple.explicitFalse.optionUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyTuple.explicitFalse.optionUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export type ReadonlyTupleExplicitFalse = [string, ...string[]];␊ + ` + +## readonlyTuple.optionFalse.js + +> Expected output to match snapshot for e2e test: readonlyTuple.optionFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export type ReadonlyTuple = [string, ...string[]];␊ + ` + +## readonlyTuple.optionTrue.js + +> Expected output to match snapshot for e2e test: readonlyTuple.optionTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export type ReadonlyTuple = readonly [string, ...string[]];␊ + ` + +## readonlyTuple.optionUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyTuple.optionUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export type ReadonlyTuple = readonly [string, ...string[]];␊ + ` diff --git a/test/__snapshots__/test/test.ts.snap b/test/__snapshots__/test/test.ts.snap index 32b63915c59ba6779cd2abefc8669173a08f98ab..b136a52351109b87eddb566f7b3505da70f6acbd 100644 GIT binary patch literal 33791 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 literal 31153 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 diff --git a/test/testCLI.ts b/test/testCLI.ts index a31568d8..73a609e3 100644 --- a/test/testCLI.ts +++ b/test/testCLI.ts @@ -3,6 +3,7 @@ import {execSync} from 'child_process' import {readFileSync, unlinkSync, readdirSync, existsSync, lstatSync} from 'fs' import {resolve, join} from 'path' import rimraf = require('rimraf') +import { forcePosixLikePath } from '../src/utils' export function run() { test('pipe in, pipe out', t => { @@ -84,7 +85,7 @@ export function run() { }) test('files in (-i), files out (-o)', t => { - execSync("node dist/src/cli.js -i './test/resources/MultiSchema/**/*.json' -o ./test/resources/MultiSchema/out") + execSync("node dist/src/cli.js -i ./test/resources/MultiSchema/**/*.json -o ./test/resources/MultiSchema/out") readdirSync('./test/resources/MultiSchema/out').forEach(f => { const path = `./test/resources/MultiSchema/out/${f}` @@ -96,12 +97,12 @@ export function run() { }) test('files in (-i), pipe out', t => { - t.snapshot(execSync("node dist/src/cli.js -i './test/resources/MultiSchema/**/*.json'").toString()) + t.snapshot(execSync("node dist/src/cli.js -i ./test/resources/MultiSchema/**/*.json").toString()) }) test('files in (-i), files out (-o) nested dir does not exist', t => { execSync( - "node dist/src/cli.js -i './test/resources/MultiSchema/**/*.json' -o ./test/resources/MultiSchema/foo/bar/out" + "node dist/src/cli.js -i ./test/resources/MultiSchema/**/*.json -o ./test/resources/MultiSchema/foo/bar/out" ) readdirSync('./test/resources/MultiSchema/foo/bar/out').forEach(f => { const path = `./test/resources/MultiSchema/foo/bar/out/${f}` @@ -114,9 +115,10 @@ export function run() { test('files in (-i), files out (-o) matching nested dir', t => { execSync( - "node dist/src/cli.js -i './test/resources/../../test/resources/MultiSchema2/' -o ./test/resources/MultiSchema2/out" + "node dist/src/cli.js -i ./test/resources/../../test/resources/MultiSchema2/ -o ./test/resources/MultiSchema2/out" ) - getPaths('./test/resources/MultiSchema2/out').forEach(file => { + // Need to make sure file ordering is the same on Windows and Unix-like OSs + getPaths('./test/resources/MultiSchema2/out').sort(compareByCodePoint).forEach(file => { t.snapshot(file) t.snapshot(readFileSync(file, 'utf-8')) unlinkSync(file) @@ -129,8 +131,25 @@ function getPaths(path: string, paths: string[] = []) { if (existsSync(path) && lstatSync(path).isDirectory()) { readdirSync(resolve(path)).forEach(item => getPaths(join(path, item), paths)) } else { - paths.push(path) + // Need to make sure path strings are the same on Windows and Unix-like OSs + paths.push(forcePosixLikePath(path)) } return paths } + +function compareByCodePoint (a: string, b: string) { + const minLength = Math.min(a.length, b.length) + for (let i = 0; i < minLength; i++) { + const cmp = (a?.codePointAt(i) ?? a.charCodeAt(i)) - (b.codePointAt(i) ?? b.charCodeAt(i)) + if (cmp !== 0) { + return cmp + } + } + if (a.length < b.length) { + return -1 + } else if (a.length > b.length) { + return 1 + } + return 0 +} From 58d7cb021cf5e3991dc6878b8867bdff3262e2a9 Mon Sep 17 00:00:00 2001 From: Ruby Tunaley Date: Thu, 23 Sep 2021 21:44:45 +1000 Subject: [PATCH 04/12] Readonly types - ESLint compliance fixes. --- ...itionalPropertiesEmptySchema.explicitFalse.optionFalse.ts | 5 +---- ...ditionalPropertiesEmptySchema.explicitFalse.optionTrue.ts | 5 +---- ...lPropertiesEmptySchema.explicitFalse.optionUnspecified.ts | 5 +---- ...yInterface.additionalPropertiesEmptySchema.optionFalse.ts | 5 +---- ...lyInterface.additionalPropertiesEmptySchema.optionTrue.ts | 5 +---- ...face.additionalPropertiesEmptySchema.optionUnspecified.ts | 5 +---- ....additionalPropertiesRoFalse.explicitFalse.optionFalse.ts | 5 +---- ...e.additionalPropertiesRoFalse.explicitFalse.optionTrue.ts | 5 +---- ...ionalPropertiesRoFalse.explicitFalse.optionUnspecified.ts | 5 +---- ...e.additionalPropertiesRoTrue.explicitFalse.optionFalse.ts | 5 +---- ...ce.additionalPropertiesRoTrue.explicitFalse.optionTrue.ts | 5 +---- ...tionalPropertiesRoTrue.explicitFalse.optionUnspecified.ts | 5 +---- ...adonlyInterface.additionalPropertiesRoTrue.optionFalse.ts | 5 +---- ...eadonlyInterface.additionalPropertiesRoTrue.optionTrue.ts | 5 +---- ...Interface.additionalPropertiesRoTrue.optionUnspecified.ts | 5 +---- ...ace.additionalPropertiesTrue.explicitFalse.optionFalse.ts | 5 +---- ...face.additionalPropertiesTrue.explicitFalse.optionTrue.ts | 5 +---- ...ditionalPropertiesTrue.explicitFalse.optionUnspecified.ts | 5 +---- ...readonlyInterface.additionalPropertiesTrue.optionFalse.ts | 5 +---- .../readonlyInterface.additionalPropertiesTrue.optionTrue.ts | 5 +---- ...lyInterface.additionalPropertiesTrue.optionUnspecified.ts | 5 +---- test/e2e/readonlyInterface.explicitFalse.optionFalse.ts | 5 +---- test/e2e/readonlyInterface.explicitFalse.optionTrue.ts | 5 +---- .../e2e/readonlyInterface.explicitFalse.optionUnspecified.ts | 5 +---- test/e2e/readonlyInterface.optionFalse.ts | 5 +---- test/e2e/readonlyInterface.optionTrue.ts | 5 +---- test/e2e/readonlyInterface.optionUnspecified.ts | 5 +---- ...ditionalPropertiesEmptySchema.explicitTrue.optionFalse.ts | 5 +---- ...dditionalPropertiesEmptySchema.explicitTrue.optionTrue.ts | 5 +---- ...alPropertiesEmptySchema.explicitTrue.optionUnspecified.ts | 5 +---- ...onlyObject.additionalPropertiesEmptySchema.optionFalse.ts | 5 +---- ...donlyObject.additionalPropertiesEmptySchema.optionTrue.ts | 5 +---- ...ject.additionalPropertiesEmptySchema.optionUnspecified.ts | 5 +---- ...t.additionalPropertiesRoFalse.explicitTrue.optionFalse.ts | 5 +---- ...ct.additionalPropertiesRoFalse.explicitTrue.optionTrue.ts | 5 +---- ...tionalPropertiesRoFalse.explicitTrue.optionUnspecified.ts | 5 +---- ...readonlyObject.additionalPropertiesRoFalse.optionFalse.ts | 5 +---- ....readonlyObject.additionalPropertiesRoFalse.optionTrue.ts | 5 +---- ...lyObject.additionalPropertiesRoFalse.optionUnspecified.ts | 5 +---- ...ct.additionalPropertiesRoTrue.explicitTrue.optionFalse.ts | 5 +---- ...ect.additionalPropertiesRoTrue.explicitTrue.optionTrue.ts | 5 +---- ...itionalPropertiesRoTrue.explicitTrue.optionUnspecified.ts | 5 +---- ...ject.additionalPropertiesTrue.explicitTrue.optionFalse.ts | 5 +---- ...bject.additionalPropertiesTrue.explicitTrue.optionTrue.ts | 5 +---- ...dditionalPropertiesTrue.explicitTrue.optionUnspecified.ts | 5 +---- ...ce.readonlyObject.additionalPropertiesTrue.optionFalse.ts | 5 +---- ...ace.readonlyObject.additionalPropertiesTrue.optionTrue.ts | 5 +---- ...donlyObject.additionalPropertiesTrue.optionUnspecified.ts | 5 +---- ...donlyInterface.readonlyObject.explicitTrue.optionFalse.ts | 5 +---- ...adonlyInterface.readonlyObject.explicitTrue.optionTrue.ts | 5 +---- ...nterface.readonlyObject.explicitTrue.optionUnspecified.ts | 5 +---- test/e2e/readonlyInterface.readonlyObject.optionFalse.ts | 5 +---- test/e2e/readonlyInterface.readonlyObject.optionTrue.ts | 5 +---- .../readonlyInterface.readonlyObject.optionUnspecified.ts | 5 +---- 54 files changed, 54 insertions(+), 216 deletions(-) diff --git a/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.optionFalse.ts b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.optionFalse.ts index e869d262..fef5936e 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.optionFalse.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.optionFalse.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string', diff --git a/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.optionTrue.ts b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.optionTrue.ts index 326f5659..9a935eb5 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.optionTrue.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.optionTrue.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string', diff --git a/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.optionUnspecified.ts b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.optionUnspecified.ts index bf71b4e7..dbf7d51e 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.optionUnspecified.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.optionUnspecified.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string', diff --git a/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.optionFalse.ts b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.optionFalse.ts index 350f20e0..c4bb32a5 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.optionFalse.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.optionFalse.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string', diff --git a/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.optionTrue.ts b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.optionTrue.ts index b51687a9..78a02f46 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.optionTrue.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.optionTrue.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string', diff --git a/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.optionUnspecified.ts b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.optionUnspecified.ts index df0e8ef5..535fbe62 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.optionUnspecified.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.optionUnspecified.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string', diff --git a/test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.optionFalse.ts b/test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.optionFalse.ts index 49197695..8c6af5f0 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.optionFalse.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.optionFalse.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string', diff --git a/test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.optionTrue.ts b/test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.optionTrue.ts index 6f3a7e39..1e3af675 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.optionTrue.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.optionTrue.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string', diff --git a/test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.optionUnspecified.ts b/test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.optionUnspecified.ts index 74d16f53..3a1f6cd7 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.optionUnspecified.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.optionUnspecified.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string', diff --git a/test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.optionFalse.ts b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.optionFalse.ts index 304455d7..d7fab712 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.optionFalse.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.optionFalse.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string', diff --git a/test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.optionTrue.ts b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.optionTrue.ts index 6c1b6fd4..0fac2bc1 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.optionTrue.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.optionTrue.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string', diff --git a/test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.optionUnspecified.ts b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.optionUnspecified.ts index dcc9e292..cc4004aa 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.optionUnspecified.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.optionUnspecified.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string', diff --git a/test/e2e/readonlyInterface.additionalPropertiesRoTrue.optionFalse.ts b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.optionFalse.ts index 8c5dd006..f0a97bd0 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesRoTrue.optionFalse.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.optionFalse.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string', diff --git a/test/e2e/readonlyInterface.additionalPropertiesRoTrue.optionTrue.ts b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.optionTrue.ts index 75bd939e..8122c6c4 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesRoTrue.optionTrue.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.optionTrue.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string', diff --git a/test/e2e/readonlyInterface.additionalPropertiesRoTrue.optionUnspecified.ts b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.optionUnspecified.ts index 6e5a08b4..f35ead5d 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesRoTrue.optionUnspecified.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.optionUnspecified.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string', diff --git a/test/e2e/readonlyInterface.additionalPropertiesTrue.explicitFalse.optionFalse.ts b/test/e2e/readonlyInterface.additionalPropertiesTrue.explicitFalse.optionFalse.ts index 65621618..1517f6e0 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesTrue.explicitFalse.optionFalse.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesTrue.explicitFalse.optionFalse.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string', diff --git a/test/e2e/readonlyInterface.additionalPropertiesTrue.explicitFalse.optionTrue.ts b/test/e2e/readonlyInterface.additionalPropertiesTrue.explicitFalse.optionTrue.ts index 320c22da..96f67394 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesTrue.explicitFalse.optionTrue.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesTrue.explicitFalse.optionTrue.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string', diff --git a/test/e2e/readonlyInterface.additionalPropertiesTrue.explicitFalse.optionUnspecified.ts b/test/e2e/readonlyInterface.additionalPropertiesTrue.explicitFalse.optionUnspecified.ts index 60206272..23741630 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesTrue.explicitFalse.optionUnspecified.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesTrue.explicitFalse.optionUnspecified.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string', diff --git a/test/e2e/readonlyInterface.additionalPropertiesTrue.optionFalse.ts b/test/e2e/readonlyInterface.additionalPropertiesTrue.optionFalse.ts index af00a3f8..97e23f73 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesTrue.optionFalse.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesTrue.optionFalse.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string', diff --git a/test/e2e/readonlyInterface.additionalPropertiesTrue.optionTrue.ts b/test/e2e/readonlyInterface.additionalPropertiesTrue.optionTrue.ts index ee13d3b4..43c83cc5 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesTrue.optionTrue.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesTrue.optionTrue.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string', diff --git a/test/e2e/readonlyInterface.additionalPropertiesTrue.optionUnspecified.ts b/test/e2e/readonlyInterface.additionalPropertiesTrue.optionUnspecified.ts index 100738b7..c4c2001f 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesTrue.optionUnspecified.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesTrue.optionUnspecified.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string', diff --git a/test/e2e/readonlyInterface.explicitFalse.optionFalse.ts b/test/e2e/readonlyInterface.explicitFalse.optionFalse.ts index 84aaefe3..7bd59627 100644 --- a/test/e2e/readonlyInterface.explicitFalse.optionFalse.ts +++ b/test/e2e/readonlyInterface.explicitFalse.optionFalse.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string', diff --git a/test/e2e/readonlyInterface.explicitFalse.optionTrue.ts b/test/e2e/readonlyInterface.explicitFalse.optionTrue.ts index 62a0238c..d2686157 100644 --- a/test/e2e/readonlyInterface.explicitFalse.optionTrue.ts +++ b/test/e2e/readonlyInterface.explicitFalse.optionTrue.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string', diff --git a/test/e2e/readonlyInterface.explicitFalse.optionUnspecified.ts b/test/e2e/readonlyInterface.explicitFalse.optionUnspecified.ts index ab708297..289816fd 100644 --- a/test/e2e/readonlyInterface.explicitFalse.optionUnspecified.ts +++ b/test/e2e/readonlyInterface.explicitFalse.optionUnspecified.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string', diff --git a/test/e2e/readonlyInterface.optionFalse.ts b/test/e2e/readonlyInterface.optionFalse.ts index b8adbf6e..213b749f 100644 --- a/test/e2e/readonlyInterface.optionFalse.ts +++ b/test/e2e/readonlyInterface.optionFalse.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string', diff --git a/test/e2e/readonlyInterface.optionTrue.ts b/test/e2e/readonlyInterface.optionTrue.ts index 6866817f..c19df489 100644 --- a/test/e2e/readonlyInterface.optionTrue.ts +++ b/test/e2e/readonlyInterface.optionTrue.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string', diff --git a/test/e2e/readonlyInterface.optionUnspecified.ts b/test/e2e/readonlyInterface.optionUnspecified.ts index 04cf3045..35376198 100644 --- a/test/e2e/readonlyInterface.optionUnspecified.ts +++ b/test/e2e/readonlyInterface.optionUnspecified.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string', diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionFalse.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionFalse.ts index 8e704858..df1097c1 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionFalse.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionFalse.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string', diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionTrue.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionTrue.ts index e4274d22..c0b24508 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionTrue.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionTrue.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string', diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionUnspecified.ts index fa5af424..6dc8b0aa 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionUnspecified.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionUnspecified.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string', diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.optionFalse.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.optionFalse.ts index d848861e..6c522484 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.optionFalse.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.optionFalse.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string' diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.optionTrue.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.optionTrue.ts index daf08254..2dd9762d 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.optionTrue.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.optionTrue.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string' diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.optionUnspecified.ts index 50275360..19d72564 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.optionUnspecified.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.optionUnspecified.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string' diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionFalse.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionFalse.ts index 37652d4f..7b566833 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionFalse.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionFalse.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string', diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionTrue.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionTrue.ts index 21939f88..b002adb8 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionTrue.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionTrue.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string', diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionUnspecified.ts index 7eb3ccff..09582aad 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionUnspecified.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionUnspecified.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string', diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.optionFalse.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.optionFalse.ts index 3fb06ac3..e6c515c2 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.optionFalse.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.optionFalse.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string' diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.optionTrue.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.optionTrue.ts index bd30d598..7ee7b882 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.optionTrue.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.optionTrue.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string' diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.optionUnspecified.ts index 96cf012d..bb762f39 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.optionUnspecified.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.optionUnspecified.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string' diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionFalse.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionFalse.ts index 2f374e20..00dc2706 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionFalse.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionFalse.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string', diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionTrue.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionTrue.ts index fe9bed79..e3468479 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionTrue.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionTrue.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string', diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionUnspecified.ts index 1fd73297..f79daf59 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionUnspecified.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionUnspecified.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string', diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.optionFalse.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.optionFalse.ts index 76b751be..0ba3f134 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.optionFalse.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.optionFalse.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string', diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.optionTrue.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.optionTrue.ts index 176363df..5ef2c956 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.optionTrue.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.optionTrue.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string', diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.optionUnspecified.ts index 867a3e1c..e8fa23f6 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.optionUnspecified.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.optionUnspecified.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string', diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.optionFalse.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.optionFalse.ts index 524b07b0..848e14b9 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.optionFalse.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.optionFalse.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string' diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.optionTrue.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.optionTrue.ts index 03c57df2..13ac5c43 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.optionTrue.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.optionTrue.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string' diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.optionUnspecified.ts index b645ddee..ea1e4344 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.optionUnspecified.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.optionUnspecified.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string' diff --git a/test/e2e/readonlyInterface.readonlyObject.explicitTrue.optionFalse.ts b/test/e2e/readonlyInterface.readonlyObject.explicitTrue.optionFalse.ts index 0bcd76f7..fbcafed7 100644 --- a/test/e2e/readonlyInterface.readonlyObject.explicitTrue.optionFalse.ts +++ b/test/e2e/readonlyInterface.readonlyObject.explicitTrue.optionFalse.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string', diff --git a/test/e2e/readonlyInterface.readonlyObject.explicitTrue.optionTrue.ts b/test/e2e/readonlyInterface.readonlyObject.explicitTrue.optionTrue.ts index 2aa10652..6cf11992 100644 --- a/test/e2e/readonlyInterface.readonlyObject.explicitTrue.optionTrue.ts +++ b/test/e2e/readonlyInterface.readonlyObject.explicitTrue.optionTrue.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string', diff --git a/test/e2e/readonlyInterface.readonlyObject.explicitTrue.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyObject.explicitTrue.optionUnspecified.ts index 84d9dbb0..67313aa1 100644 --- a/test/e2e/readonlyInterface.readonlyObject.explicitTrue.optionUnspecified.ts +++ b/test/e2e/readonlyInterface.readonlyObject.explicitTrue.optionUnspecified.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string', diff --git a/test/e2e/readonlyInterface.readonlyObject.optionFalse.ts b/test/e2e/readonlyInterface.readonlyObject.optionFalse.ts index fdb0dd69..f65117d3 100644 --- a/test/e2e/readonlyInterface.readonlyObject.optionFalse.ts +++ b/test/e2e/readonlyInterface.readonlyObject.optionFalse.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string' diff --git a/test/e2e/readonlyInterface.readonlyObject.optionTrue.ts b/test/e2e/readonlyInterface.readonlyObject.optionTrue.ts index 5e77249f..67a55292 100644 --- a/test/e2e/readonlyInterface.readonlyObject.optionTrue.ts +++ b/test/e2e/readonlyInterface.readonlyObject.optionTrue.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string' diff --git a/test/e2e/readonlyInterface.readonlyObject.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyObject.optionUnspecified.ts index 901d9ed1..e4bd9dfc 100644 --- a/test/e2e/readonlyInterface.readonlyObject.optionUnspecified.ts +++ b/test/e2e/readonlyInterface.readonlyObject.optionUnspecified.ts @@ -1,9 +1,6 @@ export const input = { type: 'object', - required: [ - 'a', - 'b' - ], + required: ['a', 'b'], properties: { a: { type: 'string' From 21675148bbb05a0867ec81425abe4f115b02b557 Mon Sep 17 00:00:00 2001 From: Ruby Tunaley Date: Fri, 24 Sep 2021 02:04:12 +1000 Subject: [PATCH 05/12] Readonly types - Added option to set everything as readonly by default. --- src/generator.ts | 4 +- src/index.ts | 7 + src/parser.ts | 18 +- src/types/AST.ts | 6 +- src/typesOfSchema.ts | 2 +- src/utils.ts | 2 +- test/__snapshots__/test/test.ts.md | 999 ++++++++++++++++++ test/__snapshots__/test/test.ts.snap | Bin 33791 -> 35810 bytes ...donlyByDefault.explicitTrue.optionFalse.ts | 13 + ...adonlyByDefault.explicitTrue.optionTrue.ts | 13 + ...yDefault.explicitTrue.optionUnspecified.ts | 12 + ...onlyArray.readonlyByDefault.optionFalse.ts | 12 + ...donlyArray.readonlyByDefault.optionTrue.ts | 12 + ...ray.readonlyByDefault.optionUnspecified.ts | 12 + ...esEmptySchema.explicitFalse.optionFalse.ts | 29 + ...iesEmptySchema.explicitFalse.optionTrue.ts | 29 + ...ySchema.explicitFalse.optionUnspecified.ts | 28 + ...ertiesRoFalse.explicitFalse.optionFalse.ts | 31 + ...pertiesRoFalse.explicitFalse.optionTrue.ts | 31 + ...RoFalse.explicitFalse.optionUnspecified.ts | 30 + ...pertiesRoTrue.explicitFalse.optionFalse.ts | 31 + ...opertiesRoTrue.explicitFalse.optionTrue.ts | 31 + ...sRoTrue.explicitFalse.optionUnspecified.ts | 30 + ...ropertiesTrue.explicitFalse.optionFalse.ts | 29 + ...PropertiesTrue.explicitFalse.optionTrue.ts | 29 + ...iesTrue.explicitFalse.optionUnspecified.ts | 28 + ...onlyByDefault.explicitFalse.optionFalse.ts | 29 + ...donlyByDefault.explicitFalse.optionTrue.ts | 29 + ...Default.explicitFalse.optionUnspecified.ts | 28 + ...iesEmptySchema.explicitTrue.optionFalse.ts | 28 + ...tiesEmptySchema.explicitTrue.optionTrue.ts | 28 + ...tySchema.explicitTrue.optionUnspecified.ts | 27 + ...tionalPropertiesEmptySchema.optionFalse.ts | 26 + ...itionalPropertiesEmptySchema.optionTrue.ts | 26 + ...PropertiesEmptySchema.optionUnspecified.ts | 26 + ...pertiesRoFalse.explicitTrue.optionFalse.ts | 30 + ...opertiesRoFalse.explicitTrue.optionTrue.ts | 30 + ...sRoFalse.explicitTrue.optionUnspecified.ts | 29 + ...additionalPropertiesRoFalse.optionFalse.ts | 28 + ....additionalPropertiesRoFalse.optionTrue.ts | 28 + ...onalPropertiesRoFalse.optionUnspecified.ts | 27 + ...opertiesRoTrue.explicitTrue.optionFalse.ts | 30 + ...ropertiesRoTrue.explicitTrue.optionTrue.ts | 30 + ...esRoTrue.explicitTrue.optionUnspecified.ts | 29 + ...PropertiesTrue.explicitTrue.optionFalse.ts | 28 + ...lPropertiesTrue.explicitTrue.optionTrue.ts | 28 + ...tiesTrue.explicitTrue.optionUnspecified.ts | 27 + ...ct.additionalPropertiesTrue.optionFalse.ts | 26 + ...ect.additionalPropertiesTrue.optionTrue.ts | 26 + ...itionalPropertiesTrue.optionUnspecified.ts | 25 + ...readonlyObject.explicitTrue.optionFalse.ts | 28 + ....readonlyObject.explicitTrue.optionTrue.ts | 28 + ...lyObject.explicitTrue.optionUnspecified.ts | 27 + ...nlyByDefault.readonlyObject.optionFalse.ts | 26 + ...onlyByDefault.readonlyObject.optionTrue.ts | 26 + ...efault.readonlyObject.optionUnspecified.ts | 25 + ...donlyByDefault.explicitTrue.optionFalse.ts | 13 + ...adonlyByDefault.explicitTrue.optionTrue.ts | 13 + ...yDefault.explicitTrue.optionUnspecified.ts | 13 + ...onlyTuple.readonlyByDefault.optionFalse.ts | 12 + ...donlyTuple.readonlyByDefault.optionTrue.ts | 12 + ...ple.readonlyByDefault.optionUnspecified.ts | 11 + 62 files changed, 2354 insertions(+), 16 deletions(-) create mode 100644 test/e2e/readonlyArray.readonlyByDefault.explicitTrue.optionFalse.ts create mode 100644 test/e2e/readonlyArray.readonlyByDefault.explicitTrue.optionTrue.ts create mode 100644 test/e2e/readonlyArray.readonlyByDefault.explicitTrue.optionUnspecified.ts create mode 100644 test/e2e/readonlyArray.readonlyByDefault.optionFalse.ts create mode 100644 test/e2e/readonlyArray.readonlyByDefault.optionTrue.ts create mode 100644 test/e2e/readonlyArray.readonlyByDefault.optionUnspecified.ts create mode 100644 test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.optionFalse.ts create mode 100644 test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.optionTrue.ts create mode 100644 test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.optionUnspecified.ts create mode 100644 test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.optionFalse.ts create mode 100644 test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.optionTrue.ts create mode 100644 test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.optionUnspecified.ts create mode 100644 test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.optionFalse.ts create mode 100644 test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.optionTrue.ts create mode 100644 test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.optionUnspecified.ts create mode 100644 test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.optionFalse.ts create mode 100644 test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.optionTrue.ts create mode 100644 test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.optionUnspecified.ts create mode 100644 test/e2e/readonlyInterface.readonlyByDefault.explicitFalse.optionFalse.ts create mode 100644 test/e2e/readonlyInterface.readonlyByDefault.explicitFalse.optionTrue.ts create mode 100644 test/e2e/readonlyInterface.readonlyByDefault.explicitFalse.optionUnspecified.ts create mode 100644 test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionFalse.ts create mode 100644 test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionTrue.ts create mode 100644 test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionUnspecified.ts create mode 100644 test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.optionFalse.ts create mode 100644 test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.optionTrue.ts create mode 100644 test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.optionUnspecified.ts create mode 100644 test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionFalse.ts create mode 100644 test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionTrue.ts create mode 100644 test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionUnspecified.ts create mode 100644 test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.optionFalse.ts create mode 100644 test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.optionTrue.ts create mode 100644 test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.optionUnspecified.ts create mode 100644 test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionFalse.ts create mode 100644 test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionTrue.ts create mode 100644 test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionUnspecified.ts create mode 100644 test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.optionFalse.ts create mode 100644 test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.optionTrue.ts create mode 100644 test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.optionUnspecified.ts create mode 100644 test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.optionFalse.ts create mode 100644 test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.optionTrue.ts create mode 100644 test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.optionUnspecified.ts create mode 100644 test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.optionFalse.ts create mode 100644 test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.optionTrue.ts create mode 100644 test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.optionUnspecified.ts create mode 100644 test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.optionFalse.ts create mode 100644 test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.optionTrue.ts create mode 100644 test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.optionUnspecified.ts create mode 100644 test/e2e/readonlyTuple.readonlyByDefault.explicitTrue.optionFalse.ts create mode 100644 test/e2e/readonlyTuple.readonlyByDefault.explicitTrue.optionTrue.ts create mode 100644 test/e2e/readonlyTuple.readonlyByDefault.explicitTrue.optionUnspecified.ts create mode 100644 test/e2e/readonlyTuple.readonlyByDefault.optionFalse.ts create mode 100644 test/e2e/readonlyTuple.readonlyByDefault.optionTrue.ts create mode 100644 test/e2e/readonlyTuple.readonlyByDefault.optionUnspecified.ts diff --git a/src/generator.ts b/src/generator.ts index 552aa696..83f6596a 100644 --- a/src/generator.ts +++ b/src/generator.ts @@ -180,7 +180,7 @@ function generateRawType(ast: AST, options: Options): string { return (() => { let type = generateType(ast.params, options) if (ast.isReadonly && !options.readonlyKeyword) { - type = 'ReadonlyArray<'+ type + '>' + type = 'ReadonlyArray<' + type + '>' } else { type = type.endsWith('"') ? '(' + type + ')[]' : type + '[]' if (ast.isReadonly) { @@ -318,7 +318,7 @@ function generateInterface(ast: TInterface, options: Options): string { .filter(_ => !_.isPatternProperty && !_.isUnreachableDefinition) .map( ({isRequired, isReadonly, keyName, ast}) => - [isRequired, isReadonly, keyName, ast, generateType(ast, options)] as [boolean, boolean | undefined, string, AST, string] + [isRequired, isReadonly, keyName, ast, generateType(ast, options)] as [boolean, boolean, string, AST, string] ) .map( ([isRequired, isReadonly, keyName, ast, type]) => diff --git a/src/index.ts b/src/index.ts index e16eafec..56e2a78e 100644 --- a/src/index.ts +++ b/src/index.ts @@ -42,8 +42,14 @@ export interface Options { * Ignore maxItems and minItems for `array` types, preventing tuples being generated. */ ignoreMinAndMaxItems: boolean + /** + * Types must be explicitly marked as mutable using `"tsReadonly": false`. + */ + readonlyByDefault: boolean /** * Use the `readonly` keyword instead of `Readonly` for array types? + * + * Setting this to `false` will disable readonly tuple support. */ readonlyKeyword: boolean /** @@ -83,6 +89,7 @@ export const DEFAULT_OPTIONS: Options = { enableConstEnums: true, format: true, ignoreMinAndMaxItems: false, + readonlyByDefault: false, readonlyKeyword: true, strictIndexSignatures: false, style: { diff --git a/src/parser.ts b/src/parser.ts index dd564c2b..1e4452bd 100644 --- a/src/parser.ts +++ b/src/parser.ts @@ -224,7 +224,7 @@ function parseNonLiteral( minItems, standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames), params: schema.items.map(_ => parse(_, options, undefined, processed, usedNames)), - isReadonly: schema.tsReadonly, + isReadonly: schema.tsReadonly ?? options.readonlyByDefault, type: 'TUPLE' } if (schema.additionalItems === true) { @@ -239,7 +239,7 @@ function parseNonLiteral( keyName, standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames), params: parse(schema.items!, options, undefined, processed, usedNames), - isReadonly: schema.tsReadonly, + isReadonly: schema.tsReadonly ?? options.readonlyByDefault, type: 'ARRAY' } } @@ -280,7 +280,7 @@ function parseNonLiteral( // if there is no maximum, then add a spread item to collect the rest spreadParam: maxItems >= 0 ? undefined : params, standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames), - isReadonly: schema.tsReadonly, + isReadonly: schema.tsReadonly ?? options.readonlyByDefault, type: 'TUPLE' } } @@ -290,7 +290,7 @@ function parseNonLiteral( keyName, params, standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames), - isReadonly: schema.tsReadonly, + isReadonly: schema.tsReadonly ?? options.readonlyByDefault, type: 'ARRAY' } } @@ -360,7 +360,7 @@ function parseSchema( isRequired: includes(schema.required || [], key), isUnreachableDefinition: false, // Readonly state specified on property supercedes readonly state specified on the object - isReadonly: value.tsReadonly ?? schema.tsReadonly, + isReadonly: value.tsReadonly ?? schema.tsReadonly ?? options.readonlyByDefault, keyName: key })) @@ -382,7 +382,7 @@ via the \`patternProperty\` "${key}".` isPatternProperty: !singlePatternProperty, isRequired: singlePatternProperty || includes(schema.required || [], key), isUnreachableDefinition: false, - isReadonly: value.tsReadonly, + isReadonly: value.tsReadonly ?? schema.tsReadonly ?? options.readonlyByDefault, keyName: singlePatternProperty ? '[k: string]' : key } }) @@ -401,7 +401,7 @@ via the \`definition\` "${key}".` isPatternProperty: false, isRequired: includes(schema.required || [], key), isUnreachableDefinition: true, - isReadonly: value.tsReadonly, + isReadonly: value.tsReadonly ?? schema.tsReadonly ?? options.readonlyByDefault, keyName: key } }) @@ -420,7 +420,7 @@ via the \`definition\` "${key}".` isPatternProperty: false, isRequired: true, isUnreachableDefinition: false, - isReadonly: schema.tsReadonly, + isReadonly: schema.tsReadonly ?? options.readonlyByDefault, keyName: '[k: string]' }) @@ -436,7 +436,7 @@ via the \`definition\` "${key}".` isRequired: true, isUnreachableDefinition: false, // Explicit additionalProperties readonly state supercedes generic readonly state - isReadonly: schema.additionalProperties.tsReadonly ?? schema.tsReadonly, + isReadonly: schema.additionalProperties.tsReadonly ?? schema.tsReadonly ?? options.readonlyByDefault, keyName: '[k: string]' }) } diff --git a/src/types/AST.ts b/src/types/AST.ts index e44fe093..307c68ff 100644 --- a/src/types/AST.ts +++ b/src/types/AST.ts @@ -49,7 +49,7 @@ export interface TAny extends AbstractAST { export interface TArray extends AbstractAST { type: 'ARRAY' params: AST - isReadonly: boolean | undefined + isReadonly: boolean } export interface TBoolean extends AbstractAST { @@ -86,7 +86,7 @@ export interface TInterfaceParam { isRequired: boolean isPatternProperty: boolean isUnreachableDefinition: boolean - isReadonly: boolean | undefined + isReadonly: boolean } export interface TIntersection extends AbstractAST { @@ -126,7 +126,7 @@ export interface TTuple extends AbstractAST { spreadParam?: AST minItems: number maxItems?: number - isReadonly: boolean | undefined + isReadonly: boolean } export interface TUnion extends AbstractAST { diff --git a/src/typesOfSchema.ts b/src/typesOfSchema.ts index dd34bfb8..6629fb79 100644 --- a/src/typesOfSchema.ts +++ b/src/typesOfSchema.ts @@ -31,7 +31,7 @@ export function typesOfSchema(schema: JSONSchema): readonly [SchemaType, ...Sche return matchedTypes as [SchemaType, ...SchemaType[]] } -function nonCustonKeys (obj: JSONSchema): string[] { +function nonCustonKeys(obj: JSONSchema): string[] { return Object.keys(obj).filter(key => key !== 'tsEnumNames' && key !== 'tsType' && key !== 'tsReadonly') } diff --git a/src/utils.ts b/src/utils.ts index 19de80c5..237a69de 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -278,7 +278,7 @@ export function escapeBlockComment(schema: JSONSchema) { /** * Makes Windows paths look like POSIX paths, ignoring drive letter prefixes (if present). */ -export function forcePosixLikePath (path: string): string { +export function forcePosixLikePath(path: string): string { return path.replace(/\\/gu, '/') } diff --git a/test/__snapshots__/test/test.ts.md b/test/__snapshots__/test/test.ts.md index 5babd566..58f08c65 100644 --- a/test/__snapshots__/test/test.ts.md +++ b/test/__snapshots__/test/test.ts.md @@ -10274,3 +10274,1002 @@ Generated by [AVA](https://avajs.dev). ␊ export type ReadonlyTuple = readonly [string, ...string[]];␊ ` + +## readonlyArray.readonlyByDefault.explicitTrue.optionFalse.js + +> Expected output to match snapshot for e2e test: readonlyArray.readonlyByDefault.explicitTrue.optionFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export type MyArray = ReadonlyArray;␊ + ` + +## readonlyArray.readonlyByDefault.explicitTrue.optionTrue.js + +> Expected output to match snapshot for e2e test: readonlyArray.readonlyByDefault.explicitTrue.optionTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export type MyArray = readonly string[];␊ + ` + +## readonlyArray.readonlyByDefault.explicitTrue.optionUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyArray.readonlyByDefault.explicitTrue.optionUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export type MyArray = readonly string[];␊ + ` + +## readonlyArray.readonlyByDefault.optionFalse.js + +> Expected output to match snapshot for e2e test: readonlyArray.readonlyByDefault.optionFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export type MyArray = ReadonlyArray;␊ + ` + +## readonlyArray.readonlyByDefault.optionTrue.js + +> Expected output to match snapshot for e2e test: readonlyArray.readonlyByDefault.optionTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export type MyArray = readonly string[];␊ + ` + +## readonlyArray.readonlyByDefault.optionUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyArray.readonlyByDefault.optionUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export type MyArray = readonly string[];␊ + ` + +## readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.optionFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.optionFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultAdditionalPropertiesEmptySchemaExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.optionTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.optionTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultAdditionalPropertiesEmptySchemaExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.optionUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.optionUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultAdditionalPropertiesEmptySchemaExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.optionFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.optionFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultAdditionalPropertiesRoFalseExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.optionTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.optionTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultAdditionalPropertiesRoFalseExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.optionUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.optionUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultAdditionalPropertiesRoFalseExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.optionFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.optionFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultAdditionalPropertiesRoTrueExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.optionTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.optionTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultAdditionalPropertiesRoTrueExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.optionUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.optionUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultAdditionalPropertiesRoTrueExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.optionFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.optionFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultAdditionalPropertiesTrueExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.optionTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.optionTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultAdditionalPropertiesTrueExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.optionUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.optionUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultAdditionalPropertiesTrueExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.explicitFalse.optionFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.explicitFalse.optionFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.explicitFalse.optionTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.explicitFalse.optionTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.explicitFalse.optionUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.explicitFalse.optionUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObjectAdditionalPropertiesEmptySchemaExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObjectAdditionalPropertiesEmptySchemaExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObjectAdditionalPropertiesEmptySchemaExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.optionFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.optionFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObjectAdditionalPropertiesEmptySchema {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.optionTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.optionTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObjectAdditionalPropertiesEmptySchema {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.optionUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.optionUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObjectAdditionalPropertiesEmptySchema {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObjectAdditionalPropertiesRoFalseExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObjectAdditionalPropertiesRoFalseExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObjectAdditionalPropertiesRoFalseExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.optionFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.optionFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObjectAdditionalPropertiesRoFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.optionTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.optionTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObjectAdditionalPropertiesRoFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.optionUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.optionUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObjectAdditionalPropertiesRoFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObjectAdditionalPropertiesRoTrueExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObjectAdditionalPropertiesRoTrueExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObjectAdditionalPropertiesRoTrueExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.optionFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.optionFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObjectAdditionalPropertiesTrueExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.optionTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.optionTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObjectAdditionalPropertiesTrueExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.optionUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.optionUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObjectAdditionalPropertiesTrueExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.optionFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.optionFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObjectAdditionalPropertiesTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.optionTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.optionTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObjectAdditionalPropertiesTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.optionUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.optionUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObjectAdditionalPropertiesTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.optionFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.optionFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObjectExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.optionTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.optionTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObjectExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.optionUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.optionUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObjectExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.optionFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.optionFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObject {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.optionTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.optionTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObject {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.optionUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.optionUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObject {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + }␊ + ` + +## readonlyTuple.readonlyByDefault.explicitTrue.optionFalse.js + +> Expected output to match snapshot for e2e test: readonlyTuple.readonlyByDefault.explicitTrue.optionFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export type ReadonlyTupleReadonlyByDefaultExplicitTrue = [string, ...string[]];␊ + ` + +## readonlyTuple.readonlyByDefault.explicitTrue.optionTrue.js + +> Expected output to match snapshot for e2e test: readonlyTuple.readonlyByDefault.explicitTrue.optionTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export type ReadonlyTupleReadonlyByDefaultExplicitTrue = readonly [string, ...string[]];␊ + ` + +## readonlyTuple.readonlyByDefault.explicitTrue.optionUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyTuple.readonlyByDefault.explicitTrue.optionUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export type ReadonlyTupleReadonlyByDefaultExplicitTrue = [string, ...string[]];␊ + ` + +## readonlyTuple.readonlyByDefault.optionFalse.js + +> Expected output to match snapshot for e2e test: readonlyTuple.readonlyByDefault.optionFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export type ReadonlyTupleReadonlyByDefault = [string, ...string[]];␊ + ` + +## readonlyTuple.readonlyByDefault.optionTrue.js + +> Expected output to match snapshot for e2e test: readonlyTuple.readonlyByDefault.optionTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export type ReadonlyTupleReadonlyByDefault = readonly [string, ...string[]];␊ + ` + +## readonlyTuple.readonlyByDefault.optionUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyTuple.readonlyByDefault.optionUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export type ReadonlyTupleReadonlyByDefault = readonly [string, ...string[]];␊ + ` diff --git a/test/__snapshots__/test/test.ts.snap b/test/__snapshots__/test/test.ts.snap index b136a52351109b87eddb566f7b3505da70f6acbd..c96a0deb46ecc9ec151396de00d205d1ec97bee8 100644 GIT binary patch literal 35810 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 N|38R$uGhoB0|3gwf*b$< literal 33791 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 diff --git a/test/e2e/readonlyArray.readonlyByDefault.explicitTrue.optionFalse.ts b/test/e2e/readonlyArray.readonlyByDefault.explicitTrue.optionFalse.ts new file mode 100644 index 00000000..29c57bc6 --- /dev/null +++ b/test/e2e/readonlyArray.readonlyByDefault.explicitTrue.optionFalse.ts @@ -0,0 +1,13 @@ +export const input = { + title: 'MyArray', + type: 'array', + items: { + type: 'string' + }, + tsReadonly: true +} + +export const options = { + readonlyByDefault: true, + readonlyKeyword: false +} diff --git a/test/e2e/readonlyArray.readonlyByDefault.explicitTrue.optionTrue.ts b/test/e2e/readonlyArray.readonlyByDefault.explicitTrue.optionTrue.ts new file mode 100644 index 00000000..26791598 --- /dev/null +++ b/test/e2e/readonlyArray.readonlyByDefault.explicitTrue.optionTrue.ts @@ -0,0 +1,13 @@ +export const input = { + title: 'MyArray', + type: 'array', + items: { + type: 'string' + }, + tsReadonly: true +} + +export const options = { + readonlyByDefault: true, + readonlyKeyword: true +} diff --git a/test/e2e/readonlyArray.readonlyByDefault.explicitTrue.optionUnspecified.ts b/test/e2e/readonlyArray.readonlyByDefault.explicitTrue.optionUnspecified.ts new file mode 100644 index 00000000..e3cd09f3 --- /dev/null +++ b/test/e2e/readonlyArray.readonlyByDefault.explicitTrue.optionUnspecified.ts @@ -0,0 +1,12 @@ +export const input = { + title: 'MyArray', + type: 'array', + items: { + type: 'string' + }, + tsReadonly: true +} + +export const options = { + readonlyByDefault: true +} diff --git a/test/e2e/readonlyArray.readonlyByDefault.optionFalse.ts b/test/e2e/readonlyArray.readonlyByDefault.optionFalse.ts new file mode 100644 index 00000000..cc39d98f --- /dev/null +++ b/test/e2e/readonlyArray.readonlyByDefault.optionFalse.ts @@ -0,0 +1,12 @@ +export const input = { + title: 'MyArray', + type: 'array', + items: { + type: 'string' + } +} + +export const options = { + readonlyByDefault: true, + readonlyKeyword: false +} diff --git a/test/e2e/readonlyArray.readonlyByDefault.optionTrue.ts b/test/e2e/readonlyArray.readonlyByDefault.optionTrue.ts new file mode 100644 index 00000000..d987c066 --- /dev/null +++ b/test/e2e/readonlyArray.readonlyByDefault.optionTrue.ts @@ -0,0 +1,12 @@ +export const input = { + title: 'MyArray', + type: 'array', + items: { + type: 'string' + } +} + +export const options = { + readonlyByDefault: true, + readonlyKeyword: true +} diff --git a/test/e2e/readonlyArray.readonlyByDefault.optionUnspecified.ts b/test/e2e/readonlyArray.readonlyByDefault.optionUnspecified.ts new file mode 100644 index 00000000..d987c066 --- /dev/null +++ b/test/e2e/readonlyArray.readonlyByDefault.optionUnspecified.ts @@ -0,0 +1,12 @@ +export const input = { + title: 'MyArray', + type: 'array', + items: { + type: 'string' + } +} + +export const options = { + readonlyByDefault: true, + readonlyKeyword: true +} diff --git a/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.optionFalse.ts b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.optionFalse.ts new file mode 100644 index 00000000..fa703e2c --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.optionFalse.ts @@ -0,0 +1,29 @@ +export const input = { + type: 'object', + required: ['a', 'b'], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: {}, + tsReadonly: false +} + +export const options = { + readonlyByDefault: true, + readonlyKeyword: false +} diff --git a/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.optionTrue.ts b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.optionTrue.ts new file mode 100644 index 00000000..8c54bdce --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.optionTrue.ts @@ -0,0 +1,29 @@ +export const input = { + type: 'object', + required: ['a', 'b'], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: {}, + tsReadonly: false +} + +export const options = { + readonlyByDefault: true, + readonlyKeyword: true +} diff --git a/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.optionUnspecified.ts new file mode 100644 index 00000000..f5717803 --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.optionUnspecified.ts @@ -0,0 +1,28 @@ +export const input = { + type: 'object', + required: ['a', 'b'], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: {}, + tsReadonly: false +} + +export const options = { + readonlyByDefault: true +} diff --git a/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.optionFalse.ts b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.optionFalse.ts new file mode 100644 index 00000000..6af2596e --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.optionFalse.ts @@ -0,0 +1,31 @@ +export const input = { + type: 'object', + required: ['a', 'b'], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: { + tsReadonly: false + }, + tsReadonly: false +} + +export const options = { + readonlyByDefault: true, + readonlyKeyword: false +} diff --git a/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.optionTrue.ts b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.optionTrue.ts new file mode 100644 index 00000000..5c839e49 --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.optionTrue.ts @@ -0,0 +1,31 @@ +export const input = { + type: 'object', + required: ['a', 'b'], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: { + tsReadonly: false + }, + tsReadonly: false +} + +export const options = { + readonlyByDefault: true, + readonlyKeyword: true +} diff --git a/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.optionUnspecified.ts new file mode 100644 index 00000000..d7b5191f --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.optionUnspecified.ts @@ -0,0 +1,30 @@ +export const input = { + type: 'object', + required: ['a', 'b'], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: { + tsReadonly: false + }, + tsReadonly: false +} + +export const options = { + readonlyByDefault: true +} diff --git a/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.optionFalse.ts b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.optionFalse.ts new file mode 100644 index 00000000..2fbcf0db --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.optionFalse.ts @@ -0,0 +1,31 @@ +export const input = { + type: 'object', + required: ['a', 'b'], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: { + tsReadonly: true + }, + tsReadonly: false +} + +export const options = { + readonlyByDefault: true, + readonlyKeyword: false +} diff --git a/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.optionTrue.ts b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.optionTrue.ts new file mode 100644 index 00000000..96b1cd8e --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.optionTrue.ts @@ -0,0 +1,31 @@ +export const input = { + type: 'object', + required: ['a', 'b'], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: { + tsReadonly: true + }, + tsReadonly: false +} + +export const options = { + readonlyByDefault: true, + readonlyKeyword: true +} diff --git a/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.optionUnspecified.ts new file mode 100644 index 00000000..e80729f3 --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.optionUnspecified.ts @@ -0,0 +1,30 @@ +export const input = { + type: 'object', + required: ['a', 'b'], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: { + tsReadonly: true + }, + tsReadonly: false +} + +export const options = { + readonlyByDefault: true +} diff --git a/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.optionFalse.ts b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.optionFalse.ts new file mode 100644 index 00000000..c2d7325f --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.optionFalse.ts @@ -0,0 +1,29 @@ +export const input = { + type: 'object', + required: ['a', 'b'], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: true, + tsReadonly: false +} + +export const options = { + readonlyByDefault: true, + readonlyKeyword: false +} diff --git a/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.optionTrue.ts b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.optionTrue.ts new file mode 100644 index 00000000..349d1878 --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.optionTrue.ts @@ -0,0 +1,29 @@ +export const input = { + type: 'object', + required: ['a', 'b'], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: true, + tsReadonly: false +} + +export const options = { + readonlyByDefault: true, + readonlyKeyword: true +} diff --git a/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.optionUnspecified.ts new file mode 100644 index 00000000..74efc434 --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.optionUnspecified.ts @@ -0,0 +1,28 @@ +export const input = { + type: 'object', + required: ['a', 'b'], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: true, + tsReadonly: false +} + +export const optionds = { + readonlyByDefault: true +} diff --git a/test/e2e/readonlyInterface.readonlyByDefault.explicitFalse.optionFalse.ts b/test/e2e/readonlyInterface.readonlyByDefault.explicitFalse.optionFalse.ts new file mode 100644 index 00000000..dcb9c45a --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyByDefault.explicitFalse.optionFalse.ts @@ -0,0 +1,29 @@ +export const input = { + type: 'object', + required: ['a', 'b'], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: false, + tsReadonly: false +} + +export const options = { + readonlyByDefault: true, + readonlyKeyword: false +} diff --git a/test/e2e/readonlyInterface.readonlyByDefault.explicitFalse.optionTrue.ts b/test/e2e/readonlyInterface.readonlyByDefault.explicitFalse.optionTrue.ts new file mode 100644 index 00000000..fc1e0c1d --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyByDefault.explicitFalse.optionTrue.ts @@ -0,0 +1,29 @@ +export const input = { + type: 'object', + required: ['a', 'b'], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: false, + tsReadonly: false +} + +export const options = { + readonlyByDefault: true, + readonlyKeyword: true +} diff --git a/test/e2e/readonlyInterface.readonlyByDefault.explicitFalse.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyByDefault.explicitFalse.optionUnspecified.ts new file mode 100644 index 00000000..05559a66 --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyByDefault.explicitFalse.optionUnspecified.ts @@ -0,0 +1,28 @@ +export const input = { + type: 'object', + required: ['a', 'b'], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: false, + tsReadonly: false +} + +export const options = { + readonlyByDefault: true +} diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionFalse.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionFalse.ts new file mode 100644 index 00000000..504fea8c --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionFalse.ts @@ -0,0 +1,28 @@ +export const input = { + type: 'object', + required: ['a', 'b'], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: {} +} + +export const options = { + readonlyByDefault: true, + readonlyKeyword: false +} diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionTrue.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionTrue.ts new file mode 100644 index 00000000..b7aae187 --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionTrue.ts @@ -0,0 +1,28 @@ +export const input = { + type: 'object', + required: ['a', 'b'], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: {} +} + +export const options = { + readonlyByDefault: true, + readonlyKeyword: true +} diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionUnspecified.ts new file mode 100644 index 00000000..ca433793 --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionUnspecified.ts @@ -0,0 +1,27 @@ +export const input = { + type: 'object', + required: ['a', 'b'], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: {} +} + +export const options = { + readonlyByDefault: true +} diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.optionFalse.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.optionFalse.ts new file mode 100644 index 00000000..961755e7 --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.optionFalse.ts @@ -0,0 +1,26 @@ +export const input = { + type: 'object', + required: ['a', 'b'], + properties: { + a: { + type: 'string' + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string' + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: {} +} + +export const options = { + readonlyByDefault: true, + readonlyKeyword: false +} diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.optionTrue.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.optionTrue.ts new file mode 100644 index 00000000..67700587 --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.optionTrue.ts @@ -0,0 +1,26 @@ +export const input = { + type: 'object', + required: ['a', 'b'], + properties: { + a: { + type: 'string' + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string' + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: {} +} + +export const options = { + readonlyByDefault: true, + readonlyKeyword: true +} diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.optionUnspecified.ts new file mode 100644 index 00000000..202c5e11 --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.optionUnspecified.ts @@ -0,0 +1,26 @@ +export const input = { + type: 'object', + required: ['a', 'b'], + properties: { + a: { + type: 'string' + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string' + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: {}, + tsReadonly: true +} + +export const options = { + readonlyByDefault: true +} diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionFalse.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionFalse.ts new file mode 100644 index 00000000..1580f7fb --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionFalse.ts @@ -0,0 +1,30 @@ +export const input = { + type: 'object', + required: ['a', 'b'], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: { + tsReadonly: false + } +} + +export const options = { + readonlyByDefault: true, + readonlyKeyword: false +} diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionTrue.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionTrue.ts new file mode 100644 index 00000000..29fdc641 --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionTrue.ts @@ -0,0 +1,30 @@ +export const input = { + type: 'object', + required: ['a', 'b'], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: { + tsReadonly: false + } +} + +export const options = { + readonlyByDefault: true, + readonlyKeyword: true +} diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionUnspecified.ts new file mode 100644 index 00000000..49fbb153 --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionUnspecified.ts @@ -0,0 +1,29 @@ +export const input = { + type: 'object', + required: ['a', 'b'], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: { + tsReadonly: false + } +} + +export const options = { + readonlyByDefault: true +} diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.optionFalse.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.optionFalse.ts new file mode 100644 index 00000000..e6c78b76 --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.optionFalse.ts @@ -0,0 +1,28 @@ +export const input = { + type: 'object', + required: ['a', 'b'], + properties: { + a: { + type: 'string' + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string' + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: { + tsReadonly: false + } +} + +export const options = { + readonlyByDefault: true, + readonlyKeyword: false +} diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.optionTrue.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.optionTrue.ts new file mode 100644 index 00000000..277723ea --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.optionTrue.ts @@ -0,0 +1,28 @@ +export const input = { + type: 'object', + required: ['a', 'b'], + properties: { + a: { + type: 'string' + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string' + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: { + tsReadonly: false + } +} + +export const options = { + readonlyByDefault: true, + readonlyKeyword: true +} diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.optionUnspecified.ts new file mode 100644 index 00000000..f58afc9c --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.optionUnspecified.ts @@ -0,0 +1,27 @@ +export const input = { + type: 'object', + required: ['a', 'b'], + properties: { + a: { + type: 'string' + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string' + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: { + tsReadonly: false + } +} + +export const options = { + readonlyByDefault: true +} diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionFalse.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionFalse.ts new file mode 100644 index 00000000..2fb22bcc --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionFalse.ts @@ -0,0 +1,30 @@ +export const input = { + type: 'object', + required: ['a', 'b'], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: { + tsReadonly: true + } +} + +export const options = { + readonlyByDefault: true, + readonlyKeyword: false +} diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionTrue.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionTrue.ts new file mode 100644 index 00000000..87f5d107 --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionTrue.ts @@ -0,0 +1,30 @@ +export const input = { + type: 'object', + required: ['a', 'b'], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: { + tsReadonly: true + } +} + +export const options = { + readonlyByDefault: true, + readonlyKeyword: true +} diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionUnspecified.ts new file mode 100644 index 00000000..61865f7e --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionUnspecified.ts @@ -0,0 +1,29 @@ +export const input = { + type: 'object', + required: ['a', 'b'], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: { + tsReadonly: true + } +} + +export const options = { + readonlyByDefault: true +} diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.optionFalse.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.optionFalse.ts new file mode 100644 index 00000000..e606454b --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.optionFalse.ts @@ -0,0 +1,28 @@ +export const input = { + type: 'object', + required: ['a', 'b'], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: true +} + +export const options = { + readonlyByDefault: true, + readonlyKeyword: false +} diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.optionTrue.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.optionTrue.ts new file mode 100644 index 00000000..218872ec --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.optionTrue.ts @@ -0,0 +1,28 @@ +export const input = { + type: 'object', + required: ['a', 'b'], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: true +} + +export const options = { + readonlyByDefault: true, + readonlyKeyword: true +} diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.optionUnspecified.ts new file mode 100644 index 00000000..22af8ee1 --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.optionUnspecified.ts @@ -0,0 +1,27 @@ +export const input = { + type: 'object', + required: ['a', 'b'], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: true +} + +export const options = { + readonlyByDefault: true +} diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.optionFalse.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.optionFalse.ts new file mode 100644 index 00000000..a04cbb33 --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.optionFalse.ts @@ -0,0 +1,26 @@ +export const input = { + type: 'object', + required: ['a', 'b'], + properties: { + a: { + type: 'string' + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string' + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: true +} + +export const options = { + readonlyByDefault: true, + readonlyKeyword: false +} diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.optionTrue.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.optionTrue.ts new file mode 100644 index 00000000..887e3d39 --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.optionTrue.ts @@ -0,0 +1,26 @@ +export const input = { + type: 'object', + required: ['a', 'b'], + properties: { + a: { + type: 'string' + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string' + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: true +} + +export const options = { + readonlyByDefault: true, + readonlyKeyword: true +} diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.optionUnspecified.ts new file mode 100644 index 00000000..d8180072 --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.optionUnspecified.ts @@ -0,0 +1,25 @@ +export const input = { + type: 'object', + required: ['a', 'b'], + properties: { + a: { + type: 'string' + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string' + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: true +} + +export const options = { + readonlyByDefault: true +} diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.optionFalse.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.optionFalse.ts new file mode 100644 index 00000000..c48af2e0 --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.optionFalse.ts @@ -0,0 +1,28 @@ +export const input = { + type: 'object', + required: ['a', 'b'], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: false +} + +export const options = { + readonlyByDefault: true, + readonlyKeyword: false +} diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.optionTrue.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.optionTrue.ts new file mode 100644 index 00000000..9e05ab9d --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.optionTrue.ts @@ -0,0 +1,28 @@ +export const input = { + type: 'object', + required: ['a', 'b'], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: false +} + +export const options = { + readonlyByDefault: true, + readonlyKeyword: true +} diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.optionUnspecified.ts new file mode 100644 index 00000000..2ea732d7 --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.optionUnspecified.ts @@ -0,0 +1,27 @@ +export const input = { + type: 'object', + required: ['a', 'b'], + properties: { + a: { + type: 'string', + tsReadonly: true + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string', + tsReadonly: true + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: false +} + +export const options = { + readonlyByDefault: true +} diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.optionFalse.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.optionFalse.ts new file mode 100644 index 00000000..0aa62a2f --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.optionFalse.ts @@ -0,0 +1,26 @@ +export const input = { + type: 'object', + required: ['a', 'b'], + properties: { + a: { + type: 'string' + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string' + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: false +} + +export const options = { + readonlyByDefault: true, + readonlyKeyword: false +} diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.optionTrue.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.optionTrue.ts new file mode 100644 index 00000000..c84feb95 --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.optionTrue.ts @@ -0,0 +1,26 @@ +export const input = { + type: 'object', + required: ['a', 'b'], + properties: { + a: { + type: 'string' + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string' + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: false +} + +export const options = { + readonlyByDefault: true, + readonlyKeyword: true +} diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.optionUnspecified.ts new file mode 100644 index 00000000..226d7a6f --- /dev/null +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.optionUnspecified.ts @@ -0,0 +1,25 @@ +export const input = { + type: 'object', + required: ['a', 'b'], + properties: { + a: { + type: 'string' + }, + b: { + type: 'string', + tsReadonly: false + }, + c: { + type: 'string' + }, + d: { + type: 'string', + tsReadonly: false + } + }, + additionalProperties: false +} + +export const options = { + readonlyByDefault: true +} diff --git a/test/e2e/readonlyTuple.readonlyByDefault.explicitTrue.optionFalse.ts b/test/e2e/readonlyTuple.readonlyByDefault.explicitTrue.optionFalse.ts new file mode 100644 index 00000000..469dc79e --- /dev/null +++ b/test/e2e/readonlyTuple.readonlyByDefault.explicitTrue.optionFalse.ts @@ -0,0 +1,13 @@ +export const input = { + type: 'array', + minItems: 1, + items: { + type: 'string' + }, + tsReadonly: true +} + +export const options = { + readonlyByDefault: true, + readonlyKeyword: false +} diff --git a/test/e2e/readonlyTuple.readonlyByDefault.explicitTrue.optionTrue.ts b/test/e2e/readonlyTuple.readonlyByDefault.explicitTrue.optionTrue.ts new file mode 100644 index 00000000..86bab447 --- /dev/null +++ b/test/e2e/readonlyTuple.readonlyByDefault.explicitTrue.optionTrue.ts @@ -0,0 +1,13 @@ +export const input = { + type: 'array', + minItems: 1, + items: { + type: 'string' + }, + tsReadonly: true +} + +export const options = { + readonlyByDefault: true, + readonlyKeyword: true +} diff --git a/test/e2e/readonlyTuple.readonlyByDefault.explicitTrue.optionUnspecified.ts b/test/e2e/readonlyTuple.readonlyByDefault.explicitTrue.optionUnspecified.ts new file mode 100644 index 00000000..469dc79e --- /dev/null +++ b/test/e2e/readonlyTuple.readonlyByDefault.explicitTrue.optionUnspecified.ts @@ -0,0 +1,13 @@ +export const input = { + type: 'array', + minItems: 1, + items: { + type: 'string' + }, + tsReadonly: true +} + +export const options = { + readonlyByDefault: true, + readonlyKeyword: false +} diff --git a/test/e2e/readonlyTuple.readonlyByDefault.optionFalse.ts b/test/e2e/readonlyTuple.readonlyByDefault.optionFalse.ts new file mode 100644 index 00000000..fd8f8202 --- /dev/null +++ b/test/e2e/readonlyTuple.readonlyByDefault.optionFalse.ts @@ -0,0 +1,12 @@ +export const input = { + type: 'array', + minItems: 1, + items: { + type: 'string' + } +} + +export const options = { + readonlyByDefault: true, + readonlyKeyword: false +} diff --git a/test/e2e/readonlyTuple.readonlyByDefault.optionTrue.ts b/test/e2e/readonlyTuple.readonlyByDefault.optionTrue.ts new file mode 100644 index 00000000..03ac663f --- /dev/null +++ b/test/e2e/readonlyTuple.readonlyByDefault.optionTrue.ts @@ -0,0 +1,12 @@ +export const input = { + type: 'array', + minItems: 1, + items: { + type: 'string' + } +} + +export const options = { + readonlyByDefault: true, + readonlyKeyword: true +} diff --git a/test/e2e/readonlyTuple.readonlyByDefault.optionUnspecified.ts b/test/e2e/readonlyTuple.readonlyByDefault.optionUnspecified.ts new file mode 100644 index 00000000..b785bf0e --- /dev/null +++ b/test/e2e/readonlyTuple.readonlyByDefault.optionUnspecified.ts @@ -0,0 +1,11 @@ +export const input = { + type: 'array', + minItems: 1, + items: { + type: 'string' + } +} + +export const options = { + readonlyByDefault: true +} From 621228d8ee75fc0df3a0bc9f918e0cf2e551c627 Mon Sep 17 00:00:00 2001 From: Ruby Tunaley Date: Fri, 24 Sep 2021 02:33:41 +1000 Subject: [PATCH 06/12] Readonly types - Renamed tests to be more expressive re: the readonlyKeyword option. Updated README. --- README.md | 54 + src/index.ts | 6 +- test/__snapshots__/test/test.ts.md | 2235 +++++++++++++++++ test/__snapshots__/test/test.ts.snap | Bin 35810 -> 39729 bytes ...adonlyArray.explicitFalse.keywordFalse.ts} | 0 ...eadonlyArray.explicitFalse.keywordTrue.ts} | 0 ...Array.explicitFalse.keywordUnspecified.ts} | 0 ...False.ts => readonlyArray.keywordFalse.ts} | 0 ...onTrue.ts => readonlyArray.keywordTrue.ts} | 0 ...ts => readonlyArray.keywordUnspecified.ts} | 0 ...nlyByDefault.explicitTrue.keywordFalse.ts} | 0 ...onlyByDefault.explicitTrue.keywordTrue.ts} | 0 ...efault.explicitTrue.keywordUnspecified.ts} | 0 ...lyArray.readonlyByDefault.keywordFalse.ts} | 0 ...nlyArray.readonlyByDefault.keywordTrue.ts} | 0 ...y.readonlyByDefault.keywordUnspecified.ts} | 0 ...EmptySchema.explicitFalse.keywordFalse.ts} | 0 ...sEmptySchema.explicitFalse.keywordTrue.ts} | 0 ...chema.explicitFalse.keywordUnspecified.ts} | 0 ...onalPropertiesEmptySchema.keywordFalse.ts} | 0 ...ionalPropertiesEmptySchema.keywordTrue.ts} | 0 ...opertiesEmptySchema.keywordUnspecified.ts} | 0 ...tiesRoFalse.explicitFalse.keywordFalse.ts} | 0 ...rtiesRoFalse.explicitFalse.keywordTrue.ts} | 0 ...False.explicitFalse.keywordUnspecified.ts} | 0 ...rtiesRoTrue.explicitFalse.keywordFalse.ts} | 0 ...ertiesRoTrue.explicitFalse.keywordTrue.ts} | 0 ...oTrue.explicitFalse.keywordUnspecified.ts} | 0 ...dditionalPropertiesRoTrue.keywordFalse.ts} | 0 ...additionalPropertiesRoTrue.keywordTrue.ts} | 0 ...nalPropertiesRoTrue.keywordUnspecified.ts} | 0 ...pertiesTrue.explicitFalse.keywordFalse.ts} | 0 ...opertiesTrue.explicitFalse.keywordTrue.ts} | 0 ...sTrue.explicitFalse.keywordUnspecified.ts} | 0 ....additionalPropertiesTrue.keywordFalse.ts} | 0 ...e.additionalPropertiesTrue.keywordTrue.ts} | 0 ...ionalPropertiesTrue.keywordUnspecified.ts} | 0 ...lyInterface.explicitFalse.keywordFalse.ts} | 0 ...nlyInterface.explicitFalse.keywordTrue.ts} | 0 ...rface.explicitFalse.keywordUnspecified.ts} | 0 ...e.ts => readonlyInterface.keywordFalse.ts} | 0 ...ue.ts => readonlyInterface.keywordTrue.ts} | 0 ...> readonlyInterface.keywordUnspecified.ts} | 0 ...EmptySchema.explicitFalse.keywordFalse.ts} | 0 ...sEmptySchema.explicitFalse.keywordTrue.ts} | 0 ...chema.explicitFalse.keywordUnspecified.ts} | 0 ...tiesRoFalse.explicitFalse.keywordFalse.ts} | 0 ...rtiesRoFalse.explicitFalse.keywordTrue.ts} | 0 ...False.explicitFalse.keywordUnspecified.ts} | 0 ...rtiesRoTrue.explicitFalse.keywordFalse.ts} | 0 ...ertiesRoTrue.explicitFalse.keywordTrue.ts} | 0 ...oTrue.explicitFalse.keywordUnspecified.ts} | 0 ...pertiesTrue.explicitFalse.keywordFalse.ts} | 0 ...opertiesTrue.explicitFalse.keywordTrue.ts} | 0 ...sTrue.explicitFalse.keywordUnspecified.ts} | 0 ...lyByDefault.explicitFalse.keywordFalse.ts} | 0 ...nlyByDefault.explicitFalse.keywordTrue.ts} | 0 ...fault.explicitFalse.keywordUnspecified.ts} | 0 ...sEmptySchema.explicitTrue.keywordFalse.ts} | 0 ...esEmptySchema.explicitTrue.keywordTrue.ts} | 0 ...Schema.explicitTrue.keywordUnspecified.ts} | 0 ...onalPropertiesEmptySchema.keywordFalse.ts} | 0 ...ionalPropertiesEmptySchema.keywordTrue.ts} | 0 ...opertiesEmptySchema.keywordUnspecified.ts} | 0 ...rtiesRoFalse.explicitTrue.keywordFalse.ts} | 0 ...ertiesRoFalse.explicitTrue.keywordTrue.ts} | 0 ...oFalse.explicitTrue.keywordUnspecified.ts} | 0 ...ditionalPropertiesRoFalse.keywordFalse.ts} | 0 ...dditionalPropertiesRoFalse.keywordTrue.ts} | 0 ...alPropertiesRoFalse.keywordUnspecified.ts} | 0 ...ertiesRoTrue.explicitTrue.keywordFalse.ts} | 0 ...pertiesRoTrue.explicitTrue.keywordTrue.ts} | 0 ...RoTrue.explicitTrue.keywordUnspecified.ts} | 0 ...opertiesTrue.explicitTrue.keywordFalse.ts} | 0 ...ropertiesTrue.explicitTrue.keywordTrue.ts} | 0 ...esTrue.explicitTrue.keywordUnspecified.ts} | 0 ....additionalPropertiesTrue.keywordFalse.ts} | 0 ...t.additionalPropertiesTrue.keywordTrue.ts} | 0 ...ionalPropertiesTrue.keywordUnspecified.ts} | 0 ...adonlyObject.explicitTrue.keywordFalse.ts} | 0 ...eadonlyObject.explicitTrue.keywordTrue.ts} | 0 ...Object.explicitTrue.keywordUnspecified.ts} | 0 ...yByDefault.readonlyObject.keywordFalse.ts} | 0 ...lyByDefault.readonlyObject.keywordTrue.ts} | 0 ...ault.readonlyObject.keywordUnspecified.ts} | 0 ...sEmptySchema.explicitTrue.keywordFalse.ts} | 0 ...esEmptySchema.explicitTrue.keywordTrue.ts} | 0 ...Schema.explicitTrue.keywordUnspecified.ts} | 0 ...onalPropertiesEmptySchema.keywordFalse.ts} | 0 ...ionalPropertiesEmptySchema.keywordTrue.ts} | 0 ...opertiesEmptySchema.keywordUnspecified.ts} | 0 ...rtiesRoFalse.explicitTrue.keywordFalse.ts} | 0 ...ertiesRoFalse.explicitTrue.keywordTrue.ts} | 0 ...oFalse.explicitTrue.keywordUnspecified.ts} | 0 ...ditionalPropertiesRoFalse.keywordFalse.ts} | 0 ...dditionalPropertiesRoFalse.keywordTrue.ts} | 0 ...alPropertiesRoFalse.keywordUnspecified.ts} | 0 ...ertiesRoTrue.explicitTrue.keywordFalse.ts} | 0 ...pertiesRoTrue.explicitTrue.keywordTrue.ts} | 0 ...RoTrue.explicitTrue.keywordUnspecified.ts} | 0 ...opertiesTrue.explicitTrue.keywordFalse.ts} | 0 ...ropertiesTrue.explicitTrue.keywordTrue.ts} | 0 ...esTrue.explicitTrue.keywordUnspecified.ts} | 0 ....additionalPropertiesTrue.keywordFalse.ts} | 0 ...t.additionalPropertiesTrue.keywordTrue.ts} | 0 ...ionalPropertiesTrue.keywordUnspecified.ts} | 0 ...adonlyObject.explicitTrue.keywordFalse.ts} | 0 ...eadonlyObject.explicitTrue.keywordTrue.ts} | 0 ...Object.explicitTrue.keywordUnspecified.ts} | 0 ...yInterface.readonlyObject.keywordFalse.ts} | 0 ...lyInterface.readonlyObject.keywordTrue.ts} | 0 ...face.readonlyObject.keywordUnspecified.ts} | 0 ...adonlyTuple.explicitFalse.keywordFalse.ts} | 0 ...eadonlyTuple.explicitFalse.keywordTrue.ts} | 0 ...Tuple.explicitFalse.keywordUnspecified.ts} | 0 ...False.ts => readonlyTuple.keywordFalse.ts} | 0 ...onTrue.ts => readonlyTuple.keywordTrue.ts} | 0 ...ts => readonlyTuple.keywordUnspecified.ts} | 0 ...nlyByDefault.explicitTrue.keywordFalse.ts} | 0 ...onlyByDefault.explicitTrue.keywordTrue.ts} | 0 ...efault.explicitTrue.keywordUnspecified.ts} | 0 ...lyTuple.readonlyByDefault.keywordFalse.ts} | 0 ...nlyTuple.readonlyByDefault.keywordTrue.ts} | 0 ...e.readonlyByDefault.keywordUnspecified.ts} | 0 124 files changed, 2292 insertions(+), 3 deletions(-) rename test/e2e/{readonlyArray.explicitFalse.optionFalse.ts => readonlyArray.explicitFalse.keywordFalse.ts} (100%) rename test/e2e/{readonlyArray.explicitFalse.optionTrue.ts => readonlyArray.explicitFalse.keywordTrue.ts} (100%) rename test/e2e/{readonlyArray.explicitFalse.optionUnspecified.ts => readonlyArray.explicitFalse.keywordUnspecified.ts} (100%) rename test/e2e/{readonlyArray.optionFalse.ts => readonlyArray.keywordFalse.ts} (100%) rename test/e2e/{readonlyArray.optionTrue.ts => readonlyArray.keywordTrue.ts} (100%) rename test/e2e/{readonlyArray.optionUnspecified.ts => readonlyArray.keywordUnspecified.ts} (100%) rename test/e2e/{readonlyArray.readonlyByDefault.explicitTrue.optionFalse.ts => readonlyArray.readonlyByDefault.explicitTrue.keywordFalse.ts} (100%) rename test/e2e/{readonlyArray.readonlyByDefault.explicitTrue.optionTrue.ts => readonlyArray.readonlyByDefault.explicitTrue.keywordTrue.ts} (100%) rename test/e2e/{readonlyArray.readonlyByDefault.explicitTrue.optionUnspecified.ts => readonlyArray.readonlyByDefault.explicitTrue.keywordUnspecified.ts} (100%) rename test/e2e/{readonlyArray.readonlyByDefault.optionFalse.ts => readonlyArray.readonlyByDefault.keywordFalse.ts} (100%) rename test/e2e/{readonlyArray.readonlyByDefault.optionTrue.ts => readonlyArray.readonlyByDefault.keywordTrue.ts} (100%) rename test/e2e/{readonlyArray.readonlyByDefault.optionUnspecified.ts => readonlyArray.readonlyByDefault.keywordUnspecified.ts} (100%) rename test/e2e/{readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.optionFalse.ts => readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.keywordFalse.ts} (100%) rename test/e2e/{readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.optionTrue.ts => readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.keywordTrue.ts} (100%) rename test/e2e/{readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.optionUnspecified.ts => readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.keywordUnspecified.ts} (100%) rename test/e2e/{readonlyInterface.additionalPropertiesEmptySchema.optionFalse.ts => readonlyInterface.additionalPropertiesEmptySchema.keywordFalse.ts} (100%) rename test/e2e/{readonlyInterface.additionalPropertiesEmptySchema.optionTrue.ts => readonlyInterface.additionalPropertiesEmptySchema.keywordTrue.ts} (100%) rename test/e2e/{readonlyInterface.additionalPropertiesEmptySchema.optionUnspecified.ts => readonlyInterface.additionalPropertiesEmptySchema.keywordUnspecified.ts} (100%) rename test/e2e/{readonlyInterface.additionalPropertiesRoFalse.explicitFalse.optionFalse.ts => readonlyInterface.additionalPropertiesRoFalse.explicitFalse.keywordFalse.ts} (100%) rename test/e2e/{readonlyInterface.additionalPropertiesRoFalse.explicitFalse.optionTrue.ts => readonlyInterface.additionalPropertiesRoFalse.explicitFalse.keywordTrue.ts} (100%) rename test/e2e/{readonlyInterface.additionalPropertiesRoFalse.explicitFalse.optionUnspecified.ts => readonlyInterface.additionalPropertiesRoFalse.explicitFalse.keywordUnspecified.ts} (100%) rename test/e2e/{readonlyInterface.additionalPropertiesRoTrue.explicitFalse.optionFalse.ts => readonlyInterface.additionalPropertiesRoTrue.explicitFalse.keywordFalse.ts} (100%) rename test/e2e/{readonlyInterface.additionalPropertiesRoTrue.explicitFalse.optionTrue.ts => readonlyInterface.additionalPropertiesRoTrue.explicitFalse.keywordTrue.ts} (100%) rename test/e2e/{readonlyInterface.additionalPropertiesRoTrue.explicitFalse.optionUnspecified.ts => readonlyInterface.additionalPropertiesRoTrue.explicitFalse.keywordUnspecified.ts} (100%) rename test/e2e/{readonlyInterface.additionalPropertiesRoTrue.optionFalse.ts => readonlyInterface.additionalPropertiesRoTrue.keywordFalse.ts} (100%) rename test/e2e/{readonlyInterface.additionalPropertiesRoTrue.optionTrue.ts => readonlyInterface.additionalPropertiesRoTrue.keywordTrue.ts} (100%) rename test/e2e/{readonlyInterface.additionalPropertiesRoTrue.optionUnspecified.ts => readonlyInterface.additionalPropertiesRoTrue.keywordUnspecified.ts} (100%) rename test/e2e/{readonlyInterface.additionalPropertiesTrue.explicitFalse.optionFalse.ts => readonlyInterface.additionalPropertiesTrue.explicitFalse.keywordFalse.ts} (100%) rename test/e2e/{readonlyInterface.additionalPropertiesTrue.explicitFalse.optionTrue.ts => readonlyInterface.additionalPropertiesTrue.explicitFalse.keywordTrue.ts} (100%) rename test/e2e/{readonlyInterface.additionalPropertiesTrue.explicitFalse.optionUnspecified.ts => readonlyInterface.additionalPropertiesTrue.explicitFalse.keywordUnspecified.ts} (100%) rename test/e2e/{readonlyInterface.additionalPropertiesTrue.optionFalse.ts => readonlyInterface.additionalPropertiesTrue.keywordFalse.ts} (100%) rename test/e2e/{readonlyInterface.additionalPropertiesTrue.optionTrue.ts => readonlyInterface.additionalPropertiesTrue.keywordTrue.ts} (100%) rename test/e2e/{readonlyInterface.additionalPropertiesTrue.optionUnspecified.ts => readonlyInterface.additionalPropertiesTrue.keywordUnspecified.ts} (100%) rename test/e2e/{readonlyInterface.explicitFalse.optionFalse.ts => readonlyInterface.explicitFalse.keywordFalse.ts} (100%) rename test/e2e/{readonlyInterface.explicitFalse.optionTrue.ts => readonlyInterface.explicitFalse.keywordTrue.ts} (100%) rename test/e2e/{readonlyInterface.explicitFalse.optionUnspecified.ts => readonlyInterface.explicitFalse.keywordUnspecified.ts} (100%) rename test/e2e/{readonlyInterface.optionFalse.ts => readonlyInterface.keywordFalse.ts} (100%) rename test/e2e/{readonlyInterface.optionTrue.ts => readonlyInterface.keywordTrue.ts} (100%) rename test/e2e/{readonlyInterface.optionUnspecified.ts => readonlyInterface.keywordUnspecified.ts} (100%) rename test/e2e/{readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.optionFalse.ts => readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.keywordFalse.ts} (100%) rename test/e2e/{readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.optionTrue.ts => readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.keywordTrue.ts} (100%) rename test/e2e/{readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.optionUnspecified.ts => readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.keywordUnspecified.ts} (100%) rename test/e2e/{readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.optionFalse.ts => readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.keywordFalse.ts} (100%) rename test/e2e/{readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.optionTrue.ts => readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.keywordTrue.ts} (100%) rename test/e2e/{readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.optionUnspecified.ts => readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.keywordUnspecified.ts} (100%) rename test/e2e/{readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.optionFalse.ts => readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.keywordFalse.ts} (100%) rename test/e2e/{readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.optionTrue.ts => readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.keywordTrue.ts} (100%) rename test/e2e/{readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.optionUnspecified.ts => readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.keywordUnspecified.ts} (100%) rename test/e2e/{readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.optionFalse.ts => readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.keywordFalse.ts} (100%) rename test/e2e/{readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.optionTrue.ts => readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.keywordTrue.ts} (100%) rename test/e2e/{readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.optionUnspecified.ts => readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.keywordUnspecified.ts} (100%) rename test/e2e/{readonlyInterface.readonlyByDefault.explicitFalse.optionFalse.ts => readonlyInterface.readonlyByDefault.explicitFalse.keywordFalse.ts} (100%) rename test/e2e/{readonlyInterface.readonlyByDefault.explicitFalse.optionTrue.ts => readonlyInterface.readonlyByDefault.explicitFalse.keywordTrue.ts} (100%) rename test/e2e/{readonlyInterface.readonlyByDefault.explicitFalse.optionUnspecified.ts => readonlyInterface.readonlyByDefault.explicitFalse.keywordUnspecified.ts} (100%) rename test/e2e/{readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionFalse.ts => readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordFalse.ts} (100%) rename test/e2e/{readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionTrue.ts => readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordTrue.ts} (100%) rename test/e2e/{readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionUnspecified.ts => readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordUnspecified.ts} (100%) rename test/e2e/{readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.optionFalse.ts => readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.keywordFalse.ts} (100%) rename test/e2e/{readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.optionTrue.ts => readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.keywordTrue.ts} (100%) rename test/e2e/{readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.optionUnspecified.ts => readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.keywordUnspecified.ts} (100%) rename test/e2e/{readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionFalse.ts => readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordFalse.ts} (100%) rename test/e2e/{readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionTrue.ts => readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordTrue.ts} (100%) rename test/e2e/{readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionUnspecified.ts => readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordUnspecified.ts} (100%) rename test/e2e/{readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.optionFalse.ts => readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.keywordFalse.ts} (100%) rename test/e2e/{readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.optionTrue.ts => readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.keywordTrue.ts} (100%) rename test/e2e/{readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.optionUnspecified.ts => readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.keywordUnspecified.ts} (100%) rename test/e2e/{readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionFalse.ts => readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordFalse.ts} (100%) rename test/e2e/{readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionTrue.ts => readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordTrue.ts} (100%) rename test/e2e/{readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionUnspecified.ts => readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordUnspecified.ts} (100%) rename test/e2e/{readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.optionFalse.ts => readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordFalse.ts} (100%) rename test/e2e/{readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.optionTrue.ts => readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordTrue.ts} (100%) rename test/e2e/{readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.optionUnspecified.ts => readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordUnspecified.ts} (100%) rename test/e2e/{readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.optionFalse.ts => readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.keywordFalse.ts} (100%) rename test/e2e/{readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.optionTrue.ts => readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.keywordTrue.ts} (100%) rename test/e2e/{readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.optionUnspecified.ts => readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.keywordUnspecified.ts} (100%) rename test/e2e/{readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.optionFalse.ts => readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.keywordFalse.ts} (100%) rename test/e2e/{readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.optionTrue.ts => readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.keywordTrue.ts} (100%) rename test/e2e/{readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.optionUnspecified.ts => readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.keywordUnspecified.ts} (100%) rename test/e2e/{readonlyInterface.readonlyByDefault.readonlyObject.optionFalse.ts => readonlyInterface.readonlyByDefault.readonlyObject.keywordFalse.ts} (100%) rename test/e2e/{readonlyInterface.readonlyByDefault.readonlyObject.optionTrue.ts => readonlyInterface.readonlyByDefault.readonlyObject.keywordTrue.ts} (100%) rename test/e2e/{readonlyInterface.readonlyByDefault.readonlyObject.optionUnspecified.ts => readonlyInterface.readonlyByDefault.readonlyObject.keywordUnspecified.ts} (100%) rename test/e2e/{readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionFalse.ts => readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordFalse.ts} (100%) rename test/e2e/{readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionTrue.ts => readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordTrue.ts} (100%) rename test/e2e/{readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionUnspecified.ts => readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordUnspecified.ts} (100%) rename test/e2e/{readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.optionFalse.ts => readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.keywordFalse.ts} (100%) rename test/e2e/{readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.optionTrue.ts => readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.keywordTrue.ts} (100%) rename test/e2e/{readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.optionUnspecified.ts => readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.keywordUnspecified.ts} (100%) rename test/e2e/{readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionFalse.ts => readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordFalse.ts} (100%) rename test/e2e/{readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionTrue.ts => readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordTrue.ts} (100%) rename test/e2e/{readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionUnspecified.ts => readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordUnspecified.ts} (100%) rename test/e2e/{readonlyInterface.readonlyObject.additionalPropertiesRoFalse.optionFalse.ts => readonlyInterface.readonlyObject.additionalPropertiesRoFalse.keywordFalse.ts} (100%) rename test/e2e/{readonlyInterface.readonlyObject.additionalPropertiesRoFalse.optionTrue.ts => readonlyInterface.readonlyObject.additionalPropertiesRoFalse.keywordTrue.ts} (100%) rename test/e2e/{readonlyInterface.readonlyObject.additionalPropertiesRoFalse.optionUnspecified.ts => readonlyInterface.readonlyObject.additionalPropertiesRoFalse.keywordUnspecified.ts} (100%) rename test/e2e/{readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionFalse.ts => readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordFalse.ts} (100%) rename test/e2e/{readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionTrue.ts => readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordTrue.ts} (100%) rename test/e2e/{readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionUnspecified.ts => readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordUnspecified.ts} (100%) rename test/e2e/{readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.optionFalse.ts => readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordFalse.ts} (100%) rename test/e2e/{readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.optionTrue.ts => readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordTrue.ts} (100%) rename test/e2e/{readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.optionUnspecified.ts => readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordUnspecified.ts} (100%) rename test/e2e/{readonlyInterface.readonlyObject.additionalPropertiesTrue.optionFalse.ts => readonlyInterface.readonlyObject.additionalPropertiesTrue.keywordFalse.ts} (100%) rename test/e2e/{readonlyInterface.readonlyObject.additionalPropertiesTrue.optionTrue.ts => readonlyInterface.readonlyObject.additionalPropertiesTrue.keywordTrue.ts} (100%) rename test/e2e/{readonlyInterface.readonlyObject.additionalPropertiesTrue.optionUnspecified.ts => readonlyInterface.readonlyObject.additionalPropertiesTrue.keywordUnspecified.ts} (100%) rename test/e2e/{readonlyInterface.readonlyObject.explicitTrue.optionFalse.ts => readonlyInterface.readonlyObject.explicitTrue.keywordFalse.ts} (100%) rename test/e2e/{readonlyInterface.readonlyObject.explicitTrue.optionTrue.ts => readonlyInterface.readonlyObject.explicitTrue.keywordTrue.ts} (100%) rename test/e2e/{readonlyInterface.readonlyObject.explicitTrue.optionUnspecified.ts => readonlyInterface.readonlyObject.explicitTrue.keywordUnspecified.ts} (100%) rename test/e2e/{readonlyInterface.readonlyObject.optionFalse.ts => readonlyInterface.readonlyObject.keywordFalse.ts} (100%) rename test/e2e/{readonlyInterface.readonlyObject.optionTrue.ts => readonlyInterface.readonlyObject.keywordTrue.ts} (100%) rename test/e2e/{readonlyInterface.readonlyObject.optionUnspecified.ts => readonlyInterface.readonlyObject.keywordUnspecified.ts} (100%) rename test/e2e/{readonlyTuple.explicitFalse.optionFalse.ts => readonlyTuple.explicitFalse.keywordFalse.ts} (100%) rename test/e2e/{readonlyTuple.explicitFalse.optionTrue.ts => readonlyTuple.explicitFalse.keywordTrue.ts} (100%) rename test/e2e/{readonlyTuple.explicitFalse.optionUnspecified.ts => readonlyTuple.explicitFalse.keywordUnspecified.ts} (100%) rename test/e2e/{readonlyTuple.optionFalse.ts => readonlyTuple.keywordFalse.ts} (100%) rename test/e2e/{readonlyTuple.optionTrue.ts => readonlyTuple.keywordTrue.ts} (100%) rename test/e2e/{readonlyTuple.optionUnspecified.ts => readonlyTuple.keywordUnspecified.ts} (100%) rename test/e2e/{readonlyTuple.readonlyByDefault.explicitTrue.optionFalse.ts => readonlyTuple.readonlyByDefault.explicitTrue.keywordFalse.ts} (100%) rename test/e2e/{readonlyTuple.readonlyByDefault.explicitTrue.optionTrue.ts => readonlyTuple.readonlyByDefault.explicitTrue.keywordTrue.ts} (100%) rename test/e2e/{readonlyTuple.readonlyByDefault.explicitTrue.optionUnspecified.ts => readonlyTuple.readonlyByDefault.explicitTrue.keywordUnspecified.ts} (100%) rename test/e2e/{readonlyTuple.readonlyByDefault.optionFalse.ts => readonlyTuple.readonlyByDefault.keywordFalse.ts} (100%) rename test/e2e/{readonlyTuple.readonlyByDefault.optionTrue.ts => readonlyTuple.readonlyByDefault.keywordTrue.ts} (100%) rename test/e2e/{readonlyTuple.readonlyByDefault.optionUnspecified.ts => readonlyTuple.readonlyByDefault.keywordUnspecified.ts} (100%) diff --git a/README.md b/README.md index 51f857da..8b97fc49 100644 --- a/README.md +++ b/README.md @@ -93,6 +93,8 @@ See [server demo](example) and [browser demo](https://github.com/bcherny/json-sc | unknownAny | boolean | `true` | Use `unknown` instead of `any` where possible | | unreachableDefinitions | boolean | `false` | Generates code for `definitions` that aren't referenced by the schema. | | strictIndexSignatures | boolean | `false` | Append all index signatures with `\| undefined` so that they are strictly typed. | +| readonlyByDefault | boolean | `false` | This is the implied value for unspecified `"tsReadonly"` properties. | +| readonlyKeyword | boolean | `true` | Use the `readonly` keyword instead of `ReadonlyArray` for `array` types. **WARNING:** Setting this to `false` will disable readonly tuple support. | | $refOptions | object | `{}` | [$RefParser](https://github.com/BigstickCarpet/json-schema-ref-parser) Options, used when resolving `$ref`s | ## CLI @@ -164,11 +166,63 @@ json2ts -i foo.json -o foo.d.ts --style.singleQuote --no-style.semi - [x] literal objects in enum ([eg](https://github.com/tdegrunt/jsonschema/blob/67c0e27ce9542efde0bf43dc1b2a95dd87df43c3/examples/all.js#L236)) - [x] referencing schema by id ([eg](https://github.com/tdegrunt/jsonschema/blob/67c0e27ce9542efde0bf43dc1b2a95dd87df43c3/examples/all.js#L331)) - [x] custom typescript types via `tsType` +- [x] support for `readonly` types via `tsReadonly` ## Custom schema properties: - `tsType`: Overrides the type that's generated from the schema. Useful for forcing a type to `any` or when using non-standard JSON schema extensions ([eg](https://github.com/sokra/json-schema-to-typescript/blob/f1f40307cf5efa328522bb1c9ae0b0d9e5f367aa/test/e2e/customType.ts)). - `tsEnumNames`: Overrides the names used for the elements in an enum. Can also be used to create string enums ([eg](https://github.com/johnbillion/wp-json-schemas/blob/647440573e4a675f15880c95fcca513fdf7a2077/schemas/properties/post-status-name.json)). +- `tsReadonly`: Sets whether an array or object property is `readonly` in TypeScript. + + ```json + // readonlyByDefault: false + { + "anyOf": [ + { + "type": "array", + "items": { + "type": "string" + }, + "tsReadonly": true + // Compiles to `readonly string[]` + }, + { + "type": "object", + "properties": { + "foo": { + "type": "string", + "tsReadonly": true + } + }, + "additionalProperties": { + "type": "number", + "tsReadonly": true + } + // Compiles to `{ readonly foo: string, readonly [k: string]: number }` + } + ] + } + ``` + + When used on a schema with `"type": "object"`, sets the default `tsReadonly` state for all of its properties. + + ```json + { + "type": "object", + "tsReadonly": true, + "properties": { + "foo": { + // This property is readonly + }, + "bar": { + // This property is mutable because we explicitly override the object's default + "tsReadonly": false + } + } + } + ``` + + If unspecified, defaults to the value of the *readonlyByDefault* option. ## Not expressible in TypeScript: diff --git a/src/index.ts b/src/index.ts index 56e2a78e..a50ecc77 100644 --- a/src/index.ts +++ b/src/index.ts @@ -43,13 +43,13 @@ export interface Options { */ ignoreMinAndMaxItems: boolean /** - * Types must be explicitly marked as mutable using `"tsReadonly": false`. + * This is the implied value for unspecified `"tsReadonly"` properties. */ readonlyByDefault: boolean /** - * Use the `readonly` keyword instead of `Readonly` for array types? + * Use the `readonly` keyword instead of `ReadonlyArray` for array types. * - * Setting this to `false` will disable readonly tuple support. + * **WARNING:** Setting this to `false` will disable readonly tuple support. */ readonlyKeyword: boolean /** diff --git a/test/__snapshots__/test/test.ts.md b/test/__snapshots__/test/test.ts.md index 58f08c65..00083c9a 100644 --- a/test/__snapshots__/test/test.ts.md +++ b/test/__snapshots__/test/test.ts.md @@ -11273,3 +11273,2238 @@ Generated by [AVA](https://avajs.dev). ␊ export type ReadonlyTupleReadonlyByDefault = readonly [string, ...string[]];␊ ` + +## readonlyArray.explicitFalse.keywordFalse.js + +> Expected output to match snapshot for e2e test: readonlyArray.explicitFalse.keywordFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export type MyArray = string[];␊ + ` + +## readonlyArray.explicitFalse.keywordTrue.js + +> Expected output to match snapshot for e2e test: readonlyArray.explicitFalse.keywordTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export type MyArray = string[];␊ + ` + +## readonlyArray.explicitFalse.keywordUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyArray.explicitFalse.keywordUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export type MyArray = string[];␊ + ` + +## readonlyArray.keywordFalse.js + +> Expected output to match snapshot for e2e test: readonlyArray.keywordFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export type MyArray = ReadonlyArray;␊ + ` + +## readonlyArray.keywordTrue.js + +> Expected output to match snapshot for e2e test: readonlyArray.keywordTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export type MyArray = readonly string[];␊ + ` + +## readonlyArray.keywordUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyArray.keywordUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export type MyArray = readonly string[];␊ + ` + +## readonlyArray.readonlyByDefault.explicitTrue.keywordFalse.js + +> Expected output to match snapshot for e2e test: readonlyArray.readonlyByDefault.explicitTrue.keywordFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export type MyArray = ReadonlyArray;␊ + ` + +## readonlyArray.readonlyByDefault.explicitTrue.keywordTrue.js + +> Expected output to match snapshot for e2e test: readonlyArray.readonlyByDefault.explicitTrue.keywordTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export type MyArray = readonly string[];␊ + ` + +## readonlyArray.readonlyByDefault.explicitTrue.keywordUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyArray.readonlyByDefault.explicitTrue.keywordUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export type MyArray = readonly string[];␊ + ` + +## readonlyArray.readonlyByDefault.keywordFalse.js + +> Expected output to match snapshot for e2e test: readonlyArray.readonlyByDefault.keywordFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export type MyArray = ReadonlyArray;␊ + ` + +## readonlyArray.readonlyByDefault.keywordTrue.js + +> Expected output to match snapshot for e2e test: readonlyArray.readonlyByDefault.keywordTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export type MyArray = readonly string[];␊ + ` + +## readonlyArray.readonlyByDefault.keywordUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyArray.readonlyByDefault.keywordUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export type MyArray = readonly string[];␊ + ` + +## readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.keywordFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.keywordFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceAdditionalPropertiesEmptySchemaExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.keywordTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.keywordTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceAdditionalPropertiesEmptySchemaExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.keywordUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.keywordUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceAdditionalPropertiesEmptySchemaExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.additionalPropertiesEmptySchema.keywordFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.additionalPropertiesEmptySchema.keywordFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceAdditionalPropertiesEmptySchema {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.additionalPropertiesEmptySchema.keywordTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.additionalPropertiesEmptySchema.keywordTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceAdditionalPropertiesEmptySchema {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.additionalPropertiesEmptySchema.keywordUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.additionalPropertiesEmptySchema.keywordUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceAdditionalPropertiesEmptySchema {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.additionalPropertiesRoFalse.explicitFalse.keywordFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.additionalPropertiesRoFalse.explicitFalse.keywordFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceAdditionalPropertiesRoFalseExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.additionalPropertiesRoFalse.explicitFalse.keywordTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.additionalPropertiesRoFalse.explicitFalse.keywordTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceAdditionalPropertiesRoFalseExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.additionalPropertiesRoFalse.explicitFalse.keywordUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.additionalPropertiesRoFalse.explicitFalse.keywordUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceAdditionalPropertiesRoFalseExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.additionalPropertiesRoTrue.explicitFalse.keywordFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.additionalPropertiesRoTrue.explicitFalse.keywordFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceAdditionalPropertiesRoTrueExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.additionalPropertiesRoTrue.explicitFalse.keywordTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.additionalPropertiesRoTrue.explicitFalse.keywordTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceAdditionalPropertiesRoTrueExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.additionalPropertiesRoTrue.explicitFalse.keywordUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.additionalPropertiesRoTrue.explicitFalse.keywordUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceAdditionalPropertiesRoTrueExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.additionalPropertiesRoTrue.keywordFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.additionalPropertiesRoTrue.keywordFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceAdditionalPropertiesRoTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.additionalPropertiesRoTrue.keywordTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.additionalPropertiesRoTrue.keywordTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceAdditionalPropertiesRoTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.additionalPropertiesRoTrue.keywordUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.additionalPropertiesRoTrue.keywordUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceAdditionalPropertiesRoTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.additionalPropertiesTrue.explicitFalse.keywordFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.additionalPropertiesTrue.explicitFalse.keywordFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceAdditionalPropertiesTrueExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.additionalPropertiesTrue.explicitFalse.keywordTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.additionalPropertiesTrue.explicitFalse.keywordTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceAdditionalPropertiesTrueExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.additionalPropertiesTrue.explicitFalse.keywordUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.additionalPropertiesTrue.explicitFalse.keywordUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceAdditionalPropertiesTrueExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.additionalPropertiesTrue.keywordFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.additionalPropertiesTrue.keywordFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceAdditionalPropertiesTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.additionalPropertiesTrue.keywordTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.additionalPropertiesTrue.keywordTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceAdditionalPropertiesTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.additionalPropertiesTrue.keywordUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.additionalPropertiesTrue.keywordUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceAdditionalPropertiesTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.explicitFalse.keywordFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.explicitFalse.keywordFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + }␊ + ` + +## readonlyInterface.explicitFalse.keywordTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.explicitFalse.keywordTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + }␊ + ` + +## readonlyInterface.explicitFalse.keywordUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.explicitFalse.keywordUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + }␊ + ` + +## readonlyInterface.keywordFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.keywordFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterface {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + }␊ + ` + +## readonlyInterface.keywordTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.keywordTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterface {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + }␊ + ` + +## readonlyInterface.keywordUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.keywordUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterface {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.keywordFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.keywordFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultAdditionalPropertiesEmptySchemaExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.keywordTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.keywordTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultAdditionalPropertiesEmptySchemaExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.keywordUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.keywordUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultAdditionalPropertiesEmptySchemaExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.keywordFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.keywordFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultAdditionalPropertiesRoFalseExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.keywordTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.keywordTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultAdditionalPropertiesRoFalseExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.keywordUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.keywordUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultAdditionalPropertiesRoFalseExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.keywordFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.keywordFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultAdditionalPropertiesRoTrueExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.keywordTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.keywordTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultAdditionalPropertiesRoTrueExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.keywordUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.keywordUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultAdditionalPropertiesRoTrueExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.keywordFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.keywordFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultAdditionalPropertiesTrueExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.keywordTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.keywordTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultAdditionalPropertiesTrueExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.keywordUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.keywordUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultAdditionalPropertiesTrueExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.explicitFalse.keywordFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.explicitFalse.keywordFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.explicitFalse.keywordTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.explicitFalse.keywordTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.explicitFalse.keywordUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.explicitFalse.keywordUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultExplicitFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObjectAdditionalPropertiesEmptySchemaExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObjectAdditionalPropertiesEmptySchemaExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObjectAdditionalPropertiesEmptySchemaExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.keywordFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.keywordFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObjectAdditionalPropertiesEmptySchema {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.keywordTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.keywordTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObjectAdditionalPropertiesEmptySchema {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.keywordUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.keywordUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObjectAdditionalPropertiesEmptySchema {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObjectAdditionalPropertiesRoFalseExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObjectAdditionalPropertiesRoFalseExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObjectAdditionalPropertiesRoFalseExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.keywordFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.keywordFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObjectAdditionalPropertiesRoFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.keywordTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.keywordTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObjectAdditionalPropertiesRoFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.keywordUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.keywordUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObjectAdditionalPropertiesRoFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObjectAdditionalPropertiesRoTrueExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObjectAdditionalPropertiesRoTrueExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObjectAdditionalPropertiesRoTrueExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObjectAdditionalPropertiesTrueExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObjectAdditionalPropertiesTrueExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObjectAdditionalPropertiesTrueExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.keywordFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.keywordFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObjectAdditionalPropertiesTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.keywordTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.keywordTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObjectAdditionalPropertiesTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.keywordUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.keywordUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObjectAdditionalPropertiesTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.keywordFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.keywordFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObjectExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.keywordTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.keywordTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObjectExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.keywordUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.keywordUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObjectExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.keywordFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.keywordFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObject {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.keywordTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.keywordTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObject {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + }␊ + ` + +## readonlyInterface.readonlyByDefault.readonlyObject.keywordUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyByDefault.readonlyObject.keywordUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyByDefaultReadonlyObject {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObjectAdditionalPropertiesEmptySchemaExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObjectAdditionalPropertiesEmptySchemaExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObjectAdditionalPropertiesEmptySchemaExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.keywordFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.keywordFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObjectAdditionalPropertiesEmptySchema {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.keywordTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.keywordTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObjectAdditionalPropertiesEmptySchema {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.keywordUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.keywordUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObjectAdditionalPropertiesEmptySchema {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObjectAdditionalPropertiesRoFalseExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObjectAdditionalPropertiesRoFalseExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObjectAdditionalPropertiesRoFalseExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.additionalPropertiesRoFalse.keywordFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.additionalPropertiesRoFalse.keywordFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObjectAdditionalPropertiesRoFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.additionalPropertiesRoFalse.keywordTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.additionalPropertiesRoFalse.keywordTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObjectAdditionalPropertiesRoFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.additionalPropertiesRoFalse.keywordUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.additionalPropertiesRoFalse.keywordUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObjectAdditionalPropertiesRoFalse {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObjectAdditionalPropertiesRoTrueExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObjectAdditionalPropertiesRoTrueExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObjectAdditionalPropertiesRoTrueExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObjectAdditionalPropertiesTrueExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObjectAdditionalPropertiesTrueExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObjectAdditionalPropertiesTrueExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.additionalPropertiesTrue.keywordFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.additionalPropertiesTrue.keywordFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObjectAdditionalPropertiesTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.additionalPropertiesTrue.keywordTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.additionalPropertiesTrue.keywordTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObjectAdditionalPropertiesTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.additionalPropertiesTrue.keywordUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.additionalPropertiesTrue.keywordUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObjectAdditionalPropertiesTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + readonly [k: string]: unknown;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.explicitTrue.keywordFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.explicitTrue.keywordFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObjectExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.explicitTrue.keywordTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.explicitTrue.keywordTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObjectExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.explicitTrue.keywordUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.explicitTrue.keywordUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObjectExplicitTrue {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.keywordFalse.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.keywordFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObject {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.keywordTrue.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.keywordTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObject {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + }␊ + ` + +## readonlyInterface.readonlyObject.keywordUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyInterface.readonlyObject.keywordUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterfaceReadonlyObject {␊ + readonly a: string;␊ + b: string;␊ + readonly c?: string;␊ + d?: string;␊ + }␊ + ` + +## readonlyTuple.explicitFalse.keywordFalse.js + +> Expected output to match snapshot for e2e test: readonlyTuple.explicitFalse.keywordFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export type ReadonlyTupleExplicitFalse = [string, ...string[]];␊ + ` + +## readonlyTuple.explicitFalse.keywordTrue.js + +> Expected output to match snapshot for e2e test: readonlyTuple.explicitFalse.keywordTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export type ReadonlyTupleExplicitFalse = [string, ...string[]];␊ + ` + +## readonlyTuple.explicitFalse.keywordUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyTuple.explicitFalse.keywordUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export type ReadonlyTupleExplicitFalse = [string, ...string[]];␊ + ` + +## readonlyTuple.keywordFalse.js + +> Expected output to match snapshot for e2e test: readonlyTuple.keywordFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export type ReadonlyTuple = [string, ...string[]];␊ + ` + +## readonlyTuple.keywordTrue.js + +> Expected output to match snapshot for e2e test: readonlyTuple.keywordTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export type ReadonlyTuple = readonly [string, ...string[]];␊ + ` + +## readonlyTuple.keywordUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyTuple.keywordUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export type ReadonlyTuple = readonly [string, ...string[]];␊ + ` + +## readonlyTuple.readonlyByDefault.explicitTrue.keywordFalse.js + +> Expected output to match snapshot for e2e test: readonlyTuple.readonlyByDefault.explicitTrue.keywordFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export type ReadonlyTupleReadonlyByDefaultExplicitTrue = [string, ...string[]];␊ + ` + +## readonlyTuple.readonlyByDefault.explicitTrue.keywordTrue.js + +> Expected output to match snapshot for e2e test: readonlyTuple.readonlyByDefault.explicitTrue.keywordTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export type ReadonlyTupleReadonlyByDefaultExplicitTrue = readonly [string, ...string[]];␊ + ` + +## readonlyTuple.readonlyByDefault.explicitTrue.keywordUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyTuple.readonlyByDefault.explicitTrue.keywordUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export type ReadonlyTupleReadonlyByDefaultExplicitTrue = [string, ...string[]];␊ + ` + +## readonlyTuple.readonlyByDefault.keywordFalse.js + +> Expected output to match snapshot for e2e test: readonlyTuple.readonlyByDefault.keywordFalse.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export type ReadonlyTupleReadonlyByDefault = [string, ...string[]];␊ + ` + +## readonlyTuple.readonlyByDefault.keywordTrue.js + +> Expected output to match snapshot for e2e test: readonlyTuple.readonlyByDefault.keywordTrue.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export type ReadonlyTupleReadonlyByDefault = readonly [string, ...string[]];␊ + ` + +## readonlyTuple.readonlyByDefault.keywordUnspecified.js + +> Expected output to match snapshot for e2e test: readonlyTuple.readonlyByDefault.keywordUnspecified.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export type ReadonlyTupleReadonlyByDefault = readonly [string, ...string[]];␊ + ` diff --git a/test/__snapshots__/test/test.ts.snap b/test/__snapshots__/test/test.ts.snap index c96a0deb46ecc9ec151396de00d205d1ec97bee8..4785aba7f927869bc298f4b1580def131f0b2f9d 100644 GIT binary patch literal 39729 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 literal 35810 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 N|38R$uGhoB0|3gwf*b$< diff --git a/test/e2e/readonlyArray.explicitFalse.optionFalse.ts b/test/e2e/readonlyArray.explicitFalse.keywordFalse.ts similarity index 100% rename from test/e2e/readonlyArray.explicitFalse.optionFalse.ts rename to test/e2e/readonlyArray.explicitFalse.keywordFalse.ts diff --git a/test/e2e/readonlyArray.explicitFalse.optionTrue.ts b/test/e2e/readonlyArray.explicitFalse.keywordTrue.ts similarity index 100% rename from test/e2e/readonlyArray.explicitFalse.optionTrue.ts rename to test/e2e/readonlyArray.explicitFalse.keywordTrue.ts diff --git a/test/e2e/readonlyArray.explicitFalse.optionUnspecified.ts b/test/e2e/readonlyArray.explicitFalse.keywordUnspecified.ts similarity index 100% rename from test/e2e/readonlyArray.explicitFalse.optionUnspecified.ts rename to test/e2e/readonlyArray.explicitFalse.keywordUnspecified.ts diff --git a/test/e2e/readonlyArray.optionFalse.ts b/test/e2e/readonlyArray.keywordFalse.ts similarity index 100% rename from test/e2e/readonlyArray.optionFalse.ts rename to test/e2e/readonlyArray.keywordFalse.ts diff --git a/test/e2e/readonlyArray.optionTrue.ts b/test/e2e/readonlyArray.keywordTrue.ts similarity index 100% rename from test/e2e/readonlyArray.optionTrue.ts rename to test/e2e/readonlyArray.keywordTrue.ts diff --git a/test/e2e/readonlyArray.optionUnspecified.ts b/test/e2e/readonlyArray.keywordUnspecified.ts similarity index 100% rename from test/e2e/readonlyArray.optionUnspecified.ts rename to test/e2e/readonlyArray.keywordUnspecified.ts diff --git a/test/e2e/readonlyArray.readonlyByDefault.explicitTrue.optionFalse.ts b/test/e2e/readonlyArray.readonlyByDefault.explicitTrue.keywordFalse.ts similarity index 100% rename from test/e2e/readonlyArray.readonlyByDefault.explicitTrue.optionFalse.ts rename to test/e2e/readonlyArray.readonlyByDefault.explicitTrue.keywordFalse.ts diff --git a/test/e2e/readonlyArray.readonlyByDefault.explicitTrue.optionTrue.ts b/test/e2e/readonlyArray.readonlyByDefault.explicitTrue.keywordTrue.ts similarity index 100% rename from test/e2e/readonlyArray.readonlyByDefault.explicitTrue.optionTrue.ts rename to test/e2e/readonlyArray.readonlyByDefault.explicitTrue.keywordTrue.ts diff --git a/test/e2e/readonlyArray.readonlyByDefault.explicitTrue.optionUnspecified.ts b/test/e2e/readonlyArray.readonlyByDefault.explicitTrue.keywordUnspecified.ts similarity index 100% rename from test/e2e/readonlyArray.readonlyByDefault.explicitTrue.optionUnspecified.ts rename to test/e2e/readonlyArray.readonlyByDefault.explicitTrue.keywordUnspecified.ts diff --git a/test/e2e/readonlyArray.readonlyByDefault.optionFalse.ts b/test/e2e/readonlyArray.readonlyByDefault.keywordFalse.ts similarity index 100% rename from test/e2e/readonlyArray.readonlyByDefault.optionFalse.ts rename to test/e2e/readonlyArray.readonlyByDefault.keywordFalse.ts diff --git a/test/e2e/readonlyArray.readonlyByDefault.optionTrue.ts b/test/e2e/readonlyArray.readonlyByDefault.keywordTrue.ts similarity index 100% rename from test/e2e/readonlyArray.readonlyByDefault.optionTrue.ts rename to test/e2e/readonlyArray.readonlyByDefault.keywordTrue.ts diff --git a/test/e2e/readonlyArray.readonlyByDefault.optionUnspecified.ts b/test/e2e/readonlyArray.readonlyByDefault.keywordUnspecified.ts similarity index 100% rename from test/e2e/readonlyArray.readonlyByDefault.optionUnspecified.ts rename to test/e2e/readonlyArray.readonlyByDefault.keywordUnspecified.ts diff --git a/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.optionFalse.ts b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.keywordFalse.ts similarity index 100% rename from test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.optionFalse.ts rename to test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.keywordFalse.ts diff --git a/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.optionTrue.ts b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.keywordTrue.ts similarity index 100% rename from test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.optionTrue.ts rename to test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.keywordTrue.ts diff --git a/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.optionUnspecified.ts b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.keywordUnspecified.ts similarity index 100% rename from test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.optionUnspecified.ts rename to test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.keywordUnspecified.ts diff --git a/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.optionFalse.ts b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.keywordFalse.ts similarity index 100% rename from test/e2e/readonlyInterface.additionalPropertiesEmptySchema.optionFalse.ts rename to test/e2e/readonlyInterface.additionalPropertiesEmptySchema.keywordFalse.ts diff --git a/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.optionTrue.ts b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.keywordTrue.ts similarity index 100% rename from test/e2e/readonlyInterface.additionalPropertiesEmptySchema.optionTrue.ts rename to test/e2e/readonlyInterface.additionalPropertiesEmptySchema.keywordTrue.ts diff --git a/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.optionUnspecified.ts b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.keywordUnspecified.ts similarity index 100% rename from test/e2e/readonlyInterface.additionalPropertiesEmptySchema.optionUnspecified.ts rename to test/e2e/readonlyInterface.additionalPropertiesEmptySchema.keywordUnspecified.ts diff --git a/test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.optionFalse.ts b/test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.keywordFalse.ts similarity index 100% rename from test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.optionFalse.ts rename to test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.keywordFalse.ts diff --git a/test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.optionTrue.ts b/test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.keywordTrue.ts similarity index 100% rename from test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.optionTrue.ts rename to test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.keywordTrue.ts diff --git a/test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.optionUnspecified.ts b/test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.keywordUnspecified.ts similarity index 100% rename from test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.optionUnspecified.ts rename to test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.keywordUnspecified.ts diff --git a/test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.optionFalse.ts b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.keywordFalse.ts similarity index 100% rename from test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.optionFalse.ts rename to test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.keywordFalse.ts diff --git a/test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.optionTrue.ts b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.keywordTrue.ts similarity index 100% rename from test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.optionTrue.ts rename to test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.keywordTrue.ts diff --git a/test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.optionUnspecified.ts b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.keywordUnspecified.ts similarity index 100% rename from test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.optionUnspecified.ts rename to test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.keywordUnspecified.ts diff --git a/test/e2e/readonlyInterface.additionalPropertiesRoTrue.optionFalse.ts b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.keywordFalse.ts similarity index 100% rename from test/e2e/readonlyInterface.additionalPropertiesRoTrue.optionFalse.ts rename to test/e2e/readonlyInterface.additionalPropertiesRoTrue.keywordFalse.ts diff --git a/test/e2e/readonlyInterface.additionalPropertiesRoTrue.optionTrue.ts b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.keywordTrue.ts similarity index 100% rename from test/e2e/readonlyInterface.additionalPropertiesRoTrue.optionTrue.ts rename to test/e2e/readonlyInterface.additionalPropertiesRoTrue.keywordTrue.ts diff --git a/test/e2e/readonlyInterface.additionalPropertiesRoTrue.optionUnspecified.ts b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.keywordUnspecified.ts similarity index 100% rename from test/e2e/readonlyInterface.additionalPropertiesRoTrue.optionUnspecified.ts rename to test/e2e/readonlyInterface.additionalPropertiesRoTrue.keywordUnspecified.ts diff --git a/test/e2e/readonlyInterface.additionalPropertiesTrue.explicitFalse.optionFalse.ts b/test/e2e/readonlyInterface.additionalPropertiesTrue.explicitFalse.keywordFalse.ts similarity index 100% rename from test/e2e/readonlyInterface.additionalPropertiesTrue.explicitFalse.optionFalse.ts rename to test/e2e/readonlyInterface.additionalPropertiesTrue.explicitFalse.keywordFalse.ts diff --git a/test/e2e/readonlyInterface.additionalPropertiesTrue.explicitFalse.optionTrue.ts b/test/e2e/readonlyInterface.additionalPropertiesTrue.explicitFalse.keywordTrue.ts similarity index 100% rename from test/e2e/readonlyInterface.additionalPropertiesTrue.explicitFalse.optionTrue.ts rename to test/e2e/readonlyInterface.additionalPropertiesTrue.explicitFalse.keywordTrue.ts diff --git a/test/e2e/readonlyInterface.additionalPropertiesTrue.explicitFalse.optionUnspecified.ts b/test/e2e/readonlyInterface.additionalPropertiesTrue.explicitFalse.keywordUnspecified.ts similarity index 100% rename from test/e2e/readonlyInterface.additionalPropertiesTrue.explicitFalse.optionUnspecified.ts rename to test/e2e/readonlyInterface.additionalPropertiesTrue.explicitFalse.keywordUnspecified.ts diff --git a/test/e2e/readonlyInterface.additionalPropertiesTrue.optionFalse.ts b/test/e2e/readonlyInterface.additionalPropertiesTrue.keywordFalse.ts similarity index 100% rename from test/e2e/readonlyInterface.additionalPropertiesTrue.optionFalse.ts rename to test/e2e/readonlyInterface.additionalPropertiesTrue.keywordFalse.ts diff --git a/test/e2e/readonlyInterface.additionalPropertiesTrue.optionTrue.ts b/test/e2e/readonlyInterface.additionalPropertiesTrue.keywordTrue.ts similarity index 100% rename from test/e2e/readonlyInterface.additionalPropertiesTrue.optionTrue.ts rename to test/e2e/readonlyInterface.additionalPropertiesTrue.keywordTrue.ts diff --git a/test/e2e/readonlyInterface.additionalPropertiesTrue.optionUnspecified.ts b/test/e2e/readonlyInterface.additionalPropertiesTrue.keywordUnspecified.ts similarity index 100% rename from test/e2e/readonlyInterface.additionalPropertiesTrue.optionUnspecified.ts rename to test/e2e/readonlyInterface.additionalPropertiesTrue.keywordUnspecified.ts diff --git a/test/e2e/readonlyInterface.explicitFalse.optionFalse.ts b/test/e2e/readonlyInterface.explicitFalse.keywordFalse.ts similarity index 100% rename from test/e2e/readonlyInterface.explicitFalse.optionFalse.ts rename to test/e2e/readonlyInterface.explicitFalse.keywordFalse.ts diff --git a/test/e2e/readonlyInterface.explicitFalse.optionTrue.ts b/test/e2e/readonlyInterface.explicitFalse.keywordTrue.ts similarity index 100% rename from test/e2e/readonlyInterface.explicitFalse.optionTrue.ts rename to test/e2e/readonlyInterface.explicitFalse.keywordTrue.ts diff --git a/test/e2e/readonlyInterface.explicitFalse.optionUnspecified.ts b/test/e2e/readonlyInterface.explicitFalse.keywordUnspecified.ts similarity index 100% rename from test/e2e/readonlyInterface.explicitFalse.optionUnspecified.ts rename to test/e2e/readonlyInterface.explicitFalse.keywordUnspecified.ts diff --git a/test/e2e/readonlyInterface.optionFalse.ts b/test/e2e/readonlyInterface.keywordFalse.ts similarity index 100% rename from test/e2e/readonlyInterface.optionFalse.ts rename to test/e2e/readonlyInterface.keywordFalse.ts diff --git a/test/e2e/readonlyInterface.optionTrue.ts b/test/e2e/readonlyInterface.keywordTrue.ts similarity index 100% rename from test/e2e/readonlyInterface.optionTrue.ts rename to test/e2e/readonlyInterface.keywordTrue.ts diff --git a/test/e2e/readonlyInterface.optionUnspecified.ts b/test/e2e/readonlyInterface.keywordUnspecified.ts similarity index 100% rename from test/e2e/readonlyInterface.optionUnspecified.ts rename to test/e2e/readonlyInterface.keywordUnspecified.ts diff --git a/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.optionFalse.ts b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.keywordFalse.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.optionFalse.ts rename to test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.keywordFalse.ts diff --git a/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.optionTrue.ts b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.keywordTrue.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.optionTrue.ts rename to test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.keywordTrue.ts diff --git a/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.keywordUnspecified.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.optionUnspecified.ts rename to test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.keywordUnspecified.ts diff --git a/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.optionFalse.ts b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.keywordFalse.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.optionFalse.ts rename to test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.keywordFalse.ts diff --git a/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.optionTrue.ts b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.keywordTrue.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.optionTrue.ts rename to test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.keywordTrue.ts diff --git a/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.keywordUnspecified.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.optionUnspecified.ts rename to test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.keywordUnspecified.ts diff --git a/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.optionFalse.ts b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.keywordFalse.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.optionFalse.ts rename to test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.keywordFalse.ts diff --git a/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.optionTrue.ts b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.keywordTrue.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.optionTrue.ts rename to test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.keywordTrue.ts diff --git a/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.keywordUnspecified.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.optionUnspecified.ts rename to test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.keywordUnspecified.ts diff --git a/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.optionFalse.ts b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.keywordFalse.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.optionFalse.ts rename to test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.keywordFalse.ts diff --git a/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.optionTrue.ts b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.keywordTrue.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.optionTrue.ts rename to test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.keywordTrue.ts diff --git a/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.keywordUnspecified.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.optionUnspecified.ts rename to test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.keywordUnspecified.ts diff --git a/test/e2e/readonlyInterface.readonlyByDefault.explicitFalse.optionFalse.ts b/test/e2e/readonlyInterface.readonlyByDefault.explicitFalse.keywordFalse.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyByDefault.explicitFalse.optionFalse.ts rename to test/e2e/readonlyInterface.readonlyByDefault.explicitFalse.keywordFalse.ts diff --git a/test/e2e/readonlyInterface.readonlyByDefault.explicitFalse.optionTrue.ts b/test/e2e/readonlyInterface.readonlyByDefault.explicitFalse.keywordTrue.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyByDefault.explicitFalse.optionTrue.ts rename to test/e2e/readonlyInterface.readonlyByDefault.explicitFalse.keywordTrue.ts diff --git a/test/e2e/readonlyInterface.readonlyByDefault.explicitFalse.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyByDefault.explicitFalse.keywordUnspecified.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyByDefault.explicitFalse.optionUnspecified.ts rename to test/e2e/readonlyInterface.readonlyByDefault.explicitFalse.keywordUnspecified.ts diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionFalse.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordFalse.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionFalse.ts rename to test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordFalse.ts diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionTrue.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordTrue.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionTrue.ts rename to test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordTrue.ts diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordUnspecified.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionUnspecified.ts rename to test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordUnspecified.ts diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.optionFalse.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.keywordFalse.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.optionFalse.ts rename to test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.keywordFalse.ts diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.optionTrue.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.keywordTrue.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.optionTrue.ts rename to test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.keywordTrue.ts diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.keywordUnspecified.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.optionUnspecified.ts rename to test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.keywordUnspecified.ts diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionFalse.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordFalse.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionFalse.ts rename to test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordFalse.ts diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionTrue.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordTrue.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionTrue.ts rename to test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordTrue.ts diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordUnspecified.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionUnspecified.ts rename to test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordUnspecified.ts diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.optionFalse.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.keywordFalse.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.optionFalse.ts rename to test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.keywordFalse.ts diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.optionTrue.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.keywordTrue.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.optionTrue.ts rename to test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.keywordTrue.ts diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.keywordUnspecified.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.optionUnspecified.ts rename to test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.keywordUnspecified.ts diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionFalse.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordFalse.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionFalse.ts rename to test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordFalse.ts diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionTrue.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordTrue.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionTrue.ts rename to test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordTrue.ts diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordUnspecified.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionUnspecified.ts rename to test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordUnspecified.ts diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.optionFalse.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordFalse.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.optionFalse.ts rename to test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordFalse.ts diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.optionTrue.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordTrue.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.optionTrue.ts rename to test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordTrue.ts diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordUnspecified.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.optionUnspecified.ts rename to test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordUnspecified.ts diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.optionFalse.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.keywordFalse.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.optionFalse.ts rename to test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.keywordFalse.ts diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.optionTrue.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.keywordTrue.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.optionTrue.ts rename to test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.keywordTrue.ts diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.keywordUnspecified.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.optionUnspecified.ts rename to test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.keywordUnspecified.ts diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.optionFalse.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.keywordFalse.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.optionFalse.ts rename to test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.keywordFalse.ts diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.optionTrue.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.keywordTrue.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.optionTrue.ts rename to test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.keywordTrue.ts diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.keywordUnspecified.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.optionUnspecified.ts rename to test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.keywordUnspecified.ts diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.optionFalse.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.keywordFalse.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.optionFalse.ts rename to test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.keywordFalse.ts diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.optionTrue.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.keywordTrue.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.optionTrue.ts rename to test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.keywordTrue.ts diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.keywordUnspecified.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.optionUnspecified.ts rename to test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.keywordUnspecified.ts diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionFalse.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordFalse.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionFalse.ts rename to test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordFalse.ts diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionTrue.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordTrue.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionTrue.ts rename to test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordTrue.ts diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordUnspecified.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.optionUnspecified.ts rename to test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordUnspecified.ts diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.optionFalse.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.keywordFalse.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.optionFalse.ts rename to test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.keywordFalse.ts diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.optionTrue.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.keywordTrue.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.optionTrue.ts rename to test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.keywordTrue.ts diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.keywordUnspecified.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.optionUnspecified.ts rename to test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.keywordUnspecified.ts diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionFalse.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordFalse.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionFalse.ts rename to test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordFalse.ts diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionTrue.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordTrue.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionTrue.ts rename to test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordTrue.ts diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordUnspecified.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.optionUnspecified.ts rename to test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordUnspecified.ts diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.optionFalse.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.keywordFalse.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.optionFalse.ts rename to test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.keywordFalse.ts diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.optionTrue.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.keywordTrue.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.optionTrue.ts rename to test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.keywordTrue.ts diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.keywordUnspecified.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.optionUnspecified.ts rename to test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.keywordUnspecified.ts diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionFalse.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordFalse.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionFalse.ts rename to test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordFalse.ts diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionTrue.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordTrue.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionTrue.ts rename to test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordTrue.ts diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordUnspecified.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.optionUnspecified.ts rename to test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordUnspecified.ts diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.optionFalse.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordFalse.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.optionFalse.ts rename to test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordFalse.ts diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.optionTrue.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordTrue.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.optionTrue.ts rename to test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordTrue.ts diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordUnspecified.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.optionUnspecified.ts rename to test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordUnspecified.ts diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.optionFalse.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.keywordFalse.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.optionFalse.ts rename to test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.keywordFalse.ts diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.optionTrue.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.keywordTrue.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.optionTrue.ts rename to test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.keywordTrue.ts diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.keywordUnspecified.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.optionUnspecified.ts rename to test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.keywordUnspecified.ts diff --git a/test/e2e/readonlyInterface.readonlyObject.explicitTrue.optionFalse.ts b/test/e2e/readonlyInterface.readonlyObject.explicitTrue.keywordFalse.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyObject.explicitTrue.optionFalse.ts rename to test/e2e/readonlyInterface.readonlyObject.explicitTrue.keywordFalse.ts diff --git a/test/e2e/readonlyInterface.readonlyObject.explicitTrue.optionTrue.ts b/test/e2e/readonlyInterface.readonlyObject.explicitTrue.keywordTrue.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyObject.explicitTrue.optionTrue.ts rename to test/e2e/readonlyInterface.readonlyObject.explicitTrue.keywordTrue.ts diff --git a/test/e2e/readonlyInterface.readonlyObject.explicitTrue.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyObject.explicitTrue.keywordUnspecified.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyObject.explicitTrue.optionUnspecified.ts rename to test/e2e/readonlyInterface.readonlyObject.explicitTrue.keywordUnspecified.ts diff --git a/test/e2e/readonlyInterface.readonlyObject.optionFalse.ts b/test/e2e/readonlyInterface.readonlyObject.keywordFalse.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyObject.optionFalse.ts rename to test/e2e/readonlyInterface.readonlyObject.keywordFalse.ts diff --git a/test/e2e/readonlyInterface.readonlyObject.optionTrue.ts b/test/e2e/readonlyInterface.readonlyObject.keywordTrue.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyObject.optionTrue.ts rename to test/e2e/readonlyInterface.readonlyObject.keywordTrue.ts diff --git a/test/e2e/readonlyInterface.readonlyObject.optionUnspecified.ts b/test/e2e/readonlyInterface.readonlyObject.keywordUnspecified.ts similarity index 100% rename from test/e2e/readonlyInterface.readonlyObject.optionUnspecified.ts rename to test/e2e/readonlyInterface.readonlyObject.keywordUnspecified.ts diff --git a/test/e2e/readonlyTuple.explicitFalse.optionFalse.ts b/test/e2e/readonlyTuple.explicitFalse.keywordFalse.ts similarity index 100% rename from test/e2e/readonlyTuple.explicitFalse.optionFalse.ts rename to test/e2e/readonlyTuple.explicitFalse.keywordFalse.ts diff --git a/test/e2e/readonlyTuple.explicitFalse.optionTrue.ts b/test/e2e/readonlyTuple.explicitFalse.keywordTrue.ts similarity index 100% rename from test/e2e/readonlyTuple.explicitFalse.optionTrue.ts rename to test/e2e/readonlyTuple.explicitFalse.keywordTrue.ts diff --git a/test/e2e/readonlyTuple.explicitFalse.optionUnspecified.ts b/test/e2e/readonlyTuple.explicitFalse.keywordUnspecified.ts similarity index 100% rename from test/e2e/readonlyTuple.explicitFalse.optionUnspecified.ts rename to test/e2e/readonlyTuple.explicitFalse.keywordUnspecified.ts diff --git a/test/e2e/readonlyTuple.optionFalse.ts b/test/e2e/readonlyTuple.keywordFalse.ts similarity index 100% rename from test/e2e/readonlyTuple.optionFalse.ts rename to test/e2e/readonlyTuple.keywordFalse.ts diff --git a/test/e2e/readonlyTuple.optionTrue.ts b/test/e2e/readonlyTuple.keywordTrue.ts similarity index 100% rename from test/e2e/readonlyTuple.optionTrue.ts rename to test/e2e/readonlyTuple.keywordTrue.ts diff --git a/test/e2e/readonlyTuple.optionUnspecified.ts b/test/e2e/readonlyTuple.keywordUnspecified.ts similarity index 100% rename from test/e2e/readonlyTuple.optionUnspecified.ts rename to test/e2e/readonlyTuple.keywordUnspecified.ts diff --git a/test/e2e/readonlyTuple.readonlyByDefault.explicitTrue.optionFalse.ts b/test/e2e/readonlyTuple.readonlyByDefault.explicitTrue.keywordFalse.ts similarity index 100% rename from test/e2e/readonlyTuple.readonlyByDefault.explicitTrue.optionFalse.ts rename to test/e2e/readonlyTuple.readonlyByDefault.explicitTrue.keywordFalse.ts diff --git a/test/e2e/readonlyTuple.readonlyByDefault.explicitTrue.optionTrue.ts b/test/e2e/readonlyTuple.readonlyByDefault.explicitTrue.keywordTrue.ts similarity index 100% rename from test/e2e/readonlyTuple.readonlyByDefault.explicitTrue.optionTrue.ts rename to test/e2e/readonlyTuple.readonlyByDefault.explicitTrue.keywordTrue.ts diff --git a/test/e2e/readonlyTuple.readonlyByDefault.explicitTrue.optionUnspecified.ts b/test/e2e/readonlyTuple.readonlyByDefault.explicitTrue.keywordUnspecified.ts similarity index 100% rename from test/e2e/readonlyTuple.readonlyByDefault.explicitTrue.optionUnspecified.ts rename to test/e2e/readonlyTuple.readonlyByDefault.explicitTrue.keywordUnspecified.ts diff --git a/test/e2e/readonlyTuple.readonlyByDefault.optionFalse.ts b/test/e2e/readonlyTuple.readonlyByDefault.keywordFalse.ts similarity index 100% rename from test/e2e/readonlyTuple.readonlyByDefault.optionFalse.ts rename to test/e2e/readonlyTuple.readonlyByDefault.keywordFalse.ts diff --git a/test/e2e/readonlyTuple.readonlyByDefault.optionTrue.ts b/test/e2e/readonlyTuple.readonlyByDefault.keywordTrue.ts similarity index 100% rename from test/e2e/readonlyTuple.readonlyByDefault.optionTrue.ts rename to test/e2e/readonlyTuple.readonlyByDefault.keywordTrue.ts diff --git a/test/e2e/readonlyTuple.readonlyByDefault.optionUnspecified.ts b/test/e2e/readonlyTuple.readonlyByDefault.keywordUnspecified.ts similarity index 100% rename from test/e2e/readonlyTuple.readonlyByDefault.optionUnspecified.ts rename to test/e2e/readonlyTuple.readonlyByDefault.keywordUnspecified.ts From 6b122a8b8b42c925e62b3a94c104a4dee37a0346 Mon Sep 17 00:00:00 2001 From: Ruby Tunaley Date: Fri, 24 Sep 2021 02:41:08 +1000 Subject: [PATCH 07/12] Changed some README ``` language tags so that GitHub displays them properly. --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 8b97fc49..b58c003a 100644 --- a/README.md +++ b/README.md @@ -174,7 +174,7 @@ json2ts -i foo.json -o foo.d.ts --style.singleQuote --no-style.semi - `tsEnumNames`: Overrides the names used for the elements in an enum. Can also be used to create string enums ([eg](https://github.com/johnbillion/wp-json-schemas/blob/647440573e4a675f15880c95fcca513fdf7a2077/schemas/properties/post-status-name.json)). - `tsReadonly`: Sets whether an array or object property is `readonly` in TypeScript. - ```json + ```jsonc // readonlyByDefault: false { "anyOf": [ @@ -206,7 +206,7 @@ json2ts -i foo.json -o foo.d.ts --style.singleQuote --no-style.semi When used on a schema with `"type": "object"`, sets the default `tsReadonly` state for all of its properties. - ```json + ```jsonc { "type": "object", "tsReadonly": true, From 71d283ed7ab0971b92cc0a151d0bf62f7ad474c2 Mon Sep 17 00:00:00 2001 From: Ruby Tunaley Date: Fri, 24 Sep 2021 03:54:28 +1000 Subject: [PATCH 08/12] Readonly types - Disambiguated the distinct cases of readonly array types, readonly properties, and the default readonly property state. --- README.md | 91 ++++++++++++++----- src/generator.ts | 8 +- src/index.ts | 2 +- src/parser.ts | 10 +- src/types/AST.ts | 2 +- src/types/JSONSchema.ts | 8 ++ src/typesOfSchema.ts | 2 +- ...sEmptySchema.explicitFalse.keywordFalse.ts | 10 +- ...esEmptySchema.explicitFalse.keywordTrue.ts | 10 +- ...Schema.explicitFalse.keywordUnspecified.ts | 10 +- ...ionalPropertiesEmptySchema.keywordFalse.ts | 6 +- ...tionalPropertiesEmptySchema.keywordTrue.ts | 6 +- ...ropertiesEmptySchema.keywordUnspecified.ts | 6 +- ...rtiesRoFalse.explicitFalse.keywordFalse.ts | 12 +-- ...ertiesRoFalse.explicitFalse.keywordTrue.ts | 12 +-- ...oFalse.explicitFalse.keywordUnspecified.ts | 12 +-- ...ertiesRoTrue.explicitFalse.keywordFalse.ts | 12 +-- ...pertiesRoTrue.explicitFalse.keywordTrue.ts | 12 +-- ...RoTrue.explicitFalse.keywordUnspecified.ts | 12 +-- ...additionalPropertiesRoTrue.keywordFalse.ts | 8 +- ....additionalPropertiesRoTrue.keywordTrue.ts | 8 +- ...onalPropertiesRoTrue.keywordUnspecified.ts | 8 +- ...opertiesTrue.explicitFalse.keywordFalse.ts | 10 +- ...ropertiesTrue.explicitFalse.keywordTrue.ts | 10 +- ...esTrue.explicitFalse.keywordUnspecified.ts | 10 +- ...e.additionalPropertiesTrue.keywordFalse.ts | 6 +- ...ce.additionalPropertiesTrue.keywordTrue.ts | 6 +- ...tionalPropertiesTrue.keywordUnspecified.ts | 6 +- ...nlyInterface.explicitFalse.keywordFalse.ts | 10 +- ...onlyInterface.explicitFalse.keywordTrue.ts | 10 +- ...erface.explicitFalse.keywordUnspecified.ts | 10 +- test/e2e/readonlyInterface.keywordFalse.ts | 4 +- test/e2e/readonlyInterface.keywordTrue.ts | 4 +- .../readonlyInterface.keywordUnspecified.ts | 4 +- ...sEmptySchema.explicitFalse.keywordFalse.ts | 10 +- ...esEmptySchema.explicitFalse.keywordTrue.ts | 10 +- ...Schema.explicitFalse.keywordUnspecified.ts | 10 +- ...rtiesRoFalse.explicitFalse.keywordFalse.ts | 12 +-- ...ertiesRoFalse.explicitFalse.keywordTrue.ts | 12 +-- ...oFalse.explicitFalse.keywordUnspecified.ts | 12 +-- ...ertiesRoTrue.explicitFalse.keywordFalse.ts | 12 +-- ...pertiesRoTrue.explicitFalse.keywordTrue.ts | 12 +-- ...RoTrue.explicitFalse.keywordUnspecified.ts | 12 +-- ...opertiesTrue.explicitFalse.keywordFalse.ts | 10 +- ...ropertiesTrue.explicitFalse.keywordTrue.ts | 10 +- ...esTrue.explicitFalse.keywordUnspecified.ts | 10 +- ...nlyByDefault.explicitFalse.keywordFalse.ts | 10 +- ...onlyByDefault.explicitFalse.keywordTrue.ts | 10 +- ...efault.explicitFalse.keywordUnspecified.ts | 10 +- ...esEmptySchema.explicitTrue.keywordFalse.ts | 8 +- ...iesEmptySchema.explicitTrue.keywordTrue.ts | 8 +- ...ySchema.explicitTrue.keywordUnspecified.ts | 8 +- ...ionalPropertiesEmptySchema.keywordFalse.ts | 4 +- ...tionalPropertiesEmptySchema.keywordTrue.ts | 4 +- ...ropertiesEmptySchema.keywordUnspecified.ts | 6 +- ...ertiesRoFalse.explicitTrue.keywordFalse.ts | 10 +- ...pertiesRoFalse.explicitTrue.keywordTrue.ts | 10 +- ...RoFalse.explicitTrue.keywordUnspecified.ts | 10 +- ...dditionalPropertiesRoFalse.keywordFalse.ts | 6 +- ...additionalPropertiesRoFalse.keywordTrue.ts | 6 +- ...nalPropertiesRoFalse.keywordUnspecified.ts | 6 +- ...pertiesRoTrue.explicitTrue.keywordFalse.ts | 10 +- ...opertiesRoTrue.explicitTrue.keywordTrue.ts | 10 +- ...sRoTrue.explicitTrue.keywordUnspecified.ts | 10 +- ...ropertiesTrue.explicitTrue.keywordFalse.ts | 8 +- ...PropertiesTrue.explicitTrue.keywordTrue.ts | 8 +- ...iesTrue.explicitTrue.keywordUnspecified.ts | 8 +- ...t.additionalPropertiesTrue.keywordFalse.ts | 4 +- ...ct.additionalPropertiesTrue.keywordTrue.ts | 4 +- ...tionalPropertiesTrue.keywordUnspecified.ts | 4 +- ...eadonlyObject.explicitTrue.keywordFalse.ts | 8 +- ...readonlyObject.explicitTrue.keywordTrue.ts | 8 +- ...yObject.explicitTrue.keywordUnspecified.ts | 8 +- ...lyByDefault.readonlyObject.keywordFalse.ts | 4 +- ...nlyByDefault.readonlyObject.keywordTrue.ts | 4 +- ...fault.readonlyObject.keywordUnspecified.ts | 4 +- ...esEmptySchema.explicitTrue.keywordFalse.ts | 10 +- ...iesEmptySchema.explicitTrue.keywordTrue.ts | 10 +- ...ySchema.explicitTrue.keywordUnspecified.ts | 10 +- ...ionalPropertiesEmptySchema.keywordFalse.ts | 6 +- ...tionalPropertiesEmptySchema.keywordTrue.ts | 6 +- ...ropertiesEmptySchema.keywordUnspecified.ts | 6 +- ...ertiesRoFalse.explicitTrue.keywordFalse.ts | 12 +-- ...pertiesRoFalse.explicitTrue.keywordTrue.ts | 12 +-- ...RoFalse.explicitTrue.keywordUnspecified.ts | 12 +-- ...dditionalPropertiesRoFalse.keywordFalse.ts | 8 +- ...additionalPropertiesRoFalse.keywordTrue.ts | 8 +- ...nalPropertiesRoFalse.keywordUnspecified.ts | 8 +- ...pertiesRoTrue.explicitTrue.keywordFalse.ts | 12 +-- ...opertiesRoTrue.explicitTrue.keywordTrue.ts | 12 +-- ...sRoTrue.explicitTrue.keywordUnspecified.ts | 12 +-- ...ropertiesTrue.explicitTrue.keywordFalse.ts | 10 +- ...PropertiesTrue.explicitTrue.keywordTrue.ts | 10 +- ...iesTrue.explicitTrue.keywordUnspecified.ts | 10 +- ...t.additionalPropertiesTrue.keywordFalse.ts | 6 +- ...ct.additionalPropertiesTrue.keywordTrue.ts | 6 +- ...tionalPropertiesTrue.keywordUnspecified.ts | 6 +- ...eadonlyObject.explicitTrue.keywordFalse.ts | 10 +- ...readonlyObject.explicitTrue.keywordTrue.ts | 10 +- ...yObject.explicitTrue.keywordUnspecified.ts | 10 +- ...lyInterface.readonlyObject.keywordFalse.ts | 6 +- ...nlyInterface.readonlyObject.keywordTrue.ts | 6 +- ...rface.readonlyObject.keywordUnspecified.ts | 6 +- 103 files changed, 502 insertions(+), 445 deletions(-) diff --git a/README.md b/README.md index b58c003a..6b3834d8 100644 --- a/README.md +++ b/README.md @@ -93,7 +93,7 @@ See [server demo](example) and [browser demo](https://github.com/bcherny/json-sc | unknownAny | boolean | `true` | Use `unknown` instead of `any` where possible | | unreachableDefinitions | boolean | `false` | Generates code for `definitions` that aren't referenced by the schema. | | strictIndexSignatures | boolean | `false` | Append all index signatures with `\| undefined` so that they are strictly typed. | -| readonlyByDefault | boolean | `false` | This is the implied value for unspecified `"tsReadonly"` properties. | +| readonlyByDefault | boolean | `false` | This is the implied value for unspecified `"tsReadonly"` and `"tsReadonlyProperty"` properties. | | readonlyKeyword | boolean | `true` | Use the `readonly` keyword instead of `ReadonlyArray` for `array` types. **WARNING:** Setting this to `false` will disable readonly tuple support. | | $refOptions | object | `{}` | [$RefParser](https://github.com/BigstickCarpet/json-schema-ref-parser) Options, used when resolving `$ref`s | ## CLI @@ -167,12 +167,13 @@ json2ts -i foo.json -o foo.d.ts --style.singleQuote --no-style.semi - [x] referencing schema by id ([eg](https://github.com/tdegrunt/jsonschema/blob/67c0e27ce9542efde0bf43dc1b2a95dd87df43c3/examples/all.js#L331)) - [x] custom typescript types via `tsType` - [x] support for `readonly` types via `tsReadonly` +- [x] support for `readonly` properties via `tsReadonlyProperty` ## Custom schema properties: - `tsType`: Overrides the type that's generated from the schema. Useful for forcing a type to `any` or when using non-standard JSON schema extensions ([eg](https://github.com/sokra/json-schema-to-typescript/blob/f1f40307cf5efa328522bb1c9ae0b0d9e5f367aa/test/e2e/customType.ts)). - `tsEnumNames`: Overrides the names used for the elements in an enum. Can also be used to create string enums ([eg](https://github.com/johnbillion/wp-json-schemas/blob/647440573e4a675f15880c95fcca513fdf7a2077/schemas/properties/post-status-name.json)). -- `tsReadonly`: Sets whether an array or object property is `readonly` in TypeScript. +- `tsReadonly`: Sets whether an array is `readonly` in TypeScript. ```jsonc // readonlyByDefault: false @@ -187,42 +188,90 @@ json2ts -i foo.json -o foo.d.ts --style.singleQuote --no-style.semi // Compiles to `readonly string[]` }, { - "type": "object", - "properties": { - "foo": { - "type": "string", - "tsReadonly": true - } + "type": "array", + "minItems": 1, + "items": { + "type": "string" }, - "additionalProperties": { - "type": "number", - "tsReadonly": true - } - // Compiles to `{ readonly foo: string, readonly [k: string]: number }` + "tsReadonly": true + // Compiles to `readonly [string, ...string[]]` } ] } ``` - When used on a schema with `"type": "object"`, sets the default `tsReadonly` state for all of its properties. + If unspecified, defaults to the value of the *readonlyByDefault* option. + +- `tsReadonlyProperty`: Sets whether an object property is `readonly` in TypeScript. ```jsonc + // readonlyByDefault: false { "type": "object", - "tsReadonly": true, "properties": { "foo": { - // This property is readonly - }, - "bar": { - // This property is mutable because we explicitly override the object's default - "tsReadonly": false + "type": "string", + "tsReadonlyProperty": true } + }, + "additionalProperties": { + "type": "number", + "tsReadonlyProperty": true } + // Compiles to `{ readonly foo: string, readonly [k: string]: number }` } ``` - If unspecified, defaults to the value of the *readonlyByDefault* option. + If unspecified, defaults to: + + 1. The value of the containing object schema's `tsReadonlyPropertyDefaultValue` property, if it is specified. + 2. The value of the *readonlyByDefault* option. + + +

+ +- `tsReadonlyPropertyDefaultValue`: Sets the default value of `tsReadonlyProperty` for an object schema's properties. + + ```jsonc + { + "type": "object", + "tsReadonlyPropertyDefaultValue": true, + "properties": { + // This property is readonly + "foo": { }, + // This property is mutable because we explicitly override the object's default + "bar": { + "tsReadonlyProperty": false + } + }, + // Additional properties are readonly + "additionalProperties": true + } + ``` + + Note that this has no effect on sub-objects. + + ```jsonc + // readonlyByDefault: false + { + "type": "object", + "tsReadonlyPropertyDefaultValue": true, + "properties": { + // This property is readonly + "foo": { + "type": "object", + "properties": { + // This property is NOT readonly + "bar": { + "type": "string" + } + }, + // Additional properties are NOT readonly + "additionalProperties": true + } + } + } + ``` ## Not expressible in TypeScript: diff --git a/src/generator.ts b/src/generator.ts index 83f6596a..496fb16f 100644 --- a/src/generator.ts +++ b/src/generator.ts @@ -317,13 +317,13 @@ function generateInterface(ast: TInterface, options: Options): string { ast.params .filter(_ => !_.isPatternProperty && !_.isUnreachableDefinition) .map( - ({isRequired, isReadonly, keyName, ast}) => - [isRequired, isReadonly, keyName, ast, generateType(ast, options)] as [boolean, boolean, string, AST, string] + ({isRequired, isReadonlyParam, keyName, ast}) => + [isRequired, isReadonlyParam, keyName, ast, generateType(ast, options)] as [boolean, boolean, string, AST, string] ) .map( - ([isRequired, isReadonly, keyName, ast, type]) => + ([isRequired, isReadonlyParam, keyName, ast, type]) => (hasComment(ast) && !ast.standaloneName ? generateComment(ast.comment) + '\n' : '') + - (isReadonly ? 'readonly ' : '') + + (isReadonlyParam ? 'readonly ' : '') + escapeKeyName(keyName) + (isRequired ? '' : '?') + ': ' + diff --git a/src/index.ts b/src/index.ts index a50ecc77..d62ef444 100644 --- a/src/index.ts +++ b/src/index.ts @@ -43,7 +43,7 @@ export interface Options { */ ignoreMinAndMaxItems: boolean /** - * This is the implied value for unspecified `"tsReadonly"` properties. + * This is the implied value for unspecified `"tsReadonly"` and `"tsReadonlyProperty"` properties. */ readonlyByDefault: boolean /** diff --git a/src/parser.ts b/src/parser.ts index 1e4452bd..feca2ad5 100644 --- a/src/parser.ts +++ b/src/parser.ts @@ -360,7 +360,7 @@ function parseSchema( isRequired: includes(schema.required || [], key), isUnreachableDefinition: false, // Readonly state specified on property supercedes readonly state specified on the object - isReadonly: value.tsReadonly ?? schema.tsReadonly ?? options.readonlyByDefault, + isReadonlyParam: value.tsReadonlyProperty ?? schema.tsReadonlyPropertyDefaultValue ?? options.readonlyByDefault, keyName: key })) @@ -382,7 +382,7 @@ via the \`patternProperty\` "${key}".` isPatternProperty: !singlePatternProperty, isRequired: singlePatternProperty || includes(schema.required || [], key), isUnreachableDefinition: false, - isReadonly: value.tsReadonly ?? schema.tsReadonly ?? options.readonlyByDefault, + isReadonlyParam: value.tsReadonlyProperty ?? schema.tsReadonlyPropertyDefaultValue ?? options.readonlyByDefault, keyName: singlePatternProperty ? '[k: string]' : key } }) @@ -401,7 +401,7 @@ via the \`definition\` "${key}".` isPatternProperty: false, isRequired: includes(schema.required || [], key), isUnreachableDefinition: true, - isReadonly: value.tsReadonly ?? schema.tsReadonly ?? options.readonlyByDefault, + isReadonlyParam: value.tsReadonlyProperty ?? schema.tsReadonlyPropertyDefaultValue ?? options.readonlyByDefault, keyName: key } }) @@ -420,7 +420,7 @@ via the \`definition\` "${key}".` isPatternProperty: false, isRequired: true, isUnreachableDefinition: false, - isReadonly: schema.tsReadonly ?? options.readonlyByDefault, + isReadonlyParam: schema.tsReadonlyPropertyDefaultValue ?? options.readonlyByDefault, keyName: '[k: string]' }) @@ -436,7 +436,7 @@ via the \`definition\` "${key}".` isRequired: true, isUnreachableDefinition: false, // Explicit additionalProperties readonly state supercedes generic readonly state - isReadonly: schema.additionalProperties.tsReadonly ?? schema.tsReadonly ?? options.readonlyByDefault, + isReadonlyParam: schema.additionalProperties.tsReadonlyProperty ?? schema.tsReadonlyPropertyDefaultValue ?? options.readonlyByDefault, keyName: '[k: string]' }) } diff --git a/src/types/AST.ts b/src/types/AST.ts index 307c68ff..ac545598 100644 --- a/src/types/AST.ts +++ b/src/types/AST.ts @@ -86,7 +86,7 @@ export interface TInterfaceParam { isRequired: boolean isPatternProperty: boolean isUnreachableDefinition: boolean - isReadonly: boolean + isReadonlyParam: boolean } export interface TIntersection extends AbstractAST { diff --git a/src/types/JSONSchema.ts b/src/types/JSONSchema.ts index 8ff56255..17ae1aea 100644 --- a/src/types/JSONSchema.ts +++ b/src/types/JSONSchema.ts @@ -37,6 +37,14 @@ export interface JSONSchema extends JSONSchema4 { * schema extension to support readonly types */ tsReadonly?: boolean + /** + * schema extension to support readonly properties + */ + tsReadonlyProperty?: boolean + /** + * schema extension to support changing the default value of tsReadonlyProperty on this schema's properties + */ + tsReadonlyPropertyDefaultValue?: boolean // NOTE: When adding a new custom property, you MUST ALSO add that custom property as an exclusion in the // nonCustomKeys function in src/typesOfSchema.ts diff --git a/src/typesOfSchema.ts b/src/typesOfSchema.ts index 6629fb79..3be2d85a 100644 --- a/src/typesOfSchema.ts +++ b/src/typesOfSchema.ts @@ -32,7 +32,7 @@ export function typesOfSchema(schema: JSONSchema): readonly [SchemaType, ...Sche } function nonCustonKeys(obj: JSONSchema): string[] { - return Object.keys(obj).filter(key => key !== 'tsEnumNames' && key !== 'tsType' && key !== 'tsReadonly') + return Object.keys(obj).filter(key => key !== 'tsEnumNames' && key !== 'tsType' && key !== 'tsReadonly' && key !== 'tsReadonlyProperty' && key !== 'tsReadonlyPropertyDefaultValue') } const matchers: Record boolean> = { diff --git a/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.keywordFalse.ts b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.keywordFalse.ts index fef5936e..83c7d66c 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.keywordFalse.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.keywordFalse.ts @@ -4,23 +4,23 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: {}, - tsReadonly: false + tsReadonlyPropertyDefaultValue: false } export const options = { diff --git a/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.keywordTrue.ts b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.keywordTrue.ts index 9a935eb5..09b8639c 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.keywordTrue.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.keywordTrue.ts @@ -4,23 +4,23 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: {}, - tsReadonly: false + tsReadonlyPropertyDefaultValue: false } export const options = { diff --git a/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.keywordUnspecified.ts b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.keywordUnspecified.ts index dbf7d51e..161220c1 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.keywordUnspecified.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.explicitFalse.keywordUnspecified.ts @@ -4,21 +4,21 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: {}, - tsReadonly: false + tsReadonlyPropertyDefaultValue: false } diff --git a/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.keywordFalse.ts b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.keywordFalse.ts index c4bb32a5..53278f9c 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.keywordFalse.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.keywordFalse.ts @@ -4,21 +4,21 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string' }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string' } }, additionalProperties: {}, - tsReadonly: false + tsReadonlyPropertyDefaultValue: false } export const options = { diff --git a/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.keywordTrue.ts b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.keywordTrue.ts index 78a02f46..0b8fb902 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.keywordTrue.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.keywordTrue.ts @@ -4,21 +4,21 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string' }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string' } }, additionalProperties: {}, - tsReadonly: false + tsReadonlyPropertyDefaultValue: false } export const options = { diff --git a/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.keywordUnspecified.ts b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.keywordUnspecified.ts index 535fbe62..27c68252 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.keywordUnspecified.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesEmptySchema.keywordUnspecified.ts @@ -4,19 +4,19 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string' }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string' } }, additionalProperties: {}, - tsReadonly: false + tsReadonlyPropertyDefaultValue: false } diff --git a/test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.keywordFalse.ts b/test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.keywordFalse.ts index 8c6af5f0..df38de41 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.keywordFalse.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.keywordFalse.ts @@ -4,25 +4,25 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: { - tsReadonly: false + tsReadonlyProperty: false }, - tsReadonly: false + tsReadonlyPropertyDefaultValue: false } export const options = { diff --git a/test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.keywordTrue.ts b/test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.keywordTrue.ts index 1e3af675..9b39b822 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.keywordTrue.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.keywordTrue.ts @@ -4,25 +4,25 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: { - tsReadonly: false + tsReadonlyProperty: false }, - tsReadonly: false + tsReadonlyPropertyDefaultValue: false } export const options = { diff --git a/test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.keywordUnspecified.ts b/test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.keywordUnspecified.ts index 3a1f6cd7..da9d0e45 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.keywordUnspecified.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesRoFalse.explicitFalse.keywordUnspecified.ts @@ -4,23 +4,23 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: { - tsReadonly: false + tsReadonlyProperty: false }, - tsReadonly: false + tsReadonlyPropertyDefaultValue: false } diff --git a/test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.keywordFalse.ts b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.keywordFalse.ts index d7fab712..dec9da20 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.keywordFalse.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.keywordFalse.ts @@ -4,25 +4,25 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: { - tsReadonly: true + tsReadonlyProperty: true }, - tsReadonly: false + tsReadonlyPropertyDefaultValue: false } export const options = { diff --git a/test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.keywordTrue.ts b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.keywordTrue.ts index 0fac2bc1..938e5b1b 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.keywordTrue.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.keywordTrue.ts @@ -4,25 +4,25 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: { - tsReadonly: true + tsReadonlyProperty: true }, - tsReadonly: false + tsReadonlyPropertyDefaultValue: false } export const options = { diff --git a/test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.keywordUnspecified.ts b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.keywordUnspecified.ts index cc4004aa..b189305b 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.keywordUnspecified.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.explicitFalse.keywordUnspecified.ts @@ -4,23 +4,23 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: { - tsReadonly: true + tsReadonlyProperty: true }, - tsReadonly: false + tsReadonlyPropertyDefaultValue: false } diff --git a/test/e2e/readonlyInterface.additionalPropertiesRoTrue.keywordFalse.ts b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.keywordFalse.ts index f0a97bd0..4102594e 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesRoTrue.keywordFalse.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.keywordFalse.ts @@ -4,23 +4,23 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string' }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string' } }, additionalProperties: { - tsReadonly: true + tsReadonlyProperty: true }, - tsReadonly: false + tsReadonlyPropertyDefaultValue: false } export const options = { diff --git a/test/e2e/readonlyInterface.additionalPropertiesRoTrue.keywordTrue.ts b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.keywordTrue.ts index 8122c6c4..e3db52df 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesRoTrue.keywordTrue.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.keywordTrue.ts @@ -4,23 +4,23 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string' }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string' } }, additionalProperties: { - tsReadonly: true + tsReadonlyProperty: true }, - tsReadonly: false + tsReadonlyPropertyDefaultValue: false } export const options = { diff --git a/test/e2e/readonlyInterface.additionalPropertiesRoTrue.keywordUnspecified.ts b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.keywordUnspecified.ts index f35ead5d..54605f93 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesRoTrue.keywordUnspecified.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesRoTrue.keywordUnspecified.ts @@ -4,21 +4,21 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string' }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string' } }, additionalProperties: { - tsReadonly: true + tsReadonlyProperty: true }, - tsReadonly: false + tsReadonlyPropertyDefaultValue: false } diff --git a/test/e2e/readonlyInterface.additionalPropertiesTrue.explicitFalse.keywordFalse.ts b/test/e2e/readonlyInterface.additionalPropertiesTrue.explicitFalse.keywordFalse.ts index 1517f6e0..19c537db 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesTrue.explicitFalse.keywordFalse.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesTrue.explicitFalse.keywordFalse.ts @@ -4,23 +4,23 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: true, - tsReadonly: false + tsReadonlyPropertyDefaultValue: false } export const options = { diff --git a/test/e2e/readonlyInterface.additionalPropertiesTrue.explicitFalse.keywordTrue.ts b/test/e2e/readonlyInterface.additionalPropertiesTrue.explicitFalse.keywordTrue.ts index 96f67394..ab6d8b33 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesTrue.explicitFalse.keywordTrue.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesTrue.explicitFalse.keywordTrue.ts @@ -4,23 +4,23 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: true, - tsReadonly: false + tsReadonlyPropertyDefaultValue: false } export const options = { diff --git a/test/e2e/readonlyInterface.additionalPropertiesTrue.explicitFalse.keywordUnspecified.ts b/test/e2e/readonlyInterface.additionalPropertiesTrue.explicitFalse.keywordUnspecified.ts index 23741630..f8ad8c94 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesTrue.explicitFalse.keywordUnspecified.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesTrue.explicitFalse.keywordUnspecified.ts @@ -4,21 +4,21 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: true, - tsReadonly: false + tsReadonlyPropertyDefaultValue: false } diff --git a/test/e2e/readonlyInterface.additionalPropertiesTrue.keywordFalse.ts b/test/e2e/readonlyInterface.additionalPropertiesTrue.keywordFalse.ts index 97e23f73..fa6f5f18 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesTrue.keywordFalse.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesTrue.keywordFalse.ts @@ -4,21 +4,21 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string' }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string' } }, additionalProperties: true, - tsReadonly: false + tsReadonlyPropertyDefaultValue: false } export const options = { diff --git a/test/e2e/readonlyInterface.additionalPropertiesTrue.keywordTrue.ts b/test/e2e/readonlyInterface.additionalPropertiesTrue.keywordTrue.ts index 43c83cc5..cec0d581 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesTrue.keywordTrue.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesTrue.keywordTrue.ts @@ -4,21 +4,21 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string' }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string' } }, additionalProperties: true, - tsReadonly: false + tsReadonlyPropertyDefaultValue: false } export const options = { diff --git a/test/e2e/readonlyInterface.additionalPropertiesTrue.keywordUnspecified.ts b/test/e2e/readonlyInterface.additionalPropertiesTrue.keywordUnspecified.ts index c4c2001f..f37a52f1 100644 --- a/test/e2e/readonlyInterface.additionalPropertiesTrue.keywordUnspecified.ts +++ b/test/e2e/readonlyInterface.additionalPropertiesTrue.keywordUnspecified.ts @@ -4,19 +4,19 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string' }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string' } }, additionalProperties: true, - tsReadonly: false + tsReadonlyPropertyDefaultValue: false } diff --git a/test/e2e/readonlyInterface.explicitFalse.keywordFalse.ts b/test/e2e/readonlyInterface.explicitFalse.keywordFalse.ts index 7bd59627..58672b24 100644 --- a/test/e2e/readonlyInterface.explicitFalse.keywordFalse.ts +++ b/test/e2e/readonlyInterface.explicitFalse.keywordFalse.ts @@ -4,23 +4,23 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: false, - tsReadonly: false + tsReadonlyPropertyDefaultValue: false } export const options = { diff --git a/test/e2e/readonlyInterface.explicitFalse.keywordTrue.ts b/test/e2e/readonlyInterface.explicitFalse.keywordTrue.ts index d2686157..5f21c659 100644 --- a/test/e2e/readonlyInterface.explicitFalse.keywordTrue.ts +++ b/test/e2e/readonlyInterface.explicitFalse.keywordTrue.ts @@ -4,23 +4,23 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: false, - tsReadonly: false + tsReadonlyPropertyDefaultValue: false } export const options = { diff --git a/test/e2e/readonlyInterface.explicitFalse.keywordUnspecified.ts b/test/e2e/readonlyInterface.explicitFalse.keywordUnspecified.ts index 289816fd..6cc7d7a7 100644 --- a/test/e2e/readonlyInterface.explicitFalse.keywordUnspecified.ts +++ b/test/e2e/readonlyInterface.explicitFalse.keywordUnspecified.ts @@ -4,21 +4,21 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: false, - tsReadonly: false + tsReadonlyPropertyDefaultValue: false } diff --git a/test/e2e/readonlyInterface.keywordFalse.ts b/test/e2e/readonlyInterface.keywordFalse.ts index 213b749f..5fdf65be 100644 --- a/test/e2e/readonlyInterface.keywordFalse.ts +++ b/test/e2e/readonlyInterface.keywordFalse.ts @@ -4,14 +4,14 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string' }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string' diff --git a/test/e2e/readonlyInterface.keywordTrue.ts b/test/e2e/readonlyInterface.keywordTrue.ts index c19df489..a0b2d7a8 100644 --- a/test/e2e/readonlyInterface.keywordTrue.ts +++ b/test/e2e/readonlyInterface.keywordTrue.ts @@ -4,14 +4,14 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string' }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string' diff --git a/test/e2e/readonlyInterface.keywordUnspecified.ts b/test/e2e/readonlyInterface.keywordUnspecified.ts index 35376198..cad91e8f 100644 --- a/test/e2e/readonlyInterface.keywordUnspecified.ts +++ b/test/e2e/readonlyInterface.keywordUnspecified.ts @@ -4,14 +4,14 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string' }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string' diff --git a/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.keywordFalse.ts b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.keywordFalse.ts index fa703e2c..07039057 100644 --- a/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.keywordFalse.ts +++ b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.keywordFalse.ts @@ -4,23 +4,23 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: {}, - tsReadonly: false + tsReadonlyPropertyDefaultValue: false } export const options = { diff --git a/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.keywordTrue.ts b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.keywordTrue.ts index 8c54bdce..d999b84c 100644 --- a/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.keywordTrue.ts +++ b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.keywordTrue.ts @@ -4,23 +4,23 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: {}, - tsReadonly: false + tsReadonlyPropertyDefaultValue: false } export const options = { diff --git a/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.keywordUnspecified.ts b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.keywordUnspecified.ts index f5717803..b50639ae 100644 --- a/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.keywordUnspecified.ts +++ b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesEmptySchema.explicitFalse.keywordUnspecified.ts @@ -4,23 +4,23 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: {}, - tsReadonly: false + tsReadonlyPropertyDefaultValue: false } export const options = { diff --git a/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.keywordFalse.ts b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.keywordFalse.ts index 6af2596e..efa47a20 100644 --- a/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.keywordFalse.ts +++ b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.keywordFalse.ts @@ -4,25 +4,25 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: { - tsReadonly: false + tsReadonlyProperty: false }, - tsReadonly: false + tsReadonlyPropertyDefaultValue: false } export const options = { diff --git a/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.keywordTrue.ts b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.keywordTrue.ts index 5c839e49..2acc5f59 100644 --- a/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.keywordTrue.ts +++ b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.keywordTrue.ts @@ -4,25 +4,25 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: { - tsReadonly: false + tsReadonlyProperty: false }, - tsReadonly: false + tsReadonlyPropertyDefaultValue: false } export const options = { diff --git a/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.keywordUnspecified.ts b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.keywordUnspecified.ts index d7b5191f..0dbd0ee4 100644 --- a/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.keywordUnspecified.ts +++ b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoFalse.explicitFalse.keywordUnspecified.ts @@ -4,25 +4,25 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: { - tsReadonly: false + tsReadonlyProperty: false }, - tsReadonly: false + tsReadonlyPropertyDefaultValue: false } export const options = { diff --git a/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.keywordFalse.ts b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.keywordFalse.ts index 2fbcf0db..2b80f5b6 100644 --- a/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.keywordFalse.ts +++ b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.keywordFalse.ts @@ -4,25 +4,25 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: { - tsReadonly: true + tsReadonlyProperty: true }, - tsReadonly: false + tsReadonlyPropertyDefaultValue: false } export const options = { diff --git a/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.keywordTrue.ts b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.keywordTrue.ts index 96b1cd8e..ace9edfb 100644 --- a/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.keywordTrue.ts +++ b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.keywordTrue.ts @@ -4,25 +4,25 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: { - tsReadonly: true + tsReadonlyProperty: true }, - tsReadonly: false + tsReadonlyPropertyDefaultValue: false } export const options = { diff --git a/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.keywordUnspecified.ts b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.keywordUnspecified.ts index e80729f3..f9efe601 100644 --- a/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.keywordUnspecified.ts +++ b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesRoTrue.explicitFalse.keywordUnspecified.ts @@ -4,25 +4,25 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: { - tsReadonly: true + tsReadonlyProperty: true }, - tsReadonly: false + tsReadonlyPropertyDefaultValue: false } export const options = { diff --git a/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.keywordFalse.ts b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.keywordFalse.ts index c2d7325f..07d876fe 100644 --- a/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.keywordFalse.ts +++ b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.keywordFalse.ts @@ -4,23 +4,23 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: true, - tsReadonly: false + tsReadonlyPropertyDefaultValue: false } export const options = { diff --git a/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.keywordTrue.ts b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.keywordTrue.ts index 349d1878..3d87893a 100644 --- a/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.keywordTrue.ts +++ b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.keywordTrue.ts @@ -4,23 +4,23 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: true, - tsReadonly: false + tsReadonlyPropertyDefaultValue: false } export const options = { diff --git a/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.keywordUnspecified.ts b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.keywordUnspecified.ts index 74efc434..f22c4515 100644 --- a/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.keywordUnspecified.ts +++ b/test/e2e/readonlyInterface.readonlyByDefault.additionalPropertiesTrue.explicitFalse.keywordUnspecified.ts @@ -4,23 +4,23 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: true, - tsReadonly: false + tsReadonlyPropertyDefaultValue: false } export const optionds = { diff --git a/test/e2e/readonlyInterface.readonlyByDefault.explicitFalse.keywordFalse.ts b/test/e2e/readonlyInterface.readonlyByDefault.explicitFalse.keywordFalse.ts index dcb9c45a..98b8a89e 100644 --- a/test/e2e/readonlyInterface.readonlyByDefault.explicitFalse.keywordFalse.ts +++ b/test/e2e/readonlyInterface.readonlyByDefault.explicitFalse.keywordFalse.ts @@ -4,23 +4,23 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: false, - tsReadonly: false + tsReadonlyPropertyDefaultValue: false } export const options = { diff --git a/test/e2e/readonlyInterface.readonlyByDefault.explicitFalse.keywordTrue.ts b/test/e2e/readonlyInterface.readonlyByDefault.explicitFalse.keywordTrue.ts index fc1e0c1d..661ca0a0 100644 --- a/test/e2e/readonlyInterface.readonlyByDefault.explicitFalse.keywordTrue.ts +++ b/test/e2e/readonlyInterface.readonlyByDefault.explicitFalse.keywordTrue.ts @@ -4,23 +4,23 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: false, - tsReadonly: false + tsReadonlyPropertyDefaultValue: false } export const options = { diff --git a/test/e2e/readonlyInterface.readonlyByDefault.explicitFalse.keywordUnspecified.ts b/test/e2e/readonlyInterface.readonlyByDefault.explicitFalse.keywordUnspecified.ts index 05559a66..24834142 100644 --- a/test/e2e/readonlyInterface.readonlyByDefault.explicitFalse.keywordUnspecified.ts +++ b/test/e2e/readonlyInterface.readonlyByDefault.explicitFalse.keywordUnspecified.ts @@ -4,23 +4,23 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: false, - tsReadonly: false + tsReadonlyPropertyDefaultValue: false } export const options = { diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordFalse.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordFalse.ts index 504fea8c..a67fd7ca 100644 --- a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordFalse.ts +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordFalse.ts @@ -4,19 +4,19 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: {} diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordTrue.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordTrue.ts index b7aae187..8fed8009 100644 --- a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordTrue.ts +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordTrue.ts @@ -4,19 +4,19 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: {} diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordUnspecified.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordUnspecified.ts index ca433793..e3d31a81 100644 --- a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordUnspecified.ts +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordUnspecified.ts @@ -4,19 +4,19 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: {} diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.keywordFalse.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.keywordFalse.ts index 961755e7..0327c8d4 100644 --- a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.keywordFalse.ts +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.keywordFalse.ts @@ -7,14 +7,14 @@ export const input = { }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string' }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: {} diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.keywordTrue.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.keywordTrue.ts index 67700587..921587a9 100644 --- a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.keywordTrue.ts +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.keywordTrue.ts @@ -7,14 +7,14 @@ export const input = { }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string' }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: {} diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.keywordUnspecified.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.keywordUnspecified.ts index 202c5e11..6e5d8944 100644 --- a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.keywordUnspecified.ts +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesEmptySchema.keywordUnspecified.ts @@ -7,18 +7,18 @@ export const input = { }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string' }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: {}, - tsReadonly: true + tsReadonlyPropertyDefaultValue: true } export const options = { diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordFalse.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordFalse.ts index 1580f7fb..da630e63 100644 --- a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordFalse.ts +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordFalse.ts @@ -4,23 +4,23 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: { - tsReadonly: false + tsReadonlyProperty: false } } diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordTrue.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordTrue.ts index 29fdc641..38af4e23 100644 --- a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordTrue.ts +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordTrue.ts @@ -4,23 +4,23 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: { - tsReadonly: false + tsReadonlyProperty: false } } diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordUnspecified.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordUnspecified.ts index 49fbb153..103cf785 100644 --- a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordUnspecified.ts +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordUnspecified.ts @@ -4,23 +4,23 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: { - tsReadonly: false + tsReadonlyProperty: false } } diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.keywordFalse.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.keywordFalse.ts index e6c78b76..58254b98 100644 --- a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.keywordFalse.ts +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.keywordFalse.ts @@ -7,18 +7,18 @@ export const input = { }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string' }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: { - tsReadonly: false + tsReadonlyProperty: false } } diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.keywordTrue.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.keywordTrue.ts index 277723ea..3c1bc9c1 100644 --- a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.keywordTrue.ts +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.keywordTrue.ts @@ -7,18 +7,18 @@ export const input = { }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string' }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: { - tsReadonly: false + tsReadonlyProperty: false } } diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.keywordUnspecified.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.keywordUnspecified.ts index f58afc9c..5373ae7c 100644 --- a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.keywordUnspecified.ts +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoFalse.keywordUnspecified.ts @@ -7,18 +7,18 @@ export const input = { }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string' }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: { - tsReadonly: false + tsReadonlyProperty: false } } diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordFalse.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordFalse.ts index 2fb22bcc..bea314f6 100644 --- a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordFalse.ts +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordFalse.ts @@ -4,23 +4,23 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: { - tsReadonly: true + tsReadonlyProperty: true } } diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordTrue.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordTrue.ts index 87f5d107..78dc2470 100644 --- a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordTrue.ts +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordTrue.ts @@ -4,23 +4,23 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: { - tsReadonly: true + tsReadonlyProperty: true } } diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordUnspecified.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordUnspecified.ts index 61865f7e..3e371c04 100644 --- a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordUnspecified.ts +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordUnspecified.ts @@ -4,23 +4,23 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: { - tsReadonly: true + tsReadonlyProperty: true } } diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordFalse.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordFalse.ts index e606454b..9184a0e0 100644 --- a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordFalse.ts +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordFalse.ts @@ -4,19 +4,19 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: true diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordTrue.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordTrue.ts index 218872ec..576a7578 100644 --- a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordTrue.ts +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordTrue.ts @@ -4,19 +4,19 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: true diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordUnspecified.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordUnspecified.ts index 22af8ee1..39c1ca09 100644 --- a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordUnspecified.ts +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordUnspecified.ts @@ -4,19 +4,19 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: true diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.keywordFalse.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.keywordFalse.ts index a04cbb33..fd1a3bd3 100644 --- a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.keywordFalse.ts +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.keywordFalse.ts @@ -7,14 +7,14 @@ export const input = { }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string' }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: true diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.keywordTrue.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.keywordTrue.ts index 887e3d39..5886e94b 100644 --- a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.keywordTrue.ts +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.keywordTrue.ts @@ -7,14 +7,14 @@ export const input = { }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string' }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: true diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.keywordUnspecified.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.keywordUnspecified.ts index d8180072..8c6468f3 100644 --- a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.keywordUnspecified.ts +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.additionalPropertiesTrue.keywordUnspecified.ts @@ -7,14 +7,14 @@ export const input = { }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string' }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: true diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.keywordFalse.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.keywordFalse.ts index c48af2e0..8a1cf276 100644 --- a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.keywordFalse.ts +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.keywordFalse.ts @@ -4,19 +4,19 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: false diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.keywordTrue.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.keywordTrue.ts index 9e05ab9d..312c73e0 100644 --- a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.keywordTrue.ts +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.keywordTrue.ts @@ -4,19 +4,19 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: false diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.keywordUnspecified.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.keywordUnspecified.ts index 2ea732d7..5a4257cf 100644 --- a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.keywordUnspecified.ts +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.explicitTrue.keywordUnspecified.ts @@ -4,19 +4,19 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: false diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.keywordFalse.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.keywordFalse.ts index 0aa62a2f..f1d8d668 100644 --- a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.keywordFalse.ts +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.keywordFalse.ts @@ -7,14 +7,14 @@ export const input = { }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string' }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: false diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.keywordTrue.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.keywordTrue.ts index c84feb95..0c32388b 100644 --- a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.keywordTrue.ts +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.keywordTrue.ts @@ -7,14 +7,14 @@ export const input = { }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string' }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: false diff --git a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.keywordUnspecified.ts b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.keywordUnspecified.ts index 226d7a6f..aa04e9da 100644 --- a/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.keywordUnspecified.ts +++ b/test/e2e/readonlyInterface.readonlyByDefault.readonlyObject.keywordUnspecified.ts @@ -7,14 +7,14 @@ export const input = { }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string' }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: false diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordFalse.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordFalse.ts index df1097c1..9eeb15ae 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordFalse.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordFalse.ts @@ -4,23 +4,23 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: {}, - tsReadonly: true + tsReadonlyPropertyDefaultValue: true } export const options = { diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordTrue.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordTrue.ts index c0b24508..c13b38b5 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordTrue.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordTrue.ts @@ -4,23 +4,23 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: {}, - tsReadonly: true + tsReadonlyPropertyDefaultValue: true } export const options = { diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordUnspecified.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordUnspecified.ts index 6dc8b0aa..36a97a48 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordUnspecified.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.explicitTrue.keywordUnspecified.ts @@ -4,21 +4,21 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: {}, - tsReadonly: true + tsReadonlyPropertyDefaultValue: true } diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.keywordFalse.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.keywordFalse.ts index 6c522484..1bb029b0 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.keywordFalse.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.keywordFalse.ts @@ -7,18 +7,18 @@ export const input = { }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string' }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: {}, - tsReadonly: true + tsReadonlyPropertyDefaultValue: true } export const options = { diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.keywordTrue.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.keywordTrue.ts index 2dd9762d..84e5b88f 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.keywordTrue.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.keywordTrue.ts @@ -7,18 +7,18 @@ export const input = { }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string' }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: {}, - tsReadonly: true + tsReadonlyPropertyDefaultValue: true } export const options = { diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.keywordUnspecified.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.keywordUnspecified.ts index 19d72564..5a9a002e 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.keywordUnspecified.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesEmptySchema.keywordUnspecified.ts @@ -7,16 +7,16 @@ export const input = { }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string' }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: {}, - tsReadonly: true + tsReadonlyPropertyDefaultValue: true } diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordFalse.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordFalse.ts index 7b566833..b70d8753 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordFalse.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordFalse.ts @@ -4,25 +4,25 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: { - tsReadonly: false + tsReadonlyProperty: false }, - tsReadonly: true + tsReadonlyPropertyDefaultValue: true } export const options = { diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordTrue.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordTrue.ts index b002adb8..2824934b 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordTrue.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordTrue.ts @@ -4,25 +4,25 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: { - tsReadonly: false + tsReadonlyProperty: false }, - tsReadonly: true + tsReadonlyPropertyDefaultValue: true } export const options = { diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordUnspecified.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordUnspecified.ts index 09582aad..34294862 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordUnspecified.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.explicitTrue.keywordUnspecified.ts @@ -4,23 +4,23 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: { - tsReadonly: false + tsReadonlyProperty: false }, - tsReadonly: true + tsReadonlyPropertyDefaultValue: true } diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.keywordFalse.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.keywordFalse.ts index e6c515c2..50710043 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.keywordFalse.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.keywordFalse.ts @@ -7,20 +7,20 @@ export const input = { }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string' }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: { - tsReadonly: false + tsReadonlyProperty: false }, - tsReadonly: true + tsReadonlyPropertyDefaultValue: true } export const options = { diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.keywordTrue.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.keywordTrue.ts index 7ee7b882..e3b208a7 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.keywordTrue.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.keywordTrue.ts @@ -7,20 +7,20 @@ export const input = { }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string' }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: { - tsReadonly: false + tsReadonlyProperty: false }, - tsReadonly: true + tsReadonlyPropertyDefaultValue: true } export const options = { diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.keywordUnspecified.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.keywordUnspecified.ts index bb762f39..a1cbed7c 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.keywordUnspecified.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoFalse.keywordUnspecified.ts @@ -7,18 +7,18 @@ export const input = { }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string' }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: { - tsReadonly: false + tsReadonlyProperty: false }, - tsReadonly: true + tsReadonlyPropertyDefaultValue: true } diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordFalse.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordFalse.ts index 00dc2706..9059a075 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordFalse.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordFalse.ts @@ -4,25 +4,25 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: { - tsReadonly: true + tsReadonlyProperty: true }, - tsReadonly: true + tsReadonlyPropertyDefaultValue: true } export const options = { diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordTrue.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordTrue.ts index e3468479..98479461 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordTrue.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordTrue.ts @@ -4,25 +4,25 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: { - tsReadonly: true + tsReadonlyProperty: true }, - tsReadonly: true + tsReadonlyPropertyDefaultValue: true } export const options = { diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordUnspecified.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordUnspecified.ts index f79daf59..a9089fb7 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordUnspecified.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesRoTrue.explicitTrue.keywordUnspecified.ts @@ -4,23 +4,23 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: { - tsReadonly: true + tsReadonlyProperty: true }, - tsReadonly: true + tsReadonlyPropertyDefaultValue: true } diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordFalse.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordFalse.ts index 0ba3f134..41ca28a8 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordFalse.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordFalse.ts @@ -4,23 +4,23 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: true, - tsReadonly: true + tsReadonlyPropertyDefaultValue: true } export const options = { diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordTrue.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordTrue.ts index 5ef2c956..9e3bfcff 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordTrue.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordTrue.ts @@ -4,23 +4,23 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: true, - tsReadonly: true + tsReadonlyPropertyDefaultValue: true } export const options = { diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordUnspecified.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordUnspecified.ts index e8fa23f6..5291560c 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordUnspecified.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.explicitTrue.keywordUnspecified.ts @@ -4,21 +4,21 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: true, - tsReadonly: true + tsReadonlyPropertyDefaultValue: true } diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.keywordFalse.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.keywordFalse.ts index 848e14b9..83358fbd 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.keywordFalse.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.keywordFalse.ts @@ -7,18 +7,18 @@ export const input = { }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string' }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: true, - tsReadonly: true + tsReadonlyPropertyDefaultValue: true } export const options = { diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.keywordTrue.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.keywordTrue.ts index 13ac5c43..590f7326 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.keywordTrue.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.keywordTrue.ts @@ -7,18 +7,18 @@ export const input = { }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string' }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: true, - tsReadonly: true + tsReadonlyPropertyDefaultValue: true } export const options = { diff --git a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.keywordUnspecified.ts b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.keywordUnspecified.ts index ea1e4344..8da003d2 100644 --- a/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.keywordUnspecified.ts +++ b/test/e2e/readonlyInterface.readonlyObject.additionalPropertiesTrue.keywordUnspecified.ts @@ -7,16 +7,16 @@ export const input = { }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string' }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: true, - tsReadonly: true + tsReadonlyPropertyDefaultValue: true } diff --git a/test/e2e/readonlyInterface.readonlyObject.explicitTrue.keywordFalse.ts b/test/e2e/readonlyInterface.readonlyObject.explicitTrue.keywordFalse.ts index fbcafed7..c8684ffc 100644 --- a/test/e2e/readonlyInterface.readonlyObject.explicitTrue.keywordFalse.ts +++ b/test/e2e/readonlyInterface.readonlyObject.explicitTrue.keywordFalse.ts @@ -4,23 +4,23 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: false, - tsReadonly: true + tsReadonlyPropertyDefaultValue: true } export const options = { diff --git a/test/e2e/readonlyInterface.readonlyObject.explicitTrue.keywordTrue.ts b/test/e2e/readonlyInterface.readonlyObject.explicitTrue.keywordTrue.ts index 6cf11992..c230f0be 100644 --- a/test/e2e/readonlyInterface.readonlyObject.explicitTrue.keywordTrue.ts +++ b/test/e2e/readonlyInterface.readonlyObject.explicitTrue.keywordTrue.ts @@ -4,23 +4,23 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: false, - tsReadonly: true + tsReadonlyPropertyDefaultValue: true } export const options = { diff --git a/test/e2e/readonlyInterface.readonlyObject.explicitTrue.keywordUnspecified.ts b/test/e2e/readonlyInterface.readonlyObject.explicitTrue.keywordUnspecified.ts index 67313aa1..fbd78875 100644 --- a/test/e2e/readonlyInterface.readonlyObject.explicitTrue.keywordUnspecified.ts +++ b/test/e2e/readonlyInterface.readonlyObject.explicitTrue.keywordUnspecified.ts @@ -4,21 +4,21 @@ export const input = { properties: { a: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string', - tsReadonly: true + tsReadonlyProperty: true }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: false, - tsReadonly: true + tsReadonlyPropertyDefaultValue: true } diff --git a/test/e2e/readonlyInterface.readonlyObject.keywordFalse.ts b/test/e2e/readonlyInterface.readonlyObject.keywordFalse.ts index f65117d3..80c3a9c0 100644 --- a/test/e2e/readonlyInterface.readonlyObject.keywordFalse.ts +++ b/test/e2e/readonlyInterface.readonlyObject.keywordFalse.ts @@ -7,18 +7,18 @@ export const input = { }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string' }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: false, - tsReadonly: true + tsReadonlyPropertyDefaultValue: true } export const options = { diff --git a/test/e2e/readonlyInterface.readonlyObject.keywordTrue.ts b/test/e2e/readonlyInterface.readonlyObject.keywordTrue.ts index 67a55292..094988eb 100644 --- a/test/e2e/readonlyInterface.readonlyObject.keywordTrue.ts +++ b/test/e2e/readonlyInterface.readonlyObject.keywordTrue.ts @@ -7,18 +7,18 @@ export const input = { }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string' }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: false, - tsReadonly: true + tsReadonlyPropertyDefaultValue: true } export const options = { diff --git a/test/e2e/readonlyInterface.readonlyObject.keywordUnspecified.ts b/test/e2e/readonlyInterface.readonlyObject.keywordUnspecified.ts index e4bd9dfc..9fa6f955 100644 --- a/test/e2e/readonlyInterface.readonlyObject.keywordUnspecified.ts +++ b/test/e2e/readonlyInterface.readonlyObject.keywordUnspecified.ts @@ -7,16 +7,16 @@ export const input = { }, b: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false }, c: { type: 'string' }, d: { type: 'string', - tsReadonly: false + tsReadonlyProperty: false } }, additionalProperties: false, - tsReadonly: true + tsReadonlyPropertyDefaultValue: true } From 8f980416d30824338f66eb620f75d7d3d237100a Mon Sep 17 00:00:00 2001 From: Ruby Tunaley Date: Fri, 24 Sep 2021 04:03:32 +1000 Subject: [PATCH 09/12] ESLint fixes, README clarifications. --- README.md | 8 ++++---- src/generator.ts | 8 +++++++- src/parser.ts | 11 ++++++++--- src/typesOfSchema.ts | 9 ++++++++- 4 files changed, 27 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 6b3834d8..ef976578 100644 --- a/README.md +++ b/README.md @@ -230,7 +230,7 @@ json2ts -i foo.json -o foo.d.ts --style.singleQuote --no-style.semi

-- `tsReadonlyPropertyDefaultValue`: Sets the default value of `tsReadonlyProperty` for an object schema's properties. +- `tsReadonlyPropertyDefaultValue`: Sets the default value of `tsReadonlyProperty` for an object schema's properties. This is the same as passing the object type to `Readonly`, except that properties can be explicitly marked as non-readonly. ```jsonc { @@ -238,8 +238,8 @@ json2ts -i foo.json -o foo.d.ts --style.singleQuote --no-style.semi "tsReadonlyPropertyDefaultValue": true, "properties": { // This property is readonly - "foo": { }, - // This property is mutable because we explicitly override the object's default + "foo": {}, + // This property is NOT readonly because we explicitly override the object's default "bar": { "tsReadonlyProperty": false } @@ -249,7 +249,7 @@ json2ts -i foo.json -o foo.d.ts --style.singleQuote --no-style.semi } ``` - Note that this has no effect on sub-objects. + Note that this property has no effect on sub-objects. ```jsonc // readonlyByDefault: false diff --git a/src/generator.ts b/src/generator.ts index 496fb16f..49d49d8e 100644 --- a/src/generator.ts +++ b/src/generator.ts @@ -318,7 +318,13 @@ function generateInterface(ast: TInterface, options: Options): string { .filter(_ => !_.isPatternProperty && !_.isUnreachableDefinition) .map( ({isRequired, isReadonlyParam, keyName, ast}) => - [isRequired, isReadonlyParam, keyName, ast, generateType(ast, options)] as [boolean, boolean, string, AST, string] + [isRequired, isReadonlyParam, keyName, ast, generateType(ast, options)] as [ + boolean, + boolean, + string, + AST, + string + ] ) .map( ([isRequired, isReadonlyParam, keyName, ast, type]) => diff --git a/src/parser.ts b/src/parser.ts index feca2ad5..ec7be4a4 100644 --- a/src/parser.ts +++ b/src/parser.ts @@ -382,7 +382,8 @@ via the \`patternProperty\` "${key}".` isPatternProperty: !singlePatternProperty, isRequired: singlePatternProperty || includes(schema.required || [], key), isUnreachableDefinition: false, - isReadonlyParam: value.tsReadonlyProperty ?? schema.tsReadonlyPropertyDefaultValue ?? options.readonlyByDefault, + isReadonlyParam: + value.tsReadonlyProperty ?? schema.tsReadonlyPropertyDefaultValue ?? options.readonlyByDefault, keyName: singlePatternProperty ? '[k: string]' : key } }) @@ -401,7 +402,8 @@ via the \`definition\` "${key}".` isPatternProperty: false, isRequired: includes(schema.required || [], key), isUnreachableDefinition: true, - isReadonlyParam: value.tsReadonlyProperty ?? schema.tsReadonlyPropertyDefaultValue ?? options.readonlyByDefault, + isReadonlyParam: + value.tsReadonlyProperty ?? schema.tsReadonlyPropertyDefaultValue ?? options.readonlyByDefault, keyName: key } }) @@ -436,7 +438,10 @@ via the \`definition\` "${key}".` isRequired: true, isUnreachableDefinition: false, // Explicit additionalProperties readonly state supercedes generic readonly state - isReadonlyParam: schema.additionalProperties.tsReadonlyProperty ?? schema.tsReadonlyPropertyDefaultValue ?? options.readonlyByDefault, + isReadonlyParam: + schema.additionalProperties.tsReadonlyProperty ?? + schema.tsReadonlyPropertyDefaultValue ?? + options.readonlyByDefault, keyName: '[k: string]' }) } diff --git a/src/typesOfSchema.ts b/src/typesOfSchema.ts index 3be2d85a..fbc5360f 100644 --- a/src/typesOfSchema.ts +++ b/src/typesOfSchema.ts @@ -32,7 +32,14 @@ export function typesOfSchema(schema: JSONSchema): readonly [SchemaType, ...Sche } function nonCustonKeys(obj: JSONSchema): string[] { - return Object.keys(obj).filter(key => key !== 'tsEnumNames' && key !== 'tsType' && key !== 'tsReadonly' && key !== 'tsReadonlyProperty' && key !== 'tsReadonlyPropertyDefaultValue') + return Object.keys(obj).filter( + key => + key !== 'tsEnumNames' && + key !== 'tsType' && + key !== 'tsReadonly' && + key !== 'tsReadonlyProperty' && + key !== 'tsReadonlyPropertyDefaultValue' + ) } const matchers: Record boolean> = { From e7980efc8af6883f92abc95bb531b0c069232229 Mon Sep 17 00:00:00 2001 From: Ruby Tunaley Date: Fri, 24 Sep 2021 05:37:09 +1000 Subject: [PATCH 10/12] Readonly types - Added test for tsType and tsReadonlyProperty on the same property schema. --- test/__snapshots__/test/test.ts.md | 16 ++++++++++++++++ test/__snapshots__/test/test.ts.snap | Bin 39729 -> 39760 bytes test/e2e/readonlyInterface.tsType.ts | 11 +++++++++++ 3 files changed, 27 insertions(+) create mode 100644 test/e2e/readonlyInterface.tsType.ts diff --git a/test/__snapshots__/test/test.ts.md b/test/__snapshots__/test/test.ts.md index 00083c9a..269287f9 100644 --- a/test/__snapshots__/test/test.ts.md +++ b/test/__snapshots__/test/test.ts.md @@ -13508,3 +13508,19 @@ Generated by [AVA](https://avajs.dev). ␊ export type ReadonlyTupleReadonlyByDefault = readonly [string, ...string[]];␊ ` + +## readonlyInterface.tsType.js + +> Expected output to match snapshot for e2e test: readonlyInterface.tsType.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export interface ReadonlyInterface {␊ + readonly a: MyCustomType;␊ + }␊ + ` diff --git a/test/__snapshots__/test/test.ts.snap b/test/__snapshots__/test/test.ts.snap index 4785aba7f927869bc298f4b1580def131f0b2f9d..51e69122f3e0e0aa925f8035f1bac09f3b25790c 100644 GIT binary patch literal 39760 zcmZsBWl$YKmo^STgS#XIcXxMpcXxMp2u>ilyX(c>34W2_7lOOHT==MczuKzZ+W9qe z`poI6(>+I?r$sbH$kZH7oZYOQ+{rvy5uqS>5nXG%sYL%s8tarFf8)U=jYWX?uM7H& z7~UI8!;LE(2fY*#%9TW#+Q$93L^L=lDV$(!6GW-w+9BY0sY+cGs@)$73tK9!f>lBz zi!CAyi&O-qsxA%#EAcEM0rTN=dA@nEdETOo(LMP{(UI+Au{lM@c6-pXd_xkmV|{W_ z8qZl%EpV2Kbcw2%SX@1i^>Uo}4&FSTMzh2_mM9xSJ9+^(CXFf^P{b7BzdnUO_EuuO z|7)ORsR#QD5{XGg_bElBY$*+I!D&#_*4U^+A3V^geSrM-{LjVYwu)HTiA{DceSB5) zc6)ie_%Q)p|Hh(hkQwR_GgLYP2v9(rXX!&hoC18ut1Rr15A}*FshVYmjt}nf7aV-^ z?kVZvI_!~-i3Jr`e17JezD8RmRA+Jo`Ca^t4Dp3a1Xvo+8xC~6z0FrsdVP7M>_N9V z(Cm>j?Wsjodus$WwVCLAFI|J@tGQ!>;%3%~>(o^zx$%zyR*DM50*9;$pcY@I_`qV*}!w7r|oiTIs$%kV=2IO|6>mC z<*#r*(H3AkVh`Sx@@(Tp&9HVou$aZ&7f#}D9A2iuy6@qBz-@eKdeDXc&r#qqyvpKv zWEX*Z=l=Yh9{~JDK~Zi=t;P!6G|He zo)kmezV`YB?lB_Qv{+ot=fYQ7*&u_>*(Lrm;cM1Q?48wwY^BZ2bJSQBvNUgM$8_#K zGoJ6{RO5F%~i7j$11b} z@q9;-GooSxHwAY)r22@wxE-(SWw7E4f8oS*($!69nZvLQTH5TY;XSJQyspBRSLzBU8!RqnB-Ozn2kwVkUz) z)&)G?){LSo5AWN=?S)Hl@3NW~vBB50`LI!-4MlL~;?0atK2`3nk%8w~HjdrN=RRq` zVpc1DWd1Ak*72TSxf*3i*!H=?R8&xw2U9YDKBv}yV7COlhr3grgi#=B3Qd&{*yUDn zFif~56GY_m^F3@WK}&fQr6ktXkjWd_k<}>#plz*0pfADhDqs
$z zsszM)`6HPmK0WbQ@~?uvYmlSdSp5PCzml1C^>nb#)Aq)Q5qR^X*G5lMP+P#CAimIJ z3wCPM%M*`n>-2i4nx_X1<(VpG6o{e+dFygv)MKl}0D1^?pUas<(fwQ1_d&-N}@1 zZ2(9f1s;>Cs4pHr>>9rL&S}11y_%8E=95U79rX)fVF$3%cJAJw+t_TKzl0n4TpqGV zzF(T*(VSOC_y`@`89kW}V2Dj*1=%1QfN2Kb=Bp~m0M_Hr4Z3InytmZxg%N&`w+DJb zWs3>mo#iiwxIy#wlvAb%Yd)kBBLQvKOXp5Xb*

d8;P6%aF$Sf&-=kCh-=2^^W@u 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 diff --git a/test/e2e/readonlyInterface.tsType.ts b/test/e2e/readonlyInterface.tsType.ts new file mode 100644 index 00000000..b1dbf540 --- /dev/null +++ b/test/e2e/readonlyInterface.tsType.ts @@ -0,0 +1,11 @@ +export const input = { + type: 'object', + required: ['a'], + properties: { + a: { + tsType: 'MyCustomType', + tsReadonlyProperty: true + } + }, + additionalProperties: false +} From 8dc236e855ba51e2cecf7885b29a3c2ce0261439 Mon Sep 17 00:00:00 2001 From: Ruby Tunaley Date: Fri, 24 Sep 2021 05:49:13 +1000 Subject: [PATCH 11/12] Readonly types - Fixed bug where array schemas with a maxItems property weren't allowed to be readonly. --- src/generator.ts | 21 +++++++++++---------- test/__snapshots__/test/test.ts.md | 14 ++++++++++++++ test/__snapshots__/test/test.ts.snap | Bin 39760 -> 39800 bytes test/e2e/readonlyTuple.maxItems.ts | 9 +++++++++ 4 files changed, 34 insertions(+), 10 deletions(-) create mode 100644 test/e2e/readonlyTuple.maxItems.ts diff --git a/src/generator.ts b/src/generator.ts index 49d49d8e..dc26207f 100644 --- a/src/generator.ts +++ b/src/generator.ts @@ -12,7 +12,8 @@ import { TIntersection, TNamedInterface, TUnion, - T_UNKNOWN + T_UNKNOWN, + TTuple } from './types/AST' import {log, toSafeString} from './utils' @@ -238,7 +239,14 @@ function generateRawType(ast: AST, options: Options): string { } function paramsToString(params: string[]): string { - return '[' + params.join(', ') + ']' + let type = '[' + params.join(', ') + ']' + // `Readonly` where T is a tuple type is unsupported in versions of TypeScript prior to the introduction + // of the `readonly` keyword for array/tuple types, so don't bother adding it if options.readonlyKeyword is + // false + // Sources: + // https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-4.html#a-new-syntax-for-readonlyarray + // https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-4.html#readonly-tuples + return (ast as TTuple).isReadonly && options.readonlyKeyword ? 'readonly ' + type : type } const paramsList = astParams.map(param => generateType(param, options)) @@ -283,14 +291,7 @@ function generateRawType(ast: AST, options: Options): string { } // no max items so only need to return one type - const type = paramsToString(addSpreadParam(paramsList)) - // `Readonly` where T is a tuple type is unsupported in versions of TypeScript prior to the introduction - // of the `readonly` keyword for array/tuple types, so don't bother adding it if options.readonlyKeyword is - // false - // Sources: - // https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-4.html#a-new-syntax-for-readonlyarray - // https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-4.html#readonly-tuples - return ast.isReadonly && options.readonlyKeyword ? 'readonly ' + type : type + return paramsToString(addSpreadParam(paramsList)) })() case 'UNION': return generateSetOperation(ast, options) diff --git a/test/__snapshots__/test/test.ts.md b/test/__snapshots__/test/test.ts.md index 269287f9..6f81e0d1 100644 --- a/test/__snapshots__/test/test.ts.md +++ b/test/__snapshots__/test/test.ts.md @@ -13524,3 +13524,17 @@ Generated by [AVA](https://avajs.dev). readonly a: MyCustomType;␊ }␊ ` + +## readonlyTuple.maxItems.js + +> Expected output to match snapshot for e2e test: readonlyTuple.maxItems.js + + `/* tslint:disable */␊ + /**␊ + * This file was automatically generated by json-schema-to-typescript.␊ + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,␊ + * and run json-schema-to-typescript to regenerate this file.␊ + */␊ + ␊ + export type ReadonlyTuple = readonly [string] | readonly [string, string] | readonly [string, string, string];␊ + ` diff --git a/test/__snapshots__/test/test.ts.snap b/test/__snapshots__/test/test.ts.snap index 51e69122f3e0e0aa925f8035f1bac09f3b25790c..62aea0495a0c2da61b94f62d48e0d8408a4d98eb 100644 GIT binary patch literal 39800 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 z zh-=_=)FiT3L-aFDTKIT8TrVZ|YG-%Z1a^4N>)Mmp%UV0DFW%2PXD4soP~9^8E;26&Zf_jz_#N3(S5a9K3&`|$2cQ?`(;6cKs{U5Q`9 zSuC627gIUpBR-z4w&&~9fhcGRg)NALeG=z`SV3FN{)=57SZg#pXyiw>q+EBZ%b(ng zzr~^bm9n*+oZT-4JpPqd7DAEnOc+|pkojjw>A<2z*&Z|V&u%))0SFSeujq`ndhzi9 zj2H?gmdEt@3-{D17Rf0a@t-z{x;-A>{|*|v&t^mYi~QAFDge$=HwNl6{zo$M@lV>3 z+>J9PmYhN)8Jy~cgt+^qyqT1ARnvrWY0tSHJCkeqj-0UO9M=ls&c=zt4mze~iR=1J z!iTxjcy#2VkgSkQvIg~gW8}Q2hB_pHv)W_76SU?ODF-sh9|tlHlt{Kei+_XN<`=20 z5Jg6r6U;anK8dB=*Mf{riYxnvtoH2@H^XYvoA#4zrpH*UM;oYx{9NgC34n-$^vE9u zp~_gi++Pb+EB>Aw7CW}z`mS!!&PI>U_Z#T?)>L(;GrV2dv96tcwL^8H`=hzG2lV6& zAMy1t`eCPN#`>L|Wo5Chj;{Ve83&nF20PZwojbHTZbHkmW)yEn)tD$G%W8P?A1hGv z*_rjcZ!ac&AV??Lg-1OipxAMCVb>HC57w1aiJ50@DV;|04D`moFPqFB_p)3qhFr1IwjKQ}@mZC6-!Zt~BU% z#EM&e{a>l14MoVicq0*Xl3LTz zGN0Q2!8}H$XiuT=lAah&8Ifq!UAyBfTK}ER+kc8>+38D0`bfC%crwLz+jz|!cNY

0}^mLK=-7H!E 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

d8;P6%aF$Sf&-=kCh-=2^^W@u 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 Date: Fri, 24 Sep 2021 05:53:20 +1000 Subject: [PATCH 12/12] Fixed bad code style on an import statement. --- test/testCLI.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/testCLI.ts b/test/testCLI.ts index 73a609e3..51008d2c 100644 --- a/test/testCLI.ts +++ b/test/testCLI.ts @@ -3,7 +3,7 @@ import {execSync} from 'child_process' import {readFileSync, unlinkSync, readdirSync, existsSync, lstatSync} from 'fs' import {resolve, join} from 'path' import rimraf = require('rimraf') -import { forcePosixLikePath } from '../src/utils' +import {forcePosixLikePath} from '../src/utils' export function run() { test('pipe in, pipe out', t => {